Files
bl/logic/service/fight/effect/none.go

132 lines
2.6 KiB
Go
Raw Normal View History

package effect
import (
2026-03-29 16:38:34 +08:00
"blazing/common/data/share"
"blazing/logic/service/fight/action"
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node"
)
// Effect 445: 使用后在战斗结束时可以获得500赛尔豆每日上限5000
type Effect445 struct {
node.EffectNode
}
2026-03-29 16:38:34 +08:00
func (e *Effect445) SetArgs(t *input.Input, a ...int) {
e.EffectNode.SetArgs(t, a...)
e.Duration(-1)
}
func (e *Effect445) OnBattleEnd() bool {
player := e.Ctx().Our.Player
if player == nil || player.GetInfo().UserID == 0 {
return true
}
count, err := share.GlobalCounterManager.GetCount(&share.DailyPeriod, player.GetInfo().UserID, 445)
if err != nil && err != share.ErrCacheMiss {
return true
}
if err == share.ErrCacheMiss {
count = 0
}
if count >= 10 {
return true
}
if !player.ItemAdd(1, 500) {
return true
}
_, _ = share.GlobalCounterManager.IncrCount(&share.DailyPeriod, player.GetInfo().UserID, 445)
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 445, &Effect445{})
}
// Effect 201: 对选中对象或本方全体恢复1/{1}的体力
type Effect201 struct {
node.EffectNode
}
func isSameSideTarget(carrier, target *input.Input) bool {
if carrier == nil || target == nil {
return false
}
if carrier == target {
return true
}
for _, ally := range carrier.Team {
if ally == target {
return true
}
}
if carrier.Player != nil && target.Player != nil {
return carrier.Player.GetInfo().UserID == target.Player.GetInfo().UserID
}
return false
}
2026-03-29 16:38:34 +08:00
func (e *Effect201) OnSkill() bool {
args := e.Args()
if len(args) == 0 {
return true
}
carrier := e.CarrierInput()
if carrier == nil {
carrier = e.Ctx().Our
}
if carrier == nil {
return true
}
2026-03-29 16:38:34 +08:00
divisorIndex := len(args) - 1
if len(args) > 1 {
divisorIndex = 1
}
divisor := args[divisorIndex]
if divisor.IntPart() <= 0 {
return true
}
healAll := len(args) > 1 && args[0].IntPart() != 0
if !healAll {
target := e.TargetInput()
if !isSameSideTarget(carrier, target) {
target = carrier
}
current := target.CurrentPet()
if current == nil {
return true
}
target.Heal(
carrier,
2026-03-29 16:38:34 +08:00
&action.SelectSkillAction{},
current.GetMaxHP().Div(divisor),
2026-03-29 16:38:34 +08:00
)
return true
}
team := carrier.Team
if len(team) == 0 {
team = []*input.Input{carrier}
}
for _, ally := range team {
if ally == nil {
2026-03-29 16:38:34 +08:00
continue
}
if current := ally.CurrentPet(); current != nil && current.Alive() {
ally.Heal(carrier, &action.SelectSkillAction{}, current.GetMaxHP().Div(divisor))
2026-03-29 16:38:34 +08:00
}
}
return true
}
func init() {
input.InitEffect(input.EffectType.Skill, 201, &Effect201{})
}