Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

240 connectés actuellement

30731152 visiteurs
depuis l'ouverture

1130 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Guelnika & E-magination

Le Comptoir Du clickeur

Alex d'Or

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [Rpg maker Vx Ace] Systeme de bouclier a briser pendant les combats


Yuyyaaxxe - posté le 21/07/2024 à 20:13:06 (1 messages postés)

❤ 0

Domaine concerné: Combat
Logiciel utilisé: Rpg maker Vx Ace
Bonjour,

Je cherche pour mon jeu rpg maker un systéme de bouclier a briser en combat. Je m'explique, le principe est que par exemple un ennemi puisse avoir un bouclier visible à l'ecran (chiffré de 1 a 5 ou + par exemple). Plus le niveau de bouclier est bas et plus les degats infligés a l'ennemi est important.

Notamment, le joueur aura une competences (voir plus) qui permet de briser les niveaux du bouclier. Par exemple une competence diminue le niveau de 1 et une autre competence plus puissante diminura le niveau de bouclier de 2.

A zero, l'ennemi n'aura plus de bouclier et pourra recevoir des degats consequent.

Voila, merci à ceux ayant une idée de la manière dont on peut mettre ça en place et j'espére que cette question sera util à ceux qui se la posait.


Mack - posté le 21/07/2024 à 20:22:34 (2310 messages postés) - staff -

❤ 0

Salut !

Démo :
https://www.mediafire.com/file/n8ow47pdv16e5ff/Octopath+Shield.7z/file

Script :

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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
 
module OctoShield
  
  X_offset = 0
  Y_offset = 0
  
  # Icon ID
  Icon_pts = 495
  
  # Basic Shield Points per enemy
  Default_Pts = 5
  
  # Basic shield damage per action
  Base_DMG = 0
  
  # Base resistances
  Damage_Res = [125, 100, 80, 60, 40, 20] # 0, 1, 2, 3, 4, 5 Pts de shield
  
end
 
class Game_Enemy < Game_Battler
  
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias initialize_old initialize
  def initialize(index, enemy_id)
    
    initialize_old(index, enemy_id)
    
    shield_init(enemy_id)
    
  end
  
end
 
class Game_Battler < Game_BattlerBase
  
  attr_accessor :shield_pts
  attr_reader   :use_octoshield
  attr_reader   :shield_resistance
  
  #--------------------------------------------------------------------------
  # * OctoShield Initialization
  #--------------------------------------------------------------------------
  def shield_init(id)
    @shield_pts = 0
    
    @use_octoshield = false
    if (!actor?())
      @use_octoshield = true
      
      # Init base pts
      @shield_pts = OctoShield::Default_Pts
      
      # Read notes for base pts, and resistances
      regex = /<OctoShield: (\w+) (.*)>/i
      
      note = $data_enemies[id].note
      results = note.scan(regex)
      results.each do |res|
        
        # p res
        
        if (res[0] == "pts")
          
          @shield_pts = res[1].to_i
          
        elsif (res[0] == "res")
          
          @shield_resistance = res[1].split(",", -1).map(&:to_i)
          
        end
      end
    
    end
    
  end
  
  #--------------------------------------------------------------------------
  # * Apply Effect of Skill/Item
  #--------------------------------------------------------------------------
  alias item_apply_old item_apply
  def item_apply(user, item)
    
    item_apply_old(user, item)
    
    if (@result.hit? and @use_octoshield)
      
      if (@shield_pts > 0)
        
        pts = OctoShield::Base_DMG
        
        # Read item for damage to shield
        regex = /<OctoShield: (\w+) (\d+)>/i
        note = item.note
        results = note.scan(regex)
        results.each do |res|
          
          #p res
          
          if (res[0] == "pts")
            pts = res[1].to_i
          end
        end
        
        
        @shield_pts -= pts
        if (@shield_pts < 0)
          @shield_pts = 0
        end
        
      end
      
    end
  end
  
  #--------------------------------------------------------------------------
  # * Calculate Damage
  #--------------------------------------------------------------------------
  def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    
    # Modifications here :
    if (@use_octoshield)
      
      dmg_res = OctoShield::Damage_Res
      if (@shield_resistance)
        dmg_res = @shield_resistance
      end
      
      if (@shield_pts < dmg_res.size())
        
        dmg_res = dmg_res[@shield_pts].to_i
        
        value *= dmg_res / 100.0
        
      end
      
    end
    # End of modifications
    
    @result.make_damage(value.to_i, item)
  end
  
