[Duda] Comando
#1

Buenas amigos de SAMP quisiera saber si me podrian ayudar con esto que lo he intentado y no me sale :

pawn Код:
YCMD:crearcasa(playerid, params[], help)
{
    new hid, query[250], string[111];
    if(IsPlayerAdmin(playerid))
    {
        new PRECIO, NIVEL;
        if(!sscanf(params, "dd", PRECIO, NIVEL))
        {
            new Float: X, Float: Y, Float: Z, Float: A;
            GetPlayerPos(playerid, X, Y, Z);
            GetPlayerFacingAngle(playerid, A);
            CasasInfo[hid][hEX] = X;
            CasasInfo[hid][hEY] = Y;
            CasasInfo[hid][hEZ] = Z;
            CasasInfo[hid][hEA] = A;
            CasasInfo[hid][hVW] = GetPlayerVirtualWorld(playerid);
            CasasInfo[hid][hPrecio] = PRECIO;
            CasasInfo[hid][hNivel] = NIVEL;
            format(string,sizeof(string),"{458B00}En Venta! \n {458B00}ID: {FFFFFF}%d \n {458B00}Precio: {FFFFFF}$%d\n {458B00}Nivel: {FFFFFF}%d", CasasInfo[hid][hSQLid], CasasInfo[hid][hPrecio], CasasInfo[hid][hNivel]);
            CasasLabel[hid] = CreateDynamic3DTextLabel(string, 0x00FF00AA, X, Y, Z, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID);
            CasasPickup[hid] = CreateDynamicPickup(1273, 1, CasasInfo[hid][hEX], CasasInfo[hid][hEY], CasasInfo[hid][hEZ]);
            mysql_format(g_Handle, query, "INSERT INTO `Casas` (Dueсo, Creado, EX, EY, EZ, EA, VW, Venta, Precio, Nivel, Seguro) VALUES ('EN-VENTA', 1, %f, %f, %f, %f, %d, 1, %d, %d, 1)", CasasInfo[hid][hEX], CasasInfo[hid][hEY], CasasInfo[hid][hEZ], CasasInfo[hid][hEA], CasasInfo[hid][hVW], CasasInfo[hid][hPrecio], CasasInfo[hid][hNivel]);
            mysql_function_query(g_Handle, query, false, "OnCheckHouse", "d", playerid);
        }
        else return SendClientMessage( playerid, COLOR_YELLOW, "Uso: /crearcasa [Precio] [Nivel]" );
    }
    else return PlayerPlaySound(playerid,1054,0.0,0.0,0.0), SendClientMessage( playerid, COLOR_ERROR, "[Error]: Usted no esta autorizado para usar este comando." );
    return 1;
}
Pasa que estoy haciendo un sistema dinamico en MySQL y trate que el comando /crearcasa verificara cuantos slot quedan disponible en
MAX_CASAS( Maxima cantidad de casas) y que este enviara un mensaje al administrador pero no me funcionу y quisiera que me hecharan una manito por favor.

PD: Tambien tengo un problema al crear la casa y es que cuando la creo el CreateDynamic3DTextLabel pone la ID de la casa como 0 siendo 1 pero si reinicio el servidor esta aparece con la ID correcta que viene siendo 1, esto se debe a que la variable CasasInfo[hid][hSQLid] esta seteada en 0 por lo tanto necesitaria verificar cuando use /crearcasa cuantas SLOT hay disponible para las casas y crearlas a partir de 1.

Muchas gracias.

Un saludo.
Reply
#2

Bueno, te voy a dar un par de indicaciones, asн vemos si podes solucionarlo solo. De ъltima te ayudamos nosotros, no hay problema, pero la idea es que aprendas a desenvolverte en MySQL, OK? :P

Bueno, volviendo al tema, por lo que vн vos queres chequear si supera el lнmite. Lo primero que tenйs que hacer es una consulta para ver cuantas casas tenes registradas en la base de datos. Es fбcil: "SELECT COUNT(*) FROM Casas".
Una vez, hecha esa consulta vamos a la callback de esa consulta y con cache_get_row, ves cuantas casas hay registradas. Una vez que sabes cuantas hay (depositando el valor en una variable), chequeas si ese valor supera al lнmite que estableciste en el GM. Si se supera el lнmite, terminas la funciуn en ese momento con un return. Caso contrario, proseguнs haciendo la segunda consulta, que serнa el INSERT INTO... que habнas puesto. Una vez que se ejecuta la consulta, vas a la callback de la consulta anterior y creas los pickups y todo.

Con respecto a las IDs, me gustarнa saber si creaste un campo en la tabla de las casas que se llame ID. Es necesario que haya una, este campo debe ser el нndice primario y tener la casilla auto_increment seleccionada, asн cuando registras una casa la base de datos, automбticamente, la base de datos registra la casa con la siguiente ID.
Reply
#3

Quote:
Originally Posted by CaptainMactavish
Посмотреть сообщение
Bueno, te voy a dar un par de indicaciones, asн vemos si podes solucionarlo solo. De ъltima te ayudamos nosotros, no hay problema, pero la idea es que aprendas a desenvolverte en MySQL, OK? :P

Bueno, volviendo al tema, por lo que vн vos queres chequear si supera el lнmite. Lo primero que tenйs que hacer es una consulta para ver cuantas casas tenes registradas en la base de datos. Es fбcil: "SELECT COUNT(*) FROM Casas".
Una vez, hecha esa consulta vamos a la callback de esa consulta y con cache_get_row, ves cuantas casas hay registradas. Una vez que sabes cuantas hay (depositando el valor en una variable), chequeas si ese valor supera al lнmite que estableciste en el GM. Si se supera el lнmite, terminas la funciуn en ese momento con un return. Caso contrario, proseguнs haciendo la segunda consulta, que serнa el INSERT INTO... que habнas puesto. Una vez que se ejecuta la consulta, vas a la callback de la consulta anterior y creas los pickups y todo.

Con respecto a las IDs, me gustarнa saber si creaste un campo en la tabla de las casas que se llame ID. Es necesario que haya una, este campo debe ser el нndice primario y tener la casilla auto_increment seleccionada, asн cuando registras una casa la base de datos, automбticamente, la base de datos registra la casa con la siguiente ID.
Muchas gracias es que no se del todo en MySQL pero cada dia se aprende mas na mas mira no sabia ese comando MySQL..

Respecto a las ID si tengo el campo ID con auto incremento funciona bien pero lo que habia dicho es que cuando creу la primera casa se pone como 0 y si creo otra sigue como 1 y asi sucesivamente, pero si reinicio la GM la ID 0 pasa a 1 y asi pasa con todas osea se ponen correctamente.

Muchisimas gracias.

Un saludo.
Reply
#4

Claro, pasa que MySQL al registrar las IDs comienza por el 1, no por el 0. Entonces al obtener las IDs directamente por la base de datos restale 1 asн se acomoda automбticamente, asн con eso podrнas trabajar tranquilo.
Reply
#5

Quote:
Originally Posted by CaptainMactavish
Посмотреть сообщение
Claro, pasa que MySQL al registrar las IDs comienza por el 1, no por el 0. Entonces al obtener las IDs directamente por la base de datos restale 1 asн se acomoda automбticamente, asн con eso podrнas trabajar tranquilo.
Muchas Gracias, pero lo que quiero es que comienze en 1 pero sera lo de menos creare la casa reinicio el GM y la casa 0 pasara a 1 y problema resuelto.

PD: Una pregunta como puedo verificar el ID de la casa osea es que hize el comando borrar casa y no me verifica la ID.

pawn Код:
YCMD:borrarcasa(playerid, params[], help)
{
    new hid, query[120], ID;
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "d", ID))
        {
            if(CasasInfo[hid][hSQLid] == ID)
            {
                DestroyDynamic3DTextLabel(CasasLabel[hid]);
                DestroyDynamicPickup(CasasPickup[hid]);
                mysql_format(g_Handle, query, "DELETE FROM `Casas` WHERE ID = %d", ID);
                mysql_function_query(g_Handle, query, false, "SendQuery","", playerid);
            }
            else return SendClientMessage(playerid, COLOR_ERROR,"[Error]: Esta ID no existe.");
        }
        else return SendClientMessage( playerid, COLOR_YELLOW, "Uso: /borrarcasa [ID]" );
    }
    else return PlayerPlaySound(playerid,1054,0.0,0.0,0.0), SendClientMessage( playerid, COLOR_ERROR, "[Error]: Usted no esta autorizado para usar este comando." );
    return 1;
}
La verdad es que es mi primer sistema dinamico en MySQL y bueno se me resulta complicado antes usaba Y_ini y era 100 veces mas facil y usaba la variable ID o creaba una variable que verificara si la casa esta creada.

Muchas gracias un saludo.
Reply
#6

Yo personalmente, no trabajarнa con IDs en este caso, porque las IDs van a ir aumentando y no van a reacomodarse y quizбs algъn dнa se safe el lнmite de casas que tenйs en tu GM. Por ejemplo, tenйs 10 casas de id 0 al 9, borras la casa id 4, quedarнa 0 1 2 3 5 6 7 8 9. No se re acomoda, por lo que serнa mejor que el GM le asigne automбticamente las IDs al cargar, y para que se mantenga siempre con el mismo orden podrнas ordenar los resultados de acuerdo a un campo que almacene el linux timestamp, es decir, por orden de tiempo.
Despues segъn el timestamp lo borrбs de la tabla.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)