赞 | 9 |
VIP | 15 |
好人卡 | 15 |
积分 | 17 |
经验 | 25000 |
最后登录 | 2024-5-31 |
在线时间 | 485 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1743
- 在线时间
- 485 小时
- 注册时间
- 2006-1-7
- 帖子
- 1073
|
- #----------------------------------------------------------------------------
- #崩击 By凌冰
- #用法很简单,先在系统里设置属性“崩击”,属性ID无所谓,但名称必须为“崩击”
- #你需要有崩击功能的武器、技能、物品钩上“崩击”
- #武器崩击默认是若敌人防御,崩击,伤害加倍,不崩击伤害加半(也就是默认的防御)
- #若敌人不防御,崩击,伤害减半
- #技能(攻击型技能)和物品(攻击型物品——HP回复率、回复量小于0)崩击,默认的是
- #若敌人防御,崩击,伤害加倍,不崩击伤害加半(也就是默认的防御)
- #若敌人不防御,崩击,"Miss"
- #version 1.01
- #这个版本里我按 精灵使者 的要求对崩击的比率进行了修改,但是武器
- #的没有修改,对技能和物品的修改,比率=1+命中率/25
- #因为如果对方防御,崩击物品和技能再不命中的话就没意义了,所以我设置的是如果对方
- #防御只要是崩击物品和技能都会命中,这样,崩击物品和技能的命中率的设置就空出来了
- #正巧设置崩击比率
- #武器的崩击比率还是2,因为武器在战斗中是始终装备的,不像武器和物品是可以选择的
- #实在没必要过分强调崩击的作用
- #version 1.02
- #这个版本里我再次按 精灵使者 的要求对崩击命中的动画进行了调整,再下面设定
- $崩击命中动画 = 78
- #默认的是1号动画(汗!),至于那个“那个华丽的崩击光环”,我想就不关我的事了
- #自己做动画吧
- #version 1.03
- #这个版本里,我又再次按 精灵使者 的要求对崩击命中时是否显示必杀符号进行了调整
- #在下面设定,这个……见仁见智吧
- $崩击成功时是否显示必杀符号 = true
- #version 1.04
- #这个版本里,我对武器的崩击比率也进行了修改,比率在武器说明里里添加GBR比率
- #(后面的比率写个数字),崩击比率就等于GBR后面跟的数字
- #----------------------------------------------------------------------------
- module RPG
- class Weapon
- def guard_break_rate
- return 2 if @description.split(/GBR/)[1] == nil
- return @description.split(/GBR/)[1].to_i
- end
- def description
- @description.split(/GBR/)[0]+"崩击比率:"+guard_break_rate.to_s if @description.split(/GBR/)[1] != nil
- end
- end
- end
- class Game_Actor
- def guard_break_rate
- weapon = $data_weapons[@weapon_id]
- return weapon != nil ? weapon.guard_break_rate : 2
- end
- end
- class Game_Battler
- attr_writer :guard_break_rate
- attr_accessor :guarding_break
- def get_guard_break_id
- if @guard_break_element_id == nil
- result = nil
- for i in 1 ... $data_system.elements.size
- if $data_system.elements[i] == "崩击"
- result = i
- break
- end
- end
- @guard_break_element_id = result
- end
- return @guard_break_element_id
- end
-
- def attack_effect(attacker)
- # 清除会心一击标志
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中的情况下
- if attacker.element_set.include?(get_guard_break_id)
- hit_result = true
- end
- if hit_result == true
- # 计算基本伤害
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (20 + attacker.str) / 20
- # 属性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 会心一击修正
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- # 防御修正
- if self.guarding?
- if attacker.element_set.include?(get_guard_break_id)#eci 崩击
- self.damage *= attacker.guard_break_rate
- self.critical = $崩击成功时是否显示必杀符号
-
- self.guarding_break = true
- else
- self.damage /= 2
- end
- else
- if attacker.element_set.include?(get_guard_break_id)#eci 崩击
- self.damage /= 2
- self.guarding_break= false
- end
- end
- end
- # 分散
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / attacker.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # 命中的情况下
- if hit_result == true
- # 状态冲击解除
- remove_states_shock
- # HP 的伤害计算
- self.hp -= self.damage.to_i
- # 状态变化
- @state_changed = false
- states_plus(attacker.plus_state_set)
- states_minus(attacker.minus_state_set)
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- # 清除会心一击标志
- self.critical = false
- end
- # 过程结束
- return true
- end
- def skill_effect(user, skill)
- # 清除会心一击标志
- self.critical = false
- # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
- ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
- # 过程结束
- return false
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= skill.common_event_id > 0
- # 第一命中判定
- hit = skill.hit
- if skill.atk_f > 0
- hit *= user.hit / 100
- end
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- # 命中的情况下
- if skill.element_set.include?(get_guard_break_id)
- hit_result = true
- end
- if hit_result == true
- # 计算威力
- power = skill.power + user.atk * skill.atk_f / 100
- if power > 0
- power -= self.pdef * skill.pdef_f / 200
- power -= self.mdef * skill.mdef_f / 200
- power = [power, 0].max
- end
- # 计算倍率
- rate = 20
- rate += (user.str * skill.str_f / 100)
- rate += (user.dex * skill.dex_f / 100)
- rate += (user.agi * skill.agi_f / 100)
- rate += (user.int * skill.int_f / 100)
- # 计算基本伤害
- self.damage = power * rate / 20
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 防御修正
- if self.guarding?
- if skill.element_set.include?(get_guard_break_id)#eci 崩击
- self.damage *= (1+skill.hit/25)
- self.critical = $崩击成功时是否显示必杀符号
- self.guarding_break = true
- else
- self.damage /= 2
- end
- else
- if skill.element_set.include?(get_guard_break_id)
- self.guarding_break = false
- end
- end
- end
- # 分散
- if skill.variance > 0 and self.damage.abs > 0
- amp = [self.damage.abs * skill.variance / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / user.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- if skill.element_set.include?(get_guard_break_id)
- if self.guarding_break == true
- hit_result = true
-
- else
- hit_result = false
- end
- end
- end
- # 命中的情况下
- if hit_result == true
-
- # 威力 0 以外的物理攻击的情况下
- if skill.power != 0 and skill.atk_f > 0
- # 状态冲击解除
- remove_states_shock
- # 设置有效标志
- effective = true
- end
- # HP 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage.to_i
- effective |= self.hp != last_hp
- # 状态变化
- @state_changed = false
- effective |= states_plus(skill.plus_state_set)
- effective |= states_minus(skill.minus_state_set)
- # 威力为 0 的场合
- if skill.power == 0
- # 伤害设置为空的字串
- self.damage = ""
- # 状态没有变化的情况下
- unless @state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless $game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- def item_effect(item)
- # 清除会心一击标志
- self.critical = false
- # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
- ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
- # 过程结束
- return false
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= item.common_event_id > 0
- # 命中判定
- hit_result = (rand(100) < item.hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= item.hit < 100
- if item.element_set.include?(get_guard_break_id)
- hit_result = true
- end
- # 命中的情况
- if hit_result == true
- # 计算回复量
- recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
- recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
- if recover_hp < 0
- recover_hp += self.pdef * item.pdef_f / 20
- recover_hp += self.mdef * item.mdef_f / 20
- recover_hp = [recover_hp, 0].min
- end
- # 属性修正
- recover_hp *= elements_correct(item.element_set)
- recover_hp /= 100
- recover_sp *= elements_correct(item.element_set)
- recover_sp /= 100
- # 分散
- if item.variance > 0 and recover_hp.abs > 0
- amp = [recover_hp.abs * item.variance / 100, 1].max
- recover_hp += rand(amp+1) + rand(amp+1) - amp
- end
- if item.variance > 0 and recover_sp.abs > 0
- amp = [recover_sp.abs * item.variance / 100, 1].max
- recover_sp += rand(amp+1) + rand(amp+1) - amp
- end
- # 回复量符号为负的情况下
- if recover_hp < 0
- # 防御修正
- if self.guarding?
- if item.element_set.include?(get_guard_break_id)
- recover_hp *= (1+item.hit/25)
- self.critical = $崩击成功时是否显示必杀符号
- self.guarding_break = true
- else
- recover_hp /= 2
- end
- else
- if item.element_set.include?(get_guard_break_id)
- recover_hp = 0
- self.guarding_break = false
- end
- end
- end
-
- # HP 回复量符号的反转、设置伤害值
- self.damage = "Miss"
- self.damage = -recover_hp
- # HP 以及 SP 的回复
- last_hp = self.hp
- last_sp = self.sp
- self.hp += recover_hp
- self.sp += recover_sp
- effective |= self.hp != last_hp
- effective |= self.sp != last_sp
- # 状态变化
- @state_changed = false
- effective |= states_plus(item.plus_state_set)
- effective |= states_minus(item.minus_state_set)
- # 能力上升值有效的情况下
- if item.parameter_type > 0 and item.parameter_points != 0
- # 能力值的分支
- case item.parameter_type
- when 1 # MaxHP
- @maxhp_plus += item.parameter_points
- when 2 # MaxSP
- @maxsp_plus += item.parameter_points
- when 3 # 力量
- @str_plus += item.parameter_points
- when 4 # 灵巧
- @dex_plus += item.parameter_points
- when 5 # 速度
- @agi_plus += item.parameter_points
- when 6 # 魔力
- @int_plus += item.parameter_points
- end
- # 设置有效标志
- effective = true
- end
- if item.element_set.include?(get_guard_break_id)
- if self.guarding_break == false
- self.damage = "Miss"
- end
- end
- # HP 回复率与回复量为 0 的情况下
- if item.recover_hp_rate == 0 and item.recover_hp == 0
- # 设置伤害为空的字符串
- self.damage = ""
- # SP 回复率与回复量为 0、能力上升值无效的情况下
- if item.recover_sp_rate == 0 and item.recover_sp == 0 and
- (item.parameter_type == 0 or item.parameter_points == 0)
-
- # 状态没有变化的情况下
- unless @state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
-
- end
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless $game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- end
- class Scene_Battle
- alias eci_update_phase4_step4 update_phase4_step4
- def update_phase4_step4
- # 对像方动画
- eci_update_phase4_step4
- for target in @target_battlers
- target.animation_id = @animation2_id
- target.animation_hit = (target.damage != "Miss")
- if target.guarding_break
- target.animation_id = $崩击命中动画
- end
- end
- # 限制动画长度、最低 8 帧
- @wait_count = 8
- # 移至步骤 5
- @phase4_step = 5
- end
- end
复制代码 各位可以插入脚本,运行游戏之后,看一下物品,物品和防具没问题,但是光标移到 武器的时候,就会发生错误。
提示错误的位置居然是windows_help第二十六行- self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
复制代码 如果把其中的 text 改成 text.to_s 的话,那么武器的说明文字就是空白的了。
希望高手指点一二,能告诉告诉我哪个位置大概什么问题也行。我可以尝试自己修改一下。 |
|