mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-06 08:40:03 +00:00
Add support for specifying the option for events in the declaration (where applicable).
This commit is contained in:
@@ -30,19 +30,17 @@ class BankAction < DistancedAction
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Intercepts the object action event
|
# Intercepts the object action event
|
||||||
on :event, :object_action do |ctx, player, event|
|
on :event, :second_object_action do |ctx, player, event|
|
||||||
if (event.option == 2 and event.id == BANK_BOOTH_ID)
|
if event.id == BANK_BOOTH_ID
|
||||||
player.start_action(BankAction.new(player, event.position))
|
player.start_action(BankAction.new(player, event.position))
|
||||||
ctx.break_handler_chain
|
ctx.break_handler_chain
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
on :event, :npc_action do |ctx, player, event|
|
on :event, :second_npc_action do |ctx, player, event|
|
||||||
if (event.option == 2)
|
npc = World.world.npc_repository.get(event.index)
|
||||||
npc = World.world.npc_repository.get(event.index)
|
if BANKER_NPCS.include?(npc.id)
|
||||||
if (BANKER_NPCS.include?(npc.id))
|
player.start_action(BankAction.new(player, npc.position))
|
||||||
player.start_action(BankAction.new(player, npc.position))
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -40,7 +40,7 @@ end
|
|||||||
# and the command.
|
# and the command.
|
||||||
class ProcCommandListener < CommandListener
|
class ProcCommandListener < CommandListener
|
||||||
def initialize(rights, block)
|
def initialize(rights, block)
|
||||||
super rights
|
super(rights)
|
||||||
@block = block
|
@block = block
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -80,13 +80,16 @@ end
|
|||||||
# An EventHandler which executes a Proc object with three arguments: the chain
|
# An EventHandler which executes a Proc object with three arguments: the chain
|
||||||
# context, the player and the event.
|
# context, the player and the event.
|
||||||
class ProcEventHandler < EventHandler
|
class ProcEventHandler < EventHandler
|
||||||
def initialize(block)
|
def initialize(block, option)
|
||||||
super() # required (with brackets!), see http://jira.codehaus.org/browse/JRUBY-679
|
super() # required (with brackets!), see http://jira.codehaus.org/browse/JRUBY-679
|
||||||
@block = block
|
@block = block
|
||||||
|
@option = option
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle(ctx, player, event)
|
def handle(ctx, player, event)
|
||||||
@block.call(ctx, player, event)
|
if (@option == 0 || @option == event.option)
|
||||||
|
@block.call(ctx, player, event)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -113,7 +116,7 @@ end
|
|||||||
# behaviour is undefined (and most likely it'll be bad).
|
# behaviour is undefined (and most likely it'll be bad).
|
||||||
def schedule(*args, &block)
|
def schedule(*args, &block)
|
||||||
if block_given?
|
if block_given?
|
||||||
raise 'Invalid combination of arguments.' unless args.length == 1 or args.length == 2
|
raise 'Invalid combination of arguments.' unless (1..2).include?(args.length)
|
||||||
delay = args[0]
|
delay = args[0]
|
||||||
immediate = args.length == 2 ? args[1] : false
|
immediate = args.length == 2 ? args[1] : false
|
||||||
World.world.schedule(ProcScheduledTask.new(delay, immediate, block))
|
World.world.schedule(ProcScheduledTask.new(delay, immediate, block))
|
||||||
@@ -165,18 +168,28 @@ def on_button(args, proc)
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Defines an action to be taken upon an event.
|
# Defines an action to be taken upon an event.
|
||||||
# The event can either be a symbol with the lower case, underscored class name
|
# The event can either be a symbol with the lower-case underscored class name, or the class itself.
|
||||||
# or the class itself.
|
|
||||||
def on_event(args, proc)
|
def on_event(args, proc)
|
||||||
raise "event must have one argument" unless args.length == 1
|
raise 'Event must have one or two arguments.' unless (1..2).include?(args.length)
|
||||||
|
numbers = [ 'first', 'second', 'third', 'fourth', 'fifth' ]
|
||||||
|
event = args[0]; option = 0
|
||||||
|
|
||||||
|
numbers.each_index do |index|
|
||||||
|
number = numbers[index]
|
||||||
|
|
||||||
|
if event.to_s.start_with?(number)
|
||||||
|
option = index + 1
|
||||||
|
event = event[number.length + 1, event.length].to_sym
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
event = args[0]
|
|
||||||
if event.is_a?(Symbol)
|
if event.is_a?(Symbol)
|
||||||
class_name = event.to_s.camelize.concat('Event')
|
class_name = event.to_s.camelize.concat('Event')
|
||||||
event = Java::JavaClass.for_name("org.apollo.game.event.impl.#{class_name}")
|
event = Java::JavaClass.for_name("org.apollo.game.event.impl.#{class_name}")
|
||||||
end
|
end
|
||||||
|
|
||||||
$ctx.add_last_event_handler(event, ProcEventHandler.new(proc))
|
$ctx.add_last_event_handler(event, ProcEventHandler.new(proc, option))
|
||||||
end
|
end
|
||||||
|
|
||||||
# Defines an action to be taken upon a command.
|
# Defines an action to be taken upon a command.
|
||||||
|
|||||||
@@ -54,12 +54,10 @@ class ConsumeAction < Action
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Intercepts the first item option event and consumes the consumable, if necessary.
|
# Intercepts the first item option event and consumes the consumable, if necessary.
|
||||||
on :event, :item_option do |ctx, player, event|
|
on :event, :first_item_option do |ctx, player, event|
|
||||||
if (event.option == 1)
|
consumable = CONSUMABLES[event.id]
|
||||||
consumable = CONSUMABLES[event.id]
|
unless consumable == nil
|
||||||
unless consumable == nil
|
player.start_action(ConsumeAction.new(player, event.slot, consumable))
|
||||||
player.start_action(ConsumeAction.new(player, event.slot, consumable))
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -45,8 +45,8 @@ class DummyAction < DistancedAction
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
on :event, :object_action do |ctx, player, event|
|
on :event, :second_object_action do |ctx, player, event|
|
||||||
if (event.option == 2 and event.id == DUMMY_ID)
|
if (event.id == DUMMY_ID)
|
||||||
player.start_action(DummyAction.new(player, event.position))
|
player.start_action(DummyAction.new(player, event.position))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -47,21 +47,19 @@ on :event, :item_on_item do |ctx, player, event|
|
|||||||
end
|
end
|
||||||
|
|
||||||
# The ItemOptionEvent handler for all Herblore-related functions.
|
# The ItemOptionEvent handler for all Herblore-related functions.
|
||||||
on :event, :item_option do |ctx, player, event|
|
on :event, :first_item_option do |ctx, player, event|
|
||||||
if event.option == 1
|
id = event.id
|
||||||
id = event.id
|
method = HERBLORE_ITEM[id]
|
||||||
method = HERBLORE_ITEM[id]
|
|
||||||
|
|
||||||
if method != nil
|
if method != nil
|
||||||
method.invoke(player, id, event.slot)
|
method.invoke(player, id, event.slot)
|
||||||
ctx.break_handler_chain
|
ctx.break_handler_chain
|
||||||
end
|
end
|
||||||
method = DRINK_ITEM[id]
|
method = DRINK_ITEM[id]
|
||||||
|
|
||||||
if method != nil
|
if method != nil
|
||||||
method.invoke(player, id, event.slot)
|
method.invoke(player, id, event.slot)
|
||||||
ctx.break_handler_chain
|
ctx.break_handler_chain
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -141,22 +141,18 @@ class ProspectingAction < DistancedAction
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
on :event, :object_action do |ctx, mob, event|
|
on :event, :first_object_action do |ctx, mob, event|
|
||||||
if event.option == 1
|
ore = ORES[event.id]
|
||||||
ore = ORES[event.id]
|
if ore != nil
|
||||||
if ore != nil
|
mob.start_action(MiningAction.new(mob, event.position, ore))
|
||||||
mob.start_action(MiningAction.new(mob, event.position, ore))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
on :event, :object_action do |ctx, mob, event|
|
on :event, :second_object_action do |ctx, mob, event|
|
||||||
if event.option == 2
|
ore = ORES[event.id]
|
||||||
ore = ORES[event.id]
|
if ore != nil
|
||||||
if ore != nil
|
mob.start_action(ProspectingAction.new(mob, event.position, ore))
|
||||||
mob.start_action(ProspectingAction.new(mob, event.position, ore))
|
elsif EXPIRED_ORES[event.id] != nil
|
||||||
elsif EXPIRED_ORES[event.id] != nil
|
mob.start_action(ExpiredProspectingAction.new(mob, event.position))
|
||||||
mob.start_action(ExpiredProspectingAction.new(mob, event.position))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -43,13 +43,11 @@ class BuryBoneAction < Action
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Intercepts the first item option event,
|
# Intercepts the first item option event,
|
||||||
on :event, :item_option do |ctx, player, event|
|
on :event, :first_item_option do |ctx, player, event|
|
||||||
if event.option == 1
|
bone = BONES[event.id]
|
||||||
bone = BONES[event.id]
|
unless bone == nil
|
||||||
unless bone == nil
|
player.start_action(BuryBoneAction.new(player, event.slot, bone))
|
||||||
player.start_action(BuryBoneAction.new(player, event.slot, bone))
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -30,13 +30,11 @@ def append_talisman(hash)
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Intercepts the item option event.
|
# Intercepts the item option event.
|
||||||
on :event, :item_option do |ctx, player, event|
|
on :event, :fourth_item_option do |ctx, player, event|
|
||||||
if (event.option == 4)
|
talisman = TALISMANS[event.id]
|
||||||
talisman = TALISMANS[event.id]
|
if (talisman != nil)
|
||||||
if (talisman != nil)
|
player.send_message(talisman.get_message(player.position))
|
||||||
player.send_message(talisman.get_message(player.position))
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ on :login do |player|
|
|||||||
hat = player.equipment.get(EquipmentConstants::HAT)
|
hat = player.equipment.get(EquipmentConstants::HAT)
|
||||||
if hat != nil
|
if hat != nil
|
||||||
tiara = TIARAS_BY_ID[hat]
|
tiara = TIARAS_BY_ID[hat]
|
||||||
if(tiara != nil)
|
if (tiara != nil)
|
||||||
tiara.send_config
|
tiara.send_config
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -57,42 +57,36 @@ on :login do |player|
|
|||||||
end
|
end
|
||||||
|
|
||||||
#Accesses the altar with 1 click when wielding the correct tiara.
|
#Accesses the altar with 1 click when wielding the correct tiara.
|
||||||
on :event, :object_action do |ctx, player, event|
|
on :event, :second_object_action do |ctx, player, event|
|
||||||
if (event.option == 1)
|
object_id = event.id
|
||||||
object_id = event.id
|
tiara = TIARAS_BY_ALTAR[object_id]
|
||||||
tiara = TIARAS_BY_ALTAR[object_id]
|
if (tiara != nil)
|
||||||
if(tiara != nil)
|
hat = player.equipment.get(EquipmentConstants::HAT)
|
||||||
hat = player.equipment.get(EquipmentConstants::HAT)
|
if (hat != nil && hat.id == tiara.tiara_id)
|
||||||
if(hat != nil && hat.id == tiara.tiara_id)
|
altar = ENTRANCE_ALTARS[tiara.altar]
|
||||||
altar = ENTRANCE_ALTARS[tiara.altar]
|
if (altar != nil)
|
||||||
if(altar != nil)
|
player.start_action(TeleportAction.new(player, event.position, 2, altar.entrance_position))
|
||||||
player.start_action(TeleportAction.new(player, event.position, 2, altar.entrance_position))
|
end
|
||||||
end
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
#Equip tiara
|
#Equip tiara
|
||||||
on :event, :item_option do |ctx, player, event|
|
on :event, :second_item_option, item_option do |ctx, player, event|
|
||||||
if (event.option == 2)
|
tiara = TIARAS_BY_ID[event.id]
|
||||||
tiara = TIARAS_BY_ID[event.id]
|
if (tiara != nil)
|
||||||
if(tiara != nil)
|
tiara.send_config(player)
|
||||||
tiara.send_config(player)
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
#Unequip tiara
|
#Unequip tiara
|
||||||
on :event, :item_action do |ctx, player, event|
|
on :event, :first_item_action do |ctx, player, event|
|
||||||
if (event.option == 1)
|
tiara = TIARAS_BY_ID[event.id]
|
||||||
tiara = TIARAS_BY_ID[event.id]
|
if (tiara != nil)
|
||||||
if(tiara != nil)
|
send_empty_config(player)
|
||||||
send_empty_config(player)
|
ctx.break_handler_chain
|
||||||
ctx.break_handler_chain
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user