新增大量战斗效果逻辑实现,包括效果ID 678-708、734-743、744-748,并更新对应的效果描述映射。
This commit is contained in:
215
logic/service/fight/effect/734_738.go
Normal file
215
logic/service/fight/effect/734_738.go
Normal file
@@ -0,0 +1,215 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/action"
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
)
|
||||
|
||||
// Effect 734: 若对手不处于能力提升或下降状态时则恢复{0}点体力
|
||||
type Effect734 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect734) OnSkill() bool {
|
||||
if len(e.Args()) == 0 || e.Ctx().Opp.HasPropADD() || e.Ctx().Opp.HasPropSub() {
|
||||
return true
|
||||
}
|
||||
|
||||
e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Args()[0])
|
||||
return true
|
||||
}
|
||||
|
||||
// Effect 735: 若对手处于能力提升状态则下{0}回合先制+{1}
|
||||
type Effect735 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect735) Skill_Use() bool {
|
||||
if len(e.Args()) < 2 || !e.Ctx().Opp.HasPropADD() {
|
||||
return true
|
||||
}
|
||||
|
||||
effect := e.Ctx().Our.InitEffect(input.EffectType.Sub, 735, int(e.Args()[0].IntPart()), int(e.Args()[1].IntPart()))
|
||||
if effect != nil {
|
||||
e.Ctx().Our.AddEffect(e.Ctx().Our, effect)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type Effect735Sub struct {
|
||||
RoundEffectArg0Base
|
||||
}
|
||||
|
||||
func (e *Effect735Sub) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
|
||||
if len(e.Args()) < 2 {
|
||||
return true
|
||||
}
|
||||
|
||||
current := actionByPlayer(fattack, sattack, e.Ctx().Our.UserID)
|
||||
if current == nil || current.SkillEntity == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
current.SkillEntity.XML.Priority += int(e.Args()[1].IntPart())
|
||||
return true
|
||||
}
|
||||
|
||||
// Effect 736: 消除对手能力提升状态,消除成功则{0}回合内令对手使用的属性技能无效
|
||||
type Effect736 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect736) OnSkill() bool {
|
||||
if len(e.Args()) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
cleared := false
|
||||
for i, v := range e.Ctx().Opp.Prop[:] {
|
||||
if v <= 0 {
|
||||
continue
|
||||
}
|
||||
if e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), 0) {
|
||||
cleared = true
|
||||
}
|
||||
}
|
||||
if !cleared {
|
||||
return true
|
||||
}
|
||||
|
||||
effect := e.Ctx().Our.InitEffect(input.EffectType.Sub, 736, int(e.Args()[0].IntPart()))
|
||||
if effect != nil {
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, effect)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type Effect736Sub struct {
|
||||
RoundEffectArg0Base
|
||||
}
|
||||
|
||||
func (e *Effect736Sub) SkillHit_ex() bool {
|
||||
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() != info.Category.STATUS {
|
||||
return true
|
||||
}
|
||||
|
||||
e.Ctx().SkillEntity.SetNoSide()
|
||||
return true
|
||||
}
|
||||
|
||||
// Effect 737: {0}%使对手{1},若没有触发,则回合结束时减少对手1/{2}最大体力
|
||||
type Effect737 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect737) OnSkill() bool {
|
||||
if len(e.Args()) < 3 {
|
||||
return true
|
||||
}
|
||||
|
||||
success, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100)
|
||||
if success {
|
||||
statusType := int(e.Args()[1].IntPart())
|
||||
statusEff := e.Ctx().Our.InitEffect(input.EffectType.Status, statusType)
|
||||
if statusEff != nil {
|
||||
statusEff.SetArgs(e.Ctx().Our, 2)
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, statusEff)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
effect := e.Ctx().Our.InitEffect(input.EffectType.Sub, 737, int(e.Args()[2].IntPart()))
|
||||
if effect != nil {
|
||||
e.Ctx().Our.AddEffect(e.Ctx().Our, effect)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type Effect737Sub struct {
|
||||
FixedDuration1Base
|
||||
}
|
||||
|
||||
func (e *Effect737Sub) TurnEnd() {
|
||||
if len(e.Args()) == 0 || e.Args()[0].IntPart() <= 0 {
|
||||
e.Alive(false)
|
||||
return
|
||||
}
|
||||
|
||||
damage := e.Ctx().Opp.CurrentPet.GetMaxHP().Div(e.Args()[0])
|
||||
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
|
||||
Type: info.DamageType.Percent,
|
||||
Damage: damage,
|
||||
})
|
||||
e.Alive(false)
|
||||
}
|
||||
|
||||
// Effect 738: {0}回合内若对手使用属性技能,则使用属性技能后的下{1}回合攻击技能无法造成伤害且命中效果失效
|
||||
type Effect738 struct {
|
||||
node.EffectNode
|
||||
}
|
||||
|
||||
func (e *Effect738) Skill_Use() bool {
|
||||
effect := e.Ctx().Our.InitEffect(input.EffectType.Sub, 738, e.SideEffectArgs...)
|
||||
if effect != nil {
|
||||
e.Ctx().Our.AddEffect(e.Ctx().Our, effect)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type Effect738Sub struct {
|
||||
RoundEffectArg0Base
|
||||
}
|
||||
|
||||
func (e *Effect738Sub) Skill_Use_ex() bool {
|
||||
if len(e.Args()) < 2 || e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() != info.Category.STATUS {
|
||||
return true
|
||||
}
|
||||
|
||||
lock := e.Ctx().Our.InitEffect(input.EffectType.Sub, 7381, int(e.Args()[1].IntPart()))
|
||||
if lock != nil {
|
||||
e.Ctx().Opp.AddEffect(e.Ctx().Our, lock)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
type Effect738Lock struct {
|
||||
RoundEffectArg0Base
|
||||
}
|
||||
|
||||
func (e *Effect738Lock) SkillHit() bool {
|
||||
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
|
||||
return true
|
||||
}
|
||||
|
||||
e.Ctx().SkillEntity.SetNoSide()
|
||||
return true
|
||||
}
|
||||
|
||||
func (e *Effect738Lock) Damage_Mul(zone *info.DamageZone) bool {
|
||||
if zone == nil || zone.Type != info.DamageType.Red {
|
||||
return true
|
||||
}
|
||||
if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
|
||||
return true
|
||||
}
|
||||
|
||||
zone.Damage = alpacadecimal.Zero
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 734, &Effect734{})
|
||||
input.InitEffect(input.EffectType.Skill, 735, &Effect735{})
|
||||
input.InitEffect(input.EffectType.Sub, 735, &Effect735Sub{})
|
||||
input.InitEffect(input.EffectType.Skill, 736, &Effect736{})
|
||||
input.InitEffect(input.EffectType.Sub, 736, &Effect736Sub{})
|
||||
input.InitEffect(input.EffectType.Skill, 737, &Effect737{})
|
||||
input.InitEffect(input.EffectType.Sub, 737, &Effect737Sub{})
|
||||
input.InitEffect(input.EffectType.Skill, 738, &Effect738{})
|
||||
input.InitEffect(input.EffectType.Sub, 738, &Effect738Sub{})
|
||||
input.InitEffect(input.EffectType.Sub, 7381, &Effect738Lock{})
|
||||
}
|
||||
Reference in New Issue
Block a user