Portal SAMP
[Ajuda] Criar facção com id maior que 0 - 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] Criar facção com id maior que 0 (/showthread.php?tid=1204)



Criar facção com id maior que 0 - Recruta - 20/05/2021

Olá, queria saber como faço para criar uma facção com o id superior a 0.
ID : 1 em diante, assim o id 0 seria sem facção.

Código:
CMD:criarfaccao(playerid, params[])
{
    new string[110], type, name[40];

    if(PlayerInfo[playerid][pAdmin] < 4) return SendServerMessage(playerid, "Você não pode usar esse comando.");
    if(sscanf(params, "is[40]", type, name)) return SendSyntaxMessage(playerid, "/CRIARFACCAO [TIPO] [NOME]");
    if(strlen(name) > 40 || strlen(name) < 1) return SendErrorMessage(playerid, "O nome deve ter entre 1 e 40 caracteres.");

    new INI:File = INI_Open(FactionPath(fCount));

       INI_SetTag(File, "Faction Data");

    INI_WriteString(File, "Name", name);
    fInfo[fCount][fName] = name;

    INI_WriteInt(File, "Type", type);
    fInfo[fCount][fType] = type;

    INI_Close(File);

    format(string, sizeof(string), "{8EB2D6}[SERVER]{FFFFFF}: Você criou a facção %s (ID: %d) Tipo: %d.", name, fCount, type);
    SendClientMessage(playerid, -1, string);


    fCount ++;

    return true;
}



RE: Criar facção com id maior que 0 - xbruno1000x - 20/05/2021

No seu sistema, você diz que funciona com id a partir de 0. Substitua os "fCount" por "fCount+1" e nunca terá um valor igual a 0.

Ex:
Código:
    INI_WriteString(File, "Name", name);
    fInfo[fCount+1][fName] = name;

    INI_WriteInt(File, "Type", type);
    fInfo[fCount+1][fType] = type;



RE: Criar facção com id maior que 0 - Recruta - 20/05/2021

Não mudou nada, continua da mesma forma.


RE: Criar facção com id maior que 0 - xbruno1000x - 21/05/2021

Como ficou nos arquivos?


RE: Criar facção com id maior que 0 - Recruta - 21/05/2021

Da mesma forma, não alterou nada, deletei tudo e depois fiz o que falou.


RE: Criar facção com id maior que 0 - xbruno1000x - 22/05/2021

(21/05/2021 17:35)Recruta Escreveu: Da mesma forma, não alterou nada, deletei tudo e depois fiz o que falou.

Você alterou todos os fCount dessa parte do código? eu mandei apenas um exemplo, não alterei todos.

Código:
new INI:File = INI_Open(FactionPath(fCount+1));

Código:
format(string, sizeof(string), "{8EB2D6}[SERVER]{FFFFFF}: Você criou a facção %s (ID: %d) Tipo: %d.", name, fCount+1, type);

O único que deve permanecer igual é o fCount ++


RE: Criar facção com id maior que 0 - ProKillerPa - 25/05/2021

Bom, basta voce fazer um loop que começa em 0 e vai ate um valor definido ( popularmente conhecido, num sistema de orgs por exemplo, como MAX_ORGS ) e verificar se esse arquivo NAO existe, aí voce cria ele e utiliza um break no loop.

Nunca utilizei Y_INI, mas vou deixar um script pra voce se basear em DO2, que é o que eu utilizo.

Código PHP:
#define SUA_PASTA "Sua Pasta Facs/%i.ini" // << Aqui voce define por numero, não por nome da fac.

#define MAX_FACS 10 // Aqui voce define um numero simbólico de facs.

new pqp[celulas_max]; // Altere para as celulas que voce utilizará no total.

for(new iMAX_FACSi++){

    
format(pqpsizeof(pqp), SUA_PASTAi);

    if(!
DOF2::FileExists(pqp)){ // o loop vai girar até achar um ID entre 0 e 9 que NÃO existe, e aí voce cria ele.

        // Cria o arquivo

        
break; // encerra o loop, se não ele vai criar todos os IDS que não existem entre 0 e 9.
    
}



Observação importante:

STRINGS não são definidas como INTS, pra atribuir um valor CHAR a uma STRING voce utiliza format, veja o que voce fez abaixo:

Código PHP:
fInfo[fCount][fName] = name// errado

format(fInfo[fCount][fName], MAX_PLAYER_NAMEname); // correto 


Abraços

(20/05/2021 19:58)xbruno1000x Escreveu: No seu sistema, você diz que funciona com id a partir de 0. Substitua os "fCount" por "fCount+1" e nunca terá um valor igual a 0.

Isso funcionaria apenas se o servidor nunca realizasse um GMX. Não seria a solução para o sistema dele, pois caso queira adicionar uma FAC futuramente, daria conflito.


RE: Criar facção com id maior que 0 - xbruno1000x - 26/05/2021

(20/05/2021 19:58)xbruno1000x Escreveu: No seu sistema, você diz que funciona com id a partir de 0. Substitua os "fCount" por "fCount+1" e nunca terá um valor igual a 0.

Citar:Isso funcionaria apenas se o servidor nunca realizasse um GMX. Não seria a solução para o sistema dele, pois caso queira adicionar uma FAC futuramente, daria conflito.



Eu penso que essa variavel fCount fica armazenada mesmo após um GMX, afinal ela conta quantas facções foram criadas. Caso não fosse armazenada, o sistema já estaria bugado, pois após o GMX criaria mais de uma facção com ID's repetidos a partir de 0. Mas você tem razão, essa não é uma solução definitiva, é apenas uma gambiarra. Além disso, eu só vi a linha do comando de criar facção, e sem conhecer o sistema como um todo isso realmente poderia acarretar em bugs.