Portal SAMP
[Tutorial] Como Criar InfoOrg - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Como Criar InfoOrg (/showthread.php?tid=1593)



Como Criar InfoOrg - SrBlue - 03/09/2021

Nesse tópico irei ensinar como criar um infoorg com sistema de salvamento proprio, somente com alguns comandos básicos!..







Primeiramente temos que ter uma Enum da ORG, a qual cada org pode-se manipular, nessa enum vai ter informações básicas sobre a org, como exemplo membros, lideres, sublíderes etc..







Código:
enum Org
{
    Lider[256],
    SubLider[256],
    Membro1[256],
    Membro2[256],
    Membro3[256],
    Membro4[256],
    Membro5[256]
};




Porque valor [256]?

* Seria o tamanho da Array do tipo String,

  \_cada variável dessa ( líder/sublíder/membro1...membro5) vai ser uma string.







temos que passar essa enum para uma Matrix ( new a[1][2][3] );

Código:
enum Org
{
    Lider[256],
    SubLider[256],
    Membro1[256],
    Membro2[256],
    Membro3[256],
    Membro4[256],
    Membro5[256]
};
new OrgInfo[2][Org];


Porque OrgInfo[2]?

* Nesse tutorial será criada somente 3 organização:

[0] - Civil

[1] - Mendingos

[2] - Policia Aleatória





Porque integrar a Enum na Matris?

*para poder manipular, exemplo

OrgInfo[0][pMembro1] = "Peixe_Ssardinha";

OrgInfo[0][pMembro2] = "Amguinho_Peixe";

etc







Agora temos que criar um sistema de carregar/salvar as Orgs, utilizarei o sistema DINI(download aqui). porem é possivel utilizar dof2 ou database ( sqlite/mysql/mariadb...) tudo depende de como você quer salvar.





Carregar:

Código:
stock LoadOrgs()
{
    new arquivo[256];
    new id_org = 1;
    while (id_org < sizeof(OrgInfo))
    {
        format(arquivo, sizeof(arquivo), "Orgs/Org%d.cfg",idx);
        strmid(OrgInfo[id_org][Lider], dini_Get(arquivo,"Lider"), 0, strlen(dini_Get(arquivo,"Lider")), 255);
        strmid(OrgInfo[id_org][SubLider], dini_Get(arquivo,"SubLider"), 0, strlen(dini_Get(arquivo,"SubLider")), 255);
        strmid(OrgInfo[id_org][Membro1], dini_Get(arquivo,"Membro1"), 0, strlen(dini_Get(arquivo,"Membro1")), 255);
        strmid(OrgInfo[id_org][Membro2], dini_Get(arquivo,"Membro2"), 0, strlen(dini_Get(arquivo,"Membro2")), 255);
        strmid(OrgInfo[id_org][Membro3], dini_Get(arquivo,"Membro3"), 0, strlen(dini_Get(arquivo,"Membro3")), 255);
        strmid(OrgInfo[id_org][Membro4], dini_Get(arquivo,"Membro4"), 0, strlen(dini_Get(arquivo,"Membro4")), 255);
        strmid(OrgInfo[id_org][Membro5], dini_Get(arquivo,"Membro5"), 0, strlen(dini_Get(arquivo,"Membro5")), 255);
           idx ++;
    }
    printf("%d Orgs Carregadas", idx);
    return 1;
}
Código de carregar vai pegar todas informações da pasta "scriptfiles/Orgs/org%d";

onde o %d seria o ID da org

no caso vai ter que criar 2 arquivos MANUALMENTE, ou vai ter sujeita da gm crashar.

  * Obs, pasta dentro da scriptfile

     \_ com nome Orgs

              exemplo:   "Scriptfiles/Orgs/"

     ----------



nessa pasta você cria 2 arquivos ou mais. ( de acordo de quantas orgs você criou )

org1.cfg

org2.cfg





e com cada config com esses dados:

Código:
Lider=Ninguem
SubLider=Ninguem
Membro1=Ninguem
Membro2=Ninguem
Membro3=Ninguem
Membro4=Ninguem
Membro5=Ninguem




os dados dentro das cfg das Orgs, podem variar, de quanto membros você pos pra criar.








Agora devemos definir de qual ORG o player vai estar, e se ele é o lider, o certo é adicionar dentro de uma ENUM ( PlayerInfo[playerid][pOrg/pLider] ) incluso do sistema de salvamento do server...
mas nesse caso irei adicionar por variável


no inicio da GM, fora dos scopo ( callbacks )

Código:
new MemberOrgID[50]
new CargoOrgID[50]
os [50] são array de quantidade de players do servidor, recomendo botar uma #define MAX_PLAYERS!
* essas variáveis vão ser constantemente chamadas para os comandos!


