```
feat(config): 添加服务器调试模式配置和塔配置重构 - 在ServerList结构体中添加IsDebug字段用于调试模式标识 - 修改GetServerInfoList函数增加isdebug参数支持 - 移除硬编码的rpcaddr本地地址配置 - 重构塔配置模型,将tower_500和tower_600合并到tower_110
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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方法
|
||||
|
||||
@@ -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{})
|
||||
}
|
||||
|
||||
@@ -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{})
|
||||
}
|
||||
@@ -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{})
|
||||
}
|
||||
16
modules/config/service/base.go
Normal file
16
modules/config/service/base.go
Normal 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,
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
//这时候有可能效果是空的,那么这时候就再次查询默认的特性,保证每次必会生成一个数据库有的特性
|
||||
//也许这个时候的特性配方就是随机从数据库中查找一个特性
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))]
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
88
modules/config/service/tower.go
Normal file
88
modules/config/service/tower.go
Normal 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)
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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.
Reference in New Issue
Block a user