- Joined
- Mar 19, 2008
- Messages
- 3,141
Wurst inventory event package, equivalent of my vJass InventoryEvent.
Exposes two inventory events for public use:
- EVENT_ITEM_INVENTORY.MOVE
- EVENT_ITEM_INVENTORY.USE
Demo code:
Exposes two inventory events for public use:
- EVENT_ITEM_INVENTORY.MOVE
- EVENT_ITEM_INVENTORY.USE
Wurst:
/*
* InventoryEvent v1.0.1.5
* by Bannar
*
* For intuitive inventory event handling.
*/
package InventoryEvent
import RegisterEvents
import Orders
tuple eventInfo(unit u, item itm, int slotFrom, int slotTo)
var eventState = eventInfo(null, null, -1, -1)
constant eventMovedTrigger = CreateTrigger()
constant eventUsedTrigger = CreateTrigger()
public enum EVENT_ITEM_INVENTORY
MOVE
USE
/** Returns unit which manipulated event item. */
public function getInventoryManipulatingUnit() returns unit
return eventState.u
/** Returns manupilated event item. */
public function getInventoryManipulatedItem() returns item
return eventState.itm
/** Returns slot index of manipulated item from which it was moved or used. */
public function getInventorySlotFrom() returns int
return eventState.slotFrom
/** Returns slot index of manipulated item to which it was moved. */
public function getInventorySlotTo() returns int
return eventState.slotTo
/** Returns item which manipulated item switched position with if any. */
public function getInventorySwappedItem() returns item
return eventState.u.itemInSlot(eventState.slotTo)
public function getInventoryEventTrigger(EVENT_ITEM_INVENTORY whichEvent) returns trigger
trigger result = null
switch whichEvent
case EVENT_ITEM_INVENTORY.MOVE
result = eventMovedTrigger
case EVENT_ITEM_INVENTORY.USE
result = eventUsedTrigger
return result
public function registerInventoryEvent(EVENT_ITEM_INVENTORY whichEvent, code func)
switch whichEvent
case EVENT_ITEM_INVENTORY.MOVE
eventMovedTrigger.addCondition(Condition(func))
case EVENT_ITEM_INVENTORY.USE
eventUsedTrigger.addCondition(Condition(func))
function fireEvent(trigger evt, eventInfo currState)
var prevState = eventState
eventState = currState
evt.evaluate()
eventState = prevState
function onItemOrder()
var order = GetIssuedOrderId()
var u = GetTriggerUnit()
if order >= SpecialOrders.itemdrag00 and order <= SpecialOrders.itemdrag05
var itm = GetOrderTargetItem()
var slotFrom = u.getItemSlot(itm)
var slotTo = order - SpecialOrders.itemdrag00
fireEvent(eventMovedTrigger, eventInfo(u, itm, slotFrom, slotTo))
else
var slotFrom = order - SpecialOrders.itemuse00
var itm = u.itemInSlot(slotFrom)
fireEvent(eventUsedTrigger, eventInfo(u, itm, slotFrom, -1))
function onAnyOrder()
var order = GetIssuedOrderId()
if order >= SpecialOrders.itemdrag00 and order <= SpecialOrders.itemuse05
onItemOrder()
init
// MOVED is order of type TARGET_ORDER yet USED can be anyone of them
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_ISSUED_ORDER, () -> onAnyOrder())
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, () -> onAnyOrder())
registerPlayerUnitEvent(EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, () -> onAnyOrder())
Wurst:
package InventoryEventDemo
import InventoryEvent
import ClosureTimers
function onInventoryMove()
var u = getInventoryManipulatingUnit()
var itm = getInventoryManipulatedItem()
var itmSwapped = getInventorySwappedItem()
var slotFrom = getInventorySlotFrom()
var slotTo = getInventorySlotTo()
string s
if itmSwapped != null
s = u.getName() + " swapped " + itm.getName() + "[" + slotFrom.toString() + "] with "
s += itmSwapped.getName() + "[" + slotTo.toString() + "]"
else
s = u.getName() + " moved " + itm.getName() + "[" + slotFrom.toString() + "] to slot " + slotTo.toString()
print(s)
function onInventoryUse()
var u = getInventoryManipulatingUnit()
var itm = getInventoryManipulatedItem()
var slotFrom = getInventorySlotFrom()
var s = u.getName() + " used " + itm.getName() + "[" + slotFrom.toString() + "]"
print(s)
public function initInventoryEventDemo()
registerInventoryEvent(EVENT_ITEM_INVENTORY.MOVE, () -> onInventoryMove())
registerInventoryEvent(EVENT_ITEM_INVENTORY.USE, () -> onInventoryUse())
doAfter(1.) ->
real x = -200
real y = -200
CreateItem('bspd', x, y) // Boots
CreateItem('crys', x, y) // Crystall Ball
CreateItem('infs', x, y) // Inferno
CreateItem('ratc', x, y) // Claws of Attack
Last edited: