mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-19 06:11:32 +00:00
Turn onDeath the engine handler into OnDeath the regular event
This commit is contained in:
parent
8cf99822ed
commit
ad68b7e18b
8 changed files with 22 additions and 25 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)); }
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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" };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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**
|
||||||
|
|
||||||
|
|
|
@ -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``.
|
||||||
|
|
Loading…
Reference in a new issue