Project1

标题: [应求发布]负重系统 [打印本页]

作者: 雪流星    时间: 2008-11-19 12:35
标题: [应求发布]负重系统
就是在物品画面的右上角放了一个显示负重的窗口
在物品的备注里面写
[load N] 则该物品占用 N 点负重
load也可以写成「负重」或「負重」
不写的话默认为 0

每个角色的负重公式:
(HP最大值+MP最大值) X 等级 / 速度

超过队伍总负重时无法获得物品
$game_party.current_load 获取队伍当前负重
$game_party.total_load   获取队伍总负重

新增功能说明:
可以用
  1. check_load(物品ID, 类型, 数量)
复制代码

来判断是不是会超过负重
类型: 0:物品  1:武器  2:防具

调用「增减物品/武器/防具」指令时,会自动判断负重,超过负重时自动执行「中断事件处理」
所以请注意「增减物品/武器/防具」指令在事件中的位置,不要放在开关或变量操作的後面

脚本更新:
* 2009/02/17
  - BUG 修正:更正改职业时会出现错误的问题

* 2009/02/20
  - 功能修改:超过负重时自动调用「中断事件处理」
  - 功能增加:可以用脚本 check_load(物品ID, 类型, 数量)  来判断是不是会超过负重

* 2009/05/02
  - 功能增加:按 X 键删除当前物品 1 个
  - BUG 修正:负重变更时,负重窗口刷新问题

  1. class RPG::BaseItem
  2.   # 获取物品重量
  3.   def load
  4.     return if self.is_a?(RPG::Skill)
  5.     self.note.split(/[\r\n]+/).each { |line|
  6.       if line =~ /\[(?:load|负重|負重) (\w+)\]/
  7.         return $1.nil? ? 0 : $1.to_i
  8.       end}
  9.     return 0
  10.   end
  11. end
  12. class Scene_Item < Scene_Base
  13.   alias load_start start
  14.   alias load_terminate terminate
  15.   alias load_update update
  16.   alias load_update_item_selection update_item_selection
  17.   def start
  18.     # 生成负重显示窗口
  19.     load_start
  20.     @load_window = Window_Base.new(392, 0, 152, 56)
  21.     @load_window.viewport = @viewport
  22.   end
  23.   def terminate
  24.     # 释放负重显示窗口
  25.     @load_window.dispose
  26.     load_terminate
  27.   end
  28.   def update
  29.     @load_window.update
  30.     # 刷新负重显示窗口
  31.     if @temp_load != $game_party.current_load
  32.       @load_window.contents.clear
  33.       @load_window.contents.draw_text(0, 0, 120, 24, "#{$game_party.current_load}/#{$game_party.total_load}")
  34.       @temp_load = $game_party.current_load
  35.     end
  36.     load_update
  37.   end
  38.   def update_item_selection
  39.     if Input.trigger?(Input::X)
  40.       @item = @item_window.item
  41.       $game_party.lose_item(@item, 1)
  42.       @item_window.refresh
  43.     else
  44.       load_update_item_selection
  45.     end
  46.   end
  47. end
  48. class Game_Party < Game_Unit
  49.   attr_reader :current_load
  50.   alias load_initialize initialize
  51.   alias load_gain_item gain_item
  52.   def initialize
  53.     load_initialize
  54.     @current_load = 0
  55.   end
  56.   # 获取队伍最大负重
  57.   def total_load
  58.     party_load = 0
  59.     #members.size.times do |i|
  60.     for i in 0...members.size
  61.       actor = members[i]
  62.       party_load += actor.load
  63.     end
  64.     return party_load
  65.   end
  66.   def gain_item(item, n, include_equip = false)
  67.     return if item.nil?
  68.     if ((item.load * n) + @current_load) > total_load
  69.       $game_message.texts.push("負重不足,請先清空身上的物品")
  70.       $game_message.visible = true
  71.       return
  72.     else
  73.       @current_load += item.load * n
  74.     end
  75.     load_gain_item(item, n, include_equip)
  76.   end
  77. end
  78. class Game_Actor < Game_Battler
  79.   # 获取队员负重
  80.   def load
  81.     return (maxhp + maxmp) * @level / agi
  82.   end
  83. end
  84. class Game_Interpreter
  85.   alias load_command_126 command_126
  86.   alias load_command_127 command_127
  87.   alias load_command_128 command_128
  88.   def command_126
  89.     n = operate_value(@params[1], @params[2], @params[3])
  90.     return command_115 if check_load(@params[0], 0, n)
  91.     load_command_126
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 增減武器
  95.   #--------------------------------------------------------------------------
  96.   def command_127
  97.     n = operate_value(@params[1], @params[2], @params[3])
  98.     return command_115 if check_load(@params[0], 1, n)
  99.     load_command_127
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 增減防具
  103.   #--------------------------------------------------------------------------
  104.   def command_128
  105.     n = operate_value(@params[1], @params[2], @params[3])
  106.     return command_115 if check_load(@params[0], 2, n)
  107.     load_command_128
  108.   end
  109.   def check_load(item_id, type, n)
  110.     case type
  111.     when 0; item = $data_items[item_id]
  112.     when 1; item = $data_weapons[item_id]
  113.     when 2; item = $data_armors[item_id]
  114.     end
  115.     if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  116.       $game_message.texts.push("負重不足,請先清空身上的物品")
  117.       $game_message.visible = true
  118.       return true
  119.     end
  120.     return false
  121.   end
  122. end
