#include "lua/lua_event.hpp" #include #include #include #include #include "lua/lua_global.hpp" #include "monster.h" #include "player.h" #include "utils/log.hpp" namespace devilution { namespace lua { template void CallLuaEvent(std::string_view name, Args &&...args) { sol::table *events = GetLuaEvents(); if (events == nullptr) { return; } const auto trigger = events->traverse_get>(name, "trigger"); if (!trigger.has_value() || !trigger->is()) { LogError("events.{}.trigger is not a function", name); return; } const sol::protected_function fn = trigger->as(); SafeCallResult(fn(std::forward(args)...), /*optional=*/true); } void MonsterDataLoaded() { CallLuaEvent("MonsterDataLoaded"); } void UniqueMonsterDataLoaded() { CallLuaEvent("UniqueMonsterDataLoaded"); } void ItemDataLoaded() { CallLuaEvent("ItemDataLoaded"); } void UniqueItemDataLoaded() { CallLuaEvent("UniqueItemDataLoaded"); } void StoreOpened(std::string_view name) { CallLuaEvent("StoreOpened", name); } void OnMonsterTakeDamage(const Monster *monster, int damage, int damageType) { CallLuaEvent("OnMonsterTakeDamage", monster, damage, damageType); } void OnPlayerGainExperience(const Player *player, uint32_t exp) { CallLuaEvent("OnPlayerGainExperience", player, exp); } void OnPlayerTakeDamage(const Player *player, int damage, int damageType) { CallLuaEvent("OnPlayerTakeDamage", player, damage, damageType); } void LoadModsComplete() { CallLuaEvent("LoadModsComplete"); } void GameDrawComplete() { CallLuaEvent("GameDrawComplete"); } void GameStart() { CallLuaEvent("GameStart"); } } // namespace lua } // namespace devilution