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

Project1

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

[已经解决] 关于技能升级脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
105 小时
注册时间
2016-4-3
帖子
78
跳转到指定楼层
1
发表于 2016-5-16 23:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
使用了@RyanBern的技能升级脚本

想要修改的效果:在游戏中(非战斗中)如何增加技能熟练度?比如和某人对话后,技能熟练度+1,而不需要通过战斗来提升

技能升级脚本如下:

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

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

2
发表于 2016-5-17 08:54:30 | 只看该作者
使用事件脚本
RUBY 代码复制
  1. $game_actors[X].gain_skill_exp(Y, Z)

即可,使用时将X,Y,Z替换成以下内容
X:角色 id
Y:技能 id
Z:增加的技能熟练度(经验值)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
105 小时
注册时间
2016-4-3
帖子
78
3
 楼主| 发表于 2016-5-17 22:39:28 | 只看该作者
本帖最后由 452234679 于 2016-5-18 01:18 编辑
RyanBern 发表于 2016-5-17 08:54
使用事件脚本
$game_actors[X].gain_skill_exp(Y, Z)[/pre]
即可,使用时将X,Y,Z替换成以下内容


非常感谢您的回答。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 10:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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