This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 被关闭
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user