Problemas para llenar un array
#1

Hola estoy haciendo un sistema de casas y tengo problemas para llenar un array con los huespedes.

VALOR HUESPEDES: Pepito_Manolo,Pepe,Juancito_Pawn,Pablito_Clavito,Jaimito,Josesito

Quiero que mi array sea: CasaInfo[ID_DE_CASA][ID_DE_HUESPED][Huesped]

EJ:

- CasaInfo[4][2][Huesped] <- En la casa ID 4 recupero el Huesped ID 2 (Juancito_Pawn)
- CasaInfo[4][5][Huesped] <- En la casa ID 4 recupero el Huesped ID 5 (Josesito)

pawn Код:
#define MAX_HUESPEDES 5 // Maximo de huespedes dinamico.

enum cInfo
{
    Huespedes[126],
    Huesped[MAX_HUESPEDES],
}
new CasaInfo[MAX_CASAS][cInfo];

public CargarCasasInfo()
{
    new fila, campo;
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        for (new idx = 0; idx < fila; idx++)
        {
            cache_get_field_content(idx, "Huespedes", CasaInfo[idx][Huespedes], MySQL, 255); // Trae "Pepito_Manolo, Pepe, Juancito_Pawn, Pablito_Clavito, Jaimito".

            while (CasaInfo[idx][Huesped] < MAX_HUESPEDES)
            {
                split(CasaInfo[idx][Huespedes], CasaInfo[idx][Huesped], ',');
                CasaInfo[idx][Huesped]++;
            }
        }
    }
    return 1;
}

// La funcion split separa los valores entre las comas.
stock split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc))
    {
        if(strsrc[i] == delimiter || i == strlen(strsrc))
        {
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return 1;
}
Код:
D:\Respaldo 2014\D79 2014\gamemodes\D79.pwn(1563) : error 048: array dimensions do not match
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.

Linea 1563: split(CasaInfo[idx][Huespedes], CasaInfo[idx][Huesped], ',');
El problema es con el array multi-dimensional....
Reply
#2

їPuede ser esto?

pawn Код:
new CasaInfo[MAX_CASAS][MAX_HUESPEDES][MAX_PLAYERS];
Reply
#3

Si hago eso me dejaria de funcionar todas las otras variables que tengo en el enumerador. No solo tengo huespedes y huesped, si no que tambiйn otros datos como coordenadas, precio, interior, etc....
Reply
#4

Lo que intentas hacer no se puede poque requeriria un arrar en 4ta dimension y pawn solo soporta 3 dimensiones, tu arrar debeia quedar asi pero es imposible.

pawn Код:
enum cInfo
{
    Huespedes[126],
    Huesped[MAX_HUESPEDES][MAX_PLAYER_NAME],
}
Lo que puedes hacer es crear un arrar paralelo a ese y ahi almacenar los nombre de los huespedes.

pawn Код:
new Huesped[MAX_CASAS][MAX_HUESPEDES][MAX_PLAYER_NAME];
Reply
#5

No consigo llenarlo....

pawn Код:
new InfoHuesped[MAX_CASAS][MAX_HUESPEDES][24];

public CargarCasasInfo()
{
    new fila, campo;
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        for (new idx = 0; idx < fila; idx++)
        {
            cache_get_field_content(idx, "Huespedes", CasaInfo[idx][Huespedes], MySQL, 255); // Trae "Pepito_Manolo, Pepe, Juancito_Pawn, Pablito_Clavito, Jaimito".

            for (new i = 0; i < MAX_HUESPEDES; i++)
            {
                split(CasaInfo[idx][Huespedes], InfoHuesped[idx][i][Huesped], ',');
            }
        }
    }
    return 1;
}
Код:
error 032: array index out of bounds (variable "InfoHuesped")
Reply
#6

Prueba de esta manera.
pawn Код:
cache_get_field_content(idx, "Huespedes", CasaInfo[idx][Huespedes], MySQL, 255); // Trae "Pepito_Manolo, Pepe, Juancito_Pawn, Pablito_Clavito, Jaimito".

while(GetParamsStr(CasaInfo[idx][Huespedes],CasaInfo[idx][Huesped]+1,InfoHuesped[idx][CasaInfo[idx][Huesped]],false,',',MAX_PLAYER_NAME)) {
    CasaInfo[idx][Huesped]++;
}

//DEBUG-------------------------------------------------------------------------
print("\n\n");
for(new i=0; i < CasaInfo[idx][Huesped]; i++) {
    printf("CASA ID: %d | HUESPED %d: %s",idx,i+1,InfoHuesped[idx][i]);
}
//------------------------------------------------------------------------------
necesitaras este include.
Reply
#7

No imprime nada en consola... ni siquiere los saltos de linea.

Creo que en el while tenemos algun problema y se detiene alli el script...

їAlguna otra alternativa para hacerlo con funciones nativas? Es decir sin includes.
Reply
#8

No hay ninguna funcion nativa para separar string, el problema que tiene es que no verificaba si habia llegado al maximo

pawn Код:
while(CasaInfo[idx][Huesped] < MAX_HUESPEDES && GetParamsStr(CasaInfo[idx][Huespedes],CasaInfo[idx][Huesped]+1,InfoHuesped[idx][CasaInfo[idx][Huesped]],false,',',MAX_PLAYER_NAME)) {
    CasaInfo[idx][Huesped]++;
}
Reply
#9

El codigo funciona, lo que no me convence es tener que utilizar un include para solo una funcion....
Reply
#10

Si no quieres utilizar el include solo copia la funcion al gm junto con las 3 variables que estan encima.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)