Compare commits

...

2 Commits

Author SHA1 Message Date
昔念
ee8b0a2182 Merge branch 'main' of https://cnb.cool/blzing/blazing
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
2026-04-15 22:17:08 +08:00
昔念
6e95e014fa 1 2026-04-15 22:16:56 +08:00
6 changed files with 63 additions and 15 deletions

View File

@@ -10,20 +10,23 @@ type Effect169 struct {
} }
func (e *Effect169) OnSkill() bool { func (e *Effect169) OnSkill() bool {
chance := e.Args()[1].IntPart() chance := e.Args()[1].IntPart()
success, _, _ := e.Input.Player.Roll(int(chance), 100) success, _, _ := e.Input.Player.Roll(int(chance), 100)
if success { if success {
// 添加异常状态 e.ForEachOpponentSlot(func(target *input.Input) bool {
statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart())) // 以麻痹为例 if target == nil {
if statusEffect != nil { return true
e.TargetInput().AddEffect(e.CarrierInput(), statusEffect) }
} statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart()))
if statusEffect != nil {
target.AddEffect(e.CarrierInput(), statusEffect)
}
return true
})
} }
return true return true
} }
func init() { func init() {
input.InitEffect(input.EffectType.Skill, 169, &Effect169{}) input.InitEffect(input.EffectType.Skill, 169, &Effect169{})
} }

View File

@@ -1,6 +1,7 @@
package effect package effect
import ( import (
"blazing/logic/service/fight/input"
"blazing/logic/service/fight/node" "blazing/logic/service/fight/node"
) )
@@ -41,14 +42,16 @@ type Effect5 struct {
// 技能触发时调用 // 技能触发时调用
// ----------------------------------------------------------- // -----------------------------------------------------------
func (e *Effect5) Skill_Use() bool { func (e *Effect5) Skill_Use() bool {
// 概率判定 // 概率判定
ok, _, _ := e.Input.Player.Roll(e.SideEffectArgs[1], 100) ok, _, _ := e.Input.Player.Roll(e.SideEffectArgs[1], 100)
if !ok { if !ok {
return true return true
} }
e.Ctx().Opp.SetProp(e.Ctx().Our, int8(e.SideEffectArgs[0]), int8(e.SideEffectArgs[2])) forEachEnemyTargetBySkill(e.Ctx().Our, e.Ctx().Opp, e.Ctx().SkillEntity, func(target *input.Input) bool {
target.SetProp(e.Ctx().Our, int8(e.SideEffectArgs[0]), int8(e.SideEffectArgs[2]))
return true
})
return true return true
} }

View File

@@ -22,15 +22,19 @@ type Effect76 struct {
} }
func (e *Effect76) OnSkill() bool { func (e *Effect76) OnSkill() bool {
// 概率判定 // 概率判定
ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100)
if !ok { if !ok {
return true return true
} }
e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed, damage := alpacadecimal.NewFromInt(int64(e.SideEffectArgs[2]))
Damage: alpacadecimal.NewFromInt(int64(e.SideEffectArgs[2])), forEachEnemyTargetBySkill(e.Ctx().Our, e.Ctx().Opp, e.Ctx().SkillEntity, func(target *input.Input) bool {
target.Damage(e.Ctx().Our, &info.DamageZone{
Type: info.DamageType.Fixed,
Damage: damage,
})
return true
}) })
return true return true
} }

View File

@@ -120,7 +120,7 @@ var effectInfoByID = map[int]string{
164: "{0}回合内若受到攻击则有{1}%概率令对手{2}", 164: "{0}回合内若受到攻击则有{1}%概率令对手{2}",
165: "{0}回合内每回合防御和特防等级+{1}", 165: "{0}回合内每回合防御和特防等级+{1}",
166: "{0}回合内若对手使用属性攻击则{2}%对手{1}等级{3}", 166: "{0}回合内若对手使用属性攻击则{2}%对手{1}等级{3}",
169: "{0}回合内每回合额外附加{1}%概率令对{2}", 169: "{0}回合内每回合额外附加{1}%概率令对方阵营全体{2}",
170: "若先出手则免疫当回合伤害并回复1/{0}的最大体力值", 170: "若先出手则免疫当回合伤害并回复1/{0}的最大体力值",
171: "{0}回合内自身使用属性技能时能较快出手", 171: "{0}回合内自身使用属性技能时能较快出手",
172: "若后出手则给予对方损伤的1/{0}会回复自己的体力", 172: "若后出手则给予对方损伤的1/{0}会回复自己的体力",

View File

@@ -0,0 +1,34 @@
package effect
import (
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
)
// forEachEnemyTargetBySkill 在普通情况下对单个目标生效;
// 当技能为 AtkType=3仅自己且当前目标仍在己方时改为遍历敌方全部站位。
func forEachEnemyTargetBySkill(carrier, target *input.Input, skill *info.SkillEntity, fn func(*input.Input) bool) {
if fn == nil {
return
}
if carrier == nil {
if target != nil {
fn(target)
}
return
}
if skill == nil || skill.XML.AtkType != 3 || !isSameSideTarget(carrier, target) {
if target != nil {
fn(target)
}
return
}
for _, opponent := range carrier.OpponentSlots() {
if opponent == nil {
continue
}
if !fn(opponent) {
return
}
}
}

View File

@@ -7,7 +7,11 @@ import (
"blazing/logic/service/fight/input" "blazing/logic/service/fight/input"
"blazing/modules/player/model" "blazing/modules/player/model"
) )
// <!--
// GBTL:
// 1. AtkNum:本技能同时攻击数量, 默认:1(不能为0)
// 2. AtkType:攻击类型: 0:所有人, 1:仅己方, 2:仅对方, 3:仅自己, 默认:2
// -->
const ( const (
groupCmdReadyToFight uint32 = 7555 groupCmdReadyToFight uint32 = 7555
groupCmdReadyFightFinish uint32 = 7556 groupCmdReadyFightFinish uint32 = 7556