Partagez
Aller en bas
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Drop conditionnel & multi-drop Empty Drop conditionnel & multi-drop

le Dim 11 Juil 2010 - 17:45
Drop conditionnel & multi-drop


Auteur : Blockade
Date : 11/07/2010
Niveau : Facile
Version : 1.0


Grâce à ce script, vous ne serez plus limité à 2 objets, droppable sur chaque monstre ! De plus vous pourrez faire en sorte que le l'objet soit obtenu à condition qu'un interrupteur est activé, ce qui peut être pratique pour dropper du contenu uniquement si une quête est activée.

Description du script :
- Permet d'avoir du drop supplémentaire
- Permet d'avoir le drop que si un interrupteur est activé

­S­cript :
Code:
#===============================================================================
# ▼ [VX] Drop conditionnel
#------------------------------------------------------------------------
# Blockade script Library - Drop conditionnel
# Date : 11/07/2010
# Niveau : Facile
# Version : 1.0
# Forum d'origine : http://rpg-maker-vx.bbactif.com/forum.htm
#
# Grâce à ce script, vous ne serez plus limité à 2 objets, droppable sur chaque monstre. De plus
# vous pourrez faire en sorte que le l'objet soit obtenu à condition qu'un interrupteur est activé.
#=======================================================================
# ▼ Mises à jour
# -------------------------------------------------------------------------
# ¤ 11/07/2010 -  Version 1.0 - Création du script
#=======================================================================
# ▼ Fonctionnalités
# -------------------------------------------------------------------------
# - Permet d'avoir du drop supplémentaire
# - Permet d'avoir le drop que si un interrupteur est activé
#=======================================================================
# ▼ Installation
# --------------------------------------------------------------------------
#  Mettre le script au dessus de Main.
#=======================================================================
# ▼ Utilisation
# --------------------------------------------------------------------------
# Tout se fait dans la base de données par besoin de toucher au script !
# Dans la partie "note" de l'ennemi mettez une expression sous la forme :
#  - <drop type_objet:id_objet chance_de_drop,interrupteur>
#
#  > type_objet : O si votre drop, est un Objet
#                            A si votre drop est une Arme
#                            E si votre drop est un Equipement (armure,bouclier etc...)
#
#  > id_objet : mettez l'ID de l'objet/arme/equipement ici
#
# > chance_de_drop : mettez ici un nombre qui permettra de définir la chance que l'objet
#                                      soit droppé (comme dans la base de données). Si vous mettez 45
#                                      par exemple la chance de le dropper sera d'1/45.
#
# > interrupteur : si vous voulez que votre drop soit uniquement droppable si un interrupteur
#                            soit activé, mettez l'ID de votre interrupteur ici, sinon mettez 0.
#
# Par exemple si vous voulez droper l'arme d'ID 71 avec une chance de 1/88 uniquement si
# l'interrupteur 2 est activé mettez : <drop A:71 88,2>
# Et un dernier exemple, si vous voulez dropper un bouclier d'ID 42 avec une chance de 1/2
# et qui ne requiert aucun interrupteur d'activé (drop supplémentaire) : <drop E:42 2,0>
#=======================================================================
# ▼ Alias et compatibilité
# --------------------------------------------------------------------------
# ► Méthodes réecrites :
#  >  Game_Troop : make_drop_items
#===============================================================================

$imported = {} if $imported == nil
$imported["DropConditionnel"] = true

module BSL
    module DCO
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    # TAG_DROPENNEMI
    #-------------------------------------------------
    # Niveau : Avancé
    # Ici vous pourrez changer les tags qui récupèrent les données dans la partie note
    # des ennemis. Je vous déconseille vivement de modifier cette partie.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    TAG_DROPENNEMI =  /<(?:drop)[ ]([OAE]):(\d+)[ ](\d+),(\d+)>/i
  end
end

#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
#  Cette class gère l'ensemble des ennemis en combat.
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # * overwrite method : make_drop_items
  #--------------------------------------------------------------------------
  def make_drop_items
    drop_items = []
    for enemy in dead_members
      for di in enemy.enemy.items_drop
        next if di.kind == 0
        next if rand(di.denominator) != 0
        if di.kind == 1
          drop_items.push($data_items[di.item_id])
        elsif di.kind == 2
          drop_items.push($data_weapons[di.weapon_id])
        elsif di.kind == 3
          drop_items.push($data_armors[di.armor_id])
        end
      end
    end
    return drop_items
  end
end

#==============================================================================
# ** RPG::Enemy
#------------------------------------------------------------------------------
#  Class qui gère les données relatives aux ennemis.
#==============================================================================
class RPG::Enemy
  include BSL::DCO # Inclusion du module
  #--------------------------------------------------------------------------
  # * new method : items_drop
  #--------------------------------------------------------------------------
  def items_drop
    items_drop = [drop_item1, drop_item2] # On récupère le drop "normalement" défini (dans le BBD)
    self.note.split(/[\r\n]+/).each { |line|
      case line
        when TAG_DROPENNEMI # Si on repérer un expression régulière
          type = $1.to_s.upcase
          id = $2.to_i
          pourcentage = $3.to_i
          id_inter = $4.to_i
          next unless id_inter == 0 or $game_switches[id_inter] #On passe à la ligne suivant si les conditions sont pas remplies
          drop_item = DropItem.new # Création de l'objet
          case type
            when "O" # Si c'est un objet
              drop_item.item_id = id
              drop_item.kind = 1
            when "A" # Si c'est une arme
              drop_item.weapon_id = id
              drop_item.kind = 2
            when "E" #Si c'est un équipement (armure)
              drop_item.armor_id = id
              drop_item.kind = 3
            end
          drop_item.denominator =  pourcentage
          items_drop.push(drop_item) # On met l'objet dans la liste des items obtenus
        end}
      return items_drop
    end
  end

