[Dudas] Unas cuantas dudas
#1

Bueno, pues aquн de nuevo para solicitar apoyo para aclarar mis dudas.
Bien, pues voy una a una...
- Manejo de array: Bien, explicarй con un ejemplo...
Yo creo un enumerador para listar datos y despuйs los asigno en un array multiple:
pawn Код:
enum Lista {
    dado1,
    dado2
}
new Array[MAX_PLAYERS][Lista]; //Donde MAX_PLAYERS fue definido mediante #define
Ahн funciona perfecto... el problema que me surge es cuando yo trato de hacer esto....
pawn Код:
new Variavel;
enum Lista {
    dado1,
    dado2
}
new Array[Variavel][Lista];
Y el error que surge es este: 'error 008: must be a constant expression; assumed zero'
Aquн la duda es, їcomo podrнa asignarlo?.
____________________________________________
2 - Finalizacion de OnGameModeInit
Bien, tengo una serie de cуdigos en OnGameModeInit; algo asн por ejemplo:
pawn Код:
public OnGameModeInit(){
    SetGameModeText("Servidor");
    ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
    DisableInteriorEnterExits();
    EnableStuntBonusForAll(true);
    CargarEstatico("Grupo1"); //Aquн el problema
    CarregarObjetos();
    return 1;
}
No comprendo porquй, al agregar esa linea, hace que se finalice prematuramente el callback..
Aquн dejo el callback:
pawn Код:
#define MAX_STACK ( 20 )
new MAX_L_S[MAX_STACK][1];
public CargarEstatico(Tipo[])
{
    if( strcmp ( Tipo , "Grupo1" , true ) == 0 && strlen( Tipo ) == 6 ) {
        CountAssStatic( Tipo );
        new i, v;
        do {
            i++;
            do {
                v++;
                if ( MAX_L_S[i][0] == 0 ) break;
                switch ( v ) {
                    case 0: continue;
                    default: {
                        new string[49];
                        format(string, sizeof(string), "/Stacks/Grupos/Grupo %i/Stack%i.tmp", i, v);
                        if ( fexist ( string ) ) {
                            INI_ParseFile(  _Archivo, "CarregarGrupo_%s", .bExtra = true, .extra = v);
                        }
                    }
                }
            } while( v<MAX_L_S[i][0] );
        } while( i<MAX_STACK );
        return true;
    }
    return true;
}
Sн me pueden hechar una mano... son dudas importantes que impiden que pueda avanzar con el trabajo que estoy realizando.
Obrigado anticipadamente.
Reply
#2

1era duda
pawn Код:
new Variavel;
enum Lista {
    dado1,
    dado2
}
new Array[Variavel][Lista];
El uso correcto de esto seria:
pawn Код:
#define Variavel 50
enum Lista {
    dado1,
    dado2
}
new Array[Variavel][Lista];
Porque Variavel definido en new da igual a 0, lo cual seria inutil tenerlo.
2da duda
No entendi muy bien pero creo que este seria el problema
pawn Код:
if ( MAX_L_S[i][0] == 0 ) break;
si MAX_L_S[i][0] es igual a 0.
Reply
#3

1 duda: Ok, mediante el define sн funciona, pero para editar ese parбmetro (el del define) tendria yo que entrar al .pwn y editarlo manualmente, yo quiero editar ese parбmetro IG e ir agregando +1 cada X tiempo, por eso coloque el 'new Variabel', para despuйs con un comando sumarle +1...
Sн no existe forma de hacerlo con el 'new', їexiste una forma para sumar +1 al #define vнa IG?.

2 duda: EDIT: No funciona, con o sin esa linea, me sigue finalizando prematuramente el Callback OnGameModeInit... їalguna otra idea?
Reply
#4

Quote:
Originally Posted by Oscar[A]
Посмотреть сообщение
1 duda: Ok, mediante el define sн funciona, pero para editar ese parбmetro (el del define) tendria yo que entrar al .pwn y editarlo manualmente, yo quiero editar ese parбmetro IG e ir agregando +1 cada X tiempo, por eso coloque el 'new Variabel', para despuйs con un comando sumarle +1...
Sн no existe forma de hacerlo con el 'new', їexiste una forma para sumar +1 al #define vнa IG?.

