查看: 2119|回复: 3

[已经解决] 有没有临时关闭《技能物品说明增强》修改版脚本的方法?

[复制链接]
梦石
0
星屑
8004
在线时间
1320 小时
注册时间
2006-7-18
回帖
459
发表于 2016-8-15 22:51:47 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 雷影 于 2016-8-15 22:55 编辑

技能物品说明增强 蓝本:wyongcan
# 修改 :VIPArcher

这个脚本和仓库脚本一起使用时,跳出来的说明框占了太大屏幕,看不清物品列表了!
所以有没有办法临时关闭?打开仓库时临时关闭,用完仓库后在打开!

物品说明帮助增强修改版连接
]物品说明帮助增强修改版
[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# ■ 技能物品说明增强 蓝本:wyongcan
# 修改 :VIPArcher
#
# 改动说明:
# [删除线]old_xxx这种别名方法到底是从哪里开始流传的啊?[/删除线]
# 改用新的帮助窗口和新定义draw_text_vip方法来增强兼容性
# 更改初始化数据时机以支持跳过标题
# 追加对普通物品和技能的说明内容
# 修改了对帮助窗口行数的计算以支持控制符
# 加上了各种颜色的设置,具体更高级的玩法自己领悟吧
# 改成光标不动一段时间后才会出现帮助窗口
#
#  -- 本脚本来自 https://rpg.blue 使用或转载请保留以上信息。
#==============================================================================
$VIPArcherScript ||= {};$VIPArcherScript[:help_ex] = 20141007
$VIPArcherScript[:equip_limit] = false #是否使用了后知后觉的装备能力限制
class << DataManager
  alias_method :vip_load_database, :load_database
  #--------------------------------------------------------------------------
  # ● 读取数据库
  #--------------------------------------------------------------------------
  def load_database
    vip_load_database
    VIPArcher::Equipplus.equiphelpready
  end
end
module VIPArcher;end
module VIPArcher::Equipplus
  TIME = 90 #帮助窗口自动出现的时间(单位帧
  Font_Name = Font.default_name # 推荐"微软雅黑"
  Font_Size = 14                # "微软雅黑"的话就20号字体
  UP   = 24 #能力值提升颜色编号
  DOWN = 25 #能力值下降颜色编号
  VIP  = 14 #特殊能力颜色编号
  MP   = 23
  TP   = 29
  CODE ={
    11 => "属性抗性",
    12 => "弱化抗性",
    13 => "状态抗性",
    14 => "状态免疫",
    21 => "普通能力",
    22 => "添加能力",
    23 => "特殊能力",
    31 => "附带属性",
    32 => "附带状态",
    33 => "攻击速度",
    34 => "添加攻击次数",
    41 => "添加技能类型",
    42 => "禁用技能类型",
    43 => "添加技能",
    44 => "禁用技能",
    51 => "可装备武器类型",
    52 => "可装备护甲类型",
    53 => "固定装备",
    54 => "禁用装备",
    55 => "装备风格",
    61 => "添加行动次数",
    62 => "特殊标志",
    63 => "消失效果",
    64 => "队伍能力"}
  #特殊标志
  FLAG ={
    0 => "自动战斗",
    1 => "擅长防御",
    2 => "保护弱者",
    3 => "特技专注"}
  #技能效果范围
  SCOPE ={
    0 => "无",
    1 => "单个敌人",
    2 => "全体敌人",
    3 => "一个随机敌人",
    4 => "两个随机敌人",
    5 => "三个随机敌人",
    6 => "四个随机敌人",
    7 => "单个队友",
    8 => "全体队友",
    9 => "单个队友(战斗不能)",
    10 => "全体队友(战斗不能)",
    11 => "使用者" }
  #技能命中类型
  HIT ={
    0 => "必定命中",
    1 => "物理攻击",
    2 => "魔法攻击"}
  #使用限制
  OCCASION ={
    0 => "随时可用",
    1 => "仅战斗中",
    2 => "仅菜单中",
    3 => "不能使用"}
  #添加能力
  XPARAM ={
    0 => "物理命中几率:",
    1 => "物理闪避几率:",
    2 => "必杀几率:",
    3 => "必杀闪避几率:",
    4 => "魔法闪避几率:",
    5 => "魔法反射几率:",
    6 => "物理反击几率:",
    7 => "体力值再生速度:",
    8 => "魔力值再生速度:",
    9 => "特技值再生速度:"}
  #特殊能力
  SPARAM ={
    0 => "受到攻击的几率",
    1 => "防御效果比率",
    2 => "恢复效果比率",
    3 => "药理知识",
    4 => "MP消费率",
    5 => "TP消耗率",
    6 => "物理伤害加成",
    7 => "魔法伤害加成",
    8 => "地形伤害加成",
    9 => "经验获得加成"}
  #装备风格  require 装备风格扩展脚本
  SLOT_TYPE ={
    0 => "普通",
    1 => "双持武器",
    2 => "索爷三刀流",
    3 => "NPC",
    4 => "233",
    5 => "论坛@的BUG好烦啊"}
  #队伍能力
  PARTY_ABILITY ={
    0 => "遇敌几率减半",
    1 => "随机遇敌无效",
    2 => "敌人偷袭无效",
    3 => "先制攻击几率上升",
    4 => "获得金钱数量双倍",
    5 => "物品掉落几率双倍"}
  #伤害类型
  DAMAGE_TYPE = {
    0 => "无",
    1 => "体力值伤害",
    2 => "魔力值伤害",
    3 => "体力值恢复",
    4 => "魔力值恢复",
    5 => "体力值吸收",
    6 => "魔力值吸收"}
  #普通能力
  #这只是个示范,你也可以依照个人喜好对这些用语添加颜色控制符
  @params ={
    0 => "\\c[17]最大HP",
    1 => "\\c[16]最大MP",
    2 => "\\c[20]物攻",
    3 => "\\c[21]物防",
    4 => "\\c[30]魔攻",
    5 => "\\c[31]魔防",
    6 => "\\c[14]敏捷",
    7 => "\\c[17]幸运"}
  #我举例技能类型的原因就是因为它 短
  @skill_types = { # 这个和下面equiphelpready里注释掉的做的是一样的事
                   # 只是下面是读取数据库添加用语,这里是手动枚举
    1 => "\\c[1]特技",
    2 => "\\c[2]魔法",
    3 => "\\c[3]必杀",
    4 => "\\c[5]卖萌"}
  #初始化数据,当然如果你要用上面那样的控制符改变颜色的话
  #欢迎枚举格式就是上面这样用Hash,用ID做键把用语对应起来
  def self.equiphelpready
    params = $data_system.terms.params
    elements = $data_system.elements
    weapon_types = $data_system.weapon_types
    armor_types = $data_system.armor_types
    etypes = $data_system.terms.etypes
    skill_types = $data_system.skill_types
    @states       ||= {}
    @params       ||= {}
    @weapon_types ||= {}
    @armor_types  ||= {}
    @etypes       ||= {}
    @skill_types  ||= {}
    @elements     ||= {}
    skill_types.each_with_index{|x,y| @skill_types[y] = x if !x.nil?} if @skill_types == {}
    $data_states.each{|x| @states[x.id] = x.name if !x.nil?} if @states == {}
    elements.each_with_index{|x,y| @elements[y] = x if !x.nil?} if @elements == {}
    weapon_types.each_with_index{|x,y| @weapon_types[y] = x if !x.nil?} if @weapon_types == {}
    armor_types.each_with_index{|x,y| @armor_types[y] = x if !x.nil?} if @armor_types == {}
    etypes.each_with_index{|x,y| @etypes[y] = x} if @etypes == {}
    params.each_with_index{|x,y| @params[y] = x} if @params == {}
  end
  #获取装备帮助内容
  def self.getequiphelp(equip)
    help = ""
    param = []
    help += "\\c[16]装备位置:#{Vocab::etype(equip.etype_id)}\\c[0]\n"
    if $VIPArcherScript[:equip_limit] #装备能力限制
      help += "\\c[16]等级需求:#{equip.level_limit}\n" if equip.level_limit > 0
      param_limit = []
      for i in 0..7
        if equip.params_limit(i) != 0
          help += "\\c[16]#{@params}需求:#{equip.params_limit(i)}\\c[0]\n"
        end
      end
    end
    equip.params.each_with_index{|x,y| param.push([@params[y],x])}
    param = param.select{|x| x[1] != 0}
    param.each{|x| help += "\\c[#{x[1]>0? UP : DOWN}]#{x[0]}:\\c[#{x[1]>0? UP : DOWN}]#{"﹢"if x[1]>0}#{x[1].to_int.to_s}\\c[0]\n"}
    features = equip.features
    featuresparam = []
    featuresparam.push features.select{|x| x.code == 21}
    featuresparam.push features.select{|x| x.code == 22}
    featuresparam.push features.select{|x| x.code == 23}
    featuresparam[0].each{|x| help += "\\c[#{x.value<0?DOWN: UP}]#{@params[x.data_id]}#{x.value<0?"﹣":"﹢"}#{(x.value.abs*100).to_i}%\n"}
    featuresparam[1].each{|x| help += "\\c[#{x.value<0?DOWN: UP}]#{XPARAM[x.data_id]}#{x.value<0?"﹣":"﹢"}#{(x.value.abs*100).to_i}%\n"}
    featuresparam[2].each{|x| help += "\\c[#{x.value<0?DOWN: UP}]#{SPARAM[x.data_id]}#{x.value<0?"﹣":"﹢"}#{(x.value.abs*100).to_i}%\n"}
    if $VIPArcherScript[:slot_type]
      help += "\\c[#{VIP}]#{CODE[55]}:#{SLOT_TYPE[$1.to_i]}\\c[0]\n" if equip.note =~ /<slot_type\s*[:](.*)>/i
    else
      features.select{|x| x.code == 55}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:双持武器\\c[0]\n"}
    end
    features.select{|x| x.code == 11}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@elements[x.data_id]}×#{(x.value*100).to_i}%\\c[0]\n"}
    features.select{|x| x.code == 12}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@params[x.data_id]}×#{(x.value*100).to_i}%\\c[0]\n"}
    features.select{|x| x.code == 13}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@states[x.data_id]}×#{(x.value*100).to_i}%\\c[0]\n"}
    features.select{|x| x.code == 14}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{@states[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@elements[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 32}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@states[x.data_id]}#{(x.value*100).to_i}%\\c[0]\n"}
    features.select{|x| x.code == 33}.each{|x| help += "\\c[#{x.value>0? UP : DOWN}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
    features.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
    features.select{|x| x.code == 41}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@skill_types[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 42}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@skill_types[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 43}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{$data_skills[x.data_id].name}\\c[0]\n"}
    features.select{|x| x.code == 44}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{$data_skills[x.data_id].name}\\c[0]\n"}
    features.select{|x| x.code == 51}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@weapon_types[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 52}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@armor_types[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 53}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@etypes[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 54}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@etypes[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 61}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
    features.select{|x| x.code == 62}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{FLAG[x.data_id]}\\c[0]\n"}
    features.select{|x| x.code == 64}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{PARTY_ABILITY[x.data_id]}\\c[0]\n"}
    help
  end
  #获取技能帮助内容
  def self.getskillhelp(skill)
    help = ""
    effects = skill.effects
    damage  = skill.damage
    r = [skill.required_wtype_id1,skill.required_wtype_id2]
    help += "\\c[16]消耗:\\c[#{MP}]MP:#{skill.mp_cost.to_s} \\c[#{TP}]TP:#{skill.tp_cost.to_s}\\c[0]\n" if skill.mp_cost > 0 && skill.tp_cost > 0
    help += "\\c[16]消耗:\\c[#{MP}]MP:#{skill.mp_cost.to_s}\\c[0]\n" if skill.mp_cost > 0 && skill.tp_cost <= 0
    help += "\\c[16]消耗:\\c[#{TP}]TP:#{skill.tp_cost.to_s}\\c[0]\n" if skill.tp_cost > 0 && skill.mp_cost <= 0
    help += "\\c[#{skill.speed<0?DOWN: UP}]速度修正:#{skill.speed}\\c[0]\n" if skill.speed != 0
    help += "\\c[#{DOWN}]成功率:#{skill.success_rate}%\\c[0]\n" if skill.success_rate != 100
    help += "\\c[16]类型:#{HIT[skill.hit_type]}\\c[0]\n"
    help += "\\c[16]范围:#{SCOPE[skill.scope]}\\c[0]\n" if skill.scope != 0
    help += "\\c[16]效果:#{@elements[damage.element_id]}#{DAMAGE_TYPE[damage.type]}\\c[0]\n" if damage.type != 0
    effects.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]强化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
    effects.select{|x| x.code == 32}.each{|x| help += "\\c[#{UP}]弱化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
    effects.select{|x| x.code == 33}.each{|x| help += "\\c[#{UP}]解除:强化#{@params[x.data_id]}\n"}
    effects.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]解除:弱化#{@params[x.data_id]}\n"}
    effects.select{|x| x.code == 21}.each{|x| help += "\\c[#{UP}]附加:#{x.data_id == 0 ? "普通攻击" : @states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
    effects.select{|x| x.code == 22}.each{|x| help += "\\c[#{UP}]解除:#{@states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
    effects.select{|x| x.code == 41}.each{|x| help += "\\c[#{VIP}]特殊效果:撤退\n"}
    effects.select{|x| x.code == 42}.each{|x| help += "\\c[#{UP}]提升:#{@params[x.data_id]}#{x.value1.to_i}点\\c[0]\n"}
    effects.select{|x| x.code == 43}.each{|x| help += "\\c[#{VIP}]学会:#{$data_skills[x.data_id].name}\\c[0]\n"}
    help += "\\c[16]场合:#{OCCASION[skill.occasion]}\n"
    help += "\\c[#{DOWN}]限制:#{$data_system.weapon_types[r[0]] if r[0] != 0} #{$data_system.weapon_types[r[1]] if r[1] != 0}\\c[0]\n" if r != [0,0]
    help
  end
  #获取道具帮助内容
  def self.getitemhelp(item)
    help = ""
    effects = item.effects
    damage  = item.damage
    help += "\\c[16]类型:\\c[#{VIP}]#{"贵重物品  "if item.itype_id != 1}\\c[#{DOWN}]#{item.consumable ? "消耗品":"非消耗品"}\\c[0]\n"
    help += "\\c[16]范围:#{SCOPE[item.scope]}\\c[0]\n" if item.scope != 0
    help += "\\c[16]效果:#{@elements[damage.element_id]}#{DAMAGE_TYPE[damage.type]}\\c[0]\n" if damage.type != 0
    effects.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]强化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
    effects.select{|x| x.code == 32}.each{|x| help += "\\c[#{UP}]弱化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
    effects.select{|x| x.code == 33}.each{|x| help += "\\c[#{UP}]解除:强化#{@params[x.data_id]}\\c[0]\n"}
    effects.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]解除:弱化#{@params[x.data_id]}\\c[0]\n"}
    effects.select{|x| x.code == 21}.each{|x| help += "\\c[#{UP}]附加:#{x.data_id == 0 ? "普通攻击" : @states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
    effects.select{|x| x.code == 22}.each{|x| help += "\\c[#{UP}]解除:#{@states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
    effects.select{|x| x.code == 41}.each{|x| help += "\\c[#{VIP}]特殊效果:撤退\n"}
    effects.select{|x| x.code == 42}.each{|x| help += "\\c[#{VIP}]提升:#{@params[x.data_id]}#{x.value1.to_i}点\\c[0]\n"}
    effects.select{|x| x.code == 43}.each{|x| help += "\\c[#{VIP}]学会:#{$data_items[x.data_id].name}\\c[0]\n"}
    help += "\\c[16]场合:#{OCCASION[item.occasion]}\\c[0]\n"
    help
  end
  #计算行数(有些字体的汉字和[字母,数字,符号]的宽度不同,
  #有可能会照成行数计算不对,尽量用宽度相同的字体吧)
  def self.getline(text,maxtext)
    text_new = ""
    xtext = []
    line = 0
    text.each_line{|x| text_new += x.gsub(/\\\S\[\d+\]/i){}} #去掉控制符
    text_new.each_line{|x| xtext.push x.gsub(/\n/){}}        #去掉换行符
    xtext.each{|x| line += (x.size / (maxtext.to_f + 1).to_i) + 1}
    line
  end
end
#==============================================================================
# ■ Window_Help_Ex
#------------------------------------------------------------------------------
#  加强显示特技和物品等的说明
#==============================================================================

class Window_Help_Ex < Window_Base
  include VIPArcher::Equipplus
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(line_number = 0)
    super(0, 0, 210, 0)
    self.z = 150
    contents.font.size = 14
    @time = 0
  end
  #--------------------------------------------------------------------------
  # ● 设置内容
  #--------------------------------------------------------------------------
  def set_text(text)
    @text = text
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 清除
  #--------------------------------------------------------------------------
  def clear
    set_text("")
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助位置
  #--------------------------------------------------------------------------
  def uppos(index,rect,window)
    self.height = fitting_height_vip(VIPArcher::Equipplus.getline(@xtext,13))
    create_contents
    contents.font.name = Font_Name
    contents.font.size = Font_Size
    rect.x -= window.ox
    rect.y -= window.oy
    ax = rect.x + rect.width + 10
    ax = rect.x - self.width + 10 if ax + self.width > window.width + 10
    ax += window.x
    ax = 0 if ax < 0
    ay = rect.y + rect.height
    ay = rect.y - self.height if ay + self.height > window.height
    ay += window.y
    ay = 0 if ay < 0
    self.x = ax
    self.y = ay
    set_text(@xtext)
    @time = TIME
    self.show
    self.openness = 0
  end
  #--------------------------------------------------------------------------
  # ● 设置物品
  #     item : 技能、物品等
  #--------------------------------------------------------------------------
  def set_item(item)
    if item == nil
      set_text("")
      return
    end
    @xtext = ""
    if $VIPArcherScript[:itemcolor] # require 物品描绘颜色脚本
      @xtext = "\\c[16]名称:\\c[#{VIPArcher::ItemColor::Color_Lv[item.color]}]" +
      "#{item.name}  #{item.color if item.color != 0}#{"★" if item.color != 0}\\c[0]\n"
    else
      @xtext = "\\c[16]名称:\\c[0]#{item.name}\n"
    end
    @xtext += "\\c[16]介绍:\\c[0]#{item.description}\n"
    if $VIPArcherScript[:load]      # require 队伍负重脚本
      @xtext += "\\c[16]售价:#{item.price} 重量:#{item.load}\\c[0]\n"
    else
      @xtext += item.price == 0 ? "\\c[16]售价:\\c[14]无法出售\\c[0]\n":"\\c[16]售价:#{item.price}\\c[0]\n"
    end if item.is_a?(RPG::EquipItem) || item.is_a?(RPG::Item)
    @xtext += VIPArcher::Equipplus.getequiphelp(item) if item.is_a?(RPG::EquipItem)
    @xtext += VIPArcher::Equipplus.getskillhelp(item) if item.is_a?(RPG::Skill)
    @xtext += VIPArcher::Equipplus.getitemhelp(item) if item.is_a?(RPG::Item)
    if $VIPArcherScript[:exdrop_rate]   # require 队伍掉率扩展
      @xtext += "\\c[#{$2.to_i > 0 ? UP : DOWN}]#{$1}掉率: #{$2}%\\c[0]\n" if
      item.note =~ /<(\W+)掉率:\s*([0-9+.-]+)%>/i
    end if item.is_a?(RPG::EquipItem) || item.is_a?(RPG::Skill)
    @xtext = @xtext[0,@text.size - 2] if @xtext[@xtext.size - 2,2] == "\n"
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    self.hide if @text == ""
    draw_text_vip(4, 0, @text,width,40,false)
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    @time -= 1 if @time > 0
    self.open if @time == 0
  end
end
class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 计算窗口显示指定行数时的应用高度2*************************
  #--------------------------------------------------------------------------
  def fitting_height_vip(line_number)
    line_number * contents.font.size + standard_padding * 2
  end
  # draw_text_ex的增强,使其可以自动换行  原作者:叶子 修改:wyongcan
  #--------------------------------------------------------------------------
  # ● 绘制带有控制符的文本内容
  #   如果传递了width参数的话,会自动换行
  #--------------------------------------------------------------------------
  def draw_text_vip(x, y, text, width = nil,textwidth = nil,normalfont = true)
    reset_font_settings if normalfont == true
    text = convert_escape_characters(text)
    pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
    if width != nil
      pos[:height] = contents.font.size
      pos[:width] = width
      pos[:textwidth] = textwidth
    end
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end
  #--------------------------------------------------------------------------
  # ● 文字的处理
  #     c    : 文字
  #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  #--------------------------------------------------------------------------
  def process_character(c, text, pos)
    case c
    when "\r"   # 回车
      return
    when "\n"   # 换行
      process_new_line(text, pos)
    when "\f"   # 翻页
      process_new_page(text, pos)
    when "\e"   # 控制符
      process_escape_character(obtain_escape_code(text), text, pos)
    else        # 普通文字
      pos[:textwidth] == nil ? text_width = text_size(c).width : text_width = pos[:textwidth]
      if pos[:width] != nil && pos[:x] - pos[:new_x] + text_width > pos[:width]
        process_new_line(text, pos)
      end
      process_normal_character(c, pos)
    end
  end
  #--------------------------------------------------------------------------
  # ● 处理换行文字
  #--------------------------------------------------------------------------
  alias vip_20141007_process_new_line process_new_line
  def process_new_line(text, pos)
    vip_20141007_process_new_line(text, pos)
    pos[:height] = contents.font.size if pos[:width] != nil
  end
end

#==============================================================================
# ■ 设置帮助增强窗口
#==============================================================================
class Window_Selectable < Window_Base
  attr_reader   :help_ex_window
  #--------------------------------------------------------------------------
  # ● 调用帮助窗口的更新方法
  #--------------------------------------------------------------------------
  alias help_ex_call_update_help call_update_help
  def call_update_help
    help_ex_call_update_help
    update_ex_help if active && @help_ex_window
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助内容
  #--------------------------------------------------------------------------
  def update_ex_help
    @help_ex_window.set_item(item) if @help_ex_window
    if index != -1 && item != nil
      @help_ex_window.uppos(index,item_rect(index),self)
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置帮助增强窗口
  #--------------------------------------------------------------------------
  def help_ex_window=(help_ex_window)
    @help_ex_window = help_ex_window
  end
end
#==============================================================================
# ■ 在各场景处理帮助窗口
#==============================================================================
class Scene_Base
  #--------------------------------------------------------------------------
  # ● 生成帮助增强窗口
  #--------------------------------------------------------------------------
  def create_help_ex
    @help_ex_window  = Window_Help_Ex.new
    @help_ex_window .viewport = @viewport
    @item_window.help_ex_window  = @help_ex_window if @item_window
    @slot_window.help_ex_window  = @help_ex_window if @slot_window
    @skill_window.help_ex_window = @help_ex_window if @skill_window
    @buy_window.help_ex_window   = @help_ex_window if @buy_window
    @sell_window.help_ex_window  = @help_ex_window if @sell_window
  end
end
#道具栏
class Scene_Item < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias help_ex_start start
  def start
    help_ex_start
    create_help_ex
  end
  #--------------------------------------------------------------------------
  # ● 物品“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_item_cancel on_item_cancel
  def on_item_cancel
    help_ex_on_item_cancel
    @help_ex_window.hide
  end
end
#装备栏
class Scene_Equip < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias help_ex_start start
  def start
    help_ex_start
    create_help_ex
  end
  #--------------------------------------------------------------------------
  # ● 装备栏“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_slot_cancel on_slot_cancel
  def on_slot_cancel
    help_ex_on_slot_cancel
    @help_ex_window.hide
  end
end
#技能栏
class Scene_Skill < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias help_ex_start start
  def start
    help_ex_start
    create_help_ex
  end
  #--------------------------------------------------------------------------
  # ● 物品“确定”
  #--------------------------------------------------------------------------
  alias help_ex_on_item_ok on_item_ok
  def on_item_ok
    help_ex_on_item_ok
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 物品“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_item_cancel on_item_cancel
  def on_item_cancel
    help_ex_on_item_cancel
    @help_ex_window.hide
  end
end
#战斗界面
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias help_ex_start start
  def start
    help_ex_start
    create_help_ex
  end
  #--------------------------------------------------------------------------
  # ● 技能“确定”
  #--------------------------------------------------------------------------
  alias help_ex_on_skill_ok on_skill_ok
  def on_skill_ok
    help_ex_on_skill_ok
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 技能“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_skill_cancel on_skill_cancel
  def on_skill_cancel
    help_ex_on_skill_cancel
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 物品“确定”
  #--------------------------------------------------------------------------
  alias help_ex_on_item_ok on_item_ok
  def on_item_ok
    help_ex_on_item_ok
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 物品“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_item_cancel on_item_cancel
  def on_item_cancel
    help_ex_on_item_cancel
    @help_ex_window.hide
  end
end
#商店界面
class Scene_Shop < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias help_ex_start start
  def start
    help_ex_start
    create_help_ex
  end
  #--------------------------------------------------------------------------
  # ● 买入“确定”
  #--------------------------------------------------------------------------
  alias help_ex_on_buy_ok on_buy_ok
  def on_buy_ok
    help_ex_on_buy_ok
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 买入“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_buy_cancel on_buy_cancel
  def on_buy_cancel
    help_ex_on_buy_cancel
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 卖出“确定”
  #--------------------------------------------------------------------------
  alias help_ex_on_sell_ok on_sell_ok
  def on_sell_ok
    help_ex_on_sell_ok
    @help_ex_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 卖出“取消”
  #--------------------------------------------------------------------------
  alias help_ex_on_sell_cancel on_sell_cancel
  def on_sell_cancel
    help_ex_on_sell_cancel
    @help_ex_window.hide
  end
end
[/pre]

仓库脚本
[pre lang="ruby"]#==============================================================================
# ■ RGSS3 アイテム預かり所 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# アイテムを預ける事が出来るようになります。
# 莫大な数のアイテムが登場する作品におすすめです。
#
# 最大所持数を越える量のアイテムを引き出せないようにする機能や
# 預けられないアイテムの作成、預けられる数の限界設定の他、
# アイテムの預かり・引き出しに関わるイベントコマンドをいくつか実装します。
#
# 在物品,武器,防具的备注栏中写入以下文字
# 此物品将会特殊处理
#
# <保存禁止>……此道具不能被存入仓库
#
# <保存制限:20>……仓库里只能放入指定数量的物品
#
# 以下在事件中可使用的脚本语句:
#
# SceneManager.call(Scene_Item_Keep)
# 打开道具仓库界面
#
# item_keep_all(data_a)
# data_a为0时……把身上所有道具放入仓库
# data_a为1时……把仓库所有道具取出来
#
# weapon_keep_all(data_a)
# data_a为0时……預けられる武器を預けられるだけ預けます。
# data_a为1时……武器を全て引き出せるだけ引き出します。
#
# armor_keep_all(data_a)
# data_a为0时……預けられる防具を預けられるだけ預けます。
# data_a为1时……防具を全て引き出せるだけ引き出します。
#
# item_keep(data_a, data_b)
# data_a为0时……data_bで指定したIDのアイテムを預けられるだけ預けます。
# data_a为1时……data_bで指定したIDのアイテムを引き出せるだけ引き出します。
#
# weapon_keep(data_a, data_b)
# data_a为0时……data_bで指定したIDの武器を預けられるだけ預けます。
# data_a为1时……data_bで指定したIDの武器を引き出せるだけ引き出します。
#
# armor_keep(data_a, data_b)
# data_a为0时……data_bで指定したIDの防具を預けられるだけ預けます。
# data_a为1时……data_bで指定したIDの防具を引き出せるだけ引き出します。
#
# word_keep_all(data_a, data_b)
#
# data_a为0时……
# data_bで指定した言葉がメモ欄に含まれる
# アイテム・武器・防具を預けられるだけ預けます。
#
# data_a为1时……
# data_bで指定した言葉がメモ欄に含まれる
# アイテム・武器・防具を引き出せるだけ引き出します。
#
# word_keep_allで、data_bで設定する言葉は、前後を""で囲んでください。
# 【例.word_keep_all(1, "回復")】
# この場合、回復という言葉をメモ欄に含んだアイテム・武器・防具を
# 預かり所から全て引き出します。
#------------------------------------------------------------------------------
# Ver1.01 導入前のセーブデータを使用した場合に正常に機能しなくなる不具合を修正。
#         軽量化スクリプトと統合し、軽量化モード切替機能を追加。
#         説明ウィンドウ機能を追加。
#==============================================================================
module ITEM_KEEPER

  #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  #true 表示しない false 表示する

  UNVISIBLE = false

  #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  #true 表示しない false 表示する

  WORD1     = "保存禁止"

  #保存に個数制限を設ける為の設定用キーワードです。

  WORD2     = "保存制限"

  #保存制限のないアイテムについていくつまで預けられるかを設定します。

  LIMIT     = 99

  #説明ウィンドウを表示するかどうかを設定します。

  DESCRIPT  = true

  #数量ウィンドウと説明ウィンドウの背景透明度を変更します。

  B_OPACITY = 255

  #軽量化フラグ。

  FLAG      = true

  #説明ウィンドウに表示する項目を設定します。
  #(基本的にこの部分を変更する必要はありません)

  D         = [
  ["↓",":取出1个"],
  ["↑",":放入1个"],
  ["←",":取出10个"],
  ["→",":放入10个"],
  ["CTRL键",":取出99个"],
  ["SHIFT键",":放入99个"]
  ]

end

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # 最大保管数を取得
  #--------------------------------------------------------------------------
  def max_item_keep_number

    #キャッシュが存在する場合はキャッシュを返す。

    return @max_item_keep_number if @max_item_keep_number != nil

    #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。

    memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
    @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT

    #データを返す。

    @max_item_keep_number
  end
end
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_ik initialize
  def initialize

    #本来の処理を実行。

    initialize_ik

    #パーティー外全アイテムリストを初期化。

    init_all_items_ik
  end
  #--------------------------------------------------------------------------
  # パーティー外全アイテムリストの初期化(強制)
  #--------------------------------------------------------------------------
  def init_all_items_ik

    #それぞれ、空のハッシュを生成。

    @items_k = {}
    @weapons_k = {}
    @armors_k = {}
  end
  #--------------------------------------------------------------------------
  # パーティー外全アイテムリストの初期化(nilの場合)
  #--------------------------------------------------------------------------
  def init_all_items_ik_un_nil

    #それぞれ、存在しない場合のみハッシュを生成。

    @items_k = {} if @items_k == nil
    @weapons_k = {} if @weapons_k == nil
    @armors_k = {} if @armors_k == nil
  end
  #--------------------------------------------------------------------------
  # アイテムの最大保管数取得
  #--------------------------------------------------------------------------
  def max_item_keep_number(item)

    #アイテムが存在しない場合はfalseを返す。

    return false if item == nil

    #アイテムの最大保管数を返す。

    item.max_item_keep_number
  end
  #--------------------------------------------------------------------------
  # アイテムの保管数取得
  #--------------------------------------------------------------------------
  def item_keep_number(item)

    #コンテナを取得。

    container = item_keep_container(item.class)

    #コンテナにデータが存在しない場合は0を返す。

    container ? container[item.id] || 0 : 0
  end
  #--------------------------------------------------------------------------
  # アイテムの保管
  #--------------------------------------------------------------------------
  def item_keep(item, number, get = false)

    #数量データを取得。

    number_data = number

    #アイテム保管を実行。

    item_keep_execute(item, number_data)

    #所持アイテムを減らす。

    gain_item(item, -number_data) if get == false
  end
  #--------------------------------------------------------------------------
  # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  #--------------------------------------------------------------------------
  def item_keep_container(item_class)

    #アイテムの種類に応じてコンテナを取得。

    return @items_k   if item_class == RPG::Item
    return @weapons_k if item_class == RPG::Weapon
    return @armors_k  if item_class == RPG::Armor
    return nil
  end
  #--------------------------------------------------------------------------
  # アイテムの増加(減少)
  #--------------------------------------------------------------------------
  def item_keep_execute(item, amount)

    #コンテナを取得。

    container = item_keep_container(item.class)

    #コンテナが存在しない場合は処理をしない。

    return if container == nil

    #処理前の保管数を取得。

    last_number = item_keep_number(item)

    #処理後の保管数を取得。

    new_number = last_number + amount

    #保管数を変更する。

    container[item.id] = new_number

    #保管数が0となった場合はハッシュから削除する。

    container.delete(item.id) if container[item.id] == 0

    #マップのリフレッシュフラグを立てる。

    $game_map.need_refresh = true
  end
end
class Scene_Item_Keep < Scene_Item
  #--------------------------------------------------------------------------
  # 開始処理
  #--------------------------------------------------------------------------
  def start

    #コンテナが存在しない場合はコンテナを生成する。

    $game_party.init_all_items_ik_un_nil

    #スーパークラスの処理を実行。

    super

    #説明ウィンドウの作成

    create_description_window

    #個数入力ウィンドウの作成

    create_number_window
  end
  #--------------------------------------------------------------------------
  # カテゴリウィンドウの作成
  #--------------------------------------------------------------------------
  def create_category_window
    @category_window = Window_ItemCategory.new
    @category_window.viewport = @viewport
    @category_window.help_window = @help_window
    @category_window.y = @help_window.height
    @category_window.set_handler(:ok,     method(:on_category_ok))
    @category_window.set_handler(:cancel, method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_window
    wy = @category_window.y + @category_window.height
    wh = Graphics.height - wy
    @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @category_window.item_window = @item_window
  end
  #--------------------------------------------------------------------------
  # 説明ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_description_window

    #説明ウィンドウを作成しない場合は処理を行わない。

    return unless ITEM_KEEPER::DESCRIPT

    @description_window = Window_IKDescription.new
    @description_window.z = 100
    @description_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # 個数入力ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_number_window
    @number_window = Window_IKInput.new
    @number_window.z = 100
    @number_window.item_window = @item_window
    @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
    @number_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # カテゴリ[決定]
  #--------------------------------------------------------------------------
  def on_category_ok
    @item_window.activate
    @item_window.select_last
    @category_window.deactivate
  end
  #--------------------------------------------------------------------------
  # アイテム[決定]
  #--------------------------------------------------------------------------
  def on_item_ok
    $game_party.last_item.object = item
    item == nil ? @item_window.activate : determine_item
  end
  #--------------------------------------------------------------------------
  # アイテムの決定
  #--------------------------------------------------------------------------
  def determine_item
    @number_window.number = 0
    item = @item_window.item
    @number_window.show
    @number_window.refresh
    @description_window.show if ITEM_KEEPER::DESCRIPT
    @item_window.deactivate
  end
  #--------------------------------------------------------------------------
  # アイテム[キャンセル]
  #--------------------------------------------------------------------------
  def on_item_cancel
    @item_window.unselect
    @category_window.activate
  end
end
#==============================================================================
# ■ Window_PTItemList
#------------------------------------------------------------------------------
#  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_PTItemList < Window_ItemList
  #--------------------------------------------------------------------------
  # アイテムをリストに含めるかどうか
  #--------------------------------------------------------------------------
  alias include_ik? include?
  def include?(item)

    #アイテムが存在しない場合、ウィンドウが不可視の場合
    #保管禁止アイテムを非表示にする場合は表示しない。

    return false if item == nil
    return false if self.visible == false
    return false if ITEM_KEEPER::UNVISIBLE == true && item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

    #本来の処理を実行。

    include_ik?(item)
  end
  #--------------------------------------------------------------------------
  # アイテムを許可状態で表示するかどうか
  #--------------------------------------------------------------------------
  def enable?(item)

    #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。

    return false if item == nil
    return false if item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
    return true
  end
  #--------------------------------------------------------------------------
  # アイテムリストの作成
  #--------------------------------------------------------------------------
  def make_item_list

    #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。

    item_data = $data_items + $data_weapons + $data_armors
    @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
    @data.push(nil) if include?(nil)
  end
  #--------------------------------------------------------------------------
  # 選択項目の有効状態を取得
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # 桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
  end
  #--------------------------------------------------------------------------
  # 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index, flag = false)

    #データからアイテムを取得し、各種データを記述する。

    item = @data[index]

    #アイテムが存在しない場合は処理を行わない。

    return unless item

    rect = item_rect(index)
    contents.clear_rect(rect) if flag
    rect.width -= 4
    draw_item_name(item, rect.x, rect.y, enable?(item))
    change_color(text_color(5))
    draw_text(180, rect.y, 100, line_height, "所持", 2)
    change_color(text_color(0))
    draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
    draw_text(240, rect.y, 100, line_height,"/", 2)
    draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
    change_color(text_color(5))
    draw_text(330, rect.y, 100, line_height, "倉庫", 2)
    change_color(text_color(0))
    draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
    draw_text(390, rect.y, 100, line_height, "/", 2)
    draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)

  end
end
class Window_IKInput < Window_Selectable
  #--------------------------------------------------------------------------
  # 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor   :item_window
  attr_accessor   :number
  attr_accessor   :description_window
  #--------------------------------------------------------------------------
  # オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize

    #ウィンドウを生成する。

    super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)

    #設定に応じて背景透明度を変更する。

    self.back_opacity = ITEM_KEEPER::B_OPACITY

    #一旦隠す。

    hide

    #非アクティブにする。

    deactivate
  end
  #--------------------------------------------------------------------------
  # 数字の変更処理
  #--------------------------------------------------------------------------
  def update

    #見えない場合は更新しない。

    return unless self.visible

    #入力関連の各種処理を実行。

    if Input.press?(:UP) or Input.press?(:DOWN) or Input.press?(:RIGHT) or Input.press?(:LEFT) or Input.press?(Input::SHIFT) or Input.press?(Input::CTRL)
      if Input.press?(Input::SHIFT)   #100個預ける
        keep_exe(@item_window.item, 100)
      elsif Input.press?(Input::CTRL) #100個引き出す
        get_exe(@item_window.item, 100)
      elsif Input.repeat?(:RIGHT)     #10個預ける
        keep_exe(@item_window.item, 10)
      elsif Input.repeat?(:LEFT)      #10個引き出す
        get_exe(@item_window.item, 10)
      elsif Input.repeat?(:UP)        #1個預ける
        keep_exe(@item_window.item, 1)
      elsif Input.repeat?(:DOWN)      #1個引き出す
        get_exe(@item_window.item, 1)
      end
      refresh_number
    end
    if Input.trigger?(:C)

      #決定音を鳴らす。

      Sound.play_ok

      #数に応じてアイテム数を変更。

      $game_party.item_keep(@item_window.item, @number)

      #ウィンドウを隠す。

      self.hide

      #ウィンドウを非アクティブにする。

      self.deactivate

      #説明ウィンドウが存在する場合、説明ウィンドウを隠す。

      @description_window.hide if ITEM_KEEPER::DESCRIPT

      #条件に応じてアイテムウィンドウを変更する。

      ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh

      #アイテムウィンドウをアクティブにする。

      @item_window.activate
    elsif Input.trigger?(:B)

      #決定音を鳴らす。

      Sound.play_cancel

      #ウィンドウを隠す。

      self.hide

      #ウィンドウを非アクティブにする。

      self.deactivate

      #説明ウィンドウが存在する場合、説明ウィンドウを隠す。

      @description_window.hide if ITEM_KEEPER::DESCRIPT

      #アイテムウィンドウをアクティブにする。

      @item_window.activate

    end
  end
  #--------------------------------------------------------------------------
  # 預けられる限界をチェック
  #--------------------------------------------------------------------------
  def limitcheck1

    #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。

    return false if $game_party.item_number(@item_window.item) - @number == 0
    return false if $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item)
    return true
  end
  #--------------------------------------------------------------------------
  # 引き出せる限界をチェック
  #--------------------------------------------------------------------------
  def limitcheck2

    #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。

    return false if $game_party.item_number(@item_window.item) - @number == $game_party.max_item_number(@item_window.item)
    return false if $game_party.item_keep_number(@item_window.item) + @number == 0
    return true
  end
  #--------------------------------------------------------------------------
  # 預ける
  #--------------------------------------------------------------------------
  def keep_exe(item, amount)

    #数量分処理する。

    amount.times do
      @number += 1 if limitcheck1
    end
  end
  #--------------------------------------------------------------------------
  # 引き出す
  #--------------------------------------------------------------------------
  def get_exe(item, amount)

    #数量分処理する。

    amount.times do
      @number -= 1 if limitcheck2
    end
  end
  #--------------------------------------------------------------------------
  # リフレッシュ
  #--------------------------------------------------------------------------
  def refresh

    #不可視状態の場合はリフレッシュしない。

    return false unless self.visible

    #数量を更新する。

    @last_number = @number

    #ウィンドウの内容を消去する。

    contents.clear
    create_contents

    #アイテム名を描写。

    draw_item_name(@item_window.item, 0, 0)
    change_color(system_color)
    draw_text(0, line_height * 1, 80, line_height, "所持", 1)
    draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
    draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
    draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)

    #所持数データを描写。

    $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
    $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  end
  #--------------------------------------------------------------------------
  # 数量のみリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_number

    #不可視状態の場合はリフレッシュしない。

    return false unless self.visible

    #最後の数量と現在の数量が異なる場合は数量を更新する。

    if @last_number != @number
      Sound.play_cursor
      @last_number = @number
    end

    #ウィンドウの内容を消去する。

    contents.clear_rect(0, line_height * 2, 80, line_height)
    contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)

    #所持数データを描写。

    $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
    $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  end
