SA-MP Forums Archive
[Ajuda] Foreach samp? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Foreach samp? (/showthread.php?tid=674080)



Foreach samp? - FabioGTP - 12.04.2020

Olб pessoal, eu vim do php e uso foreach quando salvo algo no bd para carregar as informaзхes, no caso do sa:mp se eu salvar informaзхes com dof2 й possнvel trazer da forma de um foreach? exemplo, tenho um lugar de uma facзгo ai o lнder da facзгo pode alterar o lugar de nascimento, sem mudar diretamente no cуdigo, mudando apenas no gamemode, qual a possibilidadE?


Re: Foreach samp? - Khivory - 12.04.2020

Pode dar um exemplo de cуdigo para passarmos para a sintaxe do pawn?


Re: Foreach samp? - FabioGTP - 12.04.2020

Quote:
Originally Posted by Khivory
View Post
Pode dar um exemplo de cуdigo para passarmos para a sintaxe do pawn?
Claro vamos lб, vou usar uma lуgica do gta, ok? Um exemplo no meu banco eu salvei vбrios registros e gostaria de traze-los, eu usaria:
PHP Code:
  $minhavariavel = $bd->query('SELECT * FROM teste');
<?php foreach ($minhavariavel as $item): ?>
           <p>Minha vбriavel й: <?=$item['variavel']?></p>
  <?php endforeach; ?>



Re: Foreach samp? - Khivory - 12.04.2020

Pelo que eu entendi vocк quer editar apenas variбveis com informaзхes das facзхes, sem necessariamente modificar o seu arquivo.

Vocк nгo precisa utilizar especificamente o foreach ou qualquer outro tipo de loop se vocк quer editar obter informaзхes de apenas um arquivo.

PHP Code:
new MyVariable;
if(
DOF2_FileExists("/Orgs/MyOrg.ini")) {
    
MyVariable DOF2_GetInt("/Orgs/MyOrg.ini""MyInt");
}
printf("A dobro do meu inteiro й %d"MyVariable 2); 
Se nгo й isso que quer, poderia explicar melhor?


Re: Foreach samp? - PT - 12.04.2020

algo que te vai ajudar

https://sampforum.blast.hk/showthread.php?tid=625227
https://sampforum.blast.hk/showthread.php?tid=570937


Re: Foreach samp? - RiqueP - 13.04.2020

Quote:
Originally Posted by FabioGTP
View Post
Claro vamos lб, vou usar uma lуgica do gta, ok? Um exemplo no meu banco eu salvei vбrios registros e gostaria de traze-los, eu usaria:
PHP Code:
  $minhavariavel = $bd->query('SELECT * FROM teste');
<?php foreach ($minhavariavel as $item): ?>
           <p>Minha vбriavel й: <?=$item['variavel']?></p>
  <?php endforeach; ?>
O pawn nгo vem com um foreach nativo. Existe uma bibilioteca (citada pelo PT), mas ela nгo й bem usada dessa forma que vocк espera.

Nesse caso da query, quero deixar claro que DOF2 nгo trabalha bem com algo assim. DOF2, dini, y_ini nгo trabalham com querys o que complica muito com alguns comandos simples. Por exemplo, algo como:
PHP Code:
SELECT FROM users
Nгo seria possнvel com um sistema assim.

