review
This commit is contained in:
parent
49c2d8baac
commit
3bff2c17f3
|
@ -876,3 +876,14 @@ const (
|
||||||
SceneStateStart = 1 // 开始
|
SceneStateStart = 1 // 开始
|
||||||
SceneStateEnd = 2 // 结束
|
SceneStateEnd = 2 // 结束
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// PlayerHistoryModel .
|
||||||
|
PlayerHistoryModel = iota + 1
|
||||||
|
|
||||||
|
// BIGWIN_HISTORY_MODEL .
|
||||||
|
BIGWIN_HISTORY_MODEL
|
||||||
|
|
||||||
|
// GameHistoryModel .
|
||||||
|
GameHistoryModel
|
||||||
|
)
|
||||||
|
|
|
@ -148,6 +148,9 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea
|
||||||
}
|
}
|
||||||
sceneEx.OnPlayerLeave(p, reason)
|
sceneEx.OnPlayerLeave(p, reason)
|
||||||
s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)})
|
s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)})
|
||||||
|
if s.IsCustom() && len(s.Players) == 0 {
|
||||||
|
s.Destroy(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 玩家掉线
|
// 玩家掉线
|
||||||
|
|
|
@ -229,7 +229,7 @@ func (this *CSReturnRoomHandler) Process(s *netlib.Session, packetid int, data i
|
||||||
pack.GameId = proto.Int(scene.gameId)
|
pack.GameId = proto.Int(scene.gameId)
|
||||||
pack.ModeType = proto.Int(scene.gameMode)
|
pack.ModeType = proto.Int(scene.gameMode)
|
||||||
pack.Params = common.CopySliceInt64ToInt32(scene.params)
|
pack.Params = common.CopySliceInt64ToInt32(scene.params)
|
||||||
pack.HallId = proto.Int32(scene.hallId)
|
pack.HallId = proto.Int32(scene.dbGameFree.GetId())
|
||||||
gameVers := srvdata.GetGameVers(p.PackageID)
|
gameVers := srvdata.GetGameVers(p.PackageID)
|
||||||
if ver, ok := gameVers[fmt.Sprintf("%v,%v", scene.gameId, p.Channel)]; ok {
|
if ver, ok := gameVers[fmt.Sprintf("%v,%v", scene.gameId, p.Channel)]; ok {
|
||||||
pack.MinApkVer = proto.Int32(ver.MinApkVer)
|
pack.MinApkVer = proto.Int32(ver.MinApkVer)
|
||||||
|
@ -872,7 +872,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in
|
||||||
|
|
||||||
//创建房间
|
//创建房间
|
||||||
csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId())
|
csp = CoinSceneMgrSingleton.GetCoinScenePool(p.GetPlatform().IdStr, dbGameFree.GetId())
|
||||||
roomId = SceneMgrSingleton.GenOneCoinSceneId()
|
roomId = SceneMgrSingleton.GenOnePrivateSceneId()
|
||||||
if roomId == common.RANDID_INVALID {
|
if roomId == common.RANDID_INVALID {
|
||||||
code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game
|
code = gamehall.OpResultCode_Game_OPRC_AllocRoomIdFailed_Game
|
||||||
logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId)
|
logger.Logger.Tracef("CSCreateRoomHandler SnId:%v GameId:%v sceneId == -1 ", p.SnId, gameId)
|
||||||
|
|
|
@ -219,7 +219,7 @@ func (l *CoinScenePoolLocal) NewScene(pool *CoinScenePool, p *Player) *Scene {
|
||||||
baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange())
|
baseScore = common.RandInt32Slice(dbCreateRoom.GetBetRange())
|
||||||
}
|
}
|
||||||
if baseScore == 0 {
|
if baseScore == 0 {
|
||||||
logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! baseScore==0")
|
logger.Logger.Tracef("CoinScenePool CreateLocalGameNewScene failed! BaseScore==0")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{
|
scene := SceneMgrSingleton.CreateScene(&CreateSceneParam{
|
||||||
|
@ -284,7 +284,7 @@ func (l *CoinScenePoolLocal) NewPreCreateScene(pool *CoinScenePool) *Scene {
|
||||||
BaseScore: baseScore,
|
BaseScore: baseScore,
|
||||||
})
|
})
|
||||||
if scene != nil {
|
if scene != nil {
|
||||||
logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v baseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx)
|
logger.Logger.Tracef("CreateLocalGameScene success.gameId:%v gameSite:%v BaseScore:%v randIdx:%v", scene.gameId, scene.dbGameFree.GetSceneType(), baseScore, randIdx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,7 +212,6 @@ func (this *HundredSceneMgr) CreateNewScene(id, groupId int32, limitPlatform *Pl
|
||||||
})
|
})
|
||||||
if scene != nil {
|
if scene != nil {
|
||||||
logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId)
|
logger.Logger.Infof("Create hundred scene %v-%v success.", gameId, sceneId)
|
||||||
scene.hallId = id
|
|
||||||
scene.hp = this
|
scene.hp = this
|
||||||
return scene
|
return scene
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1667,17 +1667,6 @@ func (this *Player) MarshalData() (d []byte, e error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Player) MarshalSingleAdjustData(gamefreeid int32) (d []byte, e error) {
|
|
||||||
if this.IsRob {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
sa := PlayerSingleAdjustMgr.GetSingleAdjust(this.Platform, this.SnId, gamefreeid)
|
|
||||||
if sa != nil {
|
|
||||||
d, e = netlib.Gob.Marshal(sa)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalData 更新玩家数据
|
// UnmarshalData 更新玩家数据
|
||||||
// 例如游戏服数据同步
|
// 例如游戏服数据同步
|
||||||
func (this *Player) UnmarshalData(data []byte, scene *Scene) {
|
func (this *Player) UnmarshalData(data []byte, scene *Scene) {
|
||||||
|
|
|
@ -1,273 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/globalsign/mgo/bson"
|
|
||||||
"mongo.games.com/game/model"
|
|
||||||
"mongo.games.com/game/protocol/server"
|
|
||||||
"mongo.games.com/game/protocol/webapi"
|
|
||||||
"mongo.games.com/goserver/core/basic"
|
|
||||||
"mongo.games.com/goserver/core/logger"
|
|
||||||
"mongo.games.com/goserver/core/module"
|
|
||||||
"mongo.games.com/goserver/core/task"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type PlayerSingleAdjustManager struct {
|
|
||||||
AdjustData map[uint64]*model.PlayerSingleAdjust
|
|
||||||
dirtyList map[uint64]bool
|
|
||||||
cacheDirtyList map[uint64]bool //缓存待删除数据
|
|
||||||
}
|
|
||||||
|
|
||||||
var PlayerSingleAdjustMgr = &PlayerSingleAdjustManager{
|
|
||||||
AdjustData: make(map[uint64]*model.PlayerSingleAdjust),
|
|
||||||
dirtyList: make(map[uint64]bool),
|
|
||||||
cacheDirtyList: make(map[uint64]bool),
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *PlayerSingleAdjustManager) WebData(msg *webapi.ASSinglePlayerAdjust, p *Player) (sa *webapi.PlayerSingleAdjust) {
|
|
||||||
psa := model.WebSingleAdjustToModel(msg.PlayerSingleAdjust)
|
|
||||||
switch msg.Opration {
|
|
||||||
case 1:
|
|
||||||
this.AddNewSingleAdjust(psa)
|
|
||||||
case 2:
|
|
||||||
this.EditSingleAdjust(psa)
|
|
||||||
case 3:
|
|
||||||
this.DeleteSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId)
|
|
||||||
case 4:
|
|
||||||
sa = this.WebGetSingleAdjust(psa.Platform, psa.SnId, psa.GameFreeId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
//同步到游服
|
|
||||||
if p != nil {
|
|
||||||
if p.scene != nil && p.scene.dbGameFree.Id == psa.GameFreeId {
|
|
||||||
gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId))
|
|
||||||
pack := &server.WGSingleAdjust{
|
|
||||||
SceneId: int32(p.scene.sceneId),
|
|
||||||
Option: msg.Opration,
|
|
||||||
PlayerSingleAdjust: model.MarshalSingleAdjust(psa),
|
|
||||||
}
|
|
||||||
for _, gs := range gss {
|
|
||||||
gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if p.miniScene != nil {
|
|
||||||
for _, game := range p.miniScene {
|
|
||||||
if game.dbGameFree.Id == psa.GameFreeId {
|
|
||||||
gss := GameSessMgrSington.GetGameServerSess(int(psa.GameId))
|
|
||||||
pack := &server.WGSingleAdjust{
|
|
||||||
SceneId: int32(game.sceneId),
|
|
||||||
Option: msg.Opration,
|
|
||||||
PlayerSingleAdjust: model.MarshalSingleAdjust(psa),
|
|
||||||
}
|
|
||||||
for _, gs := range gss {
|
|
||||||
gs.Send(int(server.SSPacketID_PACKET_WG_SINGLEADJUST), pack)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *PlayerSingleAdjustManager) IsSingleAdjustPlayer(snid int32, gameFreeId int32) (*model.PlayerSingleAdjust, bool) {
|
|
||||||
key := uint64(snid)<<32 + uint64(gameFreeId)
|
|
||||||
if data, ok := this.AdjustData[key]; ok {
|
|
||||||
if data.CurTime < data.TotalTime {
|
|
||||||
return data, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) AddAdjustCount(snid int32, gameFreeId int32) {
|
|
||||||
key := uint64(snid)<<32 + uint64(gameFreeId)
|
|
||||||
if ad, ok := this.AdjustData[key]; ok {
|
|
||||||
ad.CurTime++
|
|
||||||
this.dirtyList[key] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) GetSingleAdjust(platform string, snid, gameFreeId int32) *model.PlayerSingleAdjust {
|
|
||||||
key := uint64(snid)<<32 + uint64(gameFreeId)
|
|
||||||
if psa, ok := this.AdjustData[key]; ok {
|
|
||||||
return psa
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) WebGetSingleAdjust(platform string, snid, gameFreeId int32) *webapi.PlayerSingleAdjust {
|
|
||||||
key := uint64(snid)<<32 + uint64(gameFreeId)
|
|
||||||
if psa, ok := this.AdjustData[key]; ok {
|
|
||||||
return &webapi.PlayerSingleAdjust{
|
|
||||||
Id: psa.Id.Hex(),
|
|
||||||
Platform: psa.Platform,
|
|
||||||
GameFreeId: psa.GameFreeId,
|
|
||||||
SnId: psa.SnId,
|
|
||||||
Mode: psa.Mode,
|
|
||||||
TotalTime: psa.TotalTime,
|
|
||||||
CurTime: psa.CurTime,
|
|
||||||
BetMin: psa.BetMin,
|
|
||||||
BetMax: psa.BetMax,
|
|
||||||
BankerLoseMin: psa.BankerLoseMin,
|
|
||||||
BankerWinMin: psa.BankerWinMin,
|
|
||||||
CardMin: psa.CardMin,
|
|
||||||
CardMax: psa.CardMax,
|
|
||||||
Priority: psa.Priority,
|
|
||||||
WinRate: psa.WinRate,
|
|
||||||
GameId: psa.GameId,
|
|
||||||
GameMode: psa.GameMode,
|
|
||||||
Operator: psa.Operator,
|
|
||||||
CreateTime: psa.CreateTime,
|
|
||||||
UpdateTime: psa.UpdateTime,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) AddNewSingleAdjust(psa *model.PlayerSingleAdjust) *model.PlayerSingleAdjust {
|
|
||||||
if psa != nil {
|
|
||||||
key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId)
|
|
||||||
psa.Id = bson.NewObjectId()
|
|
||||||
psa.CreateTime = time.Now().Unix()
|
|
||||||
psa.UpdateTime = time.Now().Unix()
|
|
||||||
|
|
||||||
this.AdjustData[key] = psa
|
|
||||||
logger.Logger.Trace("SinglePlayerAdjust new:", psa)
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
||||||
return model.AddNewSingleAdjust(psa)
|
|
||||||
}), nil, "AddNewSingleAdjust").StartByFixExecutor("AddNewSingleAdjust")
|
|
||||||
}
|
|
||||||
return psa
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) EditSingleAdjust(psa *model.PlayerSingleAdjust) {
|
|
||||||
if psa != nil {
|
|
||||||
var inGame bool
|
|
||||||
psa.UpdateTime = time.Now().Unix()
|
|
||||||
for key, value := range this.AdjustData {
|
|
||||||
if value.Id == psa.Id {
|
|
||||||
var tempKey = key
|
|
||||||
if psa.GameFreeId != value.GameFreeId {
|
|
||||||
delete(this.AdjustData, key)
|
|
||||||
delete(this.dirtyList, key)
|
|
||||||
tempKey = uint64(psa.SnId)<<32 + uint64(psa.GameFreeId)
|
|
||||||
}
|
|
||||||
this.AdjustData[tempKey] = psa
|
|
||||||
this.dirtyList[tempKey] = true
|
|
||||||
inGame = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logger.Logger.Trace("SinglePlayerAdjust edit:", *psa)
|
|
||||||
if !inGame {
|
|
||||||
//不在游戏 直接更新库
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
||||||
return model.EditSingleAdjust(psa)
|
|
||||||
}), nil, "EditSingleAdjust").StartByFixExecutor("EditSingleAdjust")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) DeleteSingleAdjust(platform string, snid, gameFreeId int32) {
|
|
||||||
key := uint64(snid)<<32 + uint64(gameFreeId)
|
|
||||||
if _, ok := this.AdjustData[key]; ok {
|
|
||||||
delete(this.AdjustData, key)
|
|
||||||
delete(this.dirtyList, key)
|
|
||||||
}
|
|
||||||
logger.Logger.Trace("SinglePlayerAdjust delete:", snid, gameFreeId)
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
||||||
return model.DeleteSingleAdjust(&model.PlayerSingleAdjust{SnId: snid, GameFreeId: gameFreeId, Platform: platform})
|
|
||||||
}), nil, "DeleteSingleAdjust").Start()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *PlayerSingleAdjustManager) ModuleName() string {
|
|
||||||
return "PlayerSingleAdjustManager"
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) Init() {
|
|
||||||
//data, err := model.QueryAllSingleAdjust("1")
|
|
||||||
//if err != nil {
|
|
||||||
// logger.Logger.Warn("QueryAllSingleAdjust is err:", err)
|
|
||||||
// return
|
|
||||||
//}
|
|
||||||
//if len(data) > 0 {
|
|
||||||
// for _, psa := range data {
|
|
||||||
// _, gameType := srvdata.DataMgr.GetGameFreeIds(psa.GameId, psa.GameMode)
|
|
||||||
// if gameType != common.GameType_Mini {
|
|
||||||
// key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId)
|
|
||||||
// this.AdjustData[key] = psa
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 登录加载
|
|
||||||
func (this *PlayerSingleAdjustManager) LoadSingleAdjustData(platform string, snid int32) {
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
||||||
ret, err := model.QueryAllSingleAdjustByKey(platform, snid)
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
|
|
||||||
if data != nil {
|
|
||||||
ret := data.([]*model.PlayerSingleAdjust)
|
|
||||||
for _, psa := range ret {
|
|
||||||
key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId)
|
|
||||||
this.AdjustData[key] = psa
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})).StartByFixExecutor("LoadPlayerSingleAdjust")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 掉线删除
|
|
||||||
func (this *PlayerSingleAdjustManager) DelPlayerData(platform string, snid int32) {
|
|
||||||
for _, psa := range this.AdjustData {
|
|
||||||
if psa.Platform == platform && psa.SnId == snid {
|
|
||||||
key := uint64(psa.SnId)<<32 + uint64(psa.GameFreeId)
|
|
||||||
if this.dirtyList[key] {
|
|
||||||
this.cacheDirtyList[key] = true
|
|
||||||
} else {
|
|
||||||
delete(this.AdjustData, key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) Update() {
|
|
||||||
if len(this.dirtyList) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var syncArr []*model.PlayerSingleAdjust
|
|
||||||
for key, _ := range this.dirtyList {
|
|
||||||
syncArr = append(syncArr, this.AdjustData[key])
|
|
||||||
delete(this.dirtyList, key)
|
|
||||||
}
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
|
||||||
var saveArr [2][]uint64
|
|
||||||
for _, value := range syncArr {
|
|
||||||
err := model.EditSingleAdjust(value)
|
|
||||||
if err != nil {
|
|
||||||
logger.Logger.Error("PlayerSingleAdjustManager edit ", err)
|
|
||||||
saveArr[0] = append(saveArr[0], uint64(value.SnId)<<32+uint64(value.GameFreeId))
|
|
||||||
} else {
|
|
||||||
saveArr[1] = append(saveArr[1], uint64(value.SnId)<<32+uint64(value.GameFreeId))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return saveArr
|
|
||||||
}), task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
|
|
||||||
if saveArr, ok := data.([2][]uint64); ok {
|
|
||||||
//失败处理
|
|
||||||
for _, key := range saveArr[0] {
|
|
||||||
this.dirtyList[key] = true
|
|
||||||
}
|
|
||||||
//成功处理
|
|
||||||
for _, key := range saveArr[1] {
|
|
||||||
if this.cacheDirtyList[key] {
|
|
||||||
delete(this.cacheDirtyList, key)
|
|
||||||
delete(this.AdjustData, key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
})).StartByFixExecutor("PlayerSingleAdjustManager")
|
|
||||||
}
|
|
||||||
func (this *PlayerSingleAdjustManager) Shutdown() {
|
|
||||||
module.UnregisteModule(this)
|
|
||||||
}
|
|
||||||
func init() {
|
|
||||||
module.RegisteModule(PlayerSingleAdjustMgr, time.Minute*5, 0)
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"mongo.games.com/game/common"
|
|
||||||
//"mongo.games.com/game/gamerule/blackjack"
|
|
||||||
//"mongo.games.com/game/gamerule/dezhoupoker"
|
|
||||||
//"mongo.games.com/game/gamerule/fivecardstud"
|
|
||||||
//"mongo.games.com/game/gamerule/omahapoker"
|
|
||||||
)
|
|
||||||
|
|
||||||
var minPlayGameNum = map[int]int{
|
|
||||||
common.GameId_TenHalf: 2,
|
|
||||||
common.GameId_DezhouPoker: 2,
|
|
||||||
common.GameId_FiveCardStud: 2,
|
|
||||||
common.GameId_BlackJack: 1,
|
|
||||||
//common.GameId_OmahaPoker: omahapoker.MinNumOfPlayer,
|
|
||||||
}
|
|
||||||
|
|
||||||
var maxPlayGameNum = map[int]int{
|
|
||||||
//common.GameId_DezhouPoker: int(dezhoupoker.MaxNumOfPlayer),
|
|
||||||
//common.GameId_FiveCardStud: int(fivecardstud.MaxNumOfPlayer),
|
|
||||||
//common.GameId_BlackJack: blackjack.MaxPlayer,
|
|
||||||
//common.GameId_OmahaPoker: omahapoker.MaxNumOfPlayer,
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetGameStartMinNum(gameid int) int {
|
|
||||||
return minPlayGameNum[gameid]
|
|
||||||
}
|
|
||||||
func GetGameSuiableNum(gameid int, flag int32) int {
|
|
||||||
minNum, maxNum := minPlayGameNum[gameid], maxPlayGameNum[gameid]
|
|
||||||
if flag == MatchTrueManForbid {
|
|
||||||
if minNum == maxNum {
|
|
||||||
return minNum
|
|
||||||
} else {
|
|
||||||
return maxNum - 1
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if minNum == maxNum {
|
|
||||||
return minNum
|
|
||||||
} else {
|
|
||||||
return maxNum - 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func IsRegularNum(gameid int) bool {
|
|
||||||
return minPlayGameNum[gameid] == maxPlayGameNum[gameid]
|
|
||||||
}
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
rawproto "google.golang.org/protobuf/proto"
|
rawproto "google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
"mongo.games.com/goserver/core/logger"
|
"mongo.games.com/goserver/core/logger"
|
||||||
"mongo.games.com/goserver/core/netlib"
|
"mongo.games.com/goserver/core/netlib"
|
||||||
"mongo.games.com/goserver/srvlib"
|
"mongo.games.com/goserver/srvlib"
|
||||||
|
@ -21,35 +20,21 @@ import (
|
||||||
"mongo.games.com/game/srvdata"
|
"mongo.games.com/game/srvdata"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// PlayerHistoryModel .
|
|
||||||
PlayerHistoryModel = iota + 1
|
|
||||||
|
|
||||||
// BIGWIN_HISTORY_MODEL .
|
|
||||||
BIGWIN_HISTORY_MODEL
|
|
||||||
|
|
||||||
// GameHistoryModel .
|
|
||||||
GameHistoryModel
|
|
||||||
)
|
|
||||||
|
|
||||||
type PlayerGameCtx struct {
|
type PlayerGameCtx struct {
|
||||||
takeCoin int64 //进房时携带的金币量
|
takeCoin int64 //进房时携带的金币量
|
||||||
enterTs int64 //进入时间
|
enterTs int64 //进入时间
|
||||||
totalConvertibleFlow int64 //进房时玩家身上的总流水
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scene 场景(房间)
|
// Scene 场景(房间)
|
||||||
// todo 结构优化
|
|
||||||
type Scene struct {
|
type Scene struct {
|
||||||
sceneId int // 场景id
|
sceneId int // 场景id
|
||||||
gameId int // 游戏id
|
gameId int // 游戏id
|
||||||
gameMode int // 游戏模式(玩法)
|
gameMode int // 废弃,游戏模式(玩法)
|
||||||
sceneMode int // 房间模式,参考common.SceneMode_XXX
|
sceneMode int // 房间模式,参考common.SceneMode_XXX
|
||||||
params []int64 // 场景参数
|
params []int64 // 场景参数
|
||||||
playerNum int // 房间最大人数
|
playerNum int // 房间最大人数
|
||||||
robotNum int // 机器人数量
|
robotNum int // 机器人数量
|
||||||
robotLimit int // 最大限制机器人数量
|
robotLimit int // 最大限制机器人数量
|
||||||
preInviteRobNum int // 准备邀请机器人的数量
|
|
||||||
creator int32 // 创建者账号id
|
creator int32 // 创建者账号id
|
||||||
replayCode string // 回放码
|
replayCode string // 回放码
|
||||||
currRound int32 // 当前第几轮
|
currRound int32 // 当前第几轮
|
||||||
|
@ -66,13 +51,11 @@ type Scene struct {
|
||||||
sp ScenePolicy // 场景上的一些业务策略
|
sp ScenePolicy // 场景上的一些业务策略
|
||||||
createTime time.Time // 创建时间
|
createTime time.Time // 创建时间
|
||||||
lastTime time.Time // 最后活跃时间
|
lastTime time.Time // 最后活跃时间
|
||||||
startTime time.Time // 开始时间
|
startTime time.Time // 游戏开始时间
|
||||||
applyTimes map[int32]int32 // 申请坐下次数
|
|
||||||
limitPlatform *Platform // 限制平台
|
limitPlatform *Platform // 限制平台
|
||||||
groupId int32 // 组id
|
groupId int32 // 组id
|
||||||
hallId int32 // 厅id
|
|
||||||
dbGameFree *serverproto.DB_GameFree // 场次配置
|
dbGameFree *serverproto.DB_GameFree // 场次配置
|
||||||
gameCtx map[int32]*PlayerGameCtx // 进入房间的环境
|
gameCtx map[int32]*PlayerGameCtx // 进入房间的环境,没有机器人数据 SnId
|
||||||
BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置
|
BaseScore int32 // 游戏底分,优先级,创建参数>本地配置>场次配置
|
||||||
SceneState int32 // 房间当前状态
|
SceneState int32 // 房间当前状态
|
||||||
State int32 // 当前游戏状态,后期放到ScenePolicy里去处理
|
State int32 // 当前游戏状态,后期放到ScenePolicy里去处理
|
||||||
|
@ -89,8 +72,6 @@ type Scene struct {
|
||||||
func NewScene(args *CreateSceneParam) *Scene {
|
func NewScene(args *CreateSceneParam) *Scene {
|
||||||
gameId := int(args.GF.GetGameId())
|
gameId := int(args.GF.GetGameId())
|
||||||
gameMode := int(args.GF.GetGameMode())
|
gameMode := int(args.GF.GetGameMode())
|
||||||
gameFreeId := args.GF.GetId()
|
|
||||||
|
|
||||||
sp := GetScenePolicy(gameId, gameMode)
|
sp := GetScenePolicy(gameId, gameMode)
|
||||||
if sp == nil {
|
if sp == nil {
|
||||||
logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode)
|
logger.Logger.Errorf("NewScene sp == nil, gameId=%v gameMode=%v", gameId, gameMode)
|
||||||
|
@ -99,7 +80,6 @@ func NewScene(args *CreateSceneParam) *Scene {
|
||||||
|
|
||||||
s := &Scene{
|
s := &Scene{
|
||||||
sceneId: args.RoomId,
|
sceneId: args.RoomId,
|
||||||
hallId: gameFreeId,
|
|
||||||
playerNum: int(args.PlayerNum),
|
playerNum: int(args.PlayerNum),
|
||||||
creator: args.CreateId,
|
creator: args.CreateId,
|
||||||
gameId: gameId,
|
gameId: gameId,
|
||||||
|
@ -141,7 +121,18 @@ func NewScene(args *CreateSceneParam) *Scene {
|
||||||
s.replayCode = SceneMgrSingleton.AllocReplayCode()
|
s.replayCode = SceneMgrSingleton.AllocReplayCode()
|
||||||
|
|
||||||
if s.dbGameFree.GetMatchMode() == 0 {
|
if s.dbGameFree.GetMatchMode() == 0 {
|
||||||
s.RandRobotCnt()
|
// 普通匹配设置最大机器人数量
|
||||||
|
number := s.dbGameFree.GetRobotNumRng()
|
||||||
|
if len(number) >= 2 {
|
||||||
|
if number[1] == number[0] {
|
||||||
|
s.robotLimit = int(number[0])
|
||||||
|
} else {
|
||||||
|
if number[1] < number[0] {
|
||||||
|
number[1], number[0] = number[0], number[1]
|
||||||
|
}
|
||||||
|
s.robotLimit = int(number[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
s.sp.OnStart(s)
|
s.sp.OnStart(s)
|
||||||
return s
|
return s
|
||||||
|
@ -178,10 +169,13 @@ func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx {
|
||||||
}
|
}
|
||||||
|
|
||||||
// PlayerEnter 玩家进入场景
|
// PlayerEnter 玩家进入场景
|
||||||
// todo 优化
|
|
||||||
func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
||||||
logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos)
|
logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos)
|
||||||
|
|
||||||
|
if this.dbGameFree == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// 机器人数量限制
|
// 机器人数量限制
|
||||||
if p.IsRobot() && this.robotLimit != 0 {
|
if p.IsRobot() && this.robotLimit != 0 {
|
||||||
if this.robotNum+1 > this.robotLimit {
|
if this.robotNum+1 > this.robotLimit {
|
||||||
|
@ -224,15 +218,15 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p.scene = this
|
|
||||||
this.players[p.SnId] = p
|
|
||||||
this.gameSess.AddPlayer(p)
|
|
||||||
|
|
||||||
takeCoin := p.Coin
|
takeCoin := p.Coin
|
||||||
leaveCoin := int64(0)
|
leaveCoin := int64(0)
|
||||||
gameTimes := rand.Int31n(100)
|
gameTimes := rand.Int31n(100)
|
||||||
var matchParams []int32 //排名、段位、假snid、假角色、假皮肤
|
|
||||||
|
|
||||||
|
if this.IsCustom() { // 房卡场初始1000金币
|
||||||
|
takeCoin = 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
var matchParams []int32 //排名、段位、假snid、假角色、假皮肤
|
||||||
if this.IsMatchScene() && p.matchCtx != nil {
|
if this.IsMatchScene() && p.matchCtx != nil {
|
||||||
takeCoin = int64(p.matchCtx.grade)
|
takeCoin = int64(p.matchCtx.grade)
|
||||||
matchParams = append(matchParams, p.matchCtx.rank) //排名
|
matchParams = append(matchParams, p.matchCtx.rank) //排名
|
||||||
|
@ -246,108 +240,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
||||||
matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId
|
matchParams = append(matchParams, p.matchCtx.copySkinId) //假SkinId
|
||||||
}
|
}
|
||||||
|
|
||||||
if this.IsCustom() {
|
|
||||||
takeCoin = 1000
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.IsRob && !this.IsMatchScene() && !this.IsCustom() {
|
|
||||||
if this.dbGameFree != nil { //机器人携带金币动态调整
|
|
||||||
gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.dbGameFree.GetId())
|
|
||||||
if gps != nil {
|
|
||||||
dbGameFree := gps.DbGameFree
|
|
||||||
flag := false
|
|
||||||
if common.IsLocalGame(this.gameId) {
|
|
||||||
baseScore := this.BaseScore
|
|
||||||
arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr
|
|
||||||
tmpIds := []int32{}
|
|
||||||
for i := 0; i < len(arrs); i++ {
|
|
||||||
arr := arrs[i]
|
|
||||||
if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() {
|
|
||||||
betRange := arr.GetBetRange()
|
|
||||||
if len(betRange) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for j := 0; j < len(betRange); j++ {
|
|
||||||
if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 {
|
|
||||||
tmpIds = append(tmpIds, arr.GetId())
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(tmpIds) > 0 {
|
|
||||||
randId := common.RandInt32Slice(tmpIds)
|
|
||||||
crData := srvdata.PBDB_CreateroomMgr.GetData(randId)
|
|
||||||
if crData != nil {
|
|
||||||
goldRange := crData.GetGoldRange()
|
|
||||||
if len(goldRange) == 2 {
|
|
||||||
takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1]))
|
|
||||||
flag = true
|
|
||||||
} else if len(goldRange) == 1 {
|
|
||||||
takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0]))
|
|
||||||
flag = true
|
|
||||||
}
|
|
||||||
leaveCoin = int64(goldRange[0])
|
|
||||||
for _, id := range tmpIds {
|
|
||||||
tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange()
|
|
||||||
if int64(tmp[0]) < leaveCoin && tmp[0] != 0 {
|
|
||||||
leaveCoin = int64(tmp[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " baseScore: ", baseScore)
|
|
||||||
}
|
|
||||||
if leaveCoin > takeCoin {
|
|
||||||
logger.Logger.Warn("robotSnId: ", p.SnId, " baseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin)
|
|
||||||
}
|
|
||||||
if takeCoin > p.Coin {
|
|
||||||
p.Coin = takeCoin
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !flag {
|
|
||||||
takerng := dbGameFree.GetRobotTakeCoin()
|
|
||||||
if len(takerng) >= 2 && takerng[1] > takerng[0] {
|
|
||||||
if takerng[0] < dbGameFree.GetLimitCoin() {
|
|
||||||
takerng[0] = dbGameFree.GetLimitCoin()
|
|
||||||
}
|
|
||||||
takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1])))
|
|
||||||
} else {
|
|
||||||
maxlimit := int64(dbGameFree.GetMaxCoinLimit())
|
|
||||||
if maxlimit != 0 && p.Coin > maxlimit {
|
|
||||||
logger.Logger.Trace("Player coin:", p.Coin)
|
|
||||||
//在下限和上限之间随机,并对其的100的整数倍
|
|
||||||
takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit)))
|
|
||||||
logger.Logger.Trace("Take coin:", takeCoin)
|
|
||||||
}
|
|
||||||
if maxlimit == 0 && this.IsCoinScene() {
|
|
||||||
maxlimit = int64(common.RandInt(10, 50)) * int64(dbGameFree.GetLimitCoin())
|
|
||||||
takeCoin = int64(common.RandInt(int(dbGameFree.GetLimitCoin()), int(maxlimit)))
|
|
||||||
logger.Logger.Trace("Take coin:", takeCoin)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
takeCoin = takeCoin / 100 * 100
|
|
||||||
//离场金币
|
|
||||||
leaverng := dbGameFree.GetRobotLimitCoin()
|
|
||||||
if len(leaverng) >= 2 {
|
|
||||||
leaveCoin = int64(leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 象棋积分
|
|
||||||
chessScore := dbGameFree.GetChessScoreParams()
|
|
||||||
if len(chessScore) == 2 {
|
|
||||||
p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1])))
|
|
||||||
}
|
|
||||||
|
|
||||||
if takeCoin > p.Coin {
|
|
||||||
p.Coin = takeCoin
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.IsRob {
|
if p.IsRob {
|
||||||
this.robotNum++
|
this.robotNum++
|
||||||
p.RobotRandName()
|
p.RobotRandName()
|
||||||
|
@ -356,95 +248,180 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
|
||||||
p.RandRobotPetSkillLevel()
|
p.RandRobotPetSkillLevel()
|
||||||
name := this.GetSceneName()
|
name := this.GetSceneName()
|
||||||
logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit)
|
logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit)
|
||||||
|
|
||||||
|
if !this.IsMatchScene() && !this.IsCustom() {
|
||||||
|
flag := false
|
||||||
|
// 本地游戏机器人携带金币
|
||||||
|
if common.IsLocalGame(this.gameId) {
|
||||||
|
baseScore := this.BaseScore
|
||||||
|
arrs := srvdata.PBDB_CreateroomMgr.Datas.Arr
|
||||||
|
var tmpIds []int32
|
||||||
|
for i := 0; i < len(arrs); i++ {
|
||||||
|
arr := arrs[i]
|
||||||
|
if int(arr.GameId) == this.gameId && arr.GameSite == this.dbGameFree.GetSceneType() {
|
||||||
|
betRange := arr.GetBetRange()
|
||||||
|
if len(betRange) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for j := 0; j < len(betRange); j++ {
|
||||||
|
if betRange[j] == baseScore && len(arr.GetGoldRange()) > 0 && arr.GetGoldRange()[0] != 0 {
|
||||||
|
tmpIds = append(tmpIds, arr.GetId())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(tmpIds) > 0 {
|
||||||
|
randId := common.RandInt32Slice(tmpIds)
|
||||||
|
crData := srvdata.PBDB_CreateroomMgr.GetData(randId)
|
||||||
|
if crData != nil {
|
||||||
|
goldRange := crData.GetGoldRange()
|
||||||
|
if len(goldRange) == 2 {
|
||||||
|
takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), int64(goldRange[1]))
|
||||||
|
flag = true
|
||||||
|
} else if len(goldRange) == 1 {
|
||||||
|
takeCoin = common.RandFromRangeInt64(int64(goldRange[0]), 2*int64(goldRange[0]))
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
leaveCoin = int64(goldRange[0])
|
||||||
|
for _, id := range tmpIds {
|
||||||
|
tmp := srvdata.PBDB_CreateroomMgr.GetData(id).GetGoldRange()
|
||||||
|
if int64(tmp[0]) < leaveCoin && tmp[0] != 0 {
|
||||||
|
leaveCoin = int64(tmp[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.Logger.Warn("gameId: ", this.gameId, " gameSite: ", this.dbGameFree.GetSceneType(), " BaseScore: ", baseScore)
|
||||||
|
}
|
||||||
|
if leaveCoin > takeCoin {
|
||||||
|
logger.Logger.Warn("robotSnId: ", p.SnId, " BaseScore: ", baseScore, " takeCoin: ", takeCoin, " leaveCoin: ", leaveCoin)
|
||||||
|
}
|
||||||
|
if takeCoin > p.Coin {
|
||||||
|
p.Coin = takeCoin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 非本地游戏机器人携带金币
|
||||||
|
if !flag {
|
||||||
|
takerng := this.dbGameFree.GetRobotTakeCoin()
|
||||||
|
if len(takerng) >= 2 && takerng[1] > takerng[0] {
|
||||||
|
if takerng[0] < this.dbGameFree.GetLimitCoin() {
|
||||||
|
takerng[0] = this.dbGameFree.GetLimitCoin()
|
||||||
|
}
|
||||||
|
takeCoin = int64(common.RandInt(int(takerng[0]), int(takerng[1])))
|
||||||
|
} else {
|
||||||
|
maxlimit := int64(this.dbGameFree.GetMaxCoinLimit())
|
||||||
|
if maxlimit != 0 && p.Coin > maxlimit {
|
||||||
|
logger.Logger.Trace("Player coin:", p.Coin)
|
||||||
|
//在下限和上限之间随机,并对其的100的整数倍
|
||||||
|
takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit)))
|
||||||
|
logger.Logger.Trace("Take coin:", takeCoin)
|
||||||
|
}
|
||||||
|
if maxlimit == 0 && this.IsCoinScene() {
|
||||||
|
maxlimit = int64(common.RandInt(10, 50)) * int64(this.dbGameFree.GetLimitCoin())
|
||||||
|
takeCoin = int64(common.RandInt(int(this.dbGameFree.GetLimitCoin()), int(maxlimit)))
|
||||||
|
logger.Logger.Trace("Take coin:", takeCoin)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
takeCoin = takeCoin / 100 * 100
|
||||||
|
//离场金币
|
||||||
|
leaverng := this.dbGameFree.GetRobotLimitCoin()
|
||||||
|
if len(leaverng) >= 2 {
|
||||||
|
leaveCoin = leaverng[0] + rand.Int63n(leaverng[1]-leaverng[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 象棋积分
|
||||||
|
chessScore := this.dbGameFree.GetChessScoreParams()
|
||||||
|
if len(chessScore) == 2 {
|
||||||
|
p.ChessGrade = int64(common.RandInt(int(chessScore[0]), int(chessScore[1])))
|
||||||
|
}
|
||||||
|
|
||||||
|
if takeCoin > p.Coin {
|
||||||
|
p.Coin = takeCoin
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := p.MarshalData()
|
data, err := p.MarshalData()
|
||||||
if err == nil {
|
if err != nil {
|
||||||
var gateSid int64
|
logger.Logger.Errorf("Scene PlayerEnter MarshalData failed, err:%v", err)
|
||||||
if p.gateSess != nil {
|
|
||||||
if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil {
|
|
||||||
sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0)
|
|
||||||
gateSid = sessionId.Get()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg := &serverproto.WGPlayerEnter{
|
|
||||||
Sid: proto.Int64(p.sid),
|
|
||||||
SnId: proto.Int32(p.SnId),
|
|
||||||
GateSid: proto.Int64(gateSid),
|
|
||||||
SceneId: proto.Int(this.sceneId),
|
|
||||||
PlayerData: data,
|
|
||||||
IsLoaded: proto.Bool(ischangeroom),
|
|
||||||
IParams: p.MarshalIParam(),
|
|
||||||
SParams: p.MarshalSParam(),
|
|
||||||
CParams: p.MarshalCParam(),
|
|
||||||
}
|
|
||||||
p.takeCoin = takeCoin
|
|
||||||
p.sceneCoin = takeCoin
|
|
||||||
p.enterts = time.Now()
|
|
||||||
|
|
||||||
if !p.IsRob { //保存下进入时的环境
|
|
||||||
this.gameCtx[p.SnId] = &PlayerGameCtx{
|
|
||||||
takeCoin: p.takeCoin,
|
|
||||||
enterTs: p.enterts.Unix(),
|
|
||||||
totalConvertibleFlow: p.TotalConvertibleFlow,
|
|
||||||
}
|
|
||||||
this.lastTime = time.Now()
|
|
||||||
}
|
|
||||||
msg.TakeCoin = proto.Int64(takeCoin)
|
|
||||||
msg.ExpectLeaveCoin = proto.Int64(leaveCoin)
|
|
||||||
msg.ExpectGameTimes = proto.Int32(gameTimes)
|
|
||||||
msg.Pos = proto.Int(p.pos)
|
|
||||||
if matchParams != nil {
|
|
||||||
for _, param := range matchParams {
|
|
||||||
msg.MatchParams = append(msg.MatchParams, param)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 道具
|
|
||||||
dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
|
|
||||||
if dbItemArr != nil {
|
|
||||||
msg.Items = make(map[int32]int64)
|
|
||||||
for _, dbItem := range dbItemArr {
|
|
||||||
msg.Items[dbItem.Id] = 0
|
|
||||||
itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id)
|
|
||||||
if itemInfo != nil {
|
|
||||||
msg.Items[dbItem.Id] = itemInfo.ItemNum
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 排位积分
|
|
||||||
ret := RankMgrSingleton.GetPlayerSeason(p.SnId)
|
|
||||||
if ret != nil && ret.PlayerRankSeason != nil {
|
|
||||||
msg.RankScore = make(map[int32]int64)
|
|
||||||
for k, v := range ret.RankType {
|
|
||||||
if v != nil {
|
|
||||||
msg.RankScore[k] = v.Score
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.IsRobot() {
|
|
||||||
msg.RankScore = make(map[int32]int64)
|
|
||||||
rankScore := this.dbGameFree.GetRankScoreParams()
|
|
||||||
if len(rankScore) == 2 {
|
|
||||||
switch {
|
|
||||||
case this.dbGameFree.GameDif == common.GameDifTienlen:
|
|
||||||
msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1])))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proto.SetDefaults(msg)
|
|
||||||
this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg)
|
|
||||||
logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos)
|
|
||||||
FirePlayerEnterScene(p, this)
|
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
logger.Logger.Warnf("(this *Scene:%v) PlayerEnter(%v, %v) Marshal player data error %v", this.sceneId, p.SnId, pos, err)
|
|
||||||
this.DelPlayer(p)
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var gateSid int64
|
||||||
|
if p.gateSess != nil {
|
||||||
|
if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil {
|
||||||
|
sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0)
|
||||||
|
gateSid = sessionId.Get()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg := &serverproto.WGPlayerEnter{
|
||||||
|
Sid: proto.Int64(p.sid),
|
||||||
|
GateSid: proto.Int64(gateSid),
|
||||||
|
SceneId: proto.Int(this.sceneId),
|
||||||
|
PlayerData: data,
|
||||||
|
TakeCoin: takeCoin,
|
||||||
|
IsLoaded: proto.Bool(ischangeroom),
|
||||||
|
IsQM: false,
|
||||||
|
ExpectLeaveCoin: leaveCoin,
|
||||||
|
ExpectGameTimes: gameTimes,
|
||||||
|
IParams: p.MarshalIParam(),
|
||||||
|
SParams: p.MarshalSParam(),
|
||||||
|
CParams: p.MarshalCParam(),
|
||||||
|
SnId: proto.Int32(p.SnId),
|
||||||
|
Pos: int32(p.pos),
|
||||||
|
MatchParams: matchParams,
|
||||||
|
}
|
||||||
|
// 道具
|
||||||
|
msg.Items = make(map[int32]int64)
|
||||||
|
dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
|
||||||
|
for _, dbItem := range dbItemArr {
|
||||||
|
msg.Items[dbItem.Id] = 0
|
||||||
|
itemInfo := BagMgrSingleton.GetItem(p.SnId, dbItem.Id)
|
||||||
|
if itemInfo != nil {
|
||||||
|
msg.Items[dbItem.Id] = itemInfo.ItemNum
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 排位积分
|
||||||
|
ret := RankMgrSingleton.GetPlayerSeason(p.SnId)
|
||||||
|
if ret != nil && ret.PlayerRankSeason != nil {
|
||||||
|
msg.RankScore = make(map[int32]int64)
|
||||||
|
for k, v := range ret.RankType {
|
||||||
|
if v != nil {
|
||||||
|
msg.RankScore[k] = v.Score
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if p.IsRobot() {
|
||||||
|
msg.RankScore = make(map[int32]int64)
|
||||||
|
rankScore := this.dbGameFree.GetRankScoreParams()
|
||||||
|
if len(rankScore) == 2 {
|
||||||
|
switch {
|
||||||
|
case this.dbGameFree.GameDif == common.GameDifTienlen:
|
||||||
|
msg.RankScore[tienlen.RankType] = int64(common.RandInt(int(rankScore[0]), int(rankScore[1])))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERENTER), msg)
|
||||||
|
logger.Logger.Tracef("SSPacketID_PACKET_WG_PLAYERENTER Scene:%v ;PlayerEnter(%v, %v)", this.sceneId, p.SnId, pos)
|
||||||
|
|
||||||
|
p.scene = this
|
||||||
|
p.takeCoin = takeCoin
|
||||||
|
p.sceneCoin = takeCoin
|
||||||
|
p.enterts = time.Now()
|
||||||
|
this.players[p.SnId] = p
|
||||||
|
if !p.IsRob { //保存下进入时的环境
|
||||||
|
this.gameCtx[p.SnId] = &PlayerGameCtx{
|
||||||
|
takeCoin: p.takeCoin,
|
||||||
|
enterTs: p.enterts.Unix(),
|
||||||
|
}
|
||||||
|
this.lastTime = time.Now()
|
||||||
|
}
|
||||||
|
this.gameSess.AddPlayer(p)
|
||||||
|
FirePlayerEnterScene(p, this)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool {
|
func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool {
|
||||||
|
@ -476,7 +453,6 @@ func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool {
|
||||||
PlayerData: data,
|
PlayerData: data,
|
||||||
TakeCoin: takeCoin,
|
TakeCoin: takeCoin,
|
||||||
IsLoaded: proto.Bool(ischangeroom),
|
IsLoaded: proto.Bool(ischangeroom),
|
||||||
IsQM: false,
|
|
||||||
IParams: p.MarshalIParam(),
|
IParams: p.MarshalIParam(),
|
||||||
SParams: p.MarshalSParam(),
|
SParams: p.MarshalSParam(),
|
||||||
CParams: p.MarshalCParam(),
|
CParams: p.MarshalCParam(),
|
||||||
|
@ -674,6 +650,9 @@ func (this *Scene) GetAudienceCnt() int {
|
||||||
// IsFull 是否满人
|
// IsFull 是否满人
|
||||||
// 不包含观众
|
// 不包含观众
|
||||||
func (this *Scene) IsFull() bool {
|
func (this *Scene) IsFull() bool {
|
||||||
|
if this.playerNum == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
return this.GetPlayerCnt() >= this.playerNum
|
return this.GetPlayerCnt() >= this.playerNum
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -717,15 +696,7 @@ func (this *Scene) SendToGame(packetId int, pack interface{}) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Scene) SendToClient(packetId int, pack interface{}, excludeId int32) {
|
// IsLongTimeInactive 房间是否长时间没有活动
|
||||||
for v, value := range this.players {
|
|
||||||
if v == excludeId {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
value.SendToClient(packetId, pack)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Scene) IsLongTimeInactive() bool {
|
func (this *Scene) IsLongTimeInactive() bool {
|
||||||
tNow := time.Now()
|
tNow := time.Now()
|
||||||
// 房间没有真人,没有观众,长时间没有真人进出房间
|
// 房间没有真人,没有观众,长时间没有真人进出房间
|
||||||
|
@ -765,7 +736,7 @@ func (this *Scene) IsHundredScene() bool {
|
||||||
|
|
||||||
// IsPrivateScene 私人房间
|
// IsPrivateScene 私人房间
|
||||||
func (this *Scene) IsPrivateScene() bool {
|
func (this *Scene) IsPrivateScene() bool {
|
||||||
return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private
|
return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsCustom 房卡场房间
|
// IsCustom 房卡场房间
|
||||||
|
@ -804,23 +775,6 @@ func (this *Scene) GetSceneName() string {
|
||||||
return "[unknow scene name]"
|
return "[unknow scene name]"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Scene) RandRobotCnt() {
|
|
||||||
if this.dbGameFree != nil {
|
|
||||||
number := this.dbGameFree.GetRobotNumRng()
|
|
||||||
if len(number) >= 2 {
|
|
||||||
if number[1] == number[0] {
|
|
||||||
this.robotLimit = int(number[0])
|
|
||||||
} else {
|
|
||||||
if number[1] < number[0] {
|
|
||||||
number[1], number[0] = number[0], number[1]
|
|
||||||
}
|
|
||||||
this.robotLimit = int(number[1]) //int(number[0] + rand.Int31n(number[1]-number[0]) + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Scene) IsPlatform(platform string) bool {
|
func (this *Scene) IsPlatform(platform string) bool {
|
||||||
if platform == "0" || platform == this.limitPlatform.IdStr {
|
if platform == "0" || platform == this.limitPlatform.IdStr {
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -493,7 +493,7 @@ func (m *SceneMgr) OnMiniTimer() {
|
||||||
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
|
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
|
||||||
s.SendGameDestroy(false)
|
s.SendGameDestroy(false)
|
||||||
}
|
}
|
||||||
if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) {
|
if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum(common.SceneMode_Public) > int(s.dbGameFree.GetCreateRoomNum()) {
|
||||||
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
|
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
|
||||||
s.SendGameDestroy(false)
|
s.SendGameDestroy(false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -662,7 +662,7 @@ func init() {
|
||||||
|
|
||||||
//gameid := 112
|
//gameid := 112
|
||||||
switch int(historyModel) {
|
switch int(historyModel) {
|
||||||
case PlayerHistoryModel: // 历史记录
|
case common.PlayerHistoryModel: // 历史记录
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
||||||
var genPlayerHistoryInfo = func(logid string, gameid int32, spinID, username string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *qpapi.PlayerHistoryInfo) {
|
var genPlayerHistoryInfo = func(logid string, gameid int32, spinID, username string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *qpapi.PlayerHistoryInfo) {
|
||||||
player.SpinID = proto.String(spinID)
|
player.SpinID = proto.String(spinID)
|
||||||
|
@ -728,7 +728,7 @@ func init() {
|
||||||
}
|
}
|
||||||
}), "CSGetPlayerHistoryHandlerWorld").Start()
|
}), "CSGetPlayerHistoryHandlerWorld").Start()
|
||||||
return common.ResponseTag_TransactYield, pack
|
return common.ResponseTag_TransactYield, pack
|
||||||
case GameHistoryModel:
|
case common.GameHistoryModel:
|
||||||
|
|
||||||
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
|
||||||
var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *qpapi.GameHistoryInfo) {
|
var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *qpapi.GameHistoryInfo) {
|
||||||
|
|
Loading…
Reference in New Issue