Files
bl/logic/service/fight/effect/2170_2194.go
昔念 e037539123 ```
docs(effects): 移除已完成的技能效果任务文档

移除 effects 956-1005、1263-1312、1695-1734 等范围内的未实现技能效果任务文档,
这些任务已经完成实现,相关文档不再需要维护。
```
2026-03-31 00:38:50 +08:00

345 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"
"github.com/gogf/gf/v2/util/grand"
)
// Effect 2170: 对手不处于异常时先制+1且必命中
type Effect2170 struct{ node.EffectNode }
func (e *Effect2170) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
current := actionByPlayer(fattack, sattack, e.Ctx().Our.UserID)
if current != nil && current.SkillEntity != nil && !e.Ctx().Opp.StatEffect_Exist_all() {
current.SkillEntity.XML.Priority += 1
current.SkillEntity.XML.MustHit = 1
}
return true
}
// Effect 2171: 每有1级能力下降状态吸血对手能力提升时效果翻倍
type Effect2171 struct{ node.EffectNode }
func (e *Effect2171) SkillHit() bool {
if len(e.Args()) == 0 || e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
return true
}
drain := 0
for _, v := range e.Ctx().Our.Prop[:] {
if v < 0 {
drain += int(-v)
}
}
if drain <= 0 {
return true
}
heal := alpacadecimal.NewFromInt(int64(drain)).Mul(e.Args()[0])
if e.Ctx().Opp.HasPropADD() {
heal = heal.Mul(alpacadecimal.NewFromInt(2))
}
e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, heal)
return true
}
// Effect 2172: 自身体力不满时附加效果
type Effect2172 struct{ node.EffectNode }
func (e *Effect2172) OnSkill() bool {
if len(e.Args()) < 2 || e.Ctx().Our.CurrentPet == nil {
return true
}
if e.Ctx().Our.CurrentPet.GetHP().Cmp(e.Ctx().Our.CurrentPet.GetMaxHP()) < 0 {
addStatusByID(e.Ctx().Our, e.Ctx().Opp, int(e.Args()[1].IntPart()))
}
return true
}
// Effect 2173: 转移对手异常并按转移项数削减对手PP
type Effect2173 struct{ node.EffectNode }
func (e *Effect2173) OnSkill() bool {
if len(e.Args()) < 1 {
return true
}
moved := 0
for i, v := range e.Ctx().Opp.Prop[:] {
if v < 0 {
e.Ctx().Our.SetProp(e.Ctx().Our, int8(i), v)
e.Ctx().Opp.SetProp(e.Ctx().Our, int8(i), 0)
moved++
}
}
if moved > 0 {
zeroRandomSkillPP(e.Ctx().Opp, int(e.Args()[0].IntPart()))
}
return true
}
// Effect 2174: 对手每有1项PP为0时吸血未受固定伤害则追加真实伤害
type Effect2174 struct{ node.EffectNode }
func (e *Effect2174) OnSkill() bool {
if len(e.Args()) == 0 {
return true
}
zeros := 0
if e.Ctx().Our.CurrentPet != nil {
for _, s := range e.Ctx().Our.CurrentPet.Info.SkillList {
if s.PP <= 0 {
zeros++
}
}
}
if zeros <= 0 {
return true
}
heal := alpacadecimal.NewFromInt(int64(zeros)).Mul(e.Args()[0])
e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, heal)
if e.Ctx().Opp.CurrentPet != nil && e.Ctx().Opp.CurrentPet.GetHP().Cmp(alpacadecimal.Zero) > 0 {
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{Type: info.DamageType.True, Damage: heal})
}
return true
}
// Effect 2175: 技能无效时随机附加若干非限制类异常
type Effect2175 struct{ node.EffectNode }
func (e *Effect2175) Skill_Use_ex() bool {
if len(e.Args()) == 0 {
return true
}
statuses := []int{
int(info.PetStatus.Paralysis),
int(info.PetStatus.Fear),
int(info.PetStatus.Tired),
int(info.PetStatus.Sleep),
}
for _, idx := range grand.Perm(len(statuses))[:minInt(int(e.Args()[0].IntPart()), len(statuses))] {
addStatusByID(e.Ctx().Our, e.Ctx().Opp, statuses[idx])
}
return true
}
// Effect 2176: 令对手高威力攻击技能PP归零
type Effect2176 struct{ node.EffectNode }
func (e *Effect2176) Skill_Use() bool {
if len(e.Args()) < 2 {
return true
}
if ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100); ok {
zeroRandomSkillPP(e.Ctx().Opp, int(e.Args()[1].IntPart()))
}
return true
}
// Effect 2177: 获得八荒之力,常驻无视攻击免疫和能力提升效果
type Effect2177 struct{ node.EffectNode }
func (e *Effect2177) Skill_Use() bool {
e.Ctx().Our.AddShield(alpacadecimal.NewFromInt(1))
return true
}
// Effect 2178: 星荟缠时攻击强化,低血时翻倍
type Effect2178 struct{ node.EffectNode }
func (e *Effect2178) Damage_Mul(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) == 0 || e.Ctx().SkillEntity == nil {
return true
}
if e.Ctx().Opp.CurrentPet != nil && e.Ctx().Our.CurrentPet.GetHP().Cmp(e.Ctx().Opp.CurrentPet.GetHP()) < 0 {
zone.Damage = zone.Damage.Mul(alpacadecimal.NewFromInt(100 + int64(e.Args()[0].IntPart()))).Div(alpacadecimal.NewFromInt(100))
}
return true
}
// Effect 2179: 星火之灾攻击强化,低血时翻倍
type Effect2179 struct{ node.EffectNode }
func (e *Effect2179) Damage_Mul(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) == 0 || e.Ctx().SkillEntity == nil {
return true
}
if e.Ctx().Opp.CurrentPet != nil && e.Ctx().Our.CurrentPet.GetHP().Cmp(e.Ctx().Opp.CurrentPet.GetHP()) < 0 {
zone.Damage = zone.Damage.Mul(alpacadecimal.NewFromInt(100 + int64(e.Args()[0].IntPart()))).Div(alpacadecimal.NewFromInt(100))
}
return true
}
// Effect 2180: 星海之浸攻击强化,低血时翻倍
type Effect2180 struct{ node.EffectNode }
func (e *Effect2180) Damage_Mul(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) == 0 || e.Ctx().SkillEntity == nil {
return true
}
if e.Ctx().Opp.CurrentPet != nil && e.Ctx().Our.CurrentPet.GetHP().Cmp(e.Ctx().Opp.CurrentPet.GetHP()) < 0 {
zone.Damage = zone.Damage.Mul(alpacadecimal.NewFromInt(100 + int64(e.Args()[0].IntPart()))).Div(alpacadecimal.NewFromInt(100))
}
return true
}
// Effect 2181: 解除自身异常状态
type Effect2181 struct{ node.EffectNode }
func (e *Effect2181) Skill_Use() bool {
clearTargetEffects(e.Ctx().Our, e.Ctx().Our)
return true
}
// Effect 2182: 每次命中消耗全部攻击PP并按消耗量提升威力
type Effect2182 struct{ node.EffectNode }
func (e *Effect2182) SkillHit() bool {
if len(e.Args()) < 3 || e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS {
return true
}
lost := totalLostPP2045(e.Ctx().Our)
if lost <= 0 {
return true
}
e.Ctx().SkillEntity.XML.Power += int(int64(lost) * e.Args()[2].IntPart())
return true
}
// Effect 2183: 自身能力提升时攻击强化
type Effect2183 struct{ node.EffectNode }
func (e *Effect2183) Damage_Mul(zone *info.DamageZone) bool {
if zone == nil || zone.Type != info.DamageType.Red || len(e.Args()) == 0 {
return true
}
if e.Ctx().Our.HasPropADD() {
zone.Damage = zone.Damage.Mul(alpacadecimal.NewFromInt(100 + int64(e.Args()[0].IntPart()))).Div(alpacadecimal.NewFromInt(100))
}
return true
}
// Effect 2184: 命中率提升并无视自身1级命中下降
type Effect2184 struct{ node.EffectNode }
func (e *Effect2184) SkillHit_ex() bool {
if e.Ctx().SkillEntity == nil {
return true
}
e.Ctx().SkillEntity.XML.Accuracy += 10
return true
}
// Effect 2185: 命中率提升并无视自身1级命中下降
type Effect2185 struct{ node.EffectNode }
func (e *Effect2185) SkillHit_ex() bool { return true }
// Effect 2186: 命中率提升并无视自身1级命中下降
type Effect2186 struct{ node.EffectNode }
func (e *Effect2186) SkillHit_ex() bool { return true }
// Effect 2187: 命中率提升并无视自身1级命中下降
type Effect2187 struct{ node.EffectNode }
func (e *Effect2187) SkillHit_ex() bool { return true }
// Effect 2188: 命中率提升0%并无视自身1级命中下降
type Effect2188 struct{ node.EffectNode }
func (e *Effect2188) SkillHit_ex() bool { return true }
// Effect 2189: 自身PP总和高于对手时附加效果
type Effect2189 struct{ node.EffectNode }
func (e *Effect2189) Skill_Use() bool {
if len(e.Args()) < 2 {
return true
}
if totalLostPP2045(e.Ctx().Our) > totalLostPP2045(e.Ctx().Opp) {
addStatusByID(e.Ctx().Our, e.Ctx().Opp, int(e.Args()[1].IntPart()))
}
return true
}
// Effect 2190: 占位效果
type Effect2190 struct{ node.EffectNode }
func (e *Effect2190) Skill_Use() bool { return true }
// Effect 2191: 为对手附加浪潮聚焦
type Effect2191 struct{ node.EffectNode }
func (e *Effect2191) Skill_Use() bool {
addStatusByID(e.Ctx().Our, e.Ctx().Opp, int(info.PetStatus.Confused))
return true
}
// Effect 2192: 自身不处于能力提升状态时先制+1
type Effect2192 struct{ node.EffectNode }
func (e *Effect2192) ComparePre(fattack, sattack *action.SelectSkillAction) bool {
current := actionByPlayer(fattack, sattack, e.Ctx().Our.UserID)
if current != nil && current.SkillEntity != nil && !e.Ctx().Our.HasPropADD() {
current.SkillEntity.XML.Priority += 1
}
return true
}
// Effect 2193: 自身不处于能力提升状态时触发若干轮效果
type Effect2193 struct{ node.EffectNode }
func (e *Effect2193) Skill_Use() bool {
if len(e.Args()) < 11 || e.Ctx().SkillEntity == nil {
return true
}
if !e.Ctx().Our.HasPropADD() {
if ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100); ok {
addStatusByID(e.Ctx().Our, e.Ctx().Opp, int(e.Args()[1].IntPart()))
}
}
return true
}
// Effect 2194: 击败对手时对方出战精灵附加致命诅咒
type Effect2194 struct{ node.EffectNode }
func (e *Effect2194) OnSkill() bool {
if e.Ctx().Opp.CurrentPet == nil {
return true
}
addStatusByID(e.Ctx().Our, e.Ctx().Opp, int(info.PetStatus.DrainedHP))
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 2170, &Effect2170{})
input.InitEffect(input.EffectType.Skill, 2171, &Effect2171{})
input.InitEffect(input.EffectType.Skill, 2172, &Effect2172{})
input.InitEffect(input.EffectType.Skill, 2173, &Effect2173{})
input.InitEffect(input.EffectType.Skill, 2174, &Effect2174{})
input.InitEffect(input.EffectType.Skill, 2175, &Effect2175{})
input.InitEffect(input.EffectType.Skill, 2176, &Effect2176{})
input.InitEffect(input.EffectType.Skill, 2177, &Effect2177{})
input.InitEffect(input.EffectType.Skill, 2178, &Effect2178{})
input.InitEffect(input.EffectType.Skill, 2179, &Effect2179{})
input.InitEffect(input.EffectType.Skill, 2180, &Effect2180{})
input.InitEffect(input.EffectType.Skill, 2181, &Effect2181{})
input.InitEffect(input.EffectType.Skill, 2182, &Effect2182{})
input.InitEffect(input.EffectType.Skill, 2183, &Effect2183{})
input.InitEffect(input.EffectType.Skill, 2184, &Effect2184{})
input.InitEffect(input.EffectType.Skill, 2185, &Effect2185{})
input.InitEffect(input.EffectType.Skill, 2186, &Effect2186{})
input.InitEffect(input.EffectType.Skill, 2187, &Effect2187{})
input.InitEffect(input.EffectType.Skill, 2188, &Effect2188{})
input.InitEffect(input.EffectType.Skill, 2189, &Effect2189{})
input.InitEffect(input.EffectType.Skill, 2190, &Effect2190{})
input.InitEffect(input.EffectType.Skill, 2191, &Effect2191{})
input.InitEffect(input.EffectType.Skill, 2192, &Effect2192{})
input.InitEffect(input.EffectType.Skill, 2193, &Effect2193{})
input.InitEffect(input.EffectType.Skill, 2194, &Effect2194{})
}