赞 | 0 |
VIP | 1 |
好人卡 | 0 |
积分 | 1 |
经验 | 3179 |
最后登录 | 2013-10-25 |
在线时间 | 140 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 66
- 在线时间
- 140 小时
- 注册时间
- 2012-2-6
- 帖子
- 384
|
其实我觉得技能位这么多都用不上
不如这样- class RPG::Skill < RPG::UsableItem
- def get_exp_base
- self.note.split(/[\r\n]+/).each{ |line|
- if line =~ /\[(?:exp_base) (\d+)\]/
- p $1
- 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 can_lvup?
- skill_level_initialize
- return $skill_lvupskill[@id]!=nil
- end
- def get_exp_from_actor?
- return false unless can_lvup?
- return @get_exp > 0
- end
- def lvup_by_use?
- return false unless can_lvup?
- return @use_exp > 0
- end
- def skill_level_initialize
- return if @skill_level_initialized
- @get_exp = get_exp_part
- @use_exp = get_use_exp
- @skill_level_initialized = true
- end
- def exp_from_actor
- return @get_exp
- end
- attr_reader :max_level
- attr_reader :use_exp
- end
- class Game_Actor < Game_Battler
- alias skill_level_initialize initialize
- def initialize(actor_id)
- @skill_exp = {}
- @skill_exp_base = {}
- @skill_next_exp = {}
- $skill_lvupskill = []
- #比如说ID为5的技能的前置技能是ID为3的技能,后置技能是ID为7的技能。
- #升级后自动遗忘原先技能。
- #则写:
- #@skill_lvupskill[5] = [3,7,true]
- $skill_lvupskill[80] = [nil,82,true]
- 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_exp[skill_id] = 0
- @skill_exp_base[skill_id] = skill.get_exp_base
- @skill_next_exp[skill_id] = @skill_exp_base[skill_id]
- end
- end
- def skill_can_lvup?(skill_id)
- return false unless $data_skills[skill_id].can_lvup?
- return false unless @skills.include?(skill_id)
- return true
- 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)
- @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_exp[skill_id] += val
- while @skill_exp[skill_id] >= @skill_next_exp[skill_id]
- skill_lvup(skill_id)
- @skill_exp[skill_id] -= @skill_next_exp[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_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)
- return unless skill_can_lvup?(skill_id)
- forget_skill(skill_id) if $skill_lvupskill[skill_id][2]==true
- learn_skill($skill_lvupskill[skill_id][1]) unless $skill_lvupskill[skill_id][1]==nil
- end
- def skill_lvdown(skill_id)
- return unless skill_can_lvup?(skill_id)
- forget_skill(skill_id)
- learn_skill($skill_lvupskill[skill_id][0]) unless $skill_lvupskill[skill_id][0]==nil
- 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.is_a?(Game_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)
- value.times do
- $game_actors[actor_id].skill_lvup(skill_id)
- end
- end
- def lose_skill_level(actor_id, skill_id, value=1)
- value.times do
- $game_actors[actor_id].skill_lvdown(skill_id)
- end
- end
- end
复制代码 |
|