Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
7.7 kB · 268 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269Events======
.. include:: version.rst
Actor events------------
**DialogueResponse**
This event is sent to the player's local script when an actor triggers a greeting, topic response, service refusal, or plays a voice line.It returns a lua table with the following fields:- ``actor``: The actor that responded.- ``type``: The type of ``DialogueRecord`` that triggered the event, can be ``"greeting"``, ``"journal"``, ``"persuasion"``, ``"topic"``, or ``"voice"``.- ``recordId``: The ID of the ``DialogueRecord``.- ``infoId``: The ID of the ``DialogueRecordInfo`` in question.
.. code-block:: Lua
eventHandlers = { DialogueResponse = function(e) local topic = core.dialogue[e.type].records[e.recordId]; for _, info in pairs(topic.infos) do if info.id == e.infoId then print(e.actor, 'said', info.text) return end end end }
**Died**
This event is sent to an actor's local script when that actor dies.
.. code-block:: Lua
eventHandlers = { Died = function() print('Alas, ye hardly knew me!') end }
**StartAIPackage, RemoveAIPackages**
Any script can send to any actor (except player, for player will be ignored) events ``StartAIPackage`` and ``RemoveAIPackages``.The effect is equivalent to calling ``interfaces.AI.startPackage`` or ``interfaces.AI.removePackages`` in a local script on this actor.
Examples:
.. code-block:: Lua
actor:sendEvent('StartAIPackage', {type='Combat', target=self.object}) actor:sendEvent('RemoveAIPackages', 'Pursue')
**UseItem**
Any script can send global event ``UseItem`` with arguments ``object``, ``actor``, and optional boolean ``force``.The actor will use (e.g. equip or consume) the object. The object should be in the actor's inventory.
Example:
.. code-block:: Lua
core.sendGlobalEvent('UseItem', {object = potion, actor = player, force = true})
**ModifyStat**
Modify the corresponding stat.
.. code-block:: Lua
-- Consume 10 magicka actor:sendEvent('ModifyStat', {stat = 'magicka', amount = -10})
**AddVfx**
Calls the corresponding method in openmw.animation
.. code-block:: Lua
local eventParams = { model = 'vfx_default', options = { textureOverride = effect.particle, }, } actor:sendEvent('AddVfx', eventParams)
**PlaySound3d**
Calls the corresponding function in openw.core on the target. Will use core.sound.playSoundFile3d instead of core.sound.playSound3d if you put `file` instead of `sound` in the event data.
.. code-block:: Lua actor:sendEvent('PlaySound3d', {sound = 'Open Lock'})
**BreakInvisibility**
Forces the actor to lose all active invisibility effects.
**Unequip**
Any script can send ``Unequip`` events with the argument ``item`` or ``slot`` to any actor, to make that actor unequip an item.
The following two examples are equivalent, except the ``item`` variant is guaranteed to only unequip the specified item and won't unequip a different item if the actor's equipment changed during the same frame:
.. code-block:: Lua
local item = Actor.getEquipment(actor, Actor.EQUIPMENT_SLOT.CarriedLeft) if item then actor:sendEvent('Unequip', {item = item}) end
.. code-block:: Lua
actor:sendEvent('Unequip', {slot = Actor.EQUIPMENT_SLOT.CarriedLeft})
Combat events-------------
**Hit**
Any script can send ``Hit`` events with arguments described in the Combat interface to cause a hit to an actor
Example:
.. code-block:: Lua
-- See Combat#AttackInfo local attack = { attacker = self, weapon = Actor.getEquipment(self, Actor.EQUIPMENT_SLOT.CarriedRight), sourceType = I.Combat.ATTACK_SOURCE_TYPES.Melee, strength = 1, type = self.ATTACK_TYPE.Chop, damage = { health = 20, fatigue = 10, }, successful = true, } victim:sendEvent('Hit', attack)
Item events-----------
**ModifyItemCondition**
Any script can send ``ModifyItemCondition`` events to global to adjust the condition of an item.
Example:
.. code-block:: Lua
local item = Actor.getEquipment(actor, Actor.EQUIPMENT_SLOT.CarriedLeft) if item then -- Reduce condition by 1 -- Note that actor should be included, if applicable, to allow forcibly unequipping items whose condition is reduced to 0 core.sendGlobalEvent('ModifyItemCondition', {actor = self, item = item, amount = -1}) end
Spellcast events----------------
**ApplyMagicEffects**
Used by built-in scripts to apply effects on Lockables and other actors during spellcasting.
UI events---------
**ShowMessage**
If sent to a player, shows a message as if a call to ui.showMessage was made.
.. code-block:: Lua
player:sendEvent('ShowMessage', {message = 'Lorem ipsum', showInDialogue = false})
**UiModeChanged**
Every time UI mode is changed built-in scripts send to player the event ``UiModeChanged`` with arguments ``oldMode, ``newMode`` (same as ``I.UI.getMode()``)and ``arg`` (for example in the mode ``Book`` the argument is the book the player is reading).
.. code-block:: Lua
eventHandlers = { UiModeChanged = function(data) print('UiModeChanged from', data.oldMode , 'to', data.newMode, '('..tostring(data.arg)..')') end }
**AddUiMode**
Equivalent to ``I.UI.addMode``, but can be sent from another object or global script.
.. code-block:: Lua
player:sendEvent('AddUiMode', {mode = 'Book', target = book})
**SetUiMode**
Equivalent to ``I.UI.setMode``, but can be sent from another object or global script.
.. code-block:: Lua
player:sendEvent('SetUiMode', {mode = 'Book', target = book})
World events------------
Global events that just call the corresponding function in `openmw.world`.
.. code-block:: Lua
-- world.pause(tag) core.sendGlobalEvent('Pause', tag)
-- world.unpause(tag) core.sendGlobalEvent('Unpause', tag)
-- world.setGameTimeScale(scale) core.sendGlobalEvent('SetGameTimeScale', scale)
-- world.setSimulationTimeScale(scale) core.sendGlobalEvent('SetSimulationTimeScale', scale)
**SpawnVfx, PlaySound3d**
Calls the corresponding function in openw.core. Note that PlaySound3d will call core.sound.playSoundFile3d instead of core.sound.playSound3d if you put `file` instead of `sound` in the event data.
.. code-block:: Lua core.sendGlobalEvent('SpawnVfx', {position = hitPos, model = 'vfx_destructarea', options = {scale = 10}}) core.sendGlobalEvent('PlaySound3d', {sound = 'Open Lock', position = container.position})
**ConsumeItem**
Reduces stack size of an item by a given amount, removing the item completely if stack size is reduced to 0 or less.
.. code-block:: Lua
core.sendGlobalEvent('ConsumeItem', {item = foobar, amount = 1})
**Lock**
Lock a container or door
.. code-block:: Lua
core.sendGlobalEvent('Lock', {target = selected, magnitude = 50})
**Unlock**
Unlock a container or door
.. code-block:: Lua
core.sendGlobalEvent('Unlock', {target = selected})
**SetSaveState**
Sets whether or not an object will be written into the save. For script-spawned objects, setting this to false effectively means they are deleted after the game loads. For objects from content files, setting this to false restores them to their original state upon loading.Use this as a means to easily reset **individual** objects. To reset all objects in a given cell instead, use `cell:getAll` and call `object:setSaveState(false)` on each object.
.. code-block:: Lua
core.sendGlobalEvent('SetSaveState', { nearby.actors[#nearby.actors] = false })