| | |
| | | import IpyGameDataPY
|
| | | import PlayerFamilyParty
|
| | | import PlayerFamilyZhenfa
|
| | | import PlayerFamilyEmblem
|
| | | import GameWorldFamilyWar
|
| | | import GameWorldArena
|
| | | import CrossLuckyCloudBuy
|
| | |
| | | import GameWorldOpenServerCampaign
|
| | | import CrossBillboard
|
| | | import CrossChampionship
|
| | | import GameWorldMineArea
|
| | | import PlayerFuncTeam
|
| | | import GameWorship
|
| | | import os
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | PlayerLove.DoOnDay()
|
| | | # 云购
|
| | | CrossLuckyCloudBuy.DoOnDay()
|
| | | # 膜拜
|
| | | GameWorship.DoOnDay()
|
| | | return
|
| | |
|
| | | def OnDayEx(tick):
|
| | |
| | | #情缘
|
| | | PlayerLove.OnTimeProcess(curTime, tick)
|
| | |
|
| | | #福地
|
| | | GameWorldMineArea.OnMineItemTimeProcess(curTime, tick)
|
| | | |
| | | #每整分钟处理一次
|
| | | curDateTime = datetime.datetime.today()
|
| | | curMinute = curDateTime.minute
|
| | |
| | | DisposeGameActivePlayer(tick)
|
| | | #处理游戏世界中的时间事件
|
| | | DisposeGameWorldEvenByTime(tick)
|
| | | #榜单
|
| | | CrossBillboard.OnMinuteProcess()
|
| | | GameWorldActionControl.Dispose_OperationActionState()
|
| | | GameWorldActionControl.Dispose_DailyActionState()
|
| | | GameWorldActionControl.Dispose_FBStateTime()
|
| | |
| | | PlayerFamilyRedPacket.OnRedPacketMinuteProcess()
|
| | | #拍卖行
|
| | | AuctionHouse.OnAuctionItemMinuteProcess(tick)
|
| | | #福地
|
| | | GameWorldMineArea.OnProcessOnMinute()
|
| | | #每5分钟触发一次仙盟总战力更新
|
| | | if curMinute % 5 == 0:
|
| | | PlayerFamily.UpdFamilyTotalFightPower()
|
| | | PlayerFamilyRedPacket.CheckDelRedpacketData()
|
| | | PlayerFamilyEmblem.CheckExpireEmblem()
|
| | |
|
| | | return
|
| | |
|
| | |
| | | return
|
| | |
|
| | | def OnReloadConfig():
|
| | | |
| | | if GameWorld.IsCrossServer():
|
| | | # 跨服重读时重推跨服相关数据
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | CrossRealmMsg.Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0) # 这里设置为0,广播所有子服务器组
|
| | | return
|
| | | |
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | def InitGameWorld(tick):
|
| | | #标记GameWorld初始化完成
|
| | | GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time()))
|
| | | PlayerControl.LoadDBPlayer()
|
| | | LoadDBPlayer()
|
| | | #初始化游戏时钟
|
| | | GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
|
| | | #初始话开服时间、星期几
|
| | |
| | | GameWorld.GetGameWorld().GetDBGoldOrderFormMgr().Sort()
|
| | | #排序排行榜
|
| | | PlayerBillboard.SortServerBillboard()
|
| | | #排序仙盟
|
| | | PlayerFamily.DoFamilySort()
|
| | | #功能队伍
|
| | | PlayerFuncTeam.OnGameServerInitOK()
|
| | | #仙盟
|
| | | PlayerFamily.OnGameServerInitOK()
|
| | | GameWorldActionControl.Dispose_FBStateTime()
|
| | | #仙盟联赛
|
| | | GameWorldFamilyWar.OnGameServerInitOK()
|
| | |
| | | CrossChampionship.OnServerStart()
|
| | | #跨服战场
|
| | | CrossBattlefield.OnServerStart()
|
| | | GameWorship.OnServerStart()
|
| | | #红包
|
| | | PlayerFamilyRedPacket.OnServerStart()
|
| | | #云购
|
| | |
| | | GameWorld.SendGameError("GameWarning", "InitGameWorld later than AllMapServerInitOK")
|
| | | AllMapServerInitOK(tick)
|
| | |
|
| | | return
|
| | |
|
| | | def LoadDBPlayer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {}, {"PlayerID":1, "AccID":1, "_id":0}, LoadDBPlayerRet)
|
| | | return
|
| | |
|
| | | def LoadDBPlayerRet(resultSetList, extendValueList):
|
| | | for resultDict in resultSetList:
|
| | | PyGameData.g_dbPlayerIDMap[resultDict["PlayerID"]] = resultDict["AccID"]
|
| | | GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s, %s" % (len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap))
|
| | | |
| | | PlayerFamily.OnLoadDBPlayerOK()
|
| | | return
|
| | |
|
| | | def DoCheckNewServerOpen(tick):
|
| | |
| | | if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit):
|
| | | GameWorld.Log("AllMapServerInitOK时GameServer还未启动好!")
|
| | | return
|
| | | __CheckAllMapInitOK()
|
| | | #通知所有地图服务器初始化成功, 同步时间
|
| | | GameWorld.GetGameWorld().Notify_AllMapServerInitOK(GameWorld.GetCurrentDataTimeStr())
|
| | |
|
| | |
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_LastMixServerDay, lastMixServerDay)
|
| | | lastMixServerWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerWorldLV)
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV, lastMixServerWorldLV)
|
| | | |
| | | # 功能队伍
|
| | | PlayerFuncTeam.OnMapServerInitOK()
|
| | |
|
| | | # 通知战盟相关活动开启状态
|
| | | fadState = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState)
|
| | |
| | | GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
|
| | | return
|
| | |
|
| | | def __CheckAllMapInitOK():
|
| | | ## 检查所有地图是否启动成功
|
| | | rootPath = ChConfig.GetServerRootPath()
|
| | | mapIDTxtPath = os.path.join(rootPath, "ZoneServerGroup\map1_8G\MapServer\MapServerData\Map\MapID.txt")
|
| | | if not os.path.isfile(mapIDTxtPath):
|
| | | GameWorld.ErrLog("MapID.txt不存在: %s" % mapIDTxtPath)
|
| | | return
|
| | | fileObj = open(mapIDTxtPath, 'rb')
|
| | | content = fileObj.read()
|
| | | fileObj.close()
|
| | | |
| | | mapInfoDict = {}
|
| | | mapInfoList = content.split('\r\n')
|
| | | for info in mapInfoList:
|
| | | mapInfo = info.split('\t')
|
| | | if len(mapInfo) < 3:
|
| | | continue
|
| | | mapInfoDict[GameWorld.ToIntDef(mapInfo[1])] = mapInfo[2]
|
| | | |
| | | gameMapManager = GameWorld.GetGameWorld().GetGameMapManager()
|
| | | for i in range(0, gameMapManager.GetCount()):
|
| | | curMap = gameMapManager.GetAt(i)
|
| | | mapID = curMap.GetID()
|
| | | state = curMap.GetState()
|
| | | if mapID in mapInfoDict and state == IPY_GameServer.mssRunning:
|
| | | mapInfoDict.pop(mapID)
|
| | | |
| | | if not mapInfoDict:
|
| | | #GameWorld.Log("都启动成功了")
|
| | | return
|
| | | # 汇报没有启动启动成功的地图ID信息
|
| | | errorMapIDList = mapInfoDict.keys()
|
| | | GameWorld.SendGameError("AllMapInitError", "未启动成功地图:%s" % (str(errorMapIDList)))
|
| | | return
|
| | |
|
| | | ## 服务器合服首次启动数据加载处理
|
| | | # @param None
|
| | | # @return None
|
| | |
| | | # 删除过期的通用数据
|
| | | __DelOutofdayRecData(universalRecMgr)
|
| | |
|
| | | # 仙盟联赛重置
|
| | | GameWorldFamilyWar.DoFamilyWarReset()
|
| | | # 重置所有仙盟联赛评级
|
| | | familyManager = GameWorld.GetFamilyManager()
|
| | | for i in xrange(familyManager.GetCount()):
|
| | | family = familyManager.GetAt(i)
|
| | | PlayerFamily.SetFamilyWarRank(family, 0)
|
| | | PlayerFamily.DoFamilySort()
|
| | | # 仙盟
|
| | | PlayerFamily.OnMixServerInit()
|
| | |
|
| | | # 设置合服首次启动加载成功
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServerInitOK, 1)
|