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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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对应的精英单位配置")
}