You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
3.4 KiB
Go

package config
import (
"fmt"
"git.noahlan.cn/northlan/ntools-go/logger"
"github.com/knadh/koanf"
"github.com/knadh/koanf/parsers/yaml"
"github.com/knadh/koanf/providers/file"
"github.com/zeromicro/go-zero/zrpc"
)
var Config config
type (
Kafka struct {
Addr []string
Topic string
ConsumerGroup string
}
config struct {
// Log 日志配置
Log struct {
File logger.FileConfig
Console logger.ConsoleConfig
}
Server struct {
Debug bool
Listen string
}
// Kafka 队列配置
Kafka struct {
Danmaku Kafka // 发送弹幕
Gift Kafka // 赠送礼物
GuardBuy Kafka // TODO 购买贵族 改名
RewardPool Kafka // 奖池消息
UserCoin Kafka // 用户金币变动消息
}
Game struct {
AdminUserId []int64 // 管理员ID
// Zhg 指挥官PvP模式
Zhg struct {
CoinFoodRatio float32 // 硬币到粮草的转换系数(乘)
OutbreakCount int64 // 每次暴兵数量
OutbreakBaseCost int64 // 默认每次暴兵消耗(不限兵种)
OutbreakCostDict map[int]int64 // 暴兵消耗表
}
// Zhghz 指挥官海战模式
Zhghz struct {
}
// Zhgfb 指挥官副本模式
Zhgfb struct {
}
// Zhgzd 指挥官阵地模式
Zhgzd struct {
MaxStrategicPoints int32 // 最大战略点数
StrategicRecoverSpeed int32 // 每秒回复战略点数
// CommandUnitDict 命令单位ID字典
CommandUnitDict map[string]string
// CommandCostDict 命令战略点消耗
CommandCostDict map[string]struct {
Common int32 // 通用消耗
Units map[string]int32 // 单位消耗
}
// 战略暴兵数量(兵种相关)
DispatchCountDict map[string]int32
// 礼物效果配置
GiftEffect struct {
// StrategicMaximal 战略点上限配置
StrategicMaximal struct {
GiftIds []int64 // 对应礼物ID列表
Addon int32 // 增加上限值
Limit int32 // 次数限制
}
// StrategicRecover 战略点回复速度
StrategicRecover struct {
GiftIds []int64 // 对应礼物ID
Addon int32 // 增加速度值 x每秒
Duration int32 // 持续时间 秒
Limit int32 // 次数限制
}
// SupportSkill
SupportSkill []struct {
GiftIds []int64 // 对应礼物ID列表 (每次匹配一个)
SkillIds []string // 技能ID列表
}
// SuperSkill
SuperSkill struct {
GiftIds []int64 // 对应礼物ID列表
}
}
}
}
// RPC
UserCenterRpc zrpc.RpcClientConf
}
)
var k = koanf.New(".")
func Init(filepath string) {
f := file.Provider(filepath)
err := f.Watch(func(event interface{}, err error) {
if err != nil {
fmt.Printf("配置文件热重载失败: %v\n", err)
return
}
k = koanf.New(".")
err = loadAndUnmarshal(f)
if err != nil {
fmt.Printf("配置文件热重载失败: %v\n", err)
return
}
fmt.Printf("重载配置文件: %+v\n", Config)
})
if err != nil {
panic(err)
}
mustLoadAndUnmarshal(f)
fmt.Printf("%+v\n", Config)
}
func loadAndUnmarshal(f *file.File) (err error) {
err = k.Load(f, yaml.Parser())
if err != nil {
return
}
err = k.UnmarshalWithConf("", &Config, koanf.UnmarshalConf{Tag: "c"})
if err != nil {
return
}
return
}
func mustLoadAndUnmarshal(f *file.File) {
if err := loadAndUnmarshal(f); err != nil {
panic(err)
}
}