feat(config): 添加服务器调试模式配置和塔配置重构

- 在ServerList结构体中添加IsDebug字段用于调试模式标识
- 修改GetServerInfoList函数增加isdebug参数支持
- 移除硬编码的rpcaddr本地地址配置
- 重构塔配置模型,将tower_500和tower_600合并到tower_110
This commit is contained in:
2026-01-08 23:57:22 +08:00
parent 4d0464c76b
commit 971abd29ab
26 changed files with 221 additions and 291 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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)

View File

@@ -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()

View File

@@ -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
)

View File

@@ -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方法

View File

@@ -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"` // 嵌入通用ModelID/创建时间/更新时间不参与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{})
}

View File

@@ -1,57 +0,0 @@
package model
import (
"blazing/cool"
)
// 表名常量定义:试炼之塔配置表
const (
TableNameTrialTowerConfig = "trial_tower_config" // 试炼之塔配置表核心记录层数、BOSS数组、奖励物品/精灵)
)
type BaseTowerConfig struct {
*cool.Model `json:"-" gorm:"embedded"` // 嵌入通用ModelID/创建时间/更新时间不参与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{})
}

View File

@@ -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{})
}

View File

@@ -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,
})
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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

View File

@@ -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)
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
//也许这个时候的特性配方就是随机从数据库中查找一个特性

View File

@@ -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
}

View File

@@ -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

View File

@@ -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))]

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

Binary file not shown.