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.
 
 
 
 |