Poulet Lv.1
Age : 31 Inscrit le : 06/03/2012 Messages : 8
| Sujet: [script] Game_Actor problème en rajoutant un perso dans l'équipe Lun 12 Mar 2012 - 20:55 | |
| Salut, mon problème est tout simplement que quand je veux rajouter un perso dans mon équipe j'ai cette erreur. regarder la fin de la vidéo : j'ai les scripts par défaut et j'ai juste rajouté quelques scripts pour que le système de combat soit à la FF XIII que j'ai pris sur ce topic https://rpg-maker-vx.bbactif.com/t8548-systeme-de-combat-ff-xiiivoici le script de Game_Actor - Code:
-
#============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :optima # オプティマ attr_accessor :role # 現在のロール attr_accessor :usable_role # 利用可能ロール attr_accessor :last_target_enemy # 前回攻撃した敵インデックス attr_accessor :actions # リーダー用行動配列 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias optima_game_actor_initialize initialize def initialize(actor_id) optima_game_actor_initialize(actor_id) @optima = Table.new(OPTIMA::OPTIMA_MAX) @atb_level = OPTIMA::ATB_SLOT @usable_role = OPTIMA::ACTORS_USABLE_ROLE[actor_id] for i in 0...OPTIMA::OPTIMA_MAX # 利用可能ロールの先頭を初期ロールに設定 if @usable_role[i] @role = i for j in 0...OPTIMA::OPTIMA_MAX do @optima[j] = @role end break end end end #-------------------------------------------------------------------------- # ● スプライトを使うか? #-------------------------------------------------------------------------- def use_sprite? return true end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh super @last_target_enemy = -1 @actions = [] end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update # リーダーなら自動戦闘無効化 if OPTIMA::USE_COMMAND_INPUT and $game_party.members[0].id == @actor_id return if @wait_count > 0 if @action.valid? # 行動が決定している if @action.guard? # ガードなら自分がターゲット target = self else if @action.for_friend? target = @action.friends_unit.members[@action.target_index] else target = @action.opponents_unit.members[@action.target_index] end if target.exist? == @action.for_dead_friend? @action.decide_random_target # 戦闘不能による再選択 end end if target != nil dist = @action.skill? ? @action.skill.dist : 32 if distance_to_battler(target) < dist # 範囲内にターゲットがいる $game_temp.heap_active_battler.push([self, target]) unless OPTIMA::USE_BASE_POSITION # 元の位置へ戻らない場合 set_base_position(@screen_x, @screen_y) # 基本位置を更新 end else # 範囲内にターゲットがいない move_pos(target.real_x, target.real_y, 4096) @anime_count += 2 end else # ターゲットがいなくなった場合 reload_action end else if @charged_atb < @atb_level @charge_count += agi + OPTIMA::ATB_BASE_SPEED if @charge_count > OPTIMA::ATB_MAX # ATBがたまった Audio.se_play("Audio/SE/Ice4.ogg", 60, 150) @charged_atb += 1 @charge_count = 0 # カウンタのリセット end elsif @actions.size == @atb_level # ATBがMAXで行動入力済み @action = @actions.pop $game_temp.refresh_atb = true # ATBウィンドウ再描画 slip_damage_effect # スリップダメージ処理 do_auto_recovery # 自動回復処理 end update_move end @screen_x = @real_x >> 10 @screen_y = @real_y >> 10 update_animation else super end end #-------------------------------------------------------------------------- # ○ 次のアクションをセット #-------------------------------------------------------------------------- def reload_action # リーダーなら入力された行動配列から次を取得 if OPTIMA::USE_COMMAND_INPUT and $game_party.members[0].id == @actor_id @action.clear @charged_atb -= 1 @action = @actions.pop unless @actions.empty? else super end end #-------------------------------------------------------------------------- # ● スキルオブジェクトの配列取得 #-------------------------------------------------------------------------- alias optima_game_actor_skills skills def skills if $game_temp.in_battle # 戦闘中ならロール制限を考慮する result = [] for i in @skills skill = $data_skills[i] result.push(skill) if skill.role == @role end return result else return optima_game_actor_skills end end #-------------------------------------------------------------------------- # ● 狙われやすさの取得 #-------------------------------------------------------------------------- def odds n = @role == 2 ? 20 : 4 # ディフェンダーはものすごく狙われる return n - self.class.position end #-------------------------------------------------------------------------- # ● 自動回復の実行 (ターン終了時に呼び出し) #-------------------------------------------------------------------------- def do_auto_recovery if auto_hp_recover and not dead? n = maxhp / 20 self.hp += n $game_temp.heap_popup.push([@screen_x, @screen_y, n.to_s, Color.new(0, 255, 0), 1]) $game_temp.refresh_status = true # ステータスウィンドウ更新フラグを立てる end end #-------------------------------------------------------------------------- # ● 戦闘行動の作成 (自動戦闘用) #-------------------------------------------------------------------------- def make_action @action.clear return unless movable? action_list = [] if OPTIMA::USE_ATTACK == 2 or (OPTIMA::USE_ATTACK == 1 and @role == 0) action = Game_BattleAction.new(self) action.set_attack action.evaluate action_list.push(action) end if OPTIMA::USE_GUARD == 2 or (OPTIMA::USE_GUARD == 1 and @role == 2) action = Game_BattleAction.new(self) action.set_guard action.evaluate action_list.push(action) end for skill in skills action = Game_BattleAction.new(self) action.set_skill(skill.id) action.evaluate action_list.push(action) end max_value = 0 for action in action_list if action.value > max_value @action = action max_value = action.value end end unless @action.for_friend? # ターゲットにした敵を記録 @last_target_enemy = @action.target_index end end end
la ligne 23 est => if @usable_role[i] Je ne comprends strictement à rien dans les scripts donc si quelqu'un pourrait m'aider à résoudre mon problème je serais très content. PS: je mets au cas où les screens de l’évènement - Spoiler:
|
|
Invité
| Sujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe Lun 12 Mar 2012 - 21:39 | |
| - Code:
-
#============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :optima # オプティマ attr_accessor :role # 現在のロール attr_accessor :usable_role # 利用可能ロール attr_accessor :last_target_enemy # 前回攻撃した敵インデックス attr_accessor :actions # リーダー用行動配列 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias optima_game_actor_initialize initialize def initialize(actor_id) optima_game_actor_initialize(actor_id) @optima = Table.new(OPTIMA::OPTIMA_MAX) @atb_level = OPTIMA::ATB_SLOT @usable_role = OPTIMA::ACTORS_USABLE_ROLE[actor_id] for i in 0...OPTIMA::OPTIMA_MAX # 利用可能ロールの先頭を初期ロールに設定 if @usable_role != nil if @usable_role[i] @role = i for j in 0...OPTIMA::OPTIMA_MAX do @optima[j] = @role end break end end end end #-------------------------------------------------------------------------- # ● スプライトを使うか? #-------------------------------------------------------------------------- def use_sprite? return true end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh super @last_target_enemy = -1 @actions = [] end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update # リーダーなら自動戦闘無効化 if OPTIMA::USE_COMMAND_INPUT and $game_party.members[0].id == @actor_id return if @wait_count > 0 if @action.valid? # 行動が決定している if @action.guard? # ガードなら自分がターゲット target = self else if @action.for_friend? target = @action.friends_unit.members[@action.target_index] else target = @action.opponents_unit.members[@action.target_index] end if target.exist? == @action.for_dead_friend? @action.decide_random_target # 戦闘不能による再選択 end end if target != nil dist = @action.skill? ? @action.skill.dist : 32 if distance_to_battler(target) < dist # 範囲内にターゲットがいる $game_temp.heap_active_battler.push([self, target]) unless OPTIMA::USE_BASE_POSITION # 元の位置へ戻らない場合 set_base_position(@screen_x, @screen_y) # 基本位置を更新 end else # 範囲内にターゲットがいない move_pos(target.real_x, target.real_y, 4096) @anime_count += 2 end else # ターゲットがいなくなった場合 reload_action end else if @charged_atb < @atb_level @charge_count += agi + OPTIMA::ATB_BASE_SPEED if @charge_count > OPTIMA::ATB_MAX # ATBがたまった Audio.se_play("Audio/SE/Ice4.ogg", 60, 150) @charged_atb += 1 @charge_count = 0 # カウンタのリセット end elsif @actions.size == @atb_level # ATBがMAXで行動入力済み @action = @actions.pop $game_temp.refresh_atb = true # ATBウィンドウ再描画 slip_damage_effect # スリップダメージ処理 do_auto_recovery # 自動回復処理 end update_move end @screen_x = @real_x >> 10 @screen_y = @real_y >> 10 update_animation else super end end #-------------------------------------------------------------------------- # ○ 次のアクションをセット #-------------------------------------------------------------------------- def reload_action # リーダーなら入力された行動配列から次を取得 if OPTIMA::USE_COMMAND_INPUT and $game_party.members[0].id == @actor_id @action.clear @charged_atb -= 1 @action = @actions.pop unless @actions.empty? else super end end #-------------------------------------------------------------------------- # ● スキルオブジェクトの配列取得 #-------------------------------------------------------------------------- alias optima_game_actor_skills skills def skills if $game_temp.in_battle # 戦闘中ならロール制限を考慮する result = [] for i in @skills skill = $data_skills[i] result.push(skill) if skill.role == @role end return result else return optima_game_actor_skills end end #-------------------------------------------------------------------------- # ● 狙われやすさの取得 #-------------------------------------------------------------------------- def odds n = @role == 2 ? 20 : 4 # ディフェンダーはものすごく狙われる return n - self.class.position end #-------------------------------------------------------------------------- # ● 自動回復の実行 (ターン終了時に呼び出し) #-------------------------------------------------------------------------- def do_auto_recovery if auto_hp_recover and not dead? n = maxhp / 20 self.hp += n $game_temp.heap_popup.push([@screen_x, @screen_y, n.to_s, Color.new(0, 255, 0), 1]) $game_temp.refresh_status = true # ステータスウィンドウ更新フラグを立てる end end #-------------------------------------------------------------------------- # ● 戦闘行動の作成 (自動戦闘用) #-------------------------------------------------------------------------- def make_action @action.clear return unless movable? action_list = [] if OPTIMA::USE_ATTACK == 2 or (OPTIMA::USE_ATTACK == 1 and @role == 0) action = Game_BattleAction.new(self) action.set_attack action.evaluate action_list.push(action) end if OPTIMA::USE_GUARD == 2 or (OPTIMA::USE_GUARD == 1 and @role == 2) action = Game_BattleAction.new(self) action.set_guard action.evaluate action_list.push(action) end for skill in skills action = Game_BattleAction.new(self) action.set_skill(skill.id) action.evaluate action_list.push(action) end max_value = 0 for action in action_list if action.value > max_value @action = action max_value = action.value end end unless @action.for_friend? # ターゲットにした敵を記録 @last_target_enemy = @action.target_index end end end Voilà, en espérant que ça marche. Bonne continuation ! |
|
Poulet Lv.1
Age : 31 Inscrit le : 06/03/2012 Messages : 8
| Sujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe Lun 12 Mar 2012 - 21:50 | |
| merci Raymo ça fonctionne parfaitement. |
|
| Sujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe | |
| |
|