Oniromancie: Scripts - Calcul des résistances élémentaires


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (46 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

87 connectés actuellement

9259028 visiteurs
depuis l'ouverture

73 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Ressources Naruto

Level Up!

Hellsoft

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




Calcul des résistances élémentaires
Script pour RPG Maker VX
Ecrit par SLNC

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
202
 
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.


Ddken - posté le 12/12/2011 à 07:15:56. (12145 messages postés)

Alias God Mode, alias Zeus. Je suis absolu...

Résistance = Résistivité X longueur / section
=>[]
Que dire... Merci beaucoup! Ça m'aidera beaucoup ça

Onche onche party - Fan de géopolitique et de Trotter - Calcul mental - Je suis une star


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

@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)

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)

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. (629 messages postés)

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.

Passe son temps à imaginer des scénarios de projets qui ne verront jamais le jour

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

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis