Skip to content

Latest commit

 

History

History
952 lines (630 loc) · 25.3 KB

File metadata and controls

952 lines (630 loc) · 25.3 KB

Available Hooks — Хуки FLHook

🌐 Язык: ✅ 🇷🇺 Русский (текущий) | 🇺🇸 English

Введение

Если тебе не хватает какого-то хука для конкретной функции FLServer, исторически это предлагалось обсуждать на форуме FLHook Plugin Version board на the-starport.net.

Ниже приведён список доступных хуков текущей версии FLHook.

Note

Если для функции не указан calling convention, то по умолчанию используется:

__cdecl

Базовые системные функции плагина

Get_PluginReturnCode

PLUGIN_RETURNCODE *Get_PluginReturnCode()

Назначение

Управляет тем, что FLHook должен делать после вызова твоего плагина.

Важно

Important

Эту функцию не нужно регистрировать как hook.


Get_PluginInfo

list<PLUGIN_INFO>* Get_PluginInfo()

Назначение

Возвращает информацию о плагине и заменяет старую регистрацию через .ini.

Важно

Important

Эту функцию не нужно регистрировать как hook.


Plugin_Communication_CallBack

void Plugin_Communication_CallBack(PLUGIN_MESSAGE msg, void* data)

Назначение

Callback для межплагинного взаимодействия.


FLServer Hooks

Это хуки, привязанные к событиям и внутренним функциям самого FLServer.


1. Жизненный цикл сервера

Shutdown

void __stdcall HkIServerImpl::Shutdown(void)

Вызывается при завершении работы FLServer.


Startup

bool __stdcall HkIServerImpl::Startup(struct SStartupInfo const &p1)

Вызывается при запуске FLServer, до загрузки персонажей и игровых данных.

AFTER-вариант

bool __stdcall HkIServerImpl::Startup_AFTER(struct SStartupInfo const &p1)

Вызывается уже после полной загрузки данных.


Update

int __stdcall HkIServerImpl::Update()

Вызывается на каждом тике FLServer.

Использование

Идеальное место для:

  • таймеров
  • периодических проверок
  • логики, работающей постоянно

2. Игрок: подключение, логин, выбор персонажа

OnConnect

void __stdcall HkIServerImpl::OnConnect(unsigned int)
void __stdcall HkIServerImpl::OnConnect_AFTER(unsigned int)

Вызывается при подключении клиента к серверу.


Login

void __stdcall HkIServerImpl::Login(struct SLoginInfo const &li, unsigned int iClientID)

Особенность

Important

Плагины вызываются после этой функции.

Если тебе нужно отрабатывать до логина, используй:

OnConnect

Важно

До Login многие player-related команды вроде HkKick ещё не работают.

AFTER-вариант

void __stdcall HkIServerImpl::Login_AFTER(struct SLoginInfo const &li, unsigned int iClientID)

Вызывается после LoadUserSettings, то есть настройки персонажа уже загружены.


CharacterSelect

void __stdcall HkIServerImpl::CharacterSelect(struct CHARACTER_ID const & cId, unsigned int iClientID)
void __stdcall HkIServerImpl::CharacterSelect_AFTER(struct CHARACTER_ID const & cId, unsigned int iClientID)

Вызывается при выборе персонажа.


CreateNewCharacter

void __stdcall HkIServerImpl::CreateNewCharacter(struct SCreateCharacterInfo const & scci, unsigned int iClientID)
void __stdcall HkIServerImpl::CreateNewCharacter_AFTER(struct SCreateCharacterInfo const & scci, unsigned int iClientID)

Создание нового персонажа.


DestroyCharacter

void __stdcall HkIServerImpl::DestroyCharacter(struct CHARACTER_ID const &cId, unsigned int iClientID)
void __stdcall HkIServerImpl::DestroyCharacter_AFTER(struct CHARACTER_ID const &cId, unsigned int iClientID)

Удаление персонажа.


DisConnect

void __stdcall HkIServerImpl::DisConnect(unsigned int iClientID, enum EFLConnection p2)
void __stdcall HkIServerImpl::DisConnect_AFTER(unsigned int iClientID, enum EFLConnection p2)

Вызывается при отключении игрока.


3. Игрок: запуск, док, переходы, системы

PlayerLaunch

void __stdcall HkIServerImpl::PlayerLaunch(unsigned int iShip, unsigned int iClientID)
void __stdcall HkIServerImpl::PlayerLaunch_AFTER(unsigned int iShip, unsigned int iClientID)

Запуск игрока в космос / вылет с базы.


LaunchComplete

void __stdcall HkIServerImpl::LaunchComplete(unsigned int iBaseID, unsigned int iShip)
void __stdcall HkIServerImpl::LaunchComplete_AFTER(unsigned int iBaseID, unsigned int iShip)

Вызывается после завершения запуска.


BaseEnter / BaseExit

void __stdcall HkIServerImpl::BaseEnter(unsigned int iBaseID, unsigned int iClientID)
void __stdcall HkIServerImpl::BaseEnter_AFTER(unsigned int iBaseID, unsigned int iClientID)

void __stdcall HkIServerImpl::BaseExit(unsigned int iBaseID, unsigned int iClientID)
void __stdcall HkIServerImpl::BaseExit_AFTER(unsigned int iBaseID, unsigned int iClientID)

Вход / выход с базы.


JumpInComplete

void __stdcall HkIServerImpl::JumpInComplete(unsigned int iSystemID, unsigned int iShip)
void __stdcall HkIServerImpl::JumpInComplete_AFTER(unsigned int iSystemID, unsigned int iShip)

Завершение прыжка в систему.


SystemSwitchOutComplete

void __stdcall HkIServerImpl::SystemSwitchOutComplete(unsigned int iShip, unsigned int iClientID)
void __stdcall HkIServerImpl::SystemSwitchOutComplete_AFTER(unsigned int iShip, unsigned int iClientID)

Выход из системы.


LaunchPosHook

bool __stdcall LaunchPosHook(uint iSpaceID, struct CEqObj &p1, Vector &p2, Matrix &p3, int iDock)

Назначение

Позволяет изменить позицию появления корабля при запуске.

Использование

Очень полезен для:

  • mobile docking
  • кастомного undock
  • телепортации
  • proxy base логики

4. Чат и пользовательские команды

SubmitChat

void __stdcall HkIServerImpl::SubmitChat(CHAT_ID, unsigned long, void const *, CHAT_ID, int)
void __stdcall HkIServerImpl::SubmitChat_AFTER(CHAT_ID, unsigned long, void const *, CHAT_ID, int)

Отправка сообщений в чат.

Использование

Подходит для:

  • кастомных чат-команд
  • логирования чата
  • фильтрации сообщений
  • антиспама

HkCb_SendChat

void __stdcall HkCb_SendChat(uint iClientID, uint iTo, uint iSize, void *pRDL)

Хук на отправку чат-пакета.


UserCmd_Process

bool UserCmd_Process(uint iClientID, const wstring &wscCmd)

Назначение

Позволяет вставлять свои пользовательские команды без ковыряния SubmitChat.

Важно

Если команда обработана, функция должна вернуть:

true

UserCmd_Help

void UserCmd_Help(uint iClientID, const wstring &wscParam)

Вызывается при использовании команды помощи.

Используется для вывода собственных пользовательских команд через:

PrintUserCmdText

5. Админ-команды и консоль

ExecuteCommandString_Callback

bool ExecuteCommandString_Callback(CCmds* classptr, const wstring &wscCmdStr)

Назначение

Добавление собственных админ-команд.

Важно

Если команда обработана, рекомендуется:

  • вернуть true
  • выставить appropriate returncode (NOFUNCTIONCALL, если нужно)

CmdHelp_Callback

void CmdHelp_Callback(CCmds* classptr)

Вызывается при админской команде help.

Используется для отображения добавленных админ-команд.


6. Бой, урон, оружие, уничтожение

FireWeapon

void __stdcall HkIServerImpl::FireWeapon(unsigned int iClientID, struct XFireWeaponInfo const &wpn)
void __stdcall HkIServerImpl::FireWeapon_AFTER(unsigned int iClientID, struct XFireWeaponInfo const &wpn)

Выстрел оружием.


ShipDestroyed

void __stdcall ShipDestroyed(DamageList *_dmg, DWORD *exs, uint iKill)

Уничтожение корабля.

Использование

Один из самых полезных боевых хуков.


AllowPlayerDamage

