PDA

Просмотр полной версии : [Прочее] Ошибка при заходе на сервер



Espo
07.04.2018, 07:01
Здравствуйте, сделал систему регистрации, захожу на сервер нажимаю кнопку "Далее" ничего не происходит, а в server_log выдает это:

[08:56:45] [debug] Run time error 6: "Invalid instruction"
[08:56:45] [debug] Unknown opcode 0x0 at address 0x00000004
[08:56:45] [debug] AMX backtrace:
[08:56:45] [debug] #0 00000004 in public CheckRegistration () at <unknown file>:0
[08:56:48] [debug] Run time error 6: "Invalid instruction"
[08:56:48] [debug] Unknown opcode 0x0 at address 0x00000004
[08:56:48] [debug] AMX backtrace:
[08:56:48] [debug] #0 00000004 in public OnDialogResponse () at <unknown file>:0

Помогите пожалуйста

DeimoS
07.04.2018, 10:21
CheckRegistration и код диалога регистрации покажи

Espo
07.04.2018, 11:51
Вот OneDialogResponse


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch (dialogid)
{
case DLG_REG:
{
if(response)
{
if(!strlen(inputtext))
{
ShowRegistration(playerid);
return SCM(playerid, COLOR_RED, "{FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
}
if(strlen(inputtext) < 8 || strlen(inputtext) > 16)
{
ShowRegistration(playerid);
return SCM(playerid, COLOR_RED, "{FFFFFF}Длина пароля должна быть от 8-ми до 16-и символов");
}
new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9{1,}]$");
if(regex_check(inputtext, rg_passwordcheck))
{
strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 16);
SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT,"{C3C3C3}Ввод Email",
"{FFFFFF}Введите адрес Вашей электронной почты\n\
Используя его, вы сможете восстановить доступ к аккаунту\n\
в случае взлома или если забудете пароль.\n\n\
Убедитесь в правильности ввода и нажмите \"Далее\"",
"Далее");
}
else
{
ShowRegistration(playerid);
return SCM(playerid, COLOR_RED, "{FFFFFF}Пароль может состоять только из чисел и латинских символов");
}
}
else
{
SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы покинуть сервер!");
SPD(playerid, -1, 0, " ", " ", " ", "");
return Kick(playerid);
}
}
}
return 1;
}



А это CheckRegistration


forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows) ShowLogin(playerid);
else ShowRegistration(playerid);
}

DeimoS
07.04.2018, 13:15
Скомпилируй мод с ключом "-d3", приписав его в файле "pawn.cfg", который находится в папке с Pawno (если такого файла нет, то создай его). После этого опять вызови краш и скинь логи, а так же покажи результаты компиляции

Espo
07.04.2018, 14:51
Скомпилируй мод с ключом "-d3", приписав его в файле "pawn.cfg", который находится в папке с Pawno (если такого файла нет, то создай его). После этого опять вызови краш и скинь логи, а так же покажи результаты компиляции

Он у меня был прописан уже..
Вот компиляция
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(109) : warning 217: loose indentation
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(115) : warning 202: number of arguments does not match definition
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(300 -- 305) : warning 202: number of arguments does not match definition
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

Header size: 2176 bytes
Code size: 36040 bytes
Data size: 455852 bytes
Stack/heap size: 16384 bytes; estimated max. usage=182 cells (728 bytes)
Total requirements: 510452 bytes

3 Warnings.

DeimoS
07.04.2018, 15:14
У меня есть пара идей, но все они не основываются на опыте и знаниях (например, проблема с функциями плагина регулярок), так что лучше пойдём путём дебага.
Вставь такой код:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
print("OnDialogResponse 1");
switch (dialogid)
{
case DLG_REG:
{
if(response)
{
print("OnDialogResponse 2");
if(!strlen(inputtext))
{
print("OnDialogResponse 3");
ShowRegistration(playerid);
print("OnDialogResponse 4");
return SCM(playerid, COLOR_RED, "{FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
}
print("OnDialogResponse 4");
if(strlen(inputtext) < 8 || strlen(inputtext) > 16)
{
print("OnDialogResponse 5");
ShowRegistration(playerid);
print("OnDialogResponse 6");
return SCM(playerid, COLOR_RED, "{FFFFFF}Длина пароля должна быть от 8-ми до 16-и символов");
}
print("OnDialogResponse 7");
new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9{1,}]$");
print("OnDialogResponse 8");
if(regex_check(inputtext, rg_passwordcheck))
{
print("OnDialogResponse 9");
strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 16);
print("OnDialogResponse 10");
SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT,"{C3C3C3}Ввод Email",
"{FFFFFF}Введите адрес Вашей электронной почты\n\
Используя его, вы сможете восстановить доступ к аккаунту\n\
в случае взлома или если забудете пароль.\n\n\
Убедитесь в правильности ввода и нажмите \"Далее\"",
"Далее");
print("OnDialogResponse 11");
}
else
{
print("OnDialogResponse 12");
ShowRegistration(playerid);
print("OnDialogResponse 13");
return SCM(playerid, COLOR_RED, "{FFFFFF}Пароль может состоять только из чисел и латинских символов");
}
print("OnDialogResponse 14");
}
else
{
print("OnDialogResponse 15");
SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы покинуть сервер!");
print("OnDialogResponse 16");
SPD(playerid, -1, 0, " ", " ", " ", "");
print("OnDialogResponse 17");
return Kick(playerid);
}
}
}
print("OnDialogResponse 18");
return 1;
}

forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
new rows;
print("CheckRegistration 1");
cache_get_row_count(rows);
print("CheckRegistration 2");
if(rows)
{
print("CheckRegistration 3");
ShowLogin(playerid);
print("CheckRegistration 4");
}
else
{
print("CheckRegistration 5");
ShowRegistration(playerid);
print("CheckRegistration 6");
}
print("CheckRegistration 7");
}

И после краша скинь логи

Espo
07.04.2018, 15:30
У меня есть пара идей, но все они не основываются на опыте и знаниях (например, проблема с функциями плагина регулярок), так что лучше пойдём путём дебага.
Вставь такой код:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
print("OnDialogResponse 1");
switch (dialogid)
{
case DLG_REG:
{
if(response)
{
print("OnDialogResponse 2");
if(!strlen(inputtext))
{
print("OnDialogResponse 3");
ShowRegistration(playerid);
print("OnDialogResponse 4");
return SCM(playerid, COLOR_RED, "{FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
}
print("OnDialogResponse 4");
if(strlen(inputtext) < 8 || strlen(inputtext) > 16)
{
print("OnDialogResponse 5");
ShowRegistration(playerid);
print("OnDialogResponse 6");
return SCM(playerid, COLOR_RED, "{FFFFFF}Длина пароля должна быть от 8-ми до 16-и символов");
}
print("OnDialogResponse 7");
new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9{1,}]$");
print("OnDialogResponse 8");
if(regex_check(inputtext, rg_passwordcheck))
{
print("OnDialogResponse 9");
strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 16);
print("OnDialogResponse 10");
SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT,"{C3C3C3}Ввод Email",
"{FFFFFF}Введите адрес Вашей электронной почты\n\
Используя его, вы сможете восстановить доступ к аккаунту\n\
в случае взлома или если забудете пароль.\n\n\
Убедитесь в правильности ввода и нажмите \"Далее\"",
"Далее");
print("OnDialogResponse 11");
}
else
{
print("OnDialogResponse 12");
ShowRegistration(playerid);
print("OnDialogResponse 13");
return SCM(playerid, COLOR_RED, "{FFFFFF}Пароль может состоять только из чисел и латинских символов");
}
print("OnDialogResponse 14");
}
else
{
print("OnDialogResponse 15");
SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы покинуть сервер!");
print("OnDialogResponse 16");
SPD(playerid, -1, 0, " ", " ", " ", "");
print("OnDialogResponse 17");
return Kick(playerid);
}
}
}
print("OnDialogResponse 18");
return 1;
}

forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
new rows;
print("CheckRegistration 1");
cache_get_row_count(rows);
print("CheckRegistration 2");
if(rows)
{
print("CheckRegistration 3");
ShowLogin(playerid);
print("CheckRegistration 4");
}
else
{
print("CheckRegistration 5");
ShowRegistration(playerid);
print("CheckRegistration 6");
}
print("CheckRegistration 7");
}

И после краша скинь логи

теперь в компиляции вылезли эти ошибки
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(109) : warning 217: loose indentation
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(115) : warning 202: number of arguments does not match definition
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(311 -- 316) : warning 202: number of arguments does not match definition
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(324) : error 035: argument type mismatch (argument 2)
C:\Users\Ðóñëàí\Desktop\server\gamemodes\Future.pwn(345) : error 021: symbol already defined: "CheckRegistration"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

DeimoS
07.04.2018, 15:50
Эмм, это никак с кодом, что я дал, не связано. Ты свой код на мой заменяй, а не просто вставляй

Espo
07.04.2018, 16:21
Эмм, это никак с кодом, что я дал, не связано. Ты свой код на мой заменяй, а не просто вставляй

я удалил тот код и вставил твой начиная с паблика ОнДиалогРеспонс до print("CheckRegistration 7");
}

DeimoS
07.04.2018, 21:59
Если ты не знаешь как правильно вставлять код, который ты сам же дал, то стоит либо отложить задуманное и заняться изучением основ, либо оплатить услуги скриптера. Но если даже такое простое действие вызывает трудности, то дальше будет ещё хуже