From c70e9621e0f5ead8f3edaf682698928df4969707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Fri, 12 Sep 2025 22:28:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(logic):=20=E4=BF=AE=E5=A4=8D=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=8E=A5=E5=8F=97=E5=92=8C=E5=AE=8C=E6=88=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将任务 ID 索引从 1 开始改为从 0 开始,以匹配数组索引 - 在玩家下线时自动结束战斗 - 保存玩家数据时,如果玩家正处于战斗状态,自动使其逃跑 --- logic/controller/task.go | 8 ++++---- logic/service/fightc.go | 13 +++++++++++++ logic/service/player.go | 5 +++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/logic/controller/task.go b/logic/controller/task.go index 0b2721cb..5a1c31c4 100644 --- a/logic/controller/task.go +++ b/logic/controller/task.go @@ -18,8 +18,8 @@ func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *service.Play // //isdaliy = true // } - if c.Info.TaskList[data.TaskId] == 0 { - c.Info.TaskList[data.TaskId] = 1 + if c.Info.TaskList[data.TaskId-1] == 0 { + c.Info.TaskList[data.TaskId-1] = 1 } result = &task.AcceptTaskOutboundInfo{} @@ -66,12 +66,12 @@ func randInt0To24() int { */ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *service.Player) (result *task.CompleteTaskOutboundInfo, err errorcode.ErrorCode) { - if c.Info.TaskList[data.TaskId] != 1 { //如果任务没有接受或者已经完成Complete_Task + if c.Info.TaskList[data.TaskId-1] != 1 { //如果任务没有接受或者已经完成Complete_Task return result, 0 } - c.Info.TaskList[data.TaskId] = 3 + c.Info.TaskList[data.TaskId-1] = 3 result = &task.CompleteTaskOutboundInfo{} result.ItemList = make([]task.ItemInfo, 0) result.TaskId = data.TaskId diff --git a/logic/service/fightc.go b/logic/service/fightc.go index b46bdebe..26734f29 100644 --- a/logic/service/fightc.go +++ b/logic/service/fightc.go @@ -95,6 +95,19 @@ func (f *FightC) Escape(c PlayerI) { f.actionChan <- ret } +// 玩家掉线 +func (f *FightC) Offline(c PlayerI) { + ret := &info.PlayerOfflineAction{ + PlayerID: c.ID(), + Reason: info.FightOverInfo{ + + Reason: uint32(info.BattleOverReason.PlayerOffline), + }, + } + + f.actionChan <- ret +} + // 切换精灵 主动和被驱逐 func (f *FightC) ChangePet(c PlayerI, id int32) { ret := &info.ActiveSwitchAction{ diff --git a/logic/service/player.go b/logic/service/player.go index 45a48e59..cb0efc9b 100644 --- a/logic/service/player.go +++ b/logic/service/player.go @@ -218,6 +218,11 @@ func (f *Player) SetFightC(ff *FightC) { // Save 保存玩家数据 func (p *Player) Save() { + if p.FightC != nil { + p.FightC.Escape(p) //玩家逃跑 + + } + p.Info.TimeToday = p.Info.TimeToday + uint32(time.Now().Unix()) - uint32(p.Onlinetime) //保存电池时间 p.Onlinetime = uint32(time.Now().Unix())