查看: 93|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月六日(秋) | 显示全部楼层 |阅读模式
    突然有给技能增加等级的想法。技能等级,说白了就是让技能也具有经验和级别。做了一个简单的脚本,感觉上应该能个实现这个要求。
    主角越频繁使用一个技能,也就对这个技能越熟练,熟能生巧么,因此技能等级提高了……


    以上是一年前写的东西,现在翻出来一看,写的这叫啥啊,果断返工重写。
    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] = exp_next
    22.         # 设置技能升级标志
    23.         $game_temp.skill_level_up = true
    24.         # 遗忘上一级别的技能
    25.         forget_skill(skill_id)
    26.         # 显示窗口
    27.         unless$game_switches[RB::NO_SKILL_UP_WINDOW]
    28.           Audio.se_play(RB::SKILL_UP_SE, 80, 100)ifRB::SKILL_UP_SE != ""
    29.           show_skill_up_result(skill_id, skill_next)
    30.         end
    31.         # 学习新特技
    32.         learn_skill(skill_next)
    33.       end
    34.     end
    35.   end
    36.   #--------------------------------------------------------------------------
    37.   # ● 升级显示处理
    38.   #--------------------------------------------------------------------------
    39.   def show_skill_up_result(skill_id, skill_next)
    40.     skill_learning_window = Window_SkillUpgrade.new(skill_id, skill_next)
    41.     # 循环
    42.     loopdo
    43.       # 刷新游戏画面
    44.       Graphics.update
    45.       # 刷新输入信息
    46.       Input.update
    47.       # 按下C就关闭窗口
    48.       if Input.trigger?(Input::C)
    49.         skill_learning_window.visible = false
    50.         break
    51.       end
    52.     end
    53.     skill_learning_window.dispose
    54.   end
    55. end
    56. class Window_SkillUpgrade < Window_Base
    57.   def initialize(skill_id, new_skill_id)
    58.     super(0, 0, 32, 96)
    59.     self.contents = Bitmap.new(1, 1)
    60.     self.visible = false
    61.     self.back_opacity = 160
    62.     # 防止被对话框遮住
    63.     self.z = 9999
    64.     @old_skill = $data_skills[skill_id]
    65.     @new_skill = $data_skills[new_skill_id]
    66.     refresh
    67.   end
    68.   #--------------------------------------------------------------------------
    69.   # ● 刷新
    70.   #--------------------------------------------------------------------------
    71.   def refresh
    72.     text1 = @old_skill.name + " 升级为:"
    73.     text2 = @new_skill.name
    74.     w1 = self.contents.text_size(text1).width
    75.     w2 = self.contents.text_size(text2).width
    76.     self.contents = Bitmap.new([w1, w2].max + 28, 64)
    77.     self.width = [w1, w2].max + 28 + 32
    78.     self.x = 320 - width / 2
    79.     self.y = 240 - height / 2
    80.     # 各描写
    81.     self.contents.clear
    82.     bitmap1 = RPG::Cache.icon(@old_skill.icon_name)
    83.     bitmap2 = RPG::Cache.icon(@new_skill.icon_name)
    84.     self.contents.blt(4, 4, bitmap1, Rect.new(0,0,24,24))
    85.     self.contents.blt(4, 36, bitmap2, Rect.new(0,0,24,24))
    86.     self.contents.draw_text(28, 0, contents.width - 28, 32, text1)
    87.     self.contents.draw_text(28, 32, contents.width - 28, 32, text2)
    88.     self.visible = true
    89.   end
    90. end
    91. class Window_Skill < Window_Selectable
    92.   def update_help
    93.     ifself.skill == nil
    94.       text = ""
    95.     else
    96.       text_append = self.skill.skill_next == 0 ? "" \
    97.         : sprintf("Exp:%d/%d", @actor.skill_exp(self.skill.id), self.skill.exp_next)
    98.       text = self.skill.description + text_append
    99.     end
    100.     @help_window.set_text(text)
    101.   end
    102. end
    103. class Scene_Skill
    104.   alias rb_update_target_20170530 update_target
    105.   def update_target
    106.     if$game_temp.skill_level_up
    107.       $game_temp.skill_level_up = false
    108.       @skill = $data_skills[@skill.skill_next] || @skill
    109.       @skill_window.refresh
    110.     end
    111.     rb_update_target_20170530
    112.   end
    113. end
    复制代码

                 本帖来自P1论坛作者guoyq1988,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=332995  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-14 12:56 , Processed in 0.046722 second(s), 41 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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