2 duda: probarй retirar ese cуdigo.
como te lo dije, el new lo hace quedar en 0, pero se puede modificar
pawn Код:
new Variabel = 10;
Reply
#5

Sн inicializo con new Variabel = 10; me sigue enviando el mismo error... 'must be a constant expression; assumed zero', creo que mejor lo dejarй con #define..

Y sobre la duda 2 edite mбs arriba..
Reply
#6

Quote:
Originally Posted by Oscar[A]
Посмотреть сообщение
Bueno, pues aquн de nuevo para solicitar apoyo para aclarar mis dudas.
Bien, pues voy una a una...
- Manejo de array: Bien, explicarй con un ejemplo...
Yo creo un enumerador para listar datos y despuйs los asigno en un array multiple:
pawn Код:
enum Lista {
    dado1,
    dado2
}
new Array[MAX_PLAYERS][Lista]; //Donde MAX_PLAYERS fue definido mediante #define
Ahн funciona perfecto... el problema que me surge es cuando yo trato de hacer esto....
pawn Код:
new Variavel;
enum Lista {
    dado1,
    dado2
}
new Array[Variavel][Lista];
Y el error que surge es este: 'error 008: must be a constant expression; assumed zero'
Aquн la duda es, їcomo podrнa asignarlo?.
____________________________________________
2 - Finalizacion de OnGameModeInit
Bien, tengo una serie de cуdigos en OnGameModeInit; algo asн por ejemplo:
pawn Код:
public OnGameModeInit(){
    SetGameModeText("Servidor");
    ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
    DisableInteriorEnterExits();
    EnableStuntBonusForAll(true);
    CargarEstatico("Grupo1"); //Aquн el problema
    CarregarObjetos();
    return 1;
}
No comprendo porquй, al agregar esa linea, hace que se finalice prematuramente el callback..
Aquн dejo el callback:
pawn Код:
#define MAX_STACK ( 20 )
new MAX_L_S[MAX_STACK][1];
public CargarEstatico(Tipo[])
{
    if( strcmp ( Tipo , "Grupo1" , true ) == 0 && strlen( Tipo ) == 6 ) {
        CountAssStatic( Tipo );
        new i, v;
        do {
            i++;
            do {
                v++;
                if ( MAX_L_S[i][0] == 0 ) break;
                switch ( v ) {
                    case 0: continue;
                    default: {
                        new string[49];
                        format(string, sizeof(string), "/Stacks/Grupos/Grupo %i/Stack%i.tmp", i, v);
                        if ( fexist ( string ) ) {
                            INI_ParseFile(  _Archivo, "CarregarGrupo_%s", .bExtra = true, .extra = v);
                        }
                    }
                }
            } while( v<MAX_L_S[i][0] );
        } while( i<MAX_STACK );
        return true;
    }
    return true;
}
Sн me pueden hechar una mano... son dudas importantes que impiden que pueda avanzar con el trabajo que estoy realizando.
Obrigado anticipadamente.
Bueno comencemos...
Primera duda: Al crear una array, la cantidad de celdas que utilizarб esa array SIEMPRE debe ser un valor constante (no se puede modificar durante la ejecuciуn), es decir, no se puede utilizar variables.
Para tu caso, tendrнas que suponer un valor mбximo, ya que no se puede.
Segunda duda:Ahн debe haber un Run Time Error, que impide la ejecuciуn del cуdigo, probablemente el famoso "Array out of bounds".
Para ver el error especнfico, utilizб este plugin:
https://sampforum.blast.hk/showthread.php?tid=262796
Aсadilo en server.cfg y compilalo en debug mode (el post de crashdetect explica como compilar un script en debug mode) para que te diga la lнnea exacta donde ocurre el Run Time Error.
Si ocurre algъn problema, podйs avisarme por PM asн te doy una mano.
Reply
#7

