Crash al usar valores muy largos en parametros
#1

Me ha pasado ultimamente que el servidor se apaga, y es que cuando por ejemplo usan /setmoney, o setscore y dan una cantidad en negativa o muy lata como 7127821871872 el servidor se crahea, sera que el el arvhivo y_ini no puede guardar todo eso? es muy molesto pues llega apagar el servidor... muchas gracias

Код:
CMD:setmoney(playerid, params[])
{
		if(sscanf(params, "ud", params[0], params[1])) return SendClientMessage(playerid, -1, "USAGE: /setmoney [id] [money]");
		if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Jugador no conectado");

		PlayerData[params[0]][pCash] = params[1];
		SetPlayerMoney(params[0], PlayerData[params[0]][pCash]);
		GuardarCuenta(params[0]);
		SendClientMessageEx(params[0], -1 ,"||- administrador %s te puso el cash en %d", GetPlayerNameEx(playerid), params[1]);
return 1;
}
no se que pasa, y este no es el ъnico comando, serб problema del sscanf?? o estarб mal actualizado?? porque tendria que andar poniendo restricciones en todos los comandos del sscanf D:

el error que me tira el crashdetect:

Код:
[21:48:26] [debug] Run time error 6: "Invalid instruction"
[21:48:26] [debug]  Unknown opcode 0x203 at address 0x00000033
[21:48:26] [debug] AMX backtrace:
[21:48:26] [debug] #0 00000033 in public cmd_setmoney () from gamemode.amx
[21:48:26] [debug] #1 native CallLocalFunction () from samp-server.exe
[21:48:26] [debug] #2 00011e68 in ?? (0, 18608080) from fr.amx
[21:48:26] [debug] #3 00006334 in public OnPlayerCommandText (0, 18608080) from gamemode.amx
Reply
#2

pawn Код:
CMD:setmoney(playerid, params[])
{
    if(sscanf(params, "ud", params[0], params[1])) return SendClientMessage(playerid, -1, "USAGE: /setmoney [id] [money]");
    if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Jugador no conectado");
    if(params[1] < 10000000 || params[1] > 1)//10 caka
    {
        PlayerData[params[0]][pCash] = params[1];
        SetPlayerMoney(params[0], PlayerData[params[0]][pCash]);
        GuardarCuenta(params[0]);
        SendClientMessageEx(params[0], -1 ,"||- administrador %s te puso el cash en %d", GetPlayerNameEx(playerid), params[1]);
    }else SendClientMessage(playerid, -1 ,"Mucho dinero, no puedes mandar mas de 10 caca");
    return 1;
}
edit: if(params[1] < 10000000 || params[1] > 1)//10 caka
Reply
#3

http://es.wikipedia.org/wiki/32_bits Pawn es en 32 bit, ninguna variable en Pawn puede contener mayor valor de 2.147.483.647 es posible que sea eso.
Reply
#4

entonces poniendo una condicion como lo hizo jotajeda soluciono?

entonces cualquier comando que tenga sscanf y se use un parametro largo en un comando dentro del servidor puede dar crash??
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)