| Salut !
Démo :
https://www.mediafire.com/file/n8ow47pdv16e5ff/Octopath+Shield.7z/file
Script :
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 :
Indiquera qu'il aura 3 point de bouclier. Peut importe la valeur mise dans le script.
1
| <OctoShield: res 200,150,145> |
Changera le modificateur de dégât.
- Sur une compétence :
Fera que le sort retire 1 point de bouclier.
|