Accueil du SiteAccueil du Site  AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  ConnexionConnexion  S'enregistrerS'enregistrer  




Partagez
 

 [VX] SBS Tankentai ADD-DON Couverture

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Invité
Invité
Anonymous


[VX] SBS Tankentai ADD-DON Couverture Empty
MessageSujet: [VX] SBS Tankentai ADD-DON Couverture   [VX] SBS Tankentai ADD-DON Couverture EmptyMer 21 Déc 2011 - 18:12

Introduction

Permet de faire en sorte qu'un personnage reçoit les dégâts en protégeant ses alliés. Le personnage se placera donc devant l'allié pour le protéger des attaques adverses.

Utilisation

Type:
* _/1 - > couvrent toutes les attaques physiques
* _/2 - > couvrent toutes les attaques physiques, avec un pourcentage donné
* _/3 - > couvrent toutes les attaques physiques, selon le pourcentage de hp
* _/4 - > couvrent toutes les attaques physiques et magiques
* _/5 - > couvrent toutes les attaques physiques et magiques, avec une chance donnée
* _/6 - > couvrent toutes les attaques physiques et magiques, selon le pourcentage de hp

Mettre ce code dans les commentaires qu'une compétence.
Code:
<COVER cover_type cover_param>


cover_type: c'est le type
cover_param: c'est le pourcentage

Exemple:

Code:
<COVER 1 0>

*couvrent toutes les attaques physiques

Code:
<COVER 2 50>

couvrent toutes les attaques physiques une fois sur deux.

Screen
[VX] SBS Tankentai ADD-DON Couverture Cover_script

Script

Script

Code:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/  ?          SBS Tankentai ADD-DON - [Lusitano] Cover              ? VX ?
#_/  ?                      Version 2.1                                    ?
#_/  ?                      by Flipsomel                                    ?
#_/-----------------------------------------------------------------------------
#_/  Extra credit:
#_/  - Kal, i used his way of accessing the skill user id
#_/
#_/  Features:
#_/    Defines actors that will take damage in place of an ally via state.
#_/    Does not work for monsters.
#_/
#_/  Mini-faq:
#_/  > The protector stats are used to calculate the damage when covering ally.
#_/  > Items and healing spells affect the target, not the protector
#_/
#_/
#_/----------------------------------------------------------------------------
#_/  Cover Types:
#_/    1 -> cover target from all physical attacks
#_/    2 -> cover all physical attacks, with a given chance
#_/    3 -> cover all physical attacks, if target hp percentage bellow
#_/    4 -> cover all physical and magic attacks
#_/    5 -> cover all physical and magic attacks, with a given chance
#_/    6 -> cover all physical and magic attacks, if target hp percentage bellow
#_/                                   
#_/----------------------------------------------------------------------------
#_/  How to use: 
#_/
#_/  > Add to the state notebox: <COVER cover_type cover_param>
#_/
#_/                    replace cover_type for the the desired cover type
#_/                    replace cover_param for the the desired param
#_/  Setup examples:
#_/   
#_/    >  cover ally always : <COVER 1 0>
#_/    >  50% chance of physically cover ally: <COVER 2 50>
#_/    >  cover phys and mag damage if ally hp is at 20%: <COVER 3 20>
#_/
#_/----------------------------------------------------------------------------
#_/  Where to install:
#_/      Above Main, after the battle system.
#_/----------------------------------------------------------------------------
#_/  Compatible:
#_/      Done and tested for SBS3.4e + ATB 1.2c
#_/-----------------------------------------------------------------------------
#_/
#_/  !ATTENTION! : don't forget to check remove state at end of battle, or
#_/                bad stuff will occur!
#_/-----------------------------------------------------------------------------
#_/
#_/  Version Log:
#_/  1.0 - Started Script, defender takes damage for protected, pops damage
#_/  1.1 - Added sprite movement
#_/  1.2 - Corrected some bugs regarding damage and skill effects
#_/  2.0 - Added more cover types
#_/  2.1 - Added protected battler animation
#_/
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

#------------------------------------------------------------------------------
# Cover SEQUENCE
# If you know how to use takentai action sequences you can edit this one.
# Please take into account that the script places the defender in the covered
# ally position, no matter what COVER_RESET does.
# COVER_RESET is only used to make the battler stand in place for a time, and
# then return to his original start position.
#
# BUG NOTE:
# Sometimes the defender turn starts before he can execute
# "Start Pos Return", and will stay in the ally being defended spot until
# he is called to defend again. You can add  "Start Pos Return" to your
# "COMMAND_INPUT" and this will no longer occur.
# In the next version i will adress this issue, when i have the time z.z
#------------------------------------------------------------------------------
module N01
  COVERSCRIPT_SEQUENCE = {
                "COVER_RESET" => ["30","Start Pos Return","FLEE_RESET"],
                "BE_COVERED" => ["EVADE_JUMP","20","Start Pos Return","FLEE_RESET"]
        }               
ACTION.merge!(COVERSCRIPT_SEQUENCE)
end

#==============================================================================
# ¦ State
#==============================================================================
class RPG::State
  attr_accessor :skill_user
end

#used by Scene_battle
class Spriteset_Battle
  attr_accessor :actor_sprites
   
  #returns the position of the battler in actor_sprites array
  def pos_in_sprite_array(battler_id)
    for i in 0...actor_sprites.size
      if actor_sprites[i].battler.id == battler_id
        return i
      end
    end
      return -1
  end
     
end
#access to spriteset
class Scene_Battle < Scene_Base
    attr_accessor :spriteset
  end
#==============================================================================
# ¦ Game_Battler
#==============================================================================
class Game_Battler

  alias lusitano_cover_old_initialize initialize
  def initialize
    lusitano_cover_old_initialize #calls old initialize
    @covered = nil #flag, true if actor battler os being protected
    @protector = 0 # id of battler who is protecting
    @protector_spr_id = 0 # id of battler sprite in $scene.spriteset.actor_sprites
    @cover_type = 0 # type of cover (physical, magical, both, bellow %hp
    @cover_param = 0  # second param for cover ( chance, hp%, etc.)
    @is_covering = nil # flag, true if actor is covering another battler
  end
 
 
 alias cover_skill_effect skill_effect
  def skill_effect(user, skill)
    @skill_user = user
    cover_skill_effect(user, skill)
  end
 
 
  #--------------------------------------------------------------------------
  # ? check_for_state_extensions
  #    sees if the added state has extensions defined
  #    state_id : position of state in the $data_states[] array
  #--------------------------------------------------------------------------
  def LUS_COVER_check_for_state_extensions(state_id)
   
   
      return unless @states.include?(state_id)
   
      $data_states[state_id].note.each_line { |line|
          case line
          when /<(?:cover|COVER)\s*(\d+)\s*(\d+)>/i
              @cover_type = $1.to_i
              @cover_param = $2.to_i
              @covered = true
              @protector = $data_states[state_id].skill_user.id
              #$game_actors[@protector].set_covering
              @protector_spr_id = $scene.spriteset.pos_in_sprite_array(@protector)       
              return true
          end
      }
  end
 
 
  #--------------------------------------------------------------------------
  # ? alias add_state
  #    checks for element modifiers
  #    state_id : position of state in the $data_states[] array
  #--------------------------------------------------------------------------
  alias add_state_lus_cover add_state
  def add_state(state_id)
   
    state = $data_states[state_id]
    state.skill_user = @skill_user
   
    add_state_lus_cover(state_id)
    LUS_COVER_check_for_state_extensions(state_id)
    #checks if self was selected to cover self
    remove_state_lus_cover(state_id) if @protector == self.id
  end
 
 
  #--------------------------------------------------------------------------
  # ? alias remove_state
  #    resets affliction type to 1 if state was an afliction
  #    state_id : position of state in the $data_states[] array
  #--------------------------------------------------------------------------
  alias remove_state_lus_cover remove_state
  def remove_state(state_id)
   
    #checks and reverts to the old weapon_animation_id
    if LUS_COVER_check_for_state_extensions(state_id) == true
      @cover_type = 0
      @covered = false
      @protector = nil
      @protector_spr_id = 0
      @cover_param = 0
    end
   
    remove_state_lus_cover(state_id)
  end
 
  #--------------------------------------------------------------------------
  # * Checks if type of cover allows the battler to be covered
  #  cover_type : type of cover
  #    Returns true if battler checks conditions for being covered
  #--------------------------------------------------------------------------
  def can_be_Covered
 
      # if protector is dead...
    if $game_actors[@protector].dead? && @states.size > 0
      #check wich state will be removed
      for state in @states
        if LUS_COVER_check_for_state_extensions(state.id) == true
          remove_state(state.id)
        end
      end 
      return false
    end
   
    #checks type of cover
    case @cover_type
      when 1,4 #protect physical damage
        return true
      when 2,5
        chance = rand(100) #chance of being covered
        return false unless chance >= @cover_param
        return true
      when 3,6 # if hp is bellow the setting
        return false unless ((self.hp.to_f / self.maxhp.to_f) * 100) <= @cover_param
        return true
      else
        return false
      end
  end
 
 
 
  #--------------------------------------------------------------------------
  # * Apply State Changes
  #    obj : Skill, item, or attacker
  #--------------------------------------------------------------------------
  alias lus_cover_apply_state_changes apply_state_changes
  def apply_state_changes(obj)
   
    if @covered == true
      #checks if battler can be covered
      return if can_be_Covered 
    end
   
    lus_cover_apply_state_changes(obj)
  end
 
 
  #--------------------------------------------------------------------------
  # * Calculation of Damage From Normal Attack
  #    attacker : Attacker
  #    The results are substracted added to @hp_damage
  #  @hp_damage Will be used by execute_damage
  #--------------------------------------------------------------------------
  alias lusitano_cover_mk_atk_dam make_attack_damage_value
  def make_attack_damage_value(attacker)
   
    #calculates de HP_DAMAGE the user would receive
    # this is a call to the original make_attack_damage_value
    lusitano_cover_mk_atk_dam(attacker)
   
    #checks if user is being covered
    return unless @covered == true 
    #checks if battler can be covered
    return unless can_be_Covered
   
    @hp_damage = 0 # takes no hp damage
     
    #calculates the damage value
    $game_actors[@protector].make_attack_damage_value(attacker)
    #executes hp change
    $game_actors[@protector].execute_damage(attacker)
    #pops protector damage
    #$scene.spriteset.actor_sprites[@protector_spr_id].damage_pop($game_actors[@protector].hp_damage)
    cover_sprite_movement
  end # end of method
 
    #--------------------------------------------------------------------------
  # * Calculation of Damage From OBJ
  #    user : user (game_battler)
  #    The results are substracted added to @hp_damage or @mp_damage
  #  @hp_damage Will be used by execute_damage
  #--------------------------------------------------------------------------
  alias lusitano_cover_make_obj_damage_value make_obj_damage_value
  def make_obj_damage_value(user, obj)
    lusitano_cover_make_obj_damage_value(user, obj)
   
    return unless @hp_damage > 0 && obj.is_a?(RPG::Skill)       
    return unless obj.physical_attack || @cover_type > 3
   
    #checks if user is being covered
    return unless @covered == true
    #checks if battler can be covered
    return unless can_be_Covered 
   
    @hp_damage = 0 # takes no hp damage
   
    #calculates the damage value
    $game_actors[@protector].make_attack_damage_value(user)
    #executes hp change
    $game_actors[@protector].execute_damage(user)   
    #defender sprite animation
    cover_sprite_movement
    $game_actors[@protector].apply_state_changes(obj)
  end 
   
  #--------------------------------------------------------------------------
  # * Cover Sprite Movement
  #    Handles the sprite animation for cover event
  #--------------------------------------------------------------------------
  def cover_sprite_movement
    #$scene is Scene_Battle
    #actor_sprites is sprite_battler
     
    #makes battler do be_covered_action
    self_sprite_id = $scene.spriteset.pos_in_sprite_array(self.id)
    action = $game_actors[self.id].be_covered_action
    $scene.spriteset.set_action(true, self_sprite_id, action)
   
    #makes defender jump to spot!
    $game_actors[@protector].change_base_position(self.position_x, self.position_y)
    # $game_actors[@protector].position_y = self.position_y
    #sets return sequence
    action = $game_actors[@protector].cover_action
    $scene.spriteset.set_action(true, @protector_spr_id, action)
     
    #pops defender damage
    $scene.spriteset.actor_sprites[@protector_spr_id].damage_pop($game_actors[@protector].hp_damage)
   
    #pop alternative ( i should check this later)
    #@spriteset.set_damage_pop(actor, member.index, mp_damage)
   
    # damage_num is from the actors interpreter, it forces and pops the damage
    # but takes a while to take place so it is not a good alternative
    # $game_actors[@protector].damage_num($game_actors[@protector].hp_damage)   
  end
 
  #returns the cover_action
  def cover_action
    return "COVER_RESET"
  end
 
  #returns the be covered action
  def be_covered_action
    return "BE_COVERED"
  end
 
end



Crédit et remerciement:
flipsomel : Pour ne pas être un paresseux et comprenant comment forcer des ordres d'animation battler via le script ^^
Kal: initialement j'allais seulement améliorer son script Protéger, mais j'ai décidé que c'était plus didactique et facile de le refaire à nouveau.
Kylock, Mr. Bubble, Shu, Moonlight, NightWalker, Enelvon, Atoa, AlphaWhelp, blackmorning, Mithran, Kaduki, Enu: pour le système de combat SBS Tankentai
Revenir en haut Aller en bas
 
[VX] SBS Tankentai ADD-DON Couverture
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [VX-Ace]SBS Tankentai trad FR
» Script Tankentai pour XP
» [VX] SBS Tankentai ADD-DON Lance-pierre
» [VX-Ace] Sbs Tankentai - Bug d'utilisation des compétences
» [RESOLU][VX Ace] Problème avec le SBS Tankentai

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Palais Créatif :: ~ PARTAGE ~ :: Scripts et plugins :: RPG Maker VX :: Combat-
Sauter vers: