Portal SAMP
[Ajuda] comando /promover - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] comando /promover (/showthread.php?tid=1747)



comando /promover - geek - 19/10/2021

Fala galerinha , é o seguinte , eu extrai um sistema de infoorg e os respectivos comandos do mesmo da gamemode do BPG, eu os  converti para DOF2 e zcmd .

e me deparei em uma falha no comando de promover o player .

Na teoria quando o líder promover um membro a sub-lider , ele ira ocupar a vaga de sub-lider no /infoorg e sua vaga antiga será resetada , porém isso não acontece , o player ocupa as duas vagas. irei disponibilizar o código. 

Código:
CMD:promover(playerid, params[])
{
    if(IsPlayerConnected(playerid))
    {
        new para1;
        new level;
        if(sscanf(params, "ud", para1, level))return SendClientMessage(playerid, COLOR_GRAD2, "USE: /promover [ID/Nick] [Cargos (1-5)]");
        if(level > 5 || level < 1) { SendClientMessage(playerid, COLOR_GREY, "Cargos de 1 a 5, Cargo 5 é Sub-Líder!"); return 1; }
        if(PlayerInfo[playerid][pLider] > 0)
        {
            if(IsPlayerConnected(para1))
            {
                if(PlayerInfo[para1][pOrganizacao] == PlayerInfo[playerid][pLider])
                {
                    if(para1 != INVALID_PLAYER_ID)
                    {
                        GetPlayerName(para1, giveplayer, sizeof(giveplayer));
                        GetPlayerName(playerid, sendername, sizeof(sendername));
                        PlayerInfo[para1][pCargo] = level;
                        format(string, sizeof(string), "Você foi promovido pelo líder %s para o cargo %d.", sendername, level);
                        SendClientMessage(para1, COLOR_LIGHTBLUE, string);
                        format(string, sizeof(string), "Você promoveu %s para o cargo %d.", giveplayer,level);
                        SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
                        new org = PlayerInfo[playerid][pLider];
                        if(level == 5)
                        {
                            if(strcmp(InfoOrg[org][SubLider],"Ninguem",true)==0)
                            {
                                DemitirInfoOrg(giveplayer);
                                ConviteInfoOrg(giveplayer, org, 5);
                            }
                            else
                            {
                                strmid(string, InfoOrg[org][SubLider], 0, strlen(InfoOrg[org][SubLider]), 255);
                                DemitirInfoOrg(giveplayer);
                                DemitirInfoOrg(InfoOrg[org][SubLider]);
                                ConviteInfoOrg(string, org, 4);
                                ConviteInfoOrg(giveplayer, org, 5);
                            }
                        }
                        if(strcmp(InfoOrg[org][SubLider],giveplayer,true)==0)
                        {
                            if(level < 5)
                            {
                                DemitirInfoOrg(giveplayer);
                                ConviteInfoOrg(giveplayer, org, level);
                            }
                        }
                        return 1;
                    }
                    if(PlayerInfo[para1][pOrganizacao] != PlayerInfo[playerid][pLider])
                    {
                        SendClientMessage(playerid, COLOR_GREY, "Não pode promover quem não é da sua org.");
                        return 1;
                    }
                }
            }//not connected
        }
        else
        {
            SendClientMessage(playerid, COLOR_GRAD1, "Você não é um líder !");
        }
    }
    return 1;
}

Código:
forward ConviteInfoOrg(nome[], org, cargo);
public ConviteInfoOrg(nome[], org, cargo)
{
    new arquivo[150];
    format(arquivo, sizeof(arquivo), "ORG Arquivos/Org%d.cfg",org);
    if(cargo >= 6)
    {
        strmid(InfoOrg[org][Lider], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Lider",nome);
        return 1;
    }
    if(cargo == 5)
    {
        if(strcmp(InfoOrg[org][SubLider],"Ninguem",true)==0)
        {
            strmid(InfoOrg[org][SubLider], nome, 0, strlen(nome), MAX_PLAYER_NAME);
               DOF2_SetString(arquivo,"SubLider",nome);
            return 1;
        }
    }
    if(strcmp(InfoOrg[org][Membro1],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro1], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro1",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro2],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro2], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro2",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro3],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro3], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro3",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro4],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro4], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro4",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro5],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro5], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro5",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro6],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro6], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro6",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro7],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro7], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro7",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro8],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro8], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro8",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro9],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro9], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro9",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro10],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro10], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro10",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro11],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro11], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro11",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro12],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro12], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro12",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro13],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro13], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro13",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro14],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro14], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro14",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro15],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro15], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro15",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro16],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro16], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro16",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro17],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro17], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro17",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro18],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro18], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro18",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro19],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro19], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro19",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro20],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro20], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro20",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro21],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro21], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro21",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro22],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro22], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro22",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro23],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro23], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro23",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro24],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro24], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro24",nome);
        return 1;
    }
    if(strcmp(InfoOrg[org][Membro25],"Ninguem",true)==0)
    {
        strmid(InfoOrg[org][Membro25], nome, 0, strlen(nome), MAX_PLAYER_NAME);
        DOF2_SetString(arquivo,"Membro25",nome);
        return 1;
    }
    return 0;
}

