1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-19 06:41:36 +00:00

Turn onDeath the engine handler into OnDeath the regular event

This commit is contained in:
Evil Eye 2023-12-04 17:32:38 +01:00
parent 8cf99822ed
commit ad68b7e18b
8 changed files with 22 additions and 25 deletions

View file

@ -86,16 +86,6 @@ namespace MWLua
void operator()(const OnNewExterior& event) const { mGlobalScripts.onNewExterior(GCell{ &event.mCell }); } void operator()(const OnNewExterior& event) const { mGlobalScripts.onNewExterior(GCell{ &event.mCell }); }
void operator()(const OnDeath& event) const
{
MWWorld::Ptr actor = getPtr(event.mActor);
if (!actor.isEmpty())
{
if (auto* scripts = getLocalScripts(actor))
scripts->onDeath();
}
}
private: private:
MWWorld::Ptr getPtr(ESM::RefNum id) const MWWorld::Ptr getPtr(ESM::RefNum id) const
{ {

View file

@ -51,12 +51,7 @@ namespace MWLua
{ {
MWWorld::CellStore& mCell; MWWorld::CellStore& mCell;
}; };
struct OnDeath using Event = std::variant<OnActive, OnInactive, OnConsume, OnActivate, OnUseItem, OnNewExterior, OnTeleported>;
{
ESM::RefNum mActor;
};
using Event = std::variant<OnActive, OnInactive, OnConsume, OnActivate, OnUseItem, OnNewExterior, OnTeleported,
OnDeath>;
void clear() { mQueue.clear(); } void clear() { mQueue.clear(); }
void addToQueue(Event e) { mQueue.push_back(std::move(e)); } void addToQueue(Event e) { mQueue.push_back(std::move(e)); }

View file

@ -170,7 +170,7 @@ namespace MWLua
{ {
this->addPackage("openmw.self", sol::make_object(lua->sol(), &mData)); this->addPackage("openmw.self", sol::make_object(lua->sol(), &mData));
registerEngineHandlers({ &mOnActiveHandlers, &mOnInactiveHandlers, &mOnConsumeHandlers, &mOnActivatedHandlers, registerEngineHandlers({ &mOnActiveHandlers, &mOnInactiveHandlers, &mOnConsumeHandlers, &mOnActivatedHandlers,
&mOnTeleportedHandlers, &mOnDeathHandlers }); &mOnTeleportedHandlers });
} }
void LocalScripts::setActive(bool active) void LocalScripts::setActive(bool active)

View file

@ -71,7 +71,6 @@ namespace MWLua
void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); } void onConsume(const LObject& consumable) { callEngineHandlers(mOnConsumeHandlers, consumable); }
void onActivated(const LObject& actor) { callEngineHandlers(mOnActivatedHandlers, actor); } void onActivated(const LObject& actor) { callEngineHandlers(mOnActivatedHandlers, actor); }
void onTeleported() { callEngineHandlers(mOnTeleportedHandlers); } void onTeleported() { callEngineHandlers(mOnTeleportedHandlers); }
void onDeath() { callEngineHandlers(mOnDeathHandlers); }
void applyStatsCache(); void applyStatsCache();
@ -84,7 +83,6 @@ namespace MWLua
EngineHandlerList mOnConsumeHandlers{ "onConsume" }; EngineHandlerList mOnConsumeHandlers{ "onConsume" };
EngineHandlerList mOnActivatedHandlers{ "onActivated" }; EngineHandlerList mOnActivatedHandlers{ "onActivated" };
EngineHandlerList mOnTeleportedHandlers{ "onTeleported" }; EngineHandlerList mOnTeleportedHandlers{ "onTeleported" };
EngineHandlerList mOnDeathHandlers{ "onDeath" };
}; };
} }

View file

@ -344,6 +344,13 @@ namespace MWLua
playerScripts->uiModeChanged(argId, false); playerScripts->uiModeChanged(argId, false);
} }
void LuaManager::actorDied(const MWWorld::Ptr& actor)
{
if (actor.isEmpty())
return;
mLuaEvents.addLocalEvent({ getId(actor), "OnDeath", {} });
}
void LuaManager::useItem(const MWWorld::Ptr& object, const MWWorld::Ptr& actor, bool force) void LuaManager::useItem(const MWWorld::Ptr& object, const MWWorld::Ptr& actor, bool force)
{ {
MWBase::Environment::get().getWorldModel()->registerPtr(object); MWBase::Environment::get().getWorldModel()->registerPtr(object);

View file

@ -82,13 +82,10 @@ namespace MWLua
{ {
mEngineEvents.addToQueue(EngineEvents::OnNewExterior{ cell }); mEngineEvents.addToQueue(EngineEvents::OnNewExterior{ cell });
} }
void actorDied(const MWWorld::Ptr& actor) override
{
mEngineEvents.addToQueue(EngineEvents::OnDeath{ getId(actor) });
}
void objectTeleported(const MWWorld::Ptr& ptr) override; void objectTeleported(const MWWorld::Ptr& ptr) override;
void questUpdated(const ESM::RefId& questId, int stage) override; void questUpdated(const ESM::RefId& questId, int stage) override;
void uiModeChanged(const MWWorld::Ptr& arg) override; void uiModeChanged(const MWWorld::Ptr& arg) override;
void actorDied(const MWWorld::Ptr& actor) override;
MWBase::LuaManager::ActorControls* getActorControls(const MWWorld::Ptr&) const override; MWBase::LuaManager::ActorControls* getActorControls(const MWWorld::Ptr&) const override;

View file

@ -79,8 +79,6 @@ Engine handler is a function defined by a script, that can be called by the engi
- | Called on an actor when they consume an item (e.g. a potion). - | Called on an actor when they consume an item (e.g. a potion).
| Similarly to onActivated, the item has already been removed | Similarly to onActivated, the item has already been removed
| from the actor's inventory, and the count was set to zero. | from the actor's inventory, and the count was set to zero.
* - onDeath()
- Called when the actor dies. Note that actors that start out dead are ignored.
**Only for local scripts attached to a player** **Only for local scripts attached to a player**

View file

@ -6,6 +6,18 @@ Built-in events
Actor events Actor events
------------ ------------
**OnDeath**
This event is sent to an actor's local script when that actor dies.
.. code-block:: Lua
eventHandlers = {
OnDeath = function()
print('Alas, ye hardly knew me!')
end
}
**StartAIPackage, RemoveAIPackages** **StartAIPackage, RemoveAIPackages**
Any script can send to any actor (except player, for player will be ignored) events ``StartAIPackage`` and ``RemoveAIPackages``. Any script can send to any actor (except player, for player will be ignored) events ``StartAIPackage`` and ``RemoveAIPackages``.