Partagez
Aller en bas
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

ADD-ON SBS Tankentai : QTE Contrattack Empty ADD-ON SBS Tankentai : QTE Contrattack

le Mar 25 Nov 2008 - 13:30
Nom : ADD-ON SBS Tankentai : QTE Contrattack
Auteur : ASHKA
Info : Un script à copier et une modification à faire.
Une ressource à importer.

Durant l'attaque d'un ennemi, une chance est laissé au héros d'esquiver ( touche aléatoire ) puis, s'il réagi, il a une chance de contre-attaquer ( même chose : touche aléatoire ).

Copiez ce script dans "Materials" sous les autres scripts de combat :


Code:
###################################
#
#              Add-on SBS Tankentai
#                    QTE contrattack
#
###################################
module QTE_ctratk
# Les heros connaissant l'unes de ces competences pourront peut-etre contre-attaquer :
  ID_SKILL = [129]
# NOm du fichier où se trouve les icones servant à designer les touches de "réaction" ( repertoire systeme !! )
  Nom = "Fleche"
# Temps de réaction pour la premiere phase du QTE de contrattack 
  Phase1 = 20
# Temps de réaction pour la seconde phase du QTE de contrattack 
  Phase2 = 25
end
###################################
module N01
  action_qte = {
  "debut_qte"  => ["script", "$scene.init_qte"],
                          }
  ANIME.merge!(action_qte)
 
  sequence_qte = {
  "atk"          => ["PREV_MOVING_TARGET", "debut_qte"],
                         
  "fin"          => ["WPN_SWING_V", "OBJ_ANIM_WEIGHT",
                          "12","WPN_SWING_VL","OBJ_ANIM_L","Two Wpn Only","16",
                          "Can Collapse","FLEE_RESET"],
  "pas" => ["JUMP_AWAY"],
  "ctratk" => ["JUMP_TO", "WPN_SWING_V"]
                              }
  ACTION.merge!(sequence_qte)
end
###################################
class Scene_Battle < Scene_Base
  def init_qte
    @cible = $game_party.members[@active_battler.action.target_index]
    unless @cible.use_contrattack?
      @spriteset.set_action(false, @active_battler.index, "fin")
      return
    end
    x = @cible.base_position_x - 30
    y = @cible.base_position_y - 68
    @num = rand(4)
    @win_qte = Win_QTE.new(x, y, @num)
    @win_qte.opacity = 0
    @time = QTE_ctratk::Phase1
    @continuer = true
    @phase = 0
  end
  def update_qte
    if (Input.trigger?(Input::DOWN) and @num == 0) or (Input.trigger?(Input::LEFT) and @num == 1) or (Input.trigger?(Input::UP) and @num == 2) or (Input.trigger?(Input::RIGHT) and @num == 3)
      if @phase == 0
        @spriteset.set_action(true, @cible.index, "pas")
        @num = rand(4)
        @win_qte.refresh(@num)
        @time = QTE_ctratk::Phase2
        @phase = 1
      elsif @phase == 1
        @phase = 2
        @time = 0
      end
    elsif (Input.trigger?(Input::DOWN) and @num != 0) or (Input.trigger?(Input::LEFT) and @num != 1) or (Input.trigger?(Input::UP) and @num != 2) or (Input.trigger?(Input::RIGHT) and @num != 3)
      @time = 0
    end
    fin_qte if @time == 0
    @time -= 1
  end
  def fin_qte
    @win_qte.visible = false
    case @phase
    when 0
      @spriteset.set_action(false, @active_battler.index, "fin")
      dmg = @cible.result_atk(@active_battler)
      @spriteset.set_damage_pop(true, @cible.index, dmg)
      @cible.hp -= dmg
      wait(40)
    when 1
      @spriteset.set_action(false, @active_battler.index, "RESET_POSITION")
      @spriteset.set_action(true, @cible.index, "RESET_POSITION")
      wait(40)
    when 2
      @spriteset.set_action(true, @cible.index, "ctratk")
      if @cible.weapon_id != 0
        wait(5)
        @active_battler.animation_id = $data_weapons[@cible.weapon_id].animation_id
      end
      wait(10)
      dmg = @active_battler.result_atk(@cible)
      @spriteset.set_damage_pop(false, @active_battler.index, dmg)
      @active_battler.hp -= dmg
      @active_battler.perform_collapse if @active_battler.hp <= 0
      wait(40)
      @spriteset.set_action(false, @active_battler.index, "RESET_POSITION")
      @spriteset.set_action(true, @cible.index, "RESET_POSITION")
      wait(40)
    end
    @win_qte.dispose
    @win_qte = nil
  end
