```
feat(game): 实现扭蛋系统批量物品添加功能并优化地图逻辑 - 新增ItemAddBatch方法用于批量添加物品,支持普通道具和特殊道具的分别处理 - 优化扭蛋游戏玩法中的物品添加逻辑,使用新的批量接口提升性能 - 在扭蛋机器人命令中实现完整的物品检查和批量添加流程 refactor(map): 重构地图控制器代码结构并添加注释 - 为EnterMap、LeaveMap、GetMapPlayerList等方法添加中文注释 - 统一地图相关的命名规范,如enter map替换进入地图 - 调整地图玩家列表中BOSS广播命令ID,2021和2022进行对调 refactor(boss): 重构定时BOSS代码并优化注释 - 将原有的中文注释改为英文注释,统一代码风格 - 简化TimeBossRule结构体定义和相关配置 - 优化定时任务注册逻辑,去除冗余的注释和变量 refactor(space): 清理地图空间服务代码注释 - 移除多余的中文注释和说明文字 - 统一代码格式,移除不必要的空行和注释 - 保持原有的天气系统和地图刷怪逻辑不变 fix(role): 修复系统角色权限查询逻辑 - 修改BaseSysRoleService中的查询条件,正确处理管理员权限 - 使用Extend方法替代Where进行复杂的权限判断逻辑 - 确保超级管理员可以访问所有角色,其他用户受限于权限范围 refactor(dict): 添加字典服务批量查询方法 - 新增GetMaxMap方法用于批量获取物品最大持有上限 - 优化数据库查询,减少多次单个查询的开销 - 支持一次请求多个物品的最大数量限制 fix(player): 修复玩家信息保存异常处理 - 将panic方式改为错误日志记录,避免程序崩溃 - 优化Save方法的重试逻辑,统一错误处理方式 - 在本地文件回退时记录详细错误信息 feat(robot): 扩展扭蛋机器人功能 - 添加用户验证和角色创建检查 - 实现批量扭蛋的完整逻辑,支持1-10次抽取 - 集成物品数量检查和批量添加功能 ```
This commit is contained in:
@@ -20,16 +20,54 @@ func buildPetShortInfo(info model.PetInfo) pet.PetShortInfo {
|
||||
}
|
||||
}
|
||||
|
||||
func buildPetListOutboundInfo(petList []model.Pet) *pet.GetPetListOutboundInfo {
|
||||
func buildPetListOutboundInfo(petList []model.PetInfo) *pet.GetPetListOutboundInfo {
|
||||
result := &pet.GetPetListOutboundInfo{
|
||||
ShortInfoList: make([]pet.PetShortInfo, len(petList)),
|
||||
}
|
||||
for i := range petList {
|
||||
result.ShortInfoList[i] = buildPetShortInfo(petList[i].Data)
|
||||
result.ShortInfoList[i] = buildPetShortInfo(petList[i])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func removePetByCatchTime(petList []model.PetInfo, catchTime uint32) []model.PetInfo {
|
||||
for i := range petList {
|
||||
if petList[i].CatchTime == catchTime {
|
||||
return append(petList[:i], petList[i+1:]...)
|
||||
}
|
||||
}
|
||||
return petList
|
||||
}
|
||||
|
||||
func syncBackupPetList(player *player.Player) {
|
||||
if len(player.Info.BackupPetList) > 0 {
|
||||
return
|
||||
}
|
||||
|
||||
storagePets := player.Service.Pet.PetInfo(1)
|
||||
if len(storagePets) == 0 {
|
||||
player.Info.BackupPetList = make([]model.PetInfo, 0)
|
||||
return
|
||||
}
|
||||
|
||||
player.Info.BackupPetList = make([]model.PetInfo, len(storagePets))
|
||||
for i := range storagePets {
|
||||
player.Info.BackupPetList[i] = storagePets[i].Data
|
||||
}
|
||||
}
|
||||
|
||||
func buildUserBagPetInfo(player *player.Player) *pet.GetUserBagPetInfoOutboundInfo {
|
||||
syncBackupPetList(player)
|
||||
|
||||
result := &pet.GetUserBagPetInfoOutboundInfo{
|
||||
PetList: make([]model.PetInfo, len(player.Info.PetList)),
|
||||
BackupPetList: make([]model.PetInfo, len(player.Info.BackupPetList)),
|
||||
}
|
||||
copy(result.PetList, player.Info.PetList)
|
||||
copy(result.BackupPetList, player.Info.BackupPetList)
|
||||
return result
|
||||
}
|
||||
|
||||
func buildPetShowOutboundInfo(userID, flag uint32, info *model.PetInfo) *pet.PetShowOutboundInfo {
|
||||
return &pet.PetShowOutboundInfo{
|
||||
UserID: userID,
|
||||
@@ -49,26 +87,30 @@ func buildPetShowOutboundInfo(userID, flag uint32, info *model.PetInfo) *pet.Pet
|
||||
// 返回: 精灵信息和错误码
|
||||
func (h Controller) GetPetInfo(
|
||||
data *pet.InInfo,
|
||||
player *player.Player) (result *pet.OutInfo,
|
||||
player *player.Player) (result *model.PetInfo,
|
||||
err errorcode.ErrorCode) {
|
||||
_, petInfo, found := player.FindPet(data.CatchTime)
|
||||
|
||||
if found {
|
||||
result = &pet.OutInfo{
|
||||
PetInfo: *petInfo,
|
||||
}
|
||||
result = petInfo
|
||||
return result, 0
|
||||
}
|
||||
ret := player.Service.Pet.PetInfoOneByCatchTime(data.CatchTime)
|
||||
if ret == nil {
|
||||
return nil, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
result = &pet.OutInfo{
|
||||
PetInfo: ret.Data,
|
||||
}
|
||||
result = &ret.Data
|
||||
return result, 0
|
||||
}
|
||||
|
||||
// GetUserBagPetInfo 获取主背包和并列备用精灵列表
|
||||
func (h Controller) GetUserBagPetInfo(
|
||||
data *pet.GetUserBagPetInfoInboundEmpty,
|
||||
player *player.Player) (result *pet.GetUserBagPetInfoOutboundInfo,
|
||||
err errorcode.ErrorCode) {
|
||||
return buildUserBagPetInfo(player), 0
|
||||
}
|
||||
|
||||
// GetPetList 获取仓库列表
|
||||
// data: 空输入结构
|
||||
// player: 当前玩家对象
|
||||
@@ -77,7 +119,7 @@ func (h Controller) GetPetList(
|
||||
data *pet.GetPetListInboundEmpty,
|
||||
player *player.Player) (result *pet.GetPetListOutboundInfo,
|
||||
err errorcode.ErrorCode) {
|
||||
return buildPetListOutboundInfo(player.Service.Pet.PetInfo(0)), 0
|
||||
return buildPetListOutboundInfo(player.Info.PetList), 0
|
||||
}
|
||||
|
||||
// GetPetReleaseList 获取放生列表
|
||||
@@ -88,7 +130,8 @@ func (h Controller) GetPetReleaseList(
|
||||
data *pet.GetPetListFreeInboundEmpty,
|
||||
player *player.Player) (result *pet.GetPetListOutboundInfo,
|
||||
err errorcode.ErrorCode) {
|
||||
return buildPetListOutboundInfo(player.Service.Pet.PetInfo(1)), 0
|
||||
syncBackupPetList(player)
|
||||
return buildPetListOutboundInfo(player.Info.BackupPetList), 0
|
||||
}
|
||||
|
||||
// PetReleaseToWarehouse 将精灵从仓库包中放生
|
||||
@@ -156,6 +199,8 @@ func (h Controller) TogglePetBagWarehouse(
|
||||
return result, errorcode.ErrorCodes.ErrSystemError
|
||||
}
|
||||
|
||||
player.Info.BackupPetList = removePetByCatchTime(player.Info.BackupPetList, data.CatchTime)
|
||||
player.Info.BackupPetList = append(player.Info.BackupPetList, *pet)
|
||||
player.Info.PetList = append(player.Info.PetList[:index], player.Info.PetList[index+1:]...)
|
||||
}
|
||||
|
||||
@@ -172,7 +217,10 @@ func (h Controller) TogglePetBagWarehouse(
|
||||
return result, errorcode.ErrorCodes.ErrPokemonNotExists
|
||||
}
|
||||
player.Info.PetList = append(player.Info.PetList, r.Data)
|
||||
player.Info.BackupPetList = removePetByCatchTime(player.Info.BackupPetList, data.CatchTime)
|
||||
result.PetInfo = r.Data
|
||||
} else {
|
||||
player.Info.BackupPetList = removePetByCatchTime(player.Info.BackupPetList, data.CatchTime)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
17
logic/service/pet/bag_info.go
Normal file
17
logic/service/pet/bag_info.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package pet
|
||||
|
||||
import (
|
||||
"blazing/logic/service/common"
|
||||
"blazing/modules/player/model"
|
||||
)
|
||||
|
||||
type GetUserBagPetInfoInboundEmpty struct {
|
||||
Head common.TomeeHeader `cmd:"4483" struc:"skip"`
|
||||
}
|
||||
|
||||
type GetUserBagPetInfoOutboundInfo struct {
|
||||
PetListLen uint32 `struc:"int32,sizeof=PetList"`
|
||||
PetList []model.PetInfo
|
||||
BackupPetListLen uint32 `struc:"int32,sizeof=BackupPetList"`
|
||||
BackupPetList []model.PetInfo
|
||||
}
|
||||
@@ -12,10 +12,6 @@ type InInfo struct {
|
||||
CatchTime uint32
|
||||
}
|
||||
|
||||
type OutInfo struct {
|
||||
model.PetInfo
|
||||
}
|
||||
|
||||
// PetReleaseOutboundInfo 宠物释放出站消息
|
||||
type PetReleaseOutboundInfo struct {
|
||||
HomeEnergy uint32 `json:"home_energy" fieldDescription:"暂定0" autoCodec:"true" uint:"true"`
|
||||
|
||||
Reference in New Issue
Block a user