bool AllowPlayerDamage(uint iClientID, uint iClientIDTarget)

Назначение

Позволяет контролировать урон между игроками без грязного вмешательства в damage hooks.


HkCb_AddDmgEntry

void __stdcall HkCb_AddDmgEntry(DamageList *dmgList, unsigned short p1, float p2, enum DamageEntry::SubObjFate p3)
void __stdcall HkCb_AddDmgEntry_AFTER(DamageList *dmgList, unsigned short p1, float p2, enum DamageEntry::SubObjFate p3)

Работа с записью урона.


HkCB_MissileTorpHit

int __stdcall HkCB_MissileTorpHit(char *ECX, char *p1, DamageList *dmg)

Хук на попадание ракет / торпед.


HkCb_GeneralDmg

void __stdcall HkCb_GeneralDmg(char *szECX)

Общая обработка урона.


7. Торговля, деньги, предметы, рынок

ReqChangeCash / ReqSetCash

void __stdcall HkIServerImpl::ReqChangeCash(int p1, unsigned int iClientID)
void __stdcall HkIServerImpl::ReqChangeCash_AFTER(int p1, unsigned int iClientID)

void __stdcall HkIServerImpl::ReqSetCash(int p1, unsigned int iClientID)
void __stdcall HkIServerImpl::ReqSetCash_AFTER(int p1, unsigned int iClientID)

Работа с изменением денег.


GFGoodBuy / GFGoodSell

void __stdcall HkIServerImpl::GFGoodBuy(struct SGFGoodBuyInfo const &gbi, unsigned int iClientID)
void __stdcall HkIServerImpl::GFGoodBuy_AFTER(struct SGFGoodBuyInfo const &gbi, unsigned int iClientID)

void __stdcall HkIServerImpl::GFGoodSell(struct SGFGoodSellInfo const &gsi, unsigned int iClientID)
void __stdcall HkIServerImpl::GFGoodSell_AFTER(struct SGFGoodSellInfo const &gsi, unsigned int iClientID)

Покупка и продажа товаров.


ReqAddItem / ReqModifyItem / ReqRemoveItem

void __stdcall HkIServerImpl::ReqAddItem(...)
void __stdcall HkIServerImpl::ReqModifyItem(...)
void __stdcall HkIServerImpl::ReqRemoveItem(...)

Работа с инвентарём и предметами.


ReqEquipment

void __stdcall HkIServerImpl::ReqEquipment(class EquipDescList const &edl, unsigned int iClientID)
void __stdcall HkIServerImpl::ReqEquipment_AFTER(class EquipDescList const &edl, unsigned int iClientID)

Изменение экипировки.


JettisonCargo / TractorObjects / SPScanCargo

void __stdcall HkIServerImpl::JettisonCargo(...)
void __stdcall HkIServerImpl::TractorObjects(...)
void __stdcall HkIServerImpl::SPScanCargo(...)

Работа с грузом и объектами в космосе.


8. Торговля между игроками

InitiateTrade / AcceptTrade / TerminateTrade

void __stdcall HkIServerImpl::InitiateTrade(...)
void __stdcall HkIServerImpl::AcceptTrade(...)
void __stdcall HkIServerImpl::TerminateTrade(...)

Все основные хуки торговли между игроками.


AddTradeEquip / DelTradeEquip / SetTradeMoney / TradeResponse / StopTradeRequest

Полный контроль над логикой трейда.


9. Движение, управление кораблём, действия игрока

ActivateEquip / ActivateCruise / ActivateThrusters

void __stdcall HkIServerImpl::ActivateEquip(...)
void __stdcall HkIServerImpl::ActivateCruise(...)
void __stdcall HkIServerImpl::ActivateThrusters(...)

Активация оборудования, круиза и форсажа.


SetManeuver / SetTarget / SetWeaponGroup

void __stdcall HkIServerImpl::SetManeuver(...)
void __stdcall HkIServerImpl::SetTarget(...)
void __stdcall HkIServerImpl::SetWeaponGroup(...)

Манёвры, цели, группы оружия.


SPRequestUseItem

void __stdcall HkIServerImpl::SPRequestUseItem(struct SSPUseItem const &p1, unsigned int iClientID)

Использование предметов / оборудования.


10. Навигация, миссии, интерфейс, система

RequestBestPath / RequestGroupPositions / RequestPlayerStats / RequestRankLevel

Запросы клиента на навигацию, позиции группы, статистику и ранг.


InterfaceItemUsed / SetInterfaceState / SetVisitedState

Работа с UI и состоянием интерфейса.


MissionResponse / AbortMission / Hail / BaseInfoRequest / LocationInfoRequest

Работа с миссиями, взаимодействием и данными по локациям.


11. Майнинг, астероиды, объекты

MineAsteroid

void __stdcall HkIServerImpl::MineAsteroid(...)
void __stdcall HkIServerImpl::MineAsteroid_AFTER(...)

Хук для контроля майнинга.


SPMunitionCollision / SPObjCollision / SPObjUpdate

void __stdcall HkIServerImpl::SPMunitionCollision(...)
void __stdcall HkIServerImpl::SPObjCollision(...)
void __stdcall HkIServerImpl::SPObjUpdate(...)

Коллизии, обновления объектов, столкновения.


12. Трейдлейны, докинг, физика и ядро сервера

GoTradelane / StopTradelane

void __stdcall HkIServerImpl::GoTradelane(...)
void __stdcall HkIServerImpl::StopTradelane(...)

Контроль использования trade lane.


HkCb_Dock_Call

int __cdecl HkCb_Dock_Call(unsigned int const &uShipID, unsigned int const &uSpaceID, int p3, enum DOCK_HOST_RESPONSE p4)

Назначение

Один из самых мощных хуков.

Вызывается при любом docking-поведении:

  • игроки
  • NPC
  • вход в очередь
  • попытка стыковки

Использование

Идеален для:

  • mobile docking
  • custom docking logic
  • ограничений стыковки
  • проверки расстояния / условий

HkCb_Update_Time

void __cdecl HkCb_Update_Time(double dInterval)
void __cdecl HkCb_Update_Time_AFTER(double dInterval)

Хук на обновление глобального времени.

Оригинальная функция:

Timing::UpdateGlobalTime(dInterval)

HkCb_Elapse_Time

void __stdcall HkCb_Elapse_Time(float p1)
void __stdcall HkCb_Elapse_Time_AFTER(float p1)

Главный рабочий цикл:

  • NPC
  • физика
  • игровые процессы

Оригинальная функция:

Server.ElapseTime(p1)

FLHook Callbacks

Это уже не прямые хуки FLServer, а callback-и самого FLHook.


HkTimerCheckKick

void HkTimerCheckKick()

Вызывается каждую секунду.

Использование

Идеален для:

  • таймеров
  • delayed actions
  • проверок состояний
  • cleanup

SendDeathMsg

void SendDeathMsg(const wstring &wscMsg, uint iSystemID, uint iClientIDVictim, uint iClientIDKiller)

Позволяет изменить механику отправки death messages.


ClearClientInfo

void ClearClientInfo(uint iClientID)

Вызывается при подключении нового игрока.

Использование

Сбрасывай здесь:

  • player-specific state
  • кэш
  • временные структуры
  • свои plugin-data по клиенту

LoadSettings

void LoadSettings()

Вызывается:

  • при старте FLHook / FLServer
  • при rehash

Использование

Здесь нужно:

  • загружать .ini
  • обновлять конфиги
  • пересчитывать ID / кэш / настройки

BaseDestroyed

void BaseDestroyed(uint iObject, uint iClientIDBy)

Вызывается при уничтожении докабельной базы.

  • iObject — SpaceID базы
  • iClientIDBy — кто уничтожил

Практически самые полезные хуки

Если говорить честно, то 90% серверной логики обычно делается вот на этих хуках:


Для механик игроков

  • PlayerLaunch
  • BaseEnter
  • BaseExit
  • CharacterSelect
  • Login
  • DisConnect

Для команд

  • UserCmd_Process
  • ExecuteCommandString_Callback
  • CmdHelp_Callback

Для боёв / урона

  • ShipDestroyed
  • AllowPlayerDamage
  • FireWeapon
  • HkCb_AddDmgEntry

Для экономики / предметов

  • GFGoodBuy
  • GFGoodSell
  • ReqEquipment
  • ReqChangeCash
  • ReqModifyItem

Для движения / особой логики

  • Dock_Call
  • LaunchPosHook
  • MineAsteroid
  • HkTimerCheckKick