xdh
2019-01-28 c060aabfb4621e897f7b69d6e537fc3ccf59d860
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/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
    
    #·âħ̳¸±±¾ÅжÏÀïÃæµÄ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
        
    # 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