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

Project1

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

[RMVX发布] 技能等级核心脚本

 关闭 [复制链接]

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

跳转到指定楼层
1
发表于 2008-10-24 14:02:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
跟kissye君的不同,以熟练度升级
注释里添加:
[level up]、[lvup]、[升级]、[升級]
表示此技能能升级,并在窗口中显示等级和熟练度,不填的话无法升级

[熟练次数 N] 表示此技能需要使用N次才会升级, 不填默认为20
[最大等级 N] 表示此技能最大等级,不填默认为1

脚本更新:
* 2009/02/18
  - BUG 修正:修改攻击技能不升级的BUG
  1. class RPG::Skill < RPG::UsableItem
  2.   # 判斷技能是否有等級
  3.   def lvup?
  4.     self.note.split(/[\r\n]+/).each { |line|
  5.       return line =~ /\[(lvup|level up|升級|升级)\]/}
  6.     return false
  7.   end
  8.   # 判斷技能熟練度次數
  9.   def times_used_to_lvup
  10.     self.note.split(/[\r\n]+/).each { |line|
  11.       return $1.to_i if line =~ /\[(?:use_exp|熟練次數) (\d*)\]/}
  12.     return 20
  13.   end
  14.   # 判斷技能所需熟練度
  15.   def use_exp; return (100 / times_used_to_lvup); end
  16.   # 獲取技能最大等級
  17.   def maxlv
  18.     self.note.split(/[\r\n]+/).each { |line|
  19.       return $1.to_i if line =~ /\[(?:maxlv|最大等級|最大等级) (\d*)\]/}
  20.     return 1
  21.   end
  22.   # 獲取等級值
  23.   def get_value(lv, hash)
  24.     if hash.include?(lv)
  25.       return hash[lv]
  26.     else
  27.       ks = hash.keys.dup
  28.       ks.sort!
  29.       for i in 1..hash.size-1
  30.         k0 = ks[i-1]
  31.         k1 = ks[i]
  32.         k2 = ks[i+1]
  33.         if lv > k1 and lv < k2
  34.           return hash[k1]
  35.         elsif lv < k1
  36.           return hash[k0]
  37.         elsif lv > k2
  38.           next
  39.         end
  40.       end
  41.     end
  42.   end
  43. end
  44. class Game_Temp
  45.   alias skill_level_initialize initialize
  46.   attr_accessor :skill_level
  47.   def initialize
  48.     skill_level_initialize
  49.     @skill_level = 1
  50.   end
  51. end
  52. class Game_Battler
  53.   # 技能效果 + 熟練度提升
  54.   alias skill_level_skill_effect skill_effect
  55.   def skill_effect(user, skill)
  56.     if skill_effective?(user, skill)
  57.       exp = user.skill_exp[skill.id].to_i + skill.use_exp
  58.       user.change_skill_exp(skill.id, exp)
  59.     end
  60.     skill_level_skill_effect(user, skill)
  61.   end
  62. end
  63. class Game_Actor < Game_Battler
  64.   attr_accessor :skill_level
  65.   attr_accessor :skill_exp
  66.   alias skill_level_initialize initialize
  67.   # 可升級技能初始化
  68.   def initialize(actor_id)
  69.     skill_level_initialize(actor_id)
  70.     @skill_level = {}
  71.     @skill_exp   = {}
  72.     for i in self.class.learnings
  73.       skill = $data_skills[i.skill_id]
  74.       if skill.lvup?
  75.         @skill_level[skill.id] ||= 1
  76.         @skill_exp[skill.id] ||= 0
  77.       end
  78.     end
  79.   end
  80.   # 更改技能熟練度
  81.   def change_skill_exp(id, exp)
  82.     @skill_exp[id] = [[exp, 99999].min, 0].max
  83.     while @skill_exp[id] >= 100
  84.       skill_level_up(id)
  85.       @skill_exp[id] = 0
  86.     end
  87.   end
  88.   # 更改技能等級
  89.   def skill_level_up(id, level=1)
  90.     return unless skill_lvup?(id)
  91.     @skill_level[id] = @skill_level[id].to_i+level
  92.     # 顯示升級提示窗口
  93.     @skill_lvup_window = Window_Base.new(0, (416-56)/2, 544,56)
  94.     text="技能[#{$data_skills[id].name}]等級提升"
  95.     @skill_lvup_window.contents.draw_text(0, 0, 512, Window_Base::WLH, text, 1)
  96.     Graphics.wait(60) # 等待60禎
  97.     @skill_lvup_window.dispose
  98.   end
  99.   # 角色技能是否能升级
  100.   def skill_lvup?(id)
  101.     return @skill_level[id] != $data_skills[id].maxlv
  102.     return $data_skills[id].lvup?
  103.   end
  104. end
  105. class Window_Base < Window
  106.   alias skill_level_draw_item_name draw_item_name
  107.   # 繪製技能名稱
  108.   def draw_item_name(item, x, y, enabled = true)
  109.     if item != nil and item.is_a?(RPG::Skill) and item.lvup?
  110.       draw_skill_name_lvup(item, x, y, enabled)
  111.       return
  112.     end
  113.     skill_level_draw_item_name(item, x, y, enabled)
  114.   end
  115.   # 繪製可升級技能名稱
  116.   def draw_skill_name_lvup(item, x, y, enabled = true)
  117.     draw_icon(item.icon_index, x, y, enabled)
  118.     self.contents.font.color = normal_color
  119.     self.contents.font.color.alpha = enabled ? 255 : 128
  120.     exp = @actor.skill_exp[item.id]
  121.     level = @actor.skill_level[item.id]
  122.     if @actor.skill_lvup?(item.id)
  123.       self.contents.draw_text(x + 24, y, 172, WLH, item.name+" LV:#{level}"+"(#{exp}%)")
  124.     else
  125.       self.contents.draw_text(x + 24, y, 172, WLH, item.name+" LV:#{level}")
  126.     end
  127.   end
  128. end
  129. class Game_Actor < Game_Battler
  130.   alias skill_level_skill_effective? skill_effective?
  131.   def skill_effective?(user, skill)
  132.     $game_temp.skill_level = user.skill_level[skill.id]
  133.     skill_level_skill_effective?(user, skill)
  134.   end
  135. end
  136. class Game_BattleAction
  137.   alias skill_level_set_skill set_skill
  138.   alias skill_level_skill skill
  139.   def set_skill(skill_id)
  140.     skill_level_set_skill(skill_id)
  141.     $game_temp.skill_level = @battler.skill_level[skill_id]
  142.   end
  143.   def skill
  144.     $game_temp.skill_level = @battler.skill_level[@skill_id]
  145.     skill_level_skill
  146.   end
  147. end
  148. class Window_Skill < Window_Selectable
  149.   alias skill_level_skill skill
  150.   def skill
  151.     $game_temp.skill_level = @actor.skill_level[@data[self.index].id]
  152.     skill_level_skill
  153.   end
  154. end
复制代码
VA脚本开工中...
偷窃脚本1.0 - 已完成

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
 楼主| 发表于 2008-10-24 16:16:04 | 只看该作者
「外挂」脚本
以下脚本必须配合主楼的核心脚本使用

1. 修改MP消耗值和命中率
    使用方法:
      [hitN:M]、[命中率N:M] 代表此技能在N级时,命中率为M
      [mp_costN:M]、[消耗N:M]  代表此技能在N级时,MP消耗为M
  1. class RPG::Skill < RPG::UsableItem
  2.   def hit
  3.     if self.lvup?
  4.       lvhit = {0=>@hit}
  5.       self.note.split(/[\r\n]+/).each { |line|
  6.       if line =~ /\[(?:hit|命中率)(\d*):(\d*)\]/
  7.         lvhit[$1,to_i] = $2.to_i if $1 and $2
  8.       end
  9.       }
  10.       lvhit[maxlv] = lvhit[lvhit.keys.sort[-1]]
  11.       return get_value($game_temp.skill_level, lvhit)
  12.     else
  13.       return @hit
  14.     end
  15.   end
  16.   def mp_cost
  17.     if self.lvup?
  18.       lvmp_cost = {0=>@mp_cost}
  19.       self.note.split(/[\r\n]+/).each { |line|
  20.       if line =~ /\[(?:mp_cost|消耗)(\d*):(\d*)\]/
  21.         lvmp_cost[$1.to_i] = $2.to_i if $1 and $2
  22.       end
  23.       }
  24.       lvmp_cost[maxlv] = lvmp_cost[lvmp_cost.keys.sort[-1]]
  25.       return get_value($game_temp.skill_level, lvmp_cost)
  26.     else
  27.       return @mp_cost
  28.     end
  29.   end
  30. end
  31. class Game_Actor < Game_Battler
  32.   alias skill_level_calc_hit calc_hit
  33.   alias skill_level_calc_mp_cost calc_mp_cost
  34.   def calc_hit(user, obj = nil)
  35.     $game_temp.skill_level = @skill_level[obj.id]
  36.     skill_level_calc_hit(user, obj)
  37.   end
  38.   def calc_mp_cost(skill)
  39.     $game_temp.skill_level = @skill_level[skill.id]
  40.     skill_level_calc_mp_cost(skill)
  41.   end
  42. end
复制代码


2. 修改效果
    使用方法:
      [scopeN:M]、[范围N:M]、[範圍N:M] 代表此技能在N级时,范围为M
      至於什麽数字代表什麽范围,自己去查F1
      [speedN:M]、[速度N:M]  代表此技能在N级时,速度补正值为 M
      [base_damageN:M]、[基本伤害N:M]、[基本伤害N:M]  代表此技能在N级时,基本伤害为 M
      [varianceN:M]、[分散度N:M]  代表此技能在N级时,分散度为 M
      [atk_fN:M]、[攻关N:M]、[攻關N:M]  代表此技能在N级时,攻击关係度为 M
      [spi_fN:M]、[精关N:M]、[精關N:M]  代表此技能在N级时,精神关系度为 M

  1. class RPG::Skill < RPG::UsableItem
  2.   def scope
  3.     if self.lvup?
  4.       lvscope = {0=>@scope}
  5.       self.note.split(/[\r\n]+/).each { |line|
  6.       if line =~ /\[(?:scope|範圍|范围)(\d*):(\d*)\]/
  7.         lvscope[$1.to_i] = $2.to_i if $1 and $2
  8.       end
  9.       }
  10.       lvscope[maxlv] = lvscope[lvscope.keys.sort[-1]]
  11.       @scope = get_value($game_temp.skill_level, lvscope)
  12.       return @scope
  13.     else
  14.       return @scope
  15.     end
  16.   end
  17.   def speed
  18.     if self.lvup?
  19.       lvspeed = {0=>@speed}
  20.       self.note.split(/[\r\n]+/).each { |line|
  21.       if line =~ /\[(?:speed|速度)(\d*):(\d*)\]/
  22.         lvspeed[$1.to_i] = $2.to_i if $1 and $2
  23.       end
  24.       }
  25.       lvspeed[maxlv] = lvspeed[lvspeed.keys.sort[-1]]
  26.       @speed = get_value($game_temp.skill_level, lvspeed)
  27.       return @speed
  28.     else
  29.       return @speed
  30.     end
  31.   end
  32.   def base_damage
  33.     if self.lvup?
  34.       lvbase_damage = {0=>@base_damage}
  35.       self.note.split(/[\r\n]+/).each { |line|
  36.       if line =~ /\[(?:base_damage|基本傷害|基本伤害)(\d*):(\d*)\]/
  37.         lvbase_damage[$1.to_i] = $2.to_i if $1 and $2
  38.       end
  39.       }
  40.       lvbase_damage[maxlv] = lvbase_damage[lvbase_damage.keys.sort[-1]]
  41.       @base_damage = get_value($game_temp.skill_level, lvbase_damage)
  42.       return @base_damage
  43.     else
  44.       return @base_damage
  45.     end
  46.   end
  47.   def variance
  48.     if self.lvup?
  49.       lvvariance = {0=>@variance}
  50.       self.note.split(/[\r\n]+/).each { |line|
  51.       if line =~ /\[(?:variance|分散度)(\d*):(\d*)\]/
  52.         lvvariance[$1.to_i] = $2.to_i if $1 and $2
  53.       end
  54.       }
  55.       lvvariance[maxlv] = lvvariance[lvvariance.keys.sort[-1]]
  56.       @variance = get_value($game_temp.skill_level, lvvariance)
  57.       return @variance
  58.     else
  59.       return @variance
  60.     end
  61.   end
  62.   def atk_f
  63.     if self.lvup?
  64.       lvatk_f = {0=>@atk_f}
  65.       self.note.split(/[\r\n]+/).each { |line|
  66.       if line =~ /\[(?:atk_f|攻關|攻关)(\d*):(\d*)\]/
  67.         lvatk_f[$1.to_i] = $2.to_i if $1 and $2
  68.       end
  69.       }
  70.       lvatk_f[maxlv] = lvatk_f[lvatk_f.keys.sort[-1]]
  71.       @atk_f = get_value($game_temp.skill_level, lvatk_f)
  72.       return @atk_f
  73.     else
  74.       return @atk_f
  75.     end
  76.   end
  77.   def spi_f
  78.     if self.lvup?
  79.       lvspi_f = {0=>@spi_f}
  80.       self.note.split(/[\r\n]+/).each { |line|
  81.       if line =~ /\[(?:spi_f|精關|精关)(\d*):(\d*)\]/
  82.         lvspi_f[$1.to_i] = $2.to_i if $1 and $2
  83.       end
  84.       }
  85.       lvspi_f[maxlv] = lvspi_f[lvspi_f.keys.sort[-1]]
  86.       @spi_f = get_value($game_temp.skill_level, lvspi_f)
  87.       return @spi_f
  88.     else
  89.       return @spi_f
  90.     end
  91.   end
  92. end
