Move Events
Move Events
Move Events are triggered by movement-related actions: stepping on tiles, equipping items, and adding/removing items from tiles.
Event Types
| Type | Callback | Description |
|---|---|---|
stepin | onStepIn | Creature steps onto tile |
stepout | onStepOut | Creature steps off tile |
equip | onEquip | Player equips item |
deequip | onDeEquip | Player unequips item |
additem | onAddItem | Item added to tile |
removeitem | onRemoveItem | Item removed from tile |
Creating a Move Event
local myEvent = MoveEvent()
function myEvent.onStepIn(creature, item, position, fromPosition) return trueend
myEvent:type("stepin")myEvent:id(1234)myEvent:register()Methods
type(eventType)
Sets the event type: "stepin", "stepout", "equip", "deequip", "additem", "removeitem"
id(itemId, ...)
Registers for item type IDs.
aid(actionId, ...)
Registers for action IDs.
uid(uniqueId, ...)
Registers for unique IDs.
position(pos, ...)
Registers for specific positions.
slot(slotName)
Sets the equipment slot for equip/deequip events.
Slots: "head", "necklace", "backpack", "armor", "right-hand", "left-hand", "legs", "feet", "ring", "ammo"
level(level)
Sets required player level.
magicLevel(level)
Sets required magic level.
premium(isPremium)
Sets premium requirement.
vocation(vocName, showInDescription)
Adds vocation requirement.
tileItem(isTileItem)
For additem/removeitem: whether to trigger on tile items.
register()
Registers the event.
Callback Signatures
onStepIn(creature, item, position, fromPosition)
function myEvent.onStepIn(creature, item, position, fromPosition) return true -- Allow stependonStepOut(creature, item, position, fromPosition)
function myEvent.onStepOut(creature, item, position, fromPosition) return trueendonEquip(player, item, slot, isCheck)
function myEvent.onEquip(player, item, slot, isCheck) return true -- Allow equipendNote: isCheck is true when checking if item can be equipped.
onDeEquip(player, item, slot)
function myEvent.onDeEquip(player, item, slot) return true -- Allow deequipendonAddItem(moveitem, tileitem, position)
function myEvent.onAddItem(moveitem, tileitem, position) return trueendonRemoveItem(moveitem, tileitem, position)
function myEvent.onRemoveItem(moveitem, tileitem, position) return trueendExamples
Teleport Tile
local teleportTile = MoveEvent()
function teleportTile.onStepIn(creature, item, position, fromPosition) if not creature:isPlayer() then return true end
local destination = Position(1000, 1000, 7) creature:teleportTo(destination) destination:sendMagicEffect(CONST_ME_TELEPORT)
return trueend
teleportTile:type("stepin")teleportTile:aid(5000) -- Action ID for teleport tilesteleportTile:register()Level Door
local levelDoor = MoveEvent()
function levelDoor.onStepIn(creature, item, position, fromPosition) if not creature:isPlayer() then return false end
local requiredLevel = item:getActionId() - 1000 -- AID 1100 = level 100
if creature:getLevel() < requiredLevel then creature:sendTextMessage(MESSAGE_STATUS_SMALL, "You need level " .. requiredLevel .. " to pass.") creature:teleportTo(fromPosition, true) return false end
return trueend
levelDoor:type("stepin")levelDoor:aid(1001, 1050, 1100, 1150, 1200) -- Level doorslevelDoor:register()Equipment with Level Requirement
local fireArmor = MoveEvent()
function fireArmor.onEquip(player, item, slot, isCheck) if player:getLevel() < 50 then if not isCheck then player:sendCancelMessage("You need level 50 to wear this armor.") end return false end
if not isCheck then player:sendTextMessage(MESSAGE_INFO_DESCR, "Fire protection activated!") end
return trueend
function fireArmor.onDeEquip(player, item, slot) player:sendTextMessage(MESSAGE_INFO_DESCR, "Fire protection deactivated!") return trueend
fireArmor:type("equip")fireArmor:id(2494) -- Fire armorfireArmor:level(50)fireArmor:slot("armor")fireArmor:register()Vocation-Restricted Equipment
local mageRobe = MoveEvent()
function mageRobe.onEquip(player, item, slot, isCheck) return trueend
mageRobe:type("equip")mageRobe:id(2656)mageRobe:slot("armor")mageRobe:level(20)mageRobe:vocation("sorcerer", true)mageRobe:vocation("master sorcerer", true)mageRobe:vocation("druid", true)mageRobe:vocation("elder druid", true)mageRobe:register()Damage Tile
local fireTile = MoveEvent()
function fireTile.onStepIn(creature, item, position, fromPosition) if creature:isPlayer() then local damage = math.random(10, 50) doTargetCombat(nil, creature, COMBAT_FIREDAMAGE, -damage, -damage, CONST_ME_HITBYFIRE) end return trueend
fireTile:type("stepin")fireTile:id(1487, 1488, 1489) -- Fire field IDsfireTile:register()Return Values
| Return | Equip/DeEquip | StepIn/StepOut |
|---|---|---|
true | Allow action | Allow step |
false | Deny action | Push back creature |
File Location
data/scripts/movements/