diff --git a/worldsrv/action_friend.go b/worldsrv/action_friend.go index 1c9adf4..5be220e 100644 --- a/worldsrv/action_friend.go +++ b/worldsrv/action_friend.go @@ -520,7 +520,7 @@ func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, da send(p) return nil } - if !p.EnterScene(scene, true, pos) { + if !scene.PlayerEnter(p, pos, true) { logger.Logger.Trace("CSInviteFriendHandler EnterScene fail") opRetCode = friend.OpResultCode_OPRC_Error //进入房间失败 send(p) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 250d930..6b24192 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -165,7 +165,7 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in } } - if !p.EnterScene(scene, true, -1) { + if !scene.PlayerEnter(p, -1, true) { code = gamehall.OpResultCode_Game_OPRC_Error_Game } @@ -1940,7 +1940,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in // try enter scene csp.scenes[scene.sceneId] = scene scene.csp = csp - if !p.EnterScene(scene, true, -1) { + if !scene.PlayerEnter(p, -1, true) { code = gamehall.OpResultCode_Game_OPRC_Error_Game } } @@ -2048,7 +2048,7 @@ func (this *CSCreateRoomHandler) ProcessThirteen(s *netlib.Session, packetid int // try enter scene csp.scenes[scene.sceneId] = scene scene.csp = csp - if !p.EnterScene(scene, true, -1) { + if !scene.PlayerEnter(p, -1, true) { code = gamehall.OpResultCode_Game_OPRC_Error_Game } } diff --git a/worldsrv/actsignmgr.go b/worldsrv/actsignmgr.go deleted file mode 100644 index b333c85..0000000 --- a/worldsrv/actsignmgr.go +++ /dev/null @@ -1,154 +0,0 @@ -package main - -import ( - "github.com/globalsign/mgo" - "mongo.games.com/game/common" - "mongo.games.com/game/model" - "mongo.games.com/game/proto" - "mongo.games.com/game/protocol/activity" - "mongo.games.com/game/protocol/server" - "mongo.games.com/game/srvdata" - "mongo.games.com/goserver/core/logger" - "time" -) - -var ActSignMgrSington = &ActSignMgr{ - SignConfigs: make(map[int]*server.DB_ActSign), -} - -type ActSignMgr struct { - SignConfigs map[int]*server.DB_ActSign -} - -func (this *ActSignMgr) Init() { - if this.SignConfigs == nil { - this.SignConfigs = make(map[int]*server.DB_ActSign) - } - for _, v := range srvdata.PBDB_ActSignMgr.Datas.GetArr() { - this.SignConfigs[int(v.Id)] = v - } -} - -func (this *ActSignMgr) GetConfig(id int) *server.DB_ActSign { - signConfig, ok := this.SignConfigs[id] - if ok { - return signConfig - } - return nil -} - -func (this *ActSignMgr) OnPlayerLogin(player *Player) error { - return this.RefixedPlayerData(player) -} - -func (this *ActSignMgr) OnDayChanged(player *Player) error { - //跨天不需要 - //this.RefixedPlayerData(player) - //this.SendSignDataToPlayer(player) - return nil -} - -func (this *ActSignMgr) RefixedPlayerData(player *Player) error { - if player.IsRob { - return nil - } - if player.SignData == nil { - player.SignData = &model.SignData{ - SignIndex: 0, - LastSignTickets: 0, - } - } - return nil -} - -func (this *ActSignMgr) SendSignDataToPlayer(player *Player) { - if player.IsRob { - return - } - pack := &activity.SCSignData{} - //已经领取第几个 - pack.SignCount = proto.Int(player.SignData.SignIndex) - if player.SignData.LastSignTickets != 0 { - lastSignTime := time.Unix(player.SignData.LastSignTickets, 0) - dayDiff := int32(common.DiffDay(time.Now(), lastSignTime)) - if dayDiff == 0 { - pack.TodaySign = proto.Int32(1) - } else { - pack.TodaySign = proto.Int32(0) - } - } else { - pack.TodaySign = proto.Int32(0) - } - proto.SetDefaults(pack) - player.SendToClient(int(activity.ActSignPacketID_PACKET_SCSignData), pack) - logger.Logger.Trace("SCSignData: ", pack) -} - -func (this *ActSignMgr) CanSign(player *Player, signIndex int) activity.OpResultCode_ActSign { - signConfig := this.GetConfig(signIndex) - if signConfig == nil { - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Error - } - - if player.SignData.LastSignTickets != 0 { - lastSignTime := time.Unix(player.SignData.LastSignTickets, 0) - dayDiff := int32(common.DiffDay(time.Now(), lastSignTime)) - if dayDiff == 0 { - if player.SignData.SignIndex == signIndex { - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Repeat - } else { - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Config_Day_Error - } - } - - if player.SignData.SignIndex != (signIndex - 1) { - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Config_Day_Error - } - } else { - if signIndex != 1 { - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Config_Day_Error - } - } - - return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Sucess -} - -//func (this *ActSignMgr) Sign(player *Player, signIndex int, signType int32) activity.OpResultCode_ActSign { -// errCode := this.CanSign(player, signIndex) -// if errCode != activity.OpResultCode_ActSign_OPRC_Activity_Sign_Sucess { -// return errCode -// } -// -// signConfig := this.GetConfig(signIndex) -// if signConfig == nil { -// return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Error -// } -// -// player.SignData.LastSignTickets = time.Now().Unix() -// player.SignData.SignIndex = signIndex -// -// logger.Logger.Info("签到成功: ", signConfig) -// grade := signConfig.Grade -// switch signType { -// case 0: //普通签到 -// case 1: //双倍签到 -// grade *= 2 -// } -// switch signConfig.Type { -// case 1: //金币 -// player.AddCoin(int64(grade), 0, common.GainWay_ActSign, strconv.Itoa(signIndex), time.Now().Format("2006-01-02 15:04:05")) -// case 2: //钻石 -// player.AddDiamond(int64(grade), 0, common.GainWay_ActSign, strconv.Itoa(signIndex), time.Now().Format("2006-01-02 15:04:05")) -// case 3: //道具 -// item := &Item{ -// ItemId: signConfig.Item_Id, -// ItemNum: int64(grade), -// } -// BagMgrSingleton.AddItems(player, []*Item{item}, 0, common.GainWay_ActSign, strconv.Itoa(signIndex), time.Now().Format("2006-01-02 15:04:05"), 0, 0, false) -// } -// return activity.OpResultCode_ActSign_OPRC_Activity_Sign_Sucess -//} - -func init() { - mgo.SetStats(true) -} diff --git a/worldsrv/coinscenepool.go b/worldsrv/coinscenepool.go index 1882309..d710354 100644 --- a/worldsrv/coinscenepool.go +++ b/worldsrv/coinscenepool.go @@ -5,20 +5,20 @@ import ( "mongo.games.com/game/model" "mongo.games.com/game/proto" - gamehall_proto "mongo.games.com/game/protocol/gamehall" - server_proto "mongo.games.com/game/protocol/server" + gamehallproto "mongo.games.com/game/protocol/gamehall" + serverproto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" ) // CoinScenePool 房间池 type CoinScenePool struct { - platform string // 平台id - groupId int32 // 组id - id int32 // 场次id - dbGameFree *server_proto.DB_GameFree // 场次配置 - dbGameRule *server_proto.DB_GameRule // 场次配置 - scenes map[int]*Scene // 所有房间,房间id - players map[int32]struct{} // 玩家id + platform string // 平台id + groupId int32 // 组id + id int32 // 场次id + dbGameFree *serverproto.DB_GameFree // 场次配置 + dbGameRule *serverproto.DB_GameRule // 场次配置 + scenes map[int]*Scene // 所有房间,房间id + players map[int32]struct{} // 玩家id // 扩展数据 extraData interface{} @@ -26,7 +26,7 @@ type CoinScenePool struct { policy ICoinScenePool } -func NewCoinScenePool(platform string, groupId int32, dbGameFree *server_proto.DB_GameFree) *CoinScenePool { +func NewCoinScenePool(platform string, groupId int32, dbGameFree *serverproto.DB_GameFree) *CoinScenePool { if dbGameFree == nil { return nil } @@ -87,20 +87,20 @@ func (csp *CoinScenePool) CanInviteRob() bool { } // CanEnter 检查入场条件 -func (csp *CoinScenePool) CanEnter(p *Player) gamehall_proto.OpResultCode { +func (csp *CoinScenePool) CanEnter(p *Player) gamehallproto.OpResultCode { if csp.dbGameFree == nil || p == nil { - return gamehall_proto.OpResultCode_OPRC_Error + return gamehallproto.OpResultCode_OPRC_Error } //检测房间状态是否开启 gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.id) if gps == nil || !gps.Status { - return gamehall_proto.OpResultCode_OPRC_RoomHadClosed + return gamehallproto.OpResultCode_OPRC_RoomHadClosed } dbGameFree := csp.dbGameFree if dbGameFree == nil { - return gamehall_proto.OpResultCode_OPRC_RoomHadClosed + return gamehallproto.OpResultCode_OPRC_RoomHadClosed } //检查游戏次数限制 @@ -109,7 +109,7 @@ func (csp *CoinScenePool) CanEnter(p *Player) gamehall_proto.OpResultCode { if dbGameFree.GetPlayNumLimit() != 0 && todayData != nil && todayData.GameTimes >= int64(dbGameFree.GetPlayNumLimit()) { - return gamehall_proto.OpResultCode_OPRC_RoomGameTimes + return gamehallproto.OpResultCode_OPRC_RoomGameTimes } } @@ -117,28 +117,30 @@ func (csp *CoinScenePool) CanEnter(p *Player) gamehall_proto.OpResultCode { } // CanAudienceEnter 检查观众入场条件 -func (csp *CoinScenePool) CanAudienceEnter(p *Player) gamehall_proto.OpResultCode { +func (csp *CoinScenePool) CanAudienceEnter(p *Player) gamehallproto.OpResultCode { if csp.dbGameFree == nil || p == nil { - return gamehall_proto.OpResultCode_OPRC_Error + return gamehallproto.OpResultCode_OPRC_Error } //检测房间状态是否开启 gps := PlatformMgrSingleton.GetGameFree(p.Platform, csp.id) if gps == nil { - return gamehall_proto.OpResultCode_OPRC_RoomHadClosed + return gamehallproto.OpResultCode_OPRC_RoomHadClosed } dbGameFree := csp.dbGameFree if dbGameFree == nil { - return gamehall_proto.OpResultCode_OPRC_RoomHadClosed + return gamehallproto.OpResultCode_OPRC_RoomHadClosed } return csp.policy.CanAudienceEnter(csp, p) } // PlayerEnter 玩家进入房间池 -func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, ischangeroom bool) gamehall_proto.OpResultCode { - if ret := csp.CanEnter(p); ret != gamehall_proto.OpResultCode_OPRC_Sucess { +// exclude 排除的房间id +// isChangeRoom 是否换房 +func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, isChangeRoom bool) gamehallproto.OpResultCode { + if ret := csp.CanEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter find snid:%v csp.CanEnter coin:%v ret:%v id:%v", p.SnId, p.Coin, ret, csp.dbGameFree.GetId()) return ret @@ -146,40 +148,42 @@ func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, if p.scene != nil { logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter[p.scene != nil] find snid:%v in scene:%v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) - return gamehall_proto.OpResultCode_OPRC_Error + return gamehallproto.OpResultCode_OPRC_Error } var scene *Scene // 进入房间 - if roomId != 0 && (p.IsRob || p.GMLevel > 0 || csp.dbGameFree.GetCreateRoomNum() != 0) { + // 指定房间id进入,忽略排除exclude,只有机器人和进入预创建房间才允许 + if roomId != 0 && (p.IsRob || csp.dbGameFree.GetCreateRoomNum() != 0) { if s, ok := csp.scenes[int(roomId)]; ok { if s != nil && !s.deleting { //指定房间id进入,那么忽略掉排除id if s.IsFull() { - return gamehall_proto.OpResultCode_OPRC_RoomIsFull + return gamehallproto.OpResultCode_OPRC_RoomIsFull } if sp, ok := s.sp.(*ScenePolicyData); ok { if !s.starting || sp.EnterAfterStart { scene = s } else { logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter[!s.starting || sp.EnterAfterStart] snid:%v sceneid:%v starting:%v EnterAfterStart:%v", p.SnId, s.sceneId, s.starting, sp.EnterAfterStart) - return gamehall_proto.OpResultCode_OPRC_Error + return gamehallproto.OpResultCode_OPRC_Error } } } } else { - logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter(robot:%v,roomid:%v, exclude:%v, ischangeroom:%v) no found scene", p.SnId, roomId, exclude, ischangeroom) - return gamehall_proto.OpResultCode_OPRC_Error + logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter(robot:%v,roomid:%v, exclude:%v, isChangeRoom:%v) no found scene", p.SnId, roomId, exclude, isChangeRoom) + return gamehallproto.OpResultCode_OPRC_Error } } if scene == nil { - var ret gamehall_proto.OpResultCode - ret, scene = csp.policy.PlayerEnter(csp, p, exclude, ischangeroom) - if ret != gamehall_proto.OpResultCode_OPRC_Sucess { + var ret gamehallproto.OpResultCode + ret, scene = csp.policy.PlayerEnter(csp, p, exclude, isChangeRoom) + if ret != gamehallproto.OpResultCode_OPRC_Sucess { return ret } } + // 没有找到房间,创建新房间 if scene == nil { scene = csp.policy.NewScene(csp, p) if scene != nil { @@ -191,25 +195,25 @@ func (csp *CoinScenePool) PlayerEnter(p *Player, roomId int32, exclude []int32, } if scene != nil { - if p.EnterScene(scene, ischangeroom, -1) { + if scene.PlayerEnter(p, -1, isChangeRoom) { csp.OnPlayerEnter(p, scene) - return gamehall_proto.OpResultCode_OPRC_Sucess + return gamehallproto.OpResultCode_OPRC_Sucess } } logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter snid:%v not found scene", p.SnId) - return gamehall_proto.OpResultCode_OPRC_SceneServerMaintain + return gamehallproto.OpResultCode_OPRC_SceneServerMaintain } // AudienceEnter 观众入场 -func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32, ischangeroom bool) gamehall_proto.OpResultCode { - if ret := csp.CanAudienceEnter(p); ret != gamehall_proto.OpResultCode_OPRC_Sucess { +func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32, ischangeroom bool) gamehallproto.OpResultCode { + if ret := csp.CanAudienceEnter(p); ret != gamehallproto.OpResultCode_OPRC_Sucess { logger.Logger.Warnf("(csp *CoinScenePool) AudienceEnter find snid:%v csp.CanEnter coin:%v ret:%v id:%v", p.SnId, p.Coin, ret, csp.dbGameFree.GetId()) return ret } if p.scene != nil { logger.Logger.Warnf("(csp *CoinScenePool) AudienceEnter[p.scene != nil] find snid:%v in scene:%v gameId:%v", p.SnId, p.scene.sceneId, p.scene.gameId) - return gamehall_proto.OpResultCode_OPRC_Error + return gamehallproto.OpResultCode_OPRC_Error } var scene *Scene @@ -224,29 +228,29 @@ func (csp *CoinScenePool) AudienceEnter(p *Player, roomId int32, exclude []int32 } if scene == nil { - var ret gamehall_proto.OpResultCode + var ret gamehallproto.OpResultCode ret, scene = csp.policy.AudienceEnter(csp, p, exclude, ischangeroom) - if ret != gamehall_proto.OpResultCode_OPRC_Sucess { + if ret != gamehallproto.OpResultCode_OPRC_Sucess { return ret } } if scene == nil { - return gamehall_proto.OpResultCode_OPRC_NoFindDownTiceRoom + return gamehallproto.OpResultCode_OPRC_NoFindDownTiceRoom } if scene != nil { // 预创建房间检查观众数量 if scene.IsPreCreateScene() && scene.GetAudienceCnt() >= model.GameParamData.MaxAudienceNum { - return gamehall_proto.OpResultCode_OPRC_RoomIsFull + return gamehallproto.OpResultCode_OPRC_RoomIsFull } if scene.AudienceEnter(p, ischangeroom) { csp.OnPlayerEnter(p, scene) - return gamehall_proto.OpResultCode_OPRC_Sucess + return gamehallproto.OpResultCode_OPRC_Sucess } } logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter snid:%v not found scene", p.SnId) - return gamehall_proto.OpResultCode_OPRC_NoFindDownTiceRoom + return gamehallproto.OpResultCode_OPRC_NoFindDownTiceRoom } // OnPlayerEnter 玩家进入房间完成 @@ -431,7 +435,7 @@ func (csp *CoinScenePool) ListRoom(p *Player) bool { return false } - pack := &gamehall_proto.SCCoinSceneListRoom{ + pack := &gamehallproto.SCCoinSceneListRoom{ Id: csp.dbGameFree.Id, LimitCoin: csp.dbGameFree.LimitCoin, MaxCoinLimit: csp.dbGameFree.MaxCoinLimit, @@ -442,7 +446,7 @@ func (csp *CoinScenePool) ListRoom(p *Player) bool { maxPlayerNum := 0 for sceneId, s := range csp.scenes { - data := &gamehall_proto.CoinSceneInfo{ + data := &gamehallproto.CoinSceneInfo{ SceneId: proto.Int(sceneId), PlayerNum: proto.Int(len(s.players)), } @@ -451,7 +455,7 @@ func (csp *CoinScenePool) ListRoom(p *Player) bool { } pack.MaxPlayerNum = proto.Int(maxPlayerNum) proto.SetDefaults(pack) - p.SendToClient(int(gamehall_proto.CoinSceneGamePacketID_PACKET_SC_COINSCENE_LISTROOM), pack) + p.SendToClient(int(gamehallproto.CoinSceneGamePacketID_PACKET_SC_COINSCENE_LISTROOM), pack) return true } diff --git a/worldsrv/player.go b/worldsrv/player.go index 23107e8..488d5a2 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -179,7 +179,6 @@ func NewPlayer(sid int64, pd *model.PlayerData, s *netlib.Session) *Player { func (this *Player) init() bool { this.SetOnline() this.isNewbie = this.CreateTime == this.LastLoginTime - this.applyPos = -1 return true } @@ -2351,23 +2350,6 @@ func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, p return s, hall_proto.OpResultCode_Game_OPRC_Sucess_Game } -func (this *Player) EnterScene(s *Scene, ischangeroom bool, pos int) bool { - if s == nil { - logger.Logger.Tracef("(this *Player) EnterScene, s == nil %v", this.SnId) - return false - } - - if s != nil { - this.applyPos = -1 - if s.PlayerEnter(this, pos, ischangeroom) { - FirePlayerEnterScene(this, s) - return true - } - } - - return false -} - func (this *Player) ReturnScene(isLoaded bool) *Scene { logger.Logger.Tracef("(this *Player) ReturnScene %v", this.SnId) if this.scene == nil { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index f4464d6..790d478 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -553,6 +553,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool { 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) this.lastTime = time.Now() + 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) @@ -659,7 +660,6 @@ func (this *Scene) DelPlayer(p *Player) bool { func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool { logger.Logger.Infof("(this *Scene:%v) AudienceEnter(%v) ", this.sceneId, p.SnId) p.scene = this - p.applyPos = -1 this.audiences[p.SnId] = p this.gameSess.AddPlayer(p) if this.IsHundredScene() { @@ -744,7 +744,6 @@ func (this *Scene) DelAudience(p *Player) bool { delete(this.gameCtx, p.SnId) } p.scene = nil - p.applyPos = -1 SceneMgrSingleton.OnPlayerLeaveScene(this, p) if this.IsHundredScene() { HundredSceneMgrSington.OnPlayerLeave(p)