在新窗口中打开脚本页

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
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
#==============================================================================
# +++ VX移植 - VA负重系统改进版 +++
#==============================================================================
# VX版 原作者 By 雪流星
# 蓝本 杂兵天下的VA移植版
# 改进 By:VIPArcher [email: VIPArcher@sina.com]
# -- 本脚本来自 http://rm.66rpg.com 使用或转载请保留以上信息。
#==============================================================================
# 物品备注<load N> 则该物品占用 N 点负重
# load也可以写成「负重」或「負重」#注:没有“「」”
# 不写的话默认为 Default_Load
# 更改当前负重可以对 $game_party.current_load 进行加,减,赋值
# 例如:$game_party.current_load += 1 #当前物品总重量加 1
# 默认给物品增加一行说明.说明内容是物品的重量. 但默认帮助窗口一共只能显示2行内容.
# 因此你在设置帮助说明的时候. 如果设置了2行内容. 那么这新增加的第3行将无法显示出来.
#==============================================================================
$VIPArcherScript ||= {};$VIPArcherScript[:load] = __FILE__ #20140919
#-------------------------------------------------------------------------------
module VIPArcher end
#==============================================================================
# ★ 设定部分 ★
#==============================================================================
module VIPArcher::Load
Default_Load = 1 # 物品的默认负重
Width = 150 # 负重信息窗口宽度
Load_Name = "负重:" # 负重前显示的文字
Load_Var = 0 # 作为队伍负重上限的变量ID,为0禁用变量作为负重上限,
# 计算方式变成累计每个角色的负重能力来计算负重上限。
Load_Eval = "((mhp + mmp) / agi) * [hp_rate,0.5].max"
# 每个角色的负重计算公式(eval)
Stop_SW = false # true 使用 / false 不使用
# 事件中调用增减道具/武器/防具时,如果会导致超过负重上限,是否执行中断事件处理
# 推荐不使用,因为新加的功能就有一个是当超过负重时限制角色移动,开启这个
# 的话这个限制移动就无效了的说·3·
Movable = true # true 使用 / false 不使用
# 满负重时降低移动速度(不使用时禁止移动连事件都无法启动,只能丢弃/使用物品)
Move_Speed = 2 # 满负重时的移动速度降低量
# 负重超过上限时的提示内容
Message = "负重超过承受范围,移动将变得\ec[10]【十分艰难!】\\c[0]" +
"\n\ei[4]丢弃些没用的东西吧。"
Lose_SW = true # true 使用 / false 不使用
# 按X键(A键)是否可以丢弃道具
# 如果你另外使用了丢弃道具的脚本请关闭
Help_SW = true #true 使用 / false 不使用
# 是否在帮助窗口内自动添加负重信息
Equip_SW = true #true 计算 / false 不计算
# 装备在身上的装备是否算入负重
# "★★★★★★ 注意 ★★★★★★"
# 如果你的角色初始装备有占负重并且开启上面的功能,那么你必须
# 在游戏一开始时为当前负重赋值(自己算到底有多少负重·3·)
# 当有新队员加入队伍并且也带有负重的装备那么你也需要为当前负重加上对应的重量,
# 例如:$game_party.current_load += 10 就是加上10的当前负重
end
#==============================================================================
# ☆ 设定结束 ☆
#==============================================================================
class RPG::BaseItem
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 获取道具的重量
#--------------------------------------------------------------------------
def load
return unless self.is_a?(RPG::Item) || self.is_a?(RPG::EquipItem)
return $1.to_i if @note =~ /<(?:load|负重|負重)\s*(\d+)>/i
Default_Load
end
#--------------------------------------------------------------------------
# ● 新增负重帮助内容
#--------------------------------------------------------------------------
def description
if Help_SW && load && load != 0
@description + "\n\e}重量:#{load}\e{"
else
@description
end
end unless $VIPArcherScript[:help_ex]
end
#==============================================================================
#  显示当前负重信息的窗口
#==============================================================================
class Window_Load < Window_Base
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize(viewport)
super(Graphics.width - window_width, 72, window_width, fitting_height(1))
self.viewport = @viewport
refresh
end
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
Width
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
contents.clear
contents.font.size - 4
change_color(system_color)
draw_text(0, 0, window_width - 64, 24,Load_Name,0)
change_color($game_party.load_max? ? power_down_color : normal_color)
weight = "#{$game_party.current_load}/#{$game_party.total_load}"
draw_text(0, 0, window_width - 24, 24, weight,2)
@temp_load = $game_party.current_load
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
refresh if @temp_load != $game_party.current_load
end
end
#-------------------------------------------------------------------------------
class Window_ItemCategory < Window_HorzCommand
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
scene_item_is? ? Graphics.width - Width : Graphics.width
end
#--------------------------------------------------------------------------
# ● 获取列数
#--------------------------------------------------------------------------
def col_max
return scene_item_is? ? 3 : 4
end
#--------------------------------------------------------------------------
# ● 判断是否为物品栏场景
#--------------------------------------------------------------------------
def scene_item_is?
return SceneManager.scene_is?(Scene_Item)
end
end
#==============================================================================
# ■ 物品界面显示负重栏
#==============================================================================
class Scene_Item < Scene_ItemBase
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
alias load_start start
def start
load_start
@load_window = Window_Load.new(@viewport)
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias load_update update
def update
#--------------------------------------------------------------------------
# ★ 按X键(A键)丢弃道具 - 贵重物品无法丢弃 ★修改:VIPArcher
#--------------------------------------------------------------------------
if Input.trigger?(Input::X) && Lose_SW
item = @item_window.item
if item.is_a?(RPG::Item) && item.key_item? || item.nil?
Sound.play_buzzer
else
Sound.play_cancel
$game_party.lose_item(item, 1)
@item_window.refresh
end
end
load_update
end
end
#-------------------------------------------------------------------------------
class Window_ShopNumber < Window_Selectable
include VIPArcher::Load
attr_accessor :buy_or_sell #买入的标志
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
alias vip_shopnumber_refresh refresh
def refresh
vip_shopnumber_refresh
draw_current_weight(@item)
end
#--------------------------------------------------------------------------
# ○ 买卖时重量变化的描绘
#--------------------------------------------------------------------------
def draw_current_weight(item)
current = $game_party.current_load
weight = current + item.load * @number * (@buy_or_sell ? 1 : -1)
width = contents_width - 8
cx = text_size(@currency_unit).width
change_color(system_color)
draw_text(4, y + 60, width, line_height, Load_Name)
change_color(normal_color)
wt = "#{weight} / #{$game_party.total_load}"
change_color(power_down_color) if weight > $game_party.total_load
draw_text(4, y + 60, width, line_height, wt, 2)
end
end
#-------------------------------------------------------------------------------
class Window_ShopStatus < Window_Base
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
alias vip_shopstatus_refresh refresh
def refresh
vip_shopstatus_refresh
draw_weight_occupy(4, 24)
end
#--------------------------------------------------------------------------
# ● 绘制持负重信息
#--------------------------------------------------------------------------
def draw_weight_occupy(x, y)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change_color(system_color)
draw_text(rect, Load_Name, 3)
change_color(normal_color)
weight = "#{$game_party.current_load}/#{$game_party.total_load}"
change_color(power_down_color) if $game_party.load_max?
draw_text(rect, weight, 2)
@temp_load = $game_party.current_load
end
end
#==============================================================================
# ■ 获取队伍最大负重
#==============================================================================
class Game_Party < Game_Unit
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :current_load, :load_trade_item #负重
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias load_initialize initialize
def initialize
load_initialize
total_load
@current_load = 0
@total_load = 0
end
#--------------------------------------------------------------------------
# ● 获取队伍最大负重
#--------------------------------------------------------------------------
def total_load
return $game_variables[Load_Var] if Load_Var > 0
all_members.inject(0) {|total,actor| total + actor.load }
end
#--------------------------------------------------------------------------
# ● 判断负重是否已满
#--------------------------------------------------------------------------
def load_max?
return false if @current_load == 0
@current_load >= total_load
end
#--------------------------------------------------------------------------
# ● 增加/减少物品时计算负重
#--------------------------------------------------------------------------
alias load_gain_item gain_item
def gain_item(item, n, include_equip = false)
return if item.nil?
load_gain_item(item, n, include_equip)
@current_load += item.load * n unless @load_trade_item
end
end
#-------------------------------------------------------------------------------
class Game_Actor < Game_Battler
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 装备时不计算负重的增减 * 方法覆盖
# new_item : 取出的物品
# old_item : 放入的物品
#--------------------------------------------------------------------------
def trade_item_with_party(new_item, old_item)
return false if new_item && !$game_party.has_item?(new_item)
$game_party.load_trade_item = true if Equip_SW == true
$game_party.gain_item(old_item, 1)
$game_party.lose_item(new_item, 1)
$game_party.load_trade_item = false if Equip_SW == true
return true
end
#--------------------------------------------------------------------------
# ● 获取角色的负重上限
#--------------------------------------------------------------------------
def load
eval(Load_Eval).to_i rescue msgbox "请检查负重能力公式是否正确"
end
end
#==============================================================================
# ■ 增减物品时判断负重
#==============================================================================
class Game_Interpreter
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 增减道具
#--------------------------------------------------------------------------
alias load_command_126 command_126
def command_126
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load($data_items[@params[0]], n) && Stop_SW
load_command_126
end
#--------------------------------------------------------------------------
# ● 增減武器
#--------------------------------------------------------------------------
alias load_command_127 command_127
def command_127
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load($data_weapons[@params[0]], n) && Stop_SW
load_command_127
end
#--------------------------------------------------------------------------
# ● 增減防具
#--------------------------------------------------------------------------
alias load_command_128 command_128
def command_128
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load($data_armors[@params[0]], n) && Stop_SW
load_command_128
end
#--------------------------------------------------------------------------
# ● 增减物品超重时提示
#--------------------------------------------------------------------------
def check_load(item, n)
if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
$game_message.texts.push("#{Message}") if $game_message.visible != true
$game_message.visible = true
end
((item.load * n) + $game_party.current_load) > $game_party.total_load
end
end
#==============================================================================
# ★ 满负重时限制行动 ★
#==============================================================================
class Game_Player < Game_Character
include VIPArcher::Load
#--------------------------------------------------------------------------
# ● 判定是否可以移动
#--------------------------------------------------------------------------
alias load_movable? movable?
def movable?
return false if $game_party.load_max? && !Movable ; load_movable?
end
#--------------------------------------------------------------------------
# ● 满负重时降低移动速度
#--------------------------------------------------------------------------
def real_move_speed
return super - Move_Speed if $game_party.load_max? && Movable ; super
end
end
#==============================================================================
# ★ 满负重时限制购买 ★
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 查询商品是否可买
#--------------------------------------------------------------------------
alias load_enable? enable?
def enable?(item)
load_enable?(item) && !$game_party.load_max?
end
end
#==============================================================================
# ★ 根据负重设定可购买的物品数量 ★
#==============================================================================
class Scene_Shop < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 指令“买入”
#--------------------------------------------------------------------------
alias vip_load_command_buy command_buy
def command_buy
vip_load_command_buy ; @number_window.buy_or_sell = true
end
#--------------------------------------------------------------------------
# ● 指令“卖出”
#--------------------------------------------------------------------------
alias vip_load_command_sell command_sell
def command_sell
vip_load_command_sell ; @number_window.buy_or_sell = false
end
#--------------------------------------------------------------------------
# ● 获取可以买入的最大值
#--------------------------------------------------------------------------
alias load_max_buy max_buy
def max_buy
vip = @item.load == 0 ? load_max_buy : ($game_party.total_load -
$game_party.current_load) / @item.load
[load_max_buy,vip].min
end
end

文章目录