楼主: VIPArcher

[RMVA发布] VA负重系统改进版

[复制链接]
梦石
0
星屑
37
在线时间
71 小时
注册时间
2015-11-28
回帖
34
发表于 2016-2-23 07:15:21 | 显示全部楼层
javascript:;如何改变负重的窗口位置它和我现在的背包叠加,我想把它移到别处(。◕∀◕。)
z!.png
星光闪!闪!闪~!星云梦
回复

使用道具 举报

梦石
0
星屑
37
在线时间
71 小时
注册时间
2015-11-28
回帖
34
发表于 2016-2-23 19:46:05 | 显示全部楼层
本帖最后由 yaohongde 于 2016-2-23 19:55 编辑

已经修改好了,然后随便改了一下你的脚本,加了位置高修改(因为我是脚本渣,找不到它的X坐标修改方式)(好吧等于没改{:2_276:} )
[fold=脚本]
  1. #==============================================================================
  2. # +++ VX移植 - VA负重系统改进版 +++
  3. #==============================================================================
  4. # VX版 原作者 By 雪流星
  5. # 蓝本 杂兵天下的VA移植版
  6. # 改进 By:VIPArcher
  7. #  -- 本脚本来自 https://rpg.blue 使用或转载请保留以上信息。
  8. #
  9. #==============================================================================
  10. # 就是在物品画面的右上角放了一个显示负重的窗口
  11. # 更新了代码,取消的原来的计算每个队员的负重然后累加的模式 2014-12-10
  12. # 增加了商店界面的负重显示     2014-9-3
  13. #==============================================================================
  14. #
  15. # 物品备注<load N> 则该物品占用 N 点负重
  16. # load也可以写成「负重」或「負重」#注:没有“「」”不写的话默认为 Default_Load
  17. # 更改当前负重 current_load(x[,assign])
  18. # 其中 x 为数值可以为负数,assign 为 true 时当前负重直接赋值为x(可省略)
  19. # 例如:current_load(10,true) 当前负重直接赋值为10
  20. # 默认给物品增加一行说明.说明内容是物品的重量.
  21. # 但默认帮助窗口一共只能显示2行内容.
  22. # 因此你在数据库设置武器、护甲说明的时候.
  23. # 如果设置了2行内容.那么这新增加的第3行将无法显示出来.
  24. # 特别地,如果你使用了我的【技能物品说明增强】脚本,请将其置于该脚本以上的位置
  25. #==============================================================================
  26. $VIPArcherScript ||= {};$VIPArcherScript[:load] = 20140919
  27. #==============================================================================
  28. # ★ 设定部分 ★
  29. #==============================================================================
  30. module  VIPArcher end
  31. module  VIPArcher::Load
  32.   Default_Load = 1    #物品的默认负重
  33.   Load_Name = "负重:" #负重前显示的文字
  34.   Load_Var = 0        #作为队伍负重上限的变量ID,为0禁用变量作为负重上限,变成
  35.                       #累计每个角色的负重能力来计算负重上限
  36.   Load_Eval = "((mhp + mmp) * @level / agi) * [hp_rate,0.5].max"
  37.   # 每个角色的负重计算公式(eval)
  38.   Stop_SW = false       #true 使用 / false 不使用
  39.   # 事件中调用增减道具/武器/防具时,如果会导致超过负重上限,是否执行中断事件处理
  40.   # 推荐不使用,因为新加的功能就有一个是当超过负重时限制角色移动,开启这个
  41.   # 的话这个限制移动就无效了的说·3·

  42.   Movable =  true       #true 使用 / false 不使用
  43.   # 满负重时降低移动速度(不使用时禁止移动连事件都无法启动,只能丢弃/使用物品)

  44.   Move_Speed = 2 # 满负重时的移动速度

  45. #\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\
  46.                 #yaohong添加部分(负重信息窗口宽度是它自带的)

  47.   Y = 72              #负重信息窗口位置高
  48.   
  49.   Width = 150         #负重信息窗口宽度
  50.   
  51.   Height = 1          #负重信息窗口高度
  52. #\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\

  53.   # 负重超过上限时的提示内容
  54.   Message = "\\i[4]负重超过可承受的范围,\n移动将变得\\c[10]十分艰难!\\c[0]
  55. 丢些没用的东西掉吧。"

  56.   # 按X键(A键)是否可以丢弃道具
  57.   # 如果你另外使用了丢弃道具的脚本请关闭
  58.   Lose_SW = true       #true 使用 / false 不使用

  59.   # 是否在帮助窗口内自动添加负重信息
  60.   Help_SW = true       #true 使用 / false 不使用

  61.   # 装备在身上的装备是否算入负重
  62.   Equip_SW = true      #true 计算 / false 不计算
  63.   #         "★★★★★★ 注意 ★★★★★★"
  64.   # 如果你的角色初始装备有占负重并且开启上面的功能,那么你必须
  65.   # 在游戏一开始时为当前负重赋值(自己算到底有多少负重·3·)
  66.   # 当有新队员加入队伍并且也带有负重的装备那么你也需要为当前负重加上对应的重量,
  67.   # 例如:事件脚本运行 current_load(10) 就是加上10的当前负重
  68. end
  69. #==============================================================================
  70. # ☆ 设定结束 ☆
  71. #==============================================================================
  72. class RPG::BaseItem
  73.   include VIPArcher::Load
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取道具的重量
  76.   #--------------------------------------------------------------------------
  77.   def load
  78.     return unless self.is_a?(RPG::Item) || self.is_a?(RPG::EquipItem)
  79.     return $1.to_i if @note =~ /<(?:load|负重|負重)\s*(\d+)>/i
  80.     return Default_Load
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 新增负重帮助内容
  84.   #--------------------------------------------------------------------------
  85.   def description
  86.     if Help_SW && load && load != 0
  87.       return @description + "\n\\}重量:#{load}"
  88.     else
  89.       return @description
  90.     end
  91.   end unless $VIPArcherScript[:help_ex]
  92. end
  93. #==============================================================================
  94. #  显示当前负重信息的窗口
  95. #==============================================================================
  96. class Window_Load < Window_Base
  97.   include VIPArcher::Load
  98.   #--------------------------------------------------------------------------
  99.   # ● 初始化对象
  100.   #--------------------------------------------------------------------------
  101.   def initialize
  102.     super(Graphics.width - window_width, Y,window_width,
  103.        fitting_height(Height))
  104.     refresh
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 获取窗口的宽度
  108.   #--------------------------------------------------------------------------
  109.   def window_width
  110.     Width
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 刷新
  114.   #--------------------------------------------------------------------------
  115.   def refresh
  116.     contents.clear
  117.     contents.font.size - 4
  118.     draw_text(0, 0, window_width - 64, 24,load_name,0)
  119.     draw_text(0, 0, window_width - 24, 24, weight,2)
  120.     @temp_load = $game_party.current_load
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 获取当前负重信息
  124.   #--------------------------------------------------------------------------
  125.   def weight
  126.     "#{$game_party.current_load}/#{$game_party.total_load}"
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 获取负重前显示文字
  130.   #--------------------------------------------------------------------------
  131.   def load_name
  132.     Load_Name
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 更新画面
  136.   #--------------------------------------------------------------------------
  137.   def update
  138.     super
  139.     refresh if @temp_load != $game_party.current_load
  140.   end
  141. end
  142. #-------------------------------------------------------------------------------
  143. class Window_ItemCategory < Window_HorzCommand
  144.   include VIPArcher::Load
  145.   #--------------------------------------------------------------------------
  146.   # ● 获取窗口的宽度
  147.   #--------------------------------------------------------------------------
  148.   def window_width
  149.     scene_item_is? ? Graphics.width - Width : Graphics.width
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 获取列数
  153.   #--------------------------------------------------------------------------
  154.   def col_max
  155.     return scene_item_is? ? 3 : 4
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 判断是否为物品栏场景
  159.   #--------------------------------------------------------------------------
  160.   def scene_item_is?
  161.     return SceneManager.scene_is?(Scene_Item)
  162.   end
  163. end
  164. #==============================================================================
  165. # ■ 物品界面显示负重栏
  166. #==============================================================================
  167. class Scene_Item < Scene_ItemBase
  168.   include VIPArcher::Load
  169.   #--------------------------------------------------------------------------
  170.   # ● 开始处理
  171.   #--------------------------------------------------------------------------
  172.   alias load_start start
  173.   def start
  174.     load_start
  175.     @load_window = Window_Load.new
  176.     @load_window.viewport = @viewport
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 结束处理
  180.   #--------------------------------------------------------------------------
  181.   alias load_terminate terminate
  182.   def terminate
  183.     load_terminate
  184.     @load_window.dispose
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 更新画面
  188.   #--------------------------------------------------------------------------
  189.   alias load_update update
  190.   def update
  191.     #--------------------------------------------------------------------------
  192.     # ★ 按X键(A键)丢弃道具 - 贵重物品无法丢弃 ★修改:VIPArcher
  193.     #--------------------------------------------------------------------------
  194.     if Input.trigger?(Input::X) && Lose_SW
  195.       item = @item_window.item
  196.       if item.is_a?(RPG::Item) && item.key_item?
  197.         Sound.play_buzzer
  198.       else
  199.         Sound.play_cancel
  200.         $game_party.lose_item(item, 1)
  201.         @item_window.refresh
  202.       end unless item == nil
  203.     end
  204.     @load_window.update
  205.     load_update
  206.   end
  207. end
  208. #-------------------------------------------------------------------------------
  209. class Window_ShopNumber < Window_Selectable
  210.   include VIPArcher::Load
  211.   attr_accessor :buy_or_sell                    #买入的标志
  212.   #--------------------------------------------------------------------------
  213.   # ● 刷新
  214.   #--------------------------------------------------------------------------
  215.   alias vip_shopnumber_refresh refresh
  216.   def refresh
  217.     vip_shopnumber_refresh
  218.     draw_current_weight(@item)
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ○ 买卖时重量变化的描绘
  222.   #--------------------------------------------------------------------------
  223.   def draw_current_weight(item)
  224.     current = $game_party.current_load
  225.     weight = current + item.load * @number * (@buy_or_sell ? 1 : -1)
  226.     width = contents_width - 8
  227.     cx = text_size(@currency_unit).width
  228.     change_color(system_color)
  229.     draw_text(4, y + 60, width, line_height, "#{Load_Name}")
  230.     change_color(normal_color)
  231.     wt = "#{weight} / #{$game_party.total_load}"
  232.     draw_text(4, y + 60, width, line_height, wt, 2)
  233.   end
  234. end
  235. #-------------------------------------------------------------------------------
  236. class Window_ShopStatus < Window_Base
  237.   include VIPArcher::Load
  238.   #--------------------------------------------------------------------------
  239.   # ● 刷新
  240.   #--------------------------------------------------------------------------
  241.   alias vip_shopstatus_refresh refresh
  242.   def refresh
  243.     vip_shopstatus_refresh
  244.     draw_weight_occupy(4, 24)
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 绘制持负重信息
  248.   #--------------------------------------------------------------------------
  249.   def draw_weight_occupy(x, y)
  250.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  251.     change_color(system_color)
  252.     draw_text(rect, "#{Load_Name}", 3)
  253.     change_color(normal_color)
  254.     weight = "#{$game_party.current_load}/#{$game_party.total_load}"
  255.     draw_text(rect, weight, 2)
  256.     @temp_load = $game_party.current_load
  257.   end
  258. end
  259. #==============================================================================
  260. # ■ 获取队伍最大负重
  261. #==============================================================================
  262. class Game_Party < Game_Unit
  263.   include VIPArcher::Load
  264.   #--------------------------------------------------------------------------
  265.   # ● 定义实例变量
  266.   #--------------------------------------------------------------------------
  267.   attr_accessor :current_load, :load_trade_item     #负重
  268.   #--------------------------------------------------------------------------
  269.   # ● 初始化对象
  270.   #--------------------------------------------------------------------------
  271.   alias load_initialize initialize
  272.   def initialize
  273.     load_initialize
  274.     total_load
  275.     @current_load = 0
  276.     @total_load = 0
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 获取队伍最大负重
  280.   #--------------------------------------------------------------------------
  281.   def total_load
  282.     return $game_variables[Load_Var] if Load_Var > 0
  283.     all_members.inject(0) {|total,actor| total + actor.load }
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● 判断负重是否已满
  287.   #--------------------------------------------------------------------------
  288.   def load_max?
  289.     return false if @current_load == 0
  290.     @current_load >= total_load
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● 增加/减少物品时计算负重
  294.   #--------------------------------------------------------------------------
  295.   alias load_gain_item gain_item
  296.   def gain_item(item, n, include_equip = false)
  297.     return if item.nil?
  298.     load_gain_item(item, n, include_equip)
  299.     @current_load += item.load * n if !@load_trade_item
  300.   end
  301. end
  302. #-------------------------------------------------------------------------------
  303. class Game_Actor < Game_Battler
  304.   include VIPArcher::Load
  305.   #--------------------------------------------------------------------------
  306.   # ● 装备时不计算负重的增减 * 方法覆盖
  307.   #     new_item : 取出的物品
  308.   #     old_item : 放入的物品
  309.   #--------------------------------------------------------------------------
  310.   def trade_item_with_party(new_item, old_item)
  311.     return false if new_item && !$game_party.has_item?(new_item)
  312.     $game_party.load_trade_item = true if Equip_SW == true
  313.     $game_party.gain_item(old_item, 1)
  314.     $game_party.lose_item(new_item, 1)
  315.     $game_party.load_trade_item = false if Equip_SW == true
  316.     return true
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 获取角色的负重上限
  320.   #--------------------------------------------------------------------------
  321.   def load
  322.     eval(Load_Eval).to_i
  323.   end
  324. end
  325. #==============================================================================
  326. # ■ 增减物品时判断负重
  327. #==============================================================================
  328. class Game_Interpreter
  329.   include VIPArcher::Load
  330.   #--------------------------------------------------------------------------
  331.   # ● 增减道具
  332.   #--------------------------------------------------------------------------
  333.   alias load_command_126 command_126
  334.   def command_126
  335.     n = operate_value(@params[1], @params[2], @params[3])
  336.     return command_115 if check_load(@params[0], 0, n) && Stop_SW
  337.     load_command_126
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 增減武器
  341.   #--------------------------------------------------------------------------
  342.   alias load_command_127 command_127
  343.   def command_127
  344.     n = operate_value(@params[1], @params[2], @params[3])
  345.     return command_115 if check_load(@params[0], 1, n) &&  Stop_SW
  346.     load_command_127
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 增減防具
  350.   #--------------------------------------------------------------------------
  351.   alias load_command_128 command_128
  352.   def command_128
  353.     n = operate_value(@params[1], @params[2], @params[3])
  354.     return command_115 if check_load(@params[0], 2, n) && Stop_SW
  355.     load_command_128
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 增减物品超重时提示
  359.   #--------------------------------------------------------------------------
  360.   def check_load(item_id, type, n)
  361.     case type
  362.     when 0; item = $data_items[item_id]
  363.     when 1; item = $data_weapons[item_id]
  364.     when 2; item = $data_armors[item_id]
  365.     end
  366.     if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  367.       $game_message.texts.push("#{Message}") if $game_message.visible != true
  368.       $game_message.visible = true
  369.     end
  370.     return (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 更改负重
  374.   #--------------------------------------------------------------------------
  375.   def current_load(current_load,assign = false)
  376.     if assign
  377.       $game_party.current_load = current_load
  378.     else
  379.       $game_party.current_load += current_load
  380.     end
  381.   end
  382. end
  383. #==============================================================================
  384. # ★ 满负重时限制行动 ★
  385. #==============================================================================
  386. class Game_Player < Game_Character
  387.   include VIPArcher::Load
  388.   #--------------------------------------------------------------------------
  389.   # ● 判定是否可以移动
  390.   #--------------------------------------------------------------------------
  391.   alias load_movable? movable?
  392.   def movable?
  393.     return false if $game_party.load_max? && !Movable
  394.     load_movable?
  395.   end
  396. end
  397. #==============================================================================
  398. # ★ 满负重时降低移动速度 ★
  399. #==============================================================================
  400. class Game_CharacterBase
  401.   include VIPArcher::Load
  402.   #--------------------------------------------------------------------------
  403.   # ● 获取移动速度(判断是否跑步)
  404.   #--------------------------------------------------------------------------
  405.   alias load_real_move_speed real_move_speed
  406.   def real_move_speed
  407.     return Move_Speed if $game_party.load_max? && Movable
  408.     load_real_move_speed
  409.   end
  410. end
  411. #==============================================================================
  412. # ★ 满负重时限制购买 ★
  413. #==============================================================================
  414. class Window_ShopBuy < Window_Selectable
  415.   #--------------------------------------------------------------------------
  416.   # ● 查询商品是否可买
  417.   #--------------------------------------------------------------------------
  418.   alias load_enable? enable?
  419.   def enable?(item)
  420.     load_enable?(item) && !$game_party.load_max?
  421.   end
  422. end
  423. #==============================================================================
  424. # ★ 根据负重设定可购买的物品数量 ★
  425. #==============================================================================
  426. class Scene_Shop < Scene_MenuBase
  427.   #--------------------------------------------------------------------------
  428.   # ● 指令“买入”
  429.   #--------------------------------------------------------------------------
  430.   alias vip_load_command_buy command_buy
  431.   def command_buy
  432.     vip_load_command_buy
  433.     @number_window.buy_or_sell = true
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 指令“卖出”
  437.   #--------------------------------------------------------------------------
  438.   alias vip_load_command_sell command_sell
  439.   def command_sell
  440.     vip_load_command_sell
  441.     @number_window.buy_or_sell = false
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ● 获取可以买入的最大值
  445.   #--------------------------------------------------------------------------
  446.   alias load_max_buy max_buy
  447.   def max_buy
  448.     vip = @item.load == 0 ? load_max_buy : ($game_party.total_load -
  449.     $game_party.current_load) / @item.load
  450.     [load_max_buy,vip].min
  451.   end
  452. end
复制代码
[/fold]
星光闪!闪!闪~!星云梦
回复

使用道具 举报

梦石
0
星屑
2116
在线时间
950 小时
注册时间
2015-7-16
回帖
692

开拓者

发表于 2016-2-28 16:40:33 | 显示全部楼层
想回報一個問題,雖然沒什麼特別的
不過有就提出來吧

就是當使用負重腳本後,跟著XAS系統一起使用,當負重超過,玩家慢慢走時
使用XAS做攻擊技能,不會有任何效果,但是一樣會有傷害 (簡單來說,動畫沒了
不知道這樣回報有沒有任何方面的幫助

点评

一種ARPG系統,挺好玩的  发表于 2016-5-26 10:12
不是很懂你说的啥XAS我没见过。/w\  发表于 2016-5-26 10:08
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

梦石
0
星屑
2116
在线时间
950 小时
注册时间
2015-7-16
回帖
692

开拓者

发表于 2016-2-28 16:59:11 | 显示全部楼层
yaohongde 发表于 2016-2-23 19:46
已经修改好了,然后随便改了一下你的脚本,加了位置高修改(因为我是脚本渣,找不到它的X坐标修改方式)( ...

腳本渣的我開始研究了
260行那邊, 可以改X,只是我方法很土,直接加空白

例如
draw_text(rect,"             #{Load_Name}", 3)
希望有幫上忙
[神性领域扩张:扩张神性领域]
说了等于没说.
回复

使用道具 举报

梦石
0
星屑
1297
在线时间
995 小时
注册时间
2014-12-14
回帖
2939

开拓者

发表于 2016-3-10 14:19:03 | 显示全部楼层
本帖最后由 Vortur 于 2016-3-11 16:14 编辑

很棒的系统!只是随着收集的脚本越来越多,对于脚本兼容的忧虑也越拉越重。
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复

使用道具 举报

梦石
0
星屑
308
在线时间
149 小时
注册时间
2008-5-18
回帖
5
发表于 2016-5-26 00:46:37 | 显示全部楼层
想问请问一下,有没有办法在超过负重的时候给队伍全员(或主角)
加上一个(或多个)状态呢?
只在负重超过时被赋予的状态。

点评

成功了,非常感谢  发表于 2016-5-27 01:17
公共事件用分支条件-脚本-填上$game_party.load_max? 来判断是否超重。来对角色进行状态附加或是解除  发表于 2016-5-26 10:07
如果你会脚本可以自己自己写一写试试,用$game_party.load_max?来判断队伍是否已经超重。不会脚本的话就并行一个公共事件吧  发表于 2016-5-26 10:06
回复

使用道具 举报

梦石
0
星屑
308
在线时间
149 小时
注册时间
2008-5-18
回帖
5
发表于 2016-5-27 01:54:36 | 显示全部楼层
本帖最后由 cvsb 于 2016-5-27 11:52 编辑

欸,自己找到答案了,原来是附加状态与agi挂勾
偏偏负重值预设也跟agi挂勾,就这样一直重复判定,sry

*****************************************
不好意思,似乎又出现了些小麻烦
负重超过时已经确实可以附加状态,
但丢弃物品使负重减轻至未超过负重能力后,
状态有时候会顺利消失,有时候不会,
又有时候状态会走一走出现又走一走消失,
请问我的设定哪边出错呢?
http://imgur.com/D0jK7BC




****************************************

后来发现好像是负重值一直起伏不定的关係,
有时候变成3X,有时变成9
结果就一直判定状态反覆出现
请问为何会产生这种情况呢?
回复

使用道具 举报

梦石
0
星屑
2182
在线时间
20 小时
注册时间
2011-1-25
回帖
3
发表于 2016-7-14 11:11:16 | 显示全部楼层
楼主你好,请问为什么我的物品增减到上限了没有显示那句提示呢?谢谢!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
133 小时
注册时间
2016-4-28
回帖
137
发表于 2016-8-17 21:07:24 | 显示全部楼层
如果带上有公共事件的物品 画面会一卡一卡的哦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部