AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



anipassion.com

Partagez
 

 [script] Game_Actor problème en rajoutant un perso dans l'équipe

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
casmatik
Poulet Lv.1
Poulet Lv.1
casmatik


Masculin Age : 29
Inscrit le : 06/03/2012
Messages : 8

[script] Game_Actor problème en rajoutant un perso dans l'équipe Empty
MessageSujet: [script] Game_Actor problème en rajoutant un perso dans l'équipe   [script] Game_Actor problème en rajoutant un perso dans l'équipe Icon_minitimeLun 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-xiii

voici 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:
Revenir en haut Aller en bas
http://researchofthepast.ze-forum.com/index.php
Invité
Invité
avatar



[script] Game_Actor problème en rajoutant un perso dans l'équipe Empty
MessageSujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe   [script] Game_Actor problème en rajoutant un perso dans l'équipe Icon_minitimeLun 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 !
Revenir en haut Aller en bas
casmatik
Poulet Lv.1
Poulet Lv.1
casmatik


Masculin Age : 29
Inscrit le : 06/03/2012
Messages : 8

[script] Game_Actor problème en rajoutant un perso dans l'équipe Empty
MessageSujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe   [script] Game_Actor problème en rajoutant un perso dans l'équipe Icon_minitimeLun 12 Mar 2012 - 21:50

[script] Game_Actor problème en rajoutant un perso dans l'équipe 745144

merci Raymo

ça fonctionne parfaitement.
Revenir en haut Aller en bas
http://researchofthepast.ze-forum.com/index.php
Contenu sponsorisé




[script] Game_Actor problème en rajoutant un perso dans l'équipe Empty
MessageSujet: Re: [script] Game_Actor problème en rajoutant un perso dans l'équipe   [script] Game_Actor problème en rajoutant un perso dans l'équipe Icon_minitime

Revenir en haut Aller en bas
 

[script] Game_Actor problème en rajoutant un perso dans l'équipe

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» [Help]Problème move_range dans le script GTBS
» Demande de script "menu changement de partenaire" pour avoir plus de 4 perso dans l'histoire
» [Résolu] Problème avec perso sur la map
» Probleme avec le script d'invocation de Blockade (en fait, le script marche, c'est un probleme sur le menu)
» [résolu]Problème de perso qui se transforme

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Problèmes et Solutions :: Résolu-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit