/haceradmin MySQL -
CeKiT - 06.08.2012
Hola a Todos!
Hice mi sistema de Admin mysql, y actualmente estoy dando admin desde el mysql pero quiero hacerlo ingame y necesito ayuda.
Tengo esto para hacer el update:
pawn Код:
new query[200]
format(query, sizeof(query), "UPDATE jugadores SET admin=%d WHERE usuario='%s'");
mysql_query(query);
y obviamente quiero que al poner /daradmin nombredeljugador level haga un string para devolverlo en admin=%d y usuario=%s no hace falta que capture el id del jugador a admin ni que este conectado yo escriba un nombre en /daradmin nombredeljugador y modifique su cuenta.
Gracias
Respuesta: /haceradmin MySQL -
Bu11Sh0t - 06.08.2012
pawn Код:
dcmd_daradmin(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return 0;
new id, nivel;
if(sscanf(params, "ui", id, nivel)) return SendClientMessage(playerid, -1, "SERVER: Usa /daradmin <playerid> <nivel>");
if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Jugador Invalido, Trata De Nuevo");
new query[200], name[MAX_PLAYERS_NAME];
GetPlayerName(id, name, sizeof(name));
format(query, sizeof(query), "Le has dado el nivel %d a %s (%d)", nivel, id, name);
SendClientMessage(playerid, -1, query);
format(query, sizeof(query), "UPDATE jugadores SET admin=%d WHERE usuario='%s'", nivel, name);
mysql_query(query);
return 1;
}
Requiere:
- sscanf
- dcmd
Respuesta: /haceradmin MySQL -
TheChaoz - 06.08.2012
Este comando deberia funcionar perfectamente segun tus especificaciones:
pawn Код:
/*Requisitos:
#ZCMD
#MySQL Plugin de BlueG
#sscanf
Notas:
Se debe reemplazar MySQL_Handle por el handle de la base de datos correspondiente.
*/
#include <a_samp>
#include <sscanf2>
#include <a_mysql>
#include <zcmd>
new MySQL_Handle; //MySQL_Handle = mysql_connect(...);
CMD:haceradmin(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return 0;
new name[MAX_PLAYER_NAME], level, tmp[7];
format(tmp, 7, "s[%i]i", MAX_PLAYER_NAME);
if(sscanf(params, tmp, name, level))
{
SendClientMessage(playerid, -1, "Uso: <nombre> <nivel>");
return 1;
}
new query[256];
mysql_format(MySQL_Handle, query, "SELECT * FROM jugadores WHERE usuario = '%s'", name);
mysql_query(query, .connectionHandle=MySQL_Handle);
mysql_store_result(MySQL_Handle);
if(mysql_num_rows(MySQL_Handle) > 0)
{
mysql_format(MySQL_Handle, query, "UPDATE jugadores SET admin = %i WHERE usuario = '%s'", level, name);
mysql_query(query, .connectionHandle=MySQL_Handle);
format(query, 256, "Se cambio exitosamente el nivel de admin del jugador %s a %i", name, level);
SendClientMessage(playerid, 0x00FF00FF, query);
}
else
{
SendClientMessage(playerid, 0xFF0000FF, "Error: El nombre ingresado no corresponde a un usuario registrado.");
}
mysql_free_result(MySQL_Handle);
return 1;
}
Nota:
Se lo podria mejorar y hacer mas real si se esperara la respuesta de la base de datos y luego se enviara el mensaje informando que la consulta fue realizada con exito (Se deberia utilizar "OnQueryFinish").
Respuesta: /haceradmin MySQL -
CeKiT - 06.08.2012
Hola de nuevo, por lo que veo el codigo de los dos tiene que funcionar, solamente que el de bullshot se adapta mas a mi sciprt, ya que lo hice con mysql_query(query) q es con el que utilizo.
Mi pregunta es como lo paso a comando normal a
pawn Код:
if (strcmp("/daradmin", cmdtext, true) == 0)
{
return 1;
}
Respuesta: /haceradmin MySQL -
[DOG]irinel1996 - 06.08.2012
Si tuvieras ZCMD, yo preferirнa el comando de the_chaoz porque si no me equivoco busca el nombre del usuario en la base de datos, y le da el nivel aunque no este conectado el jugador. De todas formas aquн te lo dejo con
strcmp, pero no es la mejor forma de hacerlo, no es tan rбpida y te puedes equivocar porque requiere mбs atenciуn:
pawn Код:
if(!strcmp(cmdtext, "/daradmin", true, 8)) //8 porque si contamos /daradmin salen 8 caracteres.
{
new id_jugador, nivel, query[128], nombre[MAX_PLAYER_NAME];
if(sscanf(cmdtext[8], "dd",id_jugador, nivel)) return SendClientMessage(playerid,-1,"Use /daradmin [ID Jugador] [Nivel]"); //Ojo aquн, el 8 en cmdtext.
if(!IsPlayerConnected(id_jugador)) return SendClientMessage(playerid,-1,"La ID de Jugador que ha introducido no es vбlida!");
GetPlayerName(id_jugador,nombre,MAX_PLAYER_NAME);
format(query,128,"Le ha dado a %s (ID %d) el nivel %d de Administrador.",nombre,id_jugador,nivel);
SendClientMessage(playerid,-1,query);
format(query,128, "UPDATE jugadores SET admin=%d WHERE usuario='%s'",nivel,nombre);
mysql_query(query);
//---
GetPlayerName(playerid,nombre,MAX_PLAYER_NAME);
format(query,128,"El Administrador %s [ID %d] le ha dado el nivel %d de admin.",nombre,playerid,nivel);
SendClientMessage(id_jugador,-1,query);
return 1;
}
La verdad que nunca he usado
sscanf con
strcmp, pero deberнa funcionar.
Saludos!
Respuesta: /haceradmin MySQL -
CeKiT - 06.08.2012
Perfecto, gracias a los 3