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.

151 lines
4.4 KiB
Go

package config
import "github.com/pkg/errors"
type (
Elite struct {
LiveDict map[int32]int64 // 直播间序号对应ID
DefaultId int64 // 默认单位ID
Items []EliteItem
}
// EliteItem 精英单位
EliteItem struct {
Id int64 // 单位ID
Sort int32 // 排序号
PriceDay int64 // 每天价格(弹币)
PriceForever int64 // 永久价格
}
Title struct {
LiveDict map[int32]int64 // 直播间序号对应ID
Items []TitleItem
}
// TitleItem 称号
TitleItem struct {
Id int64 // 称号ID
Name string // 称号名
Type string // 称号类型
RankType int32 // 作用的排行榜类型
PriceDay int64 // 每天价格(弹币)
PriceForever int64 // 永久价格(弹币)
}
GiftPack struct {
PackType string // 礼包类型
PackName string // 礼包名称
// Condition 领取条件
Condition struct {
UserLimit int32 // 单人可领取数量
UserResetType string // 用户礼包重置类型: 不重置(unset)|每天(daily)|每周(weekly)|每月(monthly)
StartTime string // 可领取时间(开始) 两个时间相等则不限期领取
EndTime string // 可领取时间(结束)
}
// Content 礼包内容
Content struct {
Coin int64 // 积分数
Coins []int64 // 积分数(多次领取,每次不同)
// Title 奖励称号列表
Title []struct {
Id int64 // 称号ID
Duration int64 // 持续时长,单位: 秒 -1无限
}
}
}
// RankSubmit 排行榜结算配置
RankSubmit struct {
TitleId int64 // 称号奖励
Best []float64 // 弹币奖励(前n) 单位: 元
Consolation float64 // 安慰奖(后max-n) 单位: 元
}
GameConfig struct {
UserRetriever struct {
Enabled bool // 是否开启
UpdateDuration int64 // 用户信息更新最短间隔 单位 h
NobilityPlatforms []string // 需要获取贵族的平台
Cron struct {
PlatformUser string
Nobility string
}
Bilibili struct {
RoomId int64 // 直播房间号
Mid int64 // 主播UID 不输入就通过API获取
RoomShortInfoApi string // 房间简短信息API
TopListApi string
}
}
Rank struct {
Enabled bool // 是否开启
Cron struct {
Update string // 更新榜单
Persistence string // 持久化
}
Submit map[int32]RankSubmit // 排行榜结算
}
GiftCollector struct {
Enabled bool // 是否开启
Platforms []string // 需搜集的平台
Cron struct {
CollectGift string
}
}
// 弹币
Coin struct {
// CheckIn 签到
CheckIn struct {
Points []int64 // 签到积分 次数分数
Critical float32 // 暴击率(百分比)
CriticalRadio []float32 // 暴击倍数
}
RMBToCoin float64 // RMB到弹币的转换
GiftToRMB map[string]float64 // 平台礼物到RMB的转换
FreeToCoin map[string]float64 // 平台免费礼物到弹币的转换
}
// 段位
Grade struct {
BravePointCost []int64 // 骁勇分抵扣规则对于grade等级
MaxBravePoint int64 // 最大骁勇分
WinScoreThreshold float32 // 获胜升段分数阈值
MinUserCount int // 最小段位计算用户量
ProtectedGradeThreshold int64 // 保护段位阈值(大段位)
ProtectedGradeLost int32 // 保护段位(失败方)名次
}
// 精英单位
Elite Elite
// 称号
Title Title
// GiftPack 礼包配置
GiftPackMap []GiftPack
}
)
func (c *Title) FindTitleCfg(id int64) (*TitleItem, error) {
for _, item := range c.Items {
if id == item.Id {
return &item, nil
}
}
return nil, errors.New("未找到ID对应的称号配置")
}
func (c *Title) FindTitleCfgByLive(sort int32) (*TitleItem, error) {
if id, ok := c.LiveDict[sort]; ok {
return c.FindTitleCfg(id)
}
return nil, errors.New("未找到sort对应的称号配置")
}
func (c *Elite) FindEliteCfg(id int64) (*EliteItem, error) {
for _, item := range c.Items {
if id == item.Id {
return &item, nil
}
}
return nil, errors.New("未找到ID对应的精英单位配置")
}
func (c *Elite) FindEliteCfgByLive(sort int32) (*EliteItem, error) {
if id, ok := c.LiveDict[sort]; ok {
return c.FindEliteCfg(id)
}
return nil, errors.New("未找到sort对应的精英单位配置")
}