Compare commits
2 Commits
61a135b3a7
...
ee8b0a2182
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee8b0a2182 | ||
|
|
6e95e014fa |
@@ -10,20 +10,23 @@ type Effect169 struct {
|
||||
}
|
||||
|
||||
func (e *Effect169) OnSkill() bool {
|
||||
|
||||
chance := e.Args()[1].IntPart()
|
||||
success, _, _ := e.Input.Player.Roll(int(chance), 100)
|
||||
if success {
|
||||
// 添加异常状态
|
||||
statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart())) // 以麻痹为例
|
||||
if statusEffect != nil {
|
||||
e.TargetInput().AddEffect(e.CarrierInput(), statusEffect)
|
||||
}
|
||||
e.ForEachOpponentSlot(func(target *input.Input) bool {
|
||||
if target == nil {
|
||||
return true
|
||||
}
|
||||
statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart()))
|
||||
if statusEffect != nil {
|
||||
target.AddEffect(e.CarrierInput(), statusEffect)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
input.InitEffect(input.EffectType.Skill, 169, &Effect169{})
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
)
|
||||
|
||||
@@ -41,14 +42,16 @@ type Effect5 struct {
|
||||
// 技能触发时调用
|
||||
// -----------------------------------------------------------
|
||||
func (e *Effect5) Skill_Use() bool {
|
||||
|
||||
// 概率判定
|
||||
ok, _, _ := e.Input.Player.Roll(e.SideEffectArgs[1], 100)
|
||||
if !ok {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -22,15 +22,19 @@ type Effect76 struct {
|
||||
}
|
||||
|
||||
func (e *Effect76) OnSkill() bool {
|
||||
|
||||
// 概率判定
|
||||
ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100)
|
||||
if !ok {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ var effectInfoByID = map[int]string{
|
||||
164: "{0}回合内若受到攻击则有{1}%概率令对手{2}",
|
||||
165: "{0}回合内每回合防御和特防等级+{1}",
|
||||
166: "{0}回合内若对手使用属性攻击则{2}%对手{1}等级{3}",
|
||||
169: "{0}回合内每回合额外附加{1}%概率令对手{2}",
|
||||
169: "{0}回合内每回合额外附加{1}%概率令对方阵营全体{2}",
|
||||
170: "若先出手,则免疫当回合伤害并回复1/{0}的最大体力值",
|
||||
171: "{0}回合内自身使用属性技能时能较快出手",
|
||||
172: "若后出手,则给予对方损伤的1/{0}会回复自己的体力",
|
||||
|
||||
34
logic/service/fight/effect/skill_target_helper.go
Normal file
34
logic/service/fight/effect/skill_target_helper.go
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,11 @@ import (
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/modules/player/model"
|
||||
)
|
||||
|
||||
// <!--
|
||||
// GBTL:
|
||||
// 1. AtkNum:本技能同时攻击数量, 默认:1(不能为0)
|
||||
// 2. AtkType:攻击类型: 0:所有人, 1:仅己方, 2:仅对方, 3:仅自己, 默认:2
|
||||
// -->
|
||||
const (
|
||||
groupCmdReadyToFight uint32 = 7555
|
||||
groupCmdReadyFightFinish uint32 = 7556
|
||||
|
||||
Reference in New Issue
Block a user