Partagez
Aller en bas
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu [Résolu] Combat : réaction des ennemis.

le Mar 17 Déc 2013 - 18:01
Salut à tous.

Ayant épluché de nombreux sujets n'ayant pas la réponse, je me permets de mettre la question sur ce forum.

Voilà ce que j'aimerai faire :
Imaginons la situation suivante :


Le héro attaque A, mais cela a comme conséquence que B et C balance un soin sur A avec un petit texte (ça c'est optionnel) genre "vous inquiétez pas chef, on vous couvre!" (Qui apparaît comme une fenêtre de dialogue banal)
Est-ce que c'est possible ce genre d'action?

Merci d'avance.


Dernière édition par Tohisu le Lun 10 Fév 2014 - 17:58, édité 2 fois
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mar 17 Déc 2013 - 18:51
Oui je pense que c'est plus ou moins possible avec cette page de la base de données.

Regarde dans le panneau du dessous (événements).

avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mar 17 Déc 2013 - 19:25
Merci de ta réponse.

Grâce a ça j'ai pu faire apparaître le message en plein combat, ce qui était une de mes préoccupations.
Cependant, je n'arrive toujours pas à faire la chose la plus importante, à savoir faire réagir les ennemis à une condition.
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mar 17 Déc 2013 - 20:07
Je vais tenter de voir si c'est possible, je ne suis pas adepte de ce système de combat donc pas habitué , je te tiens au courant.

En attendant si quelqu'un passe par là...


PS : Par contre tu sais utiliser le nombre de tours en condition.
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mer 18 Déc 2013 - 12:51
Alors? Personne n'aurait une idée?
avatar
crackerwood
Membre

Nombre de messages : 343
Age : 33
Localisation : Derrière son pc y parait
Distinction : aucune
Date d'inscription : 03/08/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mer 18 Déc 2013 - 13:08
Salut. Il existe plusieurs script de contre attaque. J'en ai trouvé deux mais je ne les ai pas testé. A voir si on ne peut pas gérer de cette façon.

Script 1:

Code:
==============================================================================
 ** Counter Skills
 Author: Tsukihime
 Date: May 25, 2012
------------------------------------------------------------------------------
 ** Change log
 May 25
   -initialized rpg objects
 May 17
   -added skill-counter selection in battle
 May 16, 2012
   -Initial release
------------------------------------------------------------------------------
 This script allows you to specify a counter-skill that is used when
 you counterattack. It extends the counter-attack system by allowing
 you to counter-attack with something other than the basic Attack skill
 
 The counter-skill can be applied to both offensive and support skills.
 If the skill targets an enemy, it will select the enemy that just attacked
 you, or all enemies if possible.
 
 If the skill targets an ally, it will be used on the actor, or all members
 in the battle party if possible.
 
 To use a counter-skill, go to the Skills menu and press the "A" key.
 If you are not using the default keyboard, the skill is set to the "X" key
 in the game's settings.
 
 The same applies during battle.
 You can customize this key below
 
 There are three options when it comes to specifying counter-skills.
 1 - You can choose to allow all skills to be chosen.
 2 - You can choose only certain skill types to be chosen.
 3 - You can also choose to tag certain skills with <counter-skill>.
 
 Note that 2 and 3 can be combined together
==============================================================================
=end
$imported = {} if $imported.nil?
$imported["Tsuki_CounterSkill"] = true
#==============================================================================
# ** Configuration.
#==============================================================================
module Tsuki
  module Counter_Skill
    # Highlight color for counterskill
    Counter_Color = Color.new(255, 0, 0, 255)
    
    # button to use for counter-skill selection
    Button = :Y
    
    # can switch in battle?
    Battle_Can_Switch = false
    
    # Which skills does can be used as counter skills apply to?
    # If true, all skills can be selected
    All_Skills = false
    
    # If true, checks tagged skills as well
    Tagged_Skills = true
    
    # Checks the following skill types
    Skill_Types = [2]
    
    Counter_Regex = /<counter-skill>/i
    Default_Counter = /<counter-skill:?\s*(\d+)\s*>/i
  end
end
#==============================================================================
# ** Rest of the script.
#==============================================================================
module RPG
  class Skill < UsableItem
    include Tsuki::Counter_Skill
    
    def is_counter_skill?
      counter_flag
    end
    
    def counter_flag
      return @counter_flag unless @counter_flag.nil?
      return @counter_flag = !self.note.scan(Counter_Regex).empty?
    end
  end
  
  class Enemy < BaseItem
    include Tsuki::Counter_Skill
    
    def counter_skill
      return @counter_skill unless @counter_skill.nil?
      res = Default_Counter.match(self.note)
      return @counter_skill = res ? res[1].to_i : 1
    end
  end
  
  class Actor < BaseItem
    include Tsuki::Counter_Skill
    
    def counter_skill
      return @counter_skill unless @counter_skill.nil?
      res = Default_Counter.match(self.note)
      return @counter_skill = res ? res[1].to_i : 1
    end
  end
end

class Game_Battler < Game_BattlerBase
  
  attr_accessor :counter_skill
  alias tsuki_counter_skill_initialize_battler initialize
  def initialize
    tsuki_counter_skill_initialize_battler
    @counter_skill = $data_skills[attack_skill_id]
  end
end

class Game_Actor < Game_Battler
  
  alias tsuki_counter_skill_initialize_actor initialize
  def initialize(actor_id)
    tsuki_counter_skill_initialize_actor(actor_id)
    @counter_skill = actor.counter_skill ? $data_skills[actor.counter_skill] : $data_skills[attack_skill_id]
  end
end

class Game_Enemy < Game_Battler
  alias tsuki_counter_skill_initialize_enemy initialize
  def initialize(index, enemy_id)
    tsuki_counter_skill_initialize_enemy(index, enemy_id)
    @counter_skill = $data_skills[enemy.counter_skill]
  end
end

class Scene_Battle < Scene_Base
  
  # note that target is the battler that was targeted in this turn
  # @subject is the attacker
  def invoke_counter_attack(target, item)
    skill = target.counter_skill
    if target.usable?(skill)
      target.pay_skill_cost(skill)
      targets = make_targets(target, @subject, skill)
      @log_window.display_counter(target, skill)
      show_animation(targets, skill.animation_id)
      apply_counterattack(targets, target, skill)
    end
  end
  
  def apply_counterattack(targets, user, skill)
    targets.each do |target|
      target.item_apply(user, skill)
      refresh_status
      @log_window.display_action_results(target, skill)
    end
  end
  
  def make_targets(target, subject, skill)
    action = Game_Action.new(target)
    action.set_skill(skill.id)
    action.make_targets
  end
end

class Scene_Skill < Scene_ItemBase
  include Tsuki::Counter_Skill
  
  alias tsuki_counter_skill_item_window create_item_window
  def create_item_window
    tsuki_counter_skill_item_window
    @item_window.set_handler(:counter_skill, method(:on_counter_skill))
  end
  
  def on_counter_skill
    @item_window.set_counter_skill
    @item_window.activate
  end
end

class Scene_Battle < Scene_Base
  
  alias tsuki_counter_skill_battleskill_window create_skill_window
  def create_skill_window
    tsuki_counter_skill_battleskill_window
    @skill_window.set_handler(:counter_skill, method(:on_counter_skill))
  end
  
  def on_counter_skill
    @skill_window.set_counter_skill
    @skill_window.activate
  end
end

class Window_SkillList < Window_Selectable
  include Tsuki::Counter_Skill
  
  def is_counter_skill?(skill)
    @actor && @actor.counter_skill.id == skill.id
  end
  
  def set_counter_skill
    skill = item
    if valid_counter_skill?(skill)
      update_counter_skill(skill)
    end
    refresh
  end
  
  def valid_counter_skill?(skill)
    return false unless skill
    return true if All_Skills
    return true if Skill_Types.include?(skill.stype_id)
    return skill.is_counter_skill? if Tagged_Skills
    return false
  end
  
  def update_counter_skill(skill)
    if @actor.counter_skill == skill
      @actor.counter_skill = $data_skills[@actor.attack_skill_id]
    else
      @actor.counter_skill = skill
    end
  end
  
  def draw_item_name(item, x, y, enabled = true, width = 172)
    return unless item
    draw_icon(item.icon_index, x, y, enabled)
    if is_counter_skill?(item)
      change_color(Counter_Color, enabled)
    else
      change_color(normal_color, enabled)
    end
    draw_text(x + 24, y, width, line_height, item.name)
  end
  
  alias tsuki_counter_skill_process_handling process_handling
  def process_handling
    return unless open? && active
    return process_x if handle?(:counter_skill) && Input.trigger?(Tsuki::Counter_Skill::Button)
    tsuki_counter_skill_process_handling
  end
  
  def process_x
    Sound.play_cursor
    Input.update
    deactivate
    call_handler(:counter_skill)
  end
end

class Window_BattleSkill < Window_SkillList
  include Tsuki::Counter_Skill

  def valid_counter_skill?(skill)
    return false unless Battle_Can_Switch
    super
  end
end

class Window_BattleLog < Window_Selectable
 
  #--------------------------------------------------------------------------
  # * Display Counterattack
  #--------------------------------------------------------------------------
  def display_counter(target, item)
    Sound.play_evasion
    add_text("%s counters with %s!" %[target.name, item.name])
    wait
    back_one
  end
end

Script 2:

Code:
#==============================================================================
# ** Victor Engine -  Action Counter
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
#  v 1.00 - 2012.07.16 > First release
#  v 1.01 - 2012.12.24 > Compatibility with Counter Options
#------------------------------------------------------------------------------
#  This script allows to setup a trait givas a chance of countering actions
# based on the actions or their types. That way you can create traits that
# makes the battler retaliate when hurt with specific skills or items.
#------------------------------------------------------------------------------
# Compatibility
#   Requires the script 'Victor Engine - Basic Module' v 1.19 or higher
#   If used with 'Victor Engine - Counter Options' place this bellow it.
#
# * Alias methods
#   class Game_Battler < Game_BattlerBase
#     def item_cnt(user, item)
#
#   class Window_BattleLog < Window_Selectable
#     def display_counter(target, item)
#
#------------------------------------------------------------------------------
# Instructions:
#  To instal the script, open you script editor and paste this script on
#  a new section bellow the Materials section. This script must also
#  be bellow the script 'Victor Engine - Basic'
#
#------------------------------------------------------------------------------
# Actors, Classes, Enemies, Weapons, Armors and States note tags:
#   Tags to be used on Actors, Classes, Enemies, Weapons, Armors and States
#   note boxes.
#
#  <skill counter x: +y%>   <item counter x: +y%>
#  <skill counter x: -y%>   <item counter x: -y%>
#   Setup the skill or item and a rate of counter for that action
#     x : ID of the skill or item
#     y : counter chance
#
#  <skill type counter x: +y%>   <item type counter x: +y%>
#  <skill type counter x: -y%>   <item type counter x: -y%>
#   Setup the skill or item type and a rate of counter for that actions
#     x : ID of the skill type or item type
#     y : counter chance
#
#------------------------------------------------------------------------------
# Additional instructions:
#
#  If the action is physical, the action counter chance is added to the
#  counter attack chance.
#
#  You can edit the log window message on the module Vocab withing the script
#
#==============================================================================

#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
#   Setting module for the Victor Engine
#==============================================================================

module Victor_Engine
  #--------------------------------------------------------------------------
  # * required
  #   This method checks for the existance of the basic module and other
  #   VE scripts required for this script to work, don't edit this
  #--------------------------------------------------------------------------
  def self.required(name, req, version, type = nil)
    if !$imported[:ve_basic_module]
      msg = "The script '%s' requires the script\n"
      msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
      msg += "Go to http://victorscripts.wordpress.com/ to download this script."
      msgbox(sprintf(msg, self.script_name(name), version))
      exit
    else
      self.required_script(name, req, version, type)
    end
  end
  #--------------------------------------------------------------------------
  # * script_name
  #   Get the script name base on the imported value
  #--------------------------------------------------------------------------
  def self.script_name(name, ext = "VE")
    name = name.to_s.gsub("_", " ").upcase.split
    name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
    name.join(" ")
  end
end

$imported ||= {}
$imported[:ve_action_counter] = 1.01
Victor_Engine.required(:ve_action_counter, :ve_basic_module, 1.19, :above)

#==============================================================================
# ** Vocab
#------------------------------------------------------------------------------
#  This module defines terms and messages. It defines some data as constant
# variables. Terms in the database are obtained from $data_system.
#==============================================================================

module Vocab

  # Action Counter Message
  VE_ActionCounter = "%s countered the %s!"
  
end

#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. It's used as a superclass of the Game_Actor
# and Game_Enemy classes.
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :action_countered
  #--------------------------------------------------------------------------
  # * Alias method: item_cnt
  #--------------------------------------------------------------------------
  alias :item_cnt_ve_action_counter :item_cnt
  def item_cnt(user, item)
    result = item_cnt_ve_action_counter(user, item)
    action = action_counter(item)
    @action_countered = action > result
    result + action
  end
  #--------------------------------------------------------------------------
  # * New method: action_counter
  #--------------------------------------------------------------------------
  def action_counter(item)
    item_counter(item) + item_type_counter(item)
  end
  #--------------------------------------------------------------------------
  # * New method: item_counter
  #--------------------------------------------------------------------------
  def item_counter(item)
    get_action_counter(item.skill? ? "SKILL" : "ITEM", item.id)
  end
  #--------------------------------------------------------------------------
  # * New method: item_type_counter
  #--------------------------------------------------------------------------
  def item_type_counter(item)
    type = item.skill? ? "SKILL TYPE" : "ITEM TYPE"
    item.type_set.inject(0.0) {|r, i| r += get_action_counter(type, i) }
  end
  #--------------------------------------------------------------------------
  # * New method: get_action_counter
  #--------------------------------------------------------------------------
  def get_action_counter(type, id)
    regexp = /<#{type} COUNTER #{id}: ([+-]?\d+)%?>/i
    get_all_notes.scan(regexp).inject(0.0) {|r| r += ($1.to_i / 100.0) }
  end
end

#==============================================================================
# ** Window_BattleLog
#------------------------------------------------------------------------------
#  This window shows the battle progress. Do not show the window frame.
#==============================================================================

class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # * Alias method: display_counter
  #--------------------------------------------------------------------------
  alias :display_counter_ve_action_counter :display_counter
  def display_counter(target, item)
    if target.action_countered
      Sound.play_evasion
      add_text(sprintf(Vocab::VE_ActionCounter, target.name, item.name))
      wait
      back_one unless $imported[:ve_animated_battle]
    else
      display_counter_ve_action_counter(target, item)
    end
  end
end
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Mer 18 Déc 2013 - 13:48
Merci je vais les tester et je vous tiens au courant.
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 14:20
a vrai dire j'ai pas réussi à le faire marcher. (Je suis au courant qu'il faut mettre dans les notes.

Et honnêtement, même si j'y arriverai, je ne pense que j'arriverai à faire ce que j'avais projeté de faire.
Une autre idée?
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 18:35
C'est bien dommage pourtant les scripts que Crackerwood t'a donné devraient fonctionner, suffit de lire le début des scripts pour comprendre comment ils fonctionnent.

Et honnêtement, même si j'y arriverai, je ne pense que j'arriverai à faire ce que j'avais projeté de faire

Tu attends quoi d'autres comme idées ?
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 18:41
J'ai réussi.
Sans script.

Merci quand même.
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 18:51
Ah c'est bien et tu sais nous dire comment si jamais d'autres personnes voudraient faire de même ?
avatar
Ewaldar
Membre

Nombre de messages : 1387
Age : 25
Localisation : Suisse
Distinction : aucune
Date d'inscription : 29/12/2011
http://ewaldar.wixsite.com/les-ames-perdues

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 19:49
Il y a les options forcées des combats qui doivent permettre de résoudre les problèmes ci-dessus. Ainsi, si telle ou telle action a été faite (genre pv en dessous de x %, interrupteur activé, etc.) alors faire un message et un soin.

Effectivement, il est utile de savoir, sinon, comment tu as résolu le problème ?
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:26
Voilà comment j'ai fait :

>>>>>>Pour le message "Vous inquiétez pas on vous couvre" :<<<<<<<
-> Base de donnée -> Groupes -> Sélectionnez le groupe de combat à qui vous voulez appliquer ce bordel.
-> Dans la page événement de ce groupe, vous sélectionnez donc "Conditions" :

-Fin du tour (le message sera émie à la fin du tour, car le soin sera fait également à la fin du tour pour que cela évite de remplacer l'attaque par le soin, permettant à B ou C d'agir 2 fois dans le même tour : l'attaque puis le soin.)

-Ennemi -> A -> 99% ou moins.

-> N'oubliez pas de préciser, à droite, si il doit prononcer cette phrase "Une seule fois" ou "Chaque tour". (Une seule fois dans mon cas.)

Voilà ce que ça donne en image :
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:28
Ah oui et évidement vous faites le reste comme un événement banal : Afficher un message puis écrivez-le...


avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:29
Ben voila c'était super simple en ait ^^

Bonne continuation !


PS : Oublie pas le "résolu" dans le titre de ton post.
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:38
>>>>>>Pour le soin sur le boss à chaque attaque effectuée sur lui :<<<<<<
Voilà comment j'ai fait :
-> Base de donnée -> Groupes -> Sélectionnez le groupe de combat à qui vous voulez appliquer ce bordel.
-> Dans la page événement de ce groupe, vous sélectionnez donc "Conditions" :

-Fin du tour (le message sera émie à la fin du tour, car le soin sera fait également à la fin du tour pour que cela évite de remplacer l'attaque par le soin, permettant à B ou C d'agir 2 fois dans le même tour : l'attaque puis le soin.)

-Ennemi -> A -> 99% ou moins.

-> A chaque tour.

-> Créer ensuite l'événement : sur la page 3 des événements vous avez "Forcer une action" -> Ennemi -> B (Bandit dans mon cas) -> Compétence : Soins -> Cible "Index 1" (En fait si j'ai bien compris l'index c'est la première cible qui sera affectée à la technique. Exemple, imaginons que dans le combat contre A, B  et C, lorsque vous sélectionnez "Attaquer", la cible par défaut sera A. C'est grosso-merdo "L'index 1". "Index 2" pour B et "Index 3" pour C.

ATTENTION : il faut créer 2 fois cet événement : une fois pour B et une fois pour C, comme ça les 2 soigneront le boss en cas d'attaque (si le montant de l'attaque > 2 soins.)

Voici ce que ça donne : (page 1 = le ptit dialogue, page 2 soin pour B et page 3 soin pour C, logique...)


J'en ai chier mais j'y suis arrivé. J'ai découvert RPG Maker y a moins d'un mois....
avatar
Tohisu
Membre

Nombre de messages : 125
Localisation : Metz
Distinction : aucune
Date d'inscription : 03/12/2013

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:40
Comment j'fais pour le [Résolu]?
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: [Résolu] Combat : réaction des ennemis.

le Jeu 19 Déc 2013 - 22:42
Edite ton premier post et change le titre Smile
Contenu sponsorisé

Résolu Re: [Résolu] Combat : réaction des ennemis.

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