敵グループおよび戦闘に関するデータを扱うクラスです。バトルイベントの処理も 行います。このクラスのインスタンスは $game_troop で参照されます。
- C
- E
- G
- I
- L
- M
- N
- S
- T
- U
LETTER_TABLE_HALF | = | [' A',' B',' C',' D',' E',' F',' G',' H',' I',' J', ' K',' L',' M',' N',' O',' P',' Q',' R',' S',' T', ' U',' V',' W',' X',' Y',' Z'] |
敵キャラ名の後ろにつける文字の表 |
||
LETTER_TABLE_FULL | = | ['A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z'] |
[R] | event_flags | |
[R] | interpreter | |
[R] | name_counts | |
[R] | screen | 公開インスタンス変数 |
[R] | turn_count |
オブジェクト初期化
Source: show
# File Game_Troop.rb, line 30 def initialize super @screen = Game_Screen.new @interpreter = Game_Interpreter.new @event_flags = {} clear end
クリア
Source: show
# File Game_Troop.rb, line 48 def clear @screen.clear @interpreter.clear @event_flags.clear @enemies = [] @turn_count = 0 @names_count = {} end
バトルイベント(ページ)の条件合致判定
Source: show
# File Game_Troop.rb, line 138 def conditions_met?(page) c = page.condition if !c.turn_ending && !c.turn_valid && !c.enemy_valid && !c.actor_valid && !c.switch_valid return false # 条件未設定…実行しない end if @event_flags[page] return false # 実行済み end if c.turn_ending # ターン終了時 return false unless BattleManager.turn_end? end if c.turn_valid # ターン数 n = @turn_count a = c.turn_a b = c.turn_b return false if (b == 0 && n != a) return false if (b > 0 && (n < 1 || n < a || n % b != a % b)) end if c.enemy_valid # 敵キャラ enemy = $game_troop.members[c.enemy_index] return false if enemy == nil return false if enemy.hp_rate * 100 > c.enemy_hp end if c.actor_valid # アクター actor = $game_actors[c.actor_id] return false if actor == nil return false if actor.hp_rate * 100 > c.actor_hp end if c.switch_valid # スイッチ return false if !$game_switches[c.switch_id] end return true # 条件合致 end
敵キャラ名の配列取得
戦闘開始時の表示用。重複は除去する。
Source: show
# File Game_Troop.rb, line 125 def enemy_names names = [] members.each do |enemy| next unless enemy.alive? next if names.include?(enemy.original_name) names.push(enemy.original_name) end names end
経験値の合計計算
Source: show
# File Game_Troop.rb, line 198 def exp_total dead_members.inject(0) {|r, enemy| r += enemy.exp } end
お金の倍率を取得
Source: show
# File Game_Troop.rb, line 212 def gold_rate $game_party.gold_double? ? 2 : 1 end
お金の合計計算
Source: show
# File Game_Troop.rb, line 205 def gold_total dead_members.inject(0) {|r, enemy| r += enemy.gold } * gold_rate end
ターンの増加
Source: show
# File Game_Troop.rb, line 190 def increase_turn troop.pages.each {|page| @event_flags[page] = false if page.span == 1 } @turn_count += 1 end
画面の色調を初期化
Source: show
# File Game_Troop.rb, line 86 def init_screen_tone @screen.start_tone_change($game_map.screen.tone, 0) if $game_map end
敵キャラ名の後ろにつける文字の表を取得
Source: show
# File Game_Troop.rb, line 110 def letter_table $game_system.japanese? ? LETTER_TABLE_FULL : LETTER_TABLE_HALF end
ドロップアイテムの配列作成
Source: show
# File Game_Troop.rb, line 219 def make_drop_items dead_members.inject([]) {|r, enemy| r += enemy.make_drop_items } end
同名の敵キャラに ABC などの文字を付加
Source: show
# File Game_Troop.rb, line 93 def make_unique_names members.each do |enemy| next unless enemy.alive? next unless enemy.letter.empty? n = @names_count[enemy.original_name] || 0 enemy.letter = letter_table[n % letter_table.size] @names_count[enemy.original_name] = n + 1 end members.each do |enemy| n = @names_count[enemy.original_name] || 0 enemy.plural = true if n >= 2 end end
セットアップ
Source: show
# File Game_Troop.rb, line 67 def setup(troop_id) clear @troop_id = troop_id @enemies = [] troop.members.each do |member| next unless $data_enemies[member.enemy_id] enemy = Game_Enemy.new(@enemies.size, member.enemy_id) enemy.hide if member.hidden enemy.screen_x = member.x enemy.screen_y = member.y @enemies.push(enemy) end init_screen_tone make_unique_names end
バトルイベントのセットアップ
Source: show
# File Game_Troop.rb, line 176 def setup_battle_event return if @interpreter.running? return if @interpreter.setup_reserved_common_event troop.pages.each do |page| next unless conditions_met?(page) @interpreter.setup(page.list) @event_flags[page] = true if page.span <= 1 return end end