Files
bl/logic/controller/login.go

104 lines
2.8 KiB
Go
Raw Normal View History

package controller
import (
"blazing/common/data/share"
"blazing/common/socket/errorcode"
"blazing/logic/service/common"
"blazing/logic/service/user"
"blazing/logic/service/maps"
"blazing/logic/service/player"
"blazing/logic/service/space"
blservice "blazing/modules/blazing/service"
"context"
2025-08-28 21:57:30 +00:00
"time"
"github.com/gogf/gf/v2/os/glog"
"github.com/jinzhu/copier"
"github.com/panjf2000/gnet/v2"
)
2025-08-31 06:53:42 +00:00
func IsToday(t time.Time) bool {
// 获取当前时间
now := time.Now()
// 比较年、月、日是否相同
return t.Year() == now.Year() &&
t.Month() == now.Month() &&
t.Day() == now.Day()
}
// 处理命令: 1001
func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user.LoginMSInfo, err errorcode.ErrorCode) { //这个时候player应该是空的
if tt := data.CheakSession(); tt { //说明sid正确
h.RPCClient.Kick(data.Head.UserID) //先踢人
t := player.GetPlayer(c, data.Head.UserID)
t.Service = blservice.NewUserService(data.Head.UserID)
``` refactor(effectarg): 移动EffectArgs初始化逻辑 将EffectArgs的初始化从effectarg.go中的init函数移动到file.go的initfile函数中, 确保在使用前正确加载配置并初始化映射。 refactor(login): 更新Login方法中的Person调用 修改Login方法中对Person函数的调用,传递UserID参数以获取正确的用户信息。 refactor(user): 统一使用Person方法替代PersonOther 在UserSimInfo和UserMoreInfo方法中,将原先调用的PersonOther方法统一替换为 Person方法,保持代码一致性。 refactor(effect_damage): 简化属性获取和伤害计算逻辑 移除deepcopy相关逻辑,简化Effect0的OnSkill方法中的属性获取和伤害计算流程, 直接通过输入参数进行计算。 refactor(fightc): 优化玩家输入处理和战斗逻辑 更新GetInputByPlayer方法中的玩家判断逻辑,使用UserID比较代替对象比较; 在initplayer中添加InitAttackValue调用; 修复battleLoop中打印语句的格式问题; 调整技能攻击处理流程,增加SkillUseEnd回调调用。 refactor(attr): 改进属性获取方法和伤害计算逻辑 将GetProp方法重命名为Prop,并支持传入对方输入参数; 更新CalculatePower方法签名,使用Input类型代替BattlePetEntity; 在属性获取和伤害计算中正确处理双方属性影响。 refactor(playeraction): 简化技能使用逻辑 简化UseSkill方法中获取当前宠物信息的逻辑,去除冗余的条件判断; 在找到对应技能后添加break语句,提高执行效率。 refactor(reg): 更新Person方法实现 合并Person和PersonOther方法为统一的Person方法; 在数据库查询失败时添加错误处理,避免潜在的空指针异常。 ```
2025-09-24 12:40:13 +08:00
t.Info = t.Service.Person(data.Head.UserID)
t.Info.UserID = data.Head.UserID
t.Onlinetime = uint32(time.Now().Unix()) //保存时间戳
t.Changemap = true
share.ShareManager.SetUserOnline(data.Head.UserID, h.Port) //设置用户登录服务器
2025-08-31 06:53:42 +00:00
if !IsToday(t.Info.LastResetTime) { //判断是否是今天
t.Info.LastResetTime = time.Now()
//每天login时候检查重置时间然后把电池任务挖矿重置
//挖矿需要单独存,因为防止多开挖矿
t.Info.TimeToday = 0 //重置电池
defer func() {
// for i := 400; i < 500; i++ { //每日任务区段
// t.Info.TaskList[i] = 0 //重置每日任务
// t.Service.Task((uint32(i)), func(te *model.TaskEX) bool {
// te.Data = make([]uint32, 0)
// return true
// })
// }
for i := 400; i < 50; i++ { //每日任务区段
t.Info.DailyResArr[i] = 0 //重置每日任务
}
2025-10-07 08:14:11 +00:00
t.Service.Talk(func(m *map[uint32]uint32) bool {
m = &map[uint32]uint32{}
2025-10-07 08:14:11 +00:00
return true
})
}()
2025-08-31 06:53:42 +00:00
}
2025-09-19 00:29:55 +08:00
2025-08-31 06:53:42 +00:00
t.CompleteLogin() //通知客户端登录成功
2025-08-28 21:35:56 +00:00
2025-10-10 04:49:23 +00:00
glog.Debug(context.Background(), "登录成功,初始地图 人数:", space.GetSpace(t.Info.MapID).User.Count())
result = user.NewOutInfo() //设置登录消息
result.PlayerInfo = *t.Info
2025-10-10 04:49:23 +00:00
defer func() {
tt := maps.NewOutInfo()
copier.CopyWithOption(tt, t.Info, copier.Option{DeepCopy: true})
//copier.Copy(t.Info, tt)
t1 := player.NewTomeeHeader(2001, t.Info.UserID)
2025-10-10 12:07:05 +00:00
space.GetSpace(t.Info.MapID).User.Set(t.Info.UserID, t)
space.GetSpace(t.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) {
player.SendPack(t1.Pack(tt))
})
2025-10-10 04:49:23 +00:00
}()
return result, 0
} else {
err = errorcode.ErrorCodes.ErrLoginServerError
}
return
}