class RuneRb::World::World
Attributes
door_manager[R]
event_manager[R]
loader[R]
npcs[R]
object_manager[R]
players[R]
region_manager[R]
shop_manager[R]
work_thread[R]
Public Class Methods
new()
click to toggle source
# File app/world/world.rb, line 20 def initialize @players = [] @npcs = [] @region_manager = RuneRb::Model::RegionManager.new @event_manager = RuneRb::Engine::EventManager.new @loader = YAMLFileLoader.new @task_thread = RuneRb::Misc::ThreadPool.new(1) @work_thread = RuneRb::Misc::ThreadPool.new(1) @shop_manager = RuneRb::Shops::ShopManager.new @object_manager = RuneRb::Objects::ObjectManager.new @door_manager = RuneRb::Doors::DoorManager.new end
Public Instance Methods
add_to_login_queue(session)
click to toggle source
# File app/world/world.rb, line 33 def add_to_login_queue(session) submit_work { lr = @loader.check_login(session) response = lr.response # New login, so try loading profile if response == 2 && !@loader.load_profile(lr.player) response = 13 end unless response == 2 bldr = RuneRb::Net::PacketBuilder.new(-1, :RAW) bldr.add_byte response session.connection.send_data bldr.to_packet session.connection.close_connection true else session.player = lr.player submit_task { register lr.player } end } end
register(player)
click to toggle source
# File app/world/world.rb, line 57 def register(player) # Register player.index = (@players << player).index(player) + 1 # Send login response bldr = RuneRb::Net::PacketBuilder.new(-1, :RAW) rights = RuneRb::World::RIGHTS.index(player.rights) bldr.add_byte 2 bldr.add_byte (rights > 2 ? 2 : rights) bldr.add_byte 0 player.connection.send_data bldr.to_packet HOOKS[:player_login].each {|k, v| begin v.call(player) rescue Exception => e PLUGIN_LOG.error "Unable to run login hook #{k}" PLUGIN_LOG.error e end } player.io.send_login end
register_npc(npc)
click to toggle source
# File app/world/world.rb, line 103 def register_npc(npc) npc.index = (@npcs << npc).index(npc) + 1 end
submit_event(event)
click to toggle source
# File app/world/world.rb, line 115 def submit_event(event) @event_manager.submit event end
submit_task(&task)
click to toggle source
# File app/world/world.rb, line 107 def submit_task(&task) @task_thread.execute &task end
submit_work(&job)
click to toggle source
# File app/world/world.rb, line 111 def submit_work(&job) @work_thread.execute &job end
unregister(player, single=true)
click to toggle source
# File app/world/world.rb, line 83 def unregister(player, single=true) if @players.include?(player) HOOKS[:player_logout].each {|k, v| begin v.call(player) rescue Exception => e PLUGIN_LOG.error "Unable to run logout hook #{k}" PLUGIN_LOG.error e end } player.destroy player.connection.close_connection_after_writing @players.delete(player) if single submit_work { @loader.save_profile(player) } end end