Portal SAMP
[Ajuda] Descomplicando DOF2 com SSCANF, e ajuda no /darlider - 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] Descomplicando DOF2 com SSCANF, e ajuda no /darlider (/showthread.php?tid=1490)



Descomplicando DOF2 com SSCANF, e ajuda no /darlider - Lupan - 03/08/2021

Olá, pessoal!
Estou tentando desenvolver um sistema de organizações, porém pegando de base de um sistema de organização disponibilizado.

Estou tendo problemas a seguir:

Minha Gamemode o salvamento dela é em DOF2, entretanto que se eu colocar o sscanf, dará conflito, e não inicializa a gamemode.

Teria um jeito de transformar esse COMANDO abaixo que funcionalize em DOF2, sem a necessidade do sscanf?

Código:
CMD:darlider(playerid, params[])
{
    new id, org, string[256], quemdeu[MAX_PLAYER_NAME], quemganhou[MAX_PLAYER_NAME]; //Cria váriaveis que irá armazenar o id do líder, a organização, o nome etc...
    if(Player[playerid][Admin] != 6) return SendClientMessage(playerid, 0xAD0000AA, "{00E5FF}Você não está autorizado a usar este Comando."); //Verifica se o player está logado na RCON, se não, returna a mensagem
    if(org < 0 || org >= 6) return SendClientMessage(playerid, 0xAD0000AA, "Número de Organizações Permitidas: 0 á 5");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xAD0000AA, "Este jogador não está online."); //Verifica se o player que iria ser setado líder está online
    GetPlayerName(id, quemganhou, sizeof(quemganhou)); //Geta o nome de quem ganhou a lideança
    GetPlayerName(playerid, quemdeu, sizeof(quemdeu)); //Geta o nome do admin que deu o líder
    format(string, sizeof(string), "Você  deu líder da Organização %s para %s(ID: %d)", GetOrgName(org), quemganhou, id); //Formata uma mensagem com o nome de quem ganhou a liderança, o nome da orgnização que foi setada e o "id"
    SendClientMessage(playerid, 0x00F6F6AA, string); //Manda a mensgem formatada para quem digitou o comando (quem deu o líder)
    format(string, sizeof(string), "%s(ID: %d) te deu líder da Organização %s.", quemdeu, playerid, GetOrgName(org)); //Formata uma mensgame com quem deu a liderança, o "playerid" e o nome organização setada
    SendClientMessage(id, 0x00F6F6AA, string); //Envia a mensgaem formatada para que recebeu a liderança
    format(string, sizeof(string), "%s(ID: %d) é o novo líder da Organização %s.", quemganhou, id, GetOrgName(org)); //Formata a mensagem...
    SendClientMessageToAll(0x00F6F6AA, string); //Envia a mensagem para todos Online
    Player[id][Organizacao] = org; //Seta a organização do "id"
    Player[id][Cargo] = 6; //Seta o cargo (liderança) do "id"
    SpawnPlayer(id); //Spawna o player que rebeu a liderança
    return 1; //Returnando a 1, nunca se esqueça!
}

E queria saber também como demonstrar todas org's disponíveis e seus lideres em um só dialog:

As organizações são:
Código:
stock GetOrgName(orgid)
{
    new str[30];
    if(orgid == 0)
    {
        str = "Civil";
    }
    if(orgid == 1)
    {
        str = "Policia Militar";
    }
    if(orgid == 2)
    {
        str = "Policia Civil";
    }
    if(orgid == 3)
    {
        str = "Policia Federal";
    }
    if(orgid == 4)
    {
        str = "Mafia Yakuza";
    }
    if(orgid == 5)
    {
        str = "Groove Street";
    }   
    if(orgid == 6)
    {
        str = "PCC";
    }
    return str;
}



RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - xbruno1000x - 03/08/2021

Conflito entre sscanf e DOF2? eu nunca vi isso. Tem certeza que não é uma DLL faltando na maquina? o plugin sccanf está na mesma versão da include? o plugin baixado é para o S.O desejado?


RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - Lupan - 03/08/2021

(03/08/2021 17:57)xbruno1000x Escreveu: Conflito entre sscanf e DOF2? eu nunca vi isso. Tem certeza que não é uma DLL faltando na maquina? o plugin sccanf está na mesma versão da include? o plugin baixado é para o S.O desejado?

Eu vejo como um conflito, pois quando tento compilar, aparece uns avisos como de exemplo:

Warning 218: old style prototypes used with optional semicolumns

Compila, mais quando inicializa da unknown na gamemode!


RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - xbruno1000x - 03/08/2021

Isso é um warning, não um conflito. Provavelmente existe um problema na sua include, baixe a include e o plugin mais atualizados e use o Zeex Compiler para compilar.

https://github.com/pawn-lang/compiler/releases


RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - Lupan - 03/08/2021

(03/08/2021 18:15)xbruno1000x Escreveu: Isso é um warning, não um conflito. Provavelmente existe um problema na sua include, baixe a include e o plugin mais atualizados e use o Zeex Compiler para compilar.

https://github.com/pawn-lang/compiler/releases

Agradeço por ter me ajudado, consegui resolver os conflitos, era include e plugins do sscanf desatualizados, poderia me ajudar como criar um comando /orgs e aparecer a org e quem é o lider, possível em dialog?


RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - xbruno1000x - 03/08/2021

Fiz um exemplo aqui utilizando suas variáveis



Código:
    CMD:orgs(playerid, params[])
    {
        if(IsPlayerConnected(playerid))
        {
            new string[140], str[4000];
            foreach(new i : Player)
            {
                if(Player[i][Cargo] == 6)
                {
                    format(string, 140, "{D96A0E}[%i]: {12558C}%s {FFFFFF} - Líder: {71A1C8}%s \n", Player[i][Organizacao], GetOrgName(i), GetPlayerNameEx(i));
                    ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_MSGBOX, "Organizações", str, "Fechar", "");
                }
            }
        }
        return true;
    }

Código:
static stock GetPlayerNameEx(playerid)
{
    new string[128];
    GetPlayerName(playerid,string,24);
    new str[24];
    strmid(str,string,0,strlen(string),24);
    return str;
}



Fiz mais para exemplificar, esse código ocorreria um bug no GetOrgName, pois i = ID do player no looping. Basta você corrigir esses pequenos bugs e ficará funcional. Ele funciona basicamente verificando todos players online e se algum deles é lider. Caso ele encontre algum líder, irá formatar a mensagem e inserir na dialog.


RE: Descomplicando DOF2 com SSCANF, e ajuda no /darlider - Lupan - 03/08/2021

(03/08/2021 22:16)xbruno1000x Escreveu: Fiz um exemplo aqui utilizando suas variáveis



Código:
    CMD:orgs(playerid, params[])
    {
        if(IsPlayerConnected(playerid))
        {
            new string[140], str[4000];
            foreach(new i : Player)
            {
                if(Player[i][Cargo] == 6)
                {
                    format(string, 140, "{D96A0E}[%i]: {12558C}%s {FFFFFF} - Líder: {71A1C8}%s \n", Player[i][Organizacao], GetOrgName(i), GetPlayerNameEx(i));
                    ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_MSGBOX, "Organizações", str, "Fechar", "");
                }
            }
        }
        return true;
    }

Código:
static stock GetPlayerNameEx(playerid)
{
    new string[128];
    GetPlayerName(playerid,string,24);
    new str[24];
    strmid(str,string,0,strlen(string),24);
    return str;
}



Agradecimentos ao Bruno!
Fiz de outra forma utilizando um método que eu tinha para mostrar os administradores online, sendo assim adaptei ele para /orgs e fui adaptando, tudo certo, e funcionando perfeitamente, agradeço pela ajuda, +1 REP  Heart  

Podem fechar o tópico! Wink