И так, для того чтобы создать простейший плагин Вам понадобится Spigot сервер,
Spigot-api, eclipse (желательно luna) и хотя бы базовые знания java. Ссылки на
Eclipse luna, Spigot-api и Spigot сервер будут указаны в конце статьи.
1.Запускаем elipse и (желательно) указываем пустую директорию.
2.Создаем новый java проект и называем его как хотим(я выбрал Test).
3.Нажимаем по проекту ПКМ и выбираем properties->java build path->libraries->add extrenal jars->OK
4.Указываем путь к spigot-api-1.9.2-R0.1-SNAPSHOT-latest-shaded
5.Переходим к созданию главного файла.
Шаги 3 и 4 в виде картинки:
Декомпиляция, изменение и последующая компиляция bukkit/spigot плагинов через IntelliJ IDEA
1.Создаем папку (package) и называем ее так *регион*.*автор*.*имя плагина*,
у меня получилось ru.stebbilust.test.
2.Создаем главный класс в этой папке, называем его как хотим.
3.Пишем в нем такой код:
// сюда пишем вашу папку
package ru.Stebbilust.test;
public void onDisable() // что то, что происходит при выключении
getLogger().info(«Bye. «); // выводим в консоль сообщение Bye.
>
>
4.Создаем в src файл plugin.yml и пишем там:
name: test
main: ru.Stebbilust.test.Main
version: 0.1
authors:
description:
commands:
name — имя плагина
main — путь к главному файлу
5.Переходим к экспорту!
1.Нажимаем File->export->jar file
2.Указываем путь сохранения
3.ОК
Если вдруг появляются ошибки, а предупреждений в коде нету,
то попробуйте экпортировать файл еще раз с заменой.
После этого устанавливаем плагин, запускаем сервер и видим:
Источник: ru-minecraft.ru
[SourcePawn] Урок 2 — Установка и компиляция плагинов
Создание и компиляция bukkit/spigot плагина через IntelliJ IDEA
Скачайте SourceMod и распакуйте файлы из архива (в частности папку addons/sourcemod/scripting/ со всем её содержимым) в любое место, например, на рабочий стол. Будем называть её «папкой компилятора». Из всего её содержимого необходимы только 2 файла: compile.exe, spcomp.exe и папка include.
Затем положите в папку компилятора исходники вашего плагина (файлы с расширением *.sp и если есть файлы *.inc в папку include/).
Отредактируйте исходник как вам нужно и затем перетащите главный файл .sp на сompile.exe — вы увидите черное окно с отчетом о компиляции.
Если все в порядке и ошибок нет закройте это окно и можете забирать *.smx файл из папки compiled/.
Если у вас возникли ошибки при компиляции — необходимо их исправить.
- Откройте терминал (консоль)
- Перейдите в директорию /addons/sourcemod/scripting/ с помощью команды cd
- Скопируйте файл содержащий исходный код плагина (имеет расширение *.sp) в эту директорию командой cp
- Для компиляции некоторых плагинов нужны *.inc файлы которые нужно копировать в папку addons/sourcemod/scripting/include и затем компилировать плагин
- Выполните команду:
./compile.sh имя_плагина.sp
Если при компиляции возникли ошибки вам сюда -> Ошибки и предупреждения при компиляции
Последнее редактирование: 21 Июл 2017
R1KO
fuck society
Возможные ошибки при компиляции
Для начала разберём разницу между ошибкой (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 » — функция использует «return» и «return «;
- error 079: inconsistent return types (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 — слишком много сообщений об ошибке в одной строке;
Источник: hlmod.net
Локальное компилирование плагинов
Введение.
Для компилирования плагина Вам нужно поместить его исходник с разрешением .sma в папку scripting ( /amxmodx/scripting )
Если с исходником идет файл с разрешением .inc — помещаем его в папку include ( /amxmodx/scripting/include )
Компилирование на Windows
Первый способ — компилирование всех плагинов в директории scripting
Данный вариант скомпилирует все ваши sma файлы, которые лежат в папке scripting
- Запускаем программу compile.exe и ждем завершения компилирования
- Готовые файлы будут лежать в папке compiled ( /amxmodx/scripting/compiled )
Второй способ — компилирование конкретного плагина
Если нужно скомпилировать какой-то отдельный плагин, тогда поступаем следующим образом:
- Переносим нужный нам файл sma на иконку compile.exe
- Готовый файл будет лежать в папке compiled ( /amxmodx/scripting/compiled )
Спойлер: Список опций компилятора
-A <число>- выделение байтов для сегментов данных и стека
-a — сохранить код ассемблера в отдельный файл
-C [+/-] — компактное кодирование выходного файла (по умолчанию=-)
-c — кодировка, к примеру, 1252 для Windows Latin-1
-D путь — путь к активной директории
-d0 — без символьной информации, без проверки во время выполнения
-d1 — [по умолчанию] проверки во время выполнения, без символьной информации
-d2 — полная отладочная информация и динамические проверки
-d3 — полная отладочная информация и динамические проверки, без оптимизации
-e — имя файла с ошибками
-H — windows окно, в которое следует отослать информацию при завершении компиляции
-i — путь к .inc файлам
-l — создать .lst файл (только предварительный процесс)
-o — установить имя выходного файла .amxx
-p — установить префикс для выходного файла
-r [имя] — написать отчет в консоль или в специальный файл
Спойлер: Eng
Options:
-A alignment in bytes of the data segment and the stack
-a output assembler code
-C[+/-] compact encoding for output file (default=-)
-c codepage name or number; e.g. 1252 for Windows Latin-1
-Dpath active directory path
-d0 no symbolic information, no run-time checks
-d1 [default] run-time checks, no symbolic information
-d2 full debug information and dynamic checking
-d3 full debug information, dynamic checking, no optimization
-e set name of error file (quiet compile)
-H window handle to send a notification message on finish
-i path for include files
-l create list file (preprocess only)
-o set base name of output file
-p set name of «prefix» file
-r[name] write cross reference report to console or to specified file
Четвертый способ — компилирование с помощью notepad++
- Скачиваем сам notepad++ с оф. сайта
- Нам понадобится плагин NppExec
- Скачиваем его через Plugin Manager ( Плагины => Plugin Manager => Show Plugin Manager )
Источник: dev-cs.ru