[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: BiZoN  
Форум » Обучение » Скриптинг » 4. Типы функций (Типы функций (какие бывают виды функций))
4. Типы функций
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!"); // Выводим сообщение в консоль сервера
}

Ничего особенного нет. Из события инициализации плагина мы вызываем эту функцию, в которой присутствует код для выведения информации в консоль сервера.

На этом всё. Надеюсь, этот урок вы дочитали до конца, бОльшую часть информации поняли. А те, кто уже практически всё это знал, но получил для себя немного полезной информации или ответ на томящий вопрос, молодцы.
 
Форум » Обучение » Скриптинг » 4. Типы функций (Типы функций (какие бывают виды функций))
  • Страница 1 из 1
  • 1
Поиск:


Яндекс.Метрика
У нас собраны ресурсы со всех просторов интернета: Готовые Сервера, Плагины, Моды, Карты, Модели Оружия, Модели Игроков, Защита Сервера
Steep.at.ua © 2013-2022. Все права защищены. Администрация не несет ответственности за материалы, размещенные на этом ресурсе!
Steep.at.ua использует хостинг