[Ajuda] Comando daradmin com UPDATE
#1

Estou criando um gm do zero para estudos, e criei um comando de dar admin, sу que eu nao estou conseguindo pegar o nome do outro player, que vai ser promovido

olha oque eu cheguei
pawn Код:
CMD:daradmin(playerid, parms[]){
    new id, level, query[128], nome[MAX_PLAYER_NAME], Msg[100];
    GetPlayerName(id, nome, sizeof(nome));
    if(sscanf(parms, "us[128]", id, level)) SendClientMessage(playerid,-1,"Use /daradmin ID <Level: 2 - 5 > VIP Level 2 ");
    format(query, sizeof(query),"UPDATE `contas` SET level = '%d' WHERE `nome` = '%s'", level, id);
    mysql_function_query(mysql, query, false, "", "");
    format(Msg, sizeof(Msg), "{00FF80}Parabens, %s foi promovido !",id);
    SendClientMessageToAll(-1,Msg);
    return 1;
}
O comando em mysql estб correto o problema й pegar o nome do outro player
Reply
#2

Vocк getou o noem do player corretamente, sу nгo soube representar depois. Vocк getou o nome do player promovido para a variavel 'nome', sendo assim na query onde vc colocou 'id' seria 'nome' e a mesma coisa na frase.
Код:
CMD:daradmin(playerid, parms[])
{
	new id, level, query[128], nome[MAX_PLAYER_NAME], Msg[100];
	if(sscanf(parms, "us[128]", id, level)) return SendClientMessage(playerid,-1,"Use /daradmin ID <Level: 2 - 5 > VIP Level 2 ");
    GetPlayerName(id, nome, sizeof(nome));
    mysql_format(mysql, query, sizeof(query), "UPDATE `contas` SET level = '%d' WHERE `nome` = '%s'", level, nome);
	mysql_query(mysql, query);
    format(Msg, sizeof(Msg), "{00FF80}Parabens, %s foi promovido !",nome);
	SendClientMessageToAll(-1,Msg);
	return 1;
}
Reply
#3

Quote:
Originally Posted by GabrielDias_Invision
Посмотреть сообщение
Vocк getou o noem do player corretamente, sу nгo soube representar depois. Vocк getou o nome do player promovido para a variavel 'nome', sendo assim na query onde vc colocou 'id' seria 'nome' e a mesma coisa na frase.
Код:
CMD:daradmin(playerid, parms[])
{
	new id, level, query[128], nome[MAX_PLAYER_NAME], Msg[100];
	GetPlayerName(id, nome, sizeof(nome));
	if(sscanf(parms, "us[128]", id, level)) SendClientMessage(playerid,-1,"Use /daradmin ID <Level: 2 - 5 > VIP Level 2 ");
	format(query, sizeof(query),"UPDATE `contas` SET level = '%d' WHERE `nome` = '%s'", level, nome);
	mysql_function_query(mysql, query, false, "", "");
	format(Msg, sizeof(Msg), "{00FF80}Parabens, %s foi promovido !",nome);
	SendClientMessageToAll(-1,Msg);
	return 1;
}
Errado, pois quando se cria uma variavel ela automaticamente se denomina 0, e para ela receber o valor do ID que ele setou como admin, ele precisa Usar GetPlayerName, apуs a formataзгo no sscanf
Fora isto tu ta certo abrзs
Reply
#4

Quote:
Originally Posted by Day_
Посмотреть сообщение
Errado, pois quando se cria uma variavel ela automaticamente se denomina 0, e para ela receber o valor do ID que ele setou como admin, ele precisa Usar GetPlayerName, apуs a formataзгo no sscanf
Fora isto tu ta certo abrзs
Isso mesmo, obrigado pela correзгo. Esqueci de colar o comando corrigido aqui.
Reply
#5

Obrigado pela ajuda, mas quando eu dou update ele envia um numero completamente diferente q eu mandei...

ex:
/daradmin 0 2 > envia 50

/daradmin 0 1 > envia 49
Reply
#6

PHP код:
if(sscanf(parms"us[128]"idlevel)) SendClientMessage(playerid,-1,"Use /daradmin ID <Level: 2 - 5 > VIP Level 2 "); 
Achei que vocк pretendia fazer por nome do cargo...
Caso queira por ID use:
PHP код:
if(sscanf(parms"ud"idlevel)) SendClientMessage(playerid,-1,"Use /daradmin ID <Level: 2 - 5 > VIP Level 2 "); 
Wiki sscanf no SA-MP
Porйm aconselho ler tambem este post ele contem varios exemplos
Reply
#7

Obrigado
@Edit
bom, como eu faзo funcionar um if requerendo um level

ex:


if(player[playerid][Level] > 1){
}

caso o level for maior que um ele executa

jб tenho a enum defenida

// Informaзхes dos players
enum Dados {
Logado,
Score,
Level,
Dinheiro
}

agora queria saber como eu pego informaзгo lб do banco de dados
Reply
#8

Espero que entenda...
Caso nгo entenda veja os tutoriais:
Tutorial SQL

MySQL no Samp
PHP код:
new query[300];
mysql_format(MySQLquerysizeof(query), "SELECT * FROM `Colum` WHERE `Local` = 'DefinirLocal'");
mysql_tquery(MySQLquery"MySQLTeste""");

forward MySQLTeste();
public 
MySQLTeste()
{
    new 
rows,fields
    
cache_get_data(rows,fields,MySQL);
    if(
rows// Caso exista o que vocк chamou
    
{
        
variavelquevocequer cache_get_field_content/*(_int, _float)qual voce quiser*/(Linha"Colum"ConectionHandle));
    }
    else 
// Caso nгo exista o que vocк chamou
    
{
    
    }
    return 
true;

Reply
#9

Pra fazer com q a query so seja executada caso insira um level vбlido vc pode usar:
Код:
if(level < 1 || level > 5)
    return SendClientMessage(playerid, -1, "[ERRO] Level invбlido"):
Nesse caso se o player inserir um level menor que 1 ou maior que 5, a query nгo serб executada.

Para nгo ter que ficar consultando o Banco toda hora, vc armazena os valores nas variaveis criadas. Na hora de carregar a conta do player ao logar vocк pode usar:
Код:
No OnplayerConnect:
new nomeplayer[32], query[256];
GetPlayerName(playerid, nomeplayer, sizeof nomeplayer);
mysql_format(query, sizeof query, "SELEC * FROM `contas` WHERE `nome` = '%s'", nomeplayer);
mysql_tquery(mysql, query, "VerificarConta", "i", playerid); // mysql = nome da sua conexao com o banco / query й a string que vai ser passada para fazer a consulta


Final do GM:
stock VerificarConta(playerid)
{
    new resultado[32];
    cache_get_data(rows, fields, conexao); // Geta o resultado da consulta

	if(rows) // Se existe a conta do player
	{
		cache_get_field_content(0, "level", resultado), PlayerInfo[playerid][Level] = strval(resultado); // resultado = a string que armazena o dado da coluna / "level" = a coluna level dentro do banco / PlayerInfo[playerid][Level] = sua enum de dados dos players / strval(resultado) = converte a string com o resultado do campo level em numero inteiro
    }
    return 1;
}
Nгo sou bom com explicaзхes Ok, mas й mais ou menos isso ai.
Reply
#10

Eu tinha feito isso no meu sistema de login e esqueci, caso o player errasse a senha ou acertasse, obrigado

soq eu fiz assim
pawn Код:
new name[MAX_PLAYER_NAME], query[1024];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s'", name);
    mysql_function_query(mysql, query, true, "RequerLogin", "d", playerid);
Sу tem um problema, ele so vai verificar o level do player quando ele for logar, entгo se ele for promovido, os comandos sу estarб disponivel se ele deslogar e logar novamente.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)