end
  
class Sprite_Battler < Sprite_Base
  attr_accessor :window_octoshield
  attr_reader   :use_octoshield
  
  alias initialize_old initialize
  def initialize(viewport, battler = nil)
    
    initialize_old(viewport, battler)
    
    if (battler)
      @use_octoshield = true
      
      x = self.x
      y = self.y
      
      @window_octoshield = Window_Base.new(x, y, 80, 80)
      @window_octoshield.back_opacity = 0 
      @window_octoshield.opacity = 0
      @window_octoshield.visible = false
      
    end
    
  end
  #--------------------------------------------------------------------------
  # * Update Transfer Origin Bitmap
  #--------------------------------------------------------------------------
  alias update_bitmap_old update_bitmap
  def update_bitmap
    
    update_bitmap_old()
    
    if (@use_octoshield)
      
      if (@battler.actor?())
        return
      end
    
      if (bitmap)
        x = OctoShield::X_offset
        y = - bitmap.height / 2 + OctoShield::Y_offset
      else
        x = OctoShield::X_offset
        y = OctoShield::Y_offset
      end
      
      x += self.x
      y += self.y
      
      @window_octoshield.x = x
      @window_octoshield.y = y
      @window_octoshield.contents_opacity = self.opacity
      
    end
    
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  alias update_old update
  def update
    
    update_old()
    
    if (@window_octoshield)
      
      @window_octoshield.visible = true
      
      @window_octoshield.contents.clear()
      
      @window_octoshield.draw_text(0, 0, 80, 24, @battler.shield_pts)
      
      if (OctoShield::Icon_pts > 0) 
        txt_size = @window_octoshield.text_size(@battler.shield_pts)
        @window_octoshield.draw_icon(OctoShield::Icon_pts, txt_size.width, 0, true)
      end
      
    end
  end
  
  #--------------------------------------------------------------------------
  # * Free
  #--------------------------------------------------------------------------
  alias dispose_old dispose
  def dispose
    dispose_old
    @window_octoshield.dispose if @window_octoshield
  end
end
 




Donc tu peux paramétrer une partie directement depuis le script.
Les 2 offsets, c'est pour décaler les points de boucliers, en négatif ça va en haut / gauche, en positif bas/droite
Icon_Pts, c'est si tu veux afficher une icone à côté du nombre de point de bouclier. 0 si tu veux pas d'icône
Default_Pts, c'est le nombre par défaut de point de bouclier. Donc si tu mets 1, TOUT les monstres auront 1 point de bouclier.
Base_DMG, c'est le nombre de point de shield que fait TOUT les sorts.
Damage_Res c'est le modificateur de dégat par rapport au point de bouclier. Le premier, c'est quand y a 0 point, le second quand y a 1 point, ...

Evidemment, les valeurs Default_Pts, Base_DMG, et Damage_Res sont des valeurs par défaut.
Tu peux paramètrer ces valeurs en ajoutant des notes aux sorts, ou aux ennemis :
- Sur un ennemi :

Portion de code : Tout sélectionner

1
<OctoShield: pts 3>


Indiquera qu'il aura 3 point de bouclier. Peut importe la valeur mise dans le script.

Portion de code : Tout sélectionner

1
<OctoShield: res 200,150,145>


Changera le modificateur de dégât.

- Sur une compétence :

Portion de code : Tout sélectionner

1
<OctoShield: pts 1>


Fera que le sort retire 1 point de bouclier.

( Je prend note de tout les commentaires, même si je n'y répond pas )

Index du forum > Entraide > [RESOLU] [Rpg maker Vx Ace] Systeme de bouclier a briser pendant les combats

repondre up

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