复制代码

作者: 一瞬间的幻觉    时间: 2008-11-19 14:41
{/se}谢谢。。我也正需要
作者: v2sam    时间: 2008-11-19 17:12
{/dy} 谢谢流星,这是第一个VX版?
作者: 塑望    时间: 2008-11-19 18:17
{/hx}流星果然是女神{/fd}的化身.. [楼下..你赢了]

{/fd}一般要什么要多了...你就写了....{/gg}
作者: 木葬枫    时间: 2008-11-19 18:22
楼上口胡!天使的化身是八云>_<流星姐姐是女神的化身………
作者: 雪流星    时间: 2008-11-19 18:45
补充一下:
每个角色的负重公式:
(HP最大值+MP最大值) X 等级 / 速度
作者: 星辰天羽    时间: 2008-11-19 20:26
雪流星……你太强了,等我脚本学好,一定帮你写一个银河系统来答谢!!!{/se}
作者: 木葬枫    时间: 2008-11-19 21:43
以下引用星辰天羽于2008-11-19 12:26:06的发言:

雪流星……你太强了,等我脚本学好,一定帮你写一个银河系统来答谢!!!

明年吧······
作者: 沉影不器    时间: 2008-11-20 06:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-11-20 15:49
以下引用沉影不器于2008-11-19 22:44:40的发言:
先支持一下,回头有时间细看再挑挑毛病

我自己挑到了兩個
已經更新
作者: woodytt    时间: 2009-2-17 09:42
请问在使用了贵脚本后,执行“主角职业变更”或者脚本:$game_actors[N].class_id=N时总是报错。能不能麻烦修正一下,谢谢。 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『多谢指出』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 雪流星    时间: 2009-2-17 18:22
以下引用woodytt于2009-2-17 1:42:44的发言:
请问在使用了贵脚本后,执行“主角职业变更”或者脚本:$game_actors[N].class_id=N时总是报错。能不能麻烦修正一下,谢谢。

