Dialog -
MonstrinhoVerde - 06.12.2013
Eu estou fazendo um FilterScript e estou com uma dъvida que nгo encontro na Wiki nem no Fуrum, eu queria que se um administrador fizesse um comando apareceria um Dialog MSGBOX para todos e sу os 10 primeiros a clicar Sim iriam ao evento.
Como estб o cуdigo atй agora:
Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
CMD:wipeout(playerid, params[])
{
if(PlayerInfo[playerid][pAdminLevel] >= 3)
{
for(new i=0; i < MAX_PLAYERS; i++)
{
ShowPlayerDialog(playerid,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo");
}
return 1;
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_WIPEOUT)
{
if(response)
{
new playerwipeout
SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!");
if (playerid == 1)
{
SetPlayerPos(playerid,0.0,0.0,3.0);
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento.");
}
return 1;
}
return 0;
}
A minha dъvida й se estou a fazer correctamente aquilo do playerid == 1 (que define se foi o primeiro jogador a clicar ou nгo e vai por daн adiante. Agradeзo a ajuda.
Re: Dialog -
Kuddy - 06.12.2013
Completamente errado, Dri.
Para contar os players que clicaram vocк precisa contar os players. Para contar, iremos usar uma
variбvel e iremos checar se a contagem й menor do que 10.
Para comeзar, zcmd nгo fica dentro de callbacks. Coloque ela solta no gamemode (fora de qualquer chave):
pawn Код:
CMD:wipeout(playerid, params[])
{
if(PlayerInfo[playerid][pAdminLevel] >= 3)
{
for(new i=0; i < MAX_PLAYERS; i++)
{
// Trocaremos o playerid por "i" pois nos estamos usando i no loop e nao playerid. Playerid no caso seria o player que digitou o comando, 'i' seria o que o nosso loop percorre, no caso ele tem a instruзao de percorrer todos os players
ShowPlayerDialog(i,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo");
}
return 1;
}
return 1;
}
Agora iremos criar nossa variбvel. Geralmente colocamos elas junto das outras, e geralmente elas ficam no topo do gamemode, logo apуs as defines:
Agora iremos fazer o "processamento" da dialog:
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_WIPEOUT)
{
if(response)
{
if (contagemEvento <= 10)
{
SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!");
SetPlayerPos(playerid,0.0,0.0,3.0);
contagemEvento ++; // Esta funcao ira contar +1 na nossa variavel (nossa contagem).
return 1;
}
else // Se o if acima nao for executado...
{
SendClientMessage(playerid, COLOR_RED, "Voce esta atrasado! 10 players ja foram ao evento.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento.");
}
return 1;
}
return 1;
}
Mas esse cуdigo acima tem um problema. Depois que 10 players forem ao evento, nossa contagem nunca mais serб 0 ;/
Para resolver este erro de lуgica basta resetarmos a nossa variбvel no comando: contagemEvento = 0;
Cabe a vocк encontrar em que parte colocar este cуdigo
Qualquer dъvida й sу falar.
Vou explicar algumas coisas quanto ao uso dos returns:
returns encerram o bloco de cуdigo na hora. Por exemplo:
pawn Код:
CMD:mostra(playerid){
print("Vai mostrar");
print("Vai mostrar");
print("Vai mostrar");
return 1;
print("Nгo vai mostrar");
print("Nгo vai mostrar");
print("Nгo vai mostrar");
}
Nesse caso o compilador vai atй dar um aviso falando que as funзхes abaixo do return nгo vгo ser executadas, pois й impossнvel delas serem executadas.
Re: Dialog -
MonstrinhoVerde - 07.12.2013
Quote:
Originally Posted by Kuddy
Completamente errado, Dri.
Para contar os players que clicaram vocк precisa contar os players. Para contar, iremos usar uma variбvel e iremos checar se a contagem й menor do que 10.
Para comeзar, zcmd nгo fica dentro de callbacks. Coloque ela solta no gamemode (fora de qualquer chave):
pawn Код:
CMD:wipeout(playerid, params[]) { if(PlayerInfo[playerid][pAdminLevel] >= 3) { for(new i=0; i < MAX_PLAYERS; i++) { // Trocaremos o playerid por "i" pois nos estamos usando i no loop e nao playerid. Playerid no caso seria o player que digitou o comando, 'i' seria o que o nosso loop percorre, no caso ele tem a instruзao de percorrer todos os players ShowPlayerDialog(i,DIALOG_WIPEOUT, DIALOG_STYLE_MSGBOX, "Wipeout", "O administrador comeзou um evento de Wipeout. Deseja ir?", "Sim", "Nгo"); } return 1; } return 1; }
Agora iremos criar nossa variбvel. Geralmente colocamos elas junto das outras, e geralmente elas ficam no topo do gamemode, logo apуs as defines:
Agora iremos fazer o "processamento" da dialog:
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == DIALOG_WIPEOUT) { if(response) { if (contagemEvento <= 10) { SendClientMessage(playerid, COLOR_GREEN, "O evento vai comeзar em breve!"); SetPlayerPos(playerid,0.0,0.0,3.0); contagemEvento ++; // Esta funcao ira contar +1 na nossa variavel (nossa contagem). return 1; } else // Se o if acima nao for executado... { SendClientMessage(playerid, COLOR_RED, "Voce esta atrasado! 10 players ja foram ao evento."); return 1; } } else { SendClientMessage(playerid, COLOR_RED, "Vocк decidiu nгo ir ao evento."); } return 1; }
return 1; }
Mas esse cуdigo acima tem um problema. Depois que 10 players forem ao evento, nossa contagem nunca mais serб 0 ;/
Para resolver este erro de lуgica basta resetarmos a nossa variбvel no comando: contagemEvento = 0;
Cabe a vocк encontrar em que parte colocar este cуdigo
Qualquer dъvida й sу falar.
Vou explicar algumas coisas quanto ao uso dos returns:
returns encerram o bloco de cуdigo na hora. Por exemplo:
pawn Код:
CMD:mostra(playerid){ print("Vai mostrar"); print("Vai mostrar"); print("Vai mostrar"); return 1; print("Nгo vai mostrar"); print("Nгo vai mostrar"); print("Nгo vai mostrar"); } Nesse caso o compilador vai atй dar um aviso falando que as funзхes abaixo do return nгo vгo ser executadas, pois й impossнvel delas serem executadas.
|
Obrigado pela ajuda