```
feat(player): 添加 UseCoins 方法统一处理玩家金币消耗逻辑 重构购买物品和变更外观功能,使用 UseCoins 方法替代手动操作 Coins 字段, 确保金币扣除的安全性和一致性。同时修复可能因并发导致的金币超扣问题。 此外,调整部分战斗系统接口参数传递方式,将 DamageZone 指
This commit is contained in:
@@ -5,10 +5,10 @@ import (
|
||||
)
|
||||
|
||||
type Ctx struct {
|
||||
Our *Input //施加方
|
||||
Opp *Input //被施加方
|
||||
|
||||
*info.SkillEntity //action本身
|
||||
Our *Input //施加方
|
||||
Opp *Input //被施加方
|
||||
|
||||
*info.DamageZone //伤害
|
||||
*info.SkillEntity //action本身
|
||||
|
||||
// *info.DamageZone //伤害
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ func (our *Input) Exec(fn func(Effect) bool) bool {
|
||||
if value.Alive() {
|
||||
value.Ctx().Our = our
|
||||
value.Ctx().Opp = our.Opp
|
||||
value.Ctx().DamageZone = &info.DamageZone{}
|
||||
//value.Ctx().DamageZone = &info.DamageZone{}
|
||||
if !fn(value) { //存在false,但是仍然要向下执行
|
||||
result = false //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果
|
||||
}
|
||||
|
||||
@@ -105,9 +105,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
var ok bool
|
||||
if our != in {
|
||||
ok = our.Opp.Exec(func(t Effect) bool {
|
||||
t.Ctx().DamageZone = sub
|
||||
|
||||
t.Damage_ADD() //红伤落实前,我方增伤
|
||||
t.Damage_ADD(sub) //红伤落实前,我方增伤
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -115,8 +114,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
//sub.BeforeMul = sub.Damage
|
||||
if ok {
|
||||
ok = our.Opp.Exec(func(t Effect) bool {
|
||||
t.Ctx().DamageZone = sub
|
||||
t.Damage_Mul() //红伤落实前,我方增伤
|
||||
|
||||
t.Damage_Mul(sub) //红伤落实前,我方增伤
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -124,8 +123,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
//sub.BeforeFloor = sub.Damage
|
||||
if ok {
|
||||
ok = our.Opp.Exec(func(t Effect) bool {
|
||||
t.Ctx().DamageZone = sub
|
||||
t.Damage_Floor() //红伤落实,内部有befer
|
||||
|
||||
t.Damage_Floor(sub) //红伤落实,内部有befer
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -135,8 +134,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
// sub.BeforeMul = sub.Damage
|
||||
if ok {
|
||||
ok = our.Exec(func(t Effect) bool {
|
||||
t.Ctx().DamageZone = sub
|
||||
t.Damage_DIV_ex() //红伤落实,内部有befer
|
||||
|
||||
t.Damage_DIV_ex(sub) //红伤落实,内部有befer
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -145,9 +144,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
//sub.BeforeSUB = sub.Damage
|
||||
if ok {
|
||||
ok = our.Exec(func(t Effect) bool {
|
||||
t.Ctx().DamageZone = sub
|
||||
|
||||
t.Damage_SUB_ex()
|
||||
t.Damage_SUB_ex(sub)
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -157,7 +155,7 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
if ok && in != our {
|
||||
ok = our.Opp.Exec(func(t Effect) bool {
|
||||
|
||||
t.Damage_Lock()
|
||||
t.Damage_Lock(sub)
|
||||
|
||||
return true
|
||||
})
|
||||
@@ -166,7 +164,7 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) {
|
||||
if ok {
|
||||
our.Exec(func(t Effect) bool {
|
||||
|
||||
t.Damage_Lock_ex()
|
||||
t.Damage_Lock_ex(sub)
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
@@ -24,6 +24,8 @@ type Input struct {
|
||||
Effects []Effect //effects 实际上全局就是effect无限回合 //effects容器 技能的
|
||||
EffectCache []Effect //这里是命中前执行的容器,也就是命中前执行的所有逻辑相关,理论上一个effect被激活,就应该同时将其他的effect取消激活
|
||||
Effect_Lost []Effect
|
||||
//CanUseSkill bool
|
||||
//Effect_Lost []Effect
|
||||
//NewEffects []Effect
|
||||
|
||||
DamageZone struct {
|
||||
@@ -96,6 +98,7 @@ func (our *Input) ResetAttackValue() {
|
||||
our.AttackValue.GainHp = 0
|
||||
our.AttackValue.LostHp = 0
|
||||
our.DamageZone.Damage = decimal.NewFromInt(0)
|
||||
//our.CanUseSkill = true
|
||||
}
|
||||
|
||||
// 这个每回合都会调用
|
||||
@@ -145,6 +148,7 @@ func (our *Input) GetStatusBonus() float64 {
|
||||
|
||||
// 解析并 施加effect
|
||||
func (our *Input) Parseskill(defender *Input, skill *action.SelectSkillAction) {
|
||||
|
||||
our.EffectCache = make([]Effect, 0) //先把上一回合数据清空,但是应该把本身延续类效果集成过来
|
||||
our.Effect_Lost = make([]Effect, 0)
|
||||
// our.Initeffectcache() //这里说明是延续的效果,每次复制出来一个新的就好了
|
||||
|
||||
@@ -6,28 +6,29 @@ import (
|
||||
)
|
||||
|
||||
type Effect interface {
|
||||
Compare_Pre(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
|
||||
Fight_Start() bool //战斗开始
|
||||
Turn_Start() //回合开始,注入特性
|
||||
|
||||
Turn_Start(fattack, sattack *action.SelectSkillAction) //回合开始,注入特性
|
||||
Compare_Pre(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
|
||||
//技能命中前的返回值代表是否可以出手 ,对命中本身的修改应该是对上下文本身的修改
|
||||
Skill_Hit_Pre() bool //对技能修改 行动开始前,注入视为等参数在这里实现
|
||||
Skill_Hit() bool //这是是命中后的对技能的修改,比如变威力
|
||||
Skill_Hit_ex() bool // 技能命中前触发//预处理受击技能 被攻击方效果,比如受击时无效技能这样
|
||||
//对技能修改 行动开始前,注入视为等参数在这里实现
|
||||
|
||||
Skill_Hit_Pre(fattack, sattack *action.SelectSkillAction) bool //比较前对优先级的修改
|
||||
Skill_Hit() bool //这是是命中后的对技能的修改,比如变威力
|
||||
Skill_Hit_ex() bool // 技能命中前触发//预处理受击技能 被攻击方效果,比如受击时无效技能这样
|
||||
|
||||
Calculate_Pre() bool //视为 无视效果,相当于这里对敌方的修改
|
||||
OnSkill() bool // 触发on miss onhit
|
||||
|
||||
//Skill_Can() bool //使用技能 可以取消用技能节点 技能无效节点锁定伤害加上
|
||||
Damage_ADD() bool // 攻击前触发 ,这时候就是+区间
|
||||
Damage_Mul() bool // 攻击触发
|
||||
Damage_ADD(*info.DamageZone) bool // 攻击前触发 ,这时候就是+区间
|
||||
Damage_Mul(*info.DamageZone) bool // 攻击触发
|
||||
|
||||
Damage_Floor() bool // 保底伤害
|
||||
Damage_DIV_ex() bool //受击前触发 这时候就是百分比减伤区间
|
||||
Damage_SUB_ex() bool // 受击触发 这时候就是点数减伤
|
||||
Damage_Lock() bool //锁定伤害
|
||||
Damage_Lock_ex() bool //被动方锁定伤害
|
||||
Damage_Shield() bool // 护盾值变化时触发
|
||||
Damage_Floor(*info.DamageZone) bool // 保底伤害
|
||||
Damage_DIV_ex(*info.DamageZone) bool //受击前触发 这时候就是百分比减伤区间
|
||||
Damage_SUB_ex(*info.DamageZone) bool // 受击触发 这时候就是点数减伤
|
||||
Damage_Lock(*info.DamageZone) bool //锁定伤害
|
||||
Damage_Lock_ex(*info.DamageZone) bool //被动方锁定伤害
|
||||
Damage_Shield(*info.DamageZone) bool // 护盾值变化时触发
|
||||
//Damage_Use() bool // 伤害作用
|
||||
Skill_Use_ex() bool //技能PP减少节点
|
||||
Skill_Useed() bool //技能PP减少节点
|
||||
|
||||
Reference in New Issue
Block a user