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



Le deal à ne pas rater :
Fnac : 2 Funko Pop achetées : le 3ème offert (large sélection de ...
Voir le deal

Partagez
 

 [VX] Ennemi Invoqueur

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Garruk
Aventurier Lv.16
Aventurier Lv.16
Garruk


Age : 39
Inscrit le : 03/09/2009
Messages : 1503

[VX] Ennemi Invoqueur Empty
MessageSujet: [VX] Ennemi Invoqueur   [VX] Ennemi Invoqueur Icon_minitimeVen 11 Fév 2011 - 15:18

Voici un script que j'utilisais dans mon ancien projet, comme on me l'ait souvent demandé j'ai décidé de vous le partager.

Auteur : modern algebra
Utilité :

• Ce script permet de faire en sorte que vos ennemis puissent invoquer d'autres ennemis
• Vous pouvez régler le nombre de monstres qui pourra être invoqué dans un combat
• Régler la position des monstres

Script
A coller au-dessus de Main.

Code:
#==============================================================================
#    Enemy Summon Skill
#    Version: 1.0
#    Author: modern algebra (rmrk.net)
#    Date: May 8, 2010
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Description:
#
#    This script allows you to make skills for enemies where they can summon or
#  call additional enemies to the battlefield. This is NOT a summon skill that
#  can be used by actors - it can ONLY be used by enemies.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#
#    Place this script above Main and below Materials in its own slot in the
#  Script Editor (F11).
#
#    You can set up some basic configuration options at line 52. Please see the
#  surrounding comments to see what each does.
#
#    To create a summoning skill (again, this skill can ONLY be used by
#  enemies), all you need to do is put the following code (can be changed at
#  line 69 if you desire):
#
#      \SUMMON_ENEMY[enemy_id, x, y, chance]
#        enemy_id : the ID of the enemy it can summon
#        x : the additional pixels along the axis the summoned creature is from
#          its summoner. If omitted, it defaults to the value at line 64.
#        y : the additional pixels along the axis the summoned creature is from
#          its summoner. If omitted, it defaults to the value at line 67.
#        chance: of the potential candidates for summoning, how likely this one
#          will be chosen over the others. If omitted, this defaults to 1.
#
#    As you can probably tell, you can place a number of these codes in the
#  same notebox and thus you can make the same skill potentially summon
#  different enemies, and you can control that through the chance.
#
#  EXAMPLES:
#
#    A skill with its notebox set up like this:
#      \summon_enemy[1, 35, 45, 3]
#      \summon_enemy[2, 25, 35, 1]
#
#  Would, when it succeeds (which is governed directly by the hit ratio of the
# skill) summon the enemy with ID 1 (Default: Slime) 75% of the time and the
# enemy with ID 2 (Default: Bat) 25% of the time, and the position, if it is
# a slime would be 35 pixels to the right of the summoner and 45 pixels down,
# or if it is the bat, then 25 pixels to the right of the summoner and 35
# pixels down. The chances are 75-25 because 3 + 1 = 4, which means that 3/4
# times the slime will be summoned and 1/4 times the bat will be summoned.
#==============================================================================
#  CONFIGURATION
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new constant - MAES_VOCAB_SUMMON_FAILURE; MAES_MAX_TROOP_SIZE;
#      MAES_DEFAULT_X_PLUS; MAES_DEFAULT_Y_PLUS; MAES_NOTECODE
#==============================================================================
# Message shown when a summon skill fails.
MAES_VOCAB_SUMMON_FAILURE = "%s failed to summon ally!"
# The maximum number of enemies in a troop (caps number of summons permitted)
MAES_MAX_TROOP_SIZE = 5
# The default x offset for a summoned enemy from its summoner. If you manually
#  set this in the note box, this value will not be used.
MAES_DEFAULT_X_PLUS = 35
# The default y offset for a summoned enemy from its summoner. If you manually
#  set this in the note box, this value will not be used.
MAES_DEFAULT_Y_PLUS = 25
# This is the label code you need to put into a notebox. It is RegExp
MAES_NOTECODE = "\\SUMMON_ENEMY"

#==============================================================================
#  ** RPG::Skill
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new methods - ma_call_ally?; ma_call_ally
#==============================================================================

class RPG::Skill
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Call Ally Skill?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_call_ally?
    return self.note[/#{MAES_NOTECODE}\[\d+.*?\]/i] != nil
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Call Ally Stats
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_call_ally
    miss = rand (100)
    return nil if self.hit < miss
    possibilities = []
    note = self.note.dup
    note.gsub! (/#{MAES_NOTECODE}\[(\d+)[,;]?\s*(-?\d*)[,;]?\s*(-?\d*)[,;]?\s*(\d*)\]/i) { |match|
      id = $1.to_i
      x = $2.empty? ? MAES_DEFAULT_X_PLUS : $2.to_i
      y = $3.empty? ? MAES_DEFAULT_Y_PLUS : $3.to_i
      percent = $4.empty? ? 1 : $4.to_i
      (percent).times do possibilities.push ([id, x, y]) end
      ""
    }
    return *possibilities[rand(possibilities.size)]
  end
end

#==============================================================================
# ** Game Enemy
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    attr_accessor - summon_count
#    aliased method - initialize, skill_can_use?
#==============================================================================

class Game_Enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Public Instance Variables
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  attr_accessor :ma_summon_count
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias moda_clally_intz_7uj2 initialize
  def initialize (*args)
    @ma_summon_count = 0
    moda_clally_intz_7uj2 (*args) # Run Original Method
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Skill Can Use?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias moral_caly_skllcnuse_6yh1 skill_can_use?
  def skill_can_use? (skill, *args)
    return false if skill.ma_call_ally? && $game_troop.members.size >= MAES_MAX_TROOP_SIZE
    return moral_caly_skllcnuse_6yh1 (skill, *args)
  end
end

#==============================================================================
# ** Game_Actor
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - skill_can_use?
#==============================================================================

class Game_Actor
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Skill Can Use?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modbr_ess_skcnuse_7uj2 skill_can_use?
  def skill_can_use? (skill, *args)
    return false if skill.ma_call_ally?
    return modbr_ess_skcnuse_7uj2 (skill, *args)
  end
end

#==============================================================================
# ** Game Troop
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new method - ma_call_ally
#==============================================================================

class Game_Troop
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Call Ally
  #    user    : the enemy using the skill
  #    enemy_id : the ID of the enemy being summoned
  #    x, y    : screen coordinates to display enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_call_ally (user, enemy_id, x, y)
    user.ma_summon_count += 1
    enemy = Game_Enemy.new (@enemies.size, enemy_id)
    good_position = false
    while !good_position
      enemy.screen_x = user.screen_x + (x*user.ma_summon_count)
      enemy.screen_y = user.screen_y + (y*user.ma_summon_count)
      good_position = true
      @enemies.each { |baddie|
        if baddie.screen_x == enemy.screen_x && baddie.screen_y == enemy.screen_y
          user.ma_summon_count += 1
          good_position = false
        end
      }
    end
    @enemies.push(enemy)
    make_unique_names
    return enemy
  end
end

#==============================================================================
# ** Spriteset_Battle
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new method - ma_call_enemy
#==============================================================================

class Spriteset_Battle
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Call Enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_call_enemy (battler)
    @enemy_sprites.push(Sprite_Battler.new(@viewport1, battler))
  end
end

#==============================================================================
# ** Scene_Battle
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - execute_action_skill
#==============================================================================

class Scene_Battle
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Execute Action Skill
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias malb_callally_exactsk_5hy1 execute_action_skill
  def execute_action_skill (*args)
    skill = @active_battler.action.skill
    if skill.ma_call_ally?
      enemy_id, x, y = skill.ma_call_ally
      if enemy_id.nil?
        text = sprintf (MAES_VOCAB_SUMMON_FAILURE, @active_battler.name)
        @message_window.add_instant_text(text)
        wait (30)
        return
      else
        target = $game_troop.ma_call_ally (@active_battler, enemy_id, x, y)
        @spriteset.ma_call_enemy (target)
        display_animation([target], skill.animation_id)
      end
    end
    malb_callally_exactsk_5hy1 (*args) # Run Original Method
  end
end

Fonctionnement
Dans le script

• Ligne 61 vous avez ceci:
Code:
MAES_MAX_TROOP_SIZE = 5
C'est le nombre max d'ennemi qui pourront être invoqués en combat, attention si vous augmentez le nombre risque de lag. ^^

• Ensuite la ligne 64 et 67, vous avez ceci:
Code:
MAES_DEFAULT_X_PLUS = 35
Code:
AES_DEFAULT_Y_PLUS = 25
C'est la position de l'ennemi par défaut qui sera invoqué, à noter que cette ligne prendra effet si vous ne mettez aucune information sur leur position dans la BDD.

• La ligne 69 (j'adore ce chiffre) vous avez ceci
Code:
\\SUMMON_ENEMY
Ce sera le code que nous utiliserons dans la base de données quand nous crérons une compétence, d'ailleurs nous y arrivons.

Dans la BDD

Créer une compétence on va dire Summon, dans la notebox nous allons mettre:
Code:
\summon_enemy[1, 25, 45, 3]

• 1 = ID du monstre à invoqué
• 25 = La position X, si vous ne mettez rien, il reprendra celle mise dans le script c'est-à-dire la ligne 64 "35"
• 45 = La position Y, si vous ne mettez rien, il reprendra celle mise dans le script c'est-à-dire la ligne 67 "25"
• 3 =75% Les chances qu'un ennemi soit invoqué par sont invoqueur seront de 3/4, parce que 3 + 1 = 4, qui le signifie les 3/4 du temps l'ennemi invoquera un monstre, bien sûr, on peut le modifier en ajoutant cette compétence à l'ennemi dans les actions possibles et la régler tous les 10 tours.

Par contre j'ai noté un bug, si un de vos héros n'a aucune compétence et que vous appuyez sur "entrer" le jeu plantera, enfin voilà c'est le seul que j'ai trouvé. =)
Revenir en haut Aller en bas
BARVACHE
Vache Folle
Vache Folle
BARVACHE


Masculin Age : 29
Inscrit le : 22/05/2010
Messages : 3005

[VX] Ennemi Invoqueur Empty
MessageSujet: Re: [VX] Ennemi Invoqueur   [VX] Ennemi Invoqueur Icon_minitimeVen 11 Fév 2011 - 16:47

Et bien, voilà un bon script^^
Compatible SBS?
Je ne pense pas l'utiliser vu qu'il possède des bugs(d'ailleurs je t'aurais conseillé de le faire débuguer avant de poster mais bon o/) mais il pourra servir, notamment aux fans de DQ(et j'en suis un).
Merci du partage quoi^^
Revenir en haut Aller en bas
Garruk
Aventurier Lv.16
Aventurier Lv.16
Garruk


Age : 39
Inscrit le : 03/09/2009
Messages : 1503

[VX] Ennemi Invoqueur Empty
MessageSujet: Re: [VX] Ennemi Invoqueur   [VX] Ennemi Invoqueur Icon_minitimeVen 11 Fév 2011 - 18:53

De rien. =)
Oui compatible avec le SBS avec ou sans Atb et le système de combat de base, pas testé les autres.
C'est le seul bug qu'il possède et pour le faire débugger il suffit de mettre une capacité à tous les actors. ^^
(Ok je sors).
Revenir en haut Aller en bas
Contenu sponsorisé




[VX] Ennemi Invoqueur Empty
MessageSujet: Re: [VX] Ennemi Invoqueur   [VX] Ennemi Invoqueur Icon_minitime

Revenir en haut Aller en bas
 

[VX] Ennemi Invoqueur

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

 Sujets similaires

-
» Nom et HP de l'ennemi en combat [Résolu]
» Importer un ennemi [GTBS]
» Ennemi avec plusieurs armes
» [Resolu] Combat : Ennemi non ciblable
» Charas d'un ennemi de Super Mario 64

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX - RGSS2 :: Combat-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit