Project1

标题: 技能升级系统怎么做呀 [打印本页]

作者: 十三点九进制    时间: 2016-11-11 23:18
标题: 技能升级系统怎么做呀
那天,我打开脚本编辑器,想做出一个这样的技能升级效果:
比如有个技能叫治疗,那么数据库设置几个治疗分别叫治疗L1、治疗L2,以此类推,技能和装备多了一个后缀,但是游戏里并不会显示出那个后缀的
当检测到角色习得的技能中出现名字相同的技能时,将后缀名中数字较小的那个技能移除,利用神不知鬼不觉替换技能来达到一个技能升级的效果
本来直接事件替换就可以的,根本用不着整那么麻烦,不过主要是这边技能数量太多了点,每个都设定一遍才是真的麻烦
而且应该也可以用同样原理做一个装备升级系统,所以也是开始研究起脚本来了
然后,在打开脚本编辑器对着空白的脚本发了半天呆后,我终于想起自己根本不会脚本这件事
于是来发帖问了,求做这东西的思路嗯。
作者: 英顺的马甲    时间: 2016-11-12 01:27

  1. SKILL_LEVEL_PATTERN = /^(.*)\{(\d+)\}$/
  2. unless defined?(RPG::Skill::SKILL_LEVEL)
  3.   RPG::Skill = Class.new(RPG::Skill) do
  4.     superclass.constants.each{|c|const_set(c, superclass.const_get(c))}
  5.     const_set(:SKILL_LEVEL, true)
  6.     def name
  7.       if @name[SKILL_LEVEL_PATTERN]
  8.         return $1
  9.       else
  10.         return super
  11.       end
  12.     end
  13.     def level
  14.       if @name[SKILL_LEVEL_PATTERN]
  15.         return $2.to_i
  16.       else
  17.         return 0
  18.       end
  19.     end
  20.   end
  21.   Game_Actor = Class.new(Game_Actor) do
  22.     superclass.constants.each{|c|const_set(c, superclass.const_get(c))}
  23.     def skill_learn(id)
  24.       s = @skills.clone
  25.       super(id)
  26.       if @skills != s
  27.         s1 = $data_skills[id]
  28.         @skills.delete_if do |s|
  29.           s2 = $data_skills[s]
  30.           next s2.name == s1.name and s2.level < s1.level
  31.         end
  32.       end
  33.     end
  34.   end
  35. end
复制代码

把上面的脚本插入main之前
这样的话技能名就变成了:
  1. 技能名[等级]
复制代码

例如:
  1. 十字斩[1]
  2. 十字斩[2]
  3. 十字斩[3]
复制代码

而在游戏内只会显示为“十字斩”
然后同样的技能等级低的等级高的覆盖
如果懂得正则的话可以自行修改用来匹配名称和等级的正则
作者: 十三点九进制    时间: 2016-11-14 13:13
英顺的马甲 发表于 2016-11-12 01:27
把上面的脚本插入main之前
这样的话技能名就变成了:

测试了一下,并没有效果……

未标题-1.png (34.78 KB, 下载次数: 18)

未标题-1.png





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