设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1106|回复: 0
打印 上一主题 下一主题

[难以理解的脚本]技能升级卷轴

[复制链接]
梦石
0
星屑
105
在线时间
297 小时
注册时间
2009-1-7
帖子
216
跳转到指定楼层
1
发表于 2014-9-17 00:53:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
技能升级卷轴:在非战斗状态下使用该卷轴会将已经学会的技能替换成另外一个还没有学会的技能,达到技能升级的目的。
要点:
1.要遗忘的技能必须已经学会。
2.要学习的技能必须还没有学会。
3.如果没有符合以上的要求,该角色就不能使用技能升级卷轴。

由于《RMVA》的默认使用效果只有学会技能,而没有遗忘技能。因此需要用备注以及脚本来实现。

读取备注的脚本:
  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://rpg.blue/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.         
  63.       end
  64.       return mismatch
  65.     end
  66.   end
  67.   #=============================================================================
  68.   # ■ BaseItem
  69.   #=============================================================================
  70.   class BaseItem
  71.     #-------------------------------------------------------------------------
  72.     # ○ 读取rmvx备注栏指定字段
  73.     #     section  : 字段名
  74.     #     mismatch : 未匹配时的返回值
  75.     #-------------------------------------------------------------------------
  76.     def read_note(section, mismatch = nil)
  77.       ReadNote.read(self.note, section, mismatch)
  78.     end
  79.   end
  80. end

  81. #encoding:utf-8
  82. #==============================================================================
  83. # ■ Game_Map
  84. #------------------------------------------------------------------------------
  85. #  管理地图的类。拥有卷动地图以及判断通行度的功能。
  86. #   本类的实例请参考 $game_map 。
  87. #==============================================================================
  88. #encoding:utf-8
  89. #==============================================================================
  90. # ■ Game_Map
  91. #------------------------------------------------------------------------------
  92. #  管理地图的类。拥有卷动地图以及判断通行度的功能。
  93. #   本类的实例请参考 $game_map 。
  94. #==============================================================================

  95. class Game_Map
  96.   #-------------------------------------------------------------------------
  97.   # ○ 读取rmvx备注栏指定字段
  98.   #     section  : 字段名
  99.   #     mismatch : 未匹配时的返回值
  100.   #-------------------------------------------------------------------------
  101.   def read_note(section, mismatch = nil)
  102.     return RPG::ReadNote.read(@map.note, section, mismatch);
  103.   end
  104. end
复制代码
以上的脚本也适用于《RMVA》

判断角色是否能够使用技能升级卷轴:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Battler
  4. #------------------------------------------------------------------------------
  5. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  6. #==============================================================================

  7. class Game_Battler < Game_BattlerBase
  8.   
  9.   #--------------------------------------------------------------------------
  10.   # ● 技能/物品的应用测试
  11.   #    如果使用目标的 HP 或者 MP 全满时,禁止使用恢复道具。
  12.   # ● 新增功能:当使用技能升级卷轴时,没有拥有旧的技能就不能使用。
  13.   #--------------------------------------------------------------------------
  14.   def item_test(user, item)
  15.     bool = true;#特殊使用条件的判断。如果不需要判断,则默认通过,以防BUG!
  16.    
  17.     #以下为判断角色是否学会了旧的技能
  18.     #read_note函数在第6脚本
  19.     oldSkill = item.read_note("需要技能");#获取旧技能ID
  20.     newSkill = item.read_note("学会技能");#获取新技能ID
  21.     if nil != oldSkill #如果旧技能ID不等于nil,即需要判断是否学会旧技能
  22.       #如果旧技能已经学会并且新技能没有学会
  23.       if user.skill_learn?($data_skills[oldSkill])
  24.         if !user.skill_learn?($data_skills[newSkill])
  25.           bool = true; #通过条件
  26.         else
  27.           bool = false;
  28.         end
  29.       else
  30.         bool = false; #不通过条件
  31.       end
  32.     end
  33.     #id为19(作者)的角色不能使用任何道具
  34.     if user.id == 19
  35.       bool = false;
  36.     end

  37.     #有其他特殊的判断需要仿造以上例子新增if语句,用bool记录条件是否通过
  38.    
  39.     if bool#只有在特殊条件满足时才判断一般条件
  40.      return false if item.for_dead_friend? != dead?
  41.      return true if $game_party.in_battle
  42.      return true if item.for_opponent?
  43.      return true if item.damage.recover? && item.damage.to_hp? && hp < mhp
  44.      return true if item.damage.recover? && item.damage.to_mp? && mp < mmp
  45.      return true if item_has_any_valid_effects?(user, item)
  46.      return false
  47.     else#特殊条件如果不满足则直接返回false,无需判断一般条件
  48.      return false;
  49.     end
  50.   end
  51. end
复制代码
技能升级卷轴的效果:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Battler
  4. #------------------------------------------------------------------------------
  5. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  6. #==============================================================================

  7. class Game_Battler < Game_BattlerBase
  8.   
  9.   #--------------------------------------------------------------------------
  10.   # ● 升级技能:根据传入的user和item,来升级指定角色的技能
  11.   # ● 判断角色是否满足升级技能的条件在脚本“物品的特殊使用判定”的17行-25行
  12.   #--------------------------------------------------------------------------
  13.   def learn_skill_by_item(user, item)
  14.     #read_note函数在第6脚本
  15.     oldSkill = item.read_note("需要技能");#获取旧技能ID
  16.     if oldSkill != nil#如果物品的效果是技能升级
  17.       #read_note函数在第6脚本
  18.       newSkill = item.read_note("学会技能");#获取新技能ID
  19.       user.forget_skill(oldSkill);#遗忘掉旧技能
  20.       user.learn_skill(newSkill);#领悟新的技能
  21.     end
  22.   end
  23. end
复制代码
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Battler
  4. #------------------------------------------------------------------------------
  5. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  6. #
  7. # ■修改后的类融合了新增的几个功能
  8. #==============================================================================

  9. class Game_Battler < Game_BattlerBase
  10.   
  11.   #--------------------------------------------------------------------------
  12.   # ● 对技能/物品使用者的效果
  13.   #--------------------------------------------------------------------------
  14.   def item_user_effect(user, item)
  15.     user.tp += item.tp_gain * user.tcr
  16.     #以下函数在第3脚本
  17.     learn_skill_by_item(user, item);#升级技能
  18.   end
  19. end
复制代码
技能升级卷轴需要添加以下备注:
需要技能 = id
学会技能 = id
游戏群组:https://rpg.blue/forum.php?mod=group&fid=565在这里你可以看到我在制作游戏过程中分享的内容。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 20:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表