Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

429 connectés actuellement

29378732 visiteurs
depuis l'ouverture

8099 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Lunae - le bazar d'Emz0

Lumen

Level Up!

RPG Maker - La Communauté

Tous nos partenaires

Devenir
partenaire



Calcul des résistances élémentaires

Propose deux méthodes de calcul afin d'améliorer la gestion des attaques multi-élémentaires.

Script pour RPG Maker VX
Ecrit par SLNC
Publié par SLNC (lui envoyer un message privé)
Signaler un script cassé

❤ 0

RMVX a une manière douteuse de gérer les attaques multi-élémentaires : frappez un mort-vivant qui absorbe les attaques d'Ombre avec l'Epée ténébreuse qui attaque en Physique + Ombre, et vous verrez que vous infligez des dégâts.

C'est parce que RMVX prend automatiquement la valeur la plus haut... Pas top.

Voila donc un petit script qui propose 2 méthodes de calcul à choisir :
* Multiplication des valeurs entre elles (avec toutefois des nuances notamment par rapport à l'absorption)
* Moyenne des valeurs
Si vous voulez, vous pouvez activer les deux en même temps, mais je ne garantis pas du tout le résultat.

Il propose aussi de personnaliser les valeurs attribuées aux niveaux de résistance (A/B/C/D/E/F) pour les élements (ne compte pas pour les altérations d'état).

Bref, si vous êtes intéressés, lisez les explications et les exemples ci-dessous.

Et si vous l'intégrez, un petit coin dans les crédits please.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
module SLNC # <-- Mon module personnel qui contient les paramètres pour la plupart de mes scripts
  
  #---------------------------------------------------------
  # GESTION DES ELEMENTARITES
  #---------------------------------------------------------
  
  #---------------------------------------------------------
  # UTILISATION
  #---------------------------------------------------------
  # * Placez au-dessus de Main
  # * Activez une seule des deux méthodes proposées aux lignes 90 et 107
  # * Modifiez si besoin le tableau des valeurs des résistances à la ligne 120
  #---------------------------------------------------------
 
  #---------------------------------------------------------
  # EXPLICATIONS : 
  #---------------------------------------------------------
  # Vous voulez une gestion un peu plus réaliste des résistances élémentaires ?
  #
  # J'ai toujours trouvé étrange la gestion des  résistances de RMVX (qui prend systématiquement la plus grande valeur et maximise ainsi les dommages), qui permet 
  # par exemple d'achever un ennemi invulnérable au feu (uniquement) avec une attaque physique de feu.
  #
  # Ce script propose deux systèmes qui permettent, en plus de modifier les valeurs des niveaux de résistance, de 
  # mieux (enfin c'est mon avis) gérer les résistances en cas d'attaques multi-élémentaires.
  #
  # METHODE 1 : MULTIPLICATION (activée par défaut dans ce script)
  # Pour reprendre l'exemple de l'attaque physique de feu à 2 éléments (Physique + Feu), si l'ennemi est insensible au
  # feu, il sera également insensible à cette attaque. 
  #
  # METHODE 2 : MOYENNE
  # Dans le même exemple, si la résistance physique de l'ennemi est normale (100%), la valeur finale sera la moyenne
  # des deux résistances, soit (0 + 100) / 2, soit 50.
  #
  # Lisez les exemples ci-dessous pour choisir d'activer ou non une de ces deux méthodes (je n'ai pas essayé
  # d'activer les deux, je ne suis pas sûr que ça entraîne une erreur, mais par contre vous aurez sûrement des
  # résultats un peu bizarre, donc je ne vous conseille pas de le faire...)
  #
  # Grâce à ce script, vous pouvez par exemple différenciez les attaques magiques et physiques élémentaires, par
  # exemple Feu (Souffle enflammé par exemple) // Magie + Feu (Flamme par exemple) // Physique + Feu (Pyro-attaque
  # par exemple). 
  #---------------------------------------------------------
  # ATTENTION : 
  # Vu la nature de ce script, il rendra les combats un peu plus difficiles (notamment face aux boss ou aux ennemis
  # élémentaires). 
  # Vous serez donc peut-être amenés à revoir la difficulté de vos combats. 
  #---------------------------------------------------------
 
  #---------------------------------------------------------
  # METHODE 1 : MULTIPLICATION
  #---------------------------------------------------------
  # 1°) Si un seul des éléments a pour résistance 0, l'attaque vaut 0 (quelque soient les autres éléments)
  # 2°) Si un élément a pour résistance -100 : 
  #     - la première fois, le résultat est multiplié par -1 (dégâts absorbés)
  #     - ensuite, le résultat est multiplé par 2 (dégâts absorbés doublés)
  # 3°) Toutes les autres résistances s'appliquent ensuite : 
  #     - en cas de dégâts subis, les résistances se multiplient entre elles
  #     - en cas de dégâts absorbés, elles se divisent entre elles
  #
  # Exemples : 
  # On prend ici en compte les valeurs par défaut : 
  # A = 200 / B = 150 / C = 100 / D = 50 / E = 0 / F = -100
  # Supposons une attaque fixe de 100, avec Spi F = 0 et Att F = 0
  #
  # E + A =        pas de dégâts car E = 0%
  # E + F =        pas de dégâts car E = 0%
  # F =               dégâts absorbés de 100
  # Jusque là, c'est normal.
  # 
  # F x 2 =         dégâts absorbés de 200 (100 * (-1) * 2)
  # Ici, le calcul n'est bien sûr pas de (-1) * (-1), ce qui donnerait un résultat positif
  # F x 3 =         dégâts absorbés de 400 (100 * (-1) * 2 * 2)
  # F x 10 =       dégâts absorbés de 51200 (100 * (-1) * 2 ^ 9)
  # ...
  # 
  # A + B =                     dégâts subis de 300 (100 * 200% * 150%)
  # A + D =                    dégâts subis de 100 (100 * 200% * 50%)
  # A + B + C + D =      dégâts subis de 150 (100 * 200% * 150% * 100% * 50%)
  # A x 10 =                    dégâts subis de 102400 (100 * 200% ^ 10) !!
  # A x 10 + E =             pas de dégâts car E = 0% !!
  # ...
  # 
  # Mais
  # F + A =         dégâts absorbés de 50 (100 * (-1) / 200%)
  # F + C =         dégâts absorbés de 200 (100 * (-1) / 50%)
  # ...
  #---------------------------------------------------------
  # Pour désactiver cette méthode, mettez "false" (sans les guillemets) ici : 
  RESIST_MULTIPLE = true
  #---------------------------------------------------------
  
  #---------------------------------------------------------
  # METHODE 2 : MOYENNE
  #---------------------------------------------------------
  # Fait la moyenne de toutes les valeurs quelles qu'elles soient. 
  #
  # Exemple : 
  # On prend ici en compte les valeurs par défaut : 
  # A = 200 / B = 150 / C = 100 / D = 50 / E = 0 / F = -100
  # Supposons une attaque fixe de 100, avec Spi F = 0 et Att F = 0
  #
  # A + D =                                                              attaque de (200 + 50) / 2 = 125
  # Je pense que cet exemple suffit puisque cette méthode est tout de même beaucoup moins "complexe".
  #---------------------------------------------------------
  # Pour activer cette méthode, mettez "true" (sans les guillemets) ici : 
  RESIST_MOYENNE = false
  #---------------------------------------------------------
  
  #---------------------------------------------------------
  # PARAMETRES : 
  #---------------------------------------------------------
  # Niveaux de résistance : 
  # Définir ici les résistances qui remplacent celles de base
  # Ne changez pas la première valeur.
  # Vaut à la fois pour les alliés et les ennemis
  # Exprimé en %
  # Je vous conseille de garder C = 100 pour ne pas avoir à modifier trop de paramètres dans votre database
  #                                     A      B      C     D   E     F
  RESISTANCES = [0,200, 150, 100, 50, 0, -100]
  #---------------------------------------------------------
  # FIN DES PARAMETRES
  #---------------------------------------------------------
end
 
class Game_Battler
  
  def elements_max_rate(element_set)
    return 100 if element_set.empty?
    rate_list = []
    for element_id in element_set
      rate_list.push(element_rate(element_id))
    end
    
    if SLNC::RESIST_MULTIPLE     # METHODE N° 1
    result = 100
    for rate in rate_list                         # 1er tour : définit si l'attaque est positive, négative ou nulle
      next if rate == nil
      if rate == 0                                    # Si la valeur vaut 0
        return 0                                       # L'attaque vaut 0
      elsif rate < 0                                  # Si la valeur est négative
        if result < 0                                 # Si le résultat est déjà négatif
          result *= 2                                 # Augmente le taux d'absorption
        else
          result *= -1                               # Sinon, inverse le résultat (absorption)
        end
      end
    end
    
    for rate in rate_list                         # 2eme tour : définit la valeur finale
      next if rate == nil
      next if rate <= 0                             # Ne prend plus en compte les valeurs nulles ou négatives
      if result < 0
        result *= 100
        result /= rate
      else
        result *= rate
        result /= 100
      end
    end
    
    elsif SLNC::RESIST_MOYENNE # METHODE N° 2
      result = 0
      for rate in rate_list
        next if rate == nil
        result += rate
      end
      result /= rate_list.nitems              #Calcule la moyenne
      
    else                                                    #METHODE PAR DEFAUT
      result = rate_list.max                    #Prend la valeur maximale
    end
    
  return result
  end
end
 
class Game_Actor
  
  def element_rate(element_id)
    rank = self.class.element_ranks[element_id]
    result = SLNC::RESISTANCES[rank]
    for armor in armors.compact
      result /= 2 if armor.element_set.include?(element_id)
    end
    for state in states
      result /= 2 if state.element_set.include?(element_id)
    end
    return result
  end
end
 
class Game_Enemy
  
  def element_rate(element_id)
    rank = enemy.element_ranks[element_id]
    result = SLNC::RESISTANCES[rank]
    for state in states
      result /= 2 if state.element_set.include?(element_id)
    end
    return result
  end
end



Bon making à tous.




SLNC - posté le 14/12/2011 à 11:15:19 (2 messages postés)

❤ 0

@Ddken
J'ai pas trop compris ton post
Si tu fais référence au calcul de moyenne, c'est vrai que c'est tout simple et que tout le monde peut le faire, mais bon là ca s'adresse plutôt aux non-scripteurs qui ne savent pas à quel endroit modifier par exemple.

En fait j'ai rajouté ca juste pour ceux qui trouveraient que le premier calcul est un peu tordu et un peu strict.


Enzuki - posté le 19/05/2012 à 18:39:44 (24 messages postés)

❤ 0

Moi, c'que je cherche, c'est un script qui fait que si par exemple, il y a une attaque qui frappe FEU et OBSCURITÉ, alors dans mon jeu à moi ce serait un coup en feu et un coup en obscurité voyez... Enfin j'me comprends.


lucluc - posté le 24/06/2012 à 00:25:38 (7 messages postés)

❤ 0

Si jamais quelqu'un sait comment faire pour récupérer un mot de passe, merci de me mp^^

Superbe script :D
Je m'étais longtemps plaint du système d'éléments moisi du jeu, maintenant, c'est du passé ! Milles mercis :sourire3!

Waow! Une signature!


timtrack - posté le 08/12/2012 à 13:56:18 (653 messages postés)

❤ 0

Plop

Enzuki, ce que tu cherches est faisable en évènements communs, il te suffit juste de l'appeler avec une compétence et le reste est simple à faire, c'est ce que je fait lorsque je souhaite un combo d'attaques sur une même cible. Sinon très bon script, je vais le prendre.

Projet actuel

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers