AMX MOD X
Понедельник, 29.04.2024, 04:24:09



Приветствую Вас Гость | RSS
[ Главная ] [ Статьи ] [ Регистрация ] [ Вход ]
Меню сайта

Форма входа

Категории раздела
Учебники [4]
Помощь для новичков и не только

Популярные файлы
  • AMXX Russian Language (Загрузок: 7776)
  • AMX Mod X Full Installer v1.8.1 (Загрузок: 5178)
  • Round Non-Stop v0.3.6 (Загрузок: 3059)
  • Loading Music II v1.2.9 (Загрузок: 2877)
  • SuperHero Mod Auto-Installer v1.18e (Загрузок: 2546)
  • Ultimate Ping Control v0.0.4 (Загрузок: 2013)
  • Connect Announce v0.3b.1SL (Загрузок: 1921)
  • Anti Silent Run v0.1.2 (Загрузок: 1909)
  • CS Hide & Seek v.1.8A (Загрузок: 1617)
  • Zoom Info (Загрузок: 1521)

  • Мини-чат

    Главная » Статьи » Учебники

    Принцип работы METAMOD
    Для успешной разработки плагинов любая среда, для которой предназначены ваши плагины, предоставляет набор функций, называемый API. HL1 предоставляет две группы таких функций: функции движка и функции мода (т.е. DLL).

    Принцип работы METAMOD (кстати, т.к. он прописывается в liblist.gam, правильнее считать его модом, т.е. плагином для HL, в то время как, например, AXN - на самом деле плагин для METAMOD, а не для HL) заключается в перехвате вызовов функций API и выполнении следующей последовательности действий:
    1) для каждого загруженного METAMOD плагина проверить, зарегистриована ли данная API-функция в самом плагине, и в случае успеха вызвать ее;
    2) вызвать настоящую функцию API (из DLL или движка)
    3) для каждого загруженного METAMOD плагина проверить, зарегистрирована ли Post-версия данной API-функций в самом плагине, и в случае успеха вызвать ее.

    У каждого METAMOD плагина есть возможность повлиять на реальную функцию API двумя способами:
    1) заблокировать вызов API-фунцкии (SUPERCEDE);
    2) разрешить вызов API-фунцкии, но заменить ее результат (OVERRIDE), т.е. возвращаемое значение если, конечно, оно существует.

    Каким образом METAMOD определяет, нужно ли блокировать вызов или подменять возвращаемый результат API-функции? Для этого каждый METAMOD плагин обязан вернуть META-результат (META_RESULT), и, в зависимости от его значения, METAMOD решает, что делать с оригинальной API-функцией. Если METAMOD плагин ничего не возвращает, то в консоль сервера будет выдана ошибка. Однако, при программировании плагинов под AMX/X 1.76b, я, однажды, забыл вернуть FMRES_IGNORED и никакой ошибки не было. Видимо AMX/X по умолчанию возвращает FMRES_IGNORED, если в скрипте не указано возвращаемое значение.

    Очень важный момент при блокировании оригинальной API функции заключается в том, что в остальных METAMOD плагинах, в которых зарегистирована Pre версия данной функции API, она все равно будет выполнена. Т.о. неважно, в каком порядке описаны METAMOD плагины в файле plugins.ini. Post версия в случае блокирования оригинальной функции API, само собой, вызываться не будет ни для одного плагина.

    Ярким и в то же время неявным примером реализации Pre и Post версий функций API можно назвать систему событий в AMX/X. Все события, зарегистрированные с помощью register_message(), являются Pre версией API функции MessageBegin, которая вызывается при посылке сообщения. Поэтому такие сообщения можно реально заблокировать (используя интерфейсы в message.inc) и клиенты их не получат от сервера. Реализация Post версии функции API, как вы, может быть, уже догадались, заключается в старых добрых событиях, зарегистрированных с помощью register_event(). Многие программисты AMX/X в теле таких обработчиков событий ошибочно возвращают результат PLUGIN_HANDLED, стараясь заблокировать событие. Но это действие не имеет смысла, т.к. реальная функция API уже вызвана и клиенты получили свои сообщения. Более того, возвращение какого-либо значения в таком обработчике вообще не нужно.

    В заключеннии, предлагаю рассмотреть пример, как используются Pre и Post версии функций API с помощью интерфейсов модуля Fakemeta.

    TODO

    Источник: http://metamod.org/coding.html

    Категория: Учебники | Добавил: slogic (28.02.2007) | Автор: Simon Logic
    Просмотров: 3675 | Комментарии: 2 | Рейтинг: 4.5/2
    Всего комментариев: 1
    1 slogic  
    1
    Статья обновлена.

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Последние темы форума
  • plugin nextmap (1)
  • ПОМОГИТЕ ПЛИЗ! (1)
  • плагін який пришвидшує закачку файлів (0)
  • hl[1]сатчелы (4)
  • зомби на кроссе (0)

  • Наш опрос
    Какая версия AMX/X стоит на вашем сервере?
    Всего ответов: 450

    Друзья сайта
  • Официальный блог

  • AMX Mod X Russian Community © 2006-2024