#1
Отправлено 25 ноября 2022 — 12:45
Использую последнею версию компилятора Zeex.
Это работает
const size = 2; static const array[size] = { 2, 5 };
Это не работает
static const size = 2; static const array[size] = // error 008: must be a constant expression; assumed zero { 2, 5 };
Стало интересно, почему так? Из-за того, что оператор static определяет изначально, что это всё же переменная, а не константа? А уже const определяет неизменность переменной?
Не скажу, что для меня это проблема, использую define, но всё же
Сообщение отредактировал M I S T E V: 25 ноября 2022 — 12:50
0
#2
Отправлено 25 ноября 2022 — 18:33
-
- Новичок
-
static const — константа времени выполнения с ограниченной областью видимости
const — константа времени компиляции
так как размер массива должен иметь константное значение, которые должно быть известно на этапе компиляции, происходит эта ошибка
возможно, что в след. сборке появится конструкция «const static», если соответствующий PR, подготовленный Кортезом, был принят и добавлен в основную ветку, что позволит создавать константы времени компиляции с ограниченной областью видимости
p.s. почему такая конструкция создает константу времени выполнения, а не времени компиляции — прихоть создателя pawn. Логика не очень понятна (другое дело конструкция static const new — константная переменная с ограниченной область видимости)
Сообщение отредактировал architect: 25 ноября 2022 — 18:50
2
- ← Предыдущая тема
- Вопросы по скриптингу
- Следующая тема →
- Вы не можете создать новую тему
-
Тема закрыта
1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей
Hello,
I am trying to add two variables together, but when I try to compile it is throwing error 008.
I’ve also tried to use a function to add two variables passed to it and return the sum, but that hasn’t worked for me.
Any help would be appreciated thank you.
Code:
SourcePawn Compiler 1.3.8 Copyright (c) 1997-2006, ITB CompuPhase, (C)2004-2008 AlliedModders, LLC neptune_restart.sp(8) : error 008: must be a constant expression; assumed zero neptune_restart.sp(10) : error 008: must be a constant expression; assumed zero 2 Errors. Compilation Time: 0.56 sec
Code:
#include <sourcemod> // Initialize variables to be used... new restartAtHour = 7; // 0 - 23 new restartAtMins = 0; // 0 - 59 new restartAtHourInMins = restartAtHour * 60; new restartAtTime = restartAtHourInMins + restartAtMins; new rebootWindow = 10; // number of minutes for reboot window will not reboot past this window new rebootBy = restartAtTime + rebootWindow; new nowHour = 0; new nowMins =0; new nowHourInMins = 0; new nowTime = 0; // for later new userid = 0; new String:mybuffer[256]; //new String:steamid[64]; public Plugin:myinfo = { name = "Neptune's Reboot", author = "Neptune", description = "Plugin to restart the server daily.", version = "0.0.1", url = "<- URL ->" } /* Sourcemod Functions */ public OnPluginStart() { PrintToChatAll("[SM] Reboot Loaded!"); HookEvent("round_start", Event_round_start); HookEvent("player_disconnect", Event_player_disconnect); // For later HookEvent("player_say", Event_player_say); } public OnPluginEnd() { PrintToChatAll("[SM] Reboot Unloaded!"); } /* Events */ public Event_round_start(Handle:event, String:name[], bool:dontBroadcast) { checkTime(); } public Event_player_disconnect(Handle:event, String:name[], bool:dontBroadcast) { CreateTimer(2.0,Timer:checkTime); } /* For later */ /* public Event_player_say(Handle:event, String:name[], bool:dontBroadcast) { userid = GetEventInt(event,"userid"); if(userid == 0){ } } */ /* Custom Functions */ //check reboot time public checkTime(){ if(CountAllHumanPlayers() == 0){ CreateTimer(60.0,Timer:checkTime); } FormatTime(String:mybuffer,sizeof(mybuffer),"%H"); nowHour = StringToInt(mybuffer); FormatTime(String:mybuffer,sizeof(mybuffer),"%M"); nowMins = StringToInt(mybuffer); nowHourInMins = nowHour * 60; nowTime = nowHourInMins + nowMins; if(restartAtTime < nowTime && nowTime < rebootBy) { } } //Restart the server public restartServer() { } //Count all Players public CountAllHumanPlayers() { new Count = 0; for (new i=1;i<=MaxClients;i++) { if (IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i)) { Count++; } } return Count; }
Posts: 233
Threads: 57
Joined: Jun 2011
Reputation:
0
Hello again all,
So I have a MySQL database table containing info on all of the skins, including skin ids. I’ve created an Enum to store the skins. I have ran an sql query and am now trying to store each row of data into it’s own enum. SO basically, looping through the result of skins that comes back from the database, and then foreach one create a new Skin Enum, with it’s values inside. However, it’s not working. My code is below:
Код:
enum sSkin{ //skins enum id, gender_id, model_name[50], name_type[100], is_private } forward OnSkinsLoaded(); public OnSkinsLoaded(){ //This callback runs from OnGameModeInit, selecting all skins //Now set skin enum foreach skin if(mysql_errno() == 0){ new rowCount = cache_get_row_count(mysql); if(rowCount){ //character(s) found for(new i = 0; i < rowCount; i++){ new skinID = cache_get_field_content_int(i, "id"); //get skin id from db new Skin[skinID][sSkin]; //Create skin enum for skin id Skin[skinID][gender_id] = cache_get_field_content_int(i, "gender_id"); //gender_id cache_get_field_content(i, "model_name", Skin[skinID][model_name], mysql, 50); //model_name cache_get_field_content(i, "name_type", Skin[skinID][name_type], mysql, 100); //name_type Skin[skinID][is_private] = cache_get_field_content_int(i, "is_private"); //is skin private? } } return true; }else{ print("ERROR LOADING SKINS FROM MYSQL DATABASE"); return false; } }
The error I’m recieving is:
Код:
..includesystemscharacterchar_core.pwn(463) : error 008: must be a constant expression; assumed zero
Now, I know exactly what the issue is. It is «new Skin[skinID][sSkin]; //Create skin enum for skin id». It’s because Pawno requires the value to be a constant where it says «[skinID]».
However, does anyone know a work around for this so I can have an enum for each of the skins loaded from this callback function ive made?
Many thanks
Posts: 11,827
Threads: 33
Joined: Dec 2011
Reputation:
0
Have a constant value (like knowing that there will be aprox. 50 allowed skins) and declare it as global so it can be accessed anywhere else.
Posts: 233
Threads: 57
Joined: Jun 2011
Reputation:
0
Quote:
Originally Posted by Konstantinos
Having a constant value and declare it as global.
But what if I dont know myself what that value would be. Not so much an issue for this I guess, as the number of skins is a constant value. However, what if I had a table of results which were added to all the time, and I wanted to set each one of those up as an enum? I wouldn’t know what that constant value would be as it would be changing all the time. I hope you understand what I mean haha.
Posts: 11,827
Threads: 33
Joined: Dec 2011
Reputation:
0
Sorry for the many edits of my post.
You pretty much know that there are 312 skins include 74 which is invalid. I didn’t understand your last part, can you explain more please?
Posts: 233
Threads: 57
Joined: Jun 2011
Reputation:
0
Yes I understand that what you said on the skins, and I’ve fixed my issue with the way you suggested. I’ll explain the last part some more trying to use an example, I’ll use houses as my example.
Say you have a MySQL table called house. This table has a row for each house on your server. It contains the following values: HouseID, OwnerID. I know realistically there would be more data than that, but just for ease.
Anyways, so you create an Enum in your script called House. It would look like the following:
Код:
enum House{ HouseID, OwnerID }
Whilst in game, an admin can create a new house. Therefore the MySQL house table will always be getting new rows. There is no way to determine what CONSTANT NUMBER OF ROWS the House table would hold, as it can be added to any time.
So my questions is, if I wanted to pull from the database all of the houses, and then instantiate a new House enum for each one, how would I do this? I wouldn’t be able to put something like «new Skin[MAX_HOUSES][House];» because I wouldn’t be able to define exactly how many houses there is going to be, as this would be a dynamic value. Sometimes there might be 20 houses, othertimes there might be 35 houses, it could be any amount.
From my logic, I would need to get the row count from the MySQL after query execution and do something like «new Skin[sqlRowCount][House];», but that wouldn’t work as sqlRowCount wouldn’t be a constant value.
I hope that makes sense and you can understand what I’m asking from that.
Posts: 582
Threads: 18
Joined: Jul 2010
Reputation:
0
Make a variable that holds the number of houses. For starters, make it ~40. When your gamemode starts and mysql loads up the houses, use mysql to retrieve how many rows there are. So you get the number of rows (houses) and then set that number for the variable that holds the number of houses. Lets say an admin uses a command to add a house. When the admin uses the command, just do ++ to the variable that holds the number of houses. And that’s it.
Whole idea:
Код:
new MAX_HOUSES=40,Skin[MAX_HOUSES][House]; enum House { HouseID, OwnerID } public OnGameModeInit() { // mysql loading MAX_HOUSES=mysql_rows; } CMD:addhouse(playerid, params[]) { // add house... MAX_HOUSES++; return 1; }
I’m not sure if this would be the best idea, but that would be how I would do it.
- Регистрация
- 27 Фев 2013
- Сообщения
- 216
- Лучшие ответы
- 0
- Репутация
- 46
-
#1
По просьбе трудящихся сделал вторую тему.
первая тема: http://pawno-info.ru/threads/67611-Исправление-error-warning
1)
PHP:
error 002: only a single statement (or expression) can follow each "case" - Данная ошибка говорит о том,что только один оператор может следовать после case
К примеру:
PHP:
case 1:
{
if(resposne)
{
switch(listitem)
{
case 0:
{
//тут типо ваша функция
}
if(BlaBla[playerid] == 1) return SendClientMessage(playerid, COLOR_GREY, "BlaBla BlaBla BlaBla"); //и вот она наша ошибка
case 1:
{
//тут типо ваша функция
}
}
}
}
Исправления: Вынесите за приделы switch
2)
PHP:
error 003: declaration of a local variable must appear in a compound block - Эта ошибка говорит о том, локальная* переменная должна быть в скобках
К примеру:
PHP:
if(nekaf[playerid] >= 1||nekaf[playerid] >= 3||nekaf[playerid] >= 4)
new fronze= GetPlayerWantedLevel(playerid);//вот она наша локальная переменная.
SetPlayerWantedLevel(playerid, fronze+ 1);
Исправления:
PHP:
if(nekaf[playerid] >= 1||nekaf[playerid] >= 3||nekaf[playerid] >= 4)
{//Добавим
new fronze= GetPlayerWantedLevel(playerid);//вот она наша локальная переменная.
SetPlayerWantedLevel(playerid, fronze+ 1);
}//Закроем
3)
PHP:
error 004: function "%s" is not implemented - функция "%s" не определена;
К примеру:
Мы объявляем сохранения акк
SaveAccount(playerid);
И нам выпадает данная ошибка.
Что же делать? и что это значит?
Значит это то что в моде нету public SaveAccount(playerid)
Решения:
Написать сохранения с 0.
4) error 006: must be assigned to an array — Это должно быть в массиве*;
К примеру
PHP:
new string;//вот наша ошибка
format(string,sizeof(string),"Тут что тут что %s",bal);
Исправления:
Вот тут очень важный момент что б не уйти за границы стека нам надо подсчитать количество символов (notepad++ в помощь).
5) error 008: must be a constant expression; assumed zero — Это должно быть константой равной нулю;
к примеру:
PHP:
new tp1;
new tp2;
//полностью код расписывать не буду
public OnPlayerPickUpPickup(playerid, pickupid)
{
switch(pickupid)
{
case tp1:{
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,1749.2031,-1906.4226,29.5422);
SendClientMessage(playerid, 0xFF0000FF, "Ты телепортировался на верх");}
case tp2:{
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,1775.5494,-1905.9265,13.3861);
SendClientMessage(playerid, 0xFF0000FF, "Ты телепортировался вниз");}
}
return 1;
}
в switch ,case, можно использовать только константы*
Константа это неизменяемая переменная. В SAMP константа обозначается #define. Структура константы, следующая #define <имя> <значение>. Константы удобно использовать для того, чтобы не писать коды цветов, которыми форматируются сообщения в чате
Дополнять естественно буду!
Также указываете на ошибки, если такие имеются!
Автор:neka(nekaz)
Из названия все ясно. ИД’ы всех ошибок, фатальных ошибок, а также предупреждений в PAWNO.
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) — Неправильный размер массива. Отрицательное значение или ноль;
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) — Не точка входа;
error 014: invalid statement; not in switch — Неверная команда;
error 015: «default» case must be the last case in switch statement — Оператор «default» должен быть последним;
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» — ошибочное название символа (начинается с цифры, например);
error 021: symbol already defined: %s» — символ уже определён (дважды встречается new одного и того-же символа);
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 — составной оператор не закрыт в конце файла, поставить return 1;} в конец мода;
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) — Аргумент не имеет начального значения;
error 035: argument type mismatch (argument %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») — Неизвестный размер массива %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 — описание функции без заголовка (пропущен public(…));
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»;
error 061: «#elseif» directive follows an «#else» directive — «#elseif» перед «#else»;
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) — В этой функции может быть только один аргумент %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») — Переменная %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 — макрос %s должен начинаться с букв;
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»;
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») — Нельзя взять значение в массив %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») — для функции %s уже определенна данная state;
error 085: no states are defined for function «%s» — не определенна ни одна state для функции %s;
error 086: unknown automaton «%s» — Неизвестная автоматизация %s;
error 087: unknown state «%s» for automaton «%s» — не определен state %s, для переключения %s;
error 088: number of arguments does not match definition — количество аргументов не совпадает с объявленными в функции;
fatal error 100: cannot read from file: «%s» — невозможно прочитать/найти файл %s в стандартной директории;
fatal error 107: too many error messages on one line — слишком много ошибок на одной строке (обычно из-за одного неправильного параметра);
warning 200: symbol «%s» is truncated to 31 characters — название переменной %s обрезается до 31 символа (укоротите название переменной %s);
warning 201: redefinition of constant/macro (symbol «%s») — двойное определение одинаковой константы (смотреть #define);
warning 202: number of arguments does not match definition — несовпадение количества аргументов;
warning 203: symbol is never used: «%» — символ «%» нигде не используется;
warning 204: symbol is assigned a value that is never used: «%s» — символ создан, ему присваивается значение, но далее он не используется.
warning 208: function with tag result used before definition, forcing reparse — функция с типовым результатом используется перед объявлением
warning 209: function «%s» should return a value — функция %s должна возвращать какое-либо значение (return 1; к примеру);
warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
warning 213: tag mismatch — несовпадение тэгов;
warning 215: expression has no effect — выражение не имеет эффекта;
warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
warning 217: loose indentation — невыровненная строка (return должен быть строго под телом функции по левому краю, либо можно добавить в начало мода строку #pragma tabsize 0, но это не рекомендуется, так как иногда может не понимать и не прочитывать скобки «{» и «}»);
warning 219: local variable «%s» shadows a variable at a preceding level — переменная дважды объявлена;
warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — должен быть определён размер массива %s (если определён статиком, заменить дефайном);
warning 225: unreachable code — невалидный код;
warning 235: public function lacks forward declaration (symbol «%s») — необходим форвард функции %s (перед функцией пишем forward %s;
Пояснение: «%s — имя переменной/макроса/аргумента функции».
Авторы: OKStyle, webserfer, Kaza40k, [Nos]B[R]aiN[L], Ym[0]n, _volk_, ДениСыч, Roman1us.
При копировании на другие ресурсы, обязательно указывайте авторов, не зря ведь люди старались
new Text:BankMoneyDraw[MAX_PLAYERS];
new msgtimer;
new RandomMSG[][] =
{
"{ff8800}[Souch-Rp]{FFFFFF} Не забудте добавить сервер в ИЗБРАННОЕ",
"{ff8800}[Souch-Rp]{FFFFFF} В автосалоне на против заправки в г.Южном вы можете приобрести 5 любых автомобилей.",
"{ff8800}[Souch-Rp]{FFFFFF} Увидили читера? Нон РП действия игрока? {ff9218}[ /report ]{FFFFFF} Администрация всегда Вам поможет.",
"{ff8800}[Souch-Rp]{FFFFFF} Оффтоп / флуд в {ff9218}[ /report ]{FFFFFF} карается мутом,киком или баном.",
"{ff8800}[Souch-Rp]{FFFFFF} По всем жалобам,вопросам пишите в {ff9218}[ /report ].",
"{ff8800}[Souch-Rp]{FFFFFF} Провокация является нарушением правил сервера, если вас провоцируют - {ff9218}[ /report ].",
"{ff8800}[Souch-Rp]{FFFFFF} Все команды сервера {ff9218}[ /Help ]!",
"{ff8800}[Souch-Rp]{FFFFFF} Уважаемые игроки сервера, относитись друг к другу с уважением.",
"{ff8800}[Souch-Rp]{FFFFFF} Действия администрации обсуждению не подлежат. Если вы уверены что администратор был не прав оставте жалобы в группе.",
"{ff8800}[Souch-Rp]{FFFFFF} Соблюдайте РП сервера,иначе будете наказаны",
"{ff8800}[Souch-Rp]{FFFFFF} У вас есть вопросы по командам? {ff9218}[ /help ]{FFFFFF}.",
"{ff8800}[Souch-Rp]{FFFFFF} Уважаемые игроки, за использование {ff9218}`читов` на нашем сервере, вы получите бан от 5 дней.",
"{ff8800}[Souch-Rp]{FFFFFF} Выпрашивание игровых ценностей у администрации может привести к муту и кику.",
};
- Команда форума
-
#1
[SourcePawn] Урок 2 — Установка и компиляция плагинов
<- К содержанию
- Установка плагинов:
Типы файлов:
- .smx— Сам плагин после компилирования (нужен для работы).
Расположение: addons/sourcemod/plugins/ - .sp — Файл с исходным кодом (исходник нужен для компиляции, не нужен для работы).
Расположение: addons/sourcemod/scripting/ - .phrases.txt — Файл перевода (нужен для работы).
Расположение: addons/sourcemod/translations/ - .inc — Файл, в котором хранятся функции плагина (нужен для компиляции, не нужен для работы).
Расположение: addons/sourcemod/scripting/include/ - .cfg — Файл конфигурации плагина (нужен для работы).
Расположение зависит от плагина. Часто генерируется по пути cfg/sourcemod/ - .txt — Может быть использован как конфиг или как языковой файл (нужен для работы).
Расположение зависит от плагина. - .ini — Конфигурационный файл (нужен для работы).
Расположение зависит от плагина.
Для установки плагина нужно разложить все файлы плагина по папкам указанным выше.
Чтобы проверить работу плагина:
Запускаем сервер, заходим в его консоль и пишем sm plugins list . В консоли появиться список работающих плагинов:
Проверяем есть ли в списке установленный Вами плагин, если он там есть, значит Вы сделали все правильно.
- Команды SourceMod для работы с плагинами:
sm plugins команда
Команды:- info — Information about a plugin/Показывает информацию о плагине
- list — Show loaded plugins/Выводит список установленных плагинов
- load — Load a plugin/Загружает указанный плагин
- load_lock — Prevents any more plugins from being loaded/Блокирует загрузку плагинов
- load_unlock — Re-enables plugin loading/Снимает блокировку загрузки плагинов
- refresh — Reloads/refreshes all plugins in the plugins folder/Обновляет/перезагружает загруженные плагины
- reload — Reloads a plugin/Перезагружает указанный плагин
- unload — Unload a plugin/Выгружает указанный плагин
- unload_all — Unloads all plugins/Выгружает все плагины
- .smx— Сам плагин после компилирования (нужен для работы).
- Компиляция плагинов:
Для редактирования исходников плагинов рекомендую использовать редактор Notepad++ (кликабельно)
- Если у вас код не в файле .sp, а например, с форума то:
- Создайте новый файл с расширением .sp
- Откройте его с помощь notepad++ (см. выше)
- Установите для него кодировку UTF-8 без BOM
- Скопируйте в него нужный код
- Сохраните изменения
- Произведите компиляцию (см. ниже)
- Компиляция на Windows
Скачайте SourceMod и распакуйте файлы из архива (в частности папку addons/sourcemod/scripting/ со всем её содержимым) в любое место, например, на рабочий стол. Будем называть её «папкой компилятора«. Из всего её содержимого необходимы только 2 файла: compile.exe, spcomp.exe и папка include.
Затем положите в папку компилятора исходники вашего плагина (файлы с расширением *.sp и если есть файлы *.inc в папку include/).
Отредактируйте исходник как вам нужно и затемперетащите главный файл .sp на сompile.exe — вы увидите черное окно с отчетом о компиляции.
Если все в порядке и ошибок нет закройте это окно и можете забирать *.smx файл из папки compiled/.Если у вас возникли ошибки при компиляции — необходимо их исправить.
- Компиляция на Linux
Чтобы скомпилировать плагин в unix системах:
- Откройте терминал (консоль)
- Перейдите в директорию /addons/sourcemod/scripting/ с помощью команды cd
- Скопируйте файл содержащий исходный код плагина (имеет расширение *.sp) в эту директорию командой cp
- Для компиляции некоторых плагинов нужны *.inc файлы которые нужно копировать в папку addons/sourcemod/scripting/include и затем компилировать плагин
- Выполните команду:
./compile.sh имя_плагина.sp
Плагин должен скомпилироваться.
Внимание! Нет разницы на какой OC компилировать плагины. Если ваш сервер работает на Linux, то плагины скомпилированные на Windows там так же будут работать.
Если при компиляции возникли ошибки вам сюда -> Ошибки и предупреждения при компиляции
Часть информации взята здесь.
- Если у вас код не в файле .sp, а например, с форума то:
Последнее редактирование: 21 Июл 2017
- Команда форума
-
#2
Возможные ошибки при компиляции
Для начала разберём разницу между ошибкой (error) и предупреждением (warning).
- Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
- Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.
Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «
сомневается
«)
Коды ошибок
- 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») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% 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») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %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 — количество аргументов не совпадает с объявленными в функции;
Коды «Фатальных ошибок»
- fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
- fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;
Коды предупреждений
- warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
- warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
- warning 202: number of arguments does not match definition — несовпадение количества аргументов;
- warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
- warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
- warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
- warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
- warning 213: tag mismatch — несоответствие аргументов;
- warning 215: expression has no effect — выражение не имеет смысла;
- warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
- warning 217: loose indentation — не выровненная строка;
- warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
- warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
- warning 225: unreachable code — невыполнимый код;
- warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
- warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);
Последнее редактирование: 6 Сен 2016
-
#3
Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «сомневается»)
Я бы пример добавил:
Например если ошибка на 37 строке:
/home/home/GIT/addons/sourcemod/scripting/my_plugin.sp(37) : error 017: undefined symbol «EventHookM»
+ ещё стоит написать что если даже при компиляции не возникло ошибок и предупреждений, то нужно проверить /addons/sourcemod/logs/errors<сегодняшнее число>.log после того как плагин немного поработает.
-
#4
Возможные ошибки при компиляции
Для начала разберём разницу между ошибкой (error) и предупреждением (warning).
- Предупреждение — то, что может выдать Вам компилятор в случае «некритичной ошибки» (По мнению компилятора) допущенной в исходном коде плагина. Такая ошибка не будет влиять на работу плагина (Под сомнением), но лучше писать так, чтобы компилятор не ругался.
Ошибка — ситуация, в которой компилятор «откажет» Вам в компилировании плагина, т.е. он не будет компилировать Ваш плагин, пока Вы не устраните ошибку в исходном коде.Обычно, когда компилятор предупреждает или выдаёт ошибку, он указывает строку в которой допущена ошибка (или в которой компилятор «
сомневается
«)
Коды ошибок
- 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») — не могу принять тег в качестве значения по умолчанию для индексированного параметра-массива (символ «% 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») — Кофликт state(функция созданий структур):одна из state уже создана в другом месте(символ %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 — количество аргументов не совпадает с объявленными в функции;Коды «Фатальных ошибок»
- fatal error 100: cannot read from file: «%s» — невозможно прочитать из файла «%s»;
fatal error 107: too many error messages on one line — слишком много сообщений об ошибке в одной строке;Коды предупреждений
- warning 200: symbol «%s» is truncated to 31 characters — название переменной «%s» обрезано до 31 символа;
warning 201: redefinition of constant/macro (symbol «%s») — повторно установлена постоянная/макро (переменная «%s»);
warning 202: number of arguments does not match definition — несовпадение количества аргументов;
warning 203: symbol is never used: «%s» — переменная никогда не использовалась: «%s»;
warning 204: symbol is assigned a value that is never used: «%s» — переменной установлено значение которое никогда не использовалось: «%s»;
warning 209: function «%s» should return a value — функция «%s» ничего не возвращает;
warning 211: possibly unintended assignment — в условии использовано не сравнение, а присвоение;
warning 213: tag mismatch — несоответствие аргументов;
warning 215: expression has no effect — выражение не имеет смысла;
warning 216: nested comment — вложенный комментарий (вынесите его за функцию);
warning 217: loose indentation — не выровненная строка;
warning 219: local variable «%s» shadows a variable at a preceding level — локальная переменная «%s» встречается на предыдущем уровне;
warning 224: indeterminate array size in «sizeof» expression (symbol «%s») — неопределенный размер массива в «sizeof» выражении (переменная «%s»);
warning 225: unreachable code — невыполнимый код;
warning 234: symbol «%s» is marked as deprecated: Do not use this function — Функция не рекомендуется к использованию;;
warning 235: public function lacks forward declaration (symbol «%s») — у public функции отсутствует forward (символ «%s»);
Мой пост
- Команда форума
-
#5
Я нашел в базе своего старого форума, решил что будет полезно
-
#6
Я нашел в базе своего старого форума, решил что будет полезно
Я знаю, поэтому и улыбнуло)
- Команда форума
-
#7
@Антон Облаков, spcomp.exe так же обязан лежать в папке с компилятором.
-
#9
Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).
Оффтоп
- Команда форума
-
#10
@alexmy, разве перевода не достаточно? Как по мне — вполне.
- Команда форума
-
#11
Ещё было бы прекрасней, по пару примеров исправления ошибок и предупреждений =).
Что именно интересует? Могу написать.
-
#12
пару примеров исправления ошибок и предупреждений
Можно создать основную тему по исправлению
error/warning
, по мере наполнения базы вопросов/ответов, рядом с ‘Кодом №’ — сделать отсылки на примерное решение.
В самой теме перед реквестом, обязательное прочтение (‘Кодом №’) на уже готовые более-менее решения.
-
#13
Смысл такой, есть вообщем старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис. Вот плагин [L4D(2)] MultiSlots — AlliedModders куча ошибок, меня интересует сами части исправления. В интернете нечего подобного нету попадает хлам всякий и не более.
- Команда форума
-
#14
@alexmy, оно даже под 1.7 не компилится.
-
#15
@alexmy, оно даже под 1.7 не компилится.
Посмотреть вложение 21768
И такого хлама все больше и больше будет с обновлением SM :D. Вот хотелось бы хотя бы простые примеры с исправление. не обязательно с этим плагином.
- Команда форума
-
#16
@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.
-
#17
@alexmy, тут проблема вовсе не в СМ.
Ошибка 017 (она же «Undefined symbol») сигнализирует о том, что есть вызов функции или применение переменной, которая не существует.
Ну вот я пробовал компилятором 1.5.3 почему то не выдает не одной ошибки и не предупреждение. Вот ошибка с плагина по ссылке
error 017: undefined symbol "SpawnFakeClientAndTeleport"
Вот это часть:
Оффтоп
тут её не должно быть… по сути или я что то не понимаю или компилятор в другой части когда находит это ошибку и бьет по всем SpawnFakeClientAndTeleport
-
#18
старые плагины и синтаксис там соответственно древний :D. А при компиляции под новым синтаксисом, соответственно ошибок куча. Меня интересует сама «корректировка» под новый синтаксис.
Ошибки ввида ‘error 147: new-style declarations are required’ при ‘#pragma newdecls required’ лучше преобрести отдельную тему ‘new-style SourcePawn Transitional Syntax’ , например если @R1KO согласится, то за основу содержания ‘Темы Сообщения’ — перевода на новый синтаксис, можно взять Ядро плагина — [VIP] Core (либо другой, где присутствует множество функций) — [Shop] Core, Ядро плагина — [Shop] Core (Fork).
Что имеем:
#a. некоторый разбор перевода new-style.
#b. перевод большого выбранного ядра.
#c. возможное нахождение трудно замечаемых ошибок/недочетов.
#d. отсутствующие примеры функций будут позже в комментариях.
Если с выходом нового sm — старый синтаксис будет обратно
не совместим
, то к этому времени у большенства будет имется некий опыт, для перевода
не
обновляемых
нужных
плагинов, на актуальный sm.
Чем больше придерживаются к актуальному, прежде всего стабильному sm — тем ошибки идентичные, которые легче найти/отписать решение, либо иначе самому написать в BugReport т.к. ситуация позволяет.
P.S.:
для (v34) старее sm_1.7- есть обновляемая тема [CS:S v34] SourceMod 1.6.x/1.7.x/1.8.x.
Если создавать эти темы, то лучше именно обладателю ядра @R1KO, @FrozDark, …, т.к. может быть будет не приятно, если будут иные «ковырять» код.
И если согласятся, то думаю другие тоже подключаться.
Или просто написать гайд по переводу Ru:Introduction to SourcePawn 1.7, SourcePawn Transitional Syntax и простеньких «побольше» примеров.
Последнее редактирование: 3 Мар 2017
- Команда форума
-
#19
@DarklSide, у меня уже есть отдельная версия, которую я буду переводить. можно на её примере
-
#20
@R1KO, тогда могу присоединится, т.к. большенство действий является «однотипное» для большого кол-ва кода.
При этом
пометить
места, которые могут войти в содержание темы.
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 - количество аргументов не совпадает с объявленными в функции;