[Error] Nъmero de serie.
#1

Estuve haciendo un sistema para que al comprar un arma, te de un nъmero de serie del 1 al 99999..

Tengo un problema, creй un comando llamado /vnumero, que funciona con el arma que uno tiene en mano, entonces comprй una pistola colt 45 y me dio el nъmero de serie 7545, bien, usй /vnumero y apareciу "El nъmero de serie de йsta arma es 7545", bien, ahora.. me quitй el arma, usй el comando /vnumero (tenнa el puсo en la mano) y me apareciу "El nъmero de serie de йsta arma es 7545", me giveй una escopeta y me apareciу "El nъmero de serie de йsta arma es 7545" (no es lo mismo givear que comprar, al comprar te da nъmero de serie, al givear no). Luego me comprй un rifle de caza con el nъmero de serie 17499, usй el comando /vnumero y me apareciу "El nъmero de serie de йsta arma es 17499", la descartй, me giveй una bazooka y usй /vnumero, y me apareciу "El nъmero de serie de йsta arma es 17499". Luego, descartй las armas, comprй una pistola colt 45 y me dio nъmero de serie 3000, usй /vnumero y me figurу que el nъmero de serie es 3000, no la descartй, y no me giveй armas, comprй un rifle de caza con el nъmero de serie 8000, entonces usй /vnumero y me apareciу que el nъmero era 8000, entonces seleccionй la pistola y me apareciу que era 8000, descartй armas y empezу a aparecer 8000.

Conclusiуn: Creo que detecta el ъltimo nъmero de serie del arma comprada, y por lo tanto, se hace fija.

No entiendo porque se generan йstas confusiones de script.

Al principio del GM definн;
pawn Код:
new NumeroDeSerie[MAX_PLAYERS];
Se actualiza asн;
pawn Код:
forward ActualizarNumeroSerie();
public ActualizarNumeroSerie()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(NumeroDeSerie[i] > 0)
        {
        //
        }
    }
}
Con su correspondiente timer en OnGameModeInit;
pawn Код:
SetTimer("ActualizarNumeroSerie",100,1);
El comando /vnъmero;
pawn Код:
zcmd(vnumero, playerid, params[])
    {
        new string[128];
        format(string, sizeof(string), "El nъmero de serie de йsta arma es {00FF00}%d.", NumeroDeSerie[playerid]);
        SendClientMessage(playerid, COLOR_YELLOW, string);
        return 1;
    }
Los dialog's que muestran que te da la variable;
pawn Код:
if(dialogid == AMMUNATION_MENU_PIS)
    {
        if(response == 1)
        {
           if(JugadorInfo[playerid][pGunLic] == 0)
            {
                Message(playerid, COLOR_GRAD2, " Debe tener licencia de porte armamentнstico para poder adquirir un arma.");
                return 1;
            }
            switch(listitem)
            {
                case 0:
                {
                    if(JugadorInfo[playerid][pDonateT] == 1)
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una pistola Colt M1911 (calibre .45). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su pistola es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 665);
                        SafeGivePlayerWeapon(playerid, 22, 1);

                    }
                    else
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una pistola Colt M1911 (calibre .45).");
                        format(string, sizeof(string), "El nъmero de serie de su pistola es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 960);
                        SafeGivePlayerWeapon(playerid,22,1);

                    }
                }
            }
        }
        else ShowAmmunation(playerid);
    }
    if(dialogid == AMMUNATION_MENU_ESC)
    {
        if(response == 1)
        {
           if(JugadorInfo[playerid][pGunLic] == 0)
            {
                Message(playerid, COLOR_GRAD2, " Debe tener licencia de porte armamentнstico para poder adquirir un arma.");
                return 1;
            }
            switch(listitem)
            {
                case 0:
                {
                   if(JugadorInfo[playerid][pDonateT] == 1)
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado un rifle de caza Marlin Model 336 (calibre .30). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su rifle de caza es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 693);
                        SafeGivePlayerWeapon(playerid, 33,1);

                    }
                    else
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado un rifle de caza Marlin Model 336 (calibre .30).");
                        format(string, sizeof(string), "El nъmero de serie de su rifle de caza es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 990);
                        SafeGivePlayerWeapon(playerid, 33,1);

                    }
                }
                case 1:
                {
                     if(JugadorInfo[playerid][pDonateT] == 1)
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una escopeta Ithaca 17 (calibre 18,53mm). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su escopeta normal es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 805);
                        SafeGivePlayerWeapon(playerid, 25,1);

                    }
                    else
                    {
                        new randarma = random(99999);
                        NumeroDeSerie[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una escopeta Ithaca 17 (calibre 18,53mm). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su escopeta normal es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 1150);
                        SafeGivePlayerWeapon(playerid, 25,1);

                    }
                }
            }
        }
        else ShowAmmunation(playerid);
    }
Sй que es algo complejo, desde mi punto de vista avanzado, al principio sabнa que generarнa confusiones, fue una idea propia y original, que ningъn servidor tiene, asн que decidн scriptearlo.
Reply
#2

Amigo el error esta en que estas dando un numero de serie al usuario cada vez que compra un arma en vez de darsela a cada arma se la da al usuario.

Yo creo que el error esta en NumeroDeSerie[playerid] = randarma; ya que esto hace que le da un numero de usuario fijo al usuario osea si quieres que de en cada arma diferente deberas definir mas NumeroDeSerie[playerid] ejemplo:
NumeroDeSerie1[MAX_PLAYERS];
NumeroDeSerie2[MAX_PLAYERS];

Y en cada dialog de comprar arma asignarle uno asi deberia asignarlo a cada arma.

Un saludo.
Reply
#3

їMe podrнas explicar un poco mбs?

їPodrнa agregar para el arma ID 22 (pistola) randarma y NumeroDeSerie, despuйs para el arma ID 25 (escopeta) randarma2 y NumeroDeSerie2, y para el arma ID 33 (rifle de caza) randarma3 y NumeroDeSerie3?
Reply
#4

pawn Код:
switch(listitem)
            {
                case 0:
                {
                   if(JugadorInfo[playerid][pDonateT] == 1)
                    {
                        new randarma = random(99999);
                        NumeroDeSerie1[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado un rifle de caza Marlin Model 336 (calibre .30). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su rifle de caza es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 693);
                        SafeGivePlayerWeapon(playerid, 33,1);

                    }
                    else
                    {
                        new randarma = random(99999);
                        NumeroDeSerie2[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado un rifle de caza Marlin Model 336 (calibre .30).");
                        format(string, sizeof(string), "El nъmero de serie de su rifle de caza es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 990);
                        SafeGivePlayerWeapon(playerid, 33,1);

                    }
                }
                case 1:
                {
                     if(JugadorInfo[playerid][pDonateT] == 1)
                    {
                        new randarma = random(99999);
                        NumeroDeSerie3[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una escopeta Ithaca 17 (calibre 18,53mm). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su escopeta normal es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 805);
                        SafeGivePlayerWeapon(playerid, 25,1);

                    }
                    else
                    {
                        new randarma = random(99999);
                        NumeroDeSerie4[playerid] = randarma;
                        SendClientMessage(playerid, COLOR_YELLOW, "Usted ha comprado una escopeta Ithaca 17 (calibre 18,53mm). Se le ha hecho un descuento del 30%% por ser socio.");
                        format(string, sizeof(string), "El nъmero de serie de su escopeta normal es {00FF00}%d.", randarma);
                        SendClientMessage(playerid, COLOR_YELLOW, string);
                        Compra(playerid, 1150);
                        SafeGivePlayerWeapon(playerid, 25,1);

                    }
                }
            }
        }
        else ShowAmmunation(playerid);
    }
Asi sucesivamente asi cada variable comtendra un numero de serie.

Un saludo.
Reply
#5

Muchнsimas gracias, ya funciona bien, me tocarб realizar el guardado de datos del nъmero de serie.

Ahora una duda, yo tengo un sistema para tirar armas al suelo y recogerlas del mismo, entonces..

Si por ejemplo, yo tiro mi pistola con nъmero de serie 3000, entonces una persona la recoge con /rarma, entonces esa persona utiliza /vnumero, їaparecerб que el nъmero de serie de la pistola es 3000?
Reply
#6

Quote:
Originally Posted by DeadSkyTkb
Посмотреть сообщение
Muchнsimas gracias, ya funciona bien, me tocarб realizar el guardado de datos del nъmero de serie.

Ahora una duda, yo tengo un sistema para tirar armas al suelo y recogerlas del mismo, entonces..

Si por ejemplo, yo tiro mi pistola con nъmero de serie 3000, entonces una persona la recoge con /rarma, entonces esa persona utiliza /vnumero, їaparecerб que el nъmero de serie de la pistola es 3000?
No creo al menos que guardes el numero de serie directamente al arma y no al usuario para eso creo que deberas hacer una tabla o no se como pero lo unico que te puedo decir es que para hacer lo que quieres el arma es la que deberia contener el numero de serie ya que NumeroDeSerie[MAX_PLAYERS]; contiene el numero de serie del usuario cada vez que compra un arma osea no es el arma que contiene el numero de serie no se si me entiendes.

PD: En definicion debes guardar el numero de serie en el arma y no en el usuario.

Un saludo.
Reply
#7

Vale, y tengo otro que no puedo solucionar.

Compro una escopeta normal supongamos que me da el nъmero de serie 200..

Entonces lo tiro, lo recojo y uso /vnumero y me aparece nъmero de serie 200.. Hasta ahн, vamos bien, ahora;

La tiro de nuevo, compro una nueva escopeta con por ejemplo, 300 de nъmero de serie, entonces la tiro, recojo la escopeta anterior y me da como cуdigo de serie 300, siendo que esa escopeta era 200, y la otra era 300..

їAlguna soluciуn?
Reply
#8

Quote:
Originally Posted by DeadSkyTkb
Посмотреть сообщение
Vale, y tengo otro que no puedo solucionar.

Compro una escopeta normal supongamos que me da el nъmero de serie 200..

Entonces lo tiro, lo recojo y uso /vnumero y me aparece nъmero de serie 200.. Hasta ahн, vamos bien, ahora;

La tiro de nuevo, compro una nueva escopeta con por ejemplo, 300 de nъmero de serie, entonces la tiro, recojo la escopeta anterior y me da como cуdigo de serie 300, siendo que esa escopeta era 200, y la otra era 300..

їAlguna soluciуn?
Es lo que acebe de decir amigo los numeros de series los estas guardando por la ID de cada usuario no en el arma osea si compras una escopeta con numero de serie 300 ese numero se guarda en la variable NumeroDeSerie[MAX_PLAYERS]; osea se guarda en el ID del usuario y si tiras esa arma y la recojes te dara 300 pero si la tiras y compras otra con numero de serie 100 y la tiras y cojes la otra te dara numero de serie 100.

PD: Para evitar ese pequeсo BUG deberas guardar el numero de serie en el arma y no en el usuario como dije ahorita.

Prueba hacer esto:

pawn Код:
#define MAX_ARMAS_SERIES 9999 // VALOR DEL RAMDOM
NumeroDeSerie1[ MAX_ARMAS_SERIES];
Prueba aver si te funciona si no tendras que hacer una tabla con la ID de cada arma y asignarle un random.

Mira aqui te dejare un link de como testear sistemas para varios usuarios en un mismo PC asi se nos ara mas facil saber como arreglar esta partecita http://www.pawnoscripting.com/foro/v...?f=126&t=51524
Reply
#9

їO podrнa crear una funciуn propia de stock usando el GivePlayerWeapon pero que de un cуdigo de serie fija al arma?

Digo, una funciуn tomando GivePlayerWeapon, y modificarla, creando algo como DarArmaLegal.
Reply
#10

Quote:
Originally Posted by DeadSkyTkb
Посмотреть сообщение
їO podrнa crear una funciуn propia de stock usando el GivePlayerWeapon pero que de un cуdigo de serie fija al arma?

Digo, una funciуn tomando GivePlayerWeapon, y modificarla, creando algo como DarArmaLegal.
Exacto, Y que esa funcion cada vez que de un arma se le aplique un random y hay esta solucionado cada arma con un numero de serie.

Un saludo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)