复仇者联盟

This commit is contained in:
sk 2024-04-22 18:39:27 +08:00
parent a3b95947b0
commit 0de01b7eaa
14 changed files with 1767 additions and 1291 deletions

View File

@ -77,3 +77,29 @@
:<08><><18><EFBFBD><E998BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>俛樗(<28><EFBFBD>%0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P :<08><><18><EFBFBD><E998BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>俛樗(<28><EFBFBD>%0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P
;<08><><18><E99B89><E285A4><EFBFBD><EFBFBD> <20><><EFBFBD>(<28>蓁〆0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P ;<08><><18><E99B89><E285A4><EFBFBD><EFBFBD> <20><><EFBFBD>(<28>蓁〆0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P
;<08><><18>跡球<E8B7A1><E79083><EFBFBD><EFBFBD> <20><EFBFBD><E58784>:(<28><><EFBFBD><EFBFBD><EFBFBD>0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P ;<08><><18>跡球<E8B7A1><E79083><EFBFBD><EFBFBD> <20><EFBFBD><E58784>:(<28><><EFBFBD><EFBFBD><EFBFBD>0d8<64>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H璞<48><E7929E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P
ÑÛ·€›îÀ–± €ÚÄ XÈ` ÝŒ
ÒÛ·€ŽÎ€áë €„¯_XÈ`À¤ÿ
ÓÛ·€Æ†<C386>€åšw €”ëÜ`À¶üš
ÔÛ·€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
᩸€›îÀ–± €ÚÄ XÈ` ÝŒ
⩸€ŽÎ€áë €„¯_XÈ`À¤ÿ
㩸€Æ†<C386>€åšw €”ëÜ`À¶üš
䩸€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
ñ÷¸€›îÀ–± €ÚÄ XÈ` ÝŒ
ò÷¸€ŽÎ€áë €„¯_XÈ`À¤ÿ
ó÷¸€Æ†<C386>€åšw €”ëÜ`À¶üš
ô÷¸€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
<08>ƹ€›îÀ–± €„¯_XÈ` ÝŒ
‚ƹ€Æ†<C386>€åšw €”ëÜ`À¶üš
ƒÆ¹€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
‘”º€›îÀ–± €„¯_XÈ` ÝŒ
’”º€Æ†<C386>€åšw €”ëÜ`À¶üš
“”º€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
¡âº€›îÀ–± €ÚÄ XÈ` ÝŒ
¢âº€ŽÎ€áë €„¯_XÈ`À¤ÿ
£âº€Æ†<C386>€åšw €”ëÜ`À¶üš
¤âº€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ
±°»€›îÀ–± €ÚÄ XÈ` ÝŒ
²°»€ŽÎ€áë €„¯_XÈ`À¤ÿ
³°»€Æ†<C386>€åšw €”ëÜ`À¶üš
´°»€Œ<E282AC>ž€Êµî €¨Ö¹`€íøµ

View File

@ -857,6 +857,214 @@
"LowerOdds": -100, "LowerOdds": -100,
"LowerOddsMax": -800, "LowerOddsMax": -800,
"ProfitRate": 20 "ProfitRate": 20
},
{
"Id": 3010001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 20000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3010002,
"InitValue": 60000000,
"LowerLimit": 50000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 65000000
},
{
"Id": 3010003,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3010004,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3020001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 20000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3020002,
"InitValue": 60000000,
"LowerLimit": 50000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 65000000
},
{
"Id": 3020003,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3020004,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3030001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 20000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3030002,
"InitValue": 60000000,
"LowerLimit": 50000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 65000000
},
{
"Id": 3030003,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3030004,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3040001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3040002,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3040003,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3050001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3050002,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3050003,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3060001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 20000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3060002,
"InitValue": 60000000,
"LowerLimit": 50000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 65000000
},
{
"Id": 3060003,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3060004,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
},
{
"Id": 3070001,
"InitValue": 6000000,
"LowerLimit": 5000000,
"UpperLimit": 20000000,
"CtrlRate": 200,
"InitNovicValue": 6500000
},
{
"Id": 3070002,
"InitValue": 60000000,
"LowerLimit": 50000000,
"UpperLimit": 200000000,
"CtrlRate": 200,
"InitNovicValue": 65000000
},
{
"Id": 3070003,
"InitValue": 300000000,
"LowerLimit": 250000000,
"UpperLimit": 1000000000,
"CtrlRate": 200,
"InitNovicValue": 325000000
},
{
"Id": 3070004,
"InitValue": 600000000,
"LowerLimit": 500000000,
"UpperLimit": 2000000000,
"CtrlRate": 200,
"InitNovicValue": 650000000
} }
] ]
} }

View File

@ -1,5 +1,5 @@
6у├ж├вс├т"║█ю└= 6с├т├у├ж├в├"║█ю└=
.Ù†Ú†Û†؆"¡<>À„= .Ù†Ú†Û†؆"¡<>À„=
Wь├ы├т├у├в├ш├с├ж├з" ║█─╜Б Wс├ы├ш├ь├з├т├у├ж├в" ║█─╜Б
]в├ь├ы├з├э├с├т├у├ж├ш"╒█Т ]з├с├т├у├ь├ы├ж├в├ш├э"╒█Т

Binary file not shown.

View File

@ -427,7 +427,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o
//水池设置 //水池设置
coinPoolSetting := base.CoinPoolMgr.GetCoinPoolSetting(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId) coinPoolSetting := base.CoinPoolMgr.GetCoinPoolSetting(sceneEx.Platform, sceneEx.GetGameFreeId(), sceneEx.GroupId)
//baseRate := coinPoolSetting.GetBaseRate() //基础赔率 //baseRate := coinPoolSetting.GetBaseRate() //基础赔率
ctroRate := 500 //调节赔率 暗税系数 ctroRate := coinPoolSetting.GetCtrlRate() //调节赔率 暗税系数
//if baseRate >= 10000 || baseRate <= 0 || ctroRate < 0 || ctroRate >= 1000 || baseRate+ctroRate > 9900 { //if baseRate >= 10000 || baseRate <= 0 || ctroRate < 0 || ctroRate >= 1000 || baseRate+ctroRate > 9900 {
// logger.Logger.Warnf("AvengersErrorBaseRate [%v][%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, baseRate, ctroRate) // logger.Logger.Warnf("AvengersErrorBaseRate [%v][%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, baseRate, ctroRate)
// baseRate = 9700 // baseRate = 9700
@ -437,14 +437,14 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o
jackpotRate := ctroRate //奖池系数 jackpotRate := ctroRate //奖池系数
logger.Logger.Tracef("AvengersRates [%v][%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate, ctroRate) logger.Logger.Tracef("AvengersRates [%v][%v][%v][%v][%v]", sceneEx.GetGameFreeId(), playerEx.SnId, playerEx.spinID, taxRate, ctroRate)
//playerEx.IsFNovice(sceneEx.KeyGameId) playerEx.IsFNovice(sceneEx.KeyGameId)
isFoolPlayer := false isFoolPlayer := playerEx.IsFoolPlayer[sceneEx.KeyGameId]
var gamePoolCoin int64 var gamePoolCoin int64
//if isFoolPlayer { if isFoolPlayer {
// gamePoolCoin = base.CoinPoolMgr.GetNoviceCoinPool(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额 gamePoolCoin = base.CoinPoolMgr.GetNoviceCoin(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额
//} else { } else {
gamePoolCoin = base.CoinPoolMgr.GetCoin(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额 gamePoolCoin = base.CoinPoolMgr.GetCoin(sceneEx.GetGameFreeId(), sceneEx.Platform, sceneEx.GroupId) // 当前水池金额
//} }
prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额 prizeFund := gamePoolCoin - sceneEx.jackpot.VirtualJK // 除去奖池的水池剩余金额
// 奖池参数 // 奖池参数
@ -462,7 +462,7 @@ func (this *SceneStateAvengersStart) OnPlayerOp(s *base.Scene, p *base.Player, o
//p.Statics(sceneEx.KeyGameId, sceneEx.KeyGamefreeId, -totalBetValue, true) //p.Statics(sceneEx.KeyGameId, sceneEx.KeyGamefreeId, -totalBetValue, true)
if !p.IsRob && !sceneEx.Testing { if !p.IsRob && !sceneEx.Testing {
// 推送金币 // 推送金币
sceneEx.PushCoinPool(prizeFundAdd, false) sceneEx.PushCoinPool(prizeFundAdd, isFoolPlayer)
//base.CoinPoolMgr.PushCoin(sceneEx.GetGameFreeId(), sceneEx.GroupId, sceneEx.Platform, int64(float64(totalBetValue)*(float64(10000-ctroRate)/10000.0))) //base.CoinPoolMgr.PushCoin(sceneEx.GetGameFreeId(), sceneEx.GroupId, sceneEx.Platform, int64(float64(totalBetValue)*(float64(10000-ctroRate)/10000.0)))
} }

View File

@ -31,6 +31,7 @@ const (
var CoinPoolMgr = &CoinPoolManager{ var CoinPoolMgr = &CoinPoolManager{
CoinPool: new(sync.Map), CoinPool: new(sync.Map),
ProfitPool: new(sync.Map), ProfitPool: new(sync.Map),
NoviceCoinPool: new(sync.Map),
CoinPoolSetting: make(map[string]*webapi.CoinPoolSetting), CoinPoolSetting: make(map[string]*webapi.CoinPoolSetting),
curRunTime: make(map[string]int64), curRunTime: make(map[string]int64),
publicPond: new(sync.Map), publicPond: new(sync.Map),
@ -55,6 +56,9 @@ type CoinPoolManager struct {
//收益池 //收益池
ProfitPoolDBKey string ProfitPoolDBKey string
ProfitPool *sync.Map ProfitPool *sync.Map
//新手池
NoviceCoinPoolDBKey string
NoviceCoinPool *sync.Map
dirty bool dirty bool
@ -178,6 +182,20 @@ func (this *CoinPoolManager) getCoinPoolCoin(key string) int64 {
return poolCoin return poolCoin
} }
// 获取调控池水位
func (this *CoinPoolManager) getNoviceCoinPoolCoin(key string) int64 {
poolValue, ok := this.NoviceCoinPool.Load(key)
if !ok {
return 0
}
poolCoin, ok := poolValue.(int64)
if !ok {
logger.Logger.Errorf("Error type convert in coinpoolmanager GetNoviceCoin:%v-%v", key, poolValue)
return 0
}
return poolCoin
}
// 减少调控池水位 // 减少调控池水位
// 返回当前水位 // 返回当前水位
func (this *CoinPoolManager) popCoin(key string, coin int64) (bool, int64) { func (this *CoinPoolManager) popCoin(key string, coin int64) (bool, int64) {
@ -210,6 +228,38 @@ func (this *CoinPoolManager) popCoin(key string, coin int64) (bool, int64) {
return true, curValue return true, curValue
} }
// 减少调控池水位
// 返回当前水位
func (this *CoinPoolManager) popNoviceCoin(key string, coin int64) (bool, int64) {
if this.getCoinPoolSetting(key).GetSwitch() == 1 {
return false, 0
}
poolValue, ok := this.NoviceCoinPool.Load(key)
if !ok {
return false, 0
}
poolCoin, ok := poolValue.(int64)
if !ok {
logger.Logger.Errorf("Error type convert in coinpoolmanager popNoviceCoin:%v-%v", key, poolValue)
return false, 0
}
//if poolCoin < coin {
// return false
//}
curValue := poolCoin - coin
if curValue < -99999999 {
curValue = -99999999
}
this.NoviceCoinPool.Store(key, curValue)
this.dirty = true
logger.Logger.Infof("$$$$$$$$新手金币池 %v 取出 %v 金币,现有金币 %v.$$$$$$$$", key, coin, curValue)
return true, curValue
}
// 增加调控池水位 // 增加调控池水位
// 返回当前水位 // 返回当前水位
func (this *CoinPoolManager) pushCoin(key string, coin int64) int64 { func (this *CoinPoolManager) pushCoin(key string, coin int64) int64 {
@ -236,6 +286,32 @@ func (this *CoinPoolManager) pushCoin(key string, coin int64) int64 {
return poolCoin return poolCoin
} }
// 增加调控池水位
// 返回当前水位
func (this *CoinPoolManager) pushNoviceCoin(key string, coin int64) int64 {
if this.getCoinPoolSetting(key).GetSwitch() == 1 {
return 0
}
poolValue, ok := this.NoviceCoinPool.Load(key)
if !ok {
this.NoviceCoinPool.Store(key, coin)
this.dirty = true
logger.Logger.Infof("$$$$$$$$新手金币池 %v 放入 %v 金币,现有金币 %v.$$$$$$$$", key, coin, coin)
return coin
}
poolCoin, ok := poolValue.(int64)
if !ok {
logger.Logger.Errorf("NoviceCoin pool push error type value:%v-%v", key, poolValue)
return 0
}
poolCoin += coin
this.NoviceCoinPool.Store(key, poolCoin)
this.dirty = true
logger.Logger.Infof("$$$$$$$$新手金币池 %v 放入 %v 金币,现有金币 %v.$$$$$$$$", key, coin, poolCoin)
return poolCoin
}
// PopCoin 减少调控池水位 // PopCoin 减少调控池水位
func (this *CoinPoolManager) PopCoin(gameFreeId, groupId int32, platform string, coin int64) bool { func (this *CoinPoolManager) PopCoin(gameFreeId, groupId int32, platform string, coin int64) bool {
if coin == 0 { if coin == 0 {
@ -339,7 +415,15 @@ func (this *CoinPoolManager) UpdateCoinPoolSetting(setting *webapi.CoinPoolSetti
if initValue != 0 { //初始化水池 if initValue != 0 { //初始化水池
_, ok := this.CoinPool.Load(key) _, ok := this.CoinPool.Load(key)
if !ok { if !ok {
this.pushCoin(key, int64(initValue)) this.pushCoin(key, initValue)
}
}
// 新手调控池初始化
initValue = setting.GetInitNoviceValue()
if initValue != 0 { //初始化水池
_, ok := this.NoviceCoinPool.Load(key)
if !ok {
this.pushNoviceCoin(key, initValue)
} }
} }
} }
@ -479,6 +563,18 @@ func (this *CoinPoolManager) Init() {
} else { } else {
logger.Logger.Error("Unmarshal coin pool error:", err) logger.Logger.Error("Unmarshal coin pool error:", err)
} }
// 新手调控池
this.NoviceCoinPoolDBKey = fmt.Sprintf("NoviceCoinPoolManager_Srv%v", common.GetSelfSrvId())
data = model.GetStrKVGameData(this.NoviceCoinPoolDBKey)
noviceCoinPool := make(map[string]int64)
err = json.Unmarshal([]byte(data), &noviceCoinPool)
if err == nil {
for key, value := range noviceCoinPool {
this.NoviceCoinPool.Store(key, value)
}
} else {
logger.Logger.Error("Unmarshal novice coin pool error:", err)
}
// 收益池 // 收益池
this.ProfitPoolDBKey = fmt.Sprintf("ProfitPoolManager_Srv%v", common.GetSelfSrvId()) this.ProfitPoolDBKey = fmt.Sprintf("ProfitPoolManager_Srv%v", common.GetSelfSrvId())
data = model.GetStrKVGameData(this.ProfitPoolDBKey) data = model.GetStrKVGameData(this.ProfitPoolDBKey)
@ -525,6 +621,24 @@ func (this *CoinPoolManager) Save(asyn bool) {
} else { } else {
logger.Logger.Error("Marshal coin pool error:", err) logger.Logger.Error("Marshal coin pool error:", err)
} }
// 新手调控池
coinPool = make(map[string]int64)
this.NoviceCoinPool.Range(func(key, value interface{}) bool {
coinPool[key.(string)] = value.(int64)
return true
})
buff, err = json.Marshal(coinPool)
if err == nil {
if asyn {
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
return model.UptStrKVGameData(this.NoviceCoinPoolDBKey, string(buff))
}), nil, "UptStrKVGameData").Start()
} else {
model.UptStrKVGameData(this.NoviceCoinPoolDBKey, string(buff))
}
} else {
logger.Logger.Error("Marshal novice coin pool error:", err)
}
// 收益池 // 收益池
profitPool := make(map[string]int64) profitPool := make(map[string]int64)
this.ProfitPool.Range(func(key, value interface{}) bool { this.ProfitPool.Range(func(key, value interface{}) bool {
@ -620,29 +734,80 @@ func (this *CoinPoolManager) GetCoinPoolStatesByPlatform(platform string, games
return return
} }
func (this *CoinPoolManager) pushCoinNovice(key string, coin int64) {
}
func (this *CoinPoolManager) popCoinNovice(key string, coin int64) {
}
// PushCoinNovice 增加新手池水位 // PushCoinNovice 增加新手池水位
func (this *CoinPoolManager) PushCoinNovice(gameFreeId, groupId int32, platform string, coin int64) { func (this *CoinPoolManager) PushCoinNovice(gameFreeId, groupId int32, platform string, coin int64) {
if coin == 0 { if coin == 0 {
return return
} }
key := this.GenKey(gameFreeId, platform, groupId) key := this.GenKey(gameFreeId, platform, groupId)
this.pushCoinNovice(key, coin) poolVal := coin
if coin > 0 { //处理收益池
setting := this.getCoinPoolSetting(key)
if setting != nil && setting.GetSwitch() == 0 {
rate := this.GetProfitRate(setting)
if rate != 0 { //负值也生效???
profit := coin * int64(rate) / 1000
this.AddProfitPool(key, profit)
poolVal = coin - profit
}
}
}
this.pushNoviceCoin(key, poolVal)
return
} }
// PopCoinNovice 减少新手池水位 // PopCoinNovice 减少新手池水位
func (this *CoinPoolManager) PopCoinNovice(gameFreeId, groupId int32, platform string, coin int64) { func (this *CoinPoolManager) PopCoinNovice(gameFreeId, groupId int32, platform string, coin int64) bool {
if coin == 0 {
return true
}
key := this.GenKey(gameFreeId, platform, groupId)
poolVal := coin
if coin < 0 { //负值为收益
setting := this.getCoinPoolSetting(key)
if setting != nil && setting.GetSwitch() == 0 {
rate := this.GetProfitRate(setting)
if rate != 0 { //负值也生效???
profit := coin * int64(rate) / 1000
this.AddProfitPool(key, -profit)
poolVal = coin - profit
}
}
}
ok, _ := this.popNoviceCoin(key, poolVal)
if ok {
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(gameFreeId)
if dbGameFree != nil && dbGameFree.GetSceneType() != -1 { //非试玩场
//保存数据
//this.ReportCoinPoolRecEvent(gameFreeId, groupId, platform, -coin, curPoolVal, false)
setting := this.GetCoinPoolSetting(platform, gameFreeId, groupId)
if setting != nil {
poolValue, ok := this.NoviceCoinPool.Load(key)
if ok {
poolCoin, ok := poolValue.(int64)
if ok {
if int64(setting.GetLowerLimit()) > poolCoin {
WarningCoinPool(Warning_CoinPoolLow, gameFreeId)
}
if poolCoin < 0 {
WarningCoinPool(Warning_CoinPoolZero, gameFreeId)
}
}
}
}
}
return true
}
return false
} }
// GetNoviceCoin 获取新手池水位 // GetNoviceCoin 获取新手池水位
func (this *CoinPoolManager) GetNoviceCoin(gameFreeId int32, platform string, groupId int32) int64 { func (this *CoinPoolManager) GetNoviceCoin(gameFreeId int32, platform string, groupId int32) int64 {
return 0 key := this.GenKey(gameFreeId, platform, groupId)
return this.getNoviceCoinPoolCoin(key)
} }
// IsMaxOutHaveEnough 判定是否满足出分,out 为负值是出分,正值为收分 // IsMaxOutHaveEnough 判定是否满足出分,out 为负值是出分,正值为收分

View File

@ -20,20 +20,22 @@ var (
var CoinPoolSettingDatas = make(map[string]*CoinPoolSetting) var CoinPoolSettingDatas = make(map[string]*CoinPoolSetting)
type CoinPoolSetting struct { type CoinPoolSetting struct {
Id bson.ObjectId `bson:"_id"` Id bson.ObjectId `bson:"_id"`
Platform string // 平台id Platform string // 平台id
GameFreeId int32 // 游戏id GameFreeId int32 // 游戏id
GroupId int32 // 组id GroupId int32 // 组id
ServerId int32 // 服务器id ServerId int32 // 服务器id
InitValue int64 // 初始库存值 InitValue int64 // 初始库存值
LowerLimit int64 // 库存下限 LowerLimit int64 // 库存下限
UpperLimit int64 // 库存上限 UpperLimit int64 // 库存上限
QuDu int64 // 曲度值 QuDu int64 // 曲度值
UpperOdds int32 // 上线初始概率 UpperOdds int32 // 上线初始概率
UpperOddsMax int32 // 上线最大概率 UpperOddsMax int32 // 上线最大概率
LowerOdds int32 // 下线初始概率 LowerOdds int32 // 下线初始概率
LowerOddsMax int32 // 下线最大概率 LowerOddsMax int32 // 下线最大概率
ProfitRate int32 // 收益抽取比例 ProfitRate int32 // 收益抽取比例
CtrlRate int32 // 调节赔率
InitNoviceValue int64 // 新手初始库存值
// 扩展参数 // 扩展参数
ResetTime int64 // 重置时间 ResetTime int64 // 重置时间
UptTime time.Time // 更新时间 UptTime time.Time // 更新时间
@ -57,6 +59,8 @@ func NewCoinPoolSetting(platform string, groupId, gamefreeid, srverId int32, db
cl.ProfitRate = db.ProfitRate cl.ProfitRate = db.ProfitRate
cl.ResetTime = time.Now().Unix() cl.ResetTime = time.Now().Unix()
cl.UptTime = time.Now() cl.UptTime = time.Now()
cl.CtrlRate = db.CtrlRate
cl.InitNoviceValue = db.InitNovicValue
return cl return cl
} }

File diff suppressed because it is too large Load Diff

View File

@ -681,6 +681,10 @@ message DB_GameCoinPool {
int32 ProfitRate = 10; int32 ProfitRate = 10;
int32 CtrlRate = 11;
int64 InitNovicValue = 12;
} }
message DB_GameCoinPoolArray { message DB_GameCoinPoolArray {

File diff suppressed because it is too large Load Diff

View File

@ -268,12 +268,12 @@ message CoinPoolSetting{
int32 LowerOdds = 11; // 线 int32 LowerOdds = 11; // 线
int32 LowerOddsMax = 12; // 线 int32 LowerOddsMax = 12; // 线
int32 ProfitRate = 13;// int32 ProfitRate = 13;//
//
int64 ResetTime = 14; // int64 ResetTime = 14; //
int32 Switch =15; // 0 1 int32 Switch =15; // 0 1
//
int64 CoinValue = 16; // int64 CoinValue = 16; //
int64 ProfitPool = 17; // int64 ProfitPool = 17; //
int32 CtrlRate = 18; //
int64 InitNoviceValue = 19; //
} }
// //
message MessageInfo { message MessageInfo {

View File

@ -5168,6 +5168,34 @@ func AgcConvertDB_GameCoinPool(fi,fo string) {
if len(row.Cells)<12+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[12].String(), 10, 32)
data.CtrlRate = int32(temp)
if len(row.Cells)<13+1{
break
}
temp, _ = strconv.ParseInt(row.Cells[13].String(), 10, 64)
data.InitNovicValue = int64(temp)
break break
} }

View File

@ -264,21 +264,23 @@ func (this *GameSession) DetectCoinPoolSetting(platform string, gamefreeid, grou
this.cps[key] = data this.cps[key] = data
//send msg //send msg
msg := &webapi.CoinPoolSetting{ msg := &webapi.CoinPoolSetting{
Platform: platform, Platform: platform,
GameFreeId: gamefreeid, GameFreeId: gamefreeid,
ServerId: srvid, ServerId: srvid,
GroupId: groupId, GroupId: groupId,
InitValue: data.InitValue, InitValue: data.InitValue,
LowerLimit: data.LowerLimit, LowerLimit: data.LowerLimit,
UpperLimit: data.UpperLimit, UpperLimit: data.UpperLimit,
QuDu: data.QuDu, QuDu: data.QuDu,
UpperOdds: data.UpperOdds, UpperOdds: data.UpperOdds,
UpperOddsMax: data.UpperOddsMax, UpperOddsMax: data.UpperOddsMax,
LowerOdds: data.LowerOdds, LowerOdds: data.LowerOdds,
LowerOddsMax: data.LowerOddsMax, LowerOddsMax: data.LowerOddsMax,
ProfitRate: data.ProfitRate, ProfitRate: data.ProfitRate,
ResetTime: data.ResetTime, CtrlRate: data.CtrlRate,
Switch: data.Switch, InitNoviceValue: data.InitNoviceValue,
ResetTime: data.ResetTime,
Switch: data.Switch,
} }
proto.SetDefaults(msg) proto.SetDefaults(msg)
this.Send(int(server_proto.SSPacketID_PACKET_WG_COINPOOLSETTING), msg) this.Send(int(server_proto.SSPacketID_PACKET_WG_COINPOOLSETTING), msg)

Binary file not shown.