Project1

标题: 【强势更新】技能消耗物品(SkillNeedItem) [打印本页]

作者: DeathKing    时间: 2010-7-16 17:14
标题: 【强势更新】技能消耗物品(SkillNeedItem)
本帖最后由 DeathKing 于 2011-1-8 16:30 编辑


查看协议全文:猛击我
新起草的版本

通用FSL信息
 
 
脚本说明
  特别注意,升级了ADK,现在已经没有和沉影大哥的脚本的兼容性问题了。(而ADK的读取注释的方法名换成了read_notes这样,沉影大哥的脚本中的read_note就可以正常使用了)

  设定一些值,当拥有制定物品的制定个数及以上时才可发动特技。发动特技会消耗掉这些物品。这个脚本的下一个版本具有类似“乾坤一掷”的特性,允许技能发动消耗金钱。

    在技能的“注释”中如下书写(请确保使用的是西文半角而不是全角):
        <need_item 物品id,对应数量 物品id,对应数量 …… >
   <need_item 1,1 2,2 3,3>


    更新后的版本解决了诸多的问题,并且使用了实例变量来存储一些必要的信息,而不是每次需要用的时候才来处理生成,提升了脚本的运行效率。

脚本截图


 
更新历史
谢谢大家的帮助,所以我们才能快速的找出这些BUG。

    - 1.6.0108 By DeathKing
      * 修正了有的角色无法释放技能的BUG;
      * 修正了窗体的Z坐标,使他始终置于最上;
      * 添加了RPG::UsabeItem::Skill#item_reqire方法,使得可以快速
        获取道具的要求列表,这样脚本运行更为快速;

    - 1.5.0726 By DeathKing
      * 修正了按下PageDown和PageUp后无法切换角色的小BUG;

    - 1.4.0725 By 六祈
      * 修正了Game_Actor.skill_can_use?方法的错误;
      * 修正了Window_SNItem.skill_can_use?方法的错误;
      * 添加了对技能是否可使用的重新判定;

    - 1.3.0719 By DeathKing
      * ADK的升级,可兼容沉影不器的读取装备注释脚本;

    - 1.2.0714 By DeathKing
      * 修改了消耗物品的算法;

    - 1.1.0607 By DeathKing
      * 改变了设置方法;

    - 1.0.0529 By DeathKing
      * 初始版本完成;

项目附件及开发者白皮书

项目工程(1.6.0108 最新版): [1.6.0108]SkillNeadItem.rar (238.16 KB, 下载次数: 1234)
历史工程(1.5.0726不推荐): [1.5.0726]SkillNeedItem.rar (236.86 KB, 下载次数: 311)

 
 
脚本源码
* ADK为必要的脚本,请将其放在Main脚本和SkillNeedItem脚本之前;
* SkillNeedItem脚本应该在Main脚本之前;
* 1.6版本开始检查依赖性,当没有检测到1.2版本以上的ADK时,系统将会报错;

  1. #===============================================================================
  2. # ■ [VX] 增强开发包
  3. #    [VX] Advanced Delevop Kit -- ADK
  4. #-------------------------------------------------------------------------------
  5. #    FSL ADK是FSL脚本可用的加强型开发包。他提供了一些列有效的方法。
  6. #   
  7. #-------------------------------------------------------------------------------
  8. #    更新作者: DeathKing
  9. #    许可协议: FSL
  10. #    衍生关系:  ADK < ReadNote
  11. #    项目版本: 1.3.0108
  12. #    最后更新: 2011-01-08
  13. #    引用网址:
  14. #-------------------------------------------------------------------------------
  15. #    - 1.3.0108 By 沉影不器
  16. #      * 添加read_note方法,此方法区别与read_notes方法;
  17. #
  18. #    - 1.2.0719 By DeathKing
  19. #      * 将read_note方法修改为read_notes,方便与沉影不器的脚本兼容;
  20. #
  21. #    - 1.1.0607 By DeathKing
  22. #      * 添加兼容性检查方法;
  23. #
  24. #    - 1.0.0529 By DeathKing
  25. #      * 初始版本完成;
  26. #===============================================================================

  27. #-------------------------------------------------------------------------------
  28. # ▼ 登记FSL
  29. #-------------------------------------------------------------------------------

  30. $fscript = {} if $fscript == nil
  31. $fscript["ADK"] = "1.3.0108"


  32. #-------------------------------------------------------------------------------
  33. # ▼ 通用配置模块
  34. #-------------------------------------------------------------------------------
  35. module FSL
  36.   module ADK
  37.   end
  38. end

  39. #-------------------------------------------------------------------------------
  40. # ▼ FSL模块功能
  41. #-------------------------------------------------------------------------------
  42. module FSL
  43.   #--------------------------------------------------------------------------
  44.   # ● 是否存在指定脚本
  45.   #     script  : 脚本在$fscript中的登记名
  46.   #--------------------------------------------------------------------------
  47.         def self.script_in?( script )
  48.                 return true if $fscript[ script.to_s ] != nil
  49.                 return false
  50.         end
  51. end

  52. #-------------------------------------------------------------------------------
  53. #
  54. # ▼ 读取注释内容
  55. #
  56. #    使用read_notes方法返回了一个键值对应的哈希,read_notes会删除掉作为标记的
  57. #    <和>符号(非破坏性方法)。默认以用空格分隔的几个数据中的第一个为键,余
  58. #    下为值。值为一个数组对象。
  59. #
  60. #    注释内容               读取到的哈希的键值对应情况
  61. #    <need_item 1 1>  -->  { "need_item" => [ "1" , "1" ] }
  62. #    <need_item 1,1>  -->  { "need_item" => [ "1,1" ] }
  63. #    <need_item>      -->  { "need_item" => [] }
  64. #     need_item       -->  { "need_item" => [] }
  65. #
  66. #    不使用尖括号是允许的,但我们不喜欢这样。分隔多个参数请使用空格。
  67. #
  68. #    read_notes是返回哈希对象,因此“键”应该对大小写敏感。
  69. #
  70. #    使用方法:
  71. #        obj.read_notes
  72. #        obj是RPG::State、RPG::BaseItem、RPG::Enemy及其子类的有效对象
  73. #
  74. #
  75. #-------------------------------------------------------------------------------
  76. module RPG
  77.   class State
  78.     def read_notes
  79.       result = {}
  80.       self.note.split(/[\r\n]+/).each do |line|
  81.         result[line.delete("<>").split[0]] = line.delete("<>").split[1..-1]
  82.       end
  83.       return result
  84.     end
  85.   end
  86.   class BaseItem
  87.     def read_notes
  88.       result = {}
  89.       self.note.split(/[\r\n]+/).each do |line|
  90.         result[line.delete("<>").split[0]] = line.delete("<>").split[1..-1]
  91.       end
  92.       return result
  93.     end
  94.   end
  95.   class Enemy
  96.     def read_notes
  97.       result = {}
  98.       self.note.split(/[\r\n]+/).each do |line|
  99.         result[line.delete("<>").split[0]] = line.delete("<>").split[1..-1]
  100.       end
  101.       return result
  102.     end
  103.   end
  104. end

  105. #-------------------------------------------------------------------------------
  106. #
  107. # ▼ 读取注释栏指定字段
  108. #
  109. #    采用沉影不器的 ReadNote -fscript 2.02.1001 脚本,请与read_notes区别
  110. #
  111. #    【例】在vx数据库比如1号物品的备注栏里写: 耐久度 = 10
  112. #          读取时使用: p $data_items[1].read_note('耐久度')
  113. #
  114. #     几点注意:
  115. #         ① 支持汉字,英文忽略大小写
  116. #         ② 等号右边遵循ruby语法格式,例如:
  117. #              test1 = 1              #=> 1
  118. #              test2 = "a"            #=> "a"
  119. #              test3 = true           #=> true
  120. #              test4 = [1,2,3]        #=> [1,2,3]
  121. #              test5 = {"orz"=>1}     #=> {"orz"=>1}
  122. #         ③ 等号忽略空格,以下均正确:
  123. #              test = nil; test= nil; test =nil; test=nil
  124. #----------------------------------------------------------------------------
  125. module RPG
  126.   module ReadNote
  127.     def self.read(str, section, mismatch = nil)
  128.       str.each_line do |line|
  129.         ## 不希望忽略大小写,则删掉下一行最后一个i
  130.         eval("#{line}; return #{section}") if line =~ /^\s*#{section}\s*=/i
  131.       end
  132.       return mismatch
  133.     end
  134.   end
  135.   #-------------------------------------------------------------------------
  136.   # ○ 读取rmvx备注栏指定字段
  137.   #     section  : 字段名
  138.   #     mismatch : 未匹配时的返回值
  139.   #-------------------------------------------------------------------------
  140.   class BaseItem
  141.     def read_note(section, mismatch = nil)
  142.       ReadNote.read(self.note, section, mismatch)
  143.     end
  144.   end
  145.   class Enemy
  146.     def read_note(section, mismatch = nil)
  147.       ReadNote.read(self.note, section, mismatch)
  148.     end
  149.   end
  150.   class State
  151.     def read_note(section, mismatch = nil)
  152.       ReadNote.read(self.note, section, mismatch)
  153.     end
  154.   end
  155. end
