Welcome Guest: S’enregistrer | Connexion
 
Portail  | FAQ | Rechercher | Membres | Groupes
 
Combat à flèche
 
Poster un nouveau sujet   Répondre au sujet
RPG Community Index du Forum -> RPG Maker -> Scripts RPG Maker XP
Sujet précédent :: Sujet suivant  
Auteur Message
DrakeRoxas
Dieu
Dieu

Hors ligne

Inscrit le: 06 Mar 2009
Messages: 37
Points RPG Community: 0
Moyenne de points: 0,00

MessagePosté le: 23/10/2010 12:04:04
MessageSujet du message: Combat à flèche
Répondre en citant

Commencez par mettre ce script :

 
Code:
 #===========================================================
#
#  Combat Points Sensibles
#
#===========================================================
#  DrakeRoxas
#  Vers. 1.1
#  12/10/2010
#===========================================================

#==============================================================================
# ■ Scene_Battle (分割定義 1)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def initialize
    @attribut_double = 17 # Attribut pour les combinaisons attaque + defense
    # Définition des points sensible des héros
    actor = $game_party.actors
    $actor_PS = []
    for i in 1...9 # 9 = nombre de héros dans la base de donnée + 1
      $actor_PS[i] = []
    end
    $actor_PS[1][0] = 2 # Pt résistant
    $actor_PS[1][1] = 3 # Pt faible
    
    $actor_PS[2][0] = 3
    $actor_PS[2][1] = 0  
    
    $actor_PS[3][0] = 0
    $actor_PS[3][1] = 1  
    
    $actor_PS[4][0] = 1
    $actor_PS[4][1] = 2
    
    $actor_PS[5][0] = 2
    $actor_PS[5][1] = 3
    
    $actor_PS[6][0] = 3
    $actor_PS[6][1] = 0  
    
    $actor_PS[7][0] = 0
    $actor_PS[7][1] = 1  
    
    $actor_PS[8][0] = 1
    $actor_PS[8][1] = 2
        
    # Définition des points sensibles des monstres aléatoires
    $enemy_PS = []
    for i in 0..8
      $enemy_PS[i] = []
      $enemy_PS[i][0] = rand(4)
      $enemy_PS[i][1] = rand(4)
      $enemy_PS[i][2] = 0
      $enemy_PS[i][3] = 0
    end
      $enemy_PS[2][0] = 2
      $enemy_PS[2][1] = 3
  end  
  #--------------------------------------------------------------------------
  # ● Selection des points à attaquer pour les énemis
  #--------------------------------------------------------------------------
  alias start_phase3_PS start_phase3
  def start_phase3
    for i in 0..$game_troop.enemies.size
      $enemy_PS[i][2] = rand(4)
      $enemy_PS[i][3] = rand(4)
    end
    start_phase3_PS
  end
  #--------------------------------------------------------------------------
  # ● Selection des points à attaquer pour les héros
  #--------------------------------------------------------------------------
  alias end_enemy_select_PS end_enemy_select
  def end_enemy_select
    if @active_battler.current_action.kind != 0 and @active_battler.current_action.basic != 1
      end_enemy_select_PS
      return
    end
    if @active_battler.element_set.include?(@attribut_double)
      micro_phase = 0
      @select_PS = Sprite.new
      @fleche1_PS = Sprite.new
      @fleche2_PS = Sprite.new
      @select_PS.bitmap = RPG::Cache.picture("fond_SP")
      @select_PS.x = @fleche1_PS.x = @fleche2_PS.x = @enemy_arrow.x - 65
      @select_PS.y = @fleche1_PS.y = @fleche2_PS.y = @enemy_arrow.y - 60
      @fleche1_PS.x += 15
      @fleche2_PS.x += 73
      @fleche1_PS.y = @fleche2_PS.y += 25
      @select_PS.z = 9998
      @fleche1_PS.z = @fleche2_PS.z = 9999
      loop do
        Graphics.update
        Input.update
        if Input.trigger?(Input::UP)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 0
            @fleche1_PS.bitmap = RPG::Cache.icon("atk_SP_u")
          else
            $actor_PS[@active_battler.id][3] = 0
            @fleche2_PS.bitmap = RPG::Cache.icon("def_SP_u")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::DOWN)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 1
            @fleche1_PS.bitmap = RPG::Cache.icon("atk_SP_d")
          else
            $actor_PS[@active_battler.id][3] = 1
            @fleche2_PS.bitmap = RPG::Cache.icon("def_SP_d")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::LEFT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 2
            @fleche1_PS.bitmap = RPG::Cache.icon("atk_SP_l")
          else
            $actor_PS[@active_battler.id][3] = 2
            @fleche2_PS.bitmap = RPG::Cache.icon("def_SP_l")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::RIGHT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 3
            @fleche1_PS.bitmap = RPG::Cache.icon("atk_SP_r")
          else
            $actor_PS[@active_battler.id][3] = 3
            @fleche2_PS.bitmap = RPG::Cache.icon("def_SP_r")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::B)
          @select_PS.dispose
          @fleche1_PS.dispose
          @fleche2_PS.dispose
          start_phase3
          break
        end
        if micro_phase == 2
          Graphics.update
          sleep(1)
          break
        end
      end
      @select_PS.dispose
      @fleche1_PS.dispose
      @fleche2_PS.dispose
      
      # 1 choix !
    else
      $actor_PS[@active_battler.id][3] = 4
      micro_phase = 0
      @select_PS = Sprite.new
      @fleche_PS = Sprite.new
      @select_PS.bitmap = RPG::Cache.picture("fond_atk_SP")
      @select_PS.x = @fleche_PS.x = @enemy_arrow.x - 30
      @select_PS.y = @fleche_PS.y = @enemy_arrow.y - 70
      @fleche_PS.x += 15
      @fleche_PS.y += 25
      @select_PS.z = 9998
      @fleche_PS.z = 9999
      loop do
        Graphics.update
        Input.update
        if Input.trigger?(Input::UP)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 0
            @fleche_PS.bitmap = RPG::Cache.icon("atk_SP_u")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::DOWN)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 1
            @fleche_PS.bitmap = RPG::Cache.icon("atk_SP_d")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::LEFT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 2
            @fleche_PS.bitmap = RPG::Cache.icon("atk_SP_l")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::RIGHT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][2] = 3
            @fleche_PS.bitmap = RPG::Cache.icon("atk_SP_r")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::B)
          @select_PS.dispose
          @fleche_PS.dispose
          start_phase3
          break
        end
        if micro_phase == 1
          Graphics.update
          sleep(1)
          break
        end
      end
      @select_PS.dispose
      @fleche_PS.dispose
    end
    end_enemy_select_PS
  end
 
 
  #--------------------------------------------------------------------------
  # ● Défendre
  #--------------------------------------------------------------------------
  alias phase3_next_actor_PS phase3_next_actor
  def phase3_next_actor
    # 攻撃の場合
    if @active_battler == nil or @active_battler.current_action == nil
      return phase3_next_actor_PS
    end
    if @active_battler.current_action.basic == 1 and @active_battler.current_action.kind == 0
      micro_phase = 0
      @select_PS = Sprite.new
      @fleche_PS = Sprite.new
      @select_PS.bitmap = RPG::Cache.picture("fond_def_SP")
      @select_PS.x = @fleche_PS.x = @actor_command_window.x + 50
      @select_PS.y = @fleche_PS.y = 416
      @fleche_PS.x += 15
      @fleche_PS.y += 25
      @select_PS.z = 9998
      @fleche_PS.z = 9999
      loop do
        Graphics.update
        Input.update
        if Input.trigger?(Input::UP)
          if micro_phase == 0
            $actor_PS[@active_battler.id][3] = 0
            @fleche_PS.bitmap = RPG::Cache.icon("def_SP_u")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::DOWN)
          if micro_phase == 0
            $actor_PS[@active_battler.id][3] = 1
            @fleche_PS.bitmap = RPG::Cache.icon("def_SP_d")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::LEFT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][3] = 2
            @fleche_PS.bitmap = RPG::Cache.icon("def_SP_l")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::RIGHT)
          if micro_phase == 0
            $actor_PS[@active_battler.id][3] = 3
            @fleche_PS.bitmap = RPG::Cache.icon("def_SP_r")
          end
          micro_phase += 1
        end
        if Input.trigger?(Input::B)
          @select_PS.dispose
          @fleche_PS.dispose
          start_phase3
          break
        end
        if micro_phase == 1
          Graphics.update
          sleep(1)
          break
        end
      end
      @select_PS.dispose
      @fleche_PS.dispose
    end
    phase3_next_actor_PS
  end
      
end

#==============================================================================
# ■ Game_Battler (分割定義 3)
#------------------------------------------------------------------------------
#  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
# スのスーパークラスとして使用されます。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #     attacker : 攻撃者 (バトラー)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # クリティカルフラグをクリア
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    #======================ZONE MODIFIEE==========================
    if attacker.is_a?(Game_Enemy)
      if $enemy_PS[attacker.id][2] == $actor_PS[self.id][3]
        self.damage = "Pared"
        self.critical = false
        return true
      end
    else
      if $actor_PS[attacker.id][2] == $enemy_PS[self.id][3]
        self.damage = "Pared"
        self.critical = false
        return true
      end
    end
     #====================FIN ZONE MODIFIEE=======================
    # 命中の場合
    if hit_result == true
      # 基本ダメージを計算
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # ダメージの符号が正の場合
      if self.damage > 0
        #======================ZONE MODIFIEE==========================
        if attacker.is_a?(Game_Enemy)
          if $enemy_PS[attacker.id][2] == $actor_PS[self.id][0]
            self.damage /= 2
          end
          if $enemy_PS[attacker.id][2] == $actor_PS[self.id][1]
            self.damage *= 2
          end
        else
          if $actor_PS[attacker.id][2] == $enemy_PS[self.id][0]
            self.damage /= 2
          end
          if $actor_PS[attacker.id][2] == $enemy_PS[self.id][1]
            self.damage *= 2
          end
        end
        #====================FIN ZONE MODIFIEE=======================
        # クリティカル修正
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # 防御修正
        if self.guarding?
          self.damage /= 2
        end
      end
      # 分散
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # 命中の場合
    if hit_result == true
      # ステート衝撃解除
      remove_states_shock
      # HP からダメージを減算
      self.hp -= self.damage
      # ステート変化
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # ミスの場合
    else
      # ダメージに "Miss" を設定
      self.damage = "Miss"
      # クリティカルフラグをクリア
      self.critical = false
    end
    # メソッド終了
    return true
  end
end


Maintenant je vous explique comment le modifier :
La première modif se trouve ici : "@attribut_double = 17"
Ce truc permet au héros de se protéger en même temps qu'il attaque, 17 est le numéro de l'attribut dans la BDD. Si le héros n'as pas cet attribut, il ne fera que choisir un point d'attaque OU de défense. Avec, quand il attaque, il peux se défendre en même temps ^^

Ensuite, "for i in 1...9". Remplacer 9 par le nombre de héros dans la BDD et rajouter 1 à ce nombre (9 signifie qu'il y as 8 héros)

Puis les "$actor_PS[X][Y] = Z"
La vous choisissez le héros n°X de la base de donnée.
Le Y correspond au point résistant (divise les dommages par 2) si il vaux 0, et au point de faiblesse (Dommages * 2) si vous mettez 1.
Z = la zone : 0 = haut, 1 = bas, 2 = gauche, et 3 = droite (si vous mettez autre chose, le héros n'aura rien. Exemple : $actor_PS[2][0] = 5 signifie que le héros n° 2 n'as pas de point résistant)

Un peu plus bas, j'ai rajouter les 2 lignes :
      $enemy_PS[2][0] = 2
      $enemy_PS[2][1] = 3

C'est le même système que les héros mais pour les ennemis ^^

Voilà, vous n'avez rien d'autre à modifier, je vous donnerais bien un aperçu mais ça marche pas quand je le film ^^'
Donc à la place je vous met une démo, essayer un peu toutes les options ^^
http://rapidshare.com/files/426690260/CBT_with_fl__ches.rar
Revenir en haut
Publicité






MessagePosté le: 23/10/2010 12:04:04
MessageSujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
RPG Community Index du Forum -> RPG Maker -> Scripts RPG Maker XP Toutes les heures sont au format GMT + 2 Heures
Poster un nouveau sujet   Répondre au sujet
Page 1 sur 1
Sauter vers:  

 

Portail | Index | Panneau d’administration | Créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
phpBB
Template by BMan1
Traduction par : phpBB-fr.com