已经修改,多谢指出
作者: smj336521    时间: 2009-2-20 16:58
{/fd}{/fd}负重满的时候 通过事件得到物品 东西会被伟大的宇宙吃掉
{/cy}还是用-移动速度的惩罚方式好
{/fd}{/fd}要每个 得到物品 物品前都加$game_party.current_load $game_party.total_load (不光是负重和总负重对比就可以 还要负重加上得到的物品=。= 那么多东西都要一个个根据备注改 )   判断修改太麻烦拉  {/hx}光宝箱就有百来个了
{/ll}{/ll}目前这游戏无福消受了 要=下个了
把某一个事件暂时消除
$game_map.events[X].erase
再调出来是什么?
    if ((item.load * n) + @current_load) > total_load
      $game_message.texts.push("东西太多拉,请先清理身上的物品")
      $game_message.visible = true
      $game_map.events[/@event_id/].erase
      return
    else
      @current_load += item.load * n
    end
{/hx}{/hx} 我想加到这里面
作者: 雪流星    时间: 2009-2-20 18:54
脚本更新:
* 2009/02/20
  - 功能增加:超过负重时自动调用「中断事件处理」
  - 功能增加:可以用脚本 check_load(物品ID, 类型, 数量)  来判断是不是会超过负重


新增功能说明:
可以用
  1. check_load(物品ID, 类型, 数量)
复制代码

来判断是不是会超过负重
类型: 0:物品  1:武器  2:防具

调用「增减物品/武器/防具」指令时,会自动判断负重,超过负重时自动执行「中断事件处理」
所以请注意「增减物品/武器/防具」指令在事件中的位置,不要放在开关或变量操作的後面

作者: smj336521    时间: 2009-2-20 18:58
{/fd}膜拜下   下手真快




{/fd}{/fd}{/fd}啊啊 啊 啊 啊啊啊 啊啊啊
万恶的默认宝箱啊 我XXXXXXXX 竟然先开关后给物品的=。=


第2个是自动判断后说的话吧?







物品类型  0的时候出现错误  1正常   2没反应跳过
作者: 雪流星    时间: 2009-2-21 04:51
以下引用smj336521于2009-2-20 10:58:50的发言:
物品类型 0的时候出现错误 1正常  2没反应跳过

出现什麽错误?
我测试没有错误阿?

还是你设定错误?
作者: smj336521    时间: 2009-2-21 05:13
{/fd}{/fd}那也许是 我其他脚本问题? 设定错误的画 我用 1的时候也应该是错误的




作者: 雪流星    时间: 2009-2-21 05:43
=口=
错误讯息......是什麽?我才能猜猜你是哪里做错了
作者: woodytt    时间: 2009-2-21 06:32
正期待着,更新就来了~~
收下了,谢谢!{/cy}{/cy}{/cy}

作者: woodytt    时间: 2009-3-5 03:10
{/ll}{/ll}{/ll}{/ll}
6r终于……恢复连接了 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『不要灌水』,积分『-15』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 痒死我了    时间: 2009-3-8 19:36
这个脚本是写过的

写过的那个还增加了负重减速度的功能
作者: smj336521    时间: 2009-3-12 08:53
{/fd}上次本来想说的 想到好多点了的 可是论坛突然被2会和谐到了= =
忘记要说什么了

想起了一点  加上一个物品丢弃功能 负重系统必备{/hx}

作者: discain    时间: 2009-4-23 23:24
发错话了………………
这个负重系统先收下,慢慢测试看。
作者: 雪流星    时间: 2009-5-3 19:55
以下引用smj336521于2009-3-12 0:53:54的发言:
想起了一点 加上一个物品丢弃功能 负重系统必备


接受蚊香提议

* 2009/05/02
  - 功能增加:按 X 键删除当前物品 1 个
  - BUG 修正:负重变更时,负重窗口刷新问题
[LINE]1,#dddddd[/LINE]
还有什麽建议吗?
作者: 幻之音    时间: 2009-5-29 23:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2009-5-30 01:33
以下引用幻之音于2009-5-29 15:36:32的发言:
请问使用贵脚本后,要往备注里填负重量,那么备注栏在那里?

数据库 - 物品 - 右下角
作者: 我喜歡RPG    时间: 2009-5-31 02:00
我來參觀參觀。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1