dialog - reset157 - 30/10/2024
boa noite, estou precisando de ajuda em um sistema de avisar guerra, a ajuda que eu necessito é na parte da dialog, eu preciso que a dialog chega para apenas dois frentes da favela selecionada, e quando a dialog chegar para os frentes os dois deveram aceitar a proposta da guerra para a guerra começar, caso um dos frentes aceite e o outro não, a guerra não começara, e aparecer uma mensagem de tipo, 'o frente s% aceitou a proposta (1/2) "ai devera aparecer isso (1/2), e quando o outro frente aceitar ela ficar (2/2), a guerra começara quando os dois frentes aceitar, agora caso ele não aceite a proposta de guerra ira expirar!
o código estará abaixo:
Código: public Start_Guerra(playerid, fid)
{
for(new f = 1; f < MAX_FACCOES; f++)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[i][pFrente] == f && PlayerInfo[i][pFavela] == fid)
{
new String[128];
GuerraInfo[fid][gTipo] = 1;
GuerraInfo[fid][gAtaque] = PlayerInfo[playerid][pFavela];
GuerraInfo[fid][gDefende] = fid;
GuerraInfo[fid][gTempo] = 0;
GuerraInfo[fid][gDominada] = false;
GuerraInfo[fid][gTempoCifrao] = 0;
GuerraInfo[fid][gCifraoLiberado] = false;
GuerraInfo[fid][gPegouCifrao] = false;
SetPVarInt(playerid, "namewar", i);
format(String, sizeof(String), "[Guerra] %s fez uma proposta de guerra para comunidade '%s'!", Nome(playerid), FaccaoInfo[fid][fNome]);
SendClientMessageToAllEx(COLOR_WHITE, String);
format(String, sizeof(String), "%s fez uma proposta de guerra contra a sua comunidade\n", Nome(playerid));
ShowPlayerDialog(i, DIALOG_ACTGUERRA, DIALOG_STYLE_MSGBOX, "{FFFFFF}Convite Guerra", String, "Aceitar", "Recusar");
break;
}
}
}
return true;
}
case DIALOG_ACTGUERRA:
{
if(response)
{
new i = GetPVarInt(i, "namewar"), fid = PlayerInfo[i][pFavela];
if(GuerraInfo[fid][gAtaque] != -1)
{
GuerraInfo[fid][gAcontecendo] = true;
SendFormattedMessageToAll(COLOR_WHITE, "[Guerra] '%s' iniciou uma guerra contra a comunidade '%s'!", FaccaoInfo[GuerraInfo[fid][gAtaque]][fNome], FaccaoInfo[GuerraInfo[fid][gDefende]][fNome]);
SendFormattedMessage(i, COLOR_LIGHTYELLOW, "[PROPOSTA] %s aceitou a guerra.", Nome(playerid));
SendClientMessage(i, COLOR_ORANGE, "[PROPOSTA] Voce aceitou a guerra.");
}
}
}
RE: dialog - BitSain - 30/10/2024
Código: new bool:gAceitar[2];
new gAceitarCount = 0;
public Start_Guerra(playerid, fid) {
gAceitar[0] = false;
gAceitar[1] = false;
new f1 = PlayerInfo[playerid][pFrente];
for (new i = 0; i < MAX_PLAYERS; i++) {
if (PlayerInfo[i][pFrente] != f1 || PlayerInfo[i][pFavela] != fid) continue;
new String[128];
GuerraInfo[fid][gTipo] = 1;
GuerraInfo[fid][gAtaque] = PlayerInfo[playerid][pFavela];
GuerraInfo[fid][gDefende] = fid;
GuerraInfo[fid][gTempo] = 0;
GuerraInfo[fid][gDominada] = false;
GuerraInfo[fid][gTempoCifrao] = 0;
GuerraInfo[fid][gCifraoLiberado] = false;
GuerraInfo[fid][gPegouCifrao] = false;
SetPVarInt(playerid, "namewar", i);
format(String, sizeof(String), "[Guerra] %s fez uma proposta de guerra para comunidade '%s'!", Nome(playerid), FaccaoInfo[fid][fNome]);
SendClientMessageToAllEx(COLOR_WHITE, String);
format(String, sizeof(String), "%s fez uma proposta de guerra contra a sua comunidade\n", Nome(playerid));
ShowPlayerDialog(i, DIALOG_ACTGUERRA, DIALOG_STYLE_MSGBOX, "{FFFFFF}Convite Guerra", String, "Aceitar", "Recusar");
}
return true;
}
case DIALOG_ACTGUERRA: {
new i = GetPVarInt(playerid, "namewar");
new fid = PlayerInfo[i][pFavela];
if (response) {
if (!gAceitar[0]) {
gAceitar[0] = true;
gAceitarCount++;
SendFormattedMessageToAll(COLOR_WHITE, "[Guerra] '%s' aceitou a proposta de guerra (1/2).", Nome(playerid));
} else if (!gAceitar[1]) {
gAceitar[1] = true;
gAceitarCount++;
SendFormattedMessageToAll(COLOR_WHITE, "[Guerra] '%s' aceitou a proposta de guerra (2/2).", Nome(playerid));
GuerraInfo[fid][gAcontecendo] = true;
SendFormattedMessageToAll(COLOR_WHITE, "[Guerra] '%s' iniciou uma guerra contra a comunidade '%s'!",
FaccaoInfo[GuerraInfo[fid][gAtaque]][fNome],
FaccaoInfo[GuerraInfo[fid][gDefende]][fNome]);
}
} else {
SendClientMessage(i, COLOR_ORANGE, "[PROPOSTA] Você recusou a guerra.");
}
if (gAceitarCount == 2) {
// Guerra aceita por ambas as partes, já tratado anteriormente
} else if (gAceitar[0] || gAceitar[1]) {
SendClientMessageToAll(COLOR_RED, "[Guerra] Proposta de guerra não aceita por ambas as partes.");
}
}
Interprete o código, foi melhorado.
Além de adaptar por suas necessidades, troque seus loops de MAX_PLAYERS por um foreach. Não há necessidade de rodar algo 1000 vezes, ao invés de iterar sobre os jogadores conectados.
|