diff --git a/common/cool/coolconfig/config.go b/common/cool/coolconfig/config.go index 3176e1e8b..1fcd1e1d9 100644 --- a/common/cool/coolconfig/config.go +++ b/common/cool/coolconfig/config.go @@ -32,6 +32,8 @@ type ServerList struct { Password string `gorm:"type:string;comment:'密码'" json:"password"` CanPort []uint32 `gorm:"type:jsonb;comment:'可连接端口'" json:"can_port"` IsVip uint32 `gorm:"default:0;not null;comment:'是否为VIP服务器'" json:"is_vip"` + //isdebug + IsDebug uint8 `gorm:"default:0;comment:'是否为调试模式'" json:"is_debug"` //服务器异色概率设定ServerList ShinyRate uint8 `gorm:"default:0;comment:'异色概率'" json:"shiny_rate"` //服务器天气设定ServerList diff --git a/common/rpc/client.go b/common/rpc/client.go index 0a5b7ed2d..b5f0c8e86 100644 --- a/common/rpc/client.go +++ b/common/rpc/client.go @@ -6,7 +6,7 @@ import ( "github.com/butoften/array" ) -func GetServerInfoList() []ServerInfo { +func GetServerInfoList(isdebug bool) []ServerInfo { ret := service.NewServerService().GetServer() @@ -26,6 +26,9 @@ func GetServerInfoList() []ServerInfo { if v.IsVip != 0 { tt.UserCnt = 300 + } + if v.IsDebug != 0 { + } tt.Name = v.Name tt.Port = v.Port diff --git a/common/rpc/rpc.go b/common/rpc/rpc.go index 735f239bc..d703ffa47 100644 --- a/common/rpc/rpc.go +++ b/common/rpc/rpc.go @@ -86,7 +86,7 @@ func StartClient(id, port uint16, callback any) *struct { } { var rpcaddr, _ = service.NewBaseSysParamService().DataByKey(context.Background(), "server_ip") - rpcaddr = "127.0.0.1" + //rpcaddr = "127.0.0.1" closer1, err := jsonrpc.NewMergeClient(context.Background(), "ws://"+rpcaddr+":"+rpcport, "", []interface{}{ &RPCClient, diff --git a/common/socket/ServerEvent.go b/common/socket/ServerEvent.go index aa38a508c..2ec2e4d3a 100644 --- a/common/socket/ServerEvent.go +++ b/common/socket/ServerEvent.go @@ -118,7 +118,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { ws := c.Context().(*player.ClientData).Wsmsg if ws.Tcp { //升级失败时候防止缓冲区溢出 - return s.handleTcp(c) + return s.handleTCP(c) } @@ -135,7 +135,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { if !ok { //升级失败,说明是tcp连接 ws.Tcp = true - return s.handleTcp(c) + return s.handleTCP(c) } // fmt.Println(ws.Buf.Bytes()) @@ -161,7 +161,7 @@ func (s *Server) OnTraffic(c gnet.Conn) (action gnet.Action) { return gnet.None } -func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) { +func (s *Server) handleTCP(conn gnet.Conn) (action gnet.Action) { conn.Context().(*player.ClientData).IsCrossDomain.Do(func() { //跨域检测 handle(conn) diff --git a/common/socket/kick.go b/common/socket/kick.go index 5ad63df5f..6bc95cd20 100644 --- a/common/socket/kick.go +++ b/common/socket/kick.go @@ -11,7 +11,7 @@ type Broadcast struct { Name string } -func (h *Server) Broadcast(t string) int { +func (s *Server) Broadcast(t string) int { cool.Logger.Info(context.TODO(), "全服广播", t) var count int player.Mainplayer.Range(func(key uint32, value *player.Player) bool { @@ -24,7 +24,7 @@ func (h *Server) Broadcast(t string) int { return count } -func (h *Server) KickPerson(a int) error { +func (s *Server) KickPerson(a int) error { cool.Logger.Info(context.TODO(), "检测到踢人请求", a) if a == 0 { return nil @@ -34,11 +34,11 @@ func (h *Server) KickPerson(a int) error { } // 参数不为0是强制踢出 -func (h *Server) QuitSelf(a int) error { +func (s *Server) QuitSelf(a int) error { //TODO 这里待退出 fmt.Println("检测到退出请求") - h.quit = true + s.quit = true if a != 0 { player.Mainplayer.Range(func(key uint32, value *player.Player) bool { value.Kick() diff --git a/common/utils/lockfree-1.1.3/go.mod b/common/utils/lockfree-1.1.3/go.mod index 100084b9e..45b856c6c 100644 --- a/common/utils/lockfree-1.1.3/go.mod +++ b/common/utils/lockfree-1.1.3/go.mod @@ -5,6 +5,6 @@ go 1.20 require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.8.2 // indirect + github.com/stretchr/testify v1.8.2 gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/logic/controller/login_getserver.go b/logic/controller/login_getserver.go index 4d7b2f169..7c517c6f3 100644 --- a/logic/controller/login_getserver.go +++ b/logic/controller/login_getserver.go @@ -6,19 +6,17 @@ import ( "blazing/logic/service/user" "blazing/modules/base/service" - "golang.org/x/sync/singleflight" - "github.com/panjf2000/gnet/v2" ) -var sg singleflight.Group +// var sg singleflight.Group -var ServerList []rpc.ServerInfo +// var ServerList []rpc.ServerInfo -func fetchData() (any, error) { - ServerList = rpc.GetServerInfoList() //todo 待修改增加缓存 - return ServerList, nil -} +// func fetchData() (any, error) { +// ServerList = rpc.GetServerInfoList() //todo 待修改增加缓存 +// return ServerList, nil +// } // GetServerOnline 处理命令: 105 func (h Controller) GetServerOnline(data *user.SidInfo, c gnet.Conn) (result *rpc.CommendSvrInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 @@ -27,10 +25,10 @@ func (h Controller) GetServerOnline(data *user.SidInfo, c gnet.Conn) (result *rp if service.NewBaseSysUserService().GetPerson(data.Head.UserID).Debug == 1 { result.IsVip = 1 } - v, _, _ := sg.Do("GetServerInfoList", fetchData) - - result.ServerList = v.([]rpc.ServerInfo) //todo 待修改增加缓存 + //v, _, _ := sg.Do("GetServerInfoList", fetchData) + //result.ServerList = v.([]rpc.ServerInfo) //todo 待修改增加缓存 + result.ServerList = rpc.GetServerInfoList() return //return //TODO 这里待实现改成接口调用Ret方法 diff --git a/modules/config/model/tower_110.go b/modules/config/model/tower_110.go index 5ec5200cb..a22001f13 100644 --- a/modules/config/model/tower_110.go +++ b/modules/config/model/tower_110.go @@ -4,17 +4,55 @@ import ( "blazing/cool" ) -// 表名常量定义:勇者之塔配置表 +// -------------------------- 表名常量定义(统一管理所有塔配置表名)-------------------------- const ( - TableNamedARKTowerConfig = "tower_110_config" // 勇者之塔配置表(核心记录层数、BOSS数组、奖励物品/精灵) + TableNamedARKTowerConfig = "tower_110_config" // 勇者之塔110配置表 + TableNameTrialTowerConfig = "trial_tower_config" // 试炼之塔500配置表 + TableNameBraveTowerConfig = "brave_tower_config" // 勇者之塔600配置表 ) -// Tower110Config 勇者之塔核心配置模型(结构简洁,无额外专属字段) +// -------------------------- 核心基类:所有塔配置的通用结构 -------------------------- +type BaseTowerConfig struct { + *cool.Model `json:"-" gorm:"embedded"` // 嵌入通用Model(ID/创建时间/更新时间,不参与json序列化) + + // 核心必填字段(所有塔类型通用) + TowerLevel uint32 `gorm:"not null;default:0;uniqueIndex;comment:'塔层数(唯一标识每层配置)'" json:"tower_level" description:"塔层数"` + BossIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定BOSS ID数组,关联config_pet_boss表主键'" json:"boss_ids" description:"绑定BOSS数组"` + TaskIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定任务ID数组,关联config_task表主键'" json:"task_ids" description:"绑定任务数组"` + + // 通用辅助字段(所有塔类型通用) + IsEnabled uint32 `gorm:"not null;default:1;comment:'是否启用该层配置(0-禁用 1-启用)'" json:"is_enabled" description:"是否启用"` + Remark string `gorm:"size:512;default:'';comment:'塔层备注'" json:"remark" description:"备注信息"` + // ItemGift []ItemGift `orm:"with:item_id=id"` +} + +// NewBaseTowerConfig 创建基础塔配置实例(所有塔类型共用) +func NewBaseTowerConfig() BaseTowerConfig { + return BaseTowerConfig{ + Model: cool.NewModel(), + } +} + +// -------------------------- 各塔类型专属配置模型(无额外字段,仅绑定不同表名)-------------------------- + +// Tower110Config 勇者之塔110配置模型 type Tower110Config struct { BaseTowerConfig } -// -------------------------- 核心配套方法(结构与试炼之塔完全一致)-------------------------- +// Tower500Config 试炼之塔500配置模型 +type Tower500Config struct { + BaseTowerConfig +} + +// Tower600Config 勇者之塔600配置模型 +type Tower600Config struct { + BaseTowerConfig +} + +// -------------------------- 各塔模型的核心配套方法(统一规范)-------------------------- + +// ===== Tower110Config 专属方法 ===== func (*Tower110Config) TableName() string { return TableNamedARKTowerConfig } @@ -29,7 +67,40 @@ func New110TowerConfig() *Tower110Config { } } -// -------------------------- 表结构自动同步 -------------------------- -func init() { - cool.CreateTable(&Tower110Config{}) +// ===== Tower500Config 专属方法 ===== +func (*Tower500Config) TableName() string { + return TableNameTrialTowerConfig +} + +func (*Tower500Config) GroupName() string { + return "default" +} + +func New500TowerConfig() *Tower500Config { + return &Tower500Config{ + BaseTowerConfig: NewBaseTowerConfig(), + } +} + +// ===== Tower600Config 专属方法 ===== +func (*Tower600Config) TableName() string { + return TableNameBraveTowerConfig +} + +func (*Tower600Config) GroupName() string { + return "default" +} + +func New600TowerConfig() *Tower600Config { + return &Tower600Config{ + BaseTowerConfig: NewBaseTowerConfig(), + } +} + +// -------------------------- 表结构自动同步(初始化所有塔配置表)-------------------------- +func init() { + // 依次创建所有塔配置表,保持原有自动同步逻辑 + cool.CreateTable(&Tower110Config{}) + cool.CreateTable(&Tower500Config{}) + cool.CreateTable(&Tower600Config{}) } diff --git a/modules/config/model/tower_500.go b/modules/config/model/tower_500.go deleted file mode 100644 index 1d4ad1fdf..000000000 --- a/modules/config/model/tower_500.go +++ /dev/null @@ -1,57 +0,0 @@ -package model - -import ( - "blazing/cool" -) - -// 表名常量定义:试炼之塔配置表 -const ( - TableNameTrialTowerConfig = "trial_tower_config" // 试炼之塔配置表(核心记录层数、BOSS数组、奖励物品/精灵) -) - -type BaseTowerConfig struct { - *cool.Model `json:"-" gorm:"embedded"` // 嵌入通用Model(ID/创建时间/更新时间,不参与json序列化) - - // 核心必填字段(与勇者之塔完全一致,仅表名和标识不同) - TowerLevel uint32 `gorm:"not null;default:0;uniqueIndex;comment:'试炼之塔层数(唯一标识每层配置)'" json:"tower_level" description:"试炼之塔层数"` - BossIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定BOSS ID数组,关联config_pet_boss表主键'" json:"boss_ids" description:"绑定BOSS数组"` - - //绑定任务数组BaseTowerConfig - TaskIds []uint32 `gorm:"not null;type:json;default:'[]';comment:'绑定任务ID数组,关联config_task表主键'" json:"task_ids" description:"绑定任务数组"` - - // 通用辅助字段(与勇者之塔完全一致,无额外添加) - IsEnabled uint32 `gorm:"not null;default:1;comment:'是否启用该层配置(0-禁用 1-启用)'" json:"is_enabled" description:"是否启用"` - Remark string `gorm:"size:512;default:'';comment:'试炼之塔层备注'" json:"remark" description:"备注信息"` - // ItemGift []ItemGift `orm:"with:item_id=id"` -} - -func NewBaseTowerConfig() BaseTowerConfig { - return BaseTowerConfig{ - Model: cool.NewModel(), - } -} - -// Tower500Config 试炼之塔核心配置模型(与勇者之塔结构完全一致,无额外专属字段) -type Tower500Config struct { - BaseTowerConfig -} - -// -------------------------- 核心配套方法(与勇者之塔完全一致)-------------------------- -func (*Tower500Config) TableName() string { - return TableNameTrialTowerConfig -} - -func (*Tower500Config) GroupName() string { - return "default" -} - -func New500TowerConfig() *Tower500Config { - return &Tower500Config{ - BaseTowerConfig: NewBaseTowerConfig(), - } -} - -// -------------------------- 表结构自动同步 -------------------------- -func init() { - cool.CreateTable(&Tower500Config{}) -} diff --git a/modules/config/model/tower_600.go b/modules/config/model/tower_600.go deleted file mode 100644 index 8a63b5a61..000000000 --- a/modules/config/model/tower_600.go +++ /dev/null @@ -1,35 +0,0 @@ -package model - -import ( - "blazing/cool" -) - -// 表名常量定义:勇者之塔配置表 -const ( - TableNameBraveTowerConfig = "brave_tower_config" // 勇者之塔配置表(核心记录层数、BOSS数组、奖励物品/精灵) -) - -// Tower600Config 勇者之塔核心配置模型(结构简洁,无额外专属字段) -type Tower600Config struct { - BaseTowerConfig -} - -// -------------------------- 核心配套方法(结构与试炼之塔完全一致)-------------------------- -func (*Tower600Config) TableName() string { - return TableNameBraveTowerConfig -} - -func (*Tower600Config) GroupName() string { - return "default" -} - -func New600TowerConfig() *Tower600Config { - return &Tower600Config{ - BaseTowerConfig: NewBaseTowerConfig(), - } -} - -// -------------------------- 表结构自动同步 -------------------------- -func init() { - cool.CreateTable(&Tower600Config{}) -} diff --git a/modules/config/service/base.go b/modules/config/service/base.go new file mode 100644 index 000000000..ef8625ad9 --- /dev/null +++ b/modules/config/service/base.go @@ -0,0 +1,16 @@ +package service + +import ( + "blazing/cool" + + "github.com/gogf/gf/v2/database/gdb" +) + +func dbm(m cool.IModel) *gdb.Model { + return cool.DBM(m). + Cache(gdb.CacheOption{ + // Duration: time.Hour, + + Force: false, + }) +} diff --git a/modules/config/service/boss.go b/modules/config/service/boss.go index a8b906c0e..f830f8322 100644 --- a/modules/config/service/boss.go +++ b/modules/config/service/boss.go @@ -3,8 +3,6 @@ package service import ( "blazing/cool" "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" ) type BossService struct { @@ -27,12 +25,7 @@ func (s *BossService) Get(id uint32) *model.BossConfig { return nil } var item *model.BossConfig - cool.DBM(s.Model).Where("id", id). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&item) + dbm(s.Model).Where("id", id).Scan(&item) return item diff --git a/modules/config/service/effect.go b/modules/config/service/effect.go index 742f3e7e4..885bceca0 100644 --- a/modules/config/service/effect.go +++ b/modules/config/service/effect.go @@ -3,8 +3,6 @@ package service import ( "blazing/cool" "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" ) type EffectService struct { @@ -12,11 +10,7 @@ type EffectService struct { } func (s *EffectService) Args(id uint32) (int, []int) { - m := cool.DBM(s.Model).Where("se_idx", id).Cache(gdb.CacheOption{ - //Duration: time.Hour, - - Force: false, - }) + m := dbm(s.Model).Where("se_idx", id) var tt model.PlayerPetSpecialEffect m.Scan(&tt) diff --git a/modules/config/service/item.go b/modules/config/service/item.go index 2dc6b98aa..5a2a596ca 100644 --- a/modules/config/service/item.go +++ b/modules/config/service/item.go @@ -19,11 +19,7 @@ type ItemService struct { func (s *ItemService) GetItemCount(id uint32) data.ItemInfo { var item model.ItemGift var res data.ItemInfo - cool.DBM(s.Model).Where("id", id).Where("is_enabled", 1).Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&item) + dbm(s.Model).Where("id", id).Where("is_enabled", 1).Scan(&item) if item.ItemID == 0 { diff --git a/modules/config/service/pet.go b/modules/config/service/pet.go index f0beaf9ab..e23196048 100644 --- a/modules/config/service/pet.go +++ b/modules/config/service/pet.go @@ -3,8 +3,6 @@ package service import ( "blazing/cool" "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" ) type PetRewardService struct { @@ -30,12 +28,7 @@ func (s *PetRewardService) Get(id uint32) *model.PetReward { return nil } var item *model.PetReward - cool.DBM(s.Model).Where("id", id). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&item) + dbm(s.Model).Where("id", id).Scan(&item) return item diff --git a/modules/config/service/pet_fusion_material_service.go b/modules/config/service/pet_fusion_material_service.go index 323e7ade3..6422cb6a7 100644 --- a/modules/config/service/pet_fusion_material_service.go +++ b/modules/config/service/pet_fusion_material_service.go @@ -7,7 +7,6 @@ import ( "blazing/modules/dict/service" "strings" - "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/grand" @@ -48,7 +47,7 @@ func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 { } } - m := cool.DBM(s.Model) + m := dbm(s.Model) var effect *model.PetFusionMaterial //一个特性应该是唯一的,但是我们要获取默认随机特性 condition := g.Map{ @@ -58,11 +57,7 @@ func (s *PetFusionMaterialService) Data(Material1 [4]uint32) uint32 { "material4": Material1[3], "is_enable": 1, } - m.Where(condition).Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&effect) + m.Where(condition) .Scan(&effect) //这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性 //也许这个时候的特性配方就是随机从数据库中查找一个特性 diff --git a/modules/config/service/pet_fusion_service.go b/modules/config/service/pet_fusion_service.go index 6436c51c7..093e0b212 100644 --- a/modules/config/service/pet_fusion_service.go +++ b/modules/config/service/pet_fusion_service.go @@ -15,8 +15,6 @@ type PetFusionService struct { *cool.Service // 嵌入通用Service(继承基础CRUD方法) } - - // NewPetFusionService 创建PetFusionService实例 func NewPetFusionService() *PetFusionService { return &PetFusionService{ @@ -57,7 +55,7 @@ func (s *PetFusionService) Data(p1, p2, rand uint32) uint32 { } func (s *PetFusionService) getData(p1, p2 uint32) []model.PetFusion { //cacheKey := strings.Join([]string{fmt.Sprintf("%d", p1), fmt.Sprintf("%d", p2)}, ":") - m := cool.DBM(s.Model) + m := dbm(s.Model) var pet []model.PetFusion //一个特性应该是唯一的,但是我们要获取默认随机特性 condition := g.Map{ @@ -68,11 +66,7 @@ func (s *PetFusionService) getData(p1, p2 uint32) []model.PetFusion { // "exp > 0" : nil, // "category" : g.Slice{100, 200}, } - m.Where(condition).Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&pet) + m.Where(condition).Scan(&pet) return pet } diff --git a/modules/config/service/server.go b/modules/config/service/server.go index f5caef738..7febf2e94 100644 --- a/modules/config/service/server.go +++ b/modules/config/service/server.go @@ -77,12 +77,7 @@ func (s *ServerService) GetPort() []model.ServerList { } func (s *ServerService) GetServer() []model.ServerList { var item []model.ServerList - cool.DBM(s.Model). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&item) + dbm(s.Model).Scan(&item) return item diff --git a/modules/config/service/shiny.go b/modules/config/service/shiny.go index 4d28df446..94dde6ec5 100644 --- a/modules/config/service/shiny.go +++ b/modules/config/service/shiny.go @@ -7,7 +7,6 @@ import ( "context" "encoding/json" - "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/grand" @@ -47,14 +46,10 @@ func (s *ShinyService) RandShiny(id uint32) *data.GlowFilter { var ret []model.ColorfulSkin // 执行 Raw SQL 并扫描返回值 - cool.DBM(s.Model). + dbm(s.Model). Wheref(`bind_elf_ids @> ?::jsonb`, id). Wheref(`jsonb_typeof(bind_elf_ids) = ?`, "array"). - Where("is_enabled", 1).Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&ret) + Where("is_enabled", 1).Scan(&ret) for _, v := range ret { //print(v.ID) @@ -80,15 +75,10 @@ func (s *ShinyService) FixShiny(id uint32) *data.GlowFilter { var ret []model.ColorfulSkin // 执行 Raw SQL 并扫描返回值 - cool.DBM(s.Model). + dbm(s.Model). Wheref(`bind_elf_ids @> ?::jsonb`, id). Wheref(`jsonb_typeof(bind_elf_ids) = ?`, "array"). - Where("is_enabled", 1). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&ret) + Where("is_enabled", 1).Scan(&ret) v := ret[grand.Intn(len(ret))] diff --git a/modules/config/service/talkconfig.go b/modules/config/service/talkconfig.go index eb43de6a6..b06e54ecd 100644 --- a/modules/config/service/talkconfig.go +++ b/modules/config/service/talkconfig.go @@ -3,8 +3,6 @@ package service import ( "blazing/cool" "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" ) type TalkConfigService struct { @@ -23,11 +21,7 @@ func NewTalkConfigService() *TalkConfigService { func (s *TalkConfigService) GetCache(flag int) model.MineralCollectionConfig { var config model.MineralCollectionConfig - cool.DBM(s.Model).Where("type", flag).Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&config) + dbm(s.Model).Where("type", flag).Scan(&config) return config } diff --git a/modules/config/service/task.go b/modules/config/service/task.go index 1484d6163..81b07e974 100644 --- a/modules/config/service/task.go +++ b/modules/config/service/task.go @@ -24,12 +24,7 @@ func NewTaskService() *TaskService { } func (s *TaskService) Get(id, os uint32) *model.TaskConfig { var item []model.TaskConfig - cool.DBM(s.Model).Where("task_id", id). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&item) + dbm(s.Model).Where("task_id", id).Scan(&item) var res *model.TaskConfig if len(item) == 1 { //只有一个直接默认 if item[0].OutState == os { diff --git a/modules/config/service/tower.go b/modules/config/service/tower.go new file mode 100644 index 000000000..8ed647311 --- /dev/null +++ b/modules/config/service/tower.go @@ -0,0 +1,88 @@ +package service + +import ( + "blazing/cool" + "blazing/modules/config/model" + + "github.com/gogf/gf/v2/database/gdb" +) + +// 定义塔类型枚举,方便区分不同塔的业务逻辑 +type TowerType uint32 + +const ( + TowerType110 TowerType = 110 // 110塔 + TowerType500 TowerType = 500 // 500塔 + TowerType600 TowerType = 600 // 600塔 +) + +// TowerService 统一的塔配置服务,整合110/500/600塔的逻辑 +type TowerService struct { + *cool.Service + towerType TowerType // 标记当前服务对应的塔类型 +} + +// NewTowerService 创建指定类型的塔配置服务 +func NewTowerService(towerType TowerType) *TowerService { + // 根据塔类型初始化对应的Model + var modelInstance cool.IModel + switch towerType { + case TowerType110: + modelInstance = model.New110TowerConfig() + case TowerType500: + modelInstance = model.New500TowerConfig() + case TowerType600: + modelInstance = model.New600TowerConfig() + default: + panic("unsupported tower type: " + string(rune(towerType))) // 非支持类型直接panic,也可返回error + } + + return &TowerService{ + Service: &cool.Service{Model: modelInstance}, + towerType: towerType, + } +} + +// Boss 根据塔等级获取对应的Boss配置(统一入口) +func (s *TowerService) Boss(towerLevel uint32) *model.BaseTowerConfig { + // 构建基础查询条件 + query := cool.DBM(s.Model).Where("tower_level = ?", towerLevel) + + // 根据塔类型处理不同的配置结构体和缓存逻辑 + switch s.towerType { + case TowerType110: + var config model.Tower110Config + query.Scan(&config) + return &config.BaseTowerConfig + + case TowerType500: + var config model.Tower500Config + query.Scan(&config) + return &config.BaseTowerConfig + + case TowerType600: + var config model.Tower600Config + // 600塔专属的缓存配置 + query.Cache(gdb.CacheOption{ + // Duration: time.Hour, // 可根据需要开启缓存时长 + Force: false, + }).Scan(&config) + return &config.BaseTowerConfig + + default: + return nil // 非支持类型返回nil,也可根据业务需求调整 + } +} + +// 兼容原有调用方式的快捷构造函数(可选,保证代码平滑迁移) +func NewTower110Service() *TowerService { + return NewTowerService(TowerType110) +} + +func NewTower500Service() *TowerService { + return NewTowerService(TowerType500) +} + +func NewTower600Service() *TowerService { + return NewTowerService(TowerType600) +} diff --git a/modules/config/service/tower110.go b/modules/config/service/tower110.go deleted file mode 100644 index 16c6ddab7..000000000 --- a/modules/config/service/tower110.go +++ /dev/null @@ -1,32 +0,0 @@ -package service - -import ( - "blazing/cool" - "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" -) - -type Tower110Service struct { - *cool.Service -} - -func NewTower110Service() *Tower110Service { - return &Tower110Service{ - &cool.Service{ - Model: model.New110TowerConfig(), - }, - } -} - -func (s *Tower110Service) Boss(tower_level uint32) *model.BaseTowerConfig { - var config model.Tower110Config - cool.DBM(s.Model).Where("tower_level = ?", tower_level). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&config) - - return &config.BaseTowerConfig -} diff --git a/modules/config/service/tower500.go b/modules/config/service/tower500.go deleted file mode 100644 index 89e06db46..000000000 --- a/modules/config/service/tower500.go +++ /dev/null @@ -1,31 +0,0 @@ -package service - -import ( - "blazing/cool" - "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" -) - -type Tower500Service struct { - *cool.Service -} - -func NewTower500Service() *Tower500Service { - return &Tower500Service{ - &cool.Service{ - Model: model.New500TowerConfig(), - }, - } -} -func (s *Tower500Service) Boss(tower_level uint32) *model.BaseTowerConfig { - var config model.Tower600Config - cool.DBM(s.Model).Where("tower_level = ?", tower_level). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&config) - - return &config.BaseTowerConfig -} diff --git a/modules/config/service/tower600.go b/modules/config/service/tower600.go deleted file mode 100644 index 96f77fd40..000000000 --- a/modules/config/service/tower600.go +++ /dev/null @@ -1,32 +0,0 @@ -package service - -import ( - "blazing/cool" - "blazing/modules/config/model" - - "github.com/gogf/gf/v2/database/gdb" -) - -type Tower600Service struct { - *cool.Service -} - -func NewTower600Service() *Tower600Service { - return &Tower600Service{ - &cool.Service{ - Model: model.New600TowerConfig(), - }, - } -} - -func (s *Tower600Service) Boss(tower_level uint32) *model.BaseTowerConfig { - var config model.Tower600Config - cool.DBM(s.Model).Where("tower_level = ?", tower_level). - Cache(gdb.CacheOption{ - // Duration: time.Hour, - - Force: false, - }).Scan(&config) - - return &config.BaseTowerConfig -} diff --git a/public/qqwry.ipdb b/public/qqwry.ipdb index 543833b3f..63b5ae89b 100644 Binary files a/public/qqwry.ipdb and b/public/qqwry.ipdb differ