end
###################################
class Win_QTE < Window_Base
  def initialize(x, y, num)
    super(x, y, 24 + 32, 24 + 32)
    refresh(num)
  end
  def refresh(num)
    self.contents.clear
    bitmap = Cache.system(QTE_ctratk::Nom)
    self.contents.blt(0, 0, bitmap, Rect.new(num * 24, 0, 24, 24))
  end
end
###################################
class Game_Actor < Game_Battler
  def use_contrattack?
    for id in QTE_ctratk::ID_SKILL
      return true if skill_id_learn?(id)
    end
    return false
  end
end
###################################
class Game_Battler
  def result_atk(attacker)
    make_attack_damage_value(attacker)
    dmg = @hp_damage
    @hp_damage = 0
    return dmg
  end   
end
###################################

Inserer ceci dans le script "Scene_Battle" :

Code:
      elsif @win_qte != nil
        update_qte

ADD-ON SBS Tankentai : QTE Contrattack Endroit-873766

Et importer ceci dans le repertoire "System" :

ADD-ON SBS Tankentai : QTE Contrattack Fleche-87377c

Pour qu'une attaque ennemi soit "contre-attaquable", elle doit utiliser la sequence prevu dans le script ("atk").
Si vous utilisez celle de base, rien ne se passera ( impossible de contre-attaquer même si la competence est possedé ).
( Configuration au environ de la ligne 1050 du script de config' )

Code:
  def base_action
    case @enemy_id
    when 1
      return "atk"
    end
    # Default action for all unassigned Enemy IDs.
    return "ENEMY_UNARMED_ATK"
  end

A partir de là, lorsque l'ennemi attaquera, il y aura trois cas possible :

- Soit le héros ne possede pas la competence "Contrattack" ( ID defini en debut de script ), soit le joueur rate la réaction : l'ennemi attaque normalement.

- Soit le héros possede la competence, le joueur réagi correctement pour l'esquive mais rate la contrattack : aucun degats.

- Soit le héros possede la competence, le joueur réagi correctement pour l'esquive et pour la contrattack : l'ennemi attaquant subira les degats.

ASHKA
Widowan
Widowan
Fondateur
Nombre de messages : 1435
Age : 37
Localisation : France
Distinction : Sergent
Tyran professionnel
Date d'inscription : 15/12/2007
https://www.rpgmakervx-fr.com

ADD-ON SBS Tankentai : QTE Contrattack Empty Re: ADD-ON SBS Tankentai : QTE Contrattack

le Mar 25 Nov 2008 - 15:50
Contrôle anti-dopage pour Ashka ! ADD-ON SBS Tankentai : QTE Contrattack 140807
C'est vachement intéressant, et fallait y penser, good job !

_________________
"Si le monde appartiens à ceux qui se lèvent tôt, et si le royaume des cieux est destiné aux simples d'esprit, alors j'essaye juste de squatter un peu..."
Elscorto
Elscorto
Membre

Nombre de messages : 486
Age : 34
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

ADD-ON SBS Tankentai : QTE Contrattack Empty Re: ADD-ON SBS Tankentai : QTE Contrattack

le Mar 25 Nov 2008 - 16:00
@Widowan a écrit:Contrôle anti-dopage pour Ashka ! ADD-ON SBS Tankentai : QTE Contrattack 140807

Mais non,t'est malade,après on pourrait plus avoir d'excellent script comme celui-ci

Vas y mon garçon,continue a te prendre des substances illictes,c'est très bien ce que tu fais.
Merci de ton partage ADD-ON SBS Tankentai : QTE Contrattack 697634
PolKoZz
PolKoZz
Membre

Nombre de messages : 61
Age : 29
Localisation : Sur le trone
Distinction : aucune
Date d'inscription : 10/11/2008

ADD-ON SBS Tankentai : QTE Contrattack Empty Re: ADD-ON SBS Tankentai : QTE Contrattack

le Mar 25 Nov 2008 - 16:17
Hum incitation à la consommation hein ... xD
Excellent tuto mais a force d'appuyer toujours sur la touche pour esquiver, les combats deviendront trop facile.
Donc très bon script mais à utiliser avec modération
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

ADD-ON SBS Tankentai : QTE Contrattack Empty Re: ADD-ON SBS Tankentai : QTE Contrattack

le Mar 25 Nov 2008 - 17:06
Je suis clean ... drunken
( Euh, tu recherche juste les anabolisants, c'est ça ? )

PolKoZz : C'est pour cela que l'on peut modifier le temps de réaction.
Mais bon, je peux sans doute ajouter un peu "d'agilité" dans la soupe pour la prochaine fois !!

ASHKA
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum