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次抽取 - 集成物品数量检查和批量添加功能 ```
82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package service
|
|
|
|
import (
|
|
"blazing/cool"
|
|
"blazing/modules/config/model"
|
|
"context"
|
|
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
type MapmodelService struct {
|
|
*cool.Service
|
|
}
|
|
|
|
func NewMapmodelService() *MapmodelService {
|
|
return &MapmodelService{
|
|
&cool.Service{
|
|
Model: model.NewMapModel(),
|
|
PageQueryOp: &cool.QueryOp{
|
|
KeyWordField: []string{"remake"},
|
|
FieldEQ: []string{"map_id"},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (s *MapmodelService) appendShinyFilter(item map[string]interface{}) map[string]interface{} {
|
|
if item == nil {
|
|
return item
|
|
}
|
|
|
|
shinyID := gconv.Int(item["shiny"])
|
|
if shinyID <= 0 {
|
|
shinyID = gconv.Int(item["shinyid"])
|
|
}
|
|
if shinyID <= 0 {
|
|
item["shiny_filter"] = nil
|
|
return item
|
|
}
|
|
|
|
item["shiny_filter"] = NewShinyService().GetShiny(shinyID)
|
|
return item
|
|
}
|
|
|
|
func (s *MapmodelService) ServiceInfo(ctx context.Context, req *cool.InfoReq) (data interface{}, err error) {
|
|
result, err := s.Service.ServiceInfo(ctx, req)
|
|
if err != nil || result == nil {
|
|
return result, err
|
|
}
|
|
|
|
record, ok := result.(gdb.Record)
|
|
if !ok || record.IsEmpty() {
|
|
return result, err
|
|
}
|
|
|
|
return s.appendShinyFilter(record.Map()), nil
|
|
}
|
|
|
|
func (s *MapmodelService) ServiceList(ctx context.Context, req *cool.ListReq) (data interface{}, err error) {
|
|
result, err := s.Service.ServiceList(ctx, req)
|
|
if err != nil || result == nil {
|
|
return result, err
|
|
}
|
|
|
|
rows, ok := result.(gdb.Result)
|
|
if !ok {
|
|
return result, err
|
|
}
|
|
|
|
list := make([]map[string]interface{}, 0, len(rows))
|
|
for _, row := range rows {
|
|
list = append(list, s.appendShinyFilter(row.Map()))
|
|
}
|
|
return list, nil
|
|
}
|
|
|
|
func (s *MapmodelService) GetDataByModelId(modelid uint32) (ret *model.MapModel) {
|
|
dbm_notenable(s.Model).Where("id", modelid).Scan(&ret)
|
|
return
|
|
}
|