game_sync/model/config.go

222 lines
5.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import (
"strconv"
"mongo.games.com/game/protocol/shop"
"mongo.games.com/game/protocol/webapi"
)
/*
通用模型定义在这里,如果需要自定义可以内嵌在新结构体中
*/
const (
OpAll = 0
OpTurnplate = 1
OpBlindBox = 2
OpFirstPay = 3
OpContinuousPay = 4
OpPhoneLottery = 5
OpCollect = 6
)
const (
WelfareNil = 0 // 不处理
WelfareOpen = 1 // 开启
WelfareClose = 2 // 关闭
)
type ShopInfo struct {
Id int32 // 商品ID
Page int32 // 页面 1金币页面 2钻石页面 3道具页面
Order int32 // 排序 页面内商品的位置排序
Location []int32 // 显示位置 第1位竖版大厅 第2位Tienlen1级选场 第3位捕鱼1级选场
Picture string // 图片id
Name string // 名称
Label []int32 // 标签
Ad int32 // 是否观看广告 0不看
AdTime int32 // 观看几次广告
RepeatTimes int32 // 领取次数
CoolingTime []int32 // 观看冷却时间
Type int32 // 获得类型 1金币 2钻石 3道具类型
Amount int64 // 获得数量
AddArea []int32 // 加送百分比比如加送10%就配置110
ItemId int32 // 获得道具ID
AddItemInfo []*shop.ItemInfo // 获得道具
ConstType int32 // 购买消耗类型 1金币 2钻石 3美金 4柬埔寨币
CostArea []int32 // 消耗数量区间
VipLevel int32 //Vip等级限制
Ratio int32 //权重
EndTime int32 //新手礼包结束时间间隔
//缓存数据
AdLookedNum int32 //已经观看的次数
AdReceiveNum int32 //已经领取的次数
RemainingTime int32
LastLookTime int32
RoleAdded int32
PetAdded int32
RoleAddedId int32 //加成人物ID
PetAddedId int32 //加成宠物ID
FirstSwitch bool // 首冲翻倍
AmountFinal int64 // 实际获得数量
}
func (this *ShopInfo) GetName() string {
return this.Name + "|" + strconv.Itoa(int(this.Id))
}
func (this *ShopInfo) GetItems() []ItemInfo {
var ret []ItemInfo
if this.ItemId > 0 {
ret = append(ret, ItemInfo{
ItemId: this.ItemId,
ItemNum: this.Amount,
})
}
for _, v := range this.AddItemInfo {
ret = append(ret, ItemInfo{
ItemId: v.ItemId,
ItemNum: v.ItemNum,
})
}
return ret
}
type AllConfig struct {
// 平台配置
Platform *webapi.Platform
// 客户端游戏入口开关
EntrySwitch map[int32]*webapi.EntrySwitch
// 公告
CommonNotices *webapi.CommonNoticeList
// 七日签到
*webapi.Welfare7SignDateList
// 转盘
*webapi.WelfareTurnplateDateList
// 盲盒
*webapi.WelfareBlindBoxDataList
BlindBoxCycle int32
// 首充
*webapi.WelfareFirstPayDataList
FirstPayCycle int32
// 连续充值
*webapi.WelfareContinuousPayDataList
ContinuousPayCycle int32
// 积分换手机
*webapi.WelfarePhoneLotteryStatus
// 集卡活动
*webapi.WelfareCollectConfig
// 个人水池
*webapi.PlayerPool
// 游戏调控全局配置
*webapi.GameConfig
// 兑换商品
*webapi.ExchangeShopList
// 商店
ShopInfos map[int32]*ShopInfo // 商品id:商品信息
// 渠道开关
ChannelSwitch map[int32]*webapi.ChannelSwitchConfig
}
type GlobalConfig struct {
// 包对应的平台,包标识
PackageList map[string]*webapi.AppInfo
// 超管平台游戏开关游戏id
GameStatus map[int32]bool
}
type ConfigMgr struct {
platform map[string]*AllConfig
global *GlobalConfig
}
func NewConfigMgr() *ConfigMgr {
return &ConfigMgr{
platform: make(map[string]*AllConfig),
}
}
func (cm *ConfigMgr) GetConfig(platform string) *AllConfig {
c, ok := cm.platform[platform]
if !ok {
c = &AllConfig{
// todo 初始化默认值
EntrySwitch: make(map[int32]*webapi.EntrySwitch),
ShopInfos: make(map[int32]*ShopInfo),
ChannelSwitch: make(map[int32]*webapi.ChannelSwitchConfig),
}
cm.platform[platform] = c
}
return c
}
func (cm *ConfigMgr) GetGlobalConfig() *GlobalConfig {
if cm.global == nil {
cm.global = &GlobalConfig{
// todo 初始化默认值
PackageList: make(map[string]*webapi.AppInfo),
GameStatus: make(map[int32]bool),
}
}
return cm.global
}
func (cm *ConfigMgr) GetConfigs() map[string]*AllConfig {
return cm.platform
}
// UpdateItemShop 更新商品信息
func (cm *ConfigMgr) UpdateItemShop(list *webapi.ItemShopList) {
if list == nil {
return
}
shopInfos := make(map[int32]*ShopInfo)
for _, itemShop := range list.List {
var itemInfo []*shop.ItemInfo
for key, value := range itemShop.Award {
itemInfo = append(itemInfo, &shop.ItemInfo{
ItemId: int32(key),
ItemNum: value,
})
}
shopInfos[itemShop.Id] = &ShopInfo{
Id: itemShop.Id,
ItemId: itemShop.ItemId,
Page: itemShop.Page,
Order: itemShop.Order,
Type: itemShop.Type,
Location: itemShop.Location,
Picture: itemShop.Picture,
Name: itemShop.Name,
Ad: itemShop.Ad,
AdTime: itemShop.AdTime,
RepeatTimes: itemShop.RepeatTimes,
CoolingTime: itemShop.CoolingTime,
Label: itemShop.Label,
AddArea: itemShop.AddArea,
Amount: int64(itemShop.Amount),
ConstType: itemShop.ConstType,
CostArea: itemShop.CostArea,
AddItemInfo: itemInfo,
VipLevel: itemShop.VipLevel,
Ratio: itemShop.Ratio,
EndTime: itemShop.EndTime,
FirstSwitch: itemShop.FirstSwitch,
}
}
cm.GetConfig(list.Platform).ShopInfos = shopInfos
}
// GetShopInfo 获取商品信息
func (cm *ConfigMgr) GetShopInfo(plt string, shopId int32) *ShopInfo {
if shops := cm.GetConfig(plt).ShopInfos; shops != nil {
if info, ok1 := shops[shopId]; ok1 {
return info
}
}
return nil
}