diff --git a/data/plugins/areas/plugin.xml b/data/plugins/areas/plugin.xml index 2c18bb32..0e9c4b1b 100644 --- a/data/plugins/areas/plugin.xml +++ b/data/plugins/areas/plugin.xml @@ -10,6 +10,7 @@ + diff --git a/data/plugins/areas/wilderness.rb b/data/plugins/areas/wilderness.rb new file mode 100644 index 00000000..27fcbd54 --- /dev/null +++ b/data/plugins/areas/wilderness.rb @@ -0,0 +1,52 @@ +require 'java' + +java_import 'org.apollo.game.model.entity.Player' +java_import 'org.apollo.game.message.impl.OpenOverlayMessage' +java_import 'org.apollo.game.message.impl.SetWidgetTextMessage' + + + +private + +MIN_X = 2945 +MIN_Y = 3522 +MAX_X = 3390 +MAX_Y = 3972 + +OVERLAY_INTERFACE_ID = 197 +LEVEL_STRING_ID = 199 + +declare_attribute(:wilderness_level, 0, :transient) + +# Determines the wilderness level for the specified player's position +def wilderness_level(player) + return (player.position.y - (MIN_Y - 1) / 8).ceil +end + +area_action :wilderness_level do + + on_entry do |player| + player.wilderness_level = wilderness_level(player) + player.interface_set.open_overlay(OVERLAY_INTERFACE_ID) + player.send(SetWidgetTextMessage.new(LEVEL_STRING_ID, "Level: #{player.wilderness_level}")) + show_action(ATTACK_ACTION) + end + + while_in do |player| + current = player.wilderness_level + updated = wilderness_level(player) + if (current != updated) + player.wilderness_level = updated + player.send(SetWidgetTextMessage.new(LEVEL_STRING_ID, "Level: #{player.wilderness_level}")) + end + end + + on_exit do |player| + player.wilderness_level = 0 + player.interface_set.close() # TODO: Will this cause issues with other potentially open interfaces? + hide_action(ATTACK_ACTION) + end + +end + +area :name => :wilderness, :coordinates => MIN_X, MIN_Y, MAX_X, MAX_Y, 0, => :actions => :wilderness_level \ No newline at end of file