#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerFB # @todo: Íæ¼Ò¸±±¾ # # @author: hxp # @date 2013-08-23 # @version 1.5 # # @note # @change: "2014-04-16 18:00" hxp Ôö¼Ó¼Ò×åboss¸±±¾½øÈëÅÐ¶Ï # @change: "2015-01-09 10:30" hxp ¸ÄΪGetRouteServerIndex # @change: "2015-03-20 15:00" hxp Ìõ¼þÅжÏÐÞ¸Ä # @change: "2015-10-22 23:00" hxp Ôö¼Ó¿ç·þPK # @change: "2017-01-04 12:00" hxp Ôö¼ÓÒì½çÈëÇÖ #--------------------------------------------------------------------- #"""Version = 2017-01-04 12:00""" #--------------------------------------------------------------------- import GameWorldBoss import PlayerFamilyBoss import GameWorldFamilyWar import PlayerControl import PyGameData import IpyGameDataPY import PlayerTeam import GameWorld import ChConfig #--------------------------------------------------------------------- #--------------------------------------------------------------------- def GetFBLineIpyData(mapID, lineID, isDefaultLine=True): mapID = GetRecordMapID(mapID) fbLineIpyData = IpyGameDataPY.GetIpyGameDataNotLog("FBLine", mapID, lineID) if not fbLineIpyData and isDefaultLine: #GameWorld.DebugLog("ûÓÐÖ¸¶¨¹¦ÄÜÏß·µÄÔòĬÈÏÈ¡0£¬ÔÙûÓеϰ¾ÍÊDz»ÐèÒªµÄmapID=%s, lineID=%s" % (mapID, lineID)) fbLineIpyData = IpyGameDataPY.GetIpyGameDataNotLog("FBLine", mapID, 0) return fbLineIpyData ## »ñÈ¡¼Ç¼ֵµÄmapID # @param mapID ËùÒª²éµÄmapID # @return # @remarks Ò»°ãÓÃÓÚ¼¸ÕŵØÍ¼¹«ÓÃÒ»·Ý´æ´¢¼Ç¼£¬Èç×é¶Ó¸±±¾½øÈë´ÎÊý£¬CDʱ¼äµÈÊý¾ÝÐè¹²Ïí def GetRecordMapID(mapID): DataMapIDDict = IpyGameDataPY.GetConfigEx("DataMapIDDict") if not DataMapIDDict: dMapIDDict = {} ipyDataMgr = IpyGameDataPY.IPY_Data() for i in xrange(ipyDataMgr.GetFBLineCount()): ipyData = ipyDataMgr.GetFBLineByIndex(i) dMapID = ipyData.GetDataMapID() mID = ipyData.GetMapID() dMapIDList= dMapIDDict.get(dMapID, []) if mID not in dMapIDList: dMapIDList.append(mID) dMapIDDict[dMapID] = dMapIDList for dMapID in dMapIDDict.keys(): if len(dMapIDDict[dMapID]) == 1: dMapIDDict.pop(dMapID) DataMapIDDict = IpyGameDataPY.SetConfigEx("DataMapIDDict", dMapIDDict) #GameWorld.Log("¼ÓÔØDataMapIDDict=%s" % DataMapIDDict) for dataMapID, mapIDList in DataMapIDDict.items(): if mapID in mapIDList: return dataMapID return mapID ## ÇëÇó½øÈ븱±¾·ÖÏß # @param curPlayer: ÇëÇóÍæ¼Ò # @param queryCallName: ÇëÇ󻨵÷Ãû # @param sendCMD: ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷ # @return None def EnterFBLine(curPlayer, queryCallName, sendCMD, tick): GameWorld.Log("EnterFBLine()...queryCallName=%s,sendCMD=%s" % (queryCallName, sendCMD), curPlayer.GetPlayerID()) playerManager = GameWorld.GetPlayerManager() try: mapInfo = eval(sendCMD) except Exception, e: GameWorld.ErrLog("EnterFBLine() sendCMD=%s error" % sendCMD) return if not mapInfo or len(mapInfo) < 2: GameWorld.ErrLog("EnterFBLine() sendCMD=%s error!" % sendCMD) return #if mapInfo and len(mapInfo) == 2: tagMapID = mapInfo[0] tagLineID = mapInfo[1] fbLineIpyData = GetFBLineIpyData(tagMapID, tagLineID) sceneMapID = tagMapID if not fbLineIpyData else fbLineIpyData.GetMapID() gameMap = GameWorld.GetMap(sceneMapID) if not gameMap: GameWorld.ErrLog("Ä¿±ê¸±±¾µØÍ¼²»´æÔÚ!tagMapID=%s,sceneMapID=%s" % (tagMapID, sceneMapID), curPlayer.GetPlayerID()) return # ×é¶Ó¸±±¾, ÓжÓÎéµÄÇé¿ö²ÅÑéÖ¤ÆäËû¶ÓÔ±¿É·ñ½øÈ룬·ñÔò´ú±íµ¥È˽øÈë if gameMap.GetMapFBType() == ChConfig.fbtTeam: PlayerTeam.OnEnterFBTeamAsk(curPlayer, PlayerTeam.TeamFBAskType_Enter, tagMapID, tagLineID, tick) return # # Èç¹ûÊǽøÈë¿ç·þPKµØÍ¼µÄ # if GameWorldMergePK.OnRequestEnterMergePKMap(curPlayer, mapInfo[0], mapInfo[1]): # return # #·âħ̳¸±±¾ÅжÏÀïÃæµÄBOSSÊÇ·ñµ½ÁËË¢ÐÂʱ¼ä if tagMapID == ChConfig.Def_FBMapID_SealDemon: bossID = mapInfo[2] if not GameWorldBoss.GetBossIsAliveOrCanReborn(bossID): return elif tagMapID == ChConfig.Def_FBMapID_FamilyWar: if not GameWorldFamilyWar.CheckPlayerCanEnterFamilyWarFBMap(curPlayer): return elif tagMapID == ChConfig.Def_FBMapID_FamilyBossMap: if not PlayerFamilyBoss.CheckIsFamilyBossFBOpen(curPlayer.GetFamilyID(), tagMapID): GameWorld.Log("EnterFBLine mapID=%s is familyBossFB, but is not open!" % tagMapID) return #ÊØÎÀÈË»Ê ÊÇ·ñÒÑ²Î¼Ó elif tagMapID == ChConfig.Def_FBMapID_FamilyInvade: if curPlayer.GetFamilyID() in PyGameData.g_swrhJoinRecord: PlayerControl.NotifyCode(curPlayer, "TheEmperor1") return # MapServer_QueryPlayer(int srcPlayerID, int queryType, int queryID, int mapID, char *callName, char *cmd,WORD cmdLen, int RouteServerIndex) playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_EnterFB, 0, tagMapID, queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex()) return