复制代码
  1. #=============================================================================
  2. # ■ [VX] 技能消耗物品
  3. #    [VX] Skill Need Item
  4. #-----------------------------------------------------------------------------
  5. #    设定一些值,当拥有制定物品的制定个数及以上时才可发动特技。发动特技会
  6. #    消耗掉这些物品。
  7. #
  8. #    在技能的“注释”中如下书写(请确保使用的是西文半角而不是全角):
  9. #        <need_item 物品id,对应数量 物品id,对应数量 …… >
  10. #        <need_item 1,1 2,2 3,3>
  11. #   
  12. #-----------------------------------------------------------------------------
  13. #    更新作者: DeathKing 六祈
  14. #    许可协议: FSL -NOS ADK
  15. #    项目版本: 1.6.0108
  16. #    最后更新: 2011-01-08
  17. #    引用网址:
  18. #-----------------------------------------------------------------------------
  19. #    - 1.6.0108 By DeathKing
  20. #      * 修正了有的角色无法释放技能的BUG;
  21. #      * 修正了窗体的Z坐标,使他始终置于最上;
  22. #      * 添加了RPG::UsabeItem::Skill#item_reqire方法,使得可以快速
  23. #        获取道具的要求列表,这样脚本运行更为快速;
  24. #
  25. #    - 1.5.0726 By DeathKing
  26. #      * 修正了按下PageDown和PageUp后无法切换角色的小BUG;
  27. #
  28. #    - 1.4.0725 By 六祈
  29. #      * 修正了Game_Actor.skill_can_use?方法的错误;
  30. #      * 修正了Window_SNItem.skill_can_use?方法的错误;
  31. #      * 添加了对技能是否可使用的重新判定;
  32. #
  33. #    - 1.3.0719 By DeathKing
  34. #      * ADK的升级,可兼容沉影不器的读取装备注释脚本;
  35. #
  36. #    - 1.2.0714 By DeathKing
  37. #      * 修改了消耗物品的算法;
  38. #
  39. #    - 1.1.0607 By DeathKing
  40. #      * 改变了设置方法;
  41. #
  42. #    - 1.0.0529 By DeathKing
  43. #      * 初始版本完成;
  44. #
  45. #=============================================================================

  46. #-----------------------------------------------------------------------------
  47. # ▼ 登记FSL
  48. #-----------------------------------------------------------------------------
  49. $fscript = {} if $fscript == nil
  50. $fscript["SkillNeedItem"] = "1.6.0108"

  51. #-----------------------------------------------------------------------------
  52. # ▼ 检查依赖
  53. #-----------------------------------------------------------------------------
  54. if $fscript["ADK"].to_s <= "1.2"
  55.   miss = "增强开发包(ADK)"
  56.   version = "1.2"
  57.   print "缺少#{miss},请下载或放在本脚本之前,并确保其版本不低于#{version}。"
  58. end
  59.   
  60. #-----------------------------------------------------------------------------
  61. # ▼ 通用配置模块
  62. #-----------------------------------------------------------------------------
  63. module FSL
  64.   module SNItem
  65.       
  66.     # 改进后的技能消耗物品可以对物品是否足够做出判断了,不过我我们依然
  67.     # 不能让他很清楚的现实在物品提示中
  68.       
  69.     # (用于提示所需物品数量的)窗口的相关配置,一般不修改
  70.     WINDOW_X     = 272  # X  544 / 2
  71.     WINDOW_Y     = 112  # Y  56  * 2
  72.     WINDOW_W     = 274  # 宽
  73.     WINDOW_H     = 640  # 高
  74.     BACK_OPACITY = 200  # 透明度,255为不透明
  75.       
  76.       
  77.     TEXT_NEED       = "需要:"        # “需要:”一词的字符
  78.     TEXT_NEED_X     = WINDOW_X - 104  # “需要:”字符的 X 坐标
  79.     TEXT_ITEM_NUM_X = WINDOW_X - 52   # 物品数量的 X 坐标
  80.       
  81.   end
  82. end

  83. #==============================================================================
  84. # ■ RPG::UsabeItem::Skill
  85. #------------------------------------------------------------------------------
  86. #   管理技能的类。
  87. #==============================================================================
  88. module RPG
  89.   class Skill < UsableItem
  90.     def item_require
  91.       # 如果已定义@item_require就直接结束
  92.       return @item_require if (defined? @item_require)
  93.       # 获得操作数
  94.       items = self.read_notes["need_item"]
  95.       # 产生一个哈希
  96.       @item_require = {}
  97.       # 如果获得的操作数为空
  98.       return @item_require if items == nil
  99.       # 生成物品的需求列表
  100.       items.each do |e|
  101.         t = e.split(",")
  102.         @item_require[t[0].to_i] = t[1].to_i
  103.       end
  104.       # 返回物品的需求列表
  105.       return @item_require
  106.     end   
  107.   end
  108. end

  109. #==============================================================================
  110. # ■ Window_SNItem
  111. #------------------------------------------------------------------------------
  112. #   需要的物品的窗口。
  113. #==============================================================================

  114. class Window_SNItem < Window_Base
  115.   
  116.   include FSL::SNItem
  117.   
  118.   #--------------------------------------------------------------------------
  119.   # ● 初始化对像
  120.   #     x      : 窗口 X 座标
  121.   #     y      : 窗口 Y 座标
  122.   #     width  : 窗口宽度
  123.   #     height : 窗口高度
  124.   #--------------------------------------------------------------------------
  125.   def initialize(x=WINDOW_X, y=WINDOW_Y, width=WINDOW_W, height=WINDOW_H)
  126.     super(x, y, width, height)
  127.     self.back_opacity = BACK_OPACITY
  128.     self.visible = false
  129.     self.z = 9999
  130.   end  
  131.   #--------------------------------------------------------------------------
  132.   # ● 判定技能可否使用(需要的物品是否满足)
  133.   #     skill  : 技能
  134.   #
  135.   #    在Game_Actor#skill_can_use?方法中调用时可传递self.index给第二个参数
  136.   #--------------------------------------------------------------------------
  137.   def self.skill_can_use?(skill,actor_id)
  138.     # 如果传递过来的skill为空
  139.     return false if skill == nil
  140.     # 读取need_item项的参数
  141.     item_need = skill.item_require
  142.     # need_item参数为空的话返回true
  143.     return true if item_need.empty?
  144.     # 产生一个队伍物品的哈希克隆(item_id => number)
  145.     party_items = {}
  146.     $game_party.items.each do |it|
  147.       party_items[it.id] = $game_party.item_number(it)
  148.     end
  149.     # 如果是第一个行动的角色或者不在战斗中则跳过
  150.     unless actor_id == 0 or $game_temp.in_battle == false
  151.       # 计算到前一个角色技能消耗为止的剩余物品数量哈希
  152.       0.upto( actor_id - 1 ) do |ai|
  153.         action = $game_party.members[ai].action
  154.         next if action.kind != 1
  155.         temp_cost = $data_skills[action.skill_id].item_require
  156.         next if temp_cost.empty?
  157.         temp_cost.each do |key, value|
  158.           party_items[key] -= value
  159.         end
  160.       end
  161.     end
  162.     # 判定剩余物品是否足够使用技能
  163.     item_need.each do |key, value|
  164.       return false unless party_items.has_key?(key)
  165.       return false if (party_items[key] < value)
  166.     end
  167.     return true
  168.    end
  169.   #--------------------------------------------------------------------------
  170.   # ● 刷新窗口
  171.   #     skill  : 技能
  172.   #     index  : 技能在技能窗口的索引,用来判定本
  173.   #              窗口应该显示在左边还是右边
  174.   #--------------------------------------------------------------------------
  175.   def refresh( skill, index = 0)
  176.     # 清除之前产生的位图
  177.     self.contents.clear
  178.     # 如果skill为空就返回false
  179.     return false if skill == nil
  180.     # 先让需要窗口不可见
  181.     self.visible = false
  182.     # 读取参数
  183.     need_item = skill.item_require
  184.     # 如果参数为空,就将其隐藏并返回false
  185.     return false if need_item.empty?
  186.     # 判定索引以决定窗口位置
  187.     self.x = index % 2 == 0 ? WINDOW_X : 0
  188.     # 改变窗口大小
  189.     self.height = need_item.size * 24 + 32
  190.     # 将窗口置为可见
  191.     self.visible = true
  192.     create_contents
  193.     # 遍历用参数
  194.     i = 0
  195.     # 遍历参数列表
  196.     need_item.each do |key, value|
  197.       # 生成物品
  198.       item = $data_items[key]
  199.       # 判定物品是否足够
  200.       enabled = $game_party.item_number(item) >= value ? true : false
  201.       # 绘制文字
  202.       draw_item_name(item, 0, WLH * i, enabled)
  203.       self.contents.font.color.alpha = enabled ? 255 : 128
  204.       self.contents.draw_text(TEXT_NEED_X, WLH * i, 96, WLH, TEXT_NEED)
  205.       self.contents.draw_text(TEXT_ITEM_NUM_X,  WLH * i, 32, WLH, value)
  206.       i += 1
  207.     end # need_item.each
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 执行对物品消耗
  211.   #     skill  : 技能
  212.   #--------------------------------------------------------------------------
  213.   def self.exec_cost( skill )
  214.     # 传递错误就直接返回false
  215.     return false if skill == nil
  216.     # 读取need_item项的参数
  217.     need_item = skill.item_require#read_notes["need_item"]
  218.     # 如果参数为空就直接返回
  219.     return true if need_item.empty?
  220.     need_item.each do |key, value|
  221.       $game_party.gain_item($data_items[key], -value)
  222.     end
  223.   end
  224.   
  225. end # Window_SNItem

  226. #==============================================================================
  227. # ■ Game_Actor
  228. #------------------------------------------------------------------------------
  229. #   处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
  230. # Game_Party 类请参考 ($game_party) 。
  231. #==============================================================================

  232. class Game_Actor
  233.   
  234.   alias snitem_skill_can_use? skill_can_use?
  235.   
  236.   #--------------------------------------------------------------------------
  237.   # ● 可用技能判断
  238.   #     skill : 技能
  239.   #--------------------------------------------------------------------------
  240.   def skill_can_use?(skill)
  241.     return false unless Window_SNItem.skill_can_use?(skill, self.index)
  242.     snitem_skill_can_use?(skill)
  243.   end
  244. end

  245. #==============================================================================
  246. # ■ Scene_Skill
  247. #------------------------------------------------------------------------------
  248. #   处理特技画面的类。
  249. #==============================================================================

  250. class Scene_Skill < Scene_Base

  251.   alias snitem_initialize          initialize
  252.   alias snitem_terminate           terminate
  253.   alias snitem_update              update
  254.   alias snitem_use_skill_nontarget use_skill_nontarget

  255.   #--------------------------------------------------------------------------
  256.   # ● 初始化对像
  257.   #     actor_index : 角色位置
  258.   #--------------------------------------------------------------------------
  259.   def initialize( actor_index = 0, equip_index = 0 )
  260.     snitem_initialize( actor_index, equip_index )
  261.     @snitem_window = Window_SNItem.new
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 结束处理
  265.   #--------------------------------------------------------------------------
  266.   def terminate
  267.     snitem_terminate
  268.     @snitem_window.dispose
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 更新画面
  272.   #--------------------------------------------------------------------------
  273.   def update
  274.     snitem_update
  275.     @snitem_window.refresh( @skill_window.skill, @skill_window.index )
  276.   end
  277.   
  278.   #--------------------------------------------------------------------------
  279.   # ● 非同伴目标使用物品
  280.   #--------------------------------------------------------------------------
  281.   def use_skill_nontarget
  282.     # 执行对物品的消耗
  283.     Window_SNItem.exec_cost(@skill)
  284.     # 调用原方法
  285.     snitem_use_skill_nontarget
  286.   end
  287.   
  288. end # Scene_Skill

  289. #==============================================================================
  290. # ■ Scene_Battle
  291. #------------------------------------------------------------------------------
  292. #   处理战斗画面的类。
  293. #=============================================================================

  294. class Scene_Battle < Scene_Base
  295.   
  296.   include FSL::SNItem
  297.   
  298.   alias snitem_update_skill_selection update_skill_selection
  299.   alias snitem_start_skill_selection  start_skill_selection
  300.   alias snitem_end_skill_selection    end_skill_selection
  301.   alias snitem_execute_action_skill   execute_action_skill
  302.   
  303.   #--------------------------------------------------------------------------
  304.   # ● 开始技能选择
  305.   #--------------------------------------------------------------------------
  306.   def start_skill_selection
  307.     snitem_start_skill_selection
  308.     # 创建需要道具窗口,并把y坐标上移
  309.     @snitem_window = Window_SNItem.new(272,56)
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 结束技能选择
  313.   #--------------------------------------------------------------------------
  314.   def end_skill_selection
  315.     if @skill_window != nil
  316.       @snitem_window.dispose
  317.       @snitem_window = nil
  318.     end
  319.     snitem_end_skill_selection
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 更新技能选择
  323.   #--------------------------------------------------------------------------
  324.   def update_skill_selection
  325.     # 刷新技能
  326.     @snitem_window.refresh( @skill_window.skill, @skill_window.index )
  327.     # 调用原方法内容
  328.     snitem_update_skill_selection
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 执行战斗行动:使用技能
  332.   #--------------------------------------------------------------------------
  333.   def execute_action_skill
  334.     # 执行原内容
  335.     snitem_execute_action_skill
  336.     # 生成skill
  337.     skill = @active_battler.action.skill
  338.     Window_SNItem.exec_cost( skill )
  339.   end
  340.   
  341. end # Scene_Battle

复制代码
已知BUG与冲突
* BUG报告3枚,已解决。
* 冲突报告1枚,已解决




作者: GM.01    时间: 2010-7-16 20:32
还不错 好像和物品合成有冲突
作者: DeathKing    时间: 2010-7-17 10:53
还不错 好像和物品合成有冲突
GM.01 发表于 2010-7-16 20:32


传送门,我看看。

作者: 仲秋启明    时间: 2010-7-17 14:26
支持一下
作者: 孤独的枪手    时间: 2010-7-19 11:18
和显示敌人血条脚本有冲突,好像是怪物用技能就会有冲突。


作者: DeathKing    时间: 2010-7-19 11:35
本帖最后由 DeathKing 于 2010-7-19 11:57 编辑
和显示敌人血条脚本有冲突,好像是怪物用技能就会有冲突。
孤独的枪手 发表于 2010-7-19 11:18



冲突可能是ADK(增强开发包),我直接用的沉影大哥的方法读取的备注那里的字段。
传送显示敌人血条脚本,我把它修改成利用ADK读备注字段。

[line]1[/line]

可喜的是,通过吧read_note方法更名为read_notes,这个问题被很好的解决了。
作者: 孤独的枪手    时间: 2010-7-19 13:17
测试了一下,现在没有问题。
作者: 木葬枫    时间: 2010-7-19 13:20
枪手居然在这里出现了- -
作者: 负零    时间: 2010-7-19 21:52
好东西,能引爆游戏多元化的脚本就是这个了...
祈祷不要和我的一堆脚本冲突...
作者: tsy0302    时间: 2010-7-21 06:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: tsy0302    时间: 2010-7-21 09:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-7-21 09:40
恩,我之前不想做的太复杂,第一是害怕大家用起来觉得复杂,而是觉得代码多了维护起来也麻烦。既然有需要,那么就加强吧,遵循FSL协议的脚本允许大家一起来优化、加强脚本,另外,你提供的源码是空的。
作者: tsy0302    时间: 2010-7-22 06:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-7-22 10:54
本帖最后由 DeathKing 于 2010-7-22 10:56 编辑
我把我发过的脚本删改了下,目前可以实现消耗指定物品/需要指定物品但不消耗/消耗生命(或者%)/金钱,理论上 ...
tsy0302 发表于 2010-7-22 06:15



yangfly的战斗引擎是神物,不只是这个脚本。我完全没有在这个脚本上mod的必要。Yangfly的战斗引擎是即使的,因此对条件的判断也是即使的,所以不会“浪费技能”。
作者: tsy0302    时间: 2010-7-22 22:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-7-23 08:33
回复 tsy0302 的帖子


    http://wiki.pockethouse.com/index.php?title=Main_Page

收录了Yangfly的所有脚本。下面是一个成套的系统。

http://www.pockethouse.com/mambo/Melody_1.00l.zip
作者: tsy0302    时间: 2010-7-24 02:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: 九夜神尊    时间: 2010-7-25 01:00
为LZ提供一个简单的方法吧,虽说我的脚本能力可能不及LZ
但是我的怪方法倒是挺多。

以下是教程

如果是不懂的人,会第一个想到,在公共事件里面设置使用技能以后消耗某某不就可以了么?
当然,你会回答什么我们都清楚。首先就是不能判断物品是否充足。
以及就是你那貌似人性化的界面。

当然,你们后面的谈论,貌似要解决扩充很多很多条件的技能发动
那我就给你们提供一个建议吧
看图片


就这一个简单的方法实现了全域判断技能可否使用,而且使用者也会倍感容易学,冲突自然很少

但是你会想,大概这样就没有你那貌似人性化的界面了,在使用之前就能看到需要哪些物品

那,你在添加一点点脚本


这样就能轻松在脚本里面获得需要的物品,当然你也可以利用获得的这些变量直接在脚本里面判断以减轻
作者的工作量,但是任何条件判断都能使用的优点就……

怎么样解决你说的不是即使战斗导致物品技能提示上的问题,我提供一个协议
你可以参考一下

假设,超级治疗需要回复药6个,简单治疗需要回复药3个
那么LZ担心的是,在战斗中,如果有回复药6个,那就可以选择两个技能了,
如果这两个技能在两个角色上,那么战斗中肯定会出现不理想的事情,没有9个回复药
但是一样两个技能都发动了。或者像LZ那样,直接后面发动的技能就失效

我给的方法是这样的
第一个超级治疗,需要回复药6个,那么选择了超级治疗,就应该在中转站记录了已经
提交了6个回复药的申请,下一个技能如果在需要回复药,就应该在实际物品中
减去这6个回复药,然后在判断。
这样应该比LZ 原来的解决方案要人性化一些呢?

就这些,蛋疼之作
作者: DeathKing    时间: 2010-7-25 02:27
回复 九夜神尊 的帖子

事件是完全可能达到的,但是最后能做到的效果全然不在脚本之上。其实这个方法我已经想过了,但是由于非即使的战斗系统那个ESC键很蛋疼,很抽风,没有办法。

当然,也可以Step by Step跟踪按键来统计消耗。

其实仔细想想,用公共事件反而会变得麻烦,由于占用了技能本来还要使用的一个公共事件槽,还要判定技能从而继续执行一个公共事件。同时,只需要极少技能发动消耗物品时完全可以考虑用公共事件,但是,这个数量到达一定程度的时候,整个页面将变得难以阅读和维护,况且全局变量是丑陋的,很难定位,如果真为了“界面”而传递一个值,不如直接交由这个“界面”来完成。

楼上可能有所不知,如果你传递了一个值,而窗口并没有刷新,那么窗口的内容是不会改变的。因此,窗口会先预读你的公共事件(为了获取需要的值),这时候你的公共事件就已经消耗了物品。

所谓的“人性化”是因人而异的,不存在使每个人都感到高兴的方法,能集思广益,当然也是很好的。
作者: 六祈    时间: 2010-7-25 03:21
本帖最后由 六祈 于 2010-7-25 05:40 编辑

回复 DeathKing 的帖子
死君有没有考虑过通过读取已经设定过的Battler_Action来获得已经需要的物品?

通过修改你脚本中Window_SNItem的类方法实现了一下
  1.   def self.skill_can_use?(skill,actor_id)
  2.     # 如果传递过来的skill为空
  3.     return false if skill == nil
  4.     # 读取need_item项的参数
  5.     need_item = skill.read_notes["need_item"]
  6.     # need_item参数为空的话返回true
  7.     return true if need_item == nil
  8.     # 重新生成参数列表
  9.     need_item_clone = []
  10.     need_item.each do |e|
  11.       need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  12.     end
  13.     need_item = need_item_clone
  14.     # 遍历
  15.     party_items = Hash.new{0}
  16.     $game_party.items.each do |it|
  17.       party_items[it.id] = $game_party.item_number(it)
  18.     end
  19.     unless actor_id == 0
  20.       0.upto(actor_id-1) do |ai|
  21.         action = $game_party.members[ai].action
  22.         next if action.kind != 1
  23.         temp_cost = $data_skills[action.skill_id].read_notes["need_item"]
  24.         next if temp_cost == nil
  25.         temp_cost = temp_cost.collect{|e|[e.split(",")[0].to_i,e.split(",")[1].to_i]}
  26.         temp_cost.each do |e|
  27.           party_items[e[0]] -= e[1]
  28.         end
  29.       end
  30.     end
  31.    
  32.    
  33.     need_item.each do |e|
  34.       return false if (party_items[e[0]] < e[1])
  35.     end
  36.     return true
  37.         end
复制代码
改变了参数的数量,所以在Game_Actor#skill_can_use?中调用这个类方法时传递self.index过去
  1. class Game_Actor
  2.   #--------------------------------------------------------------------------
  3.   # ● 可用技能判断
  4.   #     skill : 技能
  5.   #--------------------------------------------------------------------------
  6.   def skill_can_use?(skill)
  7.     return false unless Window_SNItem.skill_can_use?(skill,self.index)
  8.     return false unless skill_learn?(skill)
  9.     return true
  10.   end
  11. end
复制代码
然后就可以实现如果只有两个物品的话,一号角色和二号角色都使用连续进攻则三号角色不能使用,esc回去改变二号的行动,三号或者四号又可以使用

这只是个基础,还有很多细节需要完善

顺便提一下这个脚本中的bug,原版只要满足第一个物品的条件就返回true了(因为你在循环中就果断的return了一个可真可假的结果- -)

第二个bug:skill_can_use?被你重写之后,不考虑使用场合了。。。连续进攻在菜单里也能使用
作者: 九夜神尊    时间: 2010-7-25 08:24
LZ要 看仔细了,谁说非要占用公共事件槽?
这个公共事件是在判断技能可否使用的时候调用的公共事件,完全是插入到脚本里面。

我想你还真以为我的就是用公共事件实现的,也许是我的表述能力太差
不过还是再请你看一遍我说的,这完全是脚本语句。

在判断技能可否使用,也就是显示这个技能名字的颜色的时候
就要执行一次这个公共事件,这个公共事件在递交了可否使用的同时,也递交了需要的物品
这个公共事件根本不需要放到技能公共事件槽,你要看仔细了,
这只不过是把你本来需要在技能名字后面加逗号以完成技能名字以及消耗物品的方法
搬到了事件上面,这样直观易懂。
如果需要占用公共事件槽,那么我还判断技能ID做什么。
还是那句话,仔细看,别把我当新手看,说实话,我学RM4年有了,重做一个整的系统没问题。
作者: DeathKing    时间: 2010-7-25 10:34
回复 六祈 的帖子

{:nm_4:} 很好,FSL协议正是需要大家一起来找BUG,然后去修正他,这样的快速开发模式。下面我已经将你提出来的BUG修补好了,请你在上面把判定的部分更新上,并写上更新内容:

Game_Actor#skill_can_use?方法的问题是纯粹忘记了要用alias,{:nm_2:}
  1. #===============================================================================
  2. # ■ FSL 技能消耗物品
  3. #    FSL Skill Need Item
  4. #-------------------------------------------------------------------------------
  5. #    设定一些值,当拥有制定物品的制定个数及以上时才可发动特技。发动特技会
  6. #    消耗掉这些物品。
  7. #
  8. #    在技能的“注释”中如下书写(请确保使用的是西文半角而不是全角):
  9. #        <need_item 物品id,对应数量 物品id,对应数量 …… >
  10. #        <need_item 1,1 2,2 3,3>
  11. #   
  12. #-------------------------------------------------------------------------------
  13. #    更新作者: DeathKing 六祈
  14. #    许可协议: FSL -NOS ADK
  15. #    项目分类: VX \ 数据工程
  16. #    衍生关系:
  17. #    项目版本: 1.4.0725
  18. #    建立日期: 2010年05月29日
  19. #    最后更新: 2010年07月25日
  20. #    引用网址:
  21. #-------------------------------------------------------------------------------
  22. #    - 1.1.0725 (2010.07.25)  By 六祈
  23. #      * 修正了Game_Actor#skill_can_use?方法的错误;
  24. #      * 修正了Window_SNItem.skill_can_use?方法的错误;
  25. #
  26. #    - 1.1.0719 (2010.07.19)  By DeathKing
  27. #      * ADK的升级,可兼容沉影不器的读取装备注释脚本;
  28. #
  29. #    - 1.1.0714 (2010.07.14)  By DeathKing
  30. #      * 修改了消耗物品的算法;
  31. #
  32. #    - 1.1.0607 (2010.06.07)  By DeathKing
  33. #      * 改变了设置方法;
  34. #
  35. #    - 1.0.0529 (2010.05.29)  By DeathKing
  36. #      * 初始版本完成;
  37. #
  38. #===============================================================================


  39. #-------------------------------------------------------------------------------
  40. # ▼ 登记FSL
  41. #-------------------------------------------------------------------------------
  42. $fscript = {} if $fscript == nil
  43. $fscript["SkillNeedItem"] = "1.4.0725"


  44. #-------------------------------------------------------------------------------
  45. # ▼ 通用配置模块
  46. #-------------------------------------------------------------------------------
  47. module FSL
  48.   module Conf
  49.     module SNItem
  50.       
  51.       # 技能消耗物品存在着一些不是十分完美的地方,由于战斗系统并不是即时的,
  52.       # 我们不能随时对物品进行检查,事实上,我们尝试过很多方法,最后都没有成
  53.       # 功。因此我们放弃了对玩家的提示,这个脚本只有在技能实际上被使用时才会
  54.       # 扣除物品,因此如果技能发动时,条件不满足,技能将会丢失。
  55.       #                               ~~~~~~~~~~~~~~~~~~~~~~~~~
  56.       
  57.       # 窗口的相关配置,一般不修改
  58.       WINDOW_X     = 272  # X  544 / 2
  59.       WINDOW_Y     = 112  # Y  56  * 2
  60.       WINDOW_W     = 274  # 宽
  61.       WINDOW_H     = 640  # 高
  62.       BACK_OPACITY = 200  # 透明度,255为不透明
  63.       
  64.       
  65.       TEXT_NEED       = "需要:"        # “需要:”一词的字符
  66.       TEXT_NEED_X     = WINDOW_X - 104  # “需要:”字符的 X 坐标
  67.       TEXT_ITEM_NUM_X = WINDOW_X - 52   # 物品数量的 X 坐标
  68.       
  69.     end
  70.   end
  71. end


  72. #==============================================================================
  73. # ■ Window_SNItem
  74. #------------------------------------------------------------------------------
  75. #  需要的物品的窗口。
  76. #==============================================================================

  77. class Window_SNItem < Window_Base
  78.   
  79.   include FSL::Conf::SNItem
  80.   
  81.   #--------------------------------------------------------------------------
  82.   # ● 初始化对像
  83.   #     x      : 窗口 X 座标
  84.   #     y      : 窗口 Y 座标
  85.   #     width  : 窗口宽度
  86.   #     height : 窗口高度
  87.   #--------------------------------------------------------------------------
  88.   def initialize(x=WINDOW_X, y=WINDOW_Y, width=WINDOW_W, height=WINDOW_H)
  89.     super(x, y, width, height)
  90.     self.back_opacity = BACK_OPACITY
  91.     self.visible = false
  92.   end  
  93.   #--------------------------------------------------------------------------
  94.   # ● 判定技能可否使用(需要的物品是否满足)
  95.   #     skill  : 技能
  96.   #--------------------------------------------------------------------------
  97.   def self.skill_can_use?(skill)
  98.     # 如果传递过来的skill为空
  99.     return false if skill == nil
  100.     # 读取need_item项的参数
  101.     need_item = skill.read_notes["need_item"]
  102.     # need_item参数为空的话返回true
  103.     return true if need_item == nil
  104.     # 重新生成参数列表
  105.     need_item_clone = []
  106.     need_item.each do |e|
  107.       need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  108.     end
  109.     need_item = need_item_clone
  110.     # 遍历
  111.     need_item.each_index do |i|
  112.       # 生成物品id
  113.       item_id  = need_item[i][0]
  114.       # 生成物品数量
  115.       item_num = need_item[i][1]
  116.       # 是否拥有物品,是的话返回物品的索引,不是的话返回nil
  117.       item_exist = $game_party.items.index($data_items[item_id])
  118.       # 不存在就返回false
  119.       return false if item_exist == nil
  120.       # 返回物品
  121.       test_item = $game_party.items[item_exist]
  122.       # 如果不可用就返回
  123.       return false if ($game_party.item_number(test_item) < item_num)
  124.     end
  125.     return true
  126.         end
  127.   #--------------------------------------------------------------------------
  128.   # ● 刷新窗口
  129.   #     skill  : 技能
  130.   #     index  : 技能在技能窗口的索引,用来判定本
  131.   #              窗口应该显示在左边还是右边
  132.   #--------------------------------------------------------------------------
  133.   def refresh( skill, index = 0)
  134.     # 清除之前产生的位图
  135.     self.contents.clear
  136.     # 如果skill为空就返回false
  137.     return false if skill == nil
  138.     # 先让需要窗口不可见
  139.     self.visible = false
  140.     # 读取参数
  141.     need_item = skill.read_notes["need_item"]
  142.     # 如果参数不是个数组就将需要窗口隐藏并返回false
  143.     return false unless need_item.is_a? Array
  144.     # 重新生成参数列表
  145.     need_item_clone = []
  146.     need_item.each do |e|
  147.             need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  148.     end
  149.     need_item = need_item_clone
  150.     # 如果参数列表为空就返回
  151.     return false unless need_item.size >= 1
  152.     # 判定索引以决定窗口位置
  153.     self.x = index % 2 == 0 ? WINDOW_X : 0
  154.     # 改变窗口大小
  155.     self.height = need_item.size * 24 + 32
  156.     # 将窗口置为可见
  157.     self.visible = true
  158.     create_contents
  159.     # 遍历参数列表
  160.     need_item.each_index do |i|
  161.             # 生成物品id
  162.       item_id  = need_item[i][0]
  163.       # 生成物品数量
  164.       item_num = need_item[i][1]
  165.       # 生成物品
  166.       item = $data_items[item_id]
  167.       # 判定物品是否足够
  168.       enabled = $game_party.item_number(item) >= item_num ? true : false
  169.       # 绘制文字
  170.       draw_item_name(item, 0, WLH * i, enabled)
  171.       self.contents.font.color.alpha = enabled ? 255 : 128
  172.       self.contents.draw_text(TEXT_NEED_X, WLH * i, 96, WLH, TEXT_NEED) #
  173.       self.contents.draw_text(TEXT_ITEM_NUM_X,  WLH * i, 32, WLH, item_num) #
  174.     end # need_item.each_index
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 执行对物品消耗
  178.   #     skill  : 技能
  179.   #--------------------------------------------------------------------------
  180.   def self.exec_cost( skill )
  181.     # 传递错误就直接返回false
  182.     return false if skill == nil
  183.     # 读取need_item项的参数
  184.     need_item = skill.read_notes["need_item"]
  185.     # 如果参数不是个数组就将需要窗口隐藏并返回false
  186.     return true unless need_item.is_a? Array
  187.     need_item.each do |e|
  188.       id  = e.split(",")[0].to_i
  189.       num = e.split(",")[1].to_i
  190.       $game_party.gain_item($data_items[id], -num)
  191.     end
  192.   end
  193.   
  194. end # Window_SNItem

  195. #==============================================================================
  196. # ■ Game_Actor
  197. #------------------------------------------------------------------------------
  198. #  处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
  199. # Game_Party 类请参考 ($game_party) 。
  200. #==============================================================================

  201. class Game_Actor
  202.   
  203.   alias snitem_skill_can_use? skill_can_use?
  204.   
  205.   #--------------------------------------------------------------------------
  206.   # ● 可用技能判断
  207.   #     skill : 技能
  208.   #--------------------------------------------------------------------------
  209.   def skill_can_use?(skill)
  210.     return false unless Window_SNItem.skill_can_use?(skill)
  211.     snitem_skill_can_use?(skill)
  212.   end
  213. end

  214. #==============================================================================
  215. # ■ Scene_Skill
  216. #------------------------------------------------------------------------------
  217. #  处理特技画面的类。
  218. #==============================================================================

  219. class Scene_Skill < Scene_Base

  220.   alias snitem_initialize          initialize
  221.   alias snitem_terminate           terminate
  222.   alias snitem_update              update
  223.   alias snitem_use_skill_nontarget use_skill_nontarget

  224.   #--------------------------------------------------------------------------
  225.   # ● 初始化对像
  226.   #     actor_index : 角色位置
  227.   #--------------------------------------------------------------------------
  228.   def initialize( actor_index = 0, equip_index = 0 )
  229.     snitem_initialize
  230.     @snitem_window = Window_SNItem.new
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 结束处理
  234.   #--------------------------------------------------------------------------
  235.   def terminate
  236.     snitem_terminate
  237.     @snitem_window.dispose
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 更新画面
  241.   #--------------------------------------------------------------------------
  242.   def update
  243.     snitem_update
  244.     @snitem_window.refresh( @skill_window.skill, @skill_window.index )
  245.   end
  246.   
  247.   #--------------------------------------------------------------------------
  248.   # ● 非同伴目标使用物品
  249.   #--------------------------------------------------------------------------
  250.   def use_skill_nontarget
  251.     # 执行对物品的消耗
  252.     Window_SNItem.exec_cost(@skill)
  253.     # 调用原方法
  254.     snitem_use_skill_nontarget
  255.   end
  256.   
  257. end # Scene_Skill

  258. #==============================================================================
  259. # ■ Scene_Battle
  260. #------------------------------------------------------------------------------
  261. #  处理战斗画面的类。
  262. #=============================================================================

  263. class Scene_Battle < Scene_Base
  264.   
  265.   include FSL::Conf::SNItem
  266.   
  267.   alias snitem_update_skill_selection update_skill_selection
  268.   alias snitem_start_skill_selection  start_skill_selection
  269.   alias snitem_end_skill_selection    end_skill_selection
  270.   alias snitem_execute_action_skill   execute_action_skill
  271.   
  272.   #--------------------------------------------------------------------------
  273.   # ● 开始技能选择
  274.   #--------------------------------------------------------------------------
  275.   def start_skill_selection
  276.     snitem_start_skill_selection
  277.     # 创建需要道具窗口,并把y坐标上移
  278.     @snitem_window = Window_SNItem.new(270,56)
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 结束技能选择
  282.   #--------------------------------------------------------------------------
  283.   def end_skill_selection
  284.     if @skill_window != nil
  285.       @snitem_window.dispose
  286.       @snitem_window = nil
  287.     end
  288.     snitem_end_skill_selection
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 更新技能选择
  292.   #--------------------------------------------------------------------------
  293.   def update_skill_selection
  294.     # 刷新技能
  295.     @snitem_window.refresh( @skill_window.skill, @skill_window.index )
  296.     # 调用原方法内容
  297.     snitem_update_skill_selection
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 执行战斗行动:使用技能
  301.   #--------------------------------------------------------------------------
  302.   def execute_action_skill
  303.     # 执行原内容
  304.     snitem_execute_action_skill
  305.     # 生成skill
  306.     skill = @active_battler.action.skill
  307.     Window_SNItem.exec_cost( skill )
  308.   end
  309.   
  310. end # Scene_Battle

复制代码

作者: 负零    时间: 2010-7-26 06:54
目前出现一bug【默认脚本下】...请允许一个不太懂脚本的人这样描述
在地图上打开技能菜单,用键盘上W键不能查看下一角色技能,且无论光标最初指向哪个角色,打开的永远都是队列中第一个人的技能栏...有人提出过吗 或者我火星了 Project2.rar (261.45 KB, 下载次数: 42)
作者: 六祈    时间: 2010-7-26 14:03
回复 DeathKing 的帖子
  1.   #在Game_Actor#skill_can_use?方法中调用时可传递self.index给第二个参数
  2. def self.skill_can_use?(skill,actor_id)
  3.     # 如果传递过来的skill为空
  4.     return false if skill == nil
  5.     # 读取need_item项的参数
  6.     need_item = skill.read_notes["need_item"]
  7.     # need_item参数为空的话返回true
  8.     return true if need_item == nil
  9.     # 重新生成参数列表
  10.     need_item_clone = []
  11.     need_item.each do |e|
  12.       need_item_clone << [ e.split(",")[0].to_i , e.split(",")[1].to_i ]
  13.     end
  14.     need_item = need_item_clone
  15.     # 产生一个队伍物品的哈希克隆(item_id => number)
  16.     party_items = Hash.new{0}
  17.     $game_party.items.each do |it|
  18.       party_items[it.id] = $game_party.item_number(it)
  19.     end
  20.     # 如果是第一个行动的角色或者不在战斗中则跳过
  21.     unless actor_id == 0 or $game_temp.in_battle == false
  22.       # 计算到前一个角色技能消耗为止的剩余物品数量哈希
  23.       0.upto(actor_id-1) do |ai|
  24.         action = $game_party.members[ai].action
  25.         next if action.kind != 1
  26.         temp_cost = $data_skills[action.skill_id].read_notes["need_item"]
  27.         next if temp_cost == nil
  28.         temp_cost = temp_cost.collect{|e|[e.split(",")[0].to_i,e.split(",")[1].to_i]}
  29.         temp_cost.each do |e|
  30.           party_items[e[0]] -= e[1]
  31.         end
  32.       end
  33.     end
  34.    
  35.     # 判定剩余物品是否足够使用技能
  36.     need_item.each do |e|
  37.       return false if (party_items[e[0]] < e[1])
  38.     end
  39.     return true
  40.         end