O ideal (e que pouquнssimas pessoas seguem essa recomendaзгo) й usar um SGBD, ainda mais que vocк jб estб familiarizado com esse tipo de sistema. O samp nativamente suporta SQLite que й um bem mais leve e simples que o MySQL. Mas se quer criar algo mais complexo e que exige os recursos de um SGBD mais robusto, pode usar um plugin do MySQL feito pelo BlueG (https://github.com/pBlueG/SA-MP-MySQL/releases).

Um tutorial sobre o SQLite: https://sampforum.blast.hk/showthread.php?tid=595841. Caso tenha mais dъvidas pode me mandar um MP ou criar um tуpico caso nгo tenha achado uma resposta pelo fуrum (oque nгo й tгo fбcil acontecer).


Re: Foreach samp? - FabioGTP - 20.04.2020

Quote:
Originally Posted by RiqueP
View Post
O pawn nгo vem com um foreach nativo. Existe uma bibilioteca (citada pelo PT), mas ela nгo й bem usada dessa forma que vocк espera.

Nesse caso da query, quero deixar claro que DOF2 nгo trabalha bem com algo assim. DOF2, dini, y_ini nгo trabalham com querys o que complica muito com alguns comandos simples. Por exemplo, algo como:
PHP Code:
SELECT FROM users
Nгo seria possнvel com um sistema assim.

O ideal (e que pouquнssimas pessoas seguem essa recomendaзгo) й usar um SGBD, ainda mais que vocк jб estб familiarizado com esse tipo de sistema. O samp nativamente suporta SQLite que й um bem mais leve e simples que o MySQL. Mas se quer criar algo mais complexo e que exige os recursos de um SGBD mais robusto, pode usar um plugin do MySQL feito pelo BlueG (https://github.com/pBlueG/SA-MP-MySQL/releases).

Um tutorial sobre o SQLite: https://sampforum.blast.hk/showthread.php?tid=595841. Caso tenha mais dъvidas pode me mandar um MP ou criar um tуpico caso nгo tenha achado uma resposta pelo fуrum (oque nгo й tгo fбcil acontecer).
Entendi, entгo no caso se eu usar um sistema DOF2 que eu vi aqui, porйm eu quero salvar um dado, um exemplo
Deixe sua Mensagem e usar um dialog, a pessoa digitou a mensagem e eu quero que essa mensagem salve e retorne em um sendclientmessage, como seria feito?


Re: Foreach samp? - RiqueP - 20.04.2020

Em DOF2 você deve usar a função DOF2_GetString para pegar um texto que esta salvo em um arquivo.

Mas tome cuidado! Funções como essas, tem todo um processo de: abrir o arquivo, mapear as chaves e valores e te retornar o resultado. Isso é muito mais lento se comparado a um valor que esteja na memoria (em variável). Então, sempre que possível (oq é a maioria das vezes), faça um "pre-load" dos dados para variáveis.

Um bom exemplo disso, é no sistema de contas. Quando o Player se conectar, use as funções de Load para carregar as variáveis do jogador.
PHP Code:

// Crie uma estrutura que descreva o player:
enum E_PLAYER_DATA {
    
PlayerName[MAX_PLAYER_NAME],
    
PlayerPassword[20],
    
PlayerIp[16],
    
PlayerDinheiro,
    
PlayerLevel
}
new 
Player[MAX_PLAYERS][E_PLAYER_DATA];
// Quando ele logar, carregue os dados do arquivo dele para as variáveis:
public OnPlayerConnect(playerid) {
    if(
DOF2_FileExists(AccountFile(playerid))) {
        
format(Player[playerid][PlayerName], MAX_PLAYER_NAMEDOF2_GetString(AccountFile(playerid), "Usuario"));
        
format(Player[playerid][PlayerPassword], 20DOF2_GetString(AccountFile(playerid), "Senha"));
        
format(Player[playerid][PlayerIp], 16DOF2_GetString(AccountFile(playerid), "IP"));
        
Player[playerid][PlayerDinheiro] = DOF2_GetInt(AccountFile(playerid), "Dinheiro");
        
Player[playerid][PlayerLeve] = DOF2_GetInt(AccountFile(playerid), "Level");
    }
    return 
1;
}
// Quando ele deslogar, salve os dados das variaveis nos arquivos do jogador:
public OnPlayerDisconnect(playeridreason) {
    
SavePlayer(playerid);
    return 
1;
}
// Função para salvar os dados do jogador. Use quando ele
// desconectar e mais algumas vezes caso tenha alguma queda do servidor, não ter perda dos dados.
SavePlayer(playerid) {
    
DOF2_SetString(AccountFile(playerid), "Usuario"), Player[playerid][PlayerName]);
    
DOF2_SetString(AccountFile(playerid), "Senha"), Player[playerid][PlayerPassword]);
    
DOF2_SetString(AccountFile(playerid), "IP"), Player[playerid][PlayerIp]);
    
DOF2_SetInt(AccountFile(playerid), "Dinheiro"Player[playerid][PlayerDinheiro]);
    
DOF2_SetInt(AccountFile(playerid), "Level"Player[playerid][PlayerLeve]);
    return 
1;
}
AccountFile(playerid) {
    new 
file[40];
    
format(filesizeof(file), "Contas/%s.ini");
    return 
file;

Vai ter contextos que você deverá usar funções como DOF2_GetString diretamente em algum format ou algo assim; Mas, sempre que possível, evite isso. Dependendo, pode ter uma queda de desempenho muito grande. Um exemplo dessa queda de desempenho: https://sampforum.blast.hk/showthread.php?tid=294999. Apesar de ser dini, serve também.