[Ajuda] Problema com mysql
#1

achei um sistema aqui no forum de gangzone em mysql como estou fazendo um gm em mysql decidi adaptalo ao meu gm

porem as gang zone nao carrega tentei arrumar mais n consegui :/

pawn Код:
stock LoadGangZone(gzid)
{
    new query[256];
    new field[7][25];
   
    new Row, Field;

    cache_get_data(Row, Field, xConexao);
   
    format(query, 256,"SELECT * FROM `gangzoneinfo` WHERE id=%d",gzid);
    mysql_function_query(xConexao, query, true, #, # );

    printf("[GangZone] A gz [id%d] estб sendo carregada...", gzid);

    gangzoneInfo[gzid][gzId]    = GangZoneCreate(floatstr(field[2]) , floatstr(field[3]) , floatstr(field[4]) , floatstr(field[5]));
    gangzoneInfo[gzid][gzName]  = field[1];
    gangzoneInfo[gzid][gzMinX]  = floatstr(field[2]);
    gangzoneInfo[gzid][gzMinY]  = floatstr(field[3]);
    gangzoneInfo[gzid][gzMaxX]  = floatstr(field[4]);
    gangzoneInfo[gzid][gzMaxY]  = floatstr(field[5]);
    gangzoneInfo[gzid][gzOwner]  = strval(field[6]);

    printf("[GangZone] A gz [id%d] foi carregada com os seguintes dados:" , gzid);
    printf("[] ID: %d|Nome: %s|Owner: %d" , gangzoneInfo[gzid][gzId] , gangzoneInfo[gzid][gzName] , gangzoneInfo[gzid][gzOwner]);
    printf("[] MinX: %f|MinY: %f|MaxX: %f|MaxY: %f|" , gangzoneInfo[gzid][gzMinX] , gangzoneInfo[gzid][gzMinY] , gangzoneInfo[gzid][gzMaxX] , gangzoneInfo[gzid][gzMaxY]);
    printf("[GangZone] A gz [id: %d] foi carregada por inteiro." , gzid);
}
sql:
pawn Код:
CREATE TABLE IF NOT EXISTS `gangzoneinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `minx` double NOT NULL,
  `miny` double NOT NULL,
  `maxx` double NOT NULL,
  `maxy` double NOT NULL,
  `dono` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Extraindo dados da tabela `gangzoneinfo`
--

INSERT INTO `gangzoneinfo` (`id`, `name`, `minx`, `miny`, `maxx`, `maxy`, `dono`) VALUES
(1, 'Idlewood', 1930.37, -1800.4869, 2202.9089, -1622.8649, 0);

pawn Код:
[05:04:50] [GangZone] A gz [id0] estб sendo carregada...
[05:04:50] [GangZone] A gz [id0] foi carregada com os seguintes dados:
[05:04:50] [] ID: 5|Nome: |Owner: 0
[05:04:50] [] MinX: 0.000000|MinY: 0.000000|MaxX: 0.000000|MaxY: 0.000000|
[05:04:50] [GangZone] A gz [id: 0] foi carregada por inteiro.
Reply
#2

A funзгo mysql function query estб sendo utilizada de forma incorreta.

Й necessario uma callback de resposta, pois como pawn й single thread, o que vocк colocou depois da query serб executado antes de vocк receber os dados.

Entгo o correto seria:

pawn Код:
mysql_function_query(handle,query,bool:cache,"CallbackDeResposta","parametros",valores...);
//mysql_function_query(handle,"SELECT * FROM `tabela` WHERE id='4'",true,"CallbackDeResposta","d",gzone);

// Entao ai sim vocк pode trabalhar com os valores recebidos do cache mysql

public CallbackDeResposta(gzone)
{
    new rows,fields;
    cache_get_data(rows,fields,handle);
    if(rows)
    {
        // Se for encontrado pelo menos um resultado...
    }
    else
        return print("Nгo foi encontrado nada...");
    return 1;
}
Reply
#3

ainda nao entendi :/

sou meio tapado kkkk
Reply
#4

A funзгo mysql_function_query pede para MySQL o que vocк estб consultando, e entгo o MySQL mostra os resultados, chamando a callback prй-escolhida.

Portanto vocк deve fazer assim:

pawn Код:
public MySQL_CarregarConta(playerid)
{
    new name[24];
    GetPlayerName(playerid,name,24);
    format(query,sizeof query,"SELECT * FROM `tabela` WHERE name='%s'",name); // SQL: Selecione tudo da 'tabela' onde nome for igual a 'name'.
    mysql_function_query(handle,query,true,"r@MySQL_CarregarConta","d","playerid");
    printf("Enviada a consulta %s ao mysql",query);
    return 1;
}

// Entгo os dados ao serem recebidos do MySQL executaram a callback r@MySQL_CarregarConta, onde o 'd' й o placeholder para integer, no caso playerid й uma integer. Vocк pode chamar quantos parametros quiser, por exemplo: integer e string - "ds",playerid,"TEXTO");

public r@MySQL_CarregarConta(playerid)
{
    new name[24];
    GetPlayerName(playerid,name,24);
    printf("O MySQL respondeu a sua consulta que solicitava TUDO do jogador %s",name);
    new rows,fields; // rows = linhas, fields = colunas
    cache_get_data(rows,fields,handle);
    if(rows) // Se for encontrado uma quantidade de linhas diferente de 0
    {
        // printf("Existem dados de %s. Carregando...",name);
        //cache_get_field_content(row,"campo",variavelparasalvarovalordocampo STRING,handle);
        cache_get_field_content(0,"matou",query,handle);
        PlayerInfo[playerid][matou] = strval(query);
    }
    else
        return printf("Nгo foram encontrado dados de %s",name);
    return 1;
}
Sobre eu ter dito que pawn й single thread, ele sу consegue executar uma coisa por vez, entгo os dados abaixo do mysql_function_query vгo estar na frente dos dados recebidos do mysql, como se fosse uma fila.
Reply
#5

Quote:
Originally Posted by arakuta
Посмотреть сообщение
A funзгo mysql_function_query pede para MySQL o que vocк estб consultando, e entгo o MySQL mostra os resultados, chamando a callback prй-escolhida.

Portanto vocк deve fazer assim:

pawn Код:
public MySQL_CarregarConta(playerid)
{
    new name[24];
    GetPlayerName(playerid,name,24);
    format(query,sizeof query,"SELECT * FROM `tabela` WHERE name='%s'",name); // SQL: Selecione tudo da 'tabela' onde nome for igual a 'name'.
    mysql_function_query(handle,query,true,"r@MySQL_CarregarConta","d","playerid");
    printf("Enviada a consulta %s ao mysql",query);
    return 1;
}

// Entгo os dados ao serem recebidos do MySQL executaram a callback r@MySQL_CarregarConta, onde o 'd' й o placeholder para integer, no caso playerid й uma integer. Vocк pode chamar quantos parametros quiser, por exemplo: integer e string - "ds",playerid,"TEXTO");

public r@MySQL_CarregarConta(playerid)
{
    new name[24];
    GetPlayerName(playerid,name,24);
    printf("O MySQL respondeu a sua consulta que solicitava TUDO do jogador %s",name);
    new rows,fields; // rows = linhas, fields = colunas
    cache_get_data(rows,fields,handle);
    if(rows) // Se for encontrado uma quantidade de linhas diferente de 0
    {
        // printf("Existem dados de %s. Carregando...",name);
        //cache_get_field_content(row,"campo",variavelparasalvarovalordocampo STRING,handle);
        cache_get_field_content(0,"matou",query,handle);
        PlayerInfo[playerid][matou] = strval(query);
    }
    else
        return printf("Nгo foram encontrado dados de %s",name);
    return 1;
}
Sobre eu ter dito que pawn й single thread, ele sу consegue executar uma coisa por vez, entгo os dados abaixo do mysql_function_query vгo estar na frente dos dados recebidos do mysql, como se fosse uma fila.
ta, e se eu for salvar assim ex: MinX: 0.000000|MinY: 0.000000|MaxX: 0.000000|MaxY: 0.000000| no caso em float?
da para usar " cache_get_field_content"?
Reply
#6

Sim, utilize a funзгo format para isso...

format(var,sizeof var,"%f",Float:float);
Reply
#7

Quote:
Originally Posted by arakuta
Посмотреть сообщение
Sim, utilize a funзгo format para isso...

format(var,sizeof var,"%f",Float:float);
pode me dar uma base de como salvar em float?

abraзos.
Reply
#8

mais ou menos, mais ou menos assim:

pawn Код:
stock salvarGZ ( gzid ) {

    new yQuery [ 200 ] ;
   
    format ( yQuery, 200, "UPDATE gangzoneinfo SET MinimoX='%f', MinimoY='%f', MaximoX='%f', MaximoY='%f' WHERE id='%i'",
    gangzoneInfo [ gzid ] [ gzMinX ], gangzoneInfo [ gzid ] [ gzMinY ], gangzoneInfo [ gzid ] [ gzMaxX ], gangzoneInfo [ gzid ] [ gzMaxY ] gzid );
    mysql_function_query ( CONEXAO, yQuery, true, #, # ) ;
}
fiz no bloco de notas, qualquer erro avisa no tуpico
Reply
#9

Quote:
Originally Posted by iSmirnoff
Посмотреть сообщение
mais ou menos, mais ou menos assim:

pawn Код:
stock salvarGZ ( gzid ) {

    new yQuery [ 200 ] ;
   
    format ( yQuery, 200, "UPDATE gangzoneinfo SET MinimoX='%f', MinimoY='%f', MaximoX='%f', MaximoY='%f' WHERE id='%i'",
    gangzoneInfo [ gzid ] [ gzMinX ], gangzoneInfo [ gzid ] [ gzMinY ], gangzoneInfo [ gzid ] [ gzMaxX ], gangzoneInfo [ gzid ] [ gzMaxY ] gzid );
    mysql_function_query ( CONEXAO, yQuery, true, #, # ) ;
}
fiz no bloco de notas, qualquer erro avisa no tуpico
iSmirnoff, a questгo nao й salvar e sim carregar as cordenadas das gz do banco de dados.

tentei fazer assim mais nao deu:

pawn Код:
stock LoadGangZone(gzid)
{
    new query[256];
    new field[7][25];
   
    format(query, 256,"SELECT * FROM `gangzoneinfo` WHERE id=%d",gzid);
    mysql_function_query(xConexao, query, true, #, # );
    //mysql_function_query(handle,"SELECT * FROM `gangzoneinfo` WHERE id='%d'",true,"CallbackDeResposta","d",gzid);

    printf("[GangZone] A gz [id%d] estб sendo carregada...", gzid);

    cache_get_field_content(0, "id", query, xConexao);
    gangzoneInfo[gzid][gzId]    = GangZoneCreate(floatstr(field[2]) , floatstr(field[3]) , floatstr(field[4]) , floatstr(field[5]));

    cache_get_field_content(0, "name", query, xConexao);
    gangzoneInfo[gzid][gzName]  = field[1];
   
    cache_get_field_content(0, "minx", query, xConexao);
    gangzoneInfo[gzid][gzMinX]  = floatstr(field[2]);
   
    cache_get_field_content(0, "miny", query, xConexao);
    gangzoneInfo[gzid][gzMinY]  = floatstr(field[3]);
   
    cache_get_field_content(0, "maxx", query, xConexao);
    gangzoneInfo[gzid][gzMaxX]  = floatstr(field[4]);
   
    cache_get_field_content(0, "maxy", query, xConexao);
    gangzoneInfo[gzid][gzMaxY]  = floatstr(field[5]);
   
    cache_get_field_content(0, "dono", query, xConexao);
    gangzoneInfo[gzid][gzOwner] = strval(field[6]);

    printf("[GangZone] A gz [id%d] foi carregada com os seguintes dados:" , gzid);
    printf("[] ID: %d|Nome: %s|Owner: %d" , gangzoneInfo[gzid][gzId] , gangzoneInfo[gzid][gzName] , gangzoneInfo[gzid][gzOwner]);
    printf("[] MinX: %f|MinY: %f|MaxX: %f|MaxY: %f|" , gangzoneInfo[gzid][gzMinX] , gangzoneInfo[gzid][gzMinY] , gangzoneInfo[gzid][gzMaxX] , gangzoneInfo[gzid][gzMaxY]);
    printf("[GangZone] A gz [id: %d] foi carregada por inteiro." , gzid);
}
Reply
#10

tenta assim

pawn Код:
stock carregarGZ ( yID ) {

    new yQuery [ 300 ], yValor [ 50 ] ;
   
    mysql_function_query ( xConexao, "SELECT * FROM `gangzoneinfo` WHERE id='%d'", yID ) ;
   
    cache_get_field_content ( 0, "id", yValor, xConexao ) ;
    gangZoneInfo [ yID ] [ gzID ] = strval ( yValor ) ;

    cache_get_field_content ( 0, "name", gangzoneInfo [ yID ] [ gzName ], xConexao ) ;
   
    cache_get_field_content ( 0, "minx", yValor, xConexao ) ;
    gangzoneInfo [ yID ] [ gzMinX ] = strval ( yValor ) ;
   
    cache_get_field_content ( 0, "miny", yValor, xConexao ) ;
    gangzoneInfo [ yID ] [ gzMinY ] = strval ( yValor ) ;
   
    cache_get_field_content ( 0, "maxx", yValor, xConexao ) ;
    gangzoneInfo [ yID ] [ gzMaxX ] = strval ( yValor ) ;
   
    cache_get_field_content ( 0, "maxy", yValor, xConexao ) ;
    gangzoneInfo [ yID ] [ gzMaxY ] = strval ( yValor ) ;
   
    cache_get_field_content ( 0, "dono", gangzoneInfo [ yID ] [ gzOwner ], xConexao ) ;
   
    gangZoneInfo [ yID ] [ gzID ] = GangZoneCreate ( gangzoneInfo [ yID ] [ gzMinX ], gangzoneInfo [ yID ] [ gzMinY ], gangzoneInfo [ yID ] [ gzMaxX ], gangzoneInfo [ yID ] [ gzMaxY ] ) ;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)