复制代码
这个方法我改写了,并且已经注释,麻烦死君更新一下啦~
作者: 负零    时间: 2010-7-26 19:27
我强烈要求开展"找BUG,得积分活动“
不明真相的错误,图片就不截了 直接上工程,当你打开技能栏的时候 选到需要消耗物品的技能的时候...
因为我把物品技能消耗放在第一个位置,所以一进去就弹错...没有设置物品消耗的技能应该没有问题
Project1.rar (242.29 KB, 下载次数: 52)
作者: 六祈    时间: 2010-7-26 19:37
出错后打开脚本编辑器,应该是下面的代码
  1. need_item.each_index do |i|
  2.             # 生成物品id
  3.       item_id  = need_item[i][0]
  4.       # 生成物品数量
  5.       item_num = need_item[i][1]
  6.       # 生成物品
  7.       item = $data_items[item_id]
复制代码
ps:我昨天下的范例没这问题,刚看了死君第一页的脚本也没有这个问题- -
作者: 沉影不器    时间: 2010-7-26 23:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-7-27 09:00
那个readnote脚本,大概是08年我刚接触vx不久就写了,既然做为基础脚本,还是统一起来好,不必要去考虑兼容... ...
沉影不器 发表于 2010-7-26 23:06



恩恩,其实我这个read_note是根据您那个read_note改写的,这个是把读取出来的项与值用哈希的键——值关系存放的。

由于我直接用的read_note方法,这样的话有些用了您原来需要这个“读取注释”的脚本的脚本就会出错,所以我就把read_note的方法名简单的改成了read_notes。

其实我很赞同您的意见,所以才有了ADK(Advanced Developed Kit,增强开发包),我的想法是吧一些常用的、底层的方法放到里面,就如读注释一样,但是现在除了读注释还没发现应该添加些什么。

   


作者: 负零    时间: 2010-7-27 17:05
请问更新了吗,还是有错误...
作者: 负零    时间: 2010-7-27 17:21
暂连一贴...我的错,因为我没有认真的体会26搂的意思,以为是单指出了错误,其实是更新过的脚本部分...
另外 似乎首页的脚本没有得到更新
作者: DeathKing    时间: 2010-7-27 17:27
回复 负零 的帖子

无所谓……首页是我今天更新的,应该没什么错误了……是再试试。
   
作者: 最强暗神乐    时间: 2010-7-30 08:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: a554187203    时间: 2010-9-11 19:12
加上复杂技能分类之后显示出问题了...{:4_84:}
作者: DeathKing    时间: 2010-9-12 13:40
回复 a554187203 的帖子


    能截个图么?并附上详细的错误说明么?
最好能有冲突的脚本。
作者: a554187203    时间: 2010-9-12 14:16
脚本是复杂技能分类
加上这一起使用的话

作者: 禾西    时间: 2010-9-20 10:08
同樣問題:http://rpg.blue/thread-156701-1-1.html
@snitem_window的z值應該跟著@skill_window等窗口的z值變化的,否則就會產生上列問題O.O
作者: DeathKing    时间: 2010-9-20 22:25
回复 禾西 的帖子


    谢谢提醒,其实可以直接在我的脚本上进行修改、创作。
作者: DeathKing    时间: 2011-1-8 16:30
强势更新,请求提交BUG。
作者: 天翔风舞    时间: 2011-3-15 09:10
这个好……收藏了慢慢研究!
作者: rmx463    时间: 2011-11-29 13:54
話說這個該怎用?


rmx463于2011-11-29 14:12补充以下内容:
= =能幫我看看這是啥問題嗎?


rmx463于2011-11-29 19:29补充以下内容:
0.0請問要怎樣才能連普攻都會耗物品?
作者: 红十字    时间: 2011-12-4 12:14
好东西啊,十分感谢啊。。。。




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