Código:
forward DemitirInfoOrg(nome[]);
public DemitirInfoOrg(nome[])
{
    new arquivo[150];
    for(new i = 1; i < sizeof(InfoOrg); i++)
    {
        format(arquivo, sizeof(arquivo), "ORG Arquivos/Org%d.cfg",i);
        if(strcmp(nome,InfoOrg[i][Lider],true)==0)
        {
            strmid(InfoOrg[i][Lider], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Lider","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][SubLider],true)==0)
        {
            strmid(InfoOrg[i][SubLider], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"SubLider","Ninguem");
            return 1;
           }
        if(strcmp(nome,InfoOrg[i][Membro1],true)==0)
        {
            strmid(InfoOrg[i][Membro1], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro1","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro2],true)==0)
        {
            strmid(InfoOrg[i][Membro2], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro2","Ninguem");
              return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro3],true)==0)
        {
            strmid(InfoOrg[i][Membro3], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro3","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro4],true)==0)
        {
            strmid(InfoOrg[i][Membro4], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro4","Ninguem");
              return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro5],true)==0)
        {
            strmid(InfoOrg[i][Membro5], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro5","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro6],true)==0)
        {
            strmid(InfoOrg[i][Membro6], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro6","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro7],true)==0)
        {
            strmid(InfoOrg[i][Membro7], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro7","Ninguem");
              return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro8],true)==0)
        {
            strmid(InfoOrg[i][Membro8], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro8","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro9],true)==0)
        {
            strmid(InfoOrg[i][Membro9], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro9","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro10],true)==0)
        {
            strmid(InfoOrg[i][Membro10], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro10","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro11],true)==0)
        {
            strmid(InfoOrg[i][Membro11], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro11","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro12],true)==0)
        {
            strmid(InfoOrg[i][Membro12], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro12","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro13],true)==0)
        {
            strmid(InfoOrg[i][Membro13], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro13","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro14],true)==0)
        {
            strmid(InfoOrg[i][Membro14], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro14","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro15],true)==0)
        {
            strmid(InfoOrg[i][Membro15], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro15","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro16],true)==0)
        {
            strmid(InfoOrg[i][Membro16], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro16","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro17],true)==0)
        {
            strmid(InfoOrg[i][Membro17], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro17","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro18],true)==0)
        {
            strmid(InfoOrg[i][Membro18], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro18","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro19],true)==0)
          {
            strmid(InfoOrg[i][Membro19], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro19","Ninguem");
            return 1;
        }
          if(strcmp(nome,InfoOrg[i][Membro20],true)==0)
        {
            strmid(InfoOrg[i][Membro20], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro20","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro21],true)==0)
        {
            strmid(InfoOrg[i][Membro21], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro21","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro22],true)==0)
        {
            strmid(InfoOrg[i][Membro22], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro22","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro23],true)==0)
        {
            strmid(InfoOrg[i][Membro23], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro23","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro24],true)==0)
          {
            strmid(InfoOrg[i][Membro24], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro24","Ninguem");
            return 1;
        }
        if(strcmp(nome,InfoOrg[i][Membro25],true)==0)
        {
            strmid(InfoOrg[i][Membro25], "Ninguem", 0, strlen("Ninguem"), MAX_PLAYER_NAME);
            DOF2_SetString(arquivo,"Membro25","Ninguem");
            return 1;
        }
    }
    return 0;
}



RE: comando /promover - k2bi_YT - 21/10/2021

Bom, creio que a função strcmp não está sendo usado corretamente.

Exemplo:
Código PHP:
if(level == 5)
{
    if(
strcmp(InfoOrg[org][SubLider],"Ninguem",true)) //Se a variavel InfoOrg[org][SubLider] for diferente de "Ninguem"
    
{
        
DemitirInfoOrg(giveplayer);
        
ConviteInfoOrg(giveplayerorg5);
        
//Nesse caso, quem era o antigo SubLider, ira continuuar com o cargo e apenas o nome da variavel ira mudar
    
}
    else
    {
        
strmid(stringInfoOrg[org][SubLider], 0strlen(InfoOrg[org][SubLider]), 255);
        
DemitirInfoOrg(giveplayer);
        
DemitirInfoOrg(InfoOrg[org][SubLider]);
        
ConviteInfoOrg(stringorg4);
        
ConviteInfoOrg(giveplayerorg5);
    }
}

//Como deveria ser usado

if(level == 5)
{
    if(!
strcmp(InfoOrg[org][SubLider],"Ninguem",true)) //Se a variavel InfoOrg[org][SubLider] for igual a "Ninguem"
    
{
        
DemitirInfoOrg(giveplayer);
        
ConviteInfoOrg(giveplayerorg5);
        
//Nesse caso, como a variavel será igual a "Ninguem", ira apenas definir o nome do jogador a variavel InfoOrg[org][SubLider]
    
}
    else
    {
        
strmid(stringInfoOrg[org][SubLider], 0strlen(InfoOrg[org][SubLider]), 255);
        
DemitirInfoOrg(giveplayer);
        
DemitirInfoOrg(InfoOrg[org][SubLider]);
        
ConviteInfoOrg(stringorg4);
        
ConviteInfoOrg(giveplayerorg5);
    }