09.12.2012, 18:20
So i run the crashdetect plugin and it outputs
Here's OnDialogResponse:
I'm guessing it's from that part of the dialogs because it happens when a player connects and the login screen is shown.Somebody really hates us today and keeps abusing this bug to crash the server.I don't understand what may cause the problem.Can anyone help out?
pawn Код:
[19:21:29] [debug] #24 0804b491 in ?? () from ./samp03svr
[19:21:29] [debug] #23 f7475ce6 in __libc_start_main () from /lib/libc.so.6
[19:21:29] [debug] #22 080a8fb3 in ?? () from ./samp03svr
[19:21:29] [debug] #21 080ad652 in ?? () from ./samp03svr
[19:21:29] [debug] #20 080ad426 in ?? () from ./samp03svr
[19:21:29] [debug] #19 0807d2b0 in ?? () from ./samp03svr
[19:21:29] [debug] #18 080734a2 in ?? () from ./samp03svr
[19:21:29] [debug] #17 080733b1 in ?? () from ./samp03svr
[19:21:29] [debug] #16 080b117a in ?? () from ./samp03svr
[19:21:29] [debug] #15 080a5e9f in ?? () from ./samp03svr
[19:21:29] [debug] #14 f7393699 in ?? () from plugins/crashdetect.so
[19:21:29] [debug] #13 f738b622 in _ZN11crashdetect9DoAmxExecEPii () from plugins/crashdetect.so
[19:21:29] [debug] #12 f739a926 in amx_Exec () from plugins/crashdetect.so
[19:21:29] [debug] #11 f739365e in ?? () from plugins/crashdetect.so
[19:21:29] [debug] #10 f738b5a2 in _ZN11crashdetect13DoAmxCallbackEiPiS0_ () from plugins/crashdetect.so
[19:21:29] [debug] #9 080954a4 in ?? () from ./samp03svr
[19:21:29] [debug] #8 080d7669 in ?? () from ./samp03svr
[19:21:29] [debug] #7 080abe41 in ?? () from ./samp03svr
[19:21:29] [debug] #6 f74c25bc in vsprintf () from /lib/libc.so.6
[19:21:29] [debug] #5 f74a335e in _IO_vfprintf () from /lib/libc.so.6
[19:21:29] [debug] #4 f7752410 in ?? ()
[19:21:29] [debug] #3 f73953c1 in ?? () from plugins/crashdetect.so
[19:21:29] [debug] #2 f738a963 in _ZN11crashdetect15SystemExceptionEPv () from plugins/crashdetect.so
[19:21:29] [debug] #1 f738c41f in _ZN11crashdetect20PrintSystemBacktraceEPv () from plugins/crashdetect.so
[19:21:29] [debug] #0 f7395f41 in _ZN10StackTraceC1EPv () from plugins/crashdetect.so
[19:21:29] [debug] System backtrace:
[19:21:29] [debug] #1 0016d670 in public OnDialogResponse () from nrrp.amx
[19:21:29] [debug] #0 native SendClientMessage () [080d75c0] from samp03svr
[19:21:29] [debug] AMX backtrace:
[19:21:29] [debug] Server crashed while executing nrrp.amx
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new vehid = GetPlayerVehicleID(playerid);
new vehmd = GetVehicleModel(GetPlayerVehicleID(playerid));
if(dialogid == 0) // Tutorial
{
if(response)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You have chosen to see the tutorial, please wait for it to load.");
SetTimerEx("Tut1", 2000, false, "i", playerid);
}
else
{
PlayerInfo[playerid][pTutorial] = 1;
SpawnChar(playerid);
TogglePlayerControllable(playerid, 1);
SetPlayerVirtualWorld(playerid, 0);
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You have chosen not to see the tutorial, welcome to International Roleplay.");
SendClientMessage(playerid, COLOR_VIP, "SERVER: You have been automatically refunded $75000 and 15 Days of Silver VIP.");
// Starter Package
GiveZaiatMoney(playerid, 75000);
PlayerInfo[playerid][pNew] = 1;
PlayerInfo[playerid][pModel] = NEWBSKIN;
SetPlayerSkin(playerid, NEWBSKIN);
PlayerInfo[playerid][pFightStyle] = FIGHT_STYLE_NORMAL;
//vip refund
new Year, Month, Day;
new Hour, Minute, Second;
gettime(Hour, Minute, Second);
getdate(Year, Month, Day);
if(Day+15 >= 30)
{
new ActualDay;
Month ++;
ActualDay = 15 - (30-Day);
PlayerInfo[playerid][pVIPDay] = ActualDay;
PlayerInfo[playerid][pVIPMonth] = Month;
PlayerInfo[playerid][pVIPHour] = Hour;
}
else
{
PlayerInfo[playerid][pVIPDay] = Day+15;
PlayerInfo[playerid][pVIPMonth] = Month;
PlayerInfo[playerid][pVIPHour] = Hour;
}
// Done
PlayerInfo[playerid][pVIP] = 2;
}
}
else if(dialogid == 1) // Register
{
if(response)
{
if(strlen(inputtext) < 4)
{
SendClientMessage(playerid, COLOR_GREY, "Password can't be shorter than 4 characters.");
ShowDialog(playerid, 1);
return 1;
}
if(strlen(inputtext) > 256)
{
SendClientMessage(playerid, COLOR_GREY, "Password can't be longer than 256 characters.");
ShowDialog(playerid, 1);
return 1;
}
new file[64], IP[16], string[128], password[256];
format(file, sizeof(file), "users/%s.ini", RPNU(playerid));
if(!dini_Exists(file))
{
GetPlayerIp(playerid, IP, sizeof(IP));
WP_Hash(password, sizeof(password), inputtext);
PlayerInfo[playerid][pLevel] = 1;
new INI:filez = INI_Open(Path(playerid));
INI_WriteString(filez,"IP", IP);
INI_WriteInt(filez,"Level", PlayerInfo[playerid][pLevel]);
INI_Close(filez);
dini_Set(file, "Password", password);
format(string, sizeof(string), "SERVER: {FFFFFF}You have successfully registered on {FF6347}International Roleplay{FFFFFF}. (Password: %s)", inputtext);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
ShowDialog(playerid, 2);
}
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You have chosen to quit the server.");
Kick(playerid);
}
}
else if(dialogid == 2) // Login
{
if(response)
{
new file[64], password[256], IP[16], password2[256];
format(file, sizeof(file), "users/%s.ini", RPNU(playerid));
WP_Hash(password2, sizeof(password2), inputtext);
format(password, sizeof(password), "%s", dini_Get(file, "Password"));
if(strlen(inputtext) < 4)
{
SendClientMessage(playerid, COLOR_GREY, "Password can't be shorter than 4 characters.");
ShowDialog(playerid, 2);
return 1;
}
if(strlen(inputtext) > 256)
{
SendClientMessage(playerid, COLOR_GREY, "Password can't be longer than 256 characters.");
ShowDialog(playerid, 2);
return 1;
}
if(strcmp(password, inputtext,true) && strcmp(password, password2, true))
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}Invalid password.");
ShowDialog(playerid, 2);
return 1;
}
if(dini_Int(file, "AdminAccount") == 1)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You can't login directly from an admin account.");
Kick(playerid);
return 1;
}
else if(sscanf(inputtext, "s[128]", inputtext))
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You must enter a password to procceed.");
ShowDialog(playerid, 2);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
SendClientMessage(playerid, COLOR_LIME, "");
GetPlayerIp(playerid, IP, sizeof(IP));
new INI:filez = INI_Open(Path(playerid));
INI_WriteString(filez,"IP", IP);
INI_Close(filez);
LoadChar(playerid);
SpawnPlayer(playerid);
}
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You have chosen to quit the server.");
Kick(playerid);
}
}
else if(dialogid == 3) // Male or Female
{
if(response)
{
if(VIP[playerid])
{
switch(listitem)
{
case 0:
{
PlayerInfo[playerid][pGender] = 1;
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You've set your character's gender to male.");
}
case 1:
{
PlayerInfo[playerid][pGender] = 2;
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You've set your character's gender to female.");
}
}
VIP[playerid] = 0;
}
else
{
switch(listitem)
{
case 0:
{
PlayerInfo[playerid][pGender] = 1;
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You've set your character's gender to male, pick their age from the next dialog.");
}
case 1:
{
PlayerInfo[playerid][pGender] = 2;
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You've set your character's gender to female, pick her age from the next dialog.");
}
}
ShowDialog(playerid, 4);
}
}
else
{
if(!VIP[playerid])
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You MUST choose a gender for your character.");
ShowDialog(playerid, 3);
}
VIP[playerid] = 0;
}
}
else if(dialogid == 4)
{
if(response)
{
new age = strval(inputtext);
if(VIP[playerid])
{
if(age < 14 || age > 80)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}Age must be beteen 14 and 80.");
ShowDialog(playerid, 4);
}
else
{
new string[128];
PlayerInfo[playerid][pAge] = strval(inputtext);
format(string, sizeof(string), "SERVER: {FFFFFF}You've set your character's age to %d", PlayerInfo[playerid][pAge]);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
}
VIP[playerid] = 0;
}
else
{
if(age < 14 || age > 80)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}Age must be beteen 14 and 80.");
ShowDialog(playerid, 4);
}
else
{
new string[128];
PlayerInfo[playerid][pAge] = strval(inputtext);
format(string, sizeof(string), "SERVER: {FFFFFF}You've set your character's age to %d", PlayerInfo[playerid][pAge]);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
PlayerInfo[playerid][pLoggedIn] = 1;
PlayerInfo[playerid][pSpawn] = 1;
SpawnPlayer(playerid);
}
}
}
else
{
if(!VIP[playerid])
{
SendClientMessage(playerid, COLOR_LIGHTRED, "SERVER: {FFFFFF}You MUST pick an age for your character.");
ShowDialog(playerid, 4);
}
VIP[playerid] = 0;
}
}