Project1

标题: 技能消耗物品的花费该怎么写 [打印本页]

作者: 白魔导师宝儿    时间: 2018-2-19 18:28
标题: 技能消耗物品的花费该怎么写
RUBY 代码复制
  1. class RPG::Skill
  2.   def item_cost
  3.     /<COST_ITEM\s*(\d+)>/ =~ note ? $1.to_i : 0
  4.   end
  5. end
  6.  
  7. class Game_Battler
  8.   alias sp_skill_can_use? skill_can_use?
  9.   def skill_can_use?(skill)
  10.     item = $data_items[skill.item_cost]
  11.     sp_skill_can_use?(skill) && (!item || $game_party.has_item?(item))
  12.   end
  13. end
  14.  
  15. class Scene_Battle < Scene_Base
  16.   alias sp_execute_action_skill execute_action_skill
  17.   def execute_action_skill
  18.     sp_execute_action_skill
  19. #    item = $data_items[skill.item_cost]
  20. #    $game_party.lose_item(item, 1) if item
  21.   end
  22. end

卡在了消耗物品的阶段
请教大家该怎么画,啊啦~~~
作者: 梦无笙    时间: 2018-2-19 20:59
先插入以下脚本
  1. #==============================================================================
  2. # ■ [VX] 读取rmvx备注栏
  3. #    [VX] ReadNote
  4. #----------------------------------------------------------------------------
  5. # 使用说明:
  6. # 【例】在vx数据库比如1号物品的备注栏里写: 耐久度 = 10
  7. #       读取时使用: p $data_items[1].read_note('耐久度')
  8. # 几点注意:
  9. #       ① 支持汉字,英文忽略大小写
  10. #       ② 等号右边遵循ruby语法格式,例如:
  11. #              test1 = 1              #=> 1
  12. #              test2 = "a"            #=> "a"
  13. #              test3 = true           #=> true
  14. #              test4 = [1,2,3]        #=> [1,2,3]
  15. #              test5 = {"orz"=>1}     #=> {"orz"=>1}
  16. #       ③ 等号忽略空格,以下均正确:
  17. #              test = nil; test= nil; test =nil; test=nil
  18. #----------------------------------------------------------------------------
  19. #    更新作者: 沉影不器
  20. #    许可协议: FSL
  21. #    项目版本: 2.02.1001
  22. #    引用网址: http://bbs.66rpg.com/thread-99474-1-1.html
  23. #----------------------------------------------------------------------------
  24. #    - *2.02.1001* (2010-10-01) By 沉影不器
  25. #      *修复引用方法带Binding的错误
  26. #
  27. #    - *2.01.0806* (2010-08-06) By 沉影不器
  28. #      *完全用eval执行文本,进一步简化代码
  29. #
  30. #    - *2.00.0729* (2010-07-29) By 沉影不器
  31. #      *改用eval执行赋值内容,支持浮点.数组.哈希等
  32. #      *强制忽略大小写
  33. #      *简化脚本
  34. #
  35. #    - *1.11.0824* (2008-08-24) By 沉影不器
  36. #      *修正rmvx英文帮助带来的类名错误
  37. #
  38. #    - *1.10.0821* (2008-08-21) By 沉影不器
  39. #      *扩展到支持rmvx数据库内所有带备注栏的选项
  40. #      *改了一下算法,使备注栏的注释也同ruby语法一样忽略空格
  41. #
  42. #    - *1.02.0819* (2008-08-19) By 沉影不器
  43. #      *直接成为RPG::BaseItem内一个函数,简化使用方法
  44. #
  45. #    - *1.00.0818* (2008-08-18) By 沉影不器
  46. #      *初版
  47. #==============================================================================
  48. $fscript = {} if $fscript == nil
  49. $fscript["ReadNote"] = "2.02.1001"
  50. #==============================================================================
  51. # ■ RPG
  52. #==============================================================================
  53. module RPG
  54.   #=============================================================================
  55.   # □ ReadNote
  56.   #=============================================================================
  57.   module ReadNote
  58.     def self.read(str, section, mismatch = nil)
  59.       str.each_line do |line|
  60.         ## 不希望忽略大小写,则删掉下一行最后一个i
  61.         eval("#{line}; return #{section}") if line =~ /^\s*#{section}\s*=/i
  62.       end
  63.       return mismatch
  64.     end
  65.   end
  66.   #=============================================================================
  67.   # ■ BaseItem
  68.   #=============================================================================
  69.   class BaseItem
  70.     #-------------------------------------------------------------------------
  71.     # ○ 读取rmvx备注栏指定字段
  72.     #     section  : 字段名
  73.     #     mismatch : 未匹配时的返回值
  74.     #-------------------------------------------------------------------------
  75.     def read_note(section, mismatch = nil)
  76.       ReadNote.read(self.note, section, mismatch)
  77.     end
  78.   end
  79.   #=============================================================================
  80.   # ■ Enemy
  81.   #=============================================================================
  82.   class Enemy
  83.     def read_note(section, mismatch = nil)
  84.       ReadNote.read(self.note, section, mismatch)
  85.     end
  86.   end
  87.   #=============================================================================
  88.   # ■ State
  89.   #=============================================================================
  90.   class State
  91.     def read_note(section, mismatch = nil)
  92.       ReadNote.read(self.note, section, mismatch)
  93.     end
  94.   end
  95. end
复制代码

使用备注栏的话我喜欢用以上脚本,再插入以下脚本
  1. class RPG::Skill < RPG::UsableItem
  2.   def item_cost
  3.     cost = self.read_note("item_cost") == nil ? [1,0] : self.read_note("item_cost")
  4.     return cost
  5.   end
  6. end

  7. class Game_Battler
  8.   alias sp_skill_can_use? skill_can_use?
  9.   def skill_can_use?(skill)
  10.     cost_item = skill.item_cost[0]
  11.     cost_num = skill.item_cost[1]
  12.     if skill.read_note("item_cost") != nil
  13.       if $game_party.item_number($data_items[cost_item]) >= cost_num
  14.         return true
  15.       else
  16.         return false
  17.       end
  18.     end
  19.     return true
  20.   end
  21. end

  22. class Scene_Battle < Scene_Base
  23.   alias sp_execute_action_skill execute_action_skill
  24.   def execute_action_skill
  25.     sp_execute_action_skill
  26.     skill = @active_battler.action.skill
  27.     $game_party.lose_item($data_items[skill.item_cost[0]],skill.item_cost[1]) unless skill.read_note("item_cost") == nil
  28.   end
  29. end
复制代码

使用方法:
在技能备注栏里写入:item_cost = [1,2],意思是消耗1号物品2个,不消耗物品不用写。
如有BUG再反馈。
作者: 白魔导师宝儿    时间: 2018-2-22 08:41
楼上脚本能用,但我想解决主楼脚本的问题啦
作者: 芯☆淡茹水    时间: 2018-2-22 09:03
这样?

  1. class Scene_Battle < Scene_Base
  2.   alias sp_execute_action_skill execute_action_skill
  3.   def execute_action_skill
  4.     sp_execute_action_skill
  5.     skill = @active_battler.action.skill
  6.     item = $data_items[skill.item_cost]
  7.     item && $game_party.lose_item(item, 1)
  8.   end
  9. end
复制代码





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