Створення своїх плагінів для amxx

Створення своїх плагінів для amxx

Писати плагіни на мові Small досить легко, і після декількох уроків, ймовірно, ви зможете написати свій власний плагін до AMX. Тому, думаю, я не повинен писати зайве багато до тих пір поки ви самі не почнете самостійно думати як же написати плагін (код).


Звичайно, якщо ви писали раніше програми, це сильно допоможе. Але я думаю мову Small - гарний початок для новачка. Я сподіваюся, ви маєте деякі ключові поняття в мовах програмування. Якщо не розумієте що таке змінні і функції, то ви повинні піти і знайти інформацію з цих питань. Я не буду вам цього пояснювати. Однак не лякайтеся. Я думаю, з моїх уроків ви зможете зрозуміти, що до чого.

Я писав цей плагін під мод HL - Counter- Strike. Так що прийміть це до відома. Але, думаю, все сказане тут буде корисним для написання скриптів до інших модам HL.
030613
Урок 1
Ваш перший плагін
*****************

Давайте почнемо з простого: виведення повідомлень на екран. Придумаємо команду, яка це буде робити: amx_ helloworld, amx_ hello або навіть hello. Треба що б адмін зміг, коли захоче, вписати відповідну команду і на екран виводилося відповідний напис: hello world, hello або навіть "Privet, 4 itaki" ().

Все перевірили? Поїхали!

Будь-плагін повинен мати функцію plugin_ init (). Все те, що вставлено в цю дану функцію буде реєструватися в AMX, що б він міг використовувати ваш плагін: public plugin_init () <
register_plugin ( "Hello world", "0.1", "jghg")
>

Але цього не достатньо, для нашої мети. Повинна бути команда яку адмін зможе використовувати і для цього ми повинні її зареєструвати в plugin_ init () функції. Команди, які вводяться в консолі сервера або від клієнта повинні бути в нутрії plugin_ init () для того, що б нею могли користуватися. plugin_ init () важливий з багатьох інших причин, про які ви дізнаєтеся з більш пізніх уроках. Функція plugin_ init () це як повідомлення для AMXMod, що существкет ваш плагін, і в разі чого (введення команди) юзати его.register_clcmd ( "amx_helloworld", "myfunction", A DMIN_VOTE, ". Prints Hello world. To everyone")

Таким чином функція plugin_ init () виглядає так: public plugin_init () <
register_plugin ( "Hello world", "0.1", "jghg")
register_clcmd ( "amx_helloworld", "myfunction", ADMIN _VOTE, ". says Hello world. to game screen")

Тримайте відступи, тобто використовуйте "tab" або, наприклад, прогалини в написанні функцій. Відкрийте будь-хто. sma файл, що поставляється разом з AMX, і ви зрозумієте, про що я говорю. . * То спростить компіляцію і плагін буде откомпилирован більш якісно. Так само це спростить вивчення вашого плагіна інших розробників. Куди простіше розбиратися в структурованому коді, ніж в бардаку. Є ще серйозні підстави, але зараз я не буду в них вдаватися.

Додайте дані рядка. Вони повинні обов'язково бути присутнім в плагіні: #include
#include

Ми вже досить багато написали. Повинно бути, схоже ось на це: / *
Hello world, v0.1
By JGHG
* /

public plugin_init () <
register_plugin ( "Hello world", "0.1", "jghg")
register_clcmd ( "amx_helloworld", "myfunction", ADMIN _VOTE, ". says Hello world. to game screen")

Завжди зберігайте написане. Хто знає коли відключать електрику. Спробуйте відкомпілювати даний плагін. Якщо є помилки, то їх простіше знайти зараз, ніж потім колупати купу коду. . * То значно спрощує пошук помилок.

Збережіть плагін і запустіть sc. bat. sc. bat - це командний файл, який здійснює пошук усіх sma-файлів в директорії source. Компілює і складає в директорії compiled з розширенням. amx. Якщо ви хочете скомпілювати тільки свій плагін, то потрібно запустити sc. exe з параметром рівний назві файлу в якому збережений плагін (sc. exe helloworld. sma). Файл з розширенням .amx буде збережений в поточному каталозі.

