1
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
昔念
2026-02-07 00:18:14 +08:00
parent 637a49e274
commit 3947fbce4b
14 changed files with 61 additions and 44 deletions

View File

@@ -21,6 +21,9 @@ func (p *Player) getTaskGift(taskID int, ot int) *task.TaskResult {
// SptCompletedTask 完成任务(单分支)
// 优化点:仅当奖励存在时,才完成任务并发放奖励
func (p *Player) SptCompletedTask(taskID int, ot int) {
if !p.IsLogin {
return
}
// 1. 检查任务当前状态:未接受才处理
if p.Info.GetTask(taskID) != model.Unaccepted {
return
@@ -40,6 +43,9 @@ func (p *Player) SptCompletedTask(taskID int, ot int) {
// TawerCompletedTask 完成塔类任务(多分支)
// 优化点1. 默认分支仅奖励存在时才完成主任务 2. 指定分支仅奖励存在时才标记完成并发奖
func (p *Player) TawerCompletedTask(taskID int, ot int) {
if !p.IsLogin {
return
}
// 处理默认分支ot=-1仅奖励存在时才完成主任务
if p.Info.GetTask(taskID) == model.Unaccepted {
defaultGift := p.getTaskGift(taskID, -1)

View File

@@ -223,14 +223,19 @@ func (p *Player) ItemAdd(ItemId, ItemCnt uint32) (result bool) {
return false
}
func (player1 *Player) Kick() {
// Kick 是否热更退出
func (player1 *Player) Kick(isquit bool) {
if player1.Info == nil {
return
}
head := common.NewTomeeHeader(1001, player1.Info.UserID)
head.Result = uint32(errorcode.ErrorCodes.ErrXinPlanSleepMode)
head.Result = uint32(errorcode.ErrorCodes.ErrAccountLoggedInElsewhere)
if isquit {
head.Result = uint32(errorcode.ErrorCodes.ErrXinPlanSleepMode)
}
// 实际上这里有个问题,会造成重复保存问题
player1.SendPack(head.Pack(nil))
@@ -244,7 +249,7 @@ func (player1 *Player) Kick() {
// --- 新增超时机制核心代码 ---
// 设定超时时间可根据业务需求调整这里以3秒为例
const kickTimeout = 3 * time.Second
const kickTimeout = 5 * time.Second
select {
case <-CloseChan:
// 正常流程连接关闭回调已执行CloseChan 被关闭

View File

@@ -5,6 +5,7 @@ import (
"blazing/cool"
"fmt"
"blazing/logic/service/fight/info"
"blazing/logic/service/space"
"context"
"time"
@@ -26,7 +27,12 @@ func (p *Player) Save() {
p.Info.TimeToday = p.Info.TimeToday + newtime - uint32(p.Logintime) //保存电池时间
p.Info.OnlineTime = p.Info.OnlineTime + (newtime-uint32(p.Logintime))/60 //每次退出时候保存已经在线的分钟数
if p.FightC != nil {
go p.FightC.Over(p, info.BattleOverReason.PlayerOffline) //玩家逃跑,但是不能锁线程
}
p.IsLogin = false
p.Service.Info.Save(*p.Info)
space.GetSpace(p.Info.MapID).LeaveMap(p)

View File

@@ -34,7 +34,7 @@ func KickPlayer(userid uint32) error { //踢出玩家
//TODO 返回错误码
//var player *entity.Player
if player1, ok := Mainplayer.Load(userid); ok {
player1.Kick()
player1.Kick(false)
}