SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 12/04/2020, 12:50 AM   #1
FabioGTP
Huge Clucker
 
Join Date: May 2014
Posts: 399
Reputation: 0
Default Foreach samp?

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?
__________________
Scripter Iniciante
FabioGTP is offline   Reply With Quote
Old 12/04/2020, 01:05 AM   #2
Khivory
Huge Clucker
 
Khivory's Avatar
 
Join Date: Feb 2020
Posts: 320
Reputation: 17
Default Re: Foreach samp?

Pode dar um exemplo de código para passarmos para a sintaxe do pawn?
Khivory is offline   Reply With Quote
Old 12/04/2020, 01:09 AM   #3
FabioGTP
Huge Clucker
 
Join Date: May 2014
Posts: 399
Reputation: 0
Default Re: Foreach samp?

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; ?>
__________________
Scripter Iniciante
FabioGTP is offline   Reply With Quote
Old 12/04/2020, 04:18 AM   #4
Khivory
Huge Clucker
 
Khivory's Avatar
 
Join Date: Feb 2020
Posts: 320
Reputation: 17
Default Re: Foreach samp?

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?
Khivory is offline   Reply With Quote
Old 12/04/2020, 05:38 AM   #5
PT
Godfather
 
PT's Avatar
 
Join Date: Nov 2012
Location: Europe
Posts: 7,180
Reputation: 803
Default Re: Foreach samp?

algo que te vai ajudar

https://forum.sa-mp.com/showthread.php?t=625227
https://forum.sa-mp.com/showthread.php?t=570937
PT is offline   Reply With Quote
Old 13/04/2020, 03:13 AM   #6
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Location: 01010011 01010000
Posts: 875
Reputation: 66
Default Re: Foreach samp?

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://forum.sa-mp.com/showthread.php?t=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).
RiqueP is offline   Reply With Quote
Old 20/04/2020, 02:21 PM   #7
FabioGTP
Huge Clucker
 
Join Date: May 2014
Posts: 399
Reputation: 0
Default Re: Foreach samp?

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://forum.sa-mp.com/showthread.php?t=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?
__________________
Scripter Iniciante
FabioGTP is offline   Reply With Quote
Old 20/04/2020, 03:29 PM   #8
RiqueP
Gangsta
 
RiqueP's Avatar
 
Join Date: Jan 2014
Location: 01010011 01010000
Posts: 875
Reputation: 66
Default Re: Foreach samp?

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://forum.sa-mp.com/showthread.php?t=294999. Apesar de ser dini, serve também.
RiqueP is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
samp /ar bug (ID) foreach[SOLVED] UserName31 Scripting Help 2 09/08/2014 07:32 PM
Foreach Seifspeed Scripting Help 3 16/06/2014 11:15 AM
foreach povilaslt2 Help Archive 6 07/05/2010 04:23 PM


All times are GMT. The time now is 09:12 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.