87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package main
|
|
|
|
import "mongo.games.com/goserver/core/logger"
|
|
|
|
// 根据不同的房间模式,选择不同的房间业务策略
|
|
var ScenePolicyPool map[int]map[int]ScenePolicy = make(map[int]map[int]ScenePolicy)
|
|
|
|
type ScenePolicy interface {
|
|
//场景开启事件
|
|
OnStart(s *Scene)
|
|
//场景关闭事件
|
|
OnStop(s *Scene)
|
|
//场景心跳事件
|
|
OnTick(s *Scene)
|
|
//玩家进入事件
|
|
OnPlayerEnter(s *Scene, p *Player)
|
|
//玩家离开事件
|
|
OnPlayerLeave(s *Scene, p *Player)
|
|
//系统维护关闭事件
|
|
OnShutdown(s *Scene)
|
|
//获得场景的匹配因子(值越大越优先选择)
|
|
GetFitFactor(s *Scene, p *Player) int
|
|
//能否创建
|
|
CanCreate(s *Scene, p *Player, mode, sceneType int, params []int32, isAgent bool) (bool, []int32)
|
|
//能否进入
|
|
CanEnter(s *Scene, p *Player) int
|
|
//房间座位是否已满
|
|
IsFull(s *Scene, p *Player, num int32) bool
|
|
//是否可以强制开始
|
|
IsCanForceStart(s *Scene) bool
|
|
//结算房卡
|
|
BilledRoomCard(s *Scene, snid []int32)
|
|
//需要几张房卡
|
|
GetNeedRoomCardCnt(s *Scene) int32
|
|
//房费模式
|
|
GetRoomFeeMode(s *Scene) int32
|
|
//游戏人数
|
|
GetPlayerNum(s *Scene) int32
|
|
//游戏底分
|
|
GetBaseCoin(s *Scene) int
|
|
//游戏总局数
|
|
GetTotalOfGames(s *Scene) int32
|
|
//
|
|
GetNeedRoomCardCntDependentPlayerCnt(s *Scene) int32
|
|
//
|
|
GetBetState() int32
|
|
GetViewLogLen() int32
|
|
}
|
|
|
|
func GetScenePolicy(gameId, mode int) ScenePolicy {
|
|
if g, exist := ScenePolicyPool[gameId]; exist {
|
|
if p, exist := g[mode]; exist {
|
|
return p
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func RegisteScenePolicy(gameId, mode int, sp ScenePolicy) {
|
|
pool := ScenePolicyPool[gameId]
|
|
if pool == nil {
|
|
pool = make(map[int]ScenePolicy)
|
|
ScenePolicyPool[gameId] = pool
|
|
}
|
|
if pool != nil {
|
|
pool[mode] = sp
|
|
}
|
|
}
|
|
|
|
func CheckGameConfigVer(ver int32, gameid int32, modeid int32) bool {
|
|
v := GetGameConfigVer(gameid, modeid)
|
|
logger.Logger.Info("Old game config ver:", v)
|
|
return ver == v
|
|
}
|
|
|
|
func GetGameConfigVer(gameid int32, modeid int32) int32 {
|
|
sp := GetScenePolicy(int(gameid), int(modeid))
|
|
if sp == nil {
|
|
return 0
|
|
}
|
|
spd, ok := sp.(*ScenePolicyData)
|
|
if !ok {
|
|
return 0
|
|
}
|
|
return spd.ConfigVer
|
|
}
|