12.08.2014, 16:26
Textdraws Clicбveis
Neste tutorial, vocк irб aprender a fazer textdraws clicбveis com as mais diversas aplicaзхes, sendo somente limitado pela sua imaginaзгo!
Para realizar o serviзo, vocк necessitarб de algumas ferramentas. Elas sгo opcionais, porйm fica bem mais fбcil de fazer Textdraws com as ferramentas.
https://sampforum.blast.hk/showthread.php?tid=376758 - iPLEOMAX's Textdraw Editor
https://sampforum.blast.hk/showthread.php?tid=291722 - Lorenc's Sprite Browser
Para realizar o serviзo, vocк necessitarб de algumas ferramentas. Elas sгo opcionais, porйm fica bem mais fбcil de fazer Textdraws com as ferramentas.
https://sampforum.blast.hk/showthread.php?tid=376758 - iPLEOMAX's Textdraw Editor
https://sampforum.blast.hk/showthread.php?tid=291722 - Lorenc's Sprite Browser
Criando as textdraws
No exemplo deste tutorial, eu irei fazer um pequeno sistema de registro por textdraws clicбveis, que vocк pode conferir (e testб-lo em aзгo) no seguinte servidor: 208.115.224.233:7777. Caso vocк nгo sabia como desenhar textdraws no iPLEOMAX's Textdraw Editor, entre no link providenciado acima e veja o vнdeo com o tutorial.
O textdraw deste tutorial (apуs finalizado) terб o seguinte aspecto:
As setas e o нcone de balгo sгo SPRITES, imagens de textura do GTA original. O Sprite Browser permite vocк procurar algumas (se nгo todas) sprites disponнveis para uso.
Para comeзar, devemos definir o cуdigo das Textdraws e criб-las.
pawn Код:
//Preferencialmente no comeзo de seu GM, iremos definir as variбveis que guardarгo as textdraws...
new Text:RegisterOption[7];
new Text:RegisterClick[MAX_PLAYERS];
new Text:RegisterText[MAX_PLAYERS][5];
new Text:RegisterLeft[MAX_PLAYERS][5];
new Text:RegisterRight[MAX_PLAYERS][5];
pawn Код:
RegisterOption[0] = TextDrawCreate(608.000000, 173.648147, "usebox"); // Textdraw da caixa preta de fundo;
TextDrawLetterSize(RegisterOption[0], 0.000000, 24.295679);
TextDrawTextSize(RegisterOption[0], 443.000000, 0.000000);
TextDrawAlignment(RegisterOption[0], 1);
TextDrawColor(RegisterOption[0], 0);
TextDrawUseBox(RegisterOption[0], true);
TextDrawBoxColor(RegisterOption[0], 102);
TextDrawSetShadow(RegisterOption[0], 0);
TextDrawSetOutline(RegisterOption[0], 0);
TextDrawFont(RegisterOption[0], 0);
RegisterOption[1] = TextDrawCreate(434.666687, 156.385192, "Registro"); //Textdraw Azul escrita Registro...
TextDrawLetterSize(RegisterOption[1], 0.736666, 2.325926);
TextDrawAlignment(RegisterOption[1], 1);
TextDrawColor(RegisterOption[1], 257552383);
TextDrawSetShadow(RegisterOption[1], 0);
TextDrawSetOutline(RegisterOption[1], 1);
TextDrawBackgroundColor(RegisterOption[1], 51);
TextDrawFont(RegisterOption[1], 0);
TextDrawSetProportional(RegisterOption[1], 1);
RegisterOption[2] = TextDrawCreate(452.666595, 194.548156, "Idade:"); //Resto das textdraws...
TextDrawLetterSize(RegisterOption[2], 0.301665, 1.255702);
TextDrawAlignment(RegisterOption[2], 1);
TextDrawColor(RegisterOption[2], -1);
TextDrawSetShadow(RegisterOption[2], 0);
TextDrawSetOutline(RegisterOption[2], -1);
TextDrawBackgroundColor(RegisterOption[2], 255);
TextDrawFont(RegisterOption[2], 2);
TextDrawSetProportional(RegisterOption[2], 1);
RegisterOption[3] = TextDrawCreate(452.666595, 217.777755, "Altura:");
TextDrawLetterSize(RegisterOption[3], 0.300998, 1.254999);
TextDrawAlignment(RegisterOption[3], 1);
TextDrawColor(RegisterOption[3], -1);
TextDrawSetShadow(RegisterOption[3], 0);
TextDrawSetOutline(RegisterOption[3], -1);
TextDrawBackgroundColor(RegisterOption[3], 255);
TextDrawFont(RegisterOption[3], 2);
TextDrawSetProportional(RegisterOption[3], 1);
RegisterOption[4] = TextDrawCreate(452.666595, 241.007354, "Peso:");
TextDrawLetterSize(RegisterOption[4], 0.300998, 1.254999);
TextDrawAlignment(RegisterOption[4], 1);
TextDrawColor(RegisterOption[4], -1);
TextDrawSetShadow(RegisterOption[4], 0);
TextDrawSetOutline(RegisterOption[4], 1);
TextDrawBackgroundColor(RegisterOption[4], 255);
TextDrawFont(RegisterOption[4], 2);
TextDrawSetProportional(RegisterOption[4], 1);
RegisterOption[5] = TextDrawCreate(452.666595, 264.236953, "Skin:");
TextDrawLetterSize(RegisterOption[5], 0.300998, 1.254999);
TextDrawAlignment(RegisterOption[5], 1);
TextDrawColor(RegisterOption[5], -1);
TextDrawSetShadow(RegisterOption[5], 0);
TextDrawSetOutline(RegisterOption[5], 1);
TextDrawBackgroundColor(RegisterOption[5], 255);
TextDrawFont(RegisterOption[5], 2);
TextDrawSetProportional(RegisterOption[5], 1);
RegisterOption[6] = TextDrawCreate(452.666595, 287.466552, "Spawn:");
TextDrawLetterSize(RegisterOption[6], 0.300998, 1.254999);
TextDrawAlignment(RegisterOption[6], 1);
TextDrawColor(RegisterOption[6], -1);
TextDrawSetShadow(RegisterOption[6], 0);
TextDrawSetOutline(RegisterOption[6], 1);
TextDrawBackgroundColor(RegisterOption[6], 255);
TextDrawFont(RegisterOption[6], 2);
TextDrawSetProportional(RegisterOption[6], 1);
pawn Код:
for(new i = 0; i < MAX_PLAYERS; i++)
{
RegisterClick[i] = TextDrawCreate(509.137298, 342.131469, "ld_chat:thumbup"); //Textura do balгozinho.
TextDrawLetterSize(RegisterClick[i], 0.000000, 0.000000);
TextDrawTextSize(RegisterClick[i], 29.019626, 31.487031);
TextDrawAlignment(RegisterClick[i], 1);
TextDrawColor(RegisterClick[i], -1);
TextDrawSetShadow(RegisterClick[i], 0);
TextDrawSetOutline(RegisterClick[i], 0);
TextDrawFont(RegisterClick[i], 4);
TextDrawSetSelectable(RegisterClick[i], true);
RegisterText[i][0] = TextDrawCreate(556.331970, 194.548156, "18");
TextDrawLetterSize(RegisterText[i][0], 0.300998, 1.254999);
TextDrawAlignment(RegisterText[i][0], 2);
TextDrawColor(RegisterText[i][0], 257552383);
TextDrawSetShadow(RegisterText[i][0], 0);
TextDrawSetOutline(RegisterText[i][0], 1);
TextDrawBackgroundColor(RegisterText[i][0], 255);
TextDrawFont(RegisterText[i][0], 2);
TextDrawSetProportional(RegisterText[i][0], 1);
RegisterLeft[i][0] = TextDrawCreate(509.000274, 192.888931, "ld_beat:left"); //Textura da seta esquerda.
TextDrawLetterSize(RegisterLeft[i][0], 0.002000, 0.037333);
TextDrawTextSize(RegisterLeft[i][0], 17.006999, 17.007396);
TextDrawAlignment(RegisterLeft[i][0], 1);
TextDrawColor(RegisterLeft[i][0], -1);
TextDrawSetShadow(RegisterLeft[i][0], 0);
TextDrawSetOutline(RegisterLeft[i][0], 0);
TextDrawFont(RegisterLeft[i][0], 4);
TextDrawSetSelectable(RegisterLeft[i][0], true);
RegisterRight[i][0] = TextDrawCreate(586.666137, 192.888931, "ld_beat:right"); //Textura da seta direita.
TextDrawLetterSize(RegisterRight[i][0], 0.000000, 0.000000);
TextDrawTextSize(RegisterRight[i][0], 17.006999, 18.666671);
TextDrawAlignment(RegisterRight[i][0], 1);
TextDrawColor(RegisterRight[i][0], -1);
TextDrawSetShadow(RegisterRight[i][0], 0);
TextDrawSetOutline(RegisterRight[i][0], 0);
TextDrawFont(RegisterRight[i][0], 4);
TextDrawSetSelectable(RegisterRight[i][0], true);
RegisterText[i][1] = TextDrawCreate(556.331970, 217.777755, "130cm");
TextDrawLetterSize(RegisterText[i][1], 0.300998, 1.254999);
TextDrawAlignment(RegisterText[i][1], 2);
TextDrawColor(RegisterText[i][1], 257552383);
TextDrawSetShadow(RegisterText[i][1], 0);
TextDrawSetOutline(RegisterText[i][1], 1);
TextDrawBackgroundColor(RegisterText[i][1], 255);
TextDrawFont(RegisterText[i][1], 2);
TextDrawSetProportional(RegisterText[i][1], 1);
RegisterLeft[i][1] = TextDrawCreate(509.000274, 216.11853, "ld_beat:left");
TextDrawLetterSize(RegisterLeft[i][1], 0.002000, 0.037333);
TextDrawTextSize(RegisterLeft[i][1], 17.006999, 17.007396);
TextDrawAlignment(RegisterLeft[i][1], 1);
TextDrawColor(RegisterLeft[i][1], -1);
TextDrawSetShadow(RegisterLeft[i][1], 0);
TextDrawSetOutline(RegisterLeft[i][1], 0);
TextDrawFont(RegisterLeft[i][1], 4);
TextDrawSetSelectable(RegisterLeft[i][1], true);
RegisterRight[i][1] = TextDrawCreate(586.666137, 216.11853, "ld_beat:right");
TextDrawLetterSize(RegisterRight[i][1], 0.000000, 0.000000);
TextDrawTextSize(RegisterRight[i][1], 17.006999, 18.666671);
TextDrawAlignment(RegisterRight[i][1], 1);
TextDrawColor(RegisterRight[i][1], -1);
TextDrawSetShadow(RegisterRight[i][1], 0);
TextDrawSetOutline(RegisterRight[i][1], 0);
TextDrawFont(RegisterRight[i][1], 4);
TextDrawSetSelectable(RegisterRight[i][1], true);
RegisterText[i][2] = TextDrawCreate(556.331970, 241.007354, "45kg");
TextDrawLetterSize(RegisterText[i][2], 0.300998, 1.254999);
TextDrawAlignment(RegisterText[i][2], 2);
TextDrawColor(RegisterText[i][2], 257552383);
TextDrawSetShadow(RegisterText[i][2], 0);
TextDrawSetOutline(RegisterText[i][2], 1);
TextDrawBackgroundColor(RegisterText[i][2], 255);
TextDrawFont(RegisterText[i][2], 2);
TextDrawSetProportional(RegisterText[i][2], 1);
RegisterLeft[i][2] = TextDrawCreate(509.000274, 239.348129, "ld_beat:left");
TextDrawLetterSize(RegisterLeft[i][2], 0.002000, 0.037333);
TextDrawTextSize(RegisterLeft[i][2], 17.006999, 17.007396);
TextDrawAlignment(RegisterLeft[i][2], 1);
TextDrawColor(RegisterLeft[i][2], -1);
TextDrawSetShadow(RegisterLeft[i][2], 0);
TextDrawSetOutline(RegisterLeft[i][2], 0);
TextDrawFont(RegisterLeft[i][2], 4);
TextDrawSetSelectable(RegisterLeft[i][2], true);
RegisterRight[i][2] = TextDrawCreate(586.666137, 239.348129, "ld_beat:right");
TextDrawLetterSize(RegisterRight[i][2], 0.000000, 0.000000);
TextDrawTextSize(RegisterRight[i][2], 17.006999, 18.666671);
TextDrawAlignment(RegisterRight[i][2], 1);
TextDrawColor(RegisterRight[i][2], -1);
TextDrawSetShadow(RegisterRight[i][2], 0);
TextDrawSetOutline(RegisterRight[i][2], 0);
TextDrawFont(RegisterRight[i][2], 4);
TextDrawSetSelectable(RegisterRight[i][2], true);
RegisterText[i][3] = TextDrawCreate(556.331970, 264.236953, "1");
TextDrawLetterSize(RegisterText[i][3], 0.300998, 1.254999);
TextDrawAlignment(RegisterText[i][3], 2);
TextDrawColor(RegisterText[i][3], 257552383);
TextDrawSetShadow(RegisterText[i][3], 0);
TextDrawSetOutline(RegisterText[i][3], 1);
TextDrawBackgroundColor(RegisterText[i][3], 255);
TextDrawFont(RegisterText[i][3], 2);
TextDrawSetProportional(RegisterText[i][3], 1);
RegisterLeft[i][3] = TextDrawCreate(509.000274, 262.577728, "ld_beat:left");
TextDrawLetterSize(RegisterLeft[i][3], 0.002000, 0.037333);
TextDrawTextSize(RegisterLeft[i][3], 17.006999, 17.007396);
TextDrawAlignment(RegisterLeft[i][3], 1);
TextDrawColor(RegisterLeft[i][3], -1);
TextDrawSetShadow(RegisterLeft[i][3], 0);
TextDrawSetOutline(RegisterLeft[i][3], 0);
TextDrawFont(RegisterLeft[i][3], 4);
TextDrawSetSelectable(RegisterLeft[i][3], true);
RegisterRight[i][3] = TextDrawCreate(586.666137, 262.577728, "ld_beat:right");
TextDrawLetterSize(RegisterRight[i][3], 0.000000, 0.000000);
TextDrawTextSize(RegisterRight[i][3], 17.006999, 18.666671);
TextDrawAlignment(RegisterRight[i][3], 1);
TextDrawColor(RegisterRight[i][3], -1);
TextDrawSetShadow(RegisterRight[i][3], 0);
TextDrawSetOutline(RegisterRight[i][3], 0);
TextDrawFont(RegisterRight[i][3], 4);
TextDrawSetSelectable(RegisterRight[i][3], true);
RegisterText[i][4] = TextDrawCreate(556.331970, 287.466552, "Posto");
TextDrawLetterSize(RegisterText[i][4], 0.300998, 1.254999);
TextDrawAlignment(RegisterText[i][4], 2);
TextDrawColor(RegisterText[i][4], 257552383);
TextDrawSetShadow(RegisterText[i][4], 0);
TextDrawSetOutline(RegisterText[i][4], 1);
TextDrawBackgroundColor(RegisterText[i][4], 255);
TextDrawFont(RegisterText[i][4], 2);
TextDrawSetProportional(RegisterText[i][4], 1);
RegisterLeft[i][4] = TextDrawCreate(509.000274, 285.807327, "ld_beat:left");
TextDrawLetterSize(RegisterLeft[i][4], 0.002000, 0.037333);
TextDrawTextSize(RegisterLeft[i][4], 17.006999, 17.007396);
TextDrawAlignment(RegisterLeft[i][4], 1);
TextDrawColor(RegisterLeft[i][4], -1);
TextDrawSetShadow(RegisterLeft[i][4], 0);
TextDrawSetOutline(RegisterLeft[i][4], 0);
TextDrawFont(RegisterLeft[i][4], 4);
TextDrawSetSelectable(RegisterLeft[i][4], true);
RegisterRight[i][4] = TextDrawCreate(586.666137, 285.807327, "ld_beat:right");
TextDrawLetterSize(RegisterRight[i][4], 0.000000, 0.000000);
TextDrawTextSize(RegisterRight[i][4], 17.006999, 18.666671);
TextDrawAlignment(RegisterRight[i][4], 1);
TextDrawColor(RegisterRight[i][4], -1);
TextDrawSetShadow(RegisterRight[i][4], 0);
TextDrawSetOutline(RegisterRight[i][4], 0);
TextDrawFont(RegisterRight[i][4], 4);
TextDrawSetSelectable(RegisterRight[i][4], true);
}
pawn Код:
RegisterRight[i][4] = TextDrawCreate(586.666137, 285.807327, "ld_beat:right");
No caso, fica a livraria de texutras ld_beat, textura right.txd. Ao entrar no Sprite Browser, vocк poderб identificar facilmente a livraria e textura no canto inferior esquerdo do programa.
pawn Код:
TextDrawFont(RegisterRight[i][4], 4); //Fonte tipo 4, para texturas.
pawn Код:
TextDrawSetSelectable(RegisterRight[i][4], true);
A razгo pela qual existem textdraws nгo clicбveis, porйm separadas por jogador e com texto, como a textdraw abaixo, tem a ver com o sistema de registro implementado, que serб explicado no decorrer deste tutorial.
pawn Код:
RegisterText[i][2] = TextDrawCreate(556.331970, 241.007354, "45kg"); //Linha de texto.
pawn Код:
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(_:clickedid != INVALID_TEXT_DRAW)
{
if(clickedid == RegisterLeft[playerid][0])
{
new x = GetPVarInt(playerid, "RegisterSelection0");
x--;
SetPVarInt(playerid, "RegisterSelection0", x);
if(GetPVarInt(playerid, "RegisterSelection0") < 18) SetPVarInt(playerid, "RegisterSelection0", 100);
new string[128];
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection0"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][0]);
TextDrawSetString(RegisterText[playerid][0], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][0]);
}
else if(clickedid == RegisterRight[playerid][0])
{
new x = GetPVarInt(playerid, "RegisterSelection0");
x++;
SetPVarInt(playerid, "RegisterSelection0", x);
if(GetPVarInt(playerid, "RegisterSelection0") > 100) SetPVarInt(playerid, "RegisterSelection0", 18);
new string[128];
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection0"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][0]);
TextDrawSetString(RegisterText[playerid][0], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][0]);
}
else if(clickedid == RegisterLeft[playerid][1])
{
new x = GetPVarInt(playerid, "RegisterSelection1");
x--;
SetPVarInt(playerid, "RegisterSelection1", x);
if(GetPVarInt(playerid, "RegisterSelection1") < 130) SetPVarInt(playerid, "RegisterSelection1", 220);
new string[128];
format(string, 128, "%icm", GetPVarInt(playerid, "RegisterSelection1"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][1]);
TextDrawSetString(RegisterText[playerid][1], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][1]);
}
else if(clickedid == RegisterRight[playerid][1])
{
new x = GetPVarInt(playerid, "RegisterSelection1");
x++;
SetPVarInt(playerid, "RegisterSelection1", x);
if(GetPVarInt(playerid, "RegisterSelection1") > 220) SetPVarInt(playerid, "RegisterSelection1", 130);
new string[128];
format(string, 128, "%icm", GetPVarInt(playerid, "RegisterSelection1"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][1]);
TextDrawSetString(RegisterText[playerid][1], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][1]);
}
else if(clickedid == RegisterLeft[playerid][2])
{
new x = GetPVarInt(playerid, "RegisterSelection2");
x--;
SetPVarInt(playerid, "RegisterSelection2", x);
if(GetPVarInt(playerid, "RegisterSelection2") < 45) SetPVarInt(playerid, "RegisterSelection2", 220);
new string[128];
format(string, 128, "%ikg", GetPVarInt(playerid, "RegisterSelection2"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][2]);
TextDrawSetString(RegisterText[playerid][2], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][2]);
}
else if(clickedid == RegisterRight[playerid][2])
{
new x = GetPVarInt(playerid, "RegisterSelection2");
x++;
SetPVarInt(playerid, "RegisterSelection2", x);
if(GetPVarInt(playerid, "RegisterSelection2") > 220) SetPVarInt(playerid, "RegisterSelection2", 45);
new string[128];
format(string, 128, "%ikg", GetPVarInt(playerid, "RegisterSelection2"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][2]);
TextDrawSetString(RegisterText[playerid][2], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][2]);
}
else if(clickedid == RegisterLeft[playerid][3])
{
new x = GetPVarInt(playerid, "RegisterSelection3");
x--;
SetPVarInt(playerid, "RegisterSelection3", x);
if(GetPVarInt(playerid, "RegisterSelection3") < 1) SetPVarInt(playerid, "RegisterSelection3", 299);
new string[128];
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection3"));
SetPlayerSkin(playerid, GetPVarInt(playerid, "RegisterSelection3"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
TextDrawSetString(RegisterText[playerid][3], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][3]);
}
else if(clickedid == RegisterRight[playerid][3])
{
new x = GetPVarInt(playerid, "RegisterSelection3");
x++;
SetPVarInt(playerid, "RegisterSelection3", x);
if(GetPVarInt(playerid, "RegisterSelection3") > 299) SetPVarInt(playerid, "RegisterSelection3", 1);
new string[128];
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection3"));
SetPlayerSkin(playerid, GetPVarInt(playerid, "RegisterSelection3"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
TextDrawSetString(RegisterText[playerid][3], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][3]);
}
else if(clickedid == RegisterLeft[playerid][4])
{
new x = GetPVarInt(playerid, "RegisterSelection4");
x--;
SetPVarInt(playerid, "RegisterSelection4", x);
if(GetPVarInt(playerid, "RegisterSelection4") < 1) SetPVarInt(playerid, "RegisterSelection4", 3);
new string[128];
switch (GetPVarInt(playerid, "RegisterSelection4"))
{
case 1: format(string, 128, "Posto", GetPVarInt(playerid, "RegisterSelection4"));
case 2: format(string, 128, "Praзa", GetPVarInt(playerid, "RegisterSelection4"));
case 3: format(string, 128, "Pier", GetPVarInt(playerid, "RegisterSelection4"));
}
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawSetString(RegisterText[playerid][4], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][4]);
}
else if(clickedid == RegisterRight[playerid][4])
{
new x = GetPVarInt(playerid, "RegisterSelection4");
x++;
SetPVarInt(playerid, "RegisterSelection4", x);
if(GetPVarInt(playerid, "RegisterSelection4") > 3) SetPVarInt(playerid, "RegisterSelection4", 1);
new string[128];
switch (GetPVarInt(playerid, "RegisterSelection4"))
{
case 1: format(string, 128, "Posto", GetPVarInt(playerid, "RegisterSelection4"));
case 2: format(string, 128, "Praзa", GetPVarInt(playerid, "RegisterSelection4"));
case 3: format(string, 128, "Pier", GetPVarInt(playerid, "RegisterSelection4"));
}
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawSetString(RegisterText[playerid][4], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][4]);
}
else if(clickedid == RegisterClick[playerid])
{
SetPVarInt(playerid, "Age", GetPVarInt(playerid, "RegisterSelection0"));
SetPVarInt(playerid, "Height", GetPVarInt(playerid, "RegisterSelection1"));
SetPVarInt(playerid, "Weight", GetPVarInt(playerid, "RegisterSelection2"));
SetPVarInt(playerid, "Skin", GetPVarInt(playerid, "RegisterSelection3"));
SetPVarInt(playerid, "Spawn", GetPVarInt(playerid, "RegisterSelection4"));
SendSystemMessage(playerid, "Registro completo com sucesso!");
switch(GetPVarInt(playerid, "Spawn"))
{
case 1:
{
SetPVarFloat(playerid, "PosX", 116.7447);
SetPVarFloat(playerid, "PosY", 1094.8406);
SetPVarFloat(playerid, "PosZ", 13.6126);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
case 2:
{
SetPVarFloat(playerid, "PosX", -146.1487);
SetPVarFloat(playerid, "PosY", 1124.4265);
SetPVarFloat(playerid, "PosZ", 19.7422);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
case 3:
{
SetPVarFloat(playerid, "PosX", -396.9557);
SetPVarFloat(playerid, "PosY", 911.6937);
SetPVarFloat(playerid, "PosZ", 10.9430);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
}
SetPlayerPos(playerid, GetPVarFloat(playerid, "PosX"), GetPVarFloat(playerid, "PosY"), GetPVarFloat(playerid, "PosZ"));
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SetCameraBehindPlayer(playerid);
TextDrawHideForPlayer(playerid, RegisterOption[0]);
TextDrawHideForPlayer(playerid, RegisterOption[1]);
TextDrawHideForPlayer(playerid, RegisterOption[2]);
TextDrawHideForPlayer(playerid, RegisterOption[3]);
TextDrawHideForPlayer(playerid, RegisterOption[4]);
TextDrawHideForPlayer(playerid, RegisterOption[5]);
TextDrawHideForPlayer(playerid, RegisterOption[6]);
TextDrawHideForPlayer(playerid, RegisterClick[playerid]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][4]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][4]);
SetPVarInt(playerid, "Registered", 1);
SavePlayerData(playerid);
CancelSelectTextDraw(playerid);
TogglePlayerControllable(playerid, true);
return 1;
}
}
return 1;
}
Dissecando todo o cуdigo acima...
pawn Код:
if(_:clickedid != INVALID_TEXT_DRAW)
{
if(clickedid == RegisterLeft[playerid][0])
A seguir, vem uma sйrie de IF's, separando cada textdraw em um caso diferente. A funзгo de todas as textdraws de setas (RegisterLeft e RegisterRight) serve, como dito anteriormente, para adicionar ou subtrair um valor que serб mostrado em texto, e, portanto, tem funcionalidade semelhante. Mostrarei duas abaixo e explicarei-as detalhadamente.
pawn Код:
else if(clickedid == RegisterLeft[playerid][3])
{
new x = GetPVarInt(playerid, "RegisterSelection3"); //Variбvel para guardar o valor atual da seleзгo;
x--; //Ao clicar na seta esquerda, ele diminui o valor...
SetPVarInt(playerid, "RegisterSelection3", x); //... e o coloca novamente na variбvel.
if(GetPVarInt(playerid, "RegisterSelection3") < 1) SetPVarInt(playerid, "RegisterSelection3", 299);
//Na linha acima, caso o valor seja menor que 1, ao clicar na seta esquerda, ele se torna 299. (SKINS);
new string[128];
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection3"));
//formata o texto com a ID da skin;
SetPlayerSkin(playerid, GetPVarInt(playerid, "RegisterSelection3"));
//Seta no jogador a skin na qual o valor que й mostrado no texto (e alterado pelas setas);
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
//Esconde o texto para atualizaзгo;
TextDrawSetString(RegisterText[playerid][3], string);
//Altera a textdraw que mostra o valor da skin;
TextDrawShowForPlayer(playerid, RegisterText[playerid][3]);
//Mostra novamente o texto;
}
pawn Код:
else if(clickedid == RegisterRight[playerid][3])
{
new x = GetPVarInt(playerid, "RegisterSelection3"); //Variбvel que guarda a skin;
x++; //Adiзгo ao clicar na seta direita;
SetPVarInt(playerid, "RegisterSelection3", x); // Atualizaзгo no valor;
if(GetPVarInt(playerid, "RegisterSelection3") > 299) SetPVarInt(playerid, "RegisterSelection3", 1);
//Caso a variбvel seja 299 e o jogador clicar na seta direita, ela retornarб a 1;
new string[128];
//Abaixo a atualizaзгo do valor na textdraw;
format(string, 128, "%i", GetPVarInt(playerid, "RegisterSelection3"));
SetPlayerSkin(playerid, GetPVarInt(playerid, "RegisterSelection3"));
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
TextDrawSetString(RegisterText[playerid][3], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][3]);
}
pawn Код:
else if(clickedid == RegisterLeft[playerid][4])
{
//Mesmo esquema de antes: Para seta esquerda subtraзгo, para seta direita, adiзгo do valor.
new x = GetPVarInt(playerid, "RegisterSelection4");
x--;
SetPVarInt(playerid, "RegisterSelection4", x);
//Ao chegar em 1 (valor mнnimo), ele volta para 3;
if(GetPVarInt(playerid, "RegisterSelection4") < 1) SetPVarInt(playerid, "RegisterSelection4", 3);
new string[128];
//Aqui, eu coloquei um switch para os valores. Cada valor corresponde a um texto diferente, como formatado abaixo;
switch (GetPVarInt(playerid, "RegisterSelection4"))
{
case 1: format(string, 128, "Posto", GetPVarInt(playerid, "RegisterSelection4"));
case 2: format(string, 128, "Praca", GetPVarInt(playerid, "RegisterSelection4"));
case 3: format(string, 128, "Pier", GetPVarInt(playerid, "RegisterSelection4"));
}
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawSetString(RegisterText[playerid][4], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][4]);
}
pawn Код:
else if(clickedid == RegisterRight[playerid][4])
{
new x = GetPVarInt(playerid, "RegisterSelection4");
x++;
SetPVarInt(playerid, "RegisterSelection4", x);
//Ao chegar no valor mбximo (3), ele retorna para o inнcio;
if(GetPVarInt(playerid, "RegisterSelection4") > 3) SetPVarInt(playerid, "RegisterSelection4", 1);
new string[128];
switch (GetPVarInt(playerid, "RegisterSelection4"))
{
case 1: format(string, 128, "Posto", GetPVarInt(playerid, "RegisterSelection4"));
case 2: format(string, 128, "Praca", GetPVarInt(playerid, "RegisterSelection4"));
case 3: format(string, 128, "Pier", GetPVarInt(playerid, "RegisterSelection4"));
}
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawSetString(RegisterText[playerid][4], string);
TextDrawShowForPlayer(playerid, RegisterText[playerid][4]);
}
Agora, para o ъltimo botгo, o que confirma suas mudanзas.
pawn Код:
else if(clickedid == RegisterClick[playerid])
{
//Abaixo sгo somente variбveis que correspondem a meu sistema de informaзхes;
SetPVarInt(playerid, "Age", GetPVarInt(playerid, "RegisterSelection0"));
SetPVarInt(playerid, "Height", GetPVarInt(playerid, "RegisterSelection1"));
SetPVarInt(playerid, "Weight", GetPVarInt(playerid, "RegisterSelection2"));
SetPVarInt(playerid, "Skin", GetPVarInt(playerid, "RegisterSelection3"));
SetPVarInt(playerid, "Spawn", GetPVarInt(playerid, "RegisterSelection4"));
SendSystemMessage(playerid, "Registro completo com sucesso!");
//Como visto acima, cada spawn tem um nome diferente, portanto este coleta o spawn selecionado pelo jogador, e o coloca lб;
switch(GetPVarInt(playerid, "Spawn"))
{
case 1:
{
SetPVarFloat(playerid, "PosX", 116.7447);
SetPVarFloat(playerid, "PosY", 1094.8406);
SetPVarFloat(playerid, "PosZ", 13.6126);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
case 2:
{
SetPVarFloat(playerid, "PosX", -146.1487);
SetPVarFloat(playerid, "PosY", 1124.4265);
SetPVarFloat(playerid, "PosZ", 19.7422);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
case 3:
{
SetPVarFloat(playerid, "PosX", -396.9557);
SetPVarFloat(playerid, "PosY", 911.6937);
SetPVarFloat(playerid, "PosZ", 10.9430);
SetPVarInt(playerid, "Int", 0);
SetPVarInt(playerid, "VW", 0);
}
}
//Abaixo, a posiзгo e cвmera do jogador й setada, e as textdraws sгo escondidas da tela do jogador;
SetPlayerPos(playerid, GetPVarFloat(playerid, "PosX"), GetPVarFloat(playerid, "PosY"), GetPVarFloat(playerid, "PosZ"));
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SetCameraBehindPlayer(playerid);
TextDrawHideForPlayer(playerid, RegisterOption[0]);
TextDrawHideForPlayer(playerid, RegisterOption[1]);
TextDrawHideForPlayer(playerid, RegisterOption[2]);
TextDrawHideForPlayer(playerid, RegisterOption[3]);
TextDrawHideForPlayer(playerid, RegisterOption[4]);
TextDrawHideForPlayer(playerid, RegisterOption[5]);
TextDrawHideForPlayer(playerid, RegisterOption[6]);
TextDrawHideForPlayer(playerid, RegisterClick[playerid]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][0]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][1]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][2]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][3]);
TextDrawHideForPlayer(playerid, RegisterText[playerid][4]);
TextDrawHideForPlayer(playerid, RegisterLeft[playerid][4]);
TextDrawHideForPlayer(playerid, RegisterRight[playerid][4]);
SetPVarInt(playerid, "Registered", 1);
SavePlayerData(playerid);
//Em CancelSelectTextDraw, o jogador nгo poderб mais selecionar textdraws;
CancelSelectTextDraw(playerid);
TogglePlayerControllable(playerid, true);
return 1;
}
Pronto. A estrutura bбsica deste sistema foi criada e explicada acima. Portanto, como passo final, necessitamos mostrar ela em algum ponto do gamemode. Isto foi feito com a stock abaixo:
pawn Код:
stock StartRegister(playerid)
{
//Abaixo, o jogador й colocado em uma sala e travado, para poder editar seu personagem;
SetPVarFloat(playerid, "Health", 100);
SpawnPlayer(playerid);
SetPlayerInterior(playerid, 14);
SetPlayerPos(playerid, 258.3504,-41.5838,1002.0234);
TogglePlayerControllable(playerid, false);
SetPlayerCameraPos(playerid, 254.1672,-41.8898,1003.2319);
SetPlayerCameraLookAt(playerid, 258.3504,-41.5838,1002.0234);
//Abaixo, os valores padrгo de cada um dos textos e variбveis que serгo editados pelos textdraws clicбveis sгo setados;
SetPVarInt(playerid, "RegisterSelection0", 18);
SetPVarInt(playerid, "RegisterSelection1", 130);
SetPVarInt(playerid, "RegisterSelection2", 45);
SetPVarInt(playerid, "RegisterSelection3", 1);
SetPVarInt(playerid, "RegisterSelection4", 1);
//Abaixo, todas as textdraws sгo mostradas para o jogador;
TextDrawShowForPlayer(playerid, RegisterOption[0]);
TextDrawShowForPlayer(playerid, RegisterOption[1]);
TextDrawShowForPlayer(playerid, RegisterOption[2]);
TextDrawShowForPlayer(playerid, RegisterOption[3]);
TextDrawShowForPlayer(playerid, RegisterOption[4]);
TextDrawShowForPlayer(playerid, RegisterOption[5]);
TextDrawShowForPlayer(playerid, RegisterOption[6]);
TextDrawShowForPlayer(playerid, RegisterClick[playerid]);
TextDrawShowForPlayer(playerid, RegisterText[playerid][0]);
TextDrawShowForPlayer(playerid, RegisterLeft[playerid][0]);
TextDrawShowForPlayer(playerid, RegisterRight[playerid][0]);
TextDrawShowForPlayer(playerid, RegisterText[playerid][1]);
TextDrawShowForPlayer(playerid, RegisterLeft[playerid][1]);
TextDrawShowForPlayer(playerid, RegisterRight[playerid][1]);
TextDrawShowForPlayer(playerid, RegisterText[playerid][2]);
TextDrawShowForPlayer(playerid, RegisterLeft[playerid][2]);
TextDrawShowForPlayer(playerid, RegisterRight[playerid][2]);
TextDrawShowForPlayer(playerid, RegisterText[playerid][3]);
TextDrawShowForPlayer(playerid, RegisterLeft[playerid][3]);
TextDrawShowForPlayer(playerid, RegisterRight[playerid][3]);
TextDrawShowForPlayer(playerid, RegisterText[playerid][4]);
TextDrawShowForPlayer(playerid, RegisterLeft[playerid][4]);
TextDrawShowForPlayer(playerid, RegisterRight[playerid][4]);
//A linha abaixo faz com que as textdraws que sгo selecionбveis possam ser selecionadas, mostrando o mouse. A funзгo permite tambйm mudar a cor da textdraw selecionada para qualquer uma que vocк quiser, com os mesmos parвmetros de cor da funзгo SendClientMessage;
SelectTextDraw(playerid, COLOR_SYSBLUE);
return 1;
}
E fim!
Qualquer dъvida e/ou comentбrio, incluindo crнticas, sгo bem vindos.