Разработчик
Скриптер
Участник
Пользователь
- Сообщения
- 1,697
- Реакции
- 1,510
- Помог
- 25 раз(а)
Перевод: https://wiki.alliedmods.net/FakeMeta_General_Usage_(AMX_Mod_X)
Текущий и старый FakeMeta
Раньше FakeMeta был внутренним мини-метамодом внутри AMX Mod X, который был удален в версии 1.50 и теперь остался только модуль. Модуль представляет собой совершенно другую концепцию, которая расширяет возможности программирования Metamod HL1 для скриптов.
Описание
FakeMeta - чрезвычайно мощный модуль для AMX Mod X, который позволяет эффективно писать плагины на Pawn.
В отличие от Engine, FakeMeta не использует процессор, если ему не сказано что-то делать (кроме как существовать). По этой причине рекомендуется использовать FakeMeta вместо Engine. В Engine нет ничего, чего нет в FakeMeta, хотя некоторые функциональные возможности могут быть менее абстрактными, они все же достижимы и, как правило, более гибки.
Engine против FakeMeta
Сравнение между Engine и FakeMeta модулями:
Engine:
FakeMeta:
"return FMRES_IGNORED" будет рассмотрен в конце страницы.
Функциональность
FakeMeta также позволяет вам делать другие вещи, такие как получение private data (используя pev, set_pev / get_pdata_int, get_pdata_float, get_pdata_string, set_pdata_int, set_pdata_float, set_pdata_string), заставляя выполняться DLL-функции, а также вызывать функции движка.
Entvars
В FakeMeta легко читать entvars, если не все сделано правильно, то это может привести к проблемам (именно поэтому Engine используется чаще). Entvars - это переменные в структуре игрока, которая является основой для объекта.
Пример того, как получить броню из объекта в FakeMeta:
Использование функций DLL / движка
В DLL и движке есть функции, которые вызываются, когда происходят определенные события. Их можно принудительно вызвать через FakeMeta. Например:
При просмотре секций DLLFunc и EngFunc обращайтесь к концу строки, так как обычно там есть описание параметров, например edict_t *p_Entity или void. void обычно ссылается на отсутствие параметров, тогда как edict_t *p_Entity означает объект, поэтому первым параметром в функции будет объект, для которого вызывается функция.
Возвращаемые значения
В FakeMeta есть 4 возвращаемых значения:
Константы
Список констант и их использование можно найти на этой странице: https://dev-cs.ru/amxx/fakemeta_const/inc
Текущий и старый FakeMeta
Раньше FakeMeta был внутренним мини-метамодом внутри AMX Mod X, который был удален в версии 1.50 и теперь остался только модуль. Модуль представляет собой совершенно другую концепцию, которая расширяет возможности программирования Metamod HL1 для скриптов.
Описание
FakeMeta - чрезвычайно мощный модуль для AMX Mod X, который позволяет эффективно писать плагины на Pawn.
В отличие от Engine, FakeMeta не использует процессор, если ему не сказано что-то делать (кроме как существовать). По этой причине рекомендуется использовать FakeMeta вместо Engine. В Engine нет ничего, чего нет в FakeMeta, хотя некоторые функциональные возможности могут быть менее абстрактными, они все же достижимы и, как правило, более гибки.
Engine против FakeMeta
Сравнение между Engine и FakeMeta модулями:
Engine:
Код:
#include <amxmodx>
#include <engine>
public plugin_init()
{
register_plugin("Engine Test","1.0","Hawk552");
}
public client_PreThink(id)
{
// Тут бы вы вставили какой-то код
return;
}
Код:
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink,"PreThink");
}
public PreThink(id)
{
// Тут бы вы вставили какой-то код
return FMRES_IGNORED;
}
Функциональность
FakeMeta также позволяет вам делать другие вещи, такие как получение private data (используя pev, set_pev / get_pdata_int, get_pdata_float, get_pdata_string, set_pdata_int, set_pdata_float, set_pdata_string), заставляя выполняться DLL-функции, а также вызывать функции движка.
Entvars
В FakeMeta легко читать entvars, если не все сделано правильно, то это может привести к проблемам (именно поэтому Engine используется чаще). Entvars - это переменные в структуре игрока, которая является основой для объекта.
Пример того, как получить броню из объекта в FakeMeta:
Код:
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink, "PreThink");
}
public PreThink(id)
{
new value = pev(id,pev_armorvalue); // получаем броню у клиента/объекта
client_print(id,print_chat,"%i",value); // выводим значение брони клиенту
return FMRES_IGNORED;
}
Использование функций DLL / движка
В DLL и движке есть функции, которые вызываются, когда происходят определенные события. Их можно принудительно вызвать через FakeMeta. Например:
Код:
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("FakeMeta Test","1.0","Hawk552");
register_forward(FM_PlayerPreThink,"PreThink");
}
public PreThink(id)
{
dllfunc(DLLFunc_RegisterEncoders);
return FMRES_IGNORED;
}
Возвращаемые значения
В FakeMeta есть 4 возвращаемых значения:
- FMRES_HANDLED --> Что-то было сделано в этой функции, но в любом случае вызовется функция в DLL / движке.
- FMRES_SUPERCEDE --> Предотвратить вызов функции в DLL / движке.
- FMRES_IGNORED --> Вызов оригинальной функции.
- FMRES_OVERRIDE --> Вызов оригинальной функции, изменив возвращаемое значение.
Константы
Список констант и их использование можно найти на этой странице: https://dev-cs.ru/amxx/fakemeta_const/inc