Project1

标题: 有没有临时关闭《技能物品说明增强》修改版脚本的方法? [打印本页]

作者: 雷影    时间: 2016-8-15 22:51
标题: 有没有临时关闭《技能物品说明增强》修改版脚本的方法?
本帖最后由 雷影 于 2016-8-15 22:55 编辑

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

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

物品说明帮助增强修改版连接
]物品说明帮助增强修改版
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ 技能物品说明增强 蓝本:wyongcan
  4. # 修改 :VIPArcher
  5. #
  6. # 改动说明:
  7. # [删除线]old_xxx这种别名方法到底是从哪里开始流传的啊?[/删除线]
  8. # 改用新的帮助窗口和新定义draw_text_vip方法来增强兼容性
  9. # 更改初始化数据时机以支持跳过标题
  10. # 追加对普通物品和技能的说明内容
  11. # 修改了对帮助窗口行数的计算以支持控制符
  12. # 加上了各种颜色的设置,具体更高级的玩法自己领悟吧
  13. # 改成光标不动一段时间后才会出现帮助窗口
  14. #
  15. #  -- 本脚本来自 [url]https://rpg.blue[/url] 使用或转载请保留以上信息。
  16. #==============================================================================
  17. $VIPArcherScript ||= {};$VIPArcherScript[:help_ex] = 20141007
  18. $VIPArcherScript[:equip_limit] = false #是否使用了后知后觉的装备能力限制
  19. class << DataManager
  20.   alias_method :vip_load_database, :load_database
  21.   #--------------------------------------------------------------------------
  22.   # ● 读取数据库
  23.   #--------------------------------------------------------------------------
  24.   def load_database
  25.     vip_load_database
  26.     VIPArcher::Equipplus.equiphelpready
  27.   end
  28. end
  29. module VIPArcher;end
  30. module VIPArcher::Equipplus
  31.   TIME = 90 #帮助窗口自动出现的时间(单位帧
  32.   Font_Name = Font.default_name # 推荐"微软雅黑"
  33.   Font_Size = 14                # "微软雅黑"的话就20号字体
  34.   UP   = 24 #能力值提升颜色编号
  35.   DOWN = 25 #能力值下降颜色编号
  36.   VIP  = 14 #特殊能力颜色编号
  37.   MP   = 23
  38.   TP   = 29
  39.   CODE ={
  40.     11 => "属性抗性",
  41.     12 => "弱化抗性",
  42.     13 => "状态抗性",
  43.     14 => "状态免疫",
  44.     21 => "普通能力",
  45.     22 => "添加能力",
  46.     23 => "特殊能力",
  47.     31 => "附带属性",
  48.     32 => "附带状态",
  49.     33 => "攻击速度",
  50.     34 => "添加攻击次数",
  51.     41 => "添加技能类型",
  52.     42 => "禁用技能类型",
  53.     43 => "添加技能",
  54.     44 => "禁用技能",
  55.     51 => "可装备武器类型",
  56.     52 => "可装备护甲类型",
  57.     53 => "固定装备",
  58.     54 => "禁用装备",
  59.     55 => "装备风格",
  60.     61 => "添加行动次数",
  61.     62 => "特殊标志",
  62.     63 => "消失效果",
  63.     64 => "队伍能力"}
  64.   #特殊标志
  65.   FLAG ={
  66.     0 => "自动战斗",
  67.     1 => "擅长防御",
  68.     2 => "保护弱者",
  69.     3 => "特技专注"}
  70.   #技能效果范围
  71.   SCOPE ={
  72.     0 => "无",
  73.     1 => "单个敌人",
  74.     2 => "全体敌人",
  75.     3 => "一个随机敌人",
  76.     4 => "两个随机敌人",
  77.     5 => "三个随机敌人",
  78.     6 => "四个随机敌人",
  79.     7 => "单个队友",
  80.     8 => "全体队友",
  81.     9 => "单个队友(战斗不能)",
  82.     10 => "全体队友(战斗不能)",
  83.     11 => "使用者" }
  84.   #技能命中类型
  85.   HIT ={
  86.     0 => "必定命中",
  87.     1 => "物理攻击",
  88.     2 => "魔法攻击"}
  89.   #使用限制
  90.   OCCASION ={
  91.     0 => "随时可用",
  92.     1 => "仅战斗中",
  93.     2 => "仅菜单中",
  94.     3 => "不能使用"}
  95.   #添加能力
  96.   XPARAM ={
  97.     0 => "物理命中几率:",
  98.     1 => "物理闪避几率:",
  99.     2 => "必杀几率:",
  100.     3 => "必杀闪避几率:",
  101.     4 => "魔法闪避几率:",
  102.     5 => "魔法反射几率:",
  103.     6 => "物理反击几率:",
  104.     7 => "体力值再生速度:",
  105.     8 => "魔力值再生速度:",
  106.     9 => "特技值再生速度:"}
  107.   #特殊能力
  108.   SPARAM ={
  109.     0 => "受到攻击的几率",
  110.     1 => "防御效果比率",
  111.     2 => "恢复效果比率",
  112.     3 => "药理知识",
  113.     4 => "MP消费率",
  114.     5 => "TP消耗率",
  115.     6 => "物理伤害加成",
  116.     7 => "魔法伤害加成",
  117.     8 => "地形伤害加成",
  118.     9 => "经验获得加成"}
  119.   #装备风格  require 装备风格扩展脚本
  120.   SLOT_TYPE ={
  121.     0 => "普通",
  122.     1 => "双持武器",
  123.     2 => "索爷三刀流",
  124.     3 => "NPC",
  125.     4 => "233",
  126.     5 => "论坛@的BUG好烦啊"}
  127.   #队伍能力
  128.   PARTY_ABILITY ={
  129.     0 => "遇敌几率减半",
  130.     1 => "随机遇敌无效",
  131.     2 => "敌人偷袭无效",
  132.     3 => "先制攻击几率上升",
  133.     4 => "获得金钱数量双倍",
  134.     5 => "物品掉落几率双倍"}
  135.   #伤害类型
  136.   DAMAGE_TYPE = {
  137.     0 => "无",
  138.     1 => "体力值伤害",
  139.     2 => "魔力值伤害",
  140.     3 => "体力值恢复",
  141.     4 => "魔力值恢复",
  142.     5 => "体力值吸收",
  143.     6 => "魔力值吸收"}
  144.   #普通能力
  145.   #这只是个示范,你也可以依照个人喜好对这些用语添加颜色控制符
  146.   @params ={
  147.     0 => "\\c[17]最大HP",
  148.     1 => "\\c[16]最大MP",
  149.     2 => "\\c[20]物攻",
  150.     3 => "\\c[21]物防",
  151.     4 => "\\c[30]魔攻",
  152.     5 => "\\c[31]魔防",
  153.     6 => "\\c[14]敏捷",
  154.     7 => "\\c[17]幸运"}
  155.   #我举例技能类型的原因就是因为它 短
  156.   @skill_types = { # 这个和下面equiphelpready里注释掉的做的是一样的事
  157.                    # 只是下面是读取数据库添加用语,这里是手动枚举
  158.     1 => "\\c[1]特技",
  159.     2 => "\\c[2]魔法",
  160.     3 => "\\c[3]必杀",
  161.     4 => "\\c[5]卖萌"}
  162.   #初始化数据,当然如果你要用上面那样的控制符改变颜色的话
  163.   #欢迎枚举格式就是上面这样用Hash,用ID做键把用语对应起来
  164.   def self.equiphelpready
  165.     params = $data_system.terms.params
  166.     elements = $data_system.elements
  167.     weapon_types = $data_system.weapon_types
  168.     armor_types = $data_system.armor_types
  169.     etypes = $data_system.terms.etypes
  170.     skill_types = $data_system.skill_types
  171.     @states       ||= {}
  172.     @params       ||= {}
  173.     @weapon_types ||= {}
  174.     @armor_types  ||= {}
  175.     @etypes       ||= {}
  176.     @skill_types  ||= {}
  177.     @elements     ||= {}
  178.     skill_types.each_with_index{|x,y| @skill_types[y] = x if !x.nil?} if @skill_types == {}
  179.     $data_states.each{|x| @states[x.id] = x.name if !x.nil?} if @states == {}
  180.     elements.each_with_index{|x,y| @elements[y] = x if !x.nil?} if @elements == {}
  181.     weapon_types.each_with_index{|x,y| @weapon_types[y] = x if !x.nil?} if @weapon_types == {}
  182.     armor_types.each_with_index{|x,y| @armor_types[y] = x if !x.nil?} if @armor_types == {}
  183.     etypes.each_with_index{|x,y| @etypes[y] = x} if @etypes == {}
  184.     params.each_with_index{|x,y| @params[y] = x} if @params == {}
  185.   end
  186.   #获取装备帮助内容
  187.   def self.getequiphelp(equip)
  188.     help = ""
  189.     param = []
  190.     help += "\\c[16]装备位置:#{Vocab::etype(equip.etype_id)}\\c[0]\n"
  191.     if $VIPArcherScript[:equip_limit] #装备能力限制
  192.       help += "\\c[16]等级需求:#{equip.level_limit}\n" if equip.level_limit > 0
  193.       param_limit = []
  194.       for i in 0..7
  195.         if equip.params_limit(i) != 0
  196.           help += "\\c[16]#{@params[i]}需求:#{equip.params_limit(i)}\\c[0]\n"
  197.         end
  198.       end
  199.     end
  200.     equip.params.each_with_index{|x,y| param.push([@params[y],x])}
  201.     param = param.select{|x| x[1] != 0}
  202.     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"}
  203.     features = equip.features
  204.     featuresparam = []
  205.     featuresparam.push features.select{|x| x.code == 21}
  206.     featuresparam.push features.select{|x| x.code == 22}
  207.     featuresparam.push features.select{|x| x.code == 23}
  208.     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"}
  209.     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"}
  210.     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"}
  211.     if $VIPArcherScript[:slot_type]
  212.       help += "\\c[#{VIP}]#{CODE[55]}:#{SLOT_TYPE[$1.to_i]}\\c[0]\n" if equip.note =~ /<slot_type\s*[:](.*)>/i
  213.     else
  214.       features.select{|x| x.code == 55}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:双持武器\\c[0]\n"}
  215.     end
  216.     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"}
  217.     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"}
  218.     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"}
  219.     features.select{|x| x.code == 14}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{@states[x.data_id]}\\c[0]\n"}
  220.     features.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@elements[x.data_id]}\\c[0]\n"}
  221.     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"}
  222.     features.select{|x| x.code == 33}.each{|x| help += "\\c[#{x.value>0? UP : DOWN}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
  223.     features.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
  224.     features.select{|x| x.code == 41}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@skill_types[x.data_id]}\\c[0]\n"}
  225.     features.select{|x| x.code == 42}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@skill_types[x.data_id]}\\c[0]\n"}
  226.     features.select{|x| x.code == 43}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{$data_skills[x.data_id].name}\\c[0]\n"}
  227.     features.select{|x| x.code == 44}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{$data_skills[x.data_id].name}\\c[0]\n"}
  228.     features.select{|x| x.code == 51}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@weapon_types[x.data_id]}\\c[0]\n"}
  229.     features.select{|x| x.code == 52}.each{|x| help += "\\c[#{UP}]#{CODE[x.code]}:#{@armor_types[x.data_id]}\\c[0]\n"}
  230.     features.select{|x| x.code == 53}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@etypes[x.data_id]}\\c[0]\n"}
  231.     features.select{|x| x.code == 54}.each{|x| help += "\\c[#{DOWN}]#{CODE[x.code]}:#{@etypes[x.data_id]}\\c[0]\n"}
  232.     features.select{|x| x.code == 61}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{x.value}\\c[0]\n"}
  233.     features.select{|x| x.code == 62}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{FLAG[x.data_id]}\\c[0]\n"}
  234.     features.select{|x| x.code == 64}.each{|x| help += "\\c[#{VIP}]#{CODE[x.code]}:#{PARTY_ABILITY[x.data_id]}\\c[0]\n"}
  235.     help
  236.   end
  237.   #获取技能帮助内容
  238.   def self.getskillhelp(skill)
  239.     help = ""
  240.     effects = skill.effects
  241.     damage  = skill.damage
  242.     r = [skill.required_wtype_id1,skill.required_wtype_id2]
  243.     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
  244.     help += "\\c[16]消耗:\\c[#{MP}]MP:#{skill.mp_cost.to_s}\\c[0]\n" if skill.mp_cost > 0 && skill.tp_cost <= 0
  245.     help += "\\c[16]消耗:\\c[#{TP}]TP:#{skill.tp_cost.to_s}\\c[0]\n" if skill.tp_cost > 0 && skill.mp_cost <= 0
  246.     help += "\\c[#{skill.speed<0?DOWN: UP}]速度修正:#{skill.speed}\\c[0]\n" if skill.speed != 0
  247.     help += "\\c[#{DOWN}]成功率:#{skill.success_rate}%\\c[0]\n" if skill.success_rate != 100
  248.     help += "\\c[16]类型:#{HIT[skill.hit_type]}\\c[0]\n"
  249.     help += "\\c[16]范围:#{SCOPE[skill.scope]}\\c[0]\n" if skill.scope != 0
  250.     help += "\\c[16]效果:#{@elements[damage.element_id]}#{DAMAGE_TYPE[damage.type]}\\c[0]\n" if damage.type != 0
  251.     effects.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]强化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
  252.     effects.select{|x| x.code == 32}.each{|x| help += "\\c[#{UP}]弱化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
  253.     effects.select{|x| x.code == 33}.each{|x| help += "\\c[#{UP}]解除:强化#{@params[x.data_id]}\n"}
  254.     effects.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]解除:弱化#{@params[x.data_id]}\n"}
  255.     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"}
  256.     effects.select{|x| x.code == 22}.each{|x| help += "\\c[#{UP}]解除:#{@states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
  257.     effects.select{|x| x.code == 41}.each{|x| help += "\\c[#{VIP}]特殊效果:撤退\n"}
  258.     effects.select{|x| x.code == 42}.each{|x| help += "\\c[#{UP}]提升:#{@params[x.data_id]}#{x.value1.to_i}点\\c[0]\n"}
  259.     effects.select{|x| x.code == 43}.each{|x| help += "\\c[#{VIP}]学会:#{$data_skills[x.data_id].name}\\c[0]\n"}
  260.     help += "\\c[16]场合:#{OCCASION[skill.occasion]}\n"
  261.     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]
  262.     help
  263.   end
  264.   #获取道具帮助内容
  265.   def self.getitemhelp(item)
  266.     help = ""
  267.     effects = item.effects
  268.     damage  = item.damage
  269.     help += "\\c[16]类型:\\c[#{VIP}]#{"贵重物品  "if item.itype_id != 1}\\c[#{DOWN}]#{item.consumable ? "消耗品":"非消耗品"}\\c[0]\n"
  270.     help += "\\c[16]范围:#{SCOPE[item.scope]}\\c[0]\n" if item.scope != 0
  271.     help += "\\c[16]效果:#{@elements[damage.element_id]}#{DAMAGE_TYPE[damage.type]}\\c[0]\n" if damage.type != 0
  272.     effects.select{|x| x.code == 31}.each{|x| help += "\\c[#{UP}]强化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
  273.     effects.select{|x| x.code == 32}.each{|x| help += "\\c[#{UP}]弱化:#{@params[x.data_id]} #{x.value1.to_i}回合\\c[0]\n"}
  274.     effects.select{|x| x.code == 33}.each{|x| help += "\\c[#{UP}]解除:强化#{@params[x.data_id]}\\c[0]\n"}
  275.     effects.select{|x| x.code == 34}.each{|x| help += "\\c[#{UP}]解除:弱化#{@params[x.data_id]}\\c[0]\n"}
  276.     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"}
  277.     effects.select{|x| x.code == 22}.each{|x| help += "\\c[#{UP}]解除:#{@states[x.data_id]} #{(x.value1*100).to_i}%\\c[0]\n"}
  278.     effects.select{|x| x.code == 41}.each{|x| help += "\\c[#{VIP}]特殊效果:撤退\n"}
  279.     effects.select{|x| x.code == 42}.each{|x| help += "\\c[#{VIP}]提升:#{@params[x.data_id]}#{x.value1.to_i}点\\c[0]\n"}
  280.     effects.select{|x| x.code == 43}.each{|x| help += "\\c[#{VIP}]学会:#{$data_items[x.data_id].name}\\c[0]\n"}
  281.     help += "\\c[16]场合:#{OCCASION[item.occasion]}\\c[0]\n"
  282.     help
  283.   end
  284.   #计算行数(有些字体的汉字和[字母,数字,符号]的宽度不同,
  285.   #有可能会照成行数计算不对,尽量用宽度相同的字体吧)
  286.   def self.getline(text,maxtext)
  287.     text_new = ""
  288.     xtext = []
  289.     line = 0
  290.     text.each_line{|x| text_new += x.gsub(/\\\S\[\d+\]/i){}} #去掉控制符
  291.     text_new.each_line{|x| xtext.push x.gsub(/\n/){}}        #去掉换行符
  292.     xtext.each{|x| line += (x.size / (maxtext.to_f + 1).to_i) + 1}
  293.     line
  294.   end
  295. end
  296. #==============================================================================
  297. # ■ Window_Help_Ex
  298. #------------------------------------------------------------------------------
  299. #  加强显示特技和物品等的说明
  300. #==============================================================================
  301.  
  302. class Window_Help_Ex < Window_Base
  303.   include VIPArcher::Equipplus
  304.   #--------------------------------------------------------------------------
  305.   # ● 初始化对象
  306.   #--------------------------------------------------------------------------
  307.   def initialize(line_number = 0)
  308.     super(0, 0, 210, 0)
  309.     self.z = 150
  310.     contents.font.size = 14
  311.     @time = 0
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 设置内容
  315.   #--------------------------------------------------------------------------
  316.   def set_text(text)
  317.     @text = text
  318.     refresh
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 清除
  322.   #--------------------------------------------------------------------------
  323.   def clear
  324.     set_text("")
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 更新帮助位置
  328.   #--------------------------------------------------------------------------
  329.   def uppos(index,rect,window)
  330.     self.height = fitting_height_vip(VIPArcher::Equipplus.getline(@xtext,13))
  331.     create_contents
  332.     contents.font.name = Font_Name
  333.     contents.font.size = Font_Size
  334.     rect.x -= window.ox
  335.     rect.y -= window.oy
  336.     ax = rect.x + rect.width + 10
  337.     ax = rect.x - self.width + 10 if ax + self.width > window.width + 10
  338.     ax += window.x
  339.     ax = 0 if ax < 0
  340.     ay = rect.y + rect.height
  341.     ay = rect.y - self.height if ay + self.height > window.height
  342.     ay += window.y
  343.     ay = 0 if ay < 0
  344.     self.x = ax
  345.     self.y = ay
  346.     set_text(@xtext)
  347.     @time = TIME
  348.     self.show
  349.     self.openness = 0
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 设置物品
  353.   #     item : 技能、物品等
  354.   #--------------------------------------------------------------------------
  355.   def set_item(item)
  356.     if item == nil
  357.       set_text("")
  358.       return
  359.     end
  360.     @xtext = ""
  361.     if $VIPArcherScript[:itemcolor] # require 物品描绘颜色脚本
  362.       @xtext = "\\c[16]名称:\\c[#{VIPArcher::ItemColor::Color_Lv[item.color]}]" +
  363.       "#{item.name}  #{item.color if item.color != 0}#{"" if item.color != 0}\\c[0]\n"
  364.     else
  365.       @xtext = "\\c[16]名称:\\c[0]#{item.name}\n"
  366.     end
  367.     @xtext += "\\c[16]介绍:\\c[0]#{item.description}\n"
  368.     if $VIPArcherScript[:load]      # require 队伍负重脚本
  369.       @xtext += "\\c[16]售价:#{item.price} 重量:#{item.load}\\c[0]\n"
  370.     else
  371.       @xtext += item.price == 0 ? "\\c[16]售价:\\c[14]无法出售\\c[0]\n":"\\c[16]售价:#{item.price}\\c[0]\n"
  372.     end if item.is_a?(RPG::EquipItem) || item.is_a?(RPG::Item)
  373.     @xtext += VIPArcher::Equipplus.getequiphelp(item) if item.is_a?(RPG::EquipItem)
  374.     @xtext += VIPArcher::Equipplus.getskillhelp(item) if item.is_a?(RPG::Skill)
  375.     @xtext += VIPArcher::Equipplus.getitemhelp(item) if item.is_a?(RPG::Item)
  376.     if $VIPArcherScript[:exdrop_rate]   # require 队伍掉率扩展
  377.       @xtext += "\\c[#{$2.to_i > 0 ? UP : DOWN}]#{$1}掉率: #{$2}%\\c[0]\n" if
  378.       item.note =~ /<(\W+)掉率:\s*([0-9+.-]+)%>/i
  379.     end if item.is_a?(RPG::EquipItem) || item.is_a?(RPG::Skill)
  380.     @xtext = @xtext[0,@text.size - 2] if @xtext[@xtext.size - 2,2] == "\n"
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 刷新
  384.   #--------------------------------------------------------------------------
  385.   def refresh
  386.     contents.clear
  387.     self.hide if @text == ""
  388.     draw_text_vip(4, 0, @text,width,40,false)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 更新画面
  392.   #--------------------------------------------------------------------------
  393.   def update
  394.     super
  395.     @time -= 1 if @time > 0
  396.     self.open if @time == 0
  397.   end
  398. end
  399. class Window_Base < Window
  400.   #--------------------------------------------------------------------------
  401.   # ● 计算窗口显示指定行数时的应用高度2*************************
  402.   #--------------------------------------------------------------------------
  403.   def fitting_height_vip(line_number)
  404.     line_number * contents.font.size + standard_padding * 2
  405.   end
  406.   # draw_text_ex的增强,使其可以自动换行  原作者:叶子 修改:wyongcan
  407.   #--------------------------------------------------------------------------
  408.   # ● 绘制带有控制符的文本内容
  409.   #   如果传递了width参数的话,会自动换行
  410.   #--------------------------------------------------------------------------
  411.   def draw_text_vip(x, y, text, width = nil,textwidth = nil,normalfont = true)
  412.     reset_font_settings if normalfont == true
  413.     text = convert_escape_characters(text)
  414.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  415.     if width != nil
  416.       pos[:height] = contents.font.size
  417.       pos[:width] = width
  418.       pos[:textwidth] = textwidth
  419.     end
  420.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 文字的处理
  424.   #     c    : 文字
  425.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  426.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  427.   #--------------------------------------------------------------------------
  428.   def process_character(c, text, pos)
  429.     case c
  430.     when "\r"   # 回车
  431.       return
  432.     when "\n"   # 换行
  433.       process_new_line(text, pos)
  434.     when "\f"   # 翻页
  435.       process_new_page(text, pos)
  436.     when "\e"   # 控制符
  437.       process_escape_character(obtain_escape_code(text), text, pos)
  438.     else        # 普通文字
  439.       pos[:textwidth] == nil ? text_width = text_size(c).width : text_width = pos[:textwidth]
  440.       if pos[:width] != nil && pos[:x] - pos[:new_x] + text_width > pos[:width]
  441.         process_new_line(text, pos)
  442.       end
  443.       process_normal_character(c, pos)
  444.     end
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 处理换行文字
  448.   #--------------------------------------------------------------------------
  449.   alias vip_20141007_process_new_line process_new_line
  450.   def process_new_line(text, pos)
  451.     vip_20141007_process_new_line(text, pos)
  452.     pos[:height] = contents.font.size if pos[:width] != nil
  453.   end
  454. end
  455.  
  456. #==============================================================================
  457. # ■ 设置帮助增强窗口
  458. #==============================================================================
  459. class Window_Selectable < Window_Base
  460.   attr_reader   :help_ex_window
  461.   #--------------------------------------------------------------------------
  462.   # ● 调用帮助窗口的更新方法
  463.   #--------------------------------------------------------------------------
  464.   alias help_ex_call_update_help call_update_help
  465.   def call_update_help
  466.     help_ex_call_update_help
  467.     update_ex_help if active && @help_ex_window
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 更新帮助内容
  471.   #--------------------------------------------------------------------------
  472.   def update_ex_help
  473.     @help_ex_window.set_item(item) if @help_ex_window
  474.     if index != -1 && item != nil
  475.       @help_ex_window.uppos(index,item_rect(index),self)
  476.     end
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 设置帮助增强窗口
  480.   #--------------------------------------------------------------------------
  481.   def help_ex_window=(help_ex_window)
  482.     @help_ex_window = help_ex_window
  483.   end
  484. end
  485. #==============================================================================
  486. # ■ 在各场景处理帮助窗口
  487. #==============================================================================
  488. class Scene_Base
  489.   #--------------------------------------------------------------------------
  490.   # ● 生成帮助增强窗口
  491.   #--------------------------------------------------------------------------
  492.   def create_help_ex
  493.     @help_ex_window  = Window_Help_Ex.new
  494.     @help_ex_window .viewport = @viewport
  495.     @item_window.help_ex_window  = @help_ex_window if @item_window
  496.     @slot_window.help_ex_window  = @help_ex_window if @slot_window
  497.     @skill_window.help_ex_window = @help_ex_window if @skill_window
  498.     @buy_window.help_ex_window   = @help_ex_window if @buy_window
  499.     @sell_window.help_ex_window  = @help_ex_window if @sell_window
  500.   end
  501. end
  502. #道具栏
  503. class Scene_Item < Scene_ItemBase
  504.   #--------------------------------------------------------------------------
  505.   # ● 开始处理
  506.   #--------------------------------------------------------------------------
  507.   alias help_ex_start start
  508.   def start
  509.     help_ex_start
  510.     create_help_ex
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 物品“取消”
  514.   #--------------------------------------------------------------------------
  515.   alias help_ex_on_item_cancel on_item_cancel
  516.   def on_item_cancel
  517.     help_ex_on_item_cancel
  518.     @help_ex_window.hide
  519.   end
  520. end
  521. #装备栏
  522. class Scene_Equip < Scene_MenuBase
  523.   #--------------------------------------------------------------------------
  524.   # ● 开始处理
  525.   #--------------------------------------------------------------------------
  526.   alias help_ex_start start
  527.   def start
  528.     help_ex_start
  529.     create_help_ex
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ● 装备栏“取消”
  533.   #--------------------------------------------------------------------------
  534.   alias help_ex_on_slot_cancel on_slot_cancel
  535.   def on_slot_cancel
  536.     help_ex_on_slot_cancel
  537.     @help_ex_window.hide
  538.   end
  539. end
  540. #技能栏
  541. class Scene_Skill < Scene_ItemBase
  542.   #--------------------------------------------------------------------------
  543.   # ● 开始处理
  544.   #--------------------------------------------------------------------------
  545.   alias help_ex_start start
  546.   def start
  547.     help_ex_start
  548.     create_help_ex
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 物品“确定”
  552.   #--------------------------------------------------------------------------
  553.   alias help_ex_on_item_ok on_item_ok
  554.   def on_item_ok
  555.     help_ex_on_item_ok
  556.     @help_ex_window.hide
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ● 物品“取消”
  560.   #--------------------------------------------------------------------------
  561.   alias help_ex_on_item_cancel on_item_cancel
  562.   def on_item_cancel
  563.     help_ex_on_item_cancel
  564.     @help_ex_window.hide
  565.   end
  566. end
  567. #战斗界面
  568. class Scene_Battle < Scene_Base
  569.   #--------------------------------------------------------------------------
  570.   # ● 开始处理
  571.   #--------------------------------------------------------------------------
  572.   alias help_ex_start start
  573.   def start
  574.     help_ex_start
  575.     create_help_ex
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● 技能“确定”
  579.   #--------------------------------------------------------------------------
  580.   alias help_ex_on_skill_ok on_skill_ok
  581.   def on_skill_ok
  582.     help_ex_on_skill_ok
  583.     @help_ex_window.hide
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● 技能“取消”
  587.   #--------------------------------------------------------------------------
  588.   alias help_ex_on_skill_cancel on_skill_cancel
  589.   def on_skill_cancel
  590.     help_ex_on_skill_cancel
  591.     @help_ex_window.hide
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ● 物品“确定”
  595.   #--------------------------------------------------------------------------
  596.   alias help_ex_on_item_ok on_item_ok
  597.   def on_item_ok
  598.     help_ex_on_item_ok
  599.     @help_ex_window.hide
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● 物品“取消”
  603.   #--------------------------------------------------------------------------
  604.   alias help_ex_on_item_cancel on_item_cancel
  605.   def on_item_cancel
  606.     help_ex_on_item_cancel
  607.     @help_ex_window.hide
  608.   end
  609. end
  610. #商店界面
  611. class Scene_Shop < Scene_MenuBase
  612.   #--------------------------------------------------------------------------
  613.   # ● 开始处理
  614.   #--------------------------------------------------------------------------
  615.   alias help_ex_start start
  616.   def start
  617.     help_ex_start
  618.     create_help_ex
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ● 买入“确定”
  622.   #--------------------------------------------------------------------------
  623.   alias help_ex_on_buy_ok on_buy_ok
  624.   def on_buy_ok
  625.     help_ex_on_buy_ok
  626.     @help_ex_window.hide
  627.   end
  628.   #--------------------------------------------------------------------------
  629.   # ● 买入“取消”
  630.   #--------------------------------------------------------------------------
  631.   alias help_ex_on_buy_cancel on_buy_cancel
  632.   def on_buy_cancel
  633.     help_ex_on_buy_cancel
  634.     @help_ex_window.hide
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 卖出“确定”
  638.   #--------------------------------------------------------------------------
  639.   alias help_ex_on_sell_ok on_sell_ok
  640.   def on_sell_ok
  641.     help_ex_on_sell_ok
  642.     @help_ex_window.hide
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ● 卖出“取消”
  646.   #--------------------------------------------------------------------------
  647.   alias help_ex_on_sell_cancel on_sell_cancel
  648.   def on_sell_cancel
  649.     help_ex_on_sell_cancel
  650.     @help_ex_window.hide
  651.   end
  652. end


仓库脚本
RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 アイテム預かり所 Ver1.01 by 星潟
  3. #------------------------------------------------------------------------------
  4. # アイテムを預ける事が出来るようになります。
  5. # 莫大な数のアイテムが登場する作品におすすめです。
  6. #
  7. # 最大所持数を越える量のアイテムを引き出せないようにする機能や
  8. # 預けられないアイテムの作成、預けられる数の限界設定の他、
  9. # アイテムの預かり・引き出しに関わるイベントコマンドをいくつか実装します。
  10. #
  11. # 在物品,武器,防具的备注栏中写入以下文字
  12. # 此物品将会特殊处理
  13. #
  14. # <保存禁止>……此道具不能被存入仓库
  15. #
  16. # <保存制限:20>……仓库里只能放入指定数量的物品
  17. #
  18. # 以下在事件中可使用的脚本语句:
  19. #
  20. # SceneManager.call(Scene_Item_Keep)
  21. # 打开道具仓库界面
  22. #
  23. # item_keep_all(data_a)
  24. # data_a为0时……把身上所有道具放入仓库
  25. # data_a为1时……把仓库所有道具取出来
  26. #
  27. # weapon_keep_all(data_a)
  28. # data_a为0时……預けられる武器を預けられるだけ預けます。
  29. # data_a为1时……武器を全て引き出せるだけ引き出します。
  30. #
  31. # armor_keep_all(data_a)
  32. # data_a为0时……預けられる防具を預けられるだけ預けます。
  33. # data_a为1时……防具を全て引き出せるだけ引き出します。
  34. #
  35. # item_keep(data_a, data_b)
  36. # data_a为0时……data_bで指定したIDのアイテムを預けられるだけ預けます。
  37. # data_a为1时……data_bで指定したIDのアイテムを引き出せるだけ引き出します。
  38. #
  39. # weapon_keep(data_a, data_b)
  40. # data_a为0时……data_bで指定したIDの武器を預けられるだけ預けます。
  41. # data_a为1时……data_bで指定したIDの武器を引き出せるだけ引き出します。
  42. #
  43. # armor_keep(data_a, data_b)
  44. # data_a为0时……data_bで指定したIDの防具を預けられるだけ預けます。
  45. # data_a为1时……data_bで指定したIDの防具を引き出せるだけ引き出します。
  46. #
  47. # word_keep_all(data_a, data_b)
  48. #
  49. # data_a为0时……
  50. # data_bで指定した言葉がメモ欄に含まれる
  51. # アイテム・武器・防具を預けられるだけ預けます。
  52. #
  53. # data_a为1时……
  54. # data_bで指定した言葉がメモ欄に含まれる
  55. # アイテム・武器・防具を引き出せるだけ引き出します。
  56. #
  57. # word_keep_allで、data_bで設定する言葉は、前後を""で囲んでください。
  58. # 【例.word_keep_all(1, "回復")】
  59. # この場合、回復という言葉をメモ欄に含んだアイテム・武器・防具を
  60. # 預かり所から全て引き出します。
  61. #------------------------------------------------------------------------------
  62. # Ver1.01 導入前のセーブデータを使用した場合に正常に機能しなくなる不具合を修正。
  63. #         軽量化スクリプトと統合し、軽量化モード切替機能を追加。
  64. #         説明ウィンドウ機能を追加。
  65. #==============================================================================
  66. module ITEM_KEEPER
  67.  
  68.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  69.   #true 表示しない false 表示する
  70.  
  71.   UNVISIBLE = false
  72.  
  73.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  74.   #true 表示しない false 表示する
  75.  
  76.   WORD1     = "保存禁止"
  77.  
  78.   #保存に個数制限を設ける為の設定用キーワードです。
  79.  
  80.   WORD2     = "保存制限"
  81.  
  82.   #保存制限のないアイテムについていくつまで預けられるかを設定します。
  83.  
  84.   LIMIT     = 99
  85.  
  86.   #説明ウィンドウを表示するかどうかを設定します。
  87.  
  88.   DESCRIPT  = true
  89.  
  90.   #数量ウィンドウと説明ウィンドウの背景透明度を変更します。
  91.  
  92.   B_OPACITY = 255
  93.  
  94.   #軽量化フラグ。
  95.  
  96.   FLAG      = true
  97.  
  98.   #説明ウィンドウに表示する項目を設定します。
  99.   #(基本的にこの部分を変更する必要はありません)
  100.  
  101.   D         = [
  102.   ["↓",":取出1个"],
  103.   ["↑",":放入1个"],
  104.   ["←",":取出10个"],
  105.   ["→",":放入10个"],
  106.   ["CTRL键",":取出99个"],
  107.   ["SHIFT键",":放入99个"]
  108.   ]
  109.  
  110. end
  111.  
  112. class RPG::BaseItem
  113.   #--------------------------------------------------------------------------
  114.   # 最大保管数を取得
  115.   #--------------------------------------------------------------------------
  116.   def max_item_keep_number
  117.  
  118.     #キャッシュが存在する場合はキャッシュを返す。
  119.  
  120.     return @max_item_keep_number if @max_item_keep_number != nil
  121.  
  122.     #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。
  123.  
  124.     memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
  125.     @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT
  126.  
  127.     #データを返す。
  128.  
  129.     @max_item_keep_number
  130.   end
  131. end
  132. class Game_Party < Game_Unit
  133.   #--------------------------------------------------------------------------
  134.   # オブジェクト初期化
  135.   #--------------------------------------------------------------------------
  136.   alias initialize_ik initialize
  137.   def initialize
  138.  
  139.     #本来の処理を実行。
  140.  
  141.     initialize_ik
  142.  
  143.     #パーティー外全アイテムリストを初期化。
  144.  
  145.     init_all_items_ik
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # パーティー外全アイテムリストの初期化(強制)
  149.   #--------------------------------------------------------------------------
  150.   def init_all_items_ik
  151.  
  152.     #それぞれ、空のハッシュを生成。
  153.  
  154.     @items_k = {}
  155.     @weapons_k = {}
  156.     @armors_k = {}
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # パーティー外全アイテムリストの初期化(nilの場合)
  160.   #--------------------------------------------------------------------------
  161.   def init_all_items_ik_un_nil
  162.  
  163.     #それぞれ、存在しない場合のみハッシュを生成。
  164.  
  165.     @items_k = {} if @items_k == nil
  166.     @weapons_k = {} if @weapons_k == nil
  167.     @armors_k = {} if @armors_k == nil
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # アイテムの最大保管数取得
  171.   #--------------------------------------------------------------------------
  172.   def max_item_keep_number(item)
  173.  
  174.     #アイテムが存在しない場合はfalseを返す。
  175.  
  176.     return false if item == nil
  177.  
  178.     #アイテムの最大保管数を返す。
  179.  
  180.     item.max_item_keep_number
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # アイテムの保管数取得
  184.   #--------------------------------------------------------------------------
  185.   def item_keep_number(item)
  186.  
  187.     #コンテナを取得。
  188.  
  189.     container = item_keep_container(item.class)
  190.  
  191.     #コンテナにデータが存在しない場合は0を返す。
  192.  
  193.     container ? container[item.id] || 0 : 0
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # アイテムの保管
  197.   #--------------------------------------------------------------------------
  198.   def item_keep(item, number, get = false)
  199.  
  200.     #数量データを取得。
  201.  
  202.     number_data = number
  203.  
  204.     #アイテム保管を実行。
  205.  
  206.     item_keep_execute(item, number_data)
  207.  
  208.     #所持アイテムを減らす。
  209.  
  210.     gain_item(item, -number_data) if get == false
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  214.   #--------------------------------------------------------------------------
  215.   def item_keep_container(item_class)
  216.  
  217.     #アイテムの種類に応じてコンテナを取得。
  218.  
  219.     return @items_k   if item_class == RPG::Item
  220.     return @weapons_k if item_class == RPG::Weapon
  221.     return @armors_k  if item_class == RPG::Armor
  222.     return nil
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # アイテムの増加(減少)
  226.   #--------------------------------------------------------------------------
  227.   def item_keep_execute(item, amount)
  228.  
  229.     #コンテナを取得。
  230.  
  231.     container = item_keep_container(item.class)
  232.  
  233.     #コンテナが存在しない場合は処理をしない。
  234.  
  235.     return if container == nil
  236.  
  237.     #処理前の保管数を取得。
  238.  
  239.     last_number = item_keep_number(item)
  240.  
  241.     #処理後の保管数を取得。
  242.  
  243.     new_number = last_number + amount
  244.  
  245.     #保管数を変更する。
  246.  
  247.     container[item.id] = new_number
  248.  
  249.     #保管数が0となった場合はハッシュから削除する。
  250.  
  251.     container.delete(item.id) if container[item.id] == 0
  252.  
  253.     #マップのリフレッシュフラグを立てる。
  254.  
  255.     $game_map.need_refresh = true
  256.   end
  257. end
  258. class Scene_Item_Keep < Scene_Item
  259.   #--------------------------------------------------------------------------
  260.   # 開始処理
  261.   #--------------------------------------------------------------------------
  262.   def start
  263.  
  264.     #コンテナが存在しない場合はコンテナを生成する。
  265.  
  266.     $game_party.init_all_items_ik_un_nil
  267.  
  268.     #スーパークラスの処理を実行。
  269.  
  270.     super
  271.  
  272.     #説明ウィンドウの作成
  273.  
  274.     create_description_window
  275.  
  276.     #個数入力ウィンドウの作成
  277.  
  278.     create_number_window
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # カテゴリウィンドウの作成
  282.   #--------------------------------------------------------------------------
  283.   def create_category_window
  284.     @category_window = Window_ItemCategory.new
  285.     @category_window.viewport = @viewport
  286.     @category_window.help_window = @help_window
  287.     @category_window.y = @help_window.height
  288.     @category_window.set_handler(:ok,     method(:on_category_ok))
  289.     @category_window.set_handler(:cancel, method(:return_scene))
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # アイテムウィンドウの作成
  293.   #--------------------------------------------------------------------------
  294.   def create_item_window
  295.     wy = @category_window.y + @category_window.height
  296.     wh = Graphics.height - wy
  297.     @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
  298.     @item_window.viewport = @viewport
  299.     @item_window.help_window = @help_window
  300.     @item_window.set_handler(:ok,     method(:on_item_ok))
  301.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  302.     @category_window.item_window = @item_window
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # 説明ウィンドウの作成
  306.   #--------------------------------------------------------------------------
  307.   def create_description_window
  308.  
  309.     #説明ウィンドウを作成しない場合は処理を行わない。
  310.  
  311.     return unless ITEM_KEEPER::DESCRIPT
  312.  
  313.     @description_window = Window_IKDescription.new
  314.     @description_window.z = 100
  315.     @description_window.viewport = @viewport
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # 個数入力ウィンドウの作成
  319.   #--------------------------------------------------------------------------
  320.   def create_number_window
  321.     @number_window = Window_IKInput.new
  322.     @number_window.z = 100
  323.     @number_window.item_window = @item_window
  324.     @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
  325.     @number_window.viewport = @viewport
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # カテゴリ[決定]
  329.   #--------------------------------------------------------------------------
  330.   def on_category_ok
  331.     @item_window.activate
  332.     @item_window.select_last
  333.     @category_window.deactivate
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # アイテム[決定]
  337.   #--------------------------------------------------------------------------
  338.   def on_item_ok
  339.     $game_party.last_item.object = item
  340.     item == nil ? @item_window.activate : determine_item
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # アイテムの決定
  344.   #--------------------------------------------------------------------------
  345.   def determine_item
  346.     @number_window.number = 0
  347.     item = @item_window.item
  348.     @number_window.show
  349.     @number_window.refresh
  350.     @description_window.show if ITEM_KEEPER::DESCRIPT
  351.     @item_window.deactivate
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # アイテム[キャンセル]
  355.   #--------------------------------------------------------------------------
  356.   def on_item_cancel
  357.     @item_window.unselect
  358.     @category_window.activate
  359.   end
  360. end
  361. #==============================================================================
  362. # ■ Window_PTItemList
  363. #------------------------------------------------------------------------------
  364. #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  365. #==============================================================================
  366.  
  367. class Window_PTItemList < Window_ItemList
  368.   #--------------------------------------------------------------------------
  369.   # アイテムをリストに含めるかどうか
  370.   #--------------------------------------------------------------------------
  371.   alias include_ik? include?
  372.   def include?(item)
  373.  
  374.     #アイテムが存在しない場合、ウィンドウが不可視の場合
  375.     #保管禁止アイテムを非表示にする場合は表示しない。
  376.  
  377.     return false if item == nil
  378.     return false if self.visible == false
  379.     return false if ITEM_KEEPER::UNVISIBLE == true && item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  380.  
  381.     #本来の処理を実行。
  382.  
  383.     include_ik?(item)
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # アイテムを許可状態で表示するかどうか
  387.   #--------------------------------------------------------------------------
  388.   def enable?(item)
  389.  
  390.     #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。
  391.  
  392.     return false if item == nil
  393.     return false if item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  394.     return true
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # アイテムリストの作成
  398.   #--------------------------------------------------------------------------
  399.   def make_item_list
  400.  
  401.     #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。
  402.  
  403.     item_data = $data_items + $data_weapons + $data_armors
  404.     @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
  405.     @data.push(nil) if include?(nil)
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # 選択項目の有効状態を取得
  409.   #--------------------------------------------------------------------------
  410.   def current_item_enabled?
  411.     enable?(@data[index])
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # 桁数の取得
  415.   #--------------------------------------------------------------------------
  416.   def col_max
  417.     return 1
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # フレーム更新
  421.   #--------------------------------------------------------------------------
  422.   def update
  423.     super
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # 項目の描画
  427.   #--------------------------------------------------------------------------
  428.   def draw_item(index, flag = false)
  429.  
  430.     #データからアイテムを取得し、各種データを記述する。
  431.  
  432.     item = @data[index]
  433.  
  434.     #アイテムが存在しない場合は処理を行わない。
  435.  
  436.     return unless item
  437.  
  438.     rect = item_rect(index)
  439.     contents.clear_rect(rect) if flag
  440.     rect.width -= 4
  441.     draw_item_name(item, rect.x, rect.y, enable?(item))
  442.     change_color(text_color(5))
  443.     draw_text(180, rect.y, 100, line_height, "所持", 2)
  444.     change_color(text_color(0))
  445.     draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
  446.     draw_text(240, rect.y, 100, line_height,"/", 2)
  447.     draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
  448.     change_color(text_color(5))
  449.     draw_text(330, rect.y, 100, line_height, "倉庫", 2)
  450.     change_color(text_color(0))
  451.     draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
  452.     draw_text(390, rect.y, 100, line_height, "/", 2)
  453.     draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)
  454.  
  455.   end
  456. end
  457. class Window_IKInput < Window_Selectable
  458.   #--------------------------------------------------------------------------
  459.   # 公開インスタンス変数
  460.   #--------------------------------------------------------------------------
  461.   attr_accessor   :item_window
  462.   attr_accessor   :number
  463.   attr_accessor   :description_window
  464.   #--------------------------------------------------------------------------
  465.   # オブジェクト初期化
  466.   #--------------------------------------------------------------------------
  467.   def initialize
  468.  
  469.     #ウィンドウを生成する。
  470.  
  471.     super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)
  472.  
  473.     #設定に応じて背景透明度を変更する。
  474.  
  475.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  476.  
  477.     #一旦隠す。
  478.  
  479.     hide
  480.  
  481.     #非アクティブにする。
  482.  
  483.     deactivate
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # 数字の変更処理
  487.   #--------------------------------------------------------------------------
  488.   def update
  489.  
  490.     #見えない場合は更新しない。
  491.  
  492.     return unless self.visible
  493.  
  494.     #入力関連の各種処理を実行。
  495.  
  496.     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)
  497.       if Input.press?(Input::SHIFT)   #100個預ける
  498.         keep_exe(@item_window.item, 100)
  499.       elsif Input.press?(Input::CTRL) #100個引き出す
  500.         get_exe(@item_window.item, 100)
  501.       elsif Input.repeat?(:RIGHT)     #10個預ける
  502.         keep_exe(@item_window.item, 10)
  503.       elsif Input.repeat?(:LEFT)      #10個引き出す
  504.         get_exe(@item_window.item, 10)
  505.       elsif Input.repeat?(:UP)        #1個預ける
  506.         keep_exe(@item_window.item, 1)
  507.       elsif Input.repeat?(:DOWN)      #1個引き出す
  508.         get_exe(@item_window.item, 1)
  509.       end
  510.       refresh_number
  511.     end
  512.     if Input.trigger?(:C)
  513.  
  514.       #決定音を鳴らす。
  515.  
  516.       Sound.play_ok
  517.  
  518.       #数に応じてアイテム数を変更。
  519.  
  520.       $game_party.item_keep(@item_window.item, @number)
  521.  
  522.       #ウィンドウを隠す。
  523.  
  524.       self.hide
  525.  
  526.       #ウィンドウを非アクティブにする。
  527.  
  528.       self.deactivate
  529.  
  530.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  531.  
  532.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  533.  
  534.       #条件に応じてアイテムウィンドウを変更する。
  535.  
  536.       ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh
  537.  
  538.       #アイテムウィンドウをアクティブにする。
  539.  
  540.       @item_window.activate
  541.     elsif Input.trigger?(:B)
  542.  
  543.       #決定音を鳴らす。
  544.  
  545.       Sound.play_cancel
  546.  
  547.       #ウィンドウを隠す。
  548.  
  549.       self.hide
  550.  
  551.       #ウィンドウを非アクティブにする。
  552.  
  553.       self.deactivate
  554.  
  555.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  556.  
  557.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  558.  
  559.       #アイテムウィンドウをアクティブにする。
  560.  
  561.       @item_window.activate
  562.  
  563.     end
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # 預けられる限界をチェック
  567.   #--------------------------------------------------------------------------
  568.   def limitcheck1
  569.  
  570.     #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。
  571.  
  572.     return false if $game_party.item_number(@item_window.item) - @number == 0
  573.     return false if $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item)
  574.     return true
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # 引き出せる限界をチェック
  578.   #--------------------------------------------------------------------------
  579.   def limitcheck2
  580.  
  581.     #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。
  582.  
  583.     return false if $game_party.item_number(@item_window.item) - @number == $game_party.max_item_number(@item_window.item)
  584.     return false if $game_party.item_keep_number(@item_window.item) + @number == 0
  585.     return true
  586.   end
  587.   #--------------------------------------------------------------------------
  588.   # 預ける
  589.   #--------------------------------------------------------------------------
  590.   def keep_exe(item, amount)
  591.  
  592.     #数量分処理する。
  593.  
  594.     amount.times do
  595.       @number += 1 if limitcheck1
  596.     end
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # 引き出す
  600.   #--------------------------------------------------------------------------
  601.   def get_exe(item, amount)
  602.  
  603.     #数量分処理する。
  604.  
  605.     amount.times do
  606.       @number -= 1 if limitcheck2
  607.     end
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # リフレッシュ
  611.   #--------------------------------------------------------------------------
  612.   def refresh
  613.  
  614.     #不可視状態の場合はリフレッシュしない。
  615.  
  616.     return false unless self.visible
  617.  
  618.     #数量を更新する。
  619.  
  620.     @last_number = @number
  621.  
  622.     #ウィンドウの内容を消去する。
  623.  
  624.     contents.clear
  625.     create_contents
  626.  
  627.     #アイテム名を描写。
  628.  
  629.     draw_item_name(@item_window.item, 0, 0)
  630.     change_color(system_color)
  631.     draw_text(0, line_height * 1, 80, line_height, "所持", 1)
  632.     draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
  633.     draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
  634.     draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)
  635.  
  636.     #所持数データを描写。
  637.  
  638.     $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)
  639.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  640.     $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)
  641.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # 数量のみリフレッシュ
  645.   #--------------------------------------------------------------------------
  646.   def refresh_number
  647.  
  648.     #不可視状態の場合はリフレッシュしない。
  649.  
  650.     return false unless self.visible
  651.  
  652.     #最後の数量と現在の数量が異なる場合は数量を更新する。
  653.  
  654.     if @last_number != @number
  655.       Sound.play_cursor
  656.       @last_number = @number
  657.     end
  658.  
  659.     #ウィンドウの内容を消去する。
  660.  
  661.     contents.clear_rect(0, line_height * 2, 80, line_height)
  662.     contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)
  663.  
  664.     #所持数データを描写。
  665.  
  666.     $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)
  667.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  668.     $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)
  669.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  670.   end
  671. end
  672. class Window_IKDescription < Window_Base
  673.   def initialize
  674.  
  675.     #ウィンドウを生成する。
  676.  
  677.     super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)
  678.  
  679.     #設定に応じて背景透明度を変更する。
  680.  
  681.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  682.  
  683.     #システムカラーで項目部分を描画する。
  684.  
  685.     change_color(system_color)
  686.  
  687.     draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
  688.     draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
  689.     draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
  690.     draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
  691.     draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
  692.     draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)
  693.  
  694.     #通常カラーで項目部分を描画する。
  695.  
  696.     change_color(normal_color)
  697.  
  698.     draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
  699.     draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
  700.     draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
  701.     draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
  702.     draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
  703.     draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)
  704.  
  705.     hide
  706.   end
  707. end
  708. class Game_Interpreter
  709.   #--------------------------------------------------------------------------
  710.   # アイテムを全て預ける/引き出す
  711.   #--------------------------------------------------------------------------
  712.   def item_keep_all(data)
  713.  
  714.     #種類をアイテムとする。
  715.  
  716.     item_data = $data_items
  717.  
  718.     #共通処理を実行。
  719.  
  720.     common_keep_all(item_data, data)
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # 武器を全て預ける/引き出す
  724.   #--------------------------------------------------------------------------
  725.   def weapon_keep_all(data)
  726.  
  727.     #種類を武器とする。
  728.  
  729.     item_data = $data_weapons
  730.  
  731.     #共通処理を実行。
  732.  
  733.     common_keep_all(item_data, data)
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # 防具を全て預ける/引き出す
  737.   #--------------------------------------------------------------------------
  738.   def armor_keep_all(data)
  739.  
  740.     #種類を防具とする。
  741.  
  742.     item_data = $data_armors
  743.  
  744.     #共通処理を実行。
  745.  
  746.     common_keep_all(item_data, data)
  747.   end
  748.   #--------------------------------------------------------------------------
  749.   # 全て預ける/引き出す場合の共通処理を実行
  750.   #--------------------------------------------------------------------------
  751.   def common_keep_all(item_data, data)
  752.  
  753.     #存在するオブジェクトの数分だけ処理。
  754.  
  755.     item_data.each do |i|
  756.  
  757.       #nilの場合は処理しない。
  758.  
  759.       next if i == nil
  760.  
  761.       #預けられないアイテムの場合は処理しない。
  762.  
  763.       next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  764.  
  765.       #各種データを取得。
  766.  
  767.       data1 = $game_party.item_number(i)
  768.       data2 = $game_party.max_item_number(i)
  769.       data3 = $game_party.item_keep_number(i)
  770.       data4 = $game_party.max_item_keep_number(i)
  771.  
  772.       #追加で所持できる数と、追加で預けられる数を計算。
  773.  
  774.       data5 = data4 - data3
  775.       data6 = data2 - data1
  776.  
  777.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  778.  
  779.       amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  780.       $game_party.item_keep(i, amount)
  781.  
  782.     end
  783.   end
  784.   #--------------------------------------------------------------------------
  785.   # アイテムを一定個数預ける/引き出す
  786.   #--------------------------------------------------------------------------
  787.   def item_keep(data_a, data_b)
  788.  
  789.     #種類をアイテムとする。
  790.  
  791.     item_data = $data_items
  792.  
  793.     #共通処理を実行。
  794.  
  795.     common_keep(item_data, data_a, data_b)
  796.  
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # 武器を一定個数預ける/引き出す
  800.   #--------------------------------------------------------------------------
  801.   def weapon_keep(data_a, data_b)
  802.  
  803.     #種類を武器とする。
  804.  
  805.     item_data = $data_weapons
  806.  
  807.     #共通処理を実行。
  808.  
  809.     common_keep(item_data, data_a, data_b)
  810.  
  811.   end
  812.   #--------------------------------------------------------------------------
  813.   # 防具を一定個数預ける/引き出す
  814.   #--------------------------------------------------------------------------
  815.   def armor_keep(data_a, data_b)
  816.  
  817.     #種類を防具とする。
  818.  
  819.     item_data = $data_armors
  820.  
  821.     #共通処理を実行。
  822.  
  823.     common_keep(item_data, data_a, data_b)
  824.  
  825.   end
  826.   #--------------------------------------------------------------------------
  827.   # 一定個数預ける/引き出す場合の共通処理を実行します。
  828.   #--------------------------------------------------------------------------
  829.   def common_keep(item_data, data_a, data_b)
  830.  
  831.     #nilの場合は処理しない。
  832.  
  833.     return if item_data[data_b] == nil
  834.  
  835.     #預けられないアイテムの場合は処理しない。
  836.  
  837.     return if item_data[data_b].note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  838.  
  839.     #各種データを取得。
  840.  
  841.     data1 = $game_party.item_number(item_data[data_b])
  842.     data2 = $game_party.max_item_number(item_data[data_b])
  843.     data3 = $game_party.item_keep_number(item_data[data_b])
  844.     data4 = $game_party.max_item_keep_number(item_data[data_b])
  845.  
  846.     #追加で所持できる数と、追加で預けられる数を計算。
  847.  
  848.     data5 = data4 - data3
  849.     data6 = data2 - data1
  850.  
  851.     #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  852.  
  853.     amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  854.     $game_party.item_keep(item_data[data_b], amount)
  855.  
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  859.   #--------------------------------------------------------------------------
  860.   def word_keep_all(data_a, data_b)
  861.  
  862.     #アイテム・武器・防具全てを含める配列を生成。
  863.  
  864.     item_data = $data_items + $data_weapons + $data_armors
  865.  
  866.     #存在するオブジェクトの数分だけ処理。
  867.  
  868.     item_data.each do |i|
  869.  
  870.       #nilの場合は処理しない。
  871.  
  872.       next if i == nil
  873.  
  874.       #預けられないアイテムの場合は処理しない。
  875.  
  876.       next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  877.  
  878.       #指定されたワードがメモ欄に含まれていない場合は処理しない。
  879.  
  880.       next unless i.note.include?(data_b)
  881.  
  882.       #各種データを取得。
  883.  
  884.       data1 = $game_party.item_number(i)
  885.       data2 = $game_party.max_item_number(i)
  886.       data3 = $game_party.item_keep_number(i)
  887.       data4 = $game_party.max_item_keep_number(i)
  888.  
  889.       #追加で所持できる数と、追加で預けられる数を計算。
  890.  
  891.       data5 = data4 - data3
  892.       data6 = data2 - data1
  893.  
  894.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  895.  
  896.       amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  897.       $game_party.item_keep(i, amount)
  898.  
  899.     end
  900.   end
  901. end

作者: Vortur    时间: 2016-8-16 15:44
  
不知道,同求。拜托有结果了at在下一次。谢啦!~

  
作者: cinderelmini    时间: 2016-8-16 16:05
  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行后面加上那两句判定应该就可以了。




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