NaCorrida[MAX_PLAYERS];
CMD:corrida(playerid, params[]) {
new id, str[90];
if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1,"Uso: /Corrida [id rival]");
format(str, sizeof(str),"%s quer uma corrida, aceitar?", nome[playerid]);
ShowPlayerDialog(id, 9999, DIALOG_STYLE_MSGBOX, "Corrida", str, "Aceitar", "Cancelar");
player2[id] = playerid;
return 1;
}
if(dialogid == 9999)
{
if(response)
{
SendClientMessage(playerid, -1, "Corrida iniciada."); // Irб enviar a mensagem para quem ofereceu.
SendClientMessage(player2[playerid], -1, "Corrida iniciada."); // Irб enviar a mensagem para o convidado.
SetPlayerCheckpoint(...)
SetPlayerCheckpoint(...)
NaCorrida[playerid] = true;
NaCorrida[player2[playerid]] = true;
}
else
{
SendClientMessage(playerid, -1, "Corrida recusada.");
SendClientMessage(player2[playerid], -1, "Corrida recusada.");
}
}
if(NaCorrida[playerid] == true)
{
SendClientMessage(playerid, -1,"Vencedor.");
SendClientMessage(player2[playerid], -1, "Perdedor.");
}
else if(NaCorrida[player2[playerid]] == true)
{
SendClientMessage(player2[playerid], -1,"Vencedor.");
SendClientMessage(playerid, -1,"Perdedor.");
}
new Competidores[2];
for(new x = 0, y = GetMaxPlayers(), z = 0; x != y; x++)
{
if(NaCorrida[x])
{
Competidores[z] = x;
z++;
if(z > 1) break;
}
}
if(playerid == Competidores[0])
{
SendClientMessage(Competidores[0], 0x33CCFFAA, "Vencedor !");
SendClientMessage(Competidores[1], 0xFF0000FF, "Perdedor !");
}
else if(playerid == Competidores[1])
{
SendClientMessage(Competidores[1], 0x33CCFFAA, "Vencedor !");
SendClientMessage(Competidores[0], 0xFF0000FF, "Perdedor !");
}
Pela minha compreensгo, a callback OnPlayerEnterCheckpoint entгo seria processada apenas uma vez, o que aconteceria para o primeiro dos dois jogadores que chegasse ao Checkpoint. Esse jogador seria o vencedor
![]() Sendo assim, o parвmetro playerid da funзгo OnPlayerEnterCheckpoint equivaleria ao ID do jogador vencedor e, consequentemente, o ID do outro jogador competidor seria o ID do perdedor. A identificaзгo desses IDs, em termos de cуdigos, poderia ser feita atravйs de um loop por todos os jogadores e algumas verificaзхes de valores ![]() pawn Код:
Espero ter ajudado ![]() |
Hello novamente
![]() Pensei mais um pouco e aqui vai outra tentativa. Espero que ajude ![]() PS: й um sу um exemplo, adapte ao seu script. http://pastebin.com/XAW7HajP |
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(NaCorrida[playerid] == true)
{
NaCorrida[playerid] = false;
NaCorrida[player2[playerid]] = false.
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(NaCorrida[playerid] == true)
{
if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
{
NaCorrida[playerid] = false;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IdCorrida[playerid] == IdCorrida[i])
{
NaCorrida[i] = false;
IdCorrida[playerid] = 0;
IdCorrida[i] = 0;
SendClientMessage(playerid, 0x33CCFFAA, "Corrida cancelada.");
SendClientMessage(i, 0x33CCFFAA, "Corrida cancelada.");
break;
}
}
}
}
}
return 1;
}
PHP код:
|