Список часто встречаемых ошибок в pawno
Данная тема содержет наиболее распространенные ошибки и предупреждения в pawno при создании скриптов sa-mp
Когда компилятор находит ошибку в файле, то выводится сообщение, в таком порядке:
- Имя файла
- номер строки компилятора были обнаружены ошибки в скобках, непосредственно за именем
- класс error (ошибка, фатальная ошибка или предупреждение)
- номер ошибки
- описание ошибки
Например:
hello.pwn(3) : error 001: expected token: ";", but found "{"
Примечание: эта ошибка может быть на линии, над линией, что показано, так как компилятор не всегда может установить ошибку перед проанализировав полное выражение.
Категории ошибок
Ошибки разделяются на три класса:
Ошибки (errors)
- Описание ситуации когда компилятор не может скомпилировать код
- Ошибки номеруются от 1 до 99
Критические ошибки (Fatal errors)
- Критические ошибки и описание, от которых компилятор не может восстановиться.
- Парсинг прерывается (нет отклика программы).
- Критические ошибки номеруются от 100 до 199.
Предупреждения ( Warings )
- Предупреждения указывают на возможную причину возникновения багов, вылетов.
- Предупреждения номеруются от 200 до 299.
Распространенные ошибки
001: expected token (ожидаемый знак)
Обязательный знак отсутствует
Пример:
error 001: expected token: ";", but found "return" main() { print("test") // тут должна быть точка с запятой ";" return 1; }
002: only a single statement (or expression) can follow each “case” (только одно выражение может быть в одной строке с «case»
В каждом case оператора switch без фигурных скобок может содержаться только один оператор если больше нужно ставить скобки.
Пример:
error 002: only a single statement (or expression) can follow each "case"
main() { switch(x) { case 0: print("hello"); print("hello"); } return 1; }
Так же могут быть еще и предупреждения и дополнительные ошибки:
error 002: only a single statement (or expression) can follow each "case" warning 215: expression has no effect error 010: invalid function or declaration
Вот так это можно исправить:
main() { switch(x) { case 0: { print("hello"); print("hello"); } } return 1; }
004: function «x» is not implemented (Функция «x» не используется
Часто бывает что в функции выше пропущена скобка.
025: function heading differs from prototype
Это проиходит когда в функции не совпадают аргументы.
К примеру:
forward MyFunction(playerid); public MyFunction(player, vehicleid);
Исправляем:
forward MyFunction(playerid, vehicleid); public MyFunction(playerid, vehicleid);
035: argument type mismatch (argument x) (не совпадение типов аргумента(ов)
К примеру когда в место playerid — integer аргумента стоит «playerid» — string или 0.5 — float
Пример:
error 035: argument type mismatch (argument 1)
Kick("playerid"); // Как видите в место целого числа (integer) стоит строка
Исправляем:
Kick(playerid);
046: unknown array size (variable x)
Не указан размер массива.
Пример:
new string[]; string = "pawno";
Исправляем:
new string[6]; string = "pawno";
047: array sizes do not match, or destination array is too small
Размер массива мал или не совпадает.
- Многомерные массивы должны иметь одинаковый размер
- Одномерные массив к которому присваивают(правый должен иметь больше размер чем левый.
new destination[8]; new msg[] = "Hello World!"; destination = msg;
В приведенном выше коде размер строки «Hello world!» ровна 12 байт а массив к которому присваиваем имеет размер 8 байт из этого и складывается ошибка.
Если увеличить размер массива destination до 13 байт то ошибка исправится.
new destination[13]; new msg[] = "Hello World!"; destination = msg;
055: start of function body without function header
Начало тела функции без функции заголовка.
Критические ошибки (FATAL ERRORS)
100: cannot read from file: "<file>"
Компилятор не может найти или прочитать указанный файл, убедитесь что он находится по адресу (<папка с сервером>pawnoinclude).
Пример:
#include <a_sam>
Исправляем:
#include <a_samp>
Совет
Не нужно открывать ваш код дважды, не нужно тыкать несколько раз на файл. Откройте сначала редактор, потом ваш проект.
Предупреждения( Warnings )
202: number of arguments does not match definition
Описание ошибки довольно понятное, это значит что вы используете слишком мало или слишком много аргументов в функции, обычно это признак того что функция используется не правильно, обратитесь к документации.
Функция GetPlayerHealth согласно официальному источнику wiki.sa-mp.com имеет два аргумента playerid и Float:health ссылка
Пример:
GetPlayerHealth(playerid);
Исправляем:
new Float:health; GetPlayerHealth(playerid, health);
203: symbol is never used: «symbol»
Вы создали переменную или функцию и она ни где не используется тогда ищите в окне компилятора это предупреждение, это не как не влияет на код и не угражает ему, так что если вы удалите переменную или функцию которая не используется, то вы сэкономите память.
Пример:
stock SomeFunction() { // Blah }
204: symbol is assigned a value that is never used: «symbol»
Это предупреждение аналогично к предыдущему, разница в том что к переменной что то присвоено и оно не как не используется, это безопасно
209: function should return a value
Функция ничего не возвращает, вы создали её:
SomeFunction() { // Blah }
Решили её присвоить к чему нибудь к примеру:
new result = SomeFunction(); // ожидает 1
Вот так исправить
SomeFunction() { // Blah return 1; }
211: possibly unintended assignment
Если вы введете оператор присваивания в условии и оно не будет в круглых скобках то будет предупреждение
if(vehicle = GetPlayerVehicleID(playerid)) // ошибка if(vehicle == GetPlayerVehicleID(playerid)) // все норм if((vehicle = GetPlayerVehicleID(playerid))) // все норм, так значение функции присвоится к переменной потом выражение вычесляется { то есть это как if(IsPlayerConnected(playerid)}
213: tag mismatch ( несовпадение тегов)
Это происходит когда:
- Тип переменной указан не верно или не имеет его
- Выражения по обе стороны бинарного оператора имеют разные теги
- В пременную возвращен не верный тип переменной или не имеющий его.
- Индексирование массива, который требует тегами индекс без тега или неправильное имя тега
Часто это бывает на 3d текстах или тексдравах Text3D, Text
Не правильно:
new health; GetPlayerHealth(playerid, health);
Правильно:
new Float:health; GetPlayerHealth(playerid, health);
217: loose indentation
Компилятор выдаст ошибку если не соблюдены отступы.
Правильно:
if(condition) { action(); result(); }
Не правильно:
if(condition) { action(); result(); }
Отступы делаются по нажатью кнопки TAB это практика в программировании для удобного чтения кода.
219: local variable «foo» shadows a variable at a preceding level
Локальная переменная в тени глобальной то есть над локальной переменной создана точно такая же глобальная. В практике программирования префиксом глобальной переменной является «g» в начале переменной к примеру
new gPlayerMoney
любыми способами избегайте их.
К примеру:
new team[MAX_PLAYERS]; // объявляем глобальную переменную function(playerid) { new team[MAX_PLAYERS]; // создаем еще одну, и получаем статью 219 кодекса ошибок :D team[playerid] = random(5); }
Решение:
Просто переименуйте локальную переменную team.
225: unreachable code ( недоступный код )
Это происходит тогда когда вы пишите какой нибудь код после return, после return’а код не выполняется и он считается бесполезным
Пример:
#include <zcmd.inc>
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); return 1; // завершаем процесс } else { SendClientMessage(playerid, -1, "Вы не администратор"); return 1; // завершаем процесс } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // Этот код не доступен он не будет выполнятся. }
Решение:
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); } else { SendClientMessage(playerid, -1, "Вы не администратор"); } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // этот код запустится return 1; // завершаем процесс }
235: public function lacks forward declaration (symbol «symbol»)
Отсутствует forward.
Не правильно:
public MyFunction() { }
Правильно:
forward MyFunction(); public MyFunction() { }
Надеюсь эта статья поможет вам в языке программирования, желаю вам не повторять ошибок дважды и что бы ваш код был быстрым, надежным!
Оставляйте ваши отзывы, ставьте плюсы, пишите недостатки ошибки, недостатки статьи или их недочеты. Удачи в мире PAWNO!
Posts: 22
Threads: 5
Joined: Jul 2012
Reputation:
0
Hello,
I need help, I’ve been trying to make this command that can only be used my admin levels 3 and up; I’m not a scripter, just been trying stuff out and it hasn’t been going so well.
It gives 3 errors when I attempt to compile.
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107199) : error 010: invalid function or declaration
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107201) : error 010: invalid function or declaration
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107203) : error 010: invalid function or declaration
Here’s how it looks in the script:
Код:
if(strcmp("/acords", cmdtext, true, 10) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] >= 3) { SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]"); SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000"); } }
Can someone please help me?
Posts: 60
Threads: 8
Joined: Nov 2011
Reputation:
0
On the code you put there’s missing a bracket }
try this:
Код:
if(strcmp("/acords", cmdtext, true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] >= 3) { SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]"); SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000"); } } }
Posts: 22
Threads: 5
Joined: Jul 2012
Reputation:
0
Quote:
Originally Posted by Sk1lleD
On the code you put there’s missing a bracket }
try this:
Код:
if(strcmp("/acords", cmdtext, true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] >= 3) { SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]"); SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000"); } } }
Same errors:
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107199) : error 010: invalid function or declaration
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107201) : error 010: invalid function or declaration
C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107203) : error 010: invalid function or declaration
I didn’t do the command from scratch, I took it from the /helperhelp or something like that (forgot) and edited it. I know the [pAdmin] is correct and the <= (equal or greater) is correct, did It mess up somewhere in the command.
Posts: 658
Threads: 32
Joined: Mar 2013
Reputation:
0
Made it to ZCMD, do not forget to #include <zcmd>
pawn Код:
CMD:acords(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]");
SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000");
}
}
return 1;
}
Sorry if you don’t want in ZCMD but it’s seriously easier..
EDIT: Are you sure you got an enum for pAdmin? And the player info and all?
Posts: 11,827
Threads: 33
Joined: Dec 2011
Reputation:
0
Is it like this?
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/acords", cmdtext, true) == 0) // it's not 10 lenght...
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]");
SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000");
return 1;
}
}
}
// more commands
return 0;
}
And please show us the line the error comes from.
Posts: 22
Threads: 5
Joined: Jul 2012
Reputation:
0
Quote:
Originally Posted by JimmyCh
Made it to ZCMD, do not forget to #include <zcmd>
pawn Код:
CMD:acords(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]");
SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000");
}
}
return 1;
}
Sorry if you don’t want in ZCMD but it’s seriously easier..
EDIT: Are you sure you got an enum for pAdmin? And the player info and all?
Worked fine! Thanks!
Posts: 22
Threads: 5
Joined: Jul 2012
Reputation:
0
Quote:
Originally Posted by _Zeus
Is it like this?
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/acords", cmdtext, true) == 0) // it's not 10 lenght...
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 3)
{
SendClientMessage(playerid, COLOR_WHITE, "Cordinates Menu [/gotoco]");
SendClientMessage(playerid, COLOR_WHITE, "Gotham City: 2203.3160 -5787.8170 13.3400 360.0000");
return 1;
}
}
}
// more commands
return 0;
}
And please show us the line the error comes from.
I can’t use the ZCMD one..so I tried this.
I got one error: C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107199) : error 021: symbol already defined: «OnPlayerCommandText»
So no go.
Posts: 334
Threads: 52
Joined: May 2011
Reputation:
0
Quote:
Originally Posted by JJ_PR
I can’t use the ZCMD one..so I tried this.
I got one error: C:UsersJonDesktopU-RP [ENG — 0.3x]gamemodesU-RP.pwn(107199) : error 021: symbol already defined: «OnPlayerCommandText»
So no go.
He means is the OnPlayerCommandText like that?
Posts: 11,827
Threads: 33
Joined: Dec 2011
Reputation:
0
You pasted what I gave you! And now you’ve 2 callbacks of OnPlayerCommandText..
Does it look like the example I gave?
Posts: 22
Threads: 5
Joined: Jul 2012
Reputation:
0
Quote:
Originally Posted by _Zeus
You pasted what I gave you! And now you’ve 2 callbacks of OnPlayerCommandText..
Does it look like the example I gave?
It does look like it.
error 001: expected token: "%s", but found "%s" - ожидался символ: "%s", но был найден "%s";
error 002: only a single statement (or expression) can follow each "case" - только одно заявление (или выражение) могут следовать за "case";
error 003: declaration of a local variable must appear in a compound block - объявленная локальная переменная должна использоваться в этом же блоке;
error 004: function "%s" is not implemented - функция %s не реализована;
error 005: function may not have arguments - функция не имеет аргументов;
error 006: must be assigned to an array - должен быть присвоен массив;
error 007: operator cannot be redefined - оператор не может быть установлен еще раз;
error 008: must be a constant expression; assumed zero - должно быть постоянным выражением; равным нулю;
error 009: invalid array size (negative or zero) - неверный размер массива (отрицательный или 0);
error 010: invalid function or declaration - неизвестная функция или декларация;
error 011: invalid outside functions - неверно вне функции;
error 012: invalid function call, not a valid address - неверный вызов функции, неверный адрес;
error 013: no entry point (no public functions) - нет точки входа (не public функция);
error 014: invalid statement; not in switch - неверный оператор; не в switch;
error 015: "default" case must be the last case in switch statement - "default" должен быть последним условием в switch;
error 016: multiple defaults in "switch" - несколько "default" в switch;
error 017: undefined symbol "%s" - неизвестный символ "%s";
error 018: initialization data exceeds declared size - данные массива превышают его размер;
error 019: not a label: %s" - не метка "%s";
error 020: invalid symbol name "%s" - неверное имя символа "%s";
error 021: symbol already defined: %s" - символ уже объявлен: "%s";
error 022: must be lvalue (non-constant) - должно быть левосторонним (нет постоянной);
error 023: array assignment must be simple assignment - назначение массива должно быть простым;
error 024: "break" or "continue" is out of context - "break" или "continue" вне контекста;
error 025: function heading differs from prototype - функция заголовка отличается от прототипа;
error 026: no matching "#if..." - не найдено "#if...";
error 027: invalid character constant - недопустимый символ в постоянной;
error 028: invalid subscript (not an array or too many subscripts): "%s" - неверный индекс (это не массив или слишком много индексов): "%s";
error 029: invalid expression, assumed zero - неверное выражение, нет результата;
error 030: compound statement not closed at the end of file - составной оператор не закрыт в конце файла;
error 031: unknown directive - неизвестная директива;
error 032: array index out of bounds (variable "%s") - индекс массива превышен;
error 033: array must be indexed (variable "%s") - массив должен быть проиндексирован;
error 034: argument does not have a default value (argument %d) - аргумент не имеет начального значения (аргумент %d);
error 035: argument type mismatch (argument %d) - несоответствие типа аргумента (аргумент %d);
error 036: empty statement - пустой оператор;
error 037: invalid string (possibly non-terminated string) - неправильная строка;
error 038: extra characters on line - лишние символы в строке;
error 039: constant symbol has no size - символьная константа не имеет размера;
error 040: duplicate "case" label (value %d) - несколько раз объявлен "case" с одним тем же параметром;
error 041: invalid ellipsis, array size is not known - размер массива неизвестен;
error 042: invalid combination of class specifiers - недопустимое сочетание класса;
error 043: character constant exceeds range for packed string - символьная константа превышает размер строки;
error 044: positional parameters must precede all named parameters - позиционные параметры должны предшествовать всем именованным параметрам;
error 045: too many function arguments - слишком много аргументов у функции;
error 046: unknown array size (variable "%s") - неизвестный размер массива;
error 047: array sizes do not match, or destination array is too small - размеры массива конфликтуют, либо целевой массив слишком маленький;
error 048: array dimensions do not match - размеры массива не совпадают;
error 049: invalid line continuation - неправильное продолжение строки;
error 050: invalid range - неверный диапазон;
error 051: invalid subscript, use "[ ]" operators on major dimensions - неправильный индекс, используйте "[]";
error 052: multi-dimensional arrays must be fully initialized - много-размерные массивы должны быть полностью определены;
error 053: exceeding maximum number of dimensions - превышение максимального числа измерений;
error 054: unmatched closing brace - не найдена закрывающаяся скобка;
error 055: start of function body without function header - начало функции без заголовка;
error 056: arrays, local variables and function arguments cannot be public (variable "%s") - массивы, локальные переменные и аргументы функции не могут быть общедоступными;
error 057: unfinished expression before compiler directive - незавершенное выражение для компилятора;
error 058: duplicate argument; same argument is passed twice - дублирование аргумента; Аргумент передается несколько раз;
error 059: function argument may not have a default value (variable "%s") - аргумент не может иметь значение по-умолчанию;
error 060: multiple "#else" directives between "#if ... #endif" - Несколько "#else" между "#if ... #endif" - несколько "#else" между "#if и #endif";
error 061: "#elseif" directive follows an "#else" directive - "#else" перед "#elseif";
error 062: number of operands does not fit the operator - количество операндов не соответствует оператору;
error 063: function result tag of operator "%s" must be "%s" - Результат функции %s должен быть %s;
error 064: cannot change predefined operators - невозможно изменить уже определенные операторы;
error 065: function argument may only have a single tag (argument %d) - в этой функции может быть только один аргумент;
error 066: function argument may not be a reference argument or an array (argument "%s") - аргумент функции не может быть ссылкой или массивом;
error 067: variable cannot be both a reference and an array (variable "%s") - Переменная не может быть как массив или ссылка;
error 068: invalid rational number precision in #pragma - неверное число в #pragma;
error 069: rational number format already defined - формат рационального числа уже определен;
error 070: rational number support was not enabled - рациональное число не поддерживается;
error 071: user-defined operator must be declared before use (function "%s") - объявленный оператор должен быть перед использованием;
error 072: "sizeof" operator is invalid on "function" symbols - оператор "sizeof" не может быть использован для символов функции;
error 073: function argument must be an array (argument "%s") - аргумент %s должен быть массивом;
error 074: #define %s must start with an alphabetic character - #define должен начинаться с буквы;
error 075: input line too long (after substitutions - введенная строка слишком длинная;
error 076: syntax *error in the expression, or invalid function call - неправильный синтаксис или неправильный вызов функции;
error 077: malformed UTF-8 encoding, or corrupted file: %s - плохая кодировка UTF-8 или плохой файл: %s;
error 078: function uses both "return" and "return <value>" - функция использует "return" и "return <значение>";
error 079: inconsistent return types (array & non-array) - несовместимость типов возвращенных результатов;
error 080: unknown symbol, or not a constant symbol (symbol "%s") - неизвестный или непостоянный символ: %s;
error 081: cannot take a tag as a default value for an indexed array parameter (symbol "%s") - не может принимать тег в качестве значения по умолчанию для параметра индексированного массива;
error 082: user-defined operators and native functions may not have states - созданные функции или операторы не имеют состояния;
error 083: a function may only belong to a single automaton (symbol "%s") - функция может принадлежать только к одной автоматизации;
error 084: state conflict: one of the states is already assigned to another implementation (symbol "%s") - конфликт состояния: одно из состояний уже назначено на другую реализацию;
error 085: no states are defined for function "%s" - нет состояний, определенных для функции "%s";
error 086: unknown automaton "%s" - неизвестная автоматизация "%s";
error 087: unknown state "%s" for automaton "%s" - неизвестное состояние "%s" в автоматизации "%s";
error 088: number of arguments does not match definition - количество аргументов не совпадает с объявленными в функции;
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){ if(dialogid == 0) { switch(listitem) { case 1: { GivePlayerWeapon(playerid,24,100); } case 2: { GivePlayerWeapon(playerid,22,100); } } return 1; } if(dialogid == 1)// Ид диалога Для Логина { if(response)// Если игрок нажал первую кнопку входа { if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","ЗдравствуйтеnВаш аккаунт зарегистрированnВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// считывание текста с диалога OnPlayerLogin(playerid,pass);//паблик входа } else// Если игрок нажал Escape,то покажем ему диалог { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","ЗдравствуйтеnВаш аккаунт зарегистрированnВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. } } if(dialogid == 2)// Ид диалога для регистрации { if(response)// Если игрок нажал первую кнопку { if(!strlen(inputtext))// Если игрок не написал ничего,то выводим диалог снова { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","ЗдравствуйтеnВаш аккаунт зарегистрирован.nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации } else// Если игрок нажал Escape { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","ЗдравствуйтеnВаш аккаунт зрегистрирован.nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. } }}
#include <amxmodx>
#include <amxmisc>
new const PLAGIN[] = "Auto Demo Recorder"
new const VERSIYA[] = "2.1"
new const AVTORG[] = "F4RR3LL"
new
gpc_cvar1,
gpc_cvar2
enum ChatColor
{
CHATCOLOR_NORMAL = 1,
CHATCOLOR_GREEN,
CHATCOLOR_TEAM_COLOR,
CHATCOLOR_GREY,
CHATCOLOR_RED,
CHATCOLOR_BLUE,
}
new LOGNAME[128]
new MapName[32]
public plugin_init()
{
register_plugin(PLAGIN, VERSIYA, AVTORG)
gpc_cvar1 = register_cvar("adr_cvar1", "1")
gpc_cvar2 = register_cvar("adr_cvar2", "POV_cw/mix_1")
}
new monthyear[12]
public plugin_cfg()
{
//set_task(get_pcvar_float(gpc_cvar3), "adverd", 41, "", 0, "b")
get_mapname(MapName, sizeof MapName -1)
const LEN = 128
new logsdir[LEN]
get_localinfo("amxx_logs", logsdir, LEN -1)
new papka[LEN]
format(papka, LEN -1, "recorded_demos")
new direxists[LEN]
formatex(direxists, LEN -1, "/%s/%s", logsdir, papka)
if(!dir_exists(direxists))
mkdir(direxists)
get_time("%d-%m-%Y", monthyear, sizeof monthyear -1)
new fail[LEN]
formatex(fail, LEN -1, "%s.txt", monthyear)
formatex(LOGNAME, LEN -1, "%s/%s", direxists, fail)
if(!file_exists(LOGNAME))
write_file(LOGNAME, "")
}
public client_authorized(id)
{
client_cmd(id, "stop")
}
new bool:najalknopky[33] = { false, ... }
public client_putinserver(id)
{
if(!is_user_bot(id) && !is_user_hltv(id))
{
if(get_pcvar_num(gpc_cvar1) < 15)
set_pcvar_num(gpc_cvar1, 15)
najalknopky[id] = false
remove_task(id+500)
set_task(get_pcvar_float(gpc_cvar1), "prerecDEMO", id+500)
}
}
public checkKnopka(id)
{
id -= 500
if(!is_user_connected(id))
return
if(!najalknopky[id])
recDEMO(id, 0)
}
public recDEMO(id, mode)
{
static nickname[32], ip[16], stim[35]
get_user_name(id, nickname, sizeof nickname -1)
get_user_ip(id, ip, sizeof ip -1, 1)
get_user_authid(id, stim, sizeof stim -1)
if(mode == 1)
{
najalknopky[id] = false
remove_task(id+500)
log_to_file(LOGNAME, "[Player: %s][SteamID: %s - IP: %s] [Demoname: Player was kicked]", nickname, stim, ip)
server_cmd("kick #%d You can't game at this server, without recording demo.", get_user_userid(id))
return
}
najalknopky[id] = true
static hostname[64], vremia[9], hash[34], demoname[350], neyznavod[32]
get_cvar_string("hostname", hostname, sizeof hostname -1)
get_time("%H:%M:%S", vremia, sizeof vremia -1)
get_pcvar_string(gpc_cvar2, neyznavod, sizeof neyznavod -1)
md5(demoname, hash);
formatex(demoname, sizeof demoname -1, "%s_%s_%s_%s_%s_%s_%s_MD5-%s.dem", neyznavod, hostname, nickname, ip, MapName, vremia, monthyear, hash)
while(replace(demoname, sizeof demoname -1, "/", "-")) {}
while(replace(demoname, sizeof demoname -1, "", "-")) {}
while(replace(demoname, sizeof demoname -1, ":", "-")) {}
while(replace(demoname, sizeof demoname -1, "*", "-")) {}
while(replace(demoname, sizeof demoname -1, "?", "-")) {}
while(replace(demoname, sizeof demoname -1, "<", "-")) {}
while(replace(demoname, sizeof demoname -1, ">", "-")) {}
while(replace(demoname, sizeof demoname -1, "|", "-")) {}
while(replace(demoname, sizeof demoname -1, " ", "_")) {}
client_cmd(id, "stop;wait;wait;record ^"%s.a^"", demoname)
set_hudmessage(255, 0, 0, 0.02, 0.18, 0, 6.0, 5.0)
show_hudmessage(id, "Началась записи POV-demo!^n^n%s", demoname)
if(equal(stim, "VALVE_ID_LAN")
|| equal(stim, "VALVE_ID_PENDING")
|| equal(stim, "STEAM_666:88:666")
|| equal(stim, "WWW.DARKTOWER.SU")
|| equal(stim, "STEAM_ID_PENDING")
|| equal(stim, "STEAM_ID_LAN") )
stim = "UNKNOWN"
log_to_file(LOGNAME, "[Player: %s][SteamID: %s - IP: %s] [Demoname: %s]", nickname, stim, ip, demoname)
}
Рекомендуемые сообщения
Hackore
0
Недавно перешёл с Pawn на Visual Studio Code и столкнулся с некоторыми проблемами. Команды на Pawn.CMD
gamemodes/new.pwn(3626) : error 010: invalid function or declaration
Вот код:
cmd:mm(playerid) { if(logged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "Вы не авторизованы!"); ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"{0099ff}Меню игрока", "1. Статистика персонажаn2. Список командn3. Настройкиn4. Связь с администрациейn5. Правила сервераn6. Изменить НонРП никn7. Донатn{66cc00}8. Ввести промокод","Выбрать", "Отмена"); return 1; } alias:mm("menu", "mn"); //строка ошибки 3626
Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты
PriteTV
9
Попробуй вот так
cmd:mm(playerid) { if(logged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, "Вы не авторизованы!"); ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"{0099ff}Меню игрока", "1. Статистика персонажаn2. Список командn3. Настройкиn4. Связь с администрациейn5. Правила сервераn6. Изменить НонРП никn7. Донатn{66cc00}8. Ввести промокод","Выбрать", "Отмена"); return 1; } alias:menu("mm");
-
1
Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты
Reyn
85
Эту ошибку легко исправить, тоже с ней сталкивался.
Вместо alias:mm(«menu», «mn»); //строка ошибки 3626
Пиши:
cmd:mn(playerid)
return callcmd::menu(playerid); // То-есть мы вызываем саму команду menu через mn без alias т.к висуал не дружит с ним.
Изменено 19 января, 2019 пользователем Reyn
-
1
Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты
Эта тема закрыта для публикации ответов.