Project1
标题:
希望帮忙修改负重脚本,负重满了仍可获得物品但无法移动
[打印本页]
作者:
xyzgwx
时间:
2014-7-20 19:50
标题:
希望帮忙修改负重脚本,负重满了仍可获得物品但无法移动
这里
https://rpg.blue/thread-224133-1-1.html
的负重脚本
当最大负重满了时,无法再获得&购买物品
我希望能改成,负重满了时,仍然可以获得&购买物品,但得到后角色无法移动,除非使用或扔掉部分物品减重(扔掉物品的脚本我自己寻找)
作者:
taroxd
时间:
2014-7-20 19:54
思路是修改 Game_Party#gain_item
并且在移动的时候进行判断即可。
具体实现交给楼下大触们。
作者:
VIPArcher
时间:
2014-7-21 06:27
本帖最后由 VIPArcher 于 2014-7-21 07:23 编辑
class RPG::BaseItem
def load
return if self.is_a?(RPG::Skill)
self.note.split(/[\r\n]+/).each { |line|
if line =~ /\[(?:load|负重|負重) (\w+)\]/
return $1.nil? ? 0 : $1.to_i
end}
return 0
end
end
class Scene_Item < Scene_ItemBase
alias load_start start
alias load_terminate terminate
alias load_update update
def start
load_start
@load_window = Window_Base.new(392, 0, 152, 56)
@load_window.viewport = @viewport
end
def terminate
@load_window.dispose
load_terminate
end
def update
@load_window.update
if @temp_load != $game_party.current_load
@load_window.contents.clear
@load_window.contents.draw_text(0, 0, 120, 24, "负重:#{$game_party.current_load}/#{$game_party.total_load}")
@temp_load = $game_party.current_load
end
if Input.trigger?(Input::X)
@item = @item_window.item
$game_party.lose_item(@item, 1)
@item_window.refresh
end
load_update
end
end
class Scene_Shop < Scene_MenuBase
alias load_start start
alias load_terminate terminate
alias load_update update
def start
load_start
@load_window = Window_Base.new(392, 0, 152, 56)
@load_window.viewport = @viewport
end
def terminate
@load_window.dispose
load_terminate
end
def update
@load_window.update
if @temp_load != $game_party.current_load
@load_window.contents.clear
@load_window.contents.draw_text(0, 0, 120, 24, "负重:#{$game_party.current_load}/#{$game_party.total_load}")
@temp_load = $game_party.current_load
end
load_update
end
end
class Game_Party < Game_Unit
attr_reader :current_load
alias load_initialize initialize
alias load_gain_item gain_item
def initialize
load_initialize
@current_load = 0
end
# 获取队伍最大负重
def total_load
party_load = 0
#members.size.times do |i|
for i in 0...members.size
actor = members[i]
party_load += actor.load
end
return party_load
end
def gain_item(item, n, include_equip = false)
return if item.nil?
load_gain_item(item, n, include_equip)
@current_load += item.load * n
end
end
class Game_Actor < Game_Battler
# 获取队员负重
def load
return (mhp + mmp) * @level / agi
end
end
class Game_Interpreter
alias load_command_126 command_126
alias load_command_127 command_127
alias load_command_128 command_128
def show_gain_window2
viparcher = Window_Base.new((640-300)/2,128 + 16,200,100 - 16)
viparcher.contents.draw_text(0, 20, 160, 30, "负重已满,无法移动", 2)
end
def command_126
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load(@params[0], 0, n)
load_command_126
end
#--------------------------------------------------------------------------
# ● 增減武器
#--------------------------------------------------------------------------
def command_127
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load(@params[0], 1, n)
load_command_127
end
#--------------------------------------------------------------------------
# ● 增減防具
#--------------------------------------------------------------------------
def command_128
n = operate_value(@params[1], @params[2], @params[3])
return command_115 if check_load(@params[0], 2, n)
load_command_128
end
def check_load(item_id, type, n)
case type
when 0; item = $data_items[item_id]
when 1; item = $data_weapons[item_id]
when 2; item = $data_armors[item_id]
end
if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
show_gain_window2
end
return
end
end
class Game_Player < Game_Character
alias vipmovable? movable?
#--------------------------------------------------------------------------
# ● 判定是否负重已满
#--------------------------------------------------------------------------
def mfz_vip?
$game_party.total_load < $game_party.current_load
end
#--------------------------------------------------------------------------
# ● 判定是否可以移动
#--------------------------------------------------------------------------
def movable?
return false if mfz_vip?
vipmovable?
end
end
复制代码
稍微测试了一下,似乎没什么问题,自己去详细测试吧。
修改了提示窗口
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1