Якщо щось не так при компіляції перевірте правильність написання плагіна.

Нам залишилося написати останню функцію - виведення повідомлення на екран. Ми зареєстрували команду яка буде виконуватися в консолі, повідомлення виводиться на екран теж зареєстрували. Тепер залишилося створити функцію яка буде все це робити: public myfunction (id, level, cid) <
if (! cmd_access (id, level, cid, 1)) <
return PLUGIN_HANDLED
>
>

Я не буду розписувати як працює функція cmd_ access (). Скажу тільки, що вона перевіряє чи може клієнт використовувати дану команду.

Id використовується по різному. У cmd_ access () через id перевіряється рівень доступу цього текучого користувача, і нікого іншого. Сподіваюся це зрозуміло.

Наступна лінія коду: client_print (0, print_center, "Hello world.")

.* То та рядок коду, яка відповідає за друкування повідомлення у клієнта. з lient_ print є назвою функції, яка бере три параметра (може вимагатися більше, але про це в інших уроках). Перший параметр (0) відповідає за те кому буде виведена дана команда. Якщо поставити id номер гравця, то повідомлення буде виведено йому і вам. В даному випадку виведено буде для всіх присутніх на сервері (живим або мертвим). Тобто коли вам треба зробити з усіма щось або повідомити всім щось треба використовувати 0. Другий параметр вказує де слід виводити повідомлення. Можна помістити повідомлення в районі чату - print_ chat або print_ notify - відображає тільки в консолі. І третій параметр - саме повідомлення. Те, що в межах лапок то і є повідомлення, яке буде друкуватися на екран. Не втрачайте лапок.

Ми майже написали наш перший плагін. Залишилося тільки дописати наступну сходинку в функцію myfunction (): return PLUGIN_HANDLED

.* То важлива рядок. Її втрачати не можна. Пам'ятайте, це останнє що ви повинні додати у всіх ваших функціях, які викликаються командами, надруковані в консолі сервера або в консолі клієнта. Якщо ви цього не зробите, то AMX не знатиме, що команда виконана, виведе повідомлення на екран, а в консолі з'явиться наступна помилка: Unknown command: amx_helloworld

Тому завжди закінчуйте функцію return PLUGIN_HANDLED.

Повністю наш плагін виглядає так: / *
Hello world, v0.1
By JGHG
* /

public myfunction (id, level, cid) <
if (! cmd_access (id, level, cid, 1)) <
return PLUGIN_HANDLED
>

public plugin_init () <
register_plugin ( "Hello world", "0.1", "jghg")
register_clcmd ( "amx_helloworld", "myfunction", ADMIN _VOTE, ". prints Hello world. to everyone")

Все, плагін готовий. Відкомпілюйте його і переконайтеся, що немає помилок під час компіляції. Якщо при компіляції ви отримуєте повідомлення warning 217: loose indentation, перейдіть на вказану рядок і простежте що б поглиблення ( "tab" - пам'ятаєте ...) було однаково всюди у вашому плагін.

Тпер можете помістити файл helloworld. amx в папку amx \ plugins і прописати плагін в amx \ config \ plugins. ini. Додайте рядок helloworld. amx в самий кінець списку плагінів. Тепер запускайте сервер. Якщо сервер запущений можна в консолі сервера використовувати команду restart. Разом з рестартом карти станеться перераховування плагінів і новий доданий плагін буде використаний AMX.

Тепер заходите в гру і пропишіть amx_ helloworld і переконайтеся що все відображається як треба. Переконайтеся, що при введенні команди amx_ help опис відповідає тому, що використовували ми. Якщо плагін не працює, в консолі сервера введіть amx plugins і переконайтеся, що плагін завантажений. Можливо ви забули прописати себе адміном.

Схожі статті