Agora vamos pegar as variáveis e sentar no jogador:
Código:
Stock LoadOrgFromPlayer(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new Nick[256];
        GetPlayerName(playerid,Nick,sizeof(Nick));
        for(new i = 1; i < sizeof(OrgInfo); i++)
        {
            if(strcmp(Nick,OrgInfo[i][Lider],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 6
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][SubLider],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 5
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][Membro1],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 1
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][Membro2],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 1
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][Membro3],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 1
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][Membro4],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 1
                return 1;
            }

            if(strcmp(Nick,OrgInfo[i][Membro5],true)==0)
            {
                   MemberOrgID[playerid] = i;
                   CargoOrgID[playerid] = 1
                return 1;
            }



        }
    }
    return 1;
}
* Como podes notar, os cargo das org sempre vão ser 1, devido não termos um sistema de SALVAMENTO de JOGADORES,
nesse tutorial não irei incluir, porem é extremamente recomendado ter para poder salvar os MemberORG e CargoOrg.

Na callback OnPlayerConnect(playerid)
bote essa função criada.

e na callback OnPlayerDisconnect(playerid)
reset as variaveis dos membros
usando:

Código:
MemberOrgID[playerid] = 0;
CargoOrgID[playerid]  = 0



Prontinho, sistema de InfoORG Criado com sucesso,
agora vamos aos comandos  no proximo tutorial



pode-se notar que pode ter bugs nos code, porque é pro usuario aprender e não só COPIAR/COLAR!
o copiar e o colar está matando a comunidade samp Sad


RE: Como Criar InfoOrg - xbruno1000x - 03/09/2021

Muito bom seu tutorial. São essas informações que mantém a comunidade SA-MP viva.


RE: Como Criar InfoOrg - ipsLuan - 03/09/2021

Muito bom o tutorial.
Mas, há como melhor. Por exemplo: não usar string demasiadamente muito grande.


RE: Como Criar InfoOrg - xbruno1000x - 02/03/2022

(02/03/2022 16:27)Flast$ Escreveu: Cade o tutorial dos comandos? sai nunca?

Basta usar uma if no topo dos comandos.

Código:
CMD:teste(playerid)
{
    if(MemberOrgID[playerid] == 1)
    {
        SendClientMessage(playerid, -1, "Você usou o comando teste da ORG ID 1!");
    } else {
        SendClientMessage(playerid, -1, "Você não pode usar esse comando pois não faz parte da ORG ID 1!");
    }
    return 1;
}



RE: Como Criar InfoOrg - LUISBLACK_professor - 17/08/2022

Como eu faria um comando tipo de /darlider ? E depois como seria o /convidar membro pra organização. Todos os dias estudo esse tópico mais ainda não consegui entender direito. Se alguém conseguir me ajudar eu agradeço...


RE: Como Criar InfoOrg - Halabam - 19/08/2022

(17/08/2022 23:24)LUISBLACK_professor Escreveu: Como eu faria um comando tipo de /darlider ? E depois como seria o /convidar membro pra organização. Todos os dias estudo esse tópico mais ainda não consegui entender direito. Se alguém conseguir me ajudar eu agradeço...


Código:
CMD:darorg1(playerid, params[])
{
    new string[128], giveplayerid; // variáveis de string e id do jogador
    new pName[MAX_PLAYER_NAME]; // variável para armazenar o nome do jogador que usou o comando
    new aName[MAX_PLAYER_NAME]; // variável para armazenar o nome do jogador que foi setado
    GetPlayerName(playerid, pName, sizeof(pName)); // usado para pegar o nome do jogador que usou o comando
    GetPlayerName(giveplayerid, aName, sizeof(aName)); // usado para pegar o nome do jogador que foi setado
    format(string, sizeof(string), "[ADMIN] %s setou o jogador %s como membro da Org 1", pName, aName); // formatando a string e pegando os nomes dos jogadores
    if(sscanf(params, "d", giveplayerid)) return SendClientMessage(playerid, -1, "[ERRO]: Utilize /darorg1 (ID)"); // retonara se não foi colocado os paramentros corretos
    if(IsPlayerConnected(giveplayerid)) // verifica se o jogador esta online se sim ele continuara
    {
        MemberOrgID[giveplayerid] = 1; // aqui você põem a ORG
    }
    else return SendClientMessage(playerid, -1, "[ERRO]: Este jogador esta offline."); // retornara se o jogador estiver offline
    return 1;
}
Não testei ver se funcionara ai amigo.


RE: Como Criar InfoOrg - Max - 26/09/2022

MN tô tentando muito e não consegui mim setar na org não aparece eu lá nos arquivos pode mim dizer o que pode ser