end
class Window_IKDescription < Window_Base
  def initialize

    #ウィンドウを生成する。

    super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)

    #設定に応じて背景透明度を変更する。

    self.back_opacity = ITEM_KEEPER::B_OPACITY

    #システムカラーで項目部分を描画する。

    change_color(system_color)

    draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
    draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
    draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
    draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
    draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
    draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)

    #通常カラーで項目部分を描画する。

    change_color(normal_color)

    draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
    draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
    draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
    draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
    draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
    draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)

    hide
  end
end
class Game_Interpreter
  #--------------------------------------------------------------------------
  # アイテムを全て預ける/引き出す
  #--------------------------------------------------------------------------
  def item_keep_all(data)

    #種類をアイテムとする。

    item_data = $data_items

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 武器を全て預ける/引き出す
  #--------------------------------------------------------------------------
  def weapon_keep_all(data)

    #種類を武器とする。

    item_data = $data_weapons

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 防具を全て預ける/引き出す
  #--------------------------------------------------------------------------
  def armor_keep_all(data)

    #種類を防具とする。

    item_data = $data_armors

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 全て預ける/引き出す場合の共通処理を実行
  #--------------------------------------------------------------------------
  def common_keep_all(item_data, data)

    #存在するオブジェクトの数分だけ処理。

    item_data.each do |i|

      #nilの場合は処理しない。

      next if i == nil

      #預けられないアイテムの場合は処理しない。

      next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

      #各種データを取得。

      data1 = $game_party.item_number(i)
      data2 = $game_party.max_item_number(i)
      data3 = $game_party.item_keep_number(i)
      data4 = $game_party.max_item_keep_number(i)

      #追加で所持できる数と、追加で預けられる数を計算。

      data5 = data4 - data3
      data6 = data2 - data1

      #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

      amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
      $game_party.item_keep(i, amount)

    end
  end
  #--------------------------------------------------------------------------
  # アイテムを一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def item_keep(data_a, data_b)

    #種類をアイテムとする。

    item_data = $data_items

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 武器を一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def weapon_keep(data_a, data_b)

    #種類を武器とする。

    item_data = $data_weapons

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 防具を一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def armor_keep(data_a, data_b)

    #種類を防具とする。

    item_data = $data_armors

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 一定個数預ける/引き出す場合の共通処理を実行します。
  #--------------------------------------------------------------------------
  def common_keep(item_data, data_a, data_b)

    #nilの場合は処理しない。

    return if item_data[data_b] == nil

    #預けられないアイテムの場合は処理しない。

    return if item_data[data_b].note.include?("<" + ITEM_KEEPER::WORD1 + ">")

    #各種データを取得。

    data1 = $game_party.item_number(item_data[data_b])
    data2 = $game_party.max_item_number(item_data[data_b])
    data3 = $game_party.item_keep_number(item_data[data_b])
    data4 = $game_party.max_item_keep_number(item_data[data_b])

    #追加で所持できる数と、追加で預けられる数を計算。

    data5 = data4 - data3
    data6 = data2 - data1

    #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

    amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
    $game_party.item_keep(item_data[data_b], amount)

  end
  #--------------------------------------------------------------------------
  # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  #--------------------------------------------------------------------------
  def word_keep_all(data_a, data_b)

    #アイテム・武器・防具全てを含める配列を生成。

    item_data = $data_items + $data_weapons + $data_armors

    #存在するオブジェクトの数分だけ処理。

    item_data.each do |i|

      #nilの場合は処理しない。

      next if i == nil

      #預けられないアイテムの場合は処理しない。

      next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

      #指定されたワードがメモ欄に含まれていない場合は処理しない。

      next unless i.note.include?(data_b)

      #各種データを取得。

      data1 = $game_party.item_number(i)
      data2 = $game_party.max_item_number(i)
      data3 = $game_party.item_keep_number(i)
      data4 = $game_party.max_item_keep_number(i)

      #追加で所持できる数と、追加で預けられる数を計算。

      data5 = data4 - data3
      data6 = data2 - data1

      #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

      amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
      $game_party.item_keep(i, amount)

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