Installation :
Mettez juste au dessus de main !

Utilisation :
Code:
# Tout se fait dans la base de données par besoin de toucher au script !
# Dans la partie "note" de l'ennemi mettez une expression sous la forme :
#  - <drop type_objet:id_objet chance_de_drop,interrupteur>
#
#  > type_objet : O si votre drop, est un Objet
#                            A si votre drop est une Arme
#                            E si votre drop est un Equipement (armure,bouclier etc...)
#
#  > id_objet : mettez l'ID de l'objet/arme/equipement ici
#
# > chance_de_drop : mettez ici un nombre qui permettra de définir la chance que l'objet
#                                      soit droppé (comme dans la base de données). Si vous mettez 45
#                                      par exemple la chance de le dropper sera d'1/45.
#
# > interrupteur : si vous voulez que votre drop soit uniquement droppable si un interrupteur
#                            soit activé, mettez l'ID de votre interrupteur ici, sinon mettez 0.
#
# Par exemple si vous voulez droper l'arme d'ID 71 avec une chance de 1/88 uniquement si
# l'interrupteur 2 est activé mettez : <drop A:71 88,2>
# Et un dernier exemple, si vous voulez dropper un bouclier d'ID 42 avec une chance de 1/2
# et qui ne requiert aucun interrupteur d'activé (drop supplémentaire) : <drop E:42 2,0>

Démo : http://www.megaupload.com/?d=10A05QZY

Enjoy =)
leo99
leo99
Membre

Nombre de messages : 95
Localisation : Dans Espritland avec les dieux
Distinction : aucune
Date d'inscription : 29/05/2010

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Dim 11 Juil 2010 - 19:24
Blockade et ses scripts Géniaux

C'est trop bien
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 29
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Dim 11 Juil 2010 - 21:11
j'ai pas grand choses à dire:

Code:
class test
def main
initialize
resultat
end

def initialize( simple,court,efficace)
@simple = simple
@court = court
@efficace = efficace
end

def resultat
if simple
  if court
    if efficace
    printf("merci Blockade pour ce script il est très bien")
end
end
end
end
end


passons au test :
Code:

$scene = test.new (true,true,true)

je pense que tu as compris ce que je veux dire Wink

ps: juste une question à quoi te servent ces ligne?
Code:
$imported = {} if $imported == nil
$imported["DropConditionnel"] = true
Blockade
Blockade
Membre

Nombre de messages : 194
Age : 27
Distinction : aucune
Date d'inscription : 06/09/2008

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Dim 11 Juil 2010 - 22:46
Merci Adurna xDDDDDD j'ai bien rit sur le coup !

Code:
$imported = {} if $imported == nil
$imported["DropConditionnel"] = true

L'idée originale viens de KGC et elle est très ingénieuse. Si par exemple plus tard, je crée un script qui réecrit une des méthode que le script utilise, je vais pouvoir mettre une condition :
Code:
if $imported["DropConditionnel"]
$imported["DropConditionnel"] sera égal à true si le script est présent.
Cette variable me sert donc à détecter le script, avec une simple variable !
Donc en gros ca donnera :
Code:
  def make_drop_items
              methode_du nouveau_script
              if $imported["DropConditionnel"]
                methode qui va assurer la compatibilité avec DropConditionnel
              end
          end
Y'a d'autre moyen de vérifier si un script est présent (soit demander à l'utilisateur via une constante, ou regarder si telle méthode est définie) mais celle la reste la plus simple !
Dudu'
Dudu'
Staffeux retraité

Nombre de messages : 2060
Age : 29
Distinction : Apprenti KGB-boy en avenir
[Coco' Smile]
Hamsterphile de service ^^
[Balby' le Fake]
Grand prof de la MA
[Skillo]
Ce grand programmateur, mon coeur, ma vie ! [Hamu']
Date d'inscription : 22/06/2009

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Dim 11 Juil 2010 - 23:12
ah oui éxélante idée e effet
je vais aussi l'utilisé s'est plus que pratique même
et en effet s'est super simple comme utilisation^^
Shadow of Life
Shadow of Life
Membre

Nombre de messages : 870
Age : 23
Localisation : Joyeux. Comment ça c'est pas la bonne case ?
Distinction : Artiste de la flagornerie.
Porte parole du Ô grand Voilà voilà.
Président du club des masochistes du forum
Fake Gentleman

Soumis ^^
Date d'inscription : 13/09/2009

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Lun 12 Juil 2010 - 12:02
Gloups .... c'est là que nous, simples humains, nous nous sentons ridicule ... face à de tels dieux vivants !
Merci pour le script Blockade ! =D
Anonymous
Invité
Invité

Drop conditionnel & multi-drop Empty Re: Drop conditionnel & multi-drop

le Lun 12 Juil 2010 - 13:16
Magnifique script en effet
Encore merci pour ta participation Blockade
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum