Ayuda con dialog list
#1

Hola, mi problema es que estoy haciendo un sistema de vehнculos y ahora lo que quiero hacer es mostrar un dialog list dependiendo de la cantidad de vehнculos que tenga el jugador, es decir:

Si el jugador tiene 3 vehнculos mostrar: \nVehнculo 1\nVehнculo 2\nVehнculo 3
Si el jugador tiene 1 vehнculo mostrar: Vehнculo 1

Hice esto:
pawn Код:
CMD:vehiculos(playerid, params[])
{
    if(JugadorInfo[playerid][Autos] == 0) return MensajeError(playerid, "No tienes ningъn vehнculo.");
    GetPlayerVehicles(playerid);
    new string[22+20+2+5];
    for(new i = 0; i < JugadorInfo[playerid][Autos]; i++)
    {
        format(string, sizeof(string), "\n%s - Slot %i (ID %i)", NombreVehiculos[JugadorInfo[playerid][Llaves][i]-400], i, JugadorInfo[playerid][Llaves][i]);

    }
    ShowPlayerDialog(playerid, DIALOG_VEHICULOS, DIALOG_STYLE_LIST, "Tus Vehнculos", string, "Seleccionar", "Cerrar");
    return 1;
}
Donde JugadorInfo[playerid][Llaves][i] es el id del vehнculo que tiene el jugador e i es el slot del vehнculo (JugadorInfo[playerid][Llaves] se almacena como JugadorInfo[playerid][Llaves][0], JugadorInfo[playerid][Llaves][1], etc)

GetPlayerVehicles(playerid) busca todos los vehнculos con el nombre del jugador en la base de datos y los almacena en la variable JugadorInfo[playerid][Llaves][0], JugadorInfo[playerid][Llaves][1], etc.

Creo que debo hacer un loop como el que hice que empiece desde 0 y termine en la cantidad de autos que tiene el jugador. Probй hacerlo con strins pero no me salio bien.

Espero que me puedan ayudar, saludos!
Reply
#2

Cada vez que encuentra un vehнculo, setea la variable completamente, sobreescribiendo todo. Por eso solo te mostraba el ъltimo slot del jugador.
Reply
#3

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Cada vez que encuentra un vehнculo, setea la variable completamente, sobreescribiendo todo. Por eso solo te mostraba el ъltimo slot del jugador.
Perdуn pero no entendн, como deberнa hacer entonces?
Reply
#4

pawn Код:
#define MAX_SLOTS (2)
CMD:vehiculos(playerid, params[])
{
    if(JugadorInfo[playerid][Autos] == 0) return MensajeError(playerid, "No tienes ningъn vehнculo.");
    GetPlayerVehicles(playerid); //esta creo ke esta de mas pero..
    new dataslots[2][23*MAX_SLOTS];
    for(new slots, item = sizeof(JugadorInfo[playerid][Autos]); slots != item; slots++) {  //el bucle obtenera  el valor del array con sizeof de la variable del playe la ke coresponde a los slots del vehiculos.
//23*MAX_SLOTS el 23 es los caracteres ke hay en el format y l omultipicara lor cada slots
        format(dataslots[0], 23*MAX_SLOTS, "%s - Slot %i (ID %i) \n", NombreVehiculos[JugadorInfo[playerid][Llaves][slots]-400], slots, JugadorInfo[playerid][Llaves][slots]); //el  \n creada laa nueval inea segun los slots.
    }
    strcat(dataslots[1], dataslots[0]); //unida todas lasl ineas ke obtuvo el bucle y lo guardara en otra variable. y hay se la dara al  ShowPlayerDialog
    ShowPlayerDialog(playerid, DIALOG_VEHICULOS, DIALOG_STYLE_LIST, "Tus Vehнculos", dataslots[1], "Seleccionar", "Cerrar");
    return true;
}
// no entiendo tus variables pero esa seria la forma de hacerlo...
Reply
#5

Quote:
Originally Posted by OTACON
Посмотреть сообщение
pawn Код:
#define MAX_SLOTS (2)
CMD:vehiculos(playerid, params[])
{
    if(JugadorInfo[playerid][Autos] == 0) return MensajeError(playerid, "No tienes ningъn vehнculo.");
    GetPlayerVehicles(playerid);
    new dataslots[2][23*MAX_SLOTS];
    for(new slots, item = sizeof(JugadorInfo[playerid][Autos]); slots != item; slots++) {
        format(dataslots[0], 23*MAX_SLOTS, "%s - Slot %i (ID %i) \n", NombreVehiculos[JugadorInfo[playerid][Llaves][slots]-400], slots, JugadorInfo[playerid][Llaves][slots]);
    }
    strcat(dataslots[1], dataslots[0]);
    ShowPlayerDialog(playerid, DIALOG_VEHICULOS, DIALOG_STYLE_LIST, "Tus Vehнculos", dataslots[1], "Seleccionar", "Cerrar");
    return true;
}
Tira estos errores:
Код:
(2537) : error 017: undefined symbol "MAX_SLOTS"
(2537) : error 009: invalid array size (negative, zero or out of bounds)
(2538) : error 001: expected token: "]", but found "-identifier-"
(2538) : error 029: invalid expression, assumed zero
(2538) : warning 215: expression has no effect
(2538) : error 001: expected token: ";", but found "]"
(2538) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


6 Errors.
Donde la linea 2537 es:
pawn Код:
new dataslots[2][23*MAX_SLOTS];
y la linea 2538 es:
pawn Код:
for(new slots, item = sizeof(JugadorInfo[playerid][Autos]); slots != item; slots++) {
Reply
#6

aca un ejemplo mas facil.. pero creo ke el tuyo lo unico que tenia mal era el \n ubicado.
pawn Код:
#define DIALOG_VEHICULOS (1)
#define MAX_SLOTS (5)
static slotsvariable[MAX_PLAYERS];

CMD:test1(playerid, params[]) {
    slotsvariable[playerid]++;
    return true;
}
CMD:test2(playerid, params[]) {
    slotsvariable[playerid]--;
    return true;
}
CMD:test3(playerid, params[]) {
    if(slotsvariable[playerid] <= 0) return SendClientMessage(playerid, -1, "No tienes ningъn vehнculo.");
    new dataslots[2][10*MAX_SLOTS];
    for(new slots=1; slots<slotsvariable[playerid]; slots++) {
        format(dataslots[0], 10*slotsvariable[playerid], "Slot %d \n", slots);
        strcat(dataslots[1], dataslots[0]);
        ShowPlayerDialog(playerid, DIALOG_VEHICULOS+0, DIALOG_STYLE_LIST, "Tus Vehнculos", dataslots[1], "Seleccionar", "Cerrar");
    } return true;
}
Reply
#7

pawn Код:
for(new i = 0; i < JugadorInfo[playerid][Autos]; i++)
    {
        format(string, sizeof(string), "\n%s - Slot %i (ID %i)", NombreVehiculos[JugadorInfo[playerid][Llaves][i]-400], i, JugadorInfo[playerid][Llaves][i]);

    }
Imagina el funcionamiento de ese cуdigo... Ahora el de este.

pawn Код:
new var = 9;
for(new a = 0; a != 10; a++) var = a;
No importa que hagas, ese bucle le entregarб a la variable solo el ъltimo valor que obtenga del bucle. Tu soluciуn es guardar los datos de la variable antes de volver a darle formato.

pawn Код:
for(new i = 0; i < JugadorInfo[playerid][Autos]; i++)
    {
        format(string, sizeof(string), "%s\n%s - Slot %i (ID %i)", string, NombreVehiculos[JugadorInfo[playerid][Llaves][i]-400], i, JugadorInfo[playerid][Llaves][i]);

    }
Reply
#8

@DesingMyCry el kiere justamente lo ke le deje ...
http://forum.sa-mp.com/showpost.php?...73&postcount=6
Reply
#9

Y? por eso tendria que no responderle su pregunta?

Ademбs tu cуdigo esta mal.
Reply
#10

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Y? por eso tendria que no responderle su pregunta?

Ademбs tu cуdigo esta mal.
no solo lo dije.. no interpretes mal que fue de onda para ayudarlo..

y me podrias decir en que esta mal porfavor.
gracias,saludos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)