6u3oH
|
Дата: Четверг, 17.08.2017, 22:51 | Сообщение # 1
|
Главный и единственный
Группа: Администратор
Сообщений: 36
Статус: Не в сети
|
Ну что ж, пришло время приступить к серьезным делам. Работа с функциями - неотъемлемая часть любого кодера. Именно сейчас я и расскажу вам об этом. Что такое функция? Это часть кода, заключенная в блок ({ и }), которая, при обращении к ней, выполняет определенные действия. Какие действия она выполняет? Это решать вам, ведь вы пишите этот код. То есть по сути работа плагина заключена в том, что мы обращаемся к определенным функциям, которые выполняют определенные действия, в этом и заключена суть работы плагина.
Итак, во-первых, функции делятся на несколько видов:
- Public
- Stock
- Forward
- Native
- Regular
Функция Public Функция public или публичная функция - основная функция, использование которой в плагине обязательно (иначе можно будет получить ошибку при компиляции). Для примера мы зарегистрируем консольную команду, через которую вызовем нашу функцию:
Код #include <amxmodx> // Подключаем инклюд
public plugin_init() { register_clcmd("test", "Test_Function"); // Регистрируем консольную команду }
public Test_Function(id) // Вызов нашей функции { client_print(id, print_chat, "Функция public работает!"); // Выводим сообщение в чат }
Теперь если вы установите данный плагин к себе на сервер и введёте в консоль команду test, то в чате увидите сообщение, которое мы через эту функцию вывели. Объяснять пока каким образом мы регистрируем команду и каким образом и что выводим я пока не буду, об этом поговорим в следующих уроках. Если вы были наблюдательны, то заметили, что в данном примере у нас две функции public, но одна из них хоть и используется в роли публичной функции, но является функцией типа forward, об этом ниже.
Функция Stock Функция stock является похожей на функцию public, но всё же используется для других целей. Данная функция включается в плагин только в том случае, если она используется. То есть если она ни разу в плагине не была использована, то при компиляции она будет попросту проигнорирована. Используется она в основном для объединения уже некоторых функций. Например, в ней осуществляют подсчёт админов на сервере, кол-во дверей, количество игроков, имеющих меньше 10 хп и так далее - для чего угодно, но обращаются к ней зачастую именно через публичную функцию.
В пример возьмем всем известный плагин, который выводит кол-во админов онлайн. В нашем случае будет так: мы вводим в консоль команду say /admin и получаем в чат количество админов онлайн.
Код #include <amxmodx> // Подключаем инклюд
public plugin_init() { register_clcmd("say /admin", "ShowAdmins"); }
public ShowAdmins(id) // Регистрируем консольную команду { new iCount = get_admin_count(); // Создаем переменную и присваиваем ей значение, обращаясь к stock-функции
client_print(id, print_chat, "Админов в сети: %i", iCount); // Выводим через указатель значение переменной }
stock get_admin_count() // Наша функция, к которой мы обратились { new iCount; // Объявляем переменную, которая будет хранить кол-во админов онлайн
for(new id = 1; id <= get_maxplayers(); id++) // Проходим циклом по всем игрокам { if(is_user_connected(id)) // Исключаем все лишние объекты, кроме игрока { if(get_user_flags(id) & ADMIN_BAN) // Проверяем, имеет ли игрок флаг 'd' (users.ini) { iCount++; // Прибавляем к переменной значение +1, (++ называется итерацией, к числу прибавляется +1) } } }
return iCount; // Возвращаем кол-во админов } Теперь вы можете попробовать данный плагин в действии, если поставите его к себе на сервер. Наберите чат-команду: say /admin и в чат выведется количество админов, присутствующих на сервере.
Функция Forward Функция forward имеет все те же особенности, что и функция public, но имеет одно отличие: она может быть вызвана из другого плагина, в отличие от некоторых других функций. То есть данную функцию можно использовать как связь между плагинами. Например, функция plugin_init(), без которой практически не обходится ни один плагин. Она вызывается в момент старта/рестарта сервера. Именно в данной функции регистрируются консольные команды, разные игровые события и производятся некоторые действия, которые необходимо сделать всего лишь один раз. Данная функция является стандартной, но есть возможность создавать и свою forward-функцию - своё событие. Об этом всём мы поговорим в следующих уроках, которые будут уделены именно этим аспектам.
В каком-то особом примере функция forward не нуждается, потому как в примерах для функций выше уже используется данный тип функций, покажу лишь небольшой пример.
Код #include <amxmodx> // Подключаем инклюд
public plugin_init() // Событие инициализации плагина { server_print("The plugin_init event was called successfully!"); // Выводим сообщение в консоль сервера } Если вы поставите данный плагин себе на сервер, то при запуске сервера увидите это сообщение в консоли сервера, которое гласит, что событие plugin_init было успешно вызвано.
Функция Native Функция native является одной из составляющих основу написания плагина. Без данной функции вы не сможете узнать сколько у игрока денег, не сможет узнать его ник, не сможете выдать ему оружия, не сможете вывести в чат сообщение. Именно эта функция выполняет все подобные действия. Она похожа на функцию forward, но используется для других целей, хоть и может быть создана самим кодером лично и может быть использована в разных плагинах (то есть есть возможность связывать ею плагины). В пример мы возьмем функцию выдачи оружия.
Код #include <amxmodx> // Подключаем инклюд (модуль) #include <fun> // Подключаем еще один модуль
public plugin_init() { register_clcmd("say /deagle", "Give_Deagle"); // Регистрируем консольную команду }
public Give_Deagle(id) // Работае с нашеё функцию { give_item(id, "weapon_deagle"); // Выдаем игроку дигл }
Используя этот плагин, вы можете набрать чат-команду say /deagle и получить дигл. Особо любопытные могли заметить, что в данном случае мы подключаем еще один инклюд. На вопрос "Зачем?" я отвечу: данный модуль предоставляет возможность использовать native-функцию give_item, которая в свою очередь позволяет выдать игроку пистолет deagle.
Функция Regular Функция Regular ничем практически не отличается от функции public, единственное отличие состоит в том, что описывается она без суффиксальных элементов и не воспринимается некоторыми модулями, поэтому я советую воздержаться от её использования. Простой пример.
Код #include <amxmodx> // Подключаем инклюд
public plugin_init() //Событие инициализации плагина { Init_Call(); // Вызываем нашу функцию }
Init_Call() // Наша функция { server_print("The 'Init_Call' event was called successfully!"); // Выводим сообщение в консоль сервера } Ничего особенного нет. Из события инициализации плагина мы вызываем эту функцию, в которой присутствует код для выведения информации в консоль сервера.
На этом всё. Надеюсь, этот урок вы дочитали до конца, бОльшую часть информации поняли. А те, кто уже практически всё это знал, но получил для себя немного полезной информации или ответ на томящий вопрос, молодцы.
|
|
|
|