diff --git a/logic/service/fight/boss/NewSeIdx_12.go b/logic/service/fight/boss/NewSeIdx_12.go index 363d899f4..1feb8a838 100644 --- a/logic/service/fight/boss/NewSeIdx_12.go +++ b/logic/service/fight/boss/NewSeIdx_12.go @@ -1,6 +1,7 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" ) @@ -10,6 +11,29 @@ type NewSel12 struct { NewSel0 } +func (e *NewSel12) Damage_DIV_ex(t *info.DamageZone) bool { + + // fmt.Println(e.ID().GetCatchTime(), e.Ctx().Our.CurrentPet.Info.CatchTime) + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + // 2. 技能为空或非物理攻击,不触发 + skill := e.Ctx().SkillEntity + if skill == nil { + return true + } + if skill.Category() == info.Category.SPECIAL { + return true + } + // 3. 概率判定(Args()[1]为触发概率) + success, _, _ := e.Input.Player.Roll(e.Args()[1], 100) + if !success { + return true + } + + e.Ctx().Our.SetProp(e.Ctx().Our, int8(e.Args()[0]), 1, info.AbilityOpType.ADD) + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 12, &NewSel12{}) } diff --git a/logic/service/fight/boss/NewSeIdx_36.go b/logic/service/fight/boss/NewSeIdx_36.go index 067750484..731107618 100644 --- a/logic/service/fight/boss/NewSeIdx_36.go +++ b/logic/service/fight/boss/NewSeIdx_36.go @@ -1,15 +1,55 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + + "github.com/shopspring/decimal" ) // 36. 按5回合轮换属性顺序出招的技能才能对去血(a1-a8: btl_stat/elem_type) // TODO: 实现按5回合轮换属性顺序出招的技能才能对去血(a1-a8: btl_stat/elem_type)的核心逻辑 type NewSel36 struct { NewSel0 + index int + round int } +func (e *NewSel36) Damage_DIV_ex(t *info.DamageZone) bool { + e.round++ + + e.Ctx().Our.AttackValue.State = uint32(e.Args()[e.index]) + + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + if e.Ctx().SkillEntity == nil { + return true + } + + if t.Type != info.DamageType.Red { + return true + } + + if e.Args()[e.index] == e.Ctx().SkillEntity.Type { + + if e.round >= 5 { + e.round = 0 + e.index++ + if e.index >= len(e.Args()) { + e.index = 0 + + } + } + + return true + } + + t.Damage = decimal.NewFromInt(0) + + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 36, &NewSel36{}) } diff --git a/logic/service/fight/boss/NewSeIdx_37.go b/logic/service/fight/boss/NewSeIdx_37.go index c7f813b89..4b5dc1171 100644 --- a/logic/service/fight/boss/NewSeIdx_37.go +++ b/logic/service/fight/boss/NewSeIdx_37.go @@ -16,6 +16,10 @@ func (e *NewSel37) Damage_Lock_ex(t *info.DamageZone) bool { return true } + if t.Type != info.DamageType.Red { + return true + } + if t.Damage.IntPart() > int64(e.Args()[0]) { e.Ctx().Opp.CurrentPet.Info.Hp = 0 diff --git a/logic/service/fight/boss/NewSeIdx_39.go b/logic/service/fight/boss/NewSeIdx_39.go index 737cbd9b7..e7af92af5 100644 --- a/logic/service/fight/boss/NewSeIdx_39.go +++ b/logic/service/fight/boss/NewSeIdx_39.go @@ -13,7 +13,7 @@ type NewSel39 struct { NewSel0 } -func (e *NewSel39) Damage_Floor(t *info.DamageZone) bool { +func (e *NewSel39) Damage_DIV_ex(t *info.DamageZone) bool { if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { return true diff --git a/logic/service/fight/boss/NewSeIdx_40.go b/logic/service/fight/boss/NewSeIdx_40.go index 9f6586344..f53e59560 100644 --- a/logic/service/fight/boss/NewSeIdx_40.go +++ b/logic/service/fight/boss/NewSeIdx_40.go @@ -13,7 +13,7 @@ type NewSel40 struct { NewSel0 } -func (e *NewSel40) Damage_Floor(t *info.DamageZone) bool { +func (e *NewSel40) Damage_DIV_ex(t *info.DamageZone) bool { if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { return true diff --git a/logic/service/fight/boss/NewSeIdx_44.go b/logic/service/fight/boss/NewSeIdx_44.go index 5b254f48a..146abe320 100644 --- a/logic/service/fight/boss/NewSeIdx_44.go +++ b/logic/service/fight/boss/NewSeIdx_44.go @@ -8,8 +8,27 @@ import ( // TODO: 实现重生 (hp和btl_maxhp 恢复到 maxhp + maxhp_adj, 技能PP值回满)(a1: 可重生次数)的核心逻辑 type NewSel44 struct { NewSel0 + count int } +func (e *NewSel44) Action_end_ex() bool { + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + + if e.Ctx().Our.CurrentPet.Info.Hp == 0 { + if e.count >= e.Args()[0] { + return true + } + + e.count++ + + e.Ctx().Our.CurrentPet.Info.Hp = e.Ctx().Our.CurrentPet.Info.MaxHp + e.Ctx().Our.HealPP(-1) + } + + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 44, &NewSel44{}) } diff --git a/logic/service/fight/boss/NewSeIdx_50.go b/logic/service/fight/boss/NewSeIdx_50.go index c8be6677c..0c5437205 100644 --- a/logic/service/fight/boss/NewSeIdx_50.go +++ b/logic/service/fight/boss/NewSeIdx_50.go @@ -2,6 +2,8 @@ package effect import ( "blazing/logic/service/fight/input" + + "github.com/samber/lo" ) // 50. 免疫某类特效(a1-an: 被免疫的特效ID) @@ -10,6 +12,26 @@ type NewSel50 struct { NewSel0 } +func (e *NewSel50) EFFect_Befer(in *input.Input, effEffect input.Effect) bool { + + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + + if in != e.Ctx().Opp { + return true + } + _, ok := lo.Find(e.Args(), func(item int) bool { + + return effEffect.ID().Suffix() == uint16(item) + }) + if ok { + return false + } + + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 50, &NewSel50{}) } diff --git a/logic/service/fight/boss/NewSeIdx_7.go b/logic/service/fight/boss/NewSeIdx_7.go index e8847ca57..b78d16d7b 100644 --- a/logic/service/fight/boss/NewSeIdx_7.go +++ b/logic/service/fight/boss/NewSeIdx_7.go @@ -19,8 +19,14 @@ func (e *NewSel7) Skill_Hit_ex() bool { if skill == nil { return true } + if skill.AttackTime == 2 { + return true + } + success, _, _ := e.Input.Player.Roll(e.Args()[0], 100) + if success { + skill.AttackTime = 0 + } - skill.AttackTime -= uint32(e.Args()[0]) return true } func init() { diff --git a/logic/service/fight/boss/NewSeIdx_84.go b/logic/service/fight/boss/NewSeIdx_84.go new file mode 100644 index 000000000..380d430aa --- /dev/null +++ b/logic/service/fight/boss/NewSeIdx_84.go @@ -0,0 +1,26 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" +) + +// T84. 属性技能无效 +type NewSel84 struct { + NewSel0 +} + +func (e *NewSel84) Skill_Hit_ex() bool { + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + + if e.Ctx().SkillEntity.Category() != info.Category.STATUS { + return true + } + e.Ctx().Opp.EffectCache = make([]input.Effect, 0) + return true +} +func init() { + input.InitEffect(input.EffectType.NewSel, 84, &NewSel84{}) +} diff --git a/logic/service/fight/effect/effect_7.go b/logic/service/fight/effect/effect_7.go index 23e68e61b..16af728d3 100644 --- a/logic/service/fight/effect/effect_7.go +++ b/logic/service/fight/effect/effect_7.go @@ -5,7 +5,6 @@ import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" - "fmt" "github.com/shopspring/decimal" ) @@ -32,11 +31,11 @@ func (e *Effect7) Action_start(a, b *action.SelectSkillAction) bool { return true } -func (e *Effect7) Damage_Floor(t *info.DamageZone) bool { +func (e *Effect7) Damage_Lock(t *info.DamageZone) bool { if !e.Hit() { return true } - fmt.Println("Effect7_old", t.Damage.IntPart()) + //fmt.Println("Effect7_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { if e.Ctx().Our.CurrentPet.Info.Hp <= e.Ctx().Opp.CurrentPet.Info.Hp { @@ -45,6 +44,6 @@ func (e *Effect7) Damage_Floor(t *info.DamageZone) bool { } } - fmt.Println("Effect7_new", t.Damage.IntPart()) + // fmt.Println("Effect7_new", t.Damage.IntPart()) return true } diff --git a/logic/service/fight/effect/effect_8.go b/logic/service/fight/effect/effect_8.go index 9ee682e7f..f4c428b05 100644 --- a/logic/service/fight/effect/effect_8.go +++ b/logic/service/fight/effect/effect_8.go @@ -23,7 +23,7 @@ type Effect8 struct { } // 伤害落实前触发,限制最大伤害 -func (e *Effect8) Damage_Floor(t *info.DamageZone) bool { +func (e *Effect8) Damage_Lock(t *info.DamageZone) bool { if t.Type == info.DamageType.Red { t.Damage = decimal.NewFromInt(utils.Min(t.Damage.IntPart(), int64(e.Ctx().Opp.CurrentPet.Info.Hp)-1)) diff --git a/public/config/bossbuff和特性.xml b/public/config/bossbuff和特性.xml index 4c703e5d7..2a88f644f 100644 --- a/public/config/bossbuff和特性.xml +++ b/public/config/bossbuff和特性.xml @@ -151,6 +151,7 @@ 51. 如果mon被打到BurstRecoverHP以下, 且没有挂掉, 则马上恢复到满HP和PP值; Args: a1: burst_hp high-32, a2: burst_hp low-32 + 改成a1 2000 52. 第3n+1回合免疫特殊攻击,第3n+2回合免疫物理攻击,第3n+3回合免疫属性攻击 Args: NULL @@ -248,6 +249,7 @@ 83. 受到超过n的伤害时,反弹m%伤害 Args: a1: n a2: m +84. 属性技能无效 401-420为异能精灵特质 @@ -296,7 +298,8 @@ @@ -312,624 +315,1207 @@ - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - - + + - + - + - + - - - - - - + + + + + + - - + + - + - + - - - - - - + + + + + + - - - + + + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - - - - + + + + + - - - + + + - - + + - -    -    -    -    - - -    -    -    -    -    - +           +       +                     + - - - - - - - + + + + + + + - + \ No newline at end of file