Problemas para llenar un array -
YazukiAkira - 25.07.2014
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....
Respuesta: Problemas para llenar un array -
unuky - 25.07.2014
їPuede ser esto?
pawn Код:
new CasaInfo[MAX_CASAS][MAX_HUESPEDES][MAX_PLAYERS];
Re: Problemas para llenar un array -
YazukiAkira - 25.07.2014
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....
Re: Problemas para llenar un array -
Daniel-92 - 25.07.2014
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];
Respuesta: Problemas para llenar un array -
YazukiAkira - 25.07.2014
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")
Re: Problemas para llenar un array -
Daniel-92 - 25.07.2014
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.
Respuesta: Problemas para llenar un array -
YazukiAkira - 25.07.2014
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.
Re: Problemas para llenar un array -
Daniel-92 - 25.07.2014
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]++;
}
Respuesta: Problemas para llenar un array -
YazukiAkira - 25.07.2014
El codigo funciona, lo que no me convence es tener que utilizar un include para solo una funcion....
Re: Problemas para llenar un array -
Daniel-92 - 25.07.2014
Si no quieres utilizar el include solo copia la funcion al gm junto con las 3 variables que estan encima.