Ad Code

Responsive Advertisement

COMO CRIAR UM TEXDRAWN CLICAVEL

 O script

Começaremos inicializando nossos textdraws e configurando-os. Este é apenas um copiar e colar do editor de textdraw, nada para explicar aqui.
Código:
#include <a_samp>
novo texto: teleportBox;
novo texto: teletransporteLS;
novo texto: teletransporteSF;
novo texto: teletransporteLV;
public OnFilterScriptInit ()
{
	imprimir ("\ n --------------------------------------");
	print ("Teletransporte de Textdraw - tuto para mostrar \ n como funciona a seleção de textdraw");
	imprimir ("-------------------------------------- \ n");
	
	teleportBox = TextDrawCreate (320.000000, 143.000000, "~ n ~ Menu de teletransporte ~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~~ n ~ _") ;
	TextDrawAlignment (teleportBox, 2);
	TextDrawBackgroundColor (teleportBox, 255);
	TextDrawFont (teleportBox, 2);
	TextDrawLetterSize (teleportBox, 0.500000, 1.000000);
	TextDrawColor (teleportBox, -1);
	TextDrawSetOutline (teleportBox, 0);
	TextDrawSetProportional (teleportBox, 1);
	TextDrawSetShadow (teleportBox, 1);
	TextDrawUseBox (teleportBox, 1);
	TextDrawBoxColor (teleportBox, 255);
	TextDrawTextSize (teleportBox, 45,000000, 115,000000);

	teletransporteLS = TextDrawCreate (320.000000, 180.000000, "Los Santos ~ n ~ Airport");
	TextDrawAlignment (teletransporteLS, 2);
	TextDrawBackgroundColor (teletransporteLS, 255);
	TextDrawFont (teletransporteLS, 2);
	TextDrawLetterSize (teletransporteLS, 0,260000, 0,799999);
	TextDrawColor (teletransporteLS, -1);
	TextDrawSetOutline (teletransporteLS, 0);
	TextDrawSetProportional (teletransporteLS, 1);
	TextDrawSetShadow (teletransporteLS, 1);

	teletransporteSF = TextDrawCreate (320.000000, 205.000000, "San Fierro ~ n ~ Airport");
	TextDrawAlignment (teletransporteSF, 2);
	TextDrawBackgroundColor (teletransporteSF, 255);
	TextDrawFont (teletransporteSF, 2);
	TextDrawLetterSize (teletransporteSF, 0,260000, 0,799999);
	TextDrawColor (teletransporteSF, -1);
	TextDrawSetOutline (teletransporteSF, 0);
	TextDrawSetProportional (teletransporteSF, 1);
	TextDrawSetShadow (teletransporteSF, 1);

	teletransporteLV = TextDrawCreate (320,000000, 230,000000, "Las Venturas ~ n ~ Aeroporto");
	TextDrawAlignment (teletransporte LV, 2);
	TextDrawBackgroundColor (teletransporteLV, 255);
	TextDrawFont (teletransporte LV, 2);
	TextDrawLetterSize (teletransporteLV, 0,260000, 0,799999);
	TextDrawColor (teletransportar LV, -1);
	TextDrawSetOutline (teletransporteLV, 0);
	TextDrawSetProportional (teletransporteLV, 1);
	TextDrawSetShadow (teletransporte LV, 1);
	return 1;
}

A fim de tornar os textdraws clicáveis, precisaremos usar TextDrawSetSelectAble. Este código irá na parte inferior do OnGameModeInit (verifique o script de origem se você tiver problemas com ele):
Código:
TextDrawSetSelectable (teleportBox, false);
TextDrawSetSelectable (teletransporteLS, verdadeiro);
TextDrawSetSelectable (teleportSF, true);
TextDrawSetSelectable (teleportLV, true);

Estou usando um script de filtro para este tutorial, então preciso destruir os textdraws quando estou descarregando o script.
Código:
public OnFilterScriptExit ()
{
	TextDrawDestroy (teleportBox);
	TextDrawDestroy (teletransporteLS);
	TextDrawDestroy (teletransporteSF);
	TextDrawDestroy (teletransporteLV);
	return 1;
}

Estou usando um comando para buscar o menu de teletransporte. Eu sei que estou usando strcmp, mas não vou usar ZCMD para apenas um comando simples.