复制代码


3. 技能树
    技能的前置技能设定: [prereqN:M]、[需要技能N:M]
    则该技能需要 M 级的 N 号技能

    召唤场景:$scene = Scene_Skill_Learn.new(队员索引)

  1. class RPG::Skill < RPG::UsableItem
  2.   def skill_req
  3.     id = 0
  4.     lv = 0
  5.     self.note.split(/[\r\n]+/).each { |line|
  6.                                        # ID   等级
  7.       if line =~ /\[(?:prereq|需要技能)(\d*):(\d*)\]/
  8.         id = $1.to_i
  9.         lv = $2.to_i
  10.       end
  11.     }
  12.     return id, lv
  13.   end
  14. end
  15. class Game_Actor < Game_Battler
  16.   alias skill_tree_learn_skill learn_skill
  17.   def skill_can_learn?(skill_id)
  18.     skill = $data_skills[skill_id]
  19.     sid, slv = skill.skill_req
  20.     return true if sid == 0
  21.     return false unless @skill_level.include?(sid)
  22.     return @skill_level[sid] >= slv
  23.   end
  24.   def learn_skill(skill_id)
  25.     return unless skill_can_learn?(skill_id)
  26.     skill_tree_learn_skill(skill_id)
  27.   end
  28. end
  29. class Window_Skill_Learn < Window_Skill
  30.   def refresh
  31.     @data = []
  32.     skills = []
  33.     for s in @actor.class.learnings
  34.       skills << s.skill_id
  35.     end
  36.     skills.sort!
  37.     for s in skills
  38.       @data.push($data_skills[s])
  39.     end
  40.     @item_max = @data.size
  41.     create_contents
  42.     for i in 0...@item_max
  43.       draw_item(i)
  44.     end
  45.   end
  46.   def draw_item(index)
  47.     rect = item_rect(index)
  48.     self.contents.clear_rect(rect)
  49.     skill = @data[index]
  50.     if skill != nil
  51.       rect.width -= 4
  52.       enabled = @actor.skill_can_learn?(@data[index].id)
  53.       draw_item_name(skill, rect.x, rect.y, enabled)
  54.     end
  55.   end
  56.   def update_help
  57.     skill_id_req, skill_lv_req = skill.skill_req
  58.     if skill_id_req > 0
  59.       skill_req = $data_skills[skill_id_req].name
  60.       text = skill.description+" 需要#{skill_req} 等级:#{skill_lv_req}"
  61.     else
  62.       text = skill.description
  63.     end
  64.     @help_window.set_text(skill == nil ? "" : text)
  65.   end
  66. end
  67. class Scene_Skill_Learn < Scene_Base
  68.   def initialize(actor_index = 0)
  69.     @actor_index = actor_index
  70.   end
  71.   def start
  72.     super
  73.     create_menu_background
  74.     @actor = $game_party.members[@actor_index]
  75.     @viewport = Viewport.new(0, 0, 544, 416)
  76.     @help_window = Window_Help.new
  77.     @help_window.viewport = @viewport
  78.     @skill_window = Window_Skill_Learn.new(0, 56, 544, 360, @actor)
  79.     @skill_window.viewport = @viewport
  80.     @skill_window.help_window = @help_window
  81.   end
  82.   def update
  83.     @skill_window.update
  84.     @viewport.update
  85.     @help_window.update
  86.     if @skill_window.active
  87.       update_skill_selection
  88.     end
  89.   end
  90.   def terminate
  91.     super
  92.     dispose_menu_background
  93.     @help_window.dispose
  94.     @skill_window.dispose
  95.   end
  96.   def update_skill_selection
  97.     if Input.trigger?(Input::B)
  98.       Sound.play_cancel
  99.       $scene = Scene_Map.new
  100.     elsif Input.trigger?(Input::C)
  101.       @skill = @skill_window.skill
  102.       if @skill != nil
  103.         @actor.last_skill_id = @skill.id
  104.       end
  105.       if @actor.skill_can_learn?(@skill.id)
  106.         Sound.play_decision
  107.         # 如果需要消耗任何东西,在这里添加
  108.         
  109.         # 判断角色是否已经学会技能
  110.         if @actor.skill_learn?(@skill)
  111.           # 若已学会技能,则将该技能升级
  112.           @actor.skill_level_up(@skill.id)
  113.         else
  114.           # 若未学会技能,则添加该技能
  115.           @actor.learn_skill(@skill.id)
  116.         end
  117.       else
  118.         Sound.play_buzzer
  119.       end
  120.       @skill_window.refresh
  121.     end
  122.   end
  123. end
复制代码
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

kissye的宠物<

梦石
0
星屑
61
在线时间
1563 小时
注册时间
2008-8-11
帖子
6174

贵宾

3
发表于 2008-10-24 16:45:10 | 只看该作者
恩……省去了很多公共事件………
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
12 小时
注册时间
2007-3-15
帖子
102
4
发表于 2008-10-24 18:51:24 | 只看该作者
{/fd}

联动帖!……可以让白板武器慢慢升级了!

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-24
帖子
11
5
发表于 2008-10-24 18:57:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

6
发表于 2008-10-24 19:26:35 | 只看该作者
kissye也有一个技能升级脚本...不知道有什么区别,看看
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

7
发表于 2008-10-24 19:27:53 | 只看该作者
以下引用风雪优游于2008-10-24 11:26:35的发言:

kissye也有一个技能升级脚本...不知道有什么区别,看看


升级后效果有什么变化呢- -
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-8
帖子
466
8
发表于 2008-10-24 20:01:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

9
发表于 2008-10-24 20:30:56 | 只看该作者
出现错误= =

# 判斷技能所需熟練度
  def use_exp; return (100 / times_used_to_lvup);end

有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

10
 楼主| 发表于 2008-10-24 20:42:28 | 只看该作者
什麼錯誤
錯誤訊息是什麼??
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 15:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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