| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| ##@package E:/GameSVN/U3DGame/ProjectSServer/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py  | 
| # @todo:   | 
| #  | 
| # @author: Alee  | 
| # @date 2017-9-4 ÏÂÎç08:31:29  | 
| # @version 1.0  | 
| #  | 
| # @note: µ¥¶À±£´æpyÊý¾Ý²»ÖضÁÎļþ£¬´ËÎļþ²»ÒªimportÆäËûÄ£¿é£¬±ÜÃâÖØ¶ÁÓÐÎÊÌâ  | 
| #  | 
| #---------------------------------------------------------------------  | 
|   | 
| g_dbPlayerIDMap = {} # DBPlayerÍæ¼Ò±íIDÓ³Éä¹ØÏµ {playerID:accID, ...}  | 
|   | 
| g_allMapServerInitOK = False  | 
|   | 
| g_noPlayerLoginWarningMailState = 0 # ·þÎñÆ÷Æô¶¯ºóÎÞÍæ¼ÒµÇ¼Ԥ¾¯Óʼþ״̬£» 0-δ´¦Àí£»1-ÒÑ·¢ËÍ£»2-ÓÐÍæ¼ÒµÇ¼ÁË  | 
|   | 
| g_pyGameDataManager = None  | 
|   | 
| g_commMapLineInfo = {} # µØÍ¼ÏßÂ·ÕæÊµµØÍ¼ÐéÄâÏßÐÅÏ¢ {(dataMapID, lineID):(realMapID, copyMapID), ...}  | 
| g_commMapLineRouteDict = {} # µØÍ¼Ïß··ÓÉ·þÎñË÷ÒýÐÅÏ¢ {(dataMapID, lineID):routeServerIndex, ...}  | 
| g_commMapLinePlayerCountDict = {} # ³£¹æµØÍ¼·ÖÏßÈËÊý {dataMapID:{lineID:ÈËÊý, ...}}  | 
| g_needSyncCommMapLinePlayerCount = False # ³£¹æµØÍ¼·ÖÏßÈËÊýÊÇ·ñÓбä¸üÐèҪ֪ͨ  | 
|   | 
| #---------------------------- ×é¶Óϵͳ»º´æ ------------------------------  | 
| g_sceneTeamIDDict = {} # ³¡¾°¶ÓÎéID×Öµä {³¡¾°µØÍ¼ID:[teamID, teamID, ...], ...}  | 
| g_scenePlayerIDDict = {} # ³¡¾°Íæ¼ÒID×Öµä {³¡¾°µØÍ¼ID:[playerID, playerID, ...], ...}  | 
| ## ÓÉÓڲ߻®ÒªÇó¿Í»§¶ËÇëÇóµÃµ½µÄÁбíÐèÒªÊÇʵʱµÄ£¬²¢ÇÒÇëÇóƵÂʱȽϸߣ¬¹ÊÕâÀï×ö¸ö°æ±¾¿ØÖÆ  | 
| #g_sceneTeamServerVersion = {} # ³¡¾°¶ÓÎé±ä¸ü°æ±¾tick {mapID:tick, ...}  | 
| #g_sceneTeamQueryVersion = {} # Íæ¼Ò³¡¾°¶ÓÎé²éѯ°æ±¾tick {playerID:{mapID:tick, ...}, ...}  | 
| g_tagMapTeamDict = {} # Ä¿±ê¶ÓÎé {tagMapID:[teamID, teamID, ...], ...}  | 
| g_tagMapTeamTimeDict = {} # ¶ÓÎé×îºóÒ»´Î¸üÐÂÄ¿±ê¶ÓÎéµÄʱ¼ä {teamID:[mapID, time], ...}  | 
| g_matchingTeamDict = {} # Æ¥ÅäÖеĶÓÎ飬ֻ»á¼Ç¼¸±±¾Æ¥Åä {(tagMapID, tagMapEx):[teamID, teamID, ...], ...}  | 
| g_matchingPlayerDict = {} # Æ¥ÅäÖеÄÍæ¼Ò£¬Ö»»á¼Ç¼¸±±¾Æ¥Åä {(tagMapID, tagMapEx):[playerID, playerID, ...], ...}  | 
|   | 
| g_teamFBEnterAskDict = {} # Ñ¯Îʿɷñ½øÈë×é¶Ó¸±±¾µÄ¶ÓÎéÐÅÏ¢ {teamID:[askMapID, askMapEx, {playerID:[ÑéÖ¤½á¹û, ½á¹ûÌáʾ²ÎÊýÐÅÏ¢], ...}], ...}  | 
| #×¼±¸×´Ì¬: 0-δ׼±¸£¬1-×¼±¸£¬2-¾Ü¾ø£¬3-µôÏߣ¨´ËÇé¿öÔÝʱ²»×ö´¦Àí£¬µôÏߵϰֱ½Ó°Ñ¸ÃÍæ¼Ò´Ó×¼±¸¶ÓÁÐÀïÒÆ³ý£¬µ±×ö´Ë¶ÓÔ±²»´æÔÚ´¦Àí£©  | 
| g_prepareTeamDict = {} # ×¼±¸ÖеĶÓÎéÐÅÏ¢ {teamID:[askMapID, askMapEx, {playerID:×¼±¸×´Ì¬, ...}], ...}  | 
|   | 
| g_queryTeamMemFuncDataDict = {} # ²éѯ¶ÓÔ±¹¦ÄÜÊý¾Ý {(queryFuncType, teamID, srcPlayerID):[[queryID, ...], {queryID:ret, ...}], ...}  | 
|   | 
| g_tjgKickPlayerTeamDict = {} # ÍÑ»ú¹ÒÍæ¼Ò±»Ìß¶ÓÎéIDÁбí {ÍÑ»úplayerID:[ÌßËûµÄteamID, ...], ...}  | 
| g_countdownLeaveTeamDict = {} # µ¹¼ÆÊ±À뿪¶ÓÎéµÄÍæ¼ÒÐÅÏ¢ {playerID:[teamID, leaveServerTick], ...}  | 
| #---------------------------------------------------------------------  | 
|   | 
| #Íæ¼ÒÉ罻Ȧ´æÔÚµ¥ÏòµÄÇé¿ö£¬¼Ç¼±»É罻ȺÌå  | 
| #ÀýÈçAÍæ¼Ò±»BÍæ¼Ò¼ÓÈëºÚÃûµ¥£¬µ«ÊÇAÍæ¼Ò²»¸ÐÖª£¬µ±AÍæ¼ÒÉý¼¶Ê±ÒªÍ¨ÖªBÍæ¼Ò  | 
| #{AÍæ¼ÒID£º{BÍæ¼ÒID£º¼Ç¼´ÎÊý}}  | 
| g_BeSocialList = {}  | 
|   | 
| #ÇëÇóÁбí Íæ¼ÒµÄAddRequest·ÏÆú  | 
| g_playerRequests = {}  | 
|   | 
| g_fightPowerChangeFamilyIDList = [] #ÏÉÃ˳ÉÔ±Õ½Á¦Óбä¸üµÄÏÉÃËID [familyID, ...]  | 
| g_sortFamilyIDList = [] #ÏÉÃËÅÅÐò˳Ðò [familyID, ...]  | 
| g_familyWarFightingIDList = [] # ÏÉÃËÁªÈüÖÐÕýÔÚÕ½¶·ÖеÄÏÉÃËIDÁбí [familyID, ...]  | 
| g_familyWarFamilyIDList = [] # ÏÉÃËÁªÈü²ÎÈüÏÉÃËIDÁбí [familyID, ...]  | 
| g_familyWarMemDict = {} # ÏÉÃËÁªÈü²ÎÈüÈËÔ±Ãûµ¥ {playerID:memRecData, ...}  | 
|   | 
| #bossË¢ÐÂÅÅÐòÁÐ±í  | 
| g_sortBOSSRefreshList = []  | 
| g_swrhJoinRecord = [] #ÊØ»¤È˻ʼÒ×å½ñÈղμӼǼ(ÒÑÕý³£½áËã)[familyID]  | 
|   | 
| g_bossShuntPlayerInfo = {} # boss·ÖÁ÷Íæ¼ÒÐÅÏ¢{(mapID, lineID):{playerID:[bossID, teamID, relatedTick], ...}, ...}  | 
| g_bossShuntLineState = {} # boss·ÖÁ÷Ïß·¶ÔÓ¦boss״̬ {bossID:{lineID:isAlive, ...}, ...}  | 
| g_bossShuntStateChangeBoss = [] # boss·ÖÁ÷BossÏß·״̬Óбä¸üµÄbossÁÐ±í  | 
|   | 
| g_familyOwnerBossInfo = {} # µØÍ¼Í¬²½ÉÏÀ´µÄÏÉÃ˹éÊôbossÐÅÏ¢ {bossID:[curHp, maxHP, ownerFamilyID, ownerFamilyName], ...}  | 
| g_horsePetRobBossHurtPlayerIDInfo = {} # Æï³èÕù¶áÓжÔbossÉËѪ¹ýµÄÍæ¼ÒIDÐÅÏ¢ {bossID:{familyID:[playerID, ...], ...}, ...}  | 
| g_familyKillHorsePetRobBossCntDict = {} # Æï³èÕù¶áÏÉÃËÒÑ»÷ɱbossÊý {familyID:»÷ɱÊý, ...}  | 
|   | 
| g_todayPlayerLVDict = {} #½ñÈÕÍæ¼ÒµÈ¼¶×Öµä {playerID:lv,..}  | 
| g_yesterdayPlayerLVDict = {} #×òÈÕÍæ¼ÒµÈ¼¶×Öµä{playerID:lv,..}  | 
| g_onedayJobPlayerLoginoffTimeDict = {} #½ü24СʱµÇ¼/ÀëÏßµÄÍæ¼ÒÖ°ÒµÊý {Ö°Òµ:{playerID:loginoffTime, ...}}  | 
|   | 
| g_ctgOfflinePlayerInfo = {} # {playerID:[[ctgInfo], ...], ...} # ÀëÏßÍæ¼ÒCTGÐÅÏ¢»º´æ  | 
| g_gmtOfflinePlayerInfo = {} # {(queryType, playerFind):[gmtInfo, ...], ...} # ÀëÏßÍæ¼ÒGMTÐÅÏ¢»º´æ  | 
|   | 
| g_questionIDHistory = {}#³ö¹ýµÄÌâ¼Ç¼ {familyid:[³ö¹ýµÄÌâid,..]}  | 
| g_familyAnswerDict = {} #ÏÉÃË´ðÌâÊýÁ¿ {familyid:[´ðÌâÊýÁ¿,tick],..}  | 
| g_familyPartyTopInfo = [] #ÏÉÃËÑç»á´ðÌâÍõ [playerID,Ãû×Ö]  | 
| g_partyheroAnswerDict = {} #ÏÉÃËÑç»áÍæ¼Ò´ð¶ÔÌâÄ¿ÊýÁ¿ {playerid:´ðÌâÊýÁ¿,..}  | 
| g_familyAnswerPlayerIDDict = {} #ÏÉÃËÑç»áÍæ¼Ò²ÎÓë´ðÌâÊýÁ¿  {playerID:[ÌâÄ¿ID, ...], ...}  | 
| g_chuangongPlayerDict = {} #´«¹¦Íæ¼ÒÐÅÏ¢ {playerID:[Ä¿±êÍæ¼ÒID, ...], ...}  | 
|   | 
| g_redPacketMgr = None # RedPacketMgr  | 
|   | 
| g_bourseItemTradingTimeDict = {} # ÎïÆ·¿ªÊ¼½»Ò×µÄʱ¼ä¼Ç¼ {guid:tick}  | 
|   | 
| g_fbHelpBattleCheckInPlayerDict = {} # ¸±±¾ÖúÕ½Íæ¼ÒµÇ¼Ç»º´æ {playerID:HelpBattlePlayer, ...}  | 
|   | 
| g_marryReqInfo = {} # µ±Ç°½øÐÐÖеÄÇóÇ×ÐÅÏ¢ {ÇëÇóÍæ¼ÒID:MarryReq, ...}  | 
| g_marryCandyInfo = {} # ½øÐÐÖеÄϲÌÇÐÅÏ¢ {(playerIDA, playerIDB):MarryCandy, ...}  | 
| g_marryCandySortList = [] # °´½áËãʱ¼äÅÅÐòºóµÄϲÌÇÁÐ±í£¬ÉýÐò  | 
| g_marryBreakInfo = {} # ½øÐÐÖеÄÀë»éÐÅÏ¢{(playerIDA, playerIDB):MarryCandy, ...}  | 
| g_marryBreakSortList = [] # °´Ìύʱ¼äÅÅÐòºóµÄϲÌÇÁÐ±í£¬ÉýÐò  | 
|   | 
| g_arenaPlayerBattleRecDict = {} # ±¾·þ¾º¼¼³¡Íæ¼ÒÌôÕ½¼Ç¼»º´æ {playerID:[ArenaBattleRec, ...], ...}  | 
| g_arenaPlayerMatchDict = {} # ±¾·þ¾º¼¼³¡Íæ¼ÒÆ¥Åä¼Ç¼»º´æ {playerID:[ArenaMatchPlayer, ...], ...}  | 
| g_arenaRobotLVList = [] # ±¾·þ¾º¼¼³¡»úÆ÷È˵ȼ¶ÁÐ±í  | 
|   | 
| g_autoViceleaderDict = {}#×Ô¶¯°²ÅŸ±ÃËÖ÷µÄÍæ¼Ò¼Ç¼{familyID:[]}  | 
| g_forbidAutoViceleaderFamily = [] #½ûÖ¹×Ô¶¯°²ÅŸ±ÃËÖ÷µÄÏÉÃË[familyID,..]  | 
|   | 
| g_crossZoneName = "" # ¿ç·þ·ÖÇøÃû  | 
|   | 
| g_crossServerTimeInfo = [0, 0, 0] # ¿ç·þʱ¼äÐÅÏ¢ [crossServerTime, curServerTime, syncMapTime]  | 
|   | 
| g_luckyCloudBuyNumDict = {} # ÐÒÔËÔÆ¹º¹ºÂò¼Ç¼ {zoneID:[LuckyCloudBuyNum, ...], ...}  | 
| g_luckyCloudBuyLotteryDict = {} # ÐÒÔËÔÆ¹º¿ª½±¼Ç¼ {zoneID:[LuckyCloudBuyLottery, ...], ...}  | 
| g_unNotifyCloudBuyNumDict = {} # Î´Í¨ÖªµÄ¿ç·þÔÆ¹º¹ºÂòÐÅÏ¢ {playerID:msgData, ...}  | 
| g_luckyCloudBuyRemainCountDict = {} # ÐÒÔËÔÆ¹ºÊ£Ó๺Âò·ÝÊý {zoneID:remainCount, ...} - ×Ó·þÓà  | 
|   | 
| g_crossActInfoDict = None # ¿ç·þÔËÓª»î¶¯ÐÅÏ¢ {actName:{actInfoDict}, ...}  | 
|   | 
| g_playerDelMailGUIDDict = {} # Íæ¼ÒÓʼþGUIDÐÅÏ¢ {playerID:[GUID, ...], ...} ½ö´¥·¢É¾³ý²ÅÓÐÊý¾Ý£¬ÇÒ²¢²»Ò»¶¨ËùÓÐGUID¶¼´æÔÚ£¬½ö×÷Ϊɾ³ýÓʼþʱÓõ½  | 
| g_crossMailPlayerDict = {} # Óпç·þÓʼþµÄÍæ¼ÒIDÐÅÏ¢ {playerID:tick, ...}  | 
|   | 
| g_crossPlayerViewCache = {} # ²é¿´¿ç·þÍæ¼ÒÐÅÏ¢ {playerID:[cacheInfo, updTick], ...}  | 
|   | 
| g_crossPKPlayerDict = {} # ¿ç·þPKÍæ¼Ò×ֵ䠠{playerID:PKPlayer, ...}  | 
| g_crossPKZoneMatchPlayerDict = {} # ¿ç·þPKÆ¥ÅäÖеÄÍæ¼Ò×Öµä {zoneID:[playerID, ...], ...}  | 
| g_crossPKZoneMatchRobotPlayerDict = {} # ¿ç·þPKÆ¥Åä»úÆ÷È˵ÄÍæ¼Ò×Öµä {playerID:PKPlayer, ...}  | 
| g_crossPKRoomDict = {} # ¿ç·þPK·¿¼ä×Öµä {roomID:PKRoom, ...}  | 
| g_crossPKRoomID = 0 # ¿ç·þPKµ±Ç°ÒѾ´´½¨µ½µÄ·¿¼äID£¬×ÔÔö´´½¨  | 
| g_crossPKTodayPKRecordInfo = {} # ¿ç·þPKÍæ¼Ò½ñÈÕPK¼Ç¼ {playerID:[[tagPlayerID, winnerID], ...]}  | 
| g_crossPKBesureMatchRobotInfo = {} # ¿ç·þPKÍæ¼Ò±Ø¶¨Æ¥Åä»úÆ÷ÈË´ÎÊýÐÅÏ¢ {playerID:besureMatchRobotCount, ...}  | 
|   | 
| g_crossPKUnNotifyOverInfo = {} # ¿ç·þPKδͬ²½µÄ½áËãÐÅÏ¢ {player:[overInfo], ...}  | 
|   | 
| g_unNotifyKillCrossBossDict = {} # Î´Í¨Öª³É¹¦µÄ»÷ɱ¿ç·þboss {playerID:[killInfo], ...}£¬Ö÷ҪΪÁË·ÀË¢£¨»÷ɱÂíÉÏÏÂÏßµ¼ÖÂ֪ͨ²»µ½£¬È»ºóÉÏÏß¼ñ¶«Î÷£©  | 
|   | 
| g_crossMapNPCInfo = {} # ¿ç·þµØÍ¼NPCÐÅÏ¢ {mapID:[tick, npcInfo], ...}  | 
|   | 
| g_crossSetPlayerAttr = {} # ¿ç·þÍæ¼Ò¸üÐÂÍæ¼ÒÊý¾Ý {playerID:[[setType, setDict], ...], ...}  | 
|   | 
| g_crossMapCopyMapCountDict = {} # ¿ç·þµØÍ¼¶¯Ì¬·ÖÅäÐéÄâÏß·ÌõÊýÐÅÏ¢ {mapID:copyMapCount, ...}  | 
| g_crossDynamicLineInfo = {} # ¿ç·þ¶¯Ì¬Ïß·ÐÅÏ¢ {dataMapID:{(zoneID, funcLineID):[CrossFuncLineInfo, CrossFuncLineInfo, ...], ...}, ...}  | 
| g_crossDynamicLineCopyMapInfo = {} # ¿ç·þ¶¯Ì¬Ïß·ÐéÄâÏß·ÐÅÏ¢ {(mapID, copyMapID):CrossCopyMapInfo, ...}  | 
|   | 
| g_crossFBFuncLinePlayerCountInfo = {} # ¿ç·þ¸±±¾¹¦ÄÜÏß·ÈËÊýÐÅÏ¢£¬±¾·þ»º´æ {mapID:{funcLineID:[playerCount], ...}, ...}  | 
|   | 
| g_unNotifyPlayerCrossMsgDict = {} # Î´Í¨ÖªÍæ¼ÒµÄ¿ç·þÃüÁî {playerID:{msgType:[msgInfo], ...}, ...}  | 
|   | 
| g_crossBattlefieldBuyInfo = {} # ¿ç·þÕ½³¡¹ºÂò¼Ç¼ {zoneID:{hmNum:{playerID:CrossBattlefieldBuy, ...}, ...}, ...}  | 
| g_openDateTime = None # ±¾³¡´Î¿ªÆôµÄʱ¼ä  | 
| g_overPlayerIDList = [] # ±¾³¡´ÎÒѾ½áËãµÄÍæ¼ÒIDÁÐ±í  | 
|   | 
| g_championshipMgr = None # ¿ç·þÅÅλÕù°ÔÈü¹ÜÀí  | 
|   | 
| g_crossActAllRechargeInfo = {} # ¿ç·þÈ«Ãñ³äÖµÐÅÏ¢£¬±¾·þÓà{zoneID:{playerID:×ܳäÖµ, ...}, ...}  | 
| g_crossYaomoBossHurtInfo = {} # ¿ç·þÑýħbossÉ˺¦ÐÅÏ¢£¬±¾·þÓà{playerID:hurtTotal, ...}  | 
|   | 
| g_familyTalkCache = {} #{familyID:[[time,content,extras],..]}  | 
| g_worldTalkCache = [] #[[time,name, playerID, content,extras],..]  | 
|   | 
| g_unTJLogoffTime = {} #·ÇÍÑ»úÀëÏßʱ¼ä {playerID:time, ...}  |