Neste comando estaremos mostrando os textdraws para o jogador e permitindo que ele selecione os textdraws:
Código:
public OnPlayerCommandText (playerid, cmdtext [])
{
	if (! strcmp ("/ teleport", cmdtext, true))
	{
	    TextDrawShowForPlayer (playerid, teleportBox); // Mostra a caixa
	    TextDrawShowForPlayer (playerid, teletransporteLS); // Mostra a opção LS
	    TextDrawShowForPlayer (playerid, teleportSF); // Mostra a opção SF
	    TextDrawShowForPlayer (playerid, teleportLV); // Mostra a opção LV

	    SelectTextDraw (playerid, 0xA3B4C5FF); // Permite que o jogador selecione desenhos de texto.
            // O segundo parâmetro é a cor para a qual o textdraw muda quando você passa o mouse sobre ele. 
            // Você também pode usar coisas como COLOR_RED, a escolha é sua.
		return 1;
	}
	return 0;
}

Espero que você tenha entendido tudo até agora. Se não, deixe um comentário.

O jogador agora é capaz de selecionar textdraws (ou, pelo menos, os textdraws que permitimos a ele selecionar usando TextDrawSetSelectable). Depois que ele selecionou e clicou em um desenho de texto, precisamos processar seu 'clique'.

Vou postar o código básico:
Código:
public OnPlayerClickTextDraw (playerid, Texto: clickedid)
{
	if (clickedid == teleportLS) // Se o jogador clicou no textdraw teleportLS, teletransporte-o para lá!
	{
		SetPlayerPos (playerid, 1630.2030, -2328.9673,13.5469);
		SetPlayerFacingAngle (playerid, 0,9392);
	}
	else if (clickedid == teleportSF) // O mesmo que acima, mas para SF
	{
		SetPlayerPos (playerid, -1424,6083, -290,9622, 14,1484);
		SetPlayerFacingAngle (playerid, 134.9570);
	}
	else if (clickedid == teleportLV) // Mesmo, mas para LV
	{
		SetPlayerPos (playerid, 1688.7990, 1447.7753, 10.7675);
		SetPlayerFacingAngle (playerid, 267.3902);
	}

                     // Esconda os desenhos de texto após o jogador se teletransportar.
    TextDrawHideForPlayer (playerid, teleportBox);
    TextDrawHideForPlayer (playerid, teletransporteLS);
    TextDrawHideForPlayer (playerid, teleportSF);
    TextDrawHideForPlayer (playerid, teleportLV);

	CancelSelectTextDraw (playerid); // Tudo funcionou perfeitamente, agora pare o jogador para poder selecionar shizzle.
	return 1;
}

'Feito', você pode dizer. No entanto, há uma falha ao usar CancelSelectTextDraw: ele chama OnPlayerClickTextDraw. Este código reSoltar em um retorno

Precisamos corrigir este código. CancelSelectTextDraw chama OnPlayerClickTextDraw com INVALID_TEXT_DRAW, portanto, a solução alternativa é fácil:
Código:
public OnPlayerClickTextDraw (playerid, Texto: clickedid)
{
	if (_: clickedid! = INVALID_TEXT_DRAW) // Se o jogador clicou em um desenho de texto válido, continue com a codificação. (_: var remove a tag Text: para evitar incompatibilidade de tags)
	{
		if (clickedid == teletransporteLS)
		{
			SetPlayerPos (playerid, 1630.2030, -2328.9673,13.5469);
			SetPlayerFacingAngle (playerid, 0,9392);
		}
		else if (clickedid == teleportSF)
		{
			SetPlayerPos (playerid, -1424,6083, -290,9622, 14,1484);
			SetPlayerFacingAngle (playerid, 134.9570);
		}
		else if (clickedid == teleportLV)
		{
			SetPlayerPos (playerid, 1688.7990, 1447.7753, 10.7675);
			SetPlayerFacingAngle (playerid, 267.3902);
		}

    	TextDrawHideForPlayer (playerid, teleportBox);
	    TextDrawHideForPlayer (playerid, teletransporteLS);
    	TextDrawHideForPlayer (playerid, teleportSF);
	    TextDrawHideForPlayer (playerid, teleportLV);
		CancelSelectTextDraw (playerid); // Isso realmente chamará OnPlayerClickTextDraw novamente, mas com um ID de 65535. O código acima impede que resulte em um loop eterno.
	}
	return 1;
}

Espero que você tenha aprendido algo com este tutorial. Se você ainda tiver dúvidas, poste-as neste tópico (Não me mande PM).

Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed