Module: Lich::Common::GameLoader

Defined in:
documented/common/gameloader.rb

Overview

Loads game-specific and common modules based on the running game.

Call .load! to initialize the Lich runtime with all required dependencies for GemStone IV or DragonRealms.

Class Method Summary collapse

Class Method Details

.common_aftervoid

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Registers post-load hooks to initialize game settings.

Seeds a valid client record on the game server when the character has never logged in with the Wrayth client, ensuring properly formatted settingsInfo on future connections.



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'documented/common/gameloader.rb', line 98

def self.common_after
  require File.join(LIB_DIR, 'common', 'postload.rb')
  PostLoad.register("settings_init") do
    # When the game server sends malformed <settingsInfo  space not found ...> XML,
    # it means this character has never logged in with the Wrayth client.
    # Game.fix_invalid_settings_info patches the XML and sets the flag.
    # Here we send a dummy <db> command to seed a valid client record so
    # the server sends properly formatted settingsInfo on future connects.
    if GameBase::Game.settings_init_needed?
      Game._puts("<db><settings client='1.0.1.28'></settings>")
    end
  end
  PostLoad.watch!
end

.common_beforevoid

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Loads shared modules required by all games.



16
17
18
19
20
21
22
23
# File 'documented/common/gameloader.rb', line 16

def self.common_before
  require File.join(LIB_DIR, 'common', 'account.rb')
  require File.join(LIB_DIR, 'common', 'log.rb')
  require File.join(LIB_DIR, 'common', 'spell.rb')
  require File.join(LIB_DIR, 'util', 'util.rb')
  require File.join(LIB_DIR, 'util', 'textstripper.rb')
  require File.join(LIB_DIR, 'common', 'hmr.rb')
end

.dragon_realmsvoid

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Loads all modules and dependencies for DragonRealms.

Initializes character attributes, game-specific features (infomon, creatures, settings), and enables the infomon watcher.



78
79
80
81
82
83
84
85
86
87
88
# File 'documented/common/gameloader.rb', line 78

def self.dragon_realms
  self.common_before
  require File.join(LIB_DIR, 'common', 'map', 'map_dr.rb')
  require File.join(LIB_DIR, 'attributes', 'char.rb')
  require File.join(LIB_DIR, 'dragonrealms', 'dependency', 'settings_config.rb')
  require File.join(LIB_DIR, 'dragonrealms', 'drinfomon.rb')
  require File.join(LIB_DIR, 'dragonrealms', 'commons.rb')
  require File.join(LIB_DIR, 'dragonrealms', 'creature.rb')
  DRInfomon.watch!
  self.common_after
end

.gemstonevoid

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Loads all modules and dependencies for GemStone IV.

Initializes character attributes, game-specific features (bounties, society, combat tracking, etc.), and enables active spell and infomon watchers.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'documented/common/gameloader.rb', line 32

def self.gemstone
  self.common_before
  require File.join(LIB_DIR, 'gemstone', 'sk.rb')
  require File.join(LIB_DIR, 'common', 'map', 'map_gs.rb')
  require File.join(LIB_DIR, 'gemstone', 'effects.rb')
  require File.join(LIB_DIR, 'gemstone', 'bounty.rb')
  require File.join(LIB_DIR, 'gemstone', 'claim.rb')
  require File.join(LIB_DIR, 'gemstone', 'overwatch.rb')
  require File.join(LIB_DIR, 'gemstone', 'infomon.rb')
  require File.join(LIB_DIR, 'attributes', 'resources.rb')
  require File.join(LIB_DIR, 'attributes', 'stats.rb')
  require File.join(LIB_DIR, 'attributes', 'spells.rb')
  require File.join(LIB_DIR, 'attributes', 'skills.rb')
  require File.join(LIB_DIR, 'attributes', 'enhancive.rb')
  require File.join(LIB_DIR, 'gemstone', 'society.rb')
  require File.join(LIB_DIR, 'gemstone', 'infomon', 'status.rb')
  require File.join(LIB_DIR, 'gemstone', 'experience.rb')
  require File.join(LIB_DIR, 'attributes', 'spellsong.rb')
  require File.join(LIB_DIR, 'gemstone', 'infomon', 'activespell.rb')
  require File.join(LIB_DIR, 'gemstone', 'psms.rb')
  require File.join(LIB_DIR, 'attributes', 'char.rb')
  require File.join(LIB_DIR, 'gemstone', 'currency.rb')
  # require File.join(LIB_DIR, 'gemstone', 'character', 'disk.rb') # dup
  require File.join(LIB_DIR, 'gemstone', 'group.rb')
  require File.join(LIB_DIR, 'gemstone', 'critranks')
  require File.join(LIB_DIR, 'gemstone', 'injured')
  require File.join(LIB_DIR, 'gemstone', 'wounds.rb')
  require File.join(LIB_DIR, 'gemstone', 'scars.rb')
  require File.join(LIB_DIR, 'gemstone', 'gift.rb')
  # require File.join(LIB_DIR, 'gemstone', 'creature.rb') # combat tracker below loads this so not needed to preload
  require File.join(LIB_DIR, 'gemstone', 'combat', 'tracker.rb')
  require File.join(LIB_DIR, 'gemstone', 'readylist.rb')
  require File.join(LIB_DIR, 'gemstone', 'stowlist.rb')
  require File.join(LIB_DIR, 'gemstone', 'armaments.rb')
  ActiveSpell.watch!
  Infomon.watch!
  self.common_after
end

.load!void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Loads game-specific modules and initializes the Lich runtime.

Blocks until the game is identified from the XML data stream, then delegates to either .gemstone or .dragon_realms.



120
121
122
123
124
125
# File 'documented/common/gameloader.rb', line 120

def self.load!
  sleep 0.1 while XMLData.game.nil? or XMLData.game.empty?
  return self.dragon_realms if XMLData.game =~ /DR/
  return self.gemstone if XMLData.game =~ /GS/
  echo "could not load game specifics for %s" % XMLData.game
end