开拓者

发表于 2016-8-16 15:44:10 | 显示全部楼层
  
不知道,同求。拜托有结果了at在下一次。谢啦!~

  
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2016-8-16 16:05:24 | 显示全部楼层
  1. #道具栏
  2. class Scene_Item < Scene_ItemBase
  3.   #--------------------------------------------------------------------------
  4.   # ● 开始处理
  5.   #--------------------------------------------------------------------------
  6.   alias help_ex_start start
  7.   def start
  8.     help_ex_start
  9.     create_help_ex unless SceneManager.scene_is?(Scene_Item_Keep)
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 物品“取消”
  13.   #--------------------------------------------------------------------------
  14.   alias help_ex_on_item_cancel on_item_cancel
  15.   def on_item_cancel
  16.     help_ex_on_item_cancel
  17.     @help_ex_window.hide if @help_ex_window
  18.   end
  19. end
复制代码

说明脚本的503~520行(这个行数是指1L那个代码框的行数)替换成这样,
或者仔细看的话只需要在510和518行后面加上那两句判定应该就可以了。

点评

原来如此!谢谢!十分感谢!  发表于 2016-8-16 18:46

评分

参与人数 1星屑 +250 梦石 +1 收起 理由
RaidenInfinity + 250 + 1 楼主认可的解答

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部