Project1
标题:
求 一种技能设计思路,根据状态附加属性
[打印本页]
作者:
enitsirhc
时间:
2015-7-25 07:03
标题:
求 一种技能设计思路,根据状态附加属性
RT,我想设计一种技能A,当技能B发动的时候同时角色自身附加状态A,然后当角色以状态A的情况下发动技能A,那么技能A将自动附加属性A,当状态A解除后,该技能附加的属性A也一同消失,请问该如何实现呢
作者:
芯☆淡茹水
时间:
2015-7-25 10:16
本帖最后由 芯☆淡茹水 于 2015-7-28 20:59 编辑
在战斗之外使用无效。
class Game_Battler
SKILL_A_ID = [58,59] #能状态附加属性的技能ID.
STATE_A_ID = 17 #状态A ID.
ELEMENT_ID = 9 #属性A ID.
def skill_element_set(skill)
add = ($scene.is_a?(Scene_Battle) and self.current_action.kind == 1 and
state?(STATE_A_ID) and SKILL_A_ID.include?(self.current_action.skill_id)) ? [ELEMENT_ID] : []
return skill.element_set | add
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 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(user.skill_element_set(skill))
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
# 防御修正
if self.guarding?
self.damage /= 2
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
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
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
end
复制代码
作者:
enitsirhc
时间:
2015-7-25 11:21
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。
分别用RTAB战斗系统和默认战斗系统测试过了,貌似没什么效果啊……
我的用法就是直接修改您注释的那三个ID数字,作为外挂脚本放在main前,难道我的用法错了吗……
作者:
enitsirhc
时间:
2015-7-25 20:00
芯☆淡茹水 发表于 2015-7-25 10:16
在战斗之外使用无效。
默认战斗系统测试下来可行,咱回头再自行试试改写进RTAB系统里~谢谢芯大~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1