[Ajuda] Setando armas in-game
#1

Eu estou com uma funзгo aqui que nгo tб setando as variбveis in-game conforme elas deveriam ser feitas. Nгo sei se й porque eu estou utilizando os cуdigos mysql de forma errada. Enfim. Coloquei na public OnPlayerSpawn (que й lб que carrega e seta todas as coisas do player):

Код:
new strArmas[256];
				format(strArmas, 256, "SELECT `pWeapon1`, `pAmmo1`, `pWeapon2`, `pAmmo2`, `pWeapon3`, `pAmmo3`, `pWeapon4`, `pAmmo4`, `pWeapon5`, `pAmmo5`, `pWeapon6`, `pAmmo6`, `pWeapon7`, `pAmmo7`, `pWeapon8`, `pAmmo8`, `Weapon9`, `pAmmo9`, `pWeapon10`, `pAmmo10`, `pWeapon11`, `pAmmo11`, `pWeapon1`, `pAmmo12`, `pWeapon13`, `pAmmo13` FROM `accounts` WHERE `ID` = '%d'", PlayerInfo[playerid][pID]);
				mysql_tquery(mySqlHandle, strArmas, "SetandoArmas", "d", playerid);
Aн depois na que й chamada, a SetandoArmas eu pus o seguinte:

Код:
forward SetandoArmas(playerid);
public SetandoArmas(playerid)
{
	new rows;

	cache_get_row_count(rows);

	if(rows)
	{
			
		for(new i; i < rows; i++)
		{
			cache_get_value_name_int(i,"pWeapon1", PlayerInfo[playerid][pWeapon1]);
			cache_get_value_name_int(i,"pAmmo1", PlayerInfo[playerid][pAmmo1]);
			cache_get_value_name_int(i,"pWeapon2", PlayerInfo[playerid][pWeapon2]);
			cache_get_value_name_int(i,"pAmmo2", PlayerInfo[playerid][pAmmo2]);
			cache_get_value_name_int(i,"pWeapon3", PlayerInfo[playerid][pWeapon3]);
			cache_get_value_name_int(i,"pAmmo3", PlayerInfo[playerid][pAmmo3]);
			cache_get_value_name_int(i,"pWeapon4", PlayerInfo[playerid][pWeapon4]);
			cache_get_value_name_int(i,"pAmmo4", PlayerInfo[playerid][pAmmo4]);
			cache_get_value_name_int(i,"pWeapon5", PlayerInfo[playerid][pWeapon5]);
			cache_get_value_name_int(i,"pAmmo5", PlayerInfo[playerid][pAmmo5]);
			cache_get_value_name_int(i,"pWeapon6", PlayerInfo[playerid][pWeapon6]);
			cache_get_value_name_int(i,"pAmmo6", PlayerInfo[playerid][pAmmo6]);
			cache_get_value_name_int(i,"pWeapon7", PlayerInfo[playerid][pWeapon7]);
			cache_get_value_name_int(i,"pAmmo7", PlayerInfo[playerid][pAmmo7]);
			cache_get_value_name_int(i,"pWeapon8", PlayerInfo[playerid][pWeapon8]);
			cache_get_value_name_int(i,"pAmmo8", PlayerInfo[playerid][pAmmo8]);
			cache_get_value_name_int(i,"pWeapon9", PlayerInfo[playerid][pWeapon9]);
			cache_get_value_name_int(i,"pAmmo9", PlayerInfo[playerid][pAmmo9]);
			cache_get_value_name_int(i,"pWeapon10", PlayerInfo[playerid][pWeapon10]);
			cache_get_value_name_int(i,"pAmmo10", PlayerInfo[playerid][pAmmo10]);
			cache_get_value_name_int(i,"pWeapon11", PlayerInfo[playerid][pWeapon11]);
			cache_get_value_name_int(i,"pAmmo11", PlayerInfo[playerid][pAmmo11]);
			cache_get_value_name_int(i,"pWeapon12", PlayerInfo[playerid][pWeapon12]);
			cache_get_value_name_int(i,"pAmmo12", PlayerInfo[playerid][pAmmo12]);
			cache_get_value_name_int(i,"pWeapon13", PlayerInfo[playerid][pWeapon13]);
			cache_get_value_name_int(i,"pAmmo13", PlayerInfo[playerid][pAmmo13]);
		}
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon1], PlayerInfo[playerid][pAmmo1]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon2], PlayerInfo[playerid][pAmmo2]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon3], PlayerInfo[playerid][pAmmo3]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon4], PlayerInfo[playerid][pAmmo4]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon5], PlayerInfo[playerid][pAmmo5]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon6], PlayerInfo[playerid][pAmmo6]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon7], PlayerInfo[playerid][pAmmo7]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon8], PlayerInfo[playerid][pAmmo8]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon9], PlayerInfo[playerid][pAmmo9]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon10], PlayerInfo[playerid][pAmmo10]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon11], PlayerInfo[playerid][pAmmo11]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon12], PlayerInfo[playerid][pAmmo12]);
		GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon13], PlayerInfo[playerid][pAmmo13]);
	}
}
Sу que o problema de toda essa merda й que as armas nгo carregam. Nгo hб nenhuma funзгo (ao menos no meu ponto de vista) que estб resetando as armas do player logo apуs que eu seto. E as armas estгo salvando corretamente na DB.
Reply
#2

