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