アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors) の内部で使用され、Game_Party クラス($game_party)からも参照されます。
- A
- B
- C
- D
- E
- F
- G
- I
- L
- M
- N
- O
- P
- R
- S
- T
- U
- W
[R] | action_input_index | |
[R] | character_index | |
[R] | character_name | |
[R] | class_id | |
[R] | face_index | |
[R] | face_name | |
[R] | last_skill | |
[R] | level | |
[RW] | name | 公開インスタンス変数 |
[RW] | nickname |
オブジェクト初期化
Source: show
# File Game_Actor.rb, line 25 def initialize(actor_id) super() setup(actor_id) @last_skill = Game_BaseItem.new end
アクターオブジェクト取得
Source: show
# File Game_Actor.rb, line 53 def actor $data_actors[@actor_id] end
防具オブジェクトの配列取得
Source: show
# File Game_Actor.rb, line 182 def armors @equips.select {|item| item.is_armor? }.collect {|item| item.object } end
通常攻撃 アニメーション ID の取得
Source: show
# File Game_Actor.rb, line 428 def atk_animation_id1 if dual_wield? return weapons[0].animation_id if weapons[0] return weapons[1] ? 0 : 1 else return weapons[0] ? weapons[0].animation_id : 1 end end
通常攻撃 アニメーション ID の取得(二刀流:武器2)
Source: show
# File Game_Actor.rb, line 440 def atk_animation_id2 if dual_wield? return weapons[1] ? weapons[1].animation_id : 0 else return 0 end end
攻撃時属性の取得
Source: show
# File Game_Actor.rb, line 397 def atk_elements set = super set |= [1] if weapons.compact.empty? # 素手:物理属性 return set end
床ダメージの基本値を取得
Source: show
# File Game_Actor.rb, line 726 def basic_floor_damage return 10 end
バトルメンバー判定
Source: show
# File Game_Actor.rb, line 362 def battle_member? $game_party.battle_members.include?(self) end
職業の変更
keep_exp : 経験値を引き継ぐ
Source: show
# File Game_Actor.rb, line 563 def change_class(class_id, keep_exp = false) @exp[class_id] = exp if keep_exp @class_id = class_id change_exp(@exp[@class_id] || 0, false) refresh end
装備の変更
slot_id : 装備スロット ID item : 武器/防具(nil なら装備解除)
Source: show
# File Game_Actor.rb, line 208 def change_equip(slot_id, item) return unless trade_item_with_party(item, equips[slot_id]) return if item && equip_slots[slot_id] != item.etype_id @equips[slot_id].object = item refresh end
装備の変更(ID で指定)
slot_id : 装備スロット ID item_id : 武器/防具 ID
Source: show
# File Game_Actor.rb, line 243 def change_equip_by_id(slot_id, item_id) if equip_slots[slot_id] == 0 change_equip(slot_id, $data_weapons[item_id]) else change_equip(slot_id, $data_armors[item_id]) end end
経験値の変更
show : レベルアップ表示フラグ
Source: show
# File Game_Actor.rb, line 452 def change_exp(exp, show) @exp[@class_id] = [exp, 0].max last_level = @level last_skills = skills level_up while !max_level? && self.exp >= next_level_exp level_down while self.exp < current_level_exp display_level_up(skills - last_skills) if show && @level > last_level refresh end
レベルの変更
show : レベルアップ表示フラグ
Source: show
# File Game_Actor.rb, line 523 def change_level(level, show) level = [[level, max_level].min, 1].max change_exp(exp_for_level(level), show) end
床効果判定
Source: show
# File Game_Actor.rb, line 710 def check_floor_effect execute_floor_damage if $game_player.on_damage_floor? end
職業オブジェクト取得
Source: show
# File Game_Actor.rb, line 369 def class $data_classes[@class_id] end
戦闘行動のクリア
Source: show
# File Game_Actor.rb, line 747 def clear_actions super @action_input_index = 0 end
装備を全て外す
Source: show
# File Game_Actor.rb, line 276 def clear_equipments equip_slots.size.times do |i| change_equip(i, nil) if equip_change_ok?(i) end end
現在のレベルの最低経験値を取得
Source: show
# File Game_Actor.rb, line 91 def current_level_exp exp_for_level(@level) end
説明の取得
Source: show
# File Game_Actor.rb, line 555 def description actor.description end
装備の破棄
item : 破棄する武器/防具
Source: show
# File Game_Actor.rb, line 255 def discard_equip(item) slot_id = equips.index(item) @equips[slot_id].object = nil if slot_id end
レベルアップメッセージの表示
new_skills : 新しく習得したスキルの配列
Source: show
# File Game_Actor.rb, line 490 def display_level_up(new_skills) $game_message.new_page $game_message.add(sprintf(Vocab::LevelUp, @name, Vocab::level, @level)) new_skills.each do |skill| $game_message.add(sprintf(Vocab::ObtainSkill, skill.name)) end end
装備タイプからスロット ID に変換(空きを優先)
Source: show
# File Game_Actor.rb, line 159 def empty_slot(etype_id) list = slot_list(etype_id) list.find {|i| @equips[i].is_nil? } || list[0] end
装備変更の可能判定
slot_id : 装備スロット ID
Source: show
# File Game_Actor.rb, line 197 def equip_change_ok?(slot_id) return false if equip_type_fixed?(equip_slots[slot_id]) return false if equip_type_sealed?(equip_slots[slot_id]) return true end
装備スロットの配列を取得
Source: show
# File Game_Actor.rb, line 167 def equip_slots return [0,0,2,3,4] if dual_wield? # 二刀流 return [0,1,2,3,4] # 通常 end
装備品オブジェクトの配列取得
Source: show
# File Game_Actor.rb, line 189 def equips @equips.collect {|item| item.object } end
床ダメージの処理
Source: show
# File Game_Actor.rb, line 717 def execute_floor_damage damage = (basic_floor_damage * fdr).to_i self.hp -= [damage, max_floor_damage].min perform_map_damage_effect if damage > 0 end
指定レベルに上がるのに必要な累計経験値の取得
Source: show
# File Game_Actor.rb, line 70 def exp_for_level(level) self.class.exp_for_level(level) end
特徴を保持する全オブジェクトの配列取得
Source: show
# File Game_Actor.rb, line 390 def feature_objects super + [actor] + [self.class] + equips.compact end
最終的な経験獲得率の計算
Source: show
# File Game_Actor.rb, line 508 def final_exp_rate exr * (battle_member? ? 1 : reserve_members_exp_rate) end
装備の強制変更
slot_id : 装備スロット ID item : 武器/防具(nil なら装備解除)
Source: show
# File Game_Actor.rb, line 220 def force_change_equip(slot_id, item) @equips[slot_id].object = item release_unequippable_items(false) refresh end
スキルを忘れる
Source: show
# File Game_Actor.rb, line 541 def forget_skill(skill_id) @skills.delete(skill_id) end
味方ユニットを取得
Source: show
# File Game_Actor.rb, line 334 def friends_unit $game_party end
経験値の獲得(経験獲得率を考慮)
Source: show
# File Game_Actor.rb, line 501 def gain_exp(exp) change_exp(self.exp + (exp * final_exp_rate).to_i, true) end
インデックス取得
Source: show
# File Game_Actor.rb, line 355 def index $game_party.members.index(self) end
エディタで設定されたインデックスを装備タイプ ID に変換
Source: show
# File Game_Actor.rb, line 143 def index_to_etype_id(index) index == 1 && dual_wield? ? 0 : index end
装備品の初期化
equips : 初期装備の配列
Source: show
# File Game_Actor.rb, line 130 def init_equips(equips) @equips = Array.new(equip_slots.size) { Game_BaseItem.new } equips.each_with_index do |item_id, i| etype_id = index_to_etype_id(i) slot_id = empty_slot(etype_id) @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id end refresh end
経験値の初期化
Source: show
# File Game_Actor.rb, line 77 def init_exp @exp[@class_id] = current_level_exp end
グラフィックの初期化
Source: show
# File Game_Actor.rb, line 60 def init_graphics @character_name = actor.character_name @character_index = actor.character_index @face_name = actor.face_name @face_index = actor.face_index end
スキルの初期化
Source: show
# File Game_Actor.rb, line 119 def init_skills @skills = [] self.class.learnings.each do |learning| learn_skill(learning.skill_id) if learning.level <= @level end end
入力中の戦闘行動を取得
Source: show
# File Game_Actor.rb, line 755 def input @actions[@action_input_index] end
スキルを覚える
Source: show
# File Game_Actor.rb, line 531 def learn_skill(skill_id) unless skill_learn?($data_skills[skill_id]) @skills.push(skill_id) @skills.sort! end end
レベルアップ
Source: show
# File Game_Actor.rb, line 472 def level_up @level += 1 self.class.learnings.each do |learning| learn_skill(learning.skill_id) if learning.level == @level end end
自動戦闘用の行動候補リストを作成
Source: show
# File Game_Actor.rb, line 609 def make_action_list list = [] list.push(Game_Action.new(self).set_attack.evaluate) usable_skills.each do |skill| list.push(Game_Action.new(self).set_skill(skill.id).evaluate) end list end
戦闘行動の作成
Source: show
# File Game_Actor.rb, line 639 def make_actions super if auto_battle? make_auto_battle_actions elsif confusion? make_confusion_actions end end
自動戦闘時の戦闘行動を作成
Source: show
# File Game_Actor.rb, line 621 def make_auto_battle_actions @actions.size.times do |i| @actions[i] = make_action_list.max {|action| action.value } end end
混乱時の戦闘行動を作成
Source: show
# File Game_Actor.rb, line 630 def make_confusion_actions @actions.size.times do |i| @actions[i].set_confusion end end
床ダメージの最大値を取得
Source: show
# File Game_Actor.rb, line 733 def max_floor_damage $data_system.opt_floor_death ? hp : [hp - 1, 0].max end
最大レベル
Source: show
# File Game_Actor.rb, line 105 def max_level actor.max_level end
最大レベル判定
Source: show
# File Game_Actor.rb, line 112 def max_level? @level >= max_level end
次のコマンド入力へ
Source: show
# File Game_Actor.rb, line 762 def next_command return false if @action_input_index >= @actions.size - 1 @action_input_index += 1 return true end
次のレベルの経験値を取得
Source: show
# File Game_Actor.rb, line 98 def next_level_exp exp_for_level(@level + 1) end
プレイヤーが 1 歩動いたときの処理
Source: show
# File Game_Actor.rb, line 651 def on_player_walk @result.clear check_floor_effect if $game_player.normal_walk? turn_end_on_map states.each {|state| update_state_steps(state) } show_added_states show_removed_states end end
敵ユニットを取得
Source: show
# File Game_Actor.rb, line 341 def opponents_unit $game_troop end
最強装備
Source: show
# File Game_Actor.rb, line 285 def optimize_equipments clear_equipments equip_slots.size.times do |i| next if !equip_change_ok?(i) items = $game_party.equip_items.select do |item| item.etype_id == equip_slots[i] && equippable?(item) && item.performance >= 0 end change_equip(i, items.max_by {|item| item.performance }) end end
通常能力値の基本値取得
Source: show
# File Game_Actor.rb, line 414 def param_base(param_id) self.class.params[param_id, @level] end
通常能力値の最大値取得
Source: show
# File Game_Actor.rb, line 406 def param_max(param_id) return 9999 if param_id == 0 # MHP return super end
通常能力値の加算値取得
Source: show
# File Game_Actor.rb, line 421 def param_plus(param_id) equips.compact.inject(super) {|r, item| r += item.params[param_id] } end
コラプス効果の実行
Source: show
# File Game_Actor.rb, line 599 def perform_collapse_effect if $game_party.in_battle @sprite_effect_type = :collapse Sound.play_actor_collapse end end
ダメージ効果の実行
Source: show
# File Game_Actor.rb, line 590 def perform_damage_effect $game_troop.screen.start_shake(5, 5, 10) @sprite_effect_type = :blink Sound.play_actor_damage end
マップ上でのダメージ効果の実行
Source: show
# File Game_Actor.rb, line 740 def perform_map_damage_effect $game_map.screen.start_flash_for_damage end
前のコマンド入力へ
Source: show
# File Game_Actor.rb, line 771 def prior_command return false if @action_input_index <= 0 @action_input_index -= 1 return true end
リフレッシュ
Source: show
# File Game_Actor.rb, line 319 def refresh release_unequippable_items super end
装備できない装備品を外す
item_gain : 外した装備品をパーティに戻す
Source: show
# File Game_Actor.rb, line 264 def release_unequippable_items(item_gain = true) @equips.each_with_index do |item, i| if !equippable?(item.object) || item.object.etype_id != equip_slots[i] trade_item_with_party(nil, item.object) if item_gain item.object = nil end end end
控えメンバーの経験獲得率を取得
Source: show
# File Game_Actor.rb, line 515 def reserve_members_exp_rate $data_system.opt_extra_exp ? 1 : 0 end
グラフィックの変更
Source: show
# File Game_Actor.rb, line 573 def set_graphic(character_name, character_index, face_name, face_index) @character_name = character_name @character_index = character_index @face_name = face_name @face_index = face_index end
セットアップ
Source: show
# File Game_Actor.rb, line 34 def setup(actor_id) @actor_id = actor_id @name = actor.name @nickname = actor.nickname init_graphics @class_id = actor.class_id @level = actor.initial_level @exp = {} @equips = [] init_exp init_skills init_equips(actor.equips) clear_param_plus recover_all end
付加されたステートの表示
Source: show
# File Game_Actor.rb, line 675 def show_added_states @result.added_state_objects.each do |state| $game_message.add(name + state.message1) unless state.message1.empty? end end
解除されたステートの表示
Source: show
# File Game_Actor.rb, line 684 def show_removed_states @result.removed_state_objects.each do |state| $game_message.add(name + state.message4) unless state.message4.empty? end end
スキルの習得済み判定
Source: show
# File Game_Actor.rb, line 548 def skill_learn?(skill) skill.is_a?(RPG::Skill) && @skills.include?(skill.id) end
スキルの必要武器を装備しているか
Source: show
# File Game_Actor.rb, line 300 def skill_wtype_ok?(skill) wtype_id1 = skill.required_wtype_id1 wtype_id2 = skill.required_wtype_id2 return true if wtype_id1 == 0 && wtype_id2 == 0 return true if wtype_id1 > 0 && wtype_equipped?(wtype_id1) return true if wtype_id2 > 0 && wtype_equipped?(wtype_id2) return false end
スキルオブジェクトの配列取得
Source: show
# File Game_Actor.rb, line 376 def skills (@skills | added_skills).sort.collect {|id| $data_skills[id] } end
装備タイプからスロット ID のリストに変換
Source: show
# File Game_Actor.rb, line 150 def slot_list(etype_id) result = [] equip_slots.each_with_index {|e, i| result.push(i) if e == etype_id } result end
何歩歩いたときに戦闘中の 1 ターン相当とみなすか
Source: show
# File Game_Actor.rb, line 693 def steps_for_turn return 20 end
パーティとアイテムを交換する
new_item : パーティから取り出すアイテム old_item : パーティに返すアイテム
Source: show
# File Game_Actor.rb, line 231 def trade_item_with_party(new_item, old_item) return false if new_item && !$game_party.has_item?(new_item) $game_party.gain_item(old_item, 1) $game_party.lose_item(new_item, 1) return true end
マップ画面上でのターン終了処理
Source: show
# File Game_Actor.rb, line 700 def turn_end_on_map if $game_party.steps % steps_for_turn == 0 on_turn_end perform_map_damage_effect if @result.hp_damage > 0 end end
ステートの歩数カウントを更新
Source: show
# File Game_Actor.rb, line 665 def update_state_steps(state) if state.remove_by_walking @state_steps[state.id] -= 1 if @state_steps[state.id] > 0 remove_state(state.id) if @state_steps[state.id] == 0 end end
現在使用できるスキルの配列取得
Source: show
# File Game_Actor.rb, line 383 def usable_skills skills.select {|skill| usable?(skill) } end
スプライトを使うか?
Source: show
# File Game_Actor.rb, line 583 def use_sprite? return false end