Jб tentei de outras formas diferentes em nada.

No LoadPlayer, como cache_get_value_name_int, tentei uma funзгo stock tambйm:

Код:
EM THREAD_LOAD_ACCOUNTS do OnQueryFinish:	



for (new i = 0; i < 13; i ++) {
		cache_get_value_name_int(0, "pWeapon%d", PlayerInfo[playerid][pWeapon][i]);
		cache_get_value_name_int(0, "pAmmo%d", PlayerInfo[playerid][pAmmo][i]);
	}
Код:
SetarArmas(playerid){

	for (new i = 0; i < 13; i ++) if (PlayerInfo[playerid][pWeapon][i] > 0 && PlayerInfo[playerid][pAmmo][i] > 0) {
	    GivePlayerWeapon(playerid, PlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
	}
	return 1;
}
Sу que simplesmente essa merda nгo vai! Como capturo na ъltima versгo do plugin MySQL as armas da tabela `accounts` especificamente `pWeapon0` atй `pWeapon13` e seto elas no personagem quando ele loga? Parece a porra de uma pergunta besta mas isso й IRRITANTE.
Reply
#3

Bom, eu modifiquei esse cуdigo de acordo com o que vocк postou nesta ъltima resposta:

PHP код:
public SetandoArmas(playerid)
{
    new 
rows;
    
cache_get_row_count(rows);
    if(
rows)
    {
        for(new 
013i++)//Percorrendo os slots de armas disponнveis
        
{
            new 
strWeapon[64];//String para formatar o nome do campo
            
format(strWeapon64"pWeapon%d"i+1);//Formatando a string para acessar o campo pWeapon consultado
            
PlayerInfo[playerid][pWeapon][i] = cache_get_field_content_int(0strWeapon);
            
format(strWeapon64"pAmmo%d"i+1);//Formatando a string para acessar o campo pAmmo consultado
            
PlayerInfo[playerid][pAmmo][i] = cache_get_field_content_int(0strWeapon);
            
GivePlayerWeapon(playeridPlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
        }
    }

Como vocк fez a consulta no banco usando um ID (supondo que ele seja a chave primбria ou primary key), sу vai obter uma linha como resposta, que, consequentemente, serб a linha 0.

Teste e nos diga se funcionou corretamente.
Reply
#4

oque seria isso :
PHP код:
if(rows)
    { 
?
Reply
#5

Quote:
Originally Posted by GSantana
Посмотреть сообщение
oque seria isso :
PHP код:
if(rows)
    { 
?
Se as linhas consultadas na database existem.

Quote:
Originally Posted by iHollyZinhO
Посмотреть сообщение
Bom, eu modifiquei esse cуdigo de acordo com o que vocк postou nesta ъltima resposta:

PHP код:
public SetandoArmas(playerid)
{
    new 
rows;
    
cache_get_row_count(rows);
    if(
rows)
    {
        for(new 
013i++)//Percorrendo os slots de armas disponнveis
        
{
            new 
strWeapon[64];//String para formatar o nome do campo
            
format(strWeapon64"pWeapon%d"i+1);//Formatando a string para acessar o campo pWeapon consultado
            
PlayerInfo[playerid][pWeapon][i] = cache_get_field_content_int(0strWeapon);
            
format(strWeapon64"pAmmo%d"i+1);//Formatando a string para acessar o campo pAmmo consultado
            
PlayerInfo[playerid][pAmmo][i] = cache_get_field_content_int(0strWeapon);
            
GivePlayerWeapon(playeridPlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
        }
    }

Como vocк fez a consulta no banco usando um ID (supondo que ele seja a chave primбria ou primary key), sу vai obter uma linha como resposta, que, consequentemente, serб a linha 0.

Teste e nos diga se funcionou corretamente.
Nem dб pra fazer isso aн mano, eu nгo tenho a versгo R39 do MySQL. Tф com a ъltima versгo e o gamemode tб todo na ъltima versгo. cache_get_field_content_int jб nгo existe mais.
Reply
#6

Quote:
Originally Posted by Diggie
Посмотреть сообщение
Se as linhas consultadas na database existem.




Nem dб pra fazer isso aн mano, eu nгo tenho a versгo R39 do MySQL. Tф com a ъltima versгo e o gamemode tб todo na ъltima versгo. cache_get_field_content_int jб nгo existe mais.
nгo deveria ser
PHP код:
if(row 0) {} 
??
Reply
#7

Quote:
Originally Posted by Diggie
Посмотреть сообщение
Se as linhas consultadas na database existem.




Nem dб pra fazer isso aн mano, eu nгo tenho a versгo R39 do MySQL. Tф com a ъltima versгo e o gamemode tб todo na ъltima versгo. cache_get_field_content_int jб nгo existe mais.
Realmente, cache_get_field_content_int й arcaica para a sua versгo. Fazendo as devidas alteraзхes fica da seguinte forma:

PHP код:
forward SetandoArmas(playerid);
public 
SetandoArmas(playerid)
{
    new 
rows;
    
cache_get_row_count(rows);
    if(
rows)
    {
        for(new 
013i++)
        {
            new 
strWeapon[64];
            
format(strWeapon64"pWeapon%d"i+1);//Formatando a string para acessar o campo pWeapon consultado
            
cache_get_value_name_int(0strWeaponPlayerInfo[playerid][pWeapon][i]);
            
format(strWeapon64"pAmmo%d"i+1);//Formatando a string para acessar o campo pAmmo consultado
            
cache_get_value_name_int(0strWeaponPlayerInfo[playerid][pAmmo][i]);
            
GivePlayerWeapon(playeridPlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
        }
    }

Quote:
Originally Posted by GSantana
Посмотреть сообщение
nгo deveria ser
PHP код:
if(row 0) {} 
??
Uma condiзгo com uma variбvel sem qualquer operador й a mesma coisa que:

Код:
if(var < 0 || var > 0)//Para nъmeros
if(var == true)//Para variбveis lуgicas
Reply
#8

Quote:
Originally Posted by GSantana
Посмотреть сообщение
nгo deveria ser
PHP код:
if(row 0) {} 
??
Existem caracteres como "!" que indicam false, por exemplo.

Код:
if(!IsPlayerConnected(playerid))
Se vocк traduz a palavra "IS PLAYER CONNECTED", vocк verб que й quando o jogador estб conectado. Quando tem "!" antes da funзгo ou "!=" em comparaзхes de if й porque significa que aquilo й NГO.

Se a gente simplesmente joga a variбvel dentro de uma if dessas ela verifica se a variбvel tem valor. Poderia ser "if(row >0)" sim, mas nгo foi desse jeito que eu botei. Mas pode dar bug nesse "row>0" tambйm, jб vi alguns casos que deu merda.


Quote:
Originally Posted by iHollyZinhO
Посмотреть сообщение
Bom, eu modifiquei esse cуdigo de acordo com o que vocк postou nesta ъltima resposta:

PHP код:
public SetandoArmas(playerid)
{
    new 
rows;
    
cache_get_row_count(rows);
    if(
rows)
    {
        for(new 
013i++)//Percorrendo os slots de armas disponнveis
        
{
            new 
strWeapon[64];//String para formatar o nome do campo
            
format(strWeapon64"pWeapon%d"i+1);//Formatando a string para acessar o campo pWeapon consultado
            
PlayerInfo[playerid][pWeapon][i] = cache_get_field_content_int(0strWeapon);
            
format(strWeapon64"pAmmo%d"i+1);//Formatando a string para acessar o campo pAmmo consultado
            
PlayerInfo[playerid][pAmmo][i] = cache_get_field_content_int(0strWeapon);
            
GivePlayerWeapon(playeridPlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i]);
        }
    }

Como vocк fez a consulta no banco usando um ID (supondo que ele seja a chave primбria ou primary key), sу vai obter uma linha como resposta, que, consequentemente, serб a linha 0.

Teste e nos diga se funcionou corretamente.
Nгo funcionou, mano. No mysql.log diz o seguinte:


Код:
[21:43:07] [DEBUG] mysql_tquery(1, "SELECT `pWeapon0`, `pAmmo0`, `pWeapon1`, `pAmmo1`, `pWeapon2`, `pAmmo2`, `pWeapon3`, `pAmmo3`, `pWeapon4`, `pAmmo4`, `pWeapon5`, `pAmmo5`, `pWeapon6`, `pAmmo6`, `pWeapon7`, `pAmmo7`, `pWeapon8`, `pAmmo8`, `Weapon9`, `pAmmo9`, `pWeapon10`, `pAmmo10`, `pWea", "SetandoArmas", "iii")
[21:43:07] [DEBUG] CCallback::Create(amx=0x295f2d8, name='SetandoArmas', format='iii', params=0x9b3fae4, param_offset=5)
[21:43:07] [DEBUG] CCallback::Create - callback index for 'SetandoArmas': 477
[21:43:07] [ERROR] mysql_tquery: callback error: parameter count does not match format specifier length
Acho que talvez o parвmetro esteja um pouco ENORME DEMAIS.
Reply
#9

Piorou. Botei a string pra ser 999 e testei com valores menores (ali por 400) e mesmo assim nгo vinga, nem sequer aparece o erro agora que aumentei a string da query da SQL.
Reply
#10

Realmente, a string do SQL estб muito grande.

A soluзгo й selecionar todos os campos:

PHP код:
SELECT FROM accounts WHERE ID='%d' 
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)