Lo de la primera duda me quedo ya claro.
Lo de lo segundo; no se sн lo estoy haciendo mal.. pero esto resulta:
Код:
[04/07/2012 12:57:54] [debug] Run time error 4: "Array index out of bounds"
[04/07/2012 12:57:54] [debug]   Accessing element at index 2 past array upper bound 1
[04/07/2012 12:57:54] [debug] AMX backtrace:
[04/07/2012 12:57:54] [debug] #0  00017f5c in ?? () from GMYsi.amx
[04/07/2012 12:57:54] [debug] #1  000179c0 in public Itter_OnGameModeInit () from GMYsi.amx
[04/07/2012 12:57:54] [debug] #2  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 12:57:54] [debug] #3  00017344 in public zcmd_OnGameModeInit () from GMYsi.amx
[04/07/2012 12:57:54] [debug] #4  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 12:57:54] [debug] #5  00016c04 in public S@@_OnGameModeInit () from GMYsi.amx
[04/07/2012 12:57:54] [debug] #6  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 12:57:54] [debug] #7  00005fb8 in public S@@_OnGameModeInit () from GMYsi.amx
[04/07/2012 12:57:54] [debug] #8  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 12:57:54] [debug] #9  000003a4 in public OnGameModeInit () from GMYsi.amx
Aunque aun no entiendo el porque al llamar ese callback desde OnGameModeInit, no permite que se ejecute el resto de OnGameModeInit.
Gracias por la ayuda.
Reply
#8

No lo has puesto en debug mode, si lo pusieras te saldrнa la lнnea que contiene el error.
Para ponerlo en debug mode, haz asн:
1.- Ve a la carpeta pawno y crea un archivo con el nombre "pawn.cfg".
2.- Dentro de "pawn.cfg" escribe: -d3
3.- Guarda el archivo "pawn.cfg" y compila el cуdigo nuevamente.
4.- Prueba el script en el servidor para que te salga la lнnea exacta del error.
Reply
#9

Resulta exactamente lo mismo, solamente que me finaliza la aplicaciуn.

Код:
[04/07/2012 13:10:39] [debug] Run time error 4: "Array index out of bounds"
[04/07/2012 13:10:39] [debug]   Accessing element at index 2 past array upper bound 1
[04/07/2012 13:10:39] [debug] AMX backtrace:
[04/07/2012 13:10:39] [debug] #0  00017f5c in ?? () from GMYsi.amx
[04/07/2012 13:10:39] [debug] #1  000179c0 in public Itter_OnGameModeInit () from GMYsi.amx
[04/07/2012 13:10:39] [debug] #2  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 13:10:39] [debug] #3  00017344 in public zcmd_OnGameModeInit () from GMYsi.amx
[04/07/2012 13:10:39] [debug] #4  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 13:10:39] [debug] #5  00016c04 in public S@@_OnGameModeInit () from GMYsi.amx
[04/07/2012 13:10:39] [debug] #6  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 13:10:39] [debug] #7  00005fb8 in public S@@_OnGameModeInit () from GMYsi.amx
[04/07/2012 13:10:39] [debug] #8  native CallLocalFunction () [00472260] from samp-server.exe
[04/07/2012 13:10:39] [debug] #9  000003a4 in public OnGameModeInit () from GMYsi.amx
[04/07/2012 13:10:39] [debug] Aborting...
Reply
#10

En algun punto se esta generando un overflow.
Posibles lugares:
#
pawn Код:
CountAssStatic //Algun lugar dentro de esta funcion.
#
pawn Код:
MAX_L_S[i][0] //Realmente lo dudo muchisimo, ya que el overflow se estaria produciendo en el valor 2 y el tamaсo en la 1є dimencion de este array (posible punto conflictivo) es de 20 celdas, por lo que no deberia ser problema alguno.
#
pawn Код:
MAX_L_S[index][1]
#Dentro de YSI en cuyo caso deberias reportar este error ante ****** quien sabra mejor que nosotros ubicar este overflow y reparar el bug.

Concejo: Comenta la linea donde utilizas la funcion "INI_ParseFile" y fijate que pasa, si no hay errores, entonces deberias hablar con ******, caso contrario esta en alguno de los otros 2 puntos anteriormente mencionados (considerando que el error esta siendo generado por esta funcion).

PD: Cual es el fin de crear un array: "MAX_L_S[MAX_STACK][1]", no podras utilizar nunca "MAX_L_S[index][1]", para eso deberias declararlo asi: "MAX_L_S[MAX_STACK][2]", si lo utilizas como mencione anteriormente no podras utilizar el [1] o generarias un overflow.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)