| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2013-8-2 |
| 在线时间 | 9 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 9 小时
- 注册时间
- 2013-7-22
- 回帖
- 35
|
楼主 |
发表于 2013-7-28 21:01:14
|
显示全部楼层
- module Snstar2006
-
- module Skill_LvUp
-
- SKILL_LVUP_NO_FORGET = false # 升级时不遗忘旧技能
-
- SKILL_MANUAL_LVUP = false # 手动升级
-
- SKILL_RES_EXP_BASE = 2 # 升级点数基数,数字越大,获得越少
-
- SKILL_MAN_LVUP_KEY = :X # 手动升级的按键设定
-
-
- SKILL_EXP_VOCAB = "熟练度" # 技能熟练度术语
-
- SKILL_REXP_VOCAB = "精元点数" # 技能提升点数术语
-
- end
-
- end
-
- class RPG::Skill < RPG::UsableItem
-
- include Snstar2006::Skill_LvUp
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能最高等级
-
- #--------------------------------------------------------------------------
-
- def get_max_skill
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:max_level) (\d+)\]/
-
- return $1 ? $1.to_i : 1
-
- end}
-
- return 1
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能熟练度基数
-
- #--------------------------------------------------------------------------
-
- def get_exp_base
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:exp_base) (\d+)\]/
-
- return $1 ? $1.to_i : 30
-
- end}
-
- return 30
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能吸收角色经验值作为熟练度的基础值
-
- #--------------------------------------------------------------------------
-
- def get_exp_part
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:exp_part) (\d+)\]/
-
- return $1 ? $1.to_i : 0
-
- end}
-
- return 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能使用时获取的熟练度
-
- #--------------------------------------------------------------------------
-
- def get_use_exp
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:use_exp) (\d+)\]/
-
- return $1 ? $1.to_i : 1
-
- end}
-
- return 1
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能升级后变化的技能
-
- #--------------------------------------------------------------------------
-
- def get_on_level(level)
-
- trans_skill_id = 0
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:on_level) (\d+)\,(\d+)\]/
-
- trans_skill_id = $2.to_i if level == $1.to_i
-
- end}
-
- return trans_skill_id
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能升级后变化的技能
-
- #--------------------------------------------------------------------------
-
- def get_inherit
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:inherit) (\d+)\]/
-
- return $1 ? $1.to_i : 0
-
- end}
-
- return 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否升级后遗忘
-
- #--------------------------------------------------------------------------
-
- def no_forget?
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:no_forget)\]/
-
- return true
-
- end}
-
- return false
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能升级后变化的伤害值基数
-
- #--------------------------------------------------------------------------
-
- def get_dmg_var
-
- self.note.split(/[\r\n]+/).each{ |line|
-
- if line =~ /\[(?:dmg_var) (\d+)\]/
-
- return $1 ? $1.to_i : 0
-
- end}
-
- return 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否能升级
-
- #--------------------------------------------------------------------------
-
- def can_lvup?
-
- skill_level_initialize # 技能等级初始化
-
- return @max_level > 1
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否获取角色经验当作熟练度
-
- #--------------------------------------------------------------------------
-
- def get_exp_from_actor?
-
- return false unless can_lvup?
-
- return @get_exp > 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否手动升级
-
- #--------------------------------------------------------------------------
-
- def manual_lvup?
-
- return false unless can_lvup?
-
- return false if transformed
-
- return true if SKILL_MANUAL_LVUP
-
- return false if get_exp_from_actor?
-
- return false if lvup_by_use?
-
- return true
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否在使用时提升熟练度
-
- #--------------------------------------------------------------------------
-
- def lvup_by_use?
-
- return false unless can_lvup?
-
- return @use_exp > 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否继承任何技能设定
-
- #--------------------------------------------------------------------------
-
- def inherit?
-
- @transform_from = get_inherit
-
- return @transform_from > 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 技能等级参数初始化
-
- #--------------------------------------------------------------------------
-
- def skill_level_initialize
-
- return if @skill_level_initialized # 已初始化时跳过
-
- @max_level = get_max_skill
-
- @get_exp = get_exp_part
-
- @use_exp = get_use_exp
-
- @skill_level_initialized = true
-
- initialize_skill_transform
-
- @transformed = false
-
- @transform_from = 0
-
- @dmg_var = get_dmg_var
-
- @fml_altered = false
-
- if @dmg_var > 0
-
- $game_variables[@dmg_var]=1
-
- end
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 技能等级参数继承
-
- #--------------------------------------------------------------------------
-
- def skill_level_inherit
-
- return unless inherit? # 已设定继承时跳过
-
- old_skill = $data_skills[@transform_from]
-
- @max_level = old_skill.get_max_skill
-
- @get_exp = old_skill.get_exp_part
-
- @use_exp = old_skill.get_use_exp
-
- initialize_skill_transform
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能吸取角色经验值的基数
-
- #--------------------------------------------------------------------------
-
- def exp_from_actor
-
- return @get_exp
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 技能变化资讯初始化
-
- #--------------------------------------------------------------------------
-
- def initialize_skill_transform
-
- @skill_transform = []
-
- 1.upto(@max_level){ |level|
-
- t_id = get_on_level(level)
-
- if t_id > 0
-
- @skill_transform = [level, t_id]
-
- break
-
- end
-
- }
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断技能是否会变化
-
- #--------------------------------------------------------------------------
-
- def transform?
-
- return !@skill_transform.empty?
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断技能是否会在某等级变化
-
- #--------------------------------------------------------------------------
-
- def transform_at?(level)
-
- return false unless transform?
-
- return @skill_transform[0] == level
-
- end
-
- def transform_at
-
- return @skill_transform[0]
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能变化后的技能ID
-
- #--------------------------------------------------------------------------
-
- def transform_to(level)
-
- return 0 unless transform_at?(level)
-
- return @skill_transform[1]
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断技能是否有指定伤害变量
-
- #--------------------------------------------------------------------------
-
- def dmg_var?
-
- return @dmg_var>0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断技能是否已修改公式
-
- #--------------------------------------------------------------------------
-
- def fml_altered?
-
- return @fml_altered
-
- end
-
- attr_reader :max_level # 获取最高等级
-
- attr_reader :use_exp # 使用提升熟练度量
-
- attr_accessor :transformed # 已变化技能
-
- attr_accessor :fml_altered # 已修改公式
-
- attr_reader :dmg_var # 升级提升伤害的变量ID
-
- end
-
- class Game_Actor < Game_Battler
-
- include Snstar2006::Skill_LvUp
-
- #--------------------------------------------------------------------------
-
- # ● 初始化
-
- #--------------------------------------------------------------------------
-
- alias skill_level_initialize initialize
-
- def initialize(actor_id)
-
- @skill_level = {} # 纪录技能等级
-
- @skill_exp = {} # 记录技能熟练度
-
- @skill_exp_base = {} # 记录技能熟练度基数
-
- @skill_next_exp = {} # 记录技能下一级熟练度
-
- @skill_dmg_val = {} # 纪录技能伤害变化的变量ID
-
- @skill_res_exp = 0 # 纪录获取的技能升级点数
-
- skill_level_initialize(actor_id)
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色习得技能
-
- #--------------------------------------------------------------------------
-
- alias skill_level_learn_skill learn_skill
-
- def learn_skill(skill_id)
-
- skill_level_learn_skill(skill_id)
-
- skill = $data_skills[skill_id]
-
- if skill.can_lvup? # 判断技能是否可升级
-
- @skill_level[skill_id] = 1
-
- @skill_exp[skill_id] = 0
-
- @skill_exp_base[skill_id] = skill.get_exp_base
-
- @skill_next_exp[skill_id] = @skill_exp_base[skill_id]
-
- if skill.dmg_var?
-
- @skill_dmg_val[skill_id] = skill.dmg_var+@actor_id-1
-
- alter_damage_formula(skill_id)
-
- end
-
- end
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 修改伤害公式
-
- #--------------------------------------------------------------------------
-
- def alter_damage_formula(skill_id)
-
- skill = $data_skills[skill_id]
-
- return if skill.fml_altered? # 已修改时返回
-
- formula = skill.damage.formula # 获取公式
-
- dmg_var_id = @skill_dmg_val[skill_id]
-
- skill.damage.formula = "(#{formula})*v[#{dmg_var_id}]"
-
- skill.fml_altered = true # 标记为已修改
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断技能是否能升级
-
- #--------------------------------------------------------------------------
-
- def skill_can_lvup?(skill_id)
-
- return false unless $data_skills[skill_id].can_lvup? # 技能不可升级
-
- return false unless @skills.include?(skill_id) # 角色未学习此技能
-
- return @skill_level[skill_id] < max_skill_level(skill_id) # 技能未达最高等级
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能最高等级
-
- #--------------------------------------------------------------------------
-
- def max_skill_level(skill_id)
-
- return $data_skills[skill_id].max_level
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能等级
-
- #--------------------------------------------------------------------------
-
- def skill_level(skill_id)
-
- return 1 unless $data_skills[skill_id].can_lvup?
-
- return @skill_level[skill_id]
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能下一级熟练度
-
- #--------------------------------------------------------------------------
-
- def skill_next_exp(skill_id)
-
- return 0 unless skill_can_lvup?(skill_id)
-
- return @skill_next_exp[skill_id]
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获取技能当前熟练度
-
- #--------------------------------------------------------------------------
-
- def skill_exp(skill_id)
-
- return 0 unless skill_can_lvup?(skill_id)
-
- return @skill_exp[skill_id]
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色获得经验值
-
- #--------------------------------------------------------------------------
-
- alias skill_level_gain_exp gain_exp
-
- def gain_exp(exp)
-
- skill_level_gain_exp(exp)
-
- gain_skill_res_exp(exp/SKILL_RES_EXP_BASE)
-
- @skills.each{ |id|
-
- skill = $data_skills[id]
-
- if skill.get_exp_from_actor? # 技能是否吸收经验值
-
- skill_exp = (exp.to_f / skill.exp_from_actor).ceil
-
- gain_skill_exp(id, skill_exp) # 技能提升熟练度
-
- end
-
- }
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色获得技能熟练度
-
- #--------------------------------------------------------------------------
-
- def gain_skill_exp(skill_id, val)
-
- return unless skill_can_lvup?(skill_id)
-
- skill = $data_skills[skill_id]
-
- return if skill.transformed
-
- return if val == 0
-
- @skill_exp[skill_id] += val
-
- if @skill_exp[skill_id] >= @skill_next_exp[skill_id]
-
- skill_lvup(skill_id)
-
- end
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 使用技能提升熟练度
-
- #--------------------------------------------------------------------------
-
- def gain_skill_exp_by_use(skill)
-
- @gain_skill_exp = 0
-
- if skill.is_a?(RPG::Skill) and skill.lvup_by_use?
-
- @gain_skill_exp = skill.use_exp
-
- end
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色获得技能提升点数
-
- #--------------------------------------------------------------------------
-
- def gain_skill_res_exp(val)
-
- @skill_res_exp += val
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 返回角色的技能提升点数
-
- #--------------------------------------------------------------------------
-
- def res_exp
-
- return @skill_res_exp
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 判断是否能手动升级
-
- #--------------------------------------------------------------------------
-
- def can_lv_skill_manually?(skill)
-
- return false unless skill.manual_lvup?
-
- return @skill_res_exp > 0
-
- end
-
- def has_dmg_var?(skill_id)
-
- return @skill_dmg_val.keys.include?(skill_id)
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 手动提升熟练度
-
- #--------------------------------------------------------------------------
-
- def gain_skill_exp_manual(skill_id)
-
- skill = $data_skills[skill_id]
-
- return unless skill.manual_lvup?
-
- val = [@skill_next_exp[skill_id], @skill_res_exp].min
-
- @skill_res_exp -= val
-
- gain_skill_exp(skill_id, val)
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 计算使用技能后提升的最终熟练度
-
- #--------------------------------------------------------------------------
-
- def gain_skill_final_exp_by_use(skill, hit)
-
- return if @gain_skill_exp < 1
-
- @gain_skill_exp /= 2 unless hit # 若是技能落空则熟练度减半
-
- gain_skill_exp(skill.id, @gain_skill_exp)
-
- @gain_skill_exp = 0
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色使用技能,技能获得熟练度
-
- #--------------------------------------------------------------------------
-
- alias skill_level_use_item use_item
-
- def use_item(item)
-
- skill_level_use_item(item)
-
- gain_skill_exp_by_use(item)
- end
-
- #--------------------------------------------------------------------------
-
- # ● 角色技能升级
-
- #--------------------------------------------------------------------------
-
- def skill_lvup(skill_id, val=1)
-
- return unless skill_can_lvup?(skill_id)
-
- return if $data_skills[skill_id].transformed
-
- temp_level = @skill_level[skill_id] + val
-
- max_level = max_skill_level(skill_id)
-
- @skill_level[skill_id] = [temp_level, max_level].min
-
- level = @skill_level[skill_id]
-
- @skill_exp[skill_id] -= @skill_next_exp[skill_id]
-
- @skill_exp[skill_id] = [@skill_exp[skill_id], 0].max
-
- @skill_next_exp[skill_id] = @skill_exp_base[skill_id] * factorial(level)
-
- if has_dmg_var?(skill_id)
-
- dmg_var_id = @skill_dmg_val[skill_id]
-
- $game_variables[dmg_var_id] = 1+(level.to_f/max_level)
-
- end
-
- process_skill_transform(skill_id, level)
-
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 计算技能伤害
-
- #--------------------------------------------------------------------------
-
- alias skill_level_make_damage_value make_damage_value
-
- def make_damage_value(user, item)
-
- skill_level_make_damage_value(user, item) # 呼叫原有方法
-
- end
-
- def process_skill_transform(skill_id, level)
-
- skill = $data_skills[skill_id]
-
- return unless skill.transform_at?(level) # 判断技能是否在这个等级变化
-
- new_skill_id = skill.transform_to(level) # 获取变化后的技能ID
-
- skill.transformed = true
-
- learn_skill(new_skill_id) # 学习新技能
-
-
- # 将旧技能的等级、熟练度、熟练度基数、下一级熟练度转移到新技能下
-
- $data_skills[new_skill_id].skill_level_inherit # 变化后的技能设定
-
- @skill_level[new_skill_id] = @skill_level[skill_id]
-
- @skill_exp[new_skill_id] = @skill_exp[skill_id]
-
- @skill_exp_base[new_skill_id] = skill.get_exp_base
-
- @skill_next_exp[new_skill_id] = @skill_next_exp[skill_id]
-
- @skill_dmg_val[new_skill_id] = @skill_dmg_val[skill_id]
-
- alter_damage_formula(new_skill_id) # 调整伤害公式
-
-
- if SKILL_LVUP_NO_FORGET or skill.no_forget? # 若是设定技能升级时不遗忘旧技能
-
- @skill_exp[new_skill_id] = 0 # 熟练度归零
-
- else
-
- forget_skill(skill_id) # 遗忘旧技能
-
- # 删除旧技能的等级、熟练度、熟练度基数、下一级熟练度
-
- @skill_level.delete(skill_id)
-
- @skill_exp.delete(skill_id)
-
- @skill_exp_base.delete(skill_id)
-
- @skill_next_exp.delete(skill_id)
-
- @skill_dmg_val.delete(skill_id)
-
- end
-
- end
-
- end
-
- class Game_Battler < Game_BattlerBase
-
- #--------------------------------------------------------------------------
-
- # ● 技能使用对象的效果应用
-
- #--------------------------------------------------------------------------
-
- alias skill_level_item_apply item_apply
-
- def item_apply(user, item)
-
- skill_level_item_apply(user, item) # 呼叫原有方法
-
- return unless item.is_a?(RPG::Skill) # 不是使用技能时返回
-
- return unless user.actor?
-
- user.gain_skill_final_exp_by_use(item, @result.hit?) # 计算最终熟练度
-
- end
-
- end
-
- class Game_Interpreter
-
- #--------------------------------------------------------------------------
-
- # ● 技能等级提升
-
- #--------------------------------------------------------------------------
-
- def gain_skill_level(actor_id, skill_id, value=1)
-
- $game_actors[actor_id].skill_lvup(skill_id, value)
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 获得技能升级点数
-
- #--------------------------------------------------------------------------
-
- def gain_res_exp(actor_id, value=1)
-
- $game_actors[actor_id].gain_skill_res_exp(value)
-
- end
-
- end
-
- #--------------------------------------------------------------------------
-
- # ● 计算阶乘(计算技能下一级熟练度使用)
-
- #--------------------------------------------------------------------------
-
- def factorial(val)
-
- if val <= 1
-
- return 1
-
- else
-
- return factorial(val-2) + factorial(val-1)
-
- end
-
- end
-
复制代码 |
|