#!/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 PlayerHorsePetBoss
|
import GameWorldFamilyWar
|
import PlayerControl
|
import PyGameData
|
import IpyGameDataPY
|
import PlayerDBGSEvent
|
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
|
|
#·âħ̳¸±±¾ÅжÏÀïÃæµÄBOSSÊÇ·ñµ½ÁËË¢ÐÂʱ¼ä
|
if tagMapID in ChConfig.WorldBossFBMapIDList:
|
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
|
#¶àÏÉÃËBOSS ÊÇ·ñÒѽáÊø
|
elif tagMapID == ChConfig.Def_FBMapID_AllFamilyBoss:
|
if not PlayerFamilyBoss.IsInAllFamilyBoss(tagLineID):
|
#»î¶¯Î´¿ªÆô
|
return
|
if PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_AllFamilyBossTime):
|
#BOSSÒѱ»»÷ɱ
|
return
|
#Æï³èBOSS ÊÇ·ñÒѽáÊø
|
elif tagMapID == ChConfig.Def_FBMapID_HorsePetBoss:
|
if not PlayerHorsePetBoss.IsInHorsePetBoss():
|
#»î¶¯Î´¿ªÆô
|
return
|
if PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_HorsePetBossTime % tagLineID):
|
#BOSSÒѱ»»÷ɱ
|
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
|