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

Project1

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

[原创发布] 【原创】简易技能等级系统

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

跳转到指定楼层
发表于 2013-9-20 22:11:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2017-5-30 21:33 编辑

突然有给技能增加等级的想法。技能等级,说白了就是让技能也具有经验和级别。做了一个简单的脚本,感觉上应该能个实现这个要求。
主角越频繁使用一个技能,也就对这个技能越熟练,熟能生巧么,因此技能等级提高了……


以上是一年前写的东西,现在翻出来一看,写的这叫啥啊,果断返工重写。
2.0版本的东西和1.0的很不一样,使用方法也不同。修复了一些BUG,不过没有动什么界面上的东西(为了避免脚本冲突)
虽然如此,还是存在脚本冲突的可能。

有BUG欢迎报告,代码如下:
RUBY 代码复制
  1. #=============================================================================
  2. # 技能等级系统 Ver 2.01
  3. #-----------------------------------------------------------------------------
  4. # By:RyanBern
  5. #-----------------------------------------------------------------------------
  6. # 主要功能:
  7. #     开放了技能成长值,角色在连续使用同一个技能若干次后,该技能会变得更加强大
  8. #     值得一提的是,技能的等级和角色的等级没有关系,只和你使用它的频率相关,即
  9. #     使角色等级非常高,如果那个技能一直不用,那么技能不会升级。
  10. #     只有产生了效果的技能才会增加技能的熟练度(EXP),在这里产生效果是指:
  11. #     对敌人打出了不为0的伤害/产生状态变化/对同伴有加血作用/
  12. #     也就是说对着一个满血同伴一直加血的话是不会增加EXP的……
  13. #     技能只要满足升级条件立即升级(也就是说在战斗未完成就可以用升级之后的技能)
  14. #     如果在菜单中升级,则下次点击 C 键会立即使用新技能
  15. #     技能升级之后原有技能将会消失。
  16. #-----------------------------------------------------------------------------
  17. # 使用方法:
  18. #     在数据库中定义某技能升级后的技能,方法是在对应的技能说明中的任何位置写:
  19. #     %sklv[升级后技能ID,升级所需EXP]
  20. #     例如:1号技能[治疗]可以升级到2号技能[治疗+],需要10个EXP
  21. #     %sklv[2,10] <-注意不要写多余的空格
  22. # 更新记录:
  23. #     v2.01 --- 修复了菜单不能使用技能的问题;修复了菜单使用技能时升级的问题
  24. #=============================================================================
  25.  
  26. module RB
  27.   # 使用一次技能之后获得的熟练度(EXP)
  28.   BASE_SKILL_EXP = 1
  29.  
  30.   # 升级技能后播放的 SE
  31.   SKILL_UP_SE = "Audio/SE/105-Heal01"
  32.  
  33.   # 显示升级窗口对应的开关:打开该序号开关则升级时不会显示升级窗口
  34.   NO_SKILL_UP_WINDOW = 11
  35. end
  36.  
  37. class RPG::Skill
  38.   Regex_Skill = /%sklv\[(\d+),(\d+)\]/i
  39.   alias rb_description_20141219 description
  40.   def description
  41.     text = rb_description_20141219
  42.     return text.gsub(Regex_Skill, "")
  43.   end
  44.   def exp_next
  45.     text = rb_description_20141219
  46.     Regex_Skill =~ text
  47.     return $2.to_i || 0
  48.   end
  49.   def skill_next
  50.     text = rb_description_20141219
  51.     Regex_Skill =~ text
  52.     return $1.to_i || 0
  53.   end
  54. end
  55.  
  56. class Game_Temp
  57.   attr_accessor :skill_level_up
  58. end
  59.  
  60.  
  61. class Game_Battler
  62.   alias rb_skill_effect_20141219 skill_effect
  63.   def skill_effect(user, skill)
  64.     effective = rb_skill_effect_20141219(user, skill)
  65.     if skill.skill_next != 0 && user.is_a?(Game_Actor)
  66.       user.gain_skill_exp(skill.id, RB::BASE_SKILL_EXP) if effective
  67.     end
  68.     return effective
  69.   end
  70. end
  71.  
  72.  
  73. class Game_Actor < Game_Battler
  74.   alias rb_initialize_20141219 initialize
  75.   def initialize(actor_id)
  76.     @skills_exp = {}
  77.     rb_initialize_20141219(actor_id)
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 增加技能经验
  81.   #     skill_id : 特技 ID
  82.   #     value    : 获取值
  83.   #--------------------------------------------------------------------------
  84.   def gain_skill_exp(skill_id, value)
  85.     unless skill_learn?(skill_id)
  86.       return
  87.     end
  88.     @skills_exp ||= {}
  89.     if @skills_exp[skill_id] == nil
  90.       @skills_exp[skill_id] = 0
  91.     end
  92.     @skills_exp[skill_id] += value
  93.     # 满足条件就升级技能
  94.     upgrade_skill(skill_id)
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 获取技能经验数值
  98.   #     skill_id : 特技 ID
  99.   #--------------------------------------------------------------------------
  100.   def skill_exp(skill_id)
  101.     return @skills_exp[skill_id] == nil ? 0 : @skills_exp[skill_id]
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 遗忘特技
  105.   #     skill_id : 特技 ID
  106.   #--------------------------------------------------------------------------
  107.   alias rb_forget_skill_20141219 forget_skill
  108.   def forget_skill(skill_id)
  109.     rb_forget_skill_20141219(skill_id)
  110.     @skills_exp ||= {}
  111.     @skills_exp.delete(skill_id)
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 升级特技
  115.   #     skill_id : 特技 ID
  116.   #--------------------------------------------------------------------------
  117.   def upgrade_skill(skill_id)
  118.     skill_next = $data_skills[skill_id].skill_next
  119.     exp_next = $data_skills[skill_id].exp_next
  120.     # 技能的下一级别存在的情况下
  121.     if $data_skills[skill_id] != nil
  122.       # 当前经验高于升级所需经验
  123.       if self.skill_exp(skill_id) >= exp_next
  124.         # 设置技能升级标志
  125.         $game_temp.skill_level_up = true
  126.         # 遗忘上一级别的技能
  127.         forget_skill(skill_id)
  128.         # 显示窗口
  129.         unless $game_switches[RB::NO_SKILL_UP_WINDOW]
  130.           Audio.se_play(RB::SKILL_UP_SE, 80, 100) if RB::SKILL_UP_SE != ""
  131.           show_skill_up_result(skill_id, skill_next)
  132.         end
  133.         # 学习新特技
  134.         learn_skill(skill_next)
  135.       end
  136.     end
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 升级显示处理
  140.   #--------------------------------------------------------------------------
  141.   def show_skill_up_result(skill_id, skill_next)
  142.     skill_learning_window = Window_SkillUpgrade.new(skill_id, skill_next)
  143.     # 循环
  144.     loop do
  145.       # 刷新游戏画面
  146.       Graphics.update
  147.       # 刷新输入信息
  148.       Input.update
  149.       # 按下C就关闭窗口
  150.       if Input.trigger?(Input::C)
  151.         skill_learning_window.visible = false
  152.         break
  153.       end
  154.     end
  155.     skill_learning_window.dispose
  156.   end
  157. end
  158.  
  159. class Window_SkillUpgrade < Window_Base
  160.   def initialize(skill_id, new_skill_id)
  161.     super(0, 0, 32, 96)
  162.     self.contents = Bitmap.new(1, 1)
  163.     self.visible = false
  164.     self.back_opacity = 160
  165.     # 防止被对话框遮住
  166.     self.z = 9999
  167.     @old_skill = $data_skills[skill_id]
  168.     @new_skill = $data_skills[new_skill_id]
  169.     refresh
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 刷新
  173.   #--------------------------------------------------------------------------
  174.   def refresh
  175.     text1 = @old_skill.name + " 升级为:"
  176.     text2 = @new_skill.name
  177.     w1 = self.contents.text_size(text1).width
  178.     w2 = self.contents.text_size(text2).width
  179.     self.contents = Bitmap.new([w1, w2].max + 28, 64)
  180.     self.width = [w1, w2].max + 28 + 32
  181.     self.x = 320 - width / 2
  182.     self.y = 240 - height / 2
  183.     # 各描写
  184.     self.contents.clear
  185.     bitmap1 = RPG::Cache.icon(@old_skill.icon_name)
  186.     bitmap2 = RPG::Cache.icon(@new_skill.icon_name)
  187.     self.contents.blt(4, 4, bitmap1, Rect.new(0,0,24,24))
  188.     self.contents.blt(4, 36, bitmap2, Rect.new(0,0,24,24))
  189.     self.contents.draw_text(28, 0, contents.width - 28, 32, text1)
  190.     self.contents.draw_text(28, 32, contents.width - 28, 32, text2)
  191.     self.visible = true
  192.   end
  193. end
  194.  
  195. class Window_Skill < Window_Selectable
  196.   def update_help
  197.     if self.skill == nil
  198.       text = ""
  199.     else
  200.       text_append = self.skill.skill_next == 0 ? "" \
  201.         : sprintf("Exp:%d/%d", @actor.skill_exp(self.skill.id), self.skill.exp_next)
  202.       text = self.skill.description + text_append
  203.     end
  204.     @help_window.set_text(text)
  205.   end
  206. end
  207.  
  208.  
  209. class Scene_Skill
  210.   alias rb_update_target_20170530 update_target
  211.   def update_target
  212.     if $game_temp.skill_level_up
  213.       $game_temp.skill_level_up = false
  214.       @skill = $data_skills[@skill.skill_next] || @skill
  215.       @skill_window.refresh
  216.     end
  217.     rb_update_target_20170530
  218.   end
  219. end

评分

参与人数 2星屑 +250 收起 理由
feizhaodan + 200 奖赏条例
美丽晨露 + 50 精品文章

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
59 小时
注册时间
2015-12-24
帖子
41
24
发表于 2016-1-7 23:13:58 | 只看该作者
已下载,对我非常有用……非常感谢,学习之。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13647
在线时间
3853 小时
注册时间
2013-7-18
帖子
2314
23
发表于 2016-1-4 16:10:19 | 只看该作者
RyanBern 发表于 2014-12-19 21:46
2.0版本更新(其实是重写)
自顶一下

2.0脚本出错,攻击技能没什么问题,加血技能升级后,用新技能再给人加血,血没满的效果动画,也不扣sp

但实际已经加血,再此进入菜单可以看见已经满血了
山岚野人,快人快语,礼数不周,还望海涵....
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

22
 楼主| 发表于 2014-12-19 21:46:58 | 只看该作者
2.0版本更新(其实是重写)
自顶一下
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
190
在线时间
1 小时
注册时间
2014-2-22
帖子
2
21
发表于 2014-2-23 12:57:00 | 只看该作者
不作死就不会死脚本错误.jpg (89.5 KB, 下载次数: 0)

点评

论坛把代码识别成链接了,正常的应该是@skill = $data_skills[@active_battler.current_action.skill_id]  发表于 2014-2-25 09:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
190
在线时间
1 小时
注册时间
2014-2-22
帖子
2
20
发表于 2014-2-23 12:11:38 | 只看该作者
脚本第218行有错误。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

19
发表于 2013-10-2 11:14:48 | 只看该作者
虽然以前也有这样的东西···不过看情形似乎是要消耗SP且在战斗中用才能获取熟练度啊···那回复魔法的技能就不能加熟练度了?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
112
在线时间
136 小时
注册时间
2012-7-25
帖子
339
18
发表于 2013-10-1 18:50:26 | 只看该作者
感谢LZ分享,我就收下了
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

17
 楼主| 发表于 2013-9-23 11:54:23 | 只看该作者
玄机子 发表于 2013-9-23 00:09
这个能用在VX上吗?

没改过当然是不能用的,不过感觉改改还是能用的,不过我对VX了解的还是比较少的,里面的数据结构和XP的可能不一样,这就要找VX方面的专家了。

点评

还是建议做成通用的···因为之前就有这种  发表于 2013-10-2 11:12
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13647
在线时间
3853 小时
注册时间
2013-7-18
帖子
2314
16
发表于 2013-9-23 09:22:32 | 只看该作者
不错的东西,用了,很好,谢谢
山岚野人,快人快语,礼数不周,还望海涵....
回复 支持 反对

使用道具 举报

Lv3.寻梦者

护国公

梦石
0
星屑
1831
在线时间
2023 小时
注册时间
2005-10-21
帖子
560
15
发表于 2013-9-23 00:09:05 | 只看该作者
这个能用在VX上吗?

点评

你可以先尝试一下,如果不行的话再对照语法修改  发表于 2013-10-2 11:12
[IMG][/IMG] ================================== 寂寥宁静雅致之心 ================================== mahoro-matic mirclecompany http://www.mday.com.cn/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-23 03:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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