/haceradmin MySQL
#1

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
Reply
#2

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
Reply
#3

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").
Reply
#4

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;
    }
Reply
#5

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!
Reply
#6

Perfecto, gracias a los 3
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)