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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
­6‡gc@s
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZdZdZdZddd„ƒYZddd„ƒYZed    „Zd
„Zd „Zd „Zd „Z ed„Z!d„Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d„Z)d„Z*d„Z+d„Z,d„Z-d„Z.dd„Z0d„Z1dS( iÿÿÿÿNiiitCrossFuncLineInfocBseZd„Zd„ZRS(cCs(d|_d|_d|_d|_dS(Ni(t    realMapIDt    copyMapIDtnewFuncLineNumtNonetfuncLineDataCache(tself((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyt__init__6s
                cCsd|_d|_dS(Ni(RR(R((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOnCopyMapClose=s        (t__name__t
__module__RR(((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR4s    tCrossCopyMapInfocBs/eZd„Zd„Zed„Zd„ZRS(cCsj||_||_||_d|_d|_d|_tj|_i|_    i|_
i|_ g|_ dS(Ni( tzoneIDt    funcMapIDt
funcLineIDRRRtIPY_PlayerDefinet
fbosClosedt    openStatet fbPlayerDicttwaitPlayerDicttofflinePlayerDicttenterPlayerIDList(RR R R((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyREs                                         c
Cs˜xL|jjƒD];\}}|\}}||dkr|jj|ƒqqWt|jƒt|jƒ}}||}    |r”|    t|jƒ7}    n|    S(Ni`ê(RtitemstpoptlenRR(
RtincludeOfflinettickt waitPlayerIDt
playerInfot_t requestTickt fbPlayerCounttwaitPlayerCountttotalPlayerCount((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytGetCopyMapPlayerCountSs 
c    Csì||jks||jkr"tS|jtjkr8tS|sBtStjƒ}|j    ||j
ƒ}|smtS|j |ƒ}|s†tSx_|j ƒD]Q}||jks·||jkr“t jd|j
||j|jf|ƒtSq“WtS(NsFÇ¿ÖÆºÍ¶ÓÓÑÔÚÒ»ÌõÏß·!  funcMapID=%s,memID=%s,realMapID=%s,copyMapID=%s(RRtTrueRRtfbosOpentFalset PyDataManagertGetDBPyFuncTeamManagertGetPlayerTeamIDR t GetFuncTeamtGetMemberIDListt    GameWorldtDebugLogRR(RtplayerIDt    checkTeamt funcTeamMgrtteamIDtfuncTeamtmemID((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytIsMustCopyMapPlayeres&      cCs0| s|j|ƒrtS|j||ƒ|kS(N(R3R#R"(RR-RtcopyMapPlayerMaxR((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOnRequestEnterCrossCopyMap|s(R    R
RR"R#R3R5(((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR Cs         cCsJt|ƒ}tjd||ƒ}| rF|rFtjd|dƒ}n|S(NtFBLinei(tGetRecordMapIDt IpyGameDataPYtGetIpyGameDataNotLog(tmapIDtlineIDt isDefaultLinet fbLineIpyData((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytGetFBLineIpyData‚s
  c Cs&tjdƒ}|sõi}tjƒ}xyt|jƒƒD]e}|j|ƒ}|jƒ}|jƒ}|j|gƒ}||kr:|j    |ƒ|||<q:q:Wx:|j
ƒD],}t ||ƒdkr°|j |ƒq°q°Wtj d|ƒ}nx*|jƒD]\}    }
||
kr|    SqW|S(Nt DataMapIDDicti(R8t GetConfigExtIPY_DatatxrangetGetFBLineCounttGetFBLineByIndext GetDataMapIDtGetMapIDtgettappendtkeysRRt SetConfigExR( R:R?t
dMapIDDictt
ipyDataMgrtitipyDatatdMapIDtmIDt
dMapIDListt    dataMapIDt    mapIDList((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR7Žs(      c' Csi|d}|d}|d}|d}|tjkr;dStj||ƒ}|sWdS|jƒ}d\}    }
t} t} d} |tjkrÐ|d}t    j
||ƒsPt j d|||f|ƒdSn€|tj tjgkrëne|tjkrLtj|||ƒ}|sdSt} |\}}    }
|rPd}t} t} qPndStjdd    ƒ}|j|ddgƒ\}}|dkrÈx9tjjƒD]%\}}|j|ƒrœ|} PqœqœWn| dkr(|tjkr(|r%tjd
d    ƒ}tj||||||| |ƒ} q%q(n| dkrê| rêtjdd ƒ}||krå||}x€t|ƒD]o\}}|d|koš|d knro|}|d    |d }}t jd|||||fƒPqoqoWn|}tjdd ƒ}||krÀ||}t j ƒ}|    dks7|
dkrXt j d|||f|ƒdSd|j!|j"|j#|    |
f}t j$|ƒ}||} | j%|kr±|}t} qÀ|}t} nt&|||||||| || ƒ
} n| s$t'j(||dƒt j d|||f|ƒdS| j)| j*| j+}!}"}#|#t,j-krt'j(||dƒt j d||||!|"|#f|ƒdS||g| j.|<t jd|!|"|#f|ƒ|#t,j/kr| j0}|g}$|$||!|!|"|g}%t1j2t3j4|%|gƒni}&|&j5|ƒ|&j5i|d6|!d6|"d6|d6|#d6ƒt6j7d|&ƒ| S(NtPlayerIDtMapIDt
FuncLineIDtLVtBossIDsAµ±Ç°¿ç·þÑýÍõËÀÍö״̬£¬²»¿É½øÈë! funcLineID=%s,zoneID=%s,bossID=%sitCrossDynamicLineMapitCrossBattlefieldCalliiisn½øÈë¿ç·þµØÍ¼µÈ¼¶×Ô¶¯ÊÊÅ书ÄÜÏß·ID: mapID=%s,playerLV=%s,funcLineID=%s,copyMapPlayerMin=%s,copyMapPlayerMax=%ss2¸±±¾¿ªÆôʱ¼äδ֪! mapID=%s,funcLineID=%s,zoneID=%ss%d-%02d-%02d %02d:%02d:00t CrossFBFulls8ÕÒ²»µ½¿É·ÖÁ÷µÄ¸±±¾Ïß·! mapID=%s,funcLineID=%s,zoneID=%st CrossFBCloses]·ÖÁ÷µÄ¸±±¾Ïß·¹Ø±ÕÖÐ! mapID=%s,funcLineID=%s,zoneID=%s,realMapID=%s,copyMapID=%s,openState=%ss>    ·ÖÅä½øÈë¿ç·þ³¡¾°: realMapID=%s, copyMapID=%s, openState=%sR:RRtrealFuncLineIDRtCrossFBRequest(NN((8tChConfigtDef_FBMapID_CrossChampionshiptCrossRealmPlayert"GetCrossZoneIpyDataByServerGroupIDt    GetZoneIDRtDynamicShuntType_FillR%tDef_FBMapID_CrossDemonKingt    CrossBosstGetCrossBossIsAliveOrCanRebornR+tErrLogtDef_FBMapID_CrossGrasslandLingtDef_FBMapID_CrossGrasslandXiantDef_FBMapID_CrossBattlefieldtCrossBattlefieldtGetCrossBattlefieldOpenTimetDynamicShuntType_EquallytDynamicShuntType_NoR#R8tGetFuncEvalCfgRGt
PyGameDatatg_crossDynamicLineCopyMapInfoRR3t
GetFuncCfgtGetCallPlayerCopymapObjt    enumerateR,t GetServerTimetyeartmonthtdaytChangeStrToDatetimetsecondst__GetCrossDynamicLineInfot PlayerControltNotifyCodeCrossRRRRtfbosWaitForCloseRR$Rt CrossRealmMsgtSendMsgToClientServert ShareDefinetCrossServerMsg_EnterFBRettupdatetDataRecordPackt SendEventPack('t serverGroupIDtmsgDataRR-R:RtplayerLVt zoneIpyDataR topenHourt
openMinutetdynamicShuntTypeRt tagCopyMapObjtbossIDt openTimeInfot isCallBattletdynamicLineMaxPlayerCountDicttcopyMapPlayerMinR4Rt
copyMapObjtdynamicLineLVRangeDictt lvRangeListt lvFuncLineIDtlvRangetshuntPlayerMaxtminCountTimeDicttplayerMinTimeSettcurTimetopenDateTimeStrt openDateTimetpassTimeRRRt playerIDListtretInfotdataDict((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytClientServerMsg_EnterFB§s¾
 
 
 
 
    - 
$      
 "
                     0c
    Csm|\}}}}}}xN|D]F}tjƒj|ƒ}    |    sFqntj|    ||||d|ƒqWdS(NR;(R+tGetPlayerManagertFindPlayerByIDRatSendCrossRealmReg(
RˆRR RRR:RRRR-t    curPlayer((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRƒ.s #c
 
Cs‚||f}
tjj|iƒ} | j|
gƒ} ||k} tjd||||||||    f|ƒt}d\}}d\}}xQt| dƒD]@\}}|j|j    }}|sÄq™n||f}|tj
krtj d||||fƒq™ntj
|}|j }|t jkrJ|s™tj||dƒdSq™n| s`|j|ƒrd|S|j||ƒ}|dksŽ||kr|}|}n|dksµ||krÄ|}|}n||kr™t}q™q™Wd}|    tkrø|}n|    tkr |}ndSd}|r&|}n|sa| }t||||ƒ}| ra| ra|}qan|skdS||g|j|<|S(    s»ñÈ¡¿ç·þ·ÖÇø¶ÔÓ¦¶¯Ì¬·ÖÅäµÄ¸±±¾µØÍ¼ÐéÄâÏß·ÐÅÏ¢, ÓÉÓÚÐèÒªÖ§³Ö¶àµØÍ¼·ÖÁ÷£¬ËùÒÔÖ±½ÓÓÉGameServer¹ÜÀí·ÖÅä
            Ã¿¸ö¹¦ÄÜÏß·֧³Ö°´ÈËÊý·ÖÁ÷£¬³¬¹ý×î´óÈËÊýºó¿É¿ªÆôÒ»ÌõÏàͬ¹¦ÄÜÏß·µÄÐéÄâÏß·½øÐзÖÁ÷£¬ËùÒÔͬһ·ÖÇøÍ¬Ò»µØÍ¼µÄ¹¦ÄÜÏß·ID¿ÉÄܶÔÓ¦¶àÌõÐéÄâÏß·
        ·ÖÁ÷·½Ê½£º
            DynamicShuntType_Fill = 1    # ÌîÂúʽ·ÖÁ÷£¬°´´æÔÚµÄÏß·ÈËÊý¶àµÄÓÅÏÈÌî³ä£¬¶¼Âúºó¿ªÆôÐÂÏß·
            DynamicShuntType_Equally = 2 # ¾ù̯ʽ·ÖÁ÷£¬°´´æÔÚµÄÏß·ÈËÊýÉÙµÄÓÅÏÈÌî³ä£¬¶¼Âúºó¿ªÆôÐÂÏß·
        ·ÖÁ÷¹æÔò:
                    Ê±¼ä½ö¾ö¶¨·ÖÁ÷ÈËÊý£¬²»Ó°Ïì³£¹æ·ÖÅäÂß¼­
        1. ÓÅÏÈ·ÖÅäµ½ÈËÊýСÓÚ·ÖÁ÷ÈËÊýµÄ³¡´Î
        2. ³¬¹ý·ÖÁ÷ÈËÊýµÄ³¡´ÎÒÀ´ÎÍùÈËÊýÉٵij¡´Î·ÖÅä
        3. µ±µ±Ç°ÒÑ¿ª·ÅµÄ³¡´Î¶¼´ïµ½ÈËÊý·ÖÁ÷ÈËÊý£¬Ôò¿ªÆôг¡´Î£¬Ã»ÓпÕÏеij¡£¬ÔòÍùδ´ïµ½ÈËÊýÉÏÏ޵ij¡´ÎÒÀ´Î·ÖÅ䣬ֱµ½´ïµ½ËùÓг¡´ÎÉÏÏÞ
    
            ¹ØÓÚ shuntPlayerMax µÄÑ¡Ôñ£º ¿É¸ù¾Ý¸±±¾¹æÔòÖÆ¶¨
            ÈçǰX·ÖÖÓÄÚ¿ÉÉ趨һ¸öСÓÚ  copyMapPlayerMax µÄ·ÖÁ÷ÈËÊýÖµ¿ìËÙÆÌÂú¸÷·ÖÁ÷³¡´Î
            µ±´óÓÚX·ÖÖÓºóÔò¿ÉÉèÖàshuntPlayerMax = copyMapPlayerMax ½øÐб¥ºÍ·ÖÁ÷
            
            µ±ËùÓзÖÁ÷³¡´Î´ïµ½  shuntPlayerMax ºó£¬¿É³¢ÊÔ¿ªÆôзÖÁ÷Ïß·£¬½øÐзÖÁ÷
         shuntPlayerMax < copyMapPlayerMax µÄÇé¿ö£¬Èç¹ûûÓа취¿ªÆôзÖÁ÷Ïß·£¬Ôò¿É¼ÌÐøÇ¿ÖÆ¸ù¾Ý·ÖÁ÷ÀàÐÍ·ÖÅäÏß·£¬Ö»ÒªÎ´´ïµ½ copyMapPlayerMax ÈËÊý£¬»¹ÊÇ¿ÉÒÔ½øÈ븱±¾µÄ
        shuntPlayerMax >= copyMapPlayerMax µÄÇé¿ö£¬Èç¹ûûÓа취¿ªÆôзÖÁ÷Ïß·£¬Ôò±êʶ¸±±¾ËùÓÐÏß·ÒÑ´ïµ½±¥ºÍ״̬£¬²»ÄÜÔÙ½øÈ븱±¾ÁË
            
            µ±  shuntPlayerMax Îª 0 Ê±£¬´ï±ê²»ÏÞÖÆÈËÊýÉÏÏÞ£¬¼°²»·ÖÁ÷£¬¶¼ÔÚͬһÌõÏß·£¬Ò»°ã¿ç·þ¸±±¾²»½¨ÒéÉèÖÃΪ0£¬ÈËÊýÌ«¶à£¬²»ºÏÀí
            
    @param shuntPlayerMax: ·ÖÁ÷×î´óÈËÊýÏÞÖÆ
    @param copyMapPlayerMax: Êµ¼Ê×î´ó¿ÉÈÝÄɵÄÈËÊýÏÞÖÆ£¬Ò»°ã´óÓÚµÈÓÚ·ÖÁ÷ÈËÊýÏÞÖÆ
    @param includeOffline: ÊÇ·ñ°üº¬±¾Ïß·ÀëÏßÍæ¼Ò
    @param dynamicShuntType: ·ÖÁ÷ÀàÐÍ£¬¿ÉÑ¡Ôñ  ÌîÂúʽ·ÖÁ÷  »ò ¾ù̯ʽ·ÖÁ÷
    s»ñÈ¡¶¯Ì¬·ÖÁ÷Ïß·: serverGroupID=%s,mapID=%s,funcLineID=%s,zoneID=%s,shuntPlayerMax=%s,copyMapPlayerMax=%s,includeOffline=%s,dynamicShuntType=%siisYÒѾ­·ÖÅäµÄÐéÄâÏß·²»´æÔÚ»º´æ¶ÔÓ¦¹ØÏµÀzoneID=%s,funcLineID=%s,realMapID=%s,copyMapID=%sR\N(ii(NN(Rqtg_crossDynamicLineInfoRGR+R,R%RRuRRRrRhRRRR}R~R3R"R#RnRdt__OpenNewFuncLineR(R-R‡R:RR R™R4RRRt zoneLineKeyt zoneLineDicttfuncLineObjListtisPlayerFullMaxtcanUseShuntLinetminPlayerCounttmaxPlayerCountt minCopyMapObjt maxCopyMapObjRt funcLineObjRRtkeyR”Rt playerCounttdynamicShuntCopyMapt shuntCopyMaptisLog((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR|:sl      #                                     c    Cs    |tjkritj|<ntj|}||f}||krQg||<n||}tjddƒ}|j||gƒ}d    \}    }
tjj|ddƒ} xvt| ƒD]h} xU|D]M} | tjj| dƒkrèqÁn| | ftjkrÁ| | }    }
PqÁqÁW|    r´Pq´q´W|    sP|rLtj    d||||fƒndS|    |
} } d}x!|D]}|j sj|}PqjqjW|dkr¬t ƒ}|j |ƒnd}g|D]}|j^q¹}x7tdt|ƒdƒD]}||krè|}PqèqèWtjd||fƒ| |_ | |_||_t|||ƒ}| |_ | |_||_| | f}|tj|<td|||fƒ}tjd|||| | |fƒ|j}t| ||gƒ}tjƒjddd| d|t|ƒƒ|S(
NRYiis^ûÓпÕÓàµÄÐéÄâÏß·£¬ÎÞ·¨¶¯Ì¬¿ªÆô¿ç·þ¸±±¾! mapID=%s,zoneID=%s,funcLineID=%s,dynamicMapIDList=%ss$    lineNumList=%s,newFuncLineNum=%ss
%d%03d%02dso    Ð¿ª·ÖÇø¶¯Ì¬¸±±¾¹¦ÄÜÏß·: zoneID=%s,funcLineID=%s,newFuncLineNum=%s,realMapID=%s,copyMapID=%s,propertyID=%stOpenFB(ii(RqR¨R8RpRGtg_crossMapCopyMapCountDictRBRrR+RhRRRRHRRR,RR tinttLogRtstrR¤tMapServer_QueryPlayer(R:R RR¸R«RªR¬tdynamicLineMapDicttdynamicMapIDListt    openMapIDt openCopyMapIDtmaxCopyMapCountRRtnewFuncLineObjR³RtlineObjt lineNumListtnumR”R´t
propertyIDRtmsgInfo((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR©¨sr    
                                                      +c    CsRt|ƒ}tjƒjddd|d|t|ƒƒtjd||fƒdS(NitOpenFBExs(SendMapOpenFBEx: realMapID=%s,msgInfo=%s(R½R+R¤R¾RR¼(RtcopyPropertyListRÉ((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytSendMapOpenFBExós +c
CsÚtjd||||fƒx¶|D]®}|rÂd}||f}tjj|iƒ}|j|gƒ}x!|D]}    |    jrp|    }PqpqpW|rÂtjd||||    j|    jfƒq$qÂnt    |||ƒq$WdS(NsO    ÏµÍ³¿ªÆô¿ç·þ¶¯Ì¬Ïß·: zoneID=%s, mapID=%s, funcLineIDList=%s, checkExist=%sslÒѾ­´æÔÚ¿ª·ÅÖеÄÏß·£¬²»Öظ´¿ªÆô¶¯Ì¬¸±±¾Ïß·! mapID=%s, funcLineID=%s, zoneID=%s, realMapID=%s, copyMapID=%s(
R+R¼RRqR¨RGRRhRR©(
R R:tfuncLineIDListt
checkExistRt fincLineObjRªR«R¬R³((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOpenCrossDynamicLineBySysüs"               cCsstjj|iƒ}xW|jƒD]I\}}x:|D]2}|j|kr5|j|kr5|d}|Sq5Wq"WdS(Ni(RqR¨RGRRR(R:RRR«R´R¬R³R ((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytGetCrossDynamicLineZoneIDs 
 cCs»|d \}}}}|tjkrB|d}t|||ƒnu|tjkrat||ƒnV|tjkrƒt|||ƒn4||f}|tjkr·tj|}||_    ndS(Nii(
RRtOnCrossDynamicLineWaitForCloseRtOnCrossDynamicLineCloseR$tOnCrossDynamicLineOpenRqRrR(tmsgListR:RRtstateRR´R”((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOnCrossDynamicLineStateChange s
   c Cs||f}|tjkrdStj|}tj|_|j}i}xW|jjƒD]F\}}|d}    |    |kr†g||    <n||    }
|
j|ƒqWWt    |ƒ} t
j d| ||||fƒxK|jƒD]=\}    }
|
| ||||g} t j tj| |    gƒqÚWdS(Nis}¶¯Ì¬·ÖÅäÐéÄâÏß·Æô¶¯³É¹¦£¬Í¨Öª×Ó·þµÈ´ýÍæ¼Ò¿É½øÈë: recordMapID=%s,mapID=%s,realMapID=%s,copyMapID=%s,serverPlayerIDListDict=%s(RqRrRR$RRRRRHR7R+R¼R€RR‚Rƒ( R:RRR´R”RtserverPlayerIDListDictR-RR‡R t recordMapIDR¡((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRÔ1s(       
 
     c Csøt|ƒ}tjd||||fƒtjj|iƒ}x||jƒD]n\}}x_|D]W}|j|kr^|j|kr^||_    |\}}    tjd|||    fƒPq^q^WqKW||f}|tj
krôtj
|}
t j |
_ ndS(NsP¶¯Ì¬·ÖÅäÐéÄâÏß·µÈ´ý¹Ø±Õ mapID=%s,realMapID=%s,copyMapID=%s,funcLineDataCache=%ssF    ·ÖÇø¶ÔÓ¦¹¦ÄÜÏß·ÐéÄâ·ÖÏߵȴý¹Ø±Õ: zoneID=%s,mapID=%s,funcLineID=%s(R7R+R¼RqR¨RGRRRRRrRRR( RRRR:R«R´R¬R³R RR”((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRÒOs          cCspt|ƒ}tjd|||fƒtjj|iƒ}x–|jƒD]ˆ\}}xy|D]q}|j|kr[|j|kr[|j    ƒ|\}}tjd|||fƒ|j
sÈ|j |ƒnPq[q[WqHW||f}tj j |dƒ}    |    sÿdSd}
|    j}|    j}|
g} t|||| ƒx6|    jjƒD]%\} } tjtj| | gƒqCWdS(Ns7¶¯Ì¬·ÖÅäÐéÄâÏß·¹Ø±Õ dataMapID=%s,mapID=%s,copyMapID=%ssE    ·ÖÇø¶ÔÓ¦¹¦ÄÜÏß·ÐéÄâ·ÖÏ߹رÕ: zoneID=%s,dataMapID%s,funcLineID=%si(R7R+R¼RqR¨RGRRRRRtremoveRrRRR Rt*SyncClientServerCrossFBFuncLinePlayerCountRR€RR‚tCrossServerMsg_ExitCrossServer(R:RRRR«R´R¬R³R RR”RµtplayerCountInfoR-R‡((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRÓfs0  
                   cCsß|\}}t|ƒ}tjd|||fƒ|tj|<tjj|iƒ}xG|jƒD]9\}}x*|D]"}|j|krt|j    ƒqtqtWqaWx:tj
j ƒD])}|d|kr®tj
j |ƒq®q®WdS(Ns>¶¯Ì¬·ÖÅäÐéÄâÏß·µØÍ¼ÖØÖàmapID=%s,realMapID=%s,copyMapCount=%si( R7R+R¼RqRºR¨RGRRRRrRIR(RÕRt copyMapCountR:R«R´R¬R³((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOnCrossDynamicMapReset‰s    c Csö|jƒ|jƒ}}||f}|tjkr8dStj|}|jƒ}tj|ƒ}|jj|dƒ|j
j|dƒ||j |<||j krµ|j j |ƒnt|j ƒ}|j}|j}    |g}
t|||    |
ƒdS(N(t GetRealMapIDtGetFBIDRqRrt GetPlayerIDR}tGetPlayerServerGroupIDRRRRRRRHRR RRÛ( R§R:RR´R”R-R‡RµR RRÝ((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytPlayerLoginLoadCrossMapOKžs$                cCspt|ƒ}|tjkrdStj||ƒ}|s;dS|jƒ}|||g}tjtj    ||ƒdS(N(
R7R_t%Def_NeedCountFBFuncLinePlayerCrossMapRatGetCrossZoneIpyDataByZoneIDtGetServerGroupIDListR€RR‚tCrossServerMsg_FBPlayerCount(R R:RRÝRŠtserverGroupIDList((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRÛ¼s  cCs©|jƒ|jƒ}}||f}|tjkr8dStj|}|jƒ}|jj|dƒ|jj|dƒt    j
|ƒ}|r¥t    j |ƒ|j |<ndS(N( RàRáRqRrRâRRRRR}t GetCrossMapIDRãR(R§R:RR´R”R-t
crossMapID((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pytOnPlayerDisconnectCrossServerÊs   cCsI|\}}}|tjkr.itj|<ntj|}|||<dS(N(Rqt g_crossFBFuncLinePlayerCountInfo(RˆR:RRÝtfbLinePlayerInfoDict((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyRèãs  
c
Cs~|jƒ}tjd||f|ƒtjƒ}yt|ƒ}Wn%tk
ri}tjd|ƒdSX| sƒt|ƒdkr˜tjd|ƒdS|d}|d}    t|ƒdkrÈ|dnd}
t    ||    ƒ} | sé|n    | j
ƒ} tj | ƒ} | s.tjd|| f|jƒƒdSt |
t ƒr |
jdd    ƒd
krœtj|
ƒ|j|jƒtjd| ||t|ƒ|jƒƒndS| jƒtjkr=|tjkrtjd dƒ}|rtj|jƒd tƒdkrtj|d |gƒdSqntj |tj!||    |ƒdS|tj"krl|d}t#j$|ƒsCdSn×|tj%kr‘t&j'|ƒsCdSn²|tj(krÌ|j)ƒt*j+krCtj|dƒdSnw|tj,krt-j.|    ƒsîdSt/j0t/j1ƒrCdSn<|tj2krCt3j4ƒs&dSt/j0t/j5|    ƒrCdSn|j|jƒtjd|||t|ƒ|jƒƒdS(Ns+EnterFBLine()...queryCallName=%s,sendCMD=%ssEnterFBLine() sendCMD=%s errorisEnterFBLine() sendCMD=%s error!iis,Ä¿±ê¸±±¾µØÍ¼²»´æÔÚ!tagMapID=%s,sceneMapID=%stmsgTypett MirrorBattletLoveFBt
includeTJGtOnlyTwoMemTeamCanEntert TheEmperor1(6RâR+R¼R¤tevalt    ExceptionRhRRR>RFtGetMapt
isinstancetdictRGtPlayerPackDatatOnMGReuestPlayerPackDataR¾R_tqueryType_EnterFBtGetRouteServerIndext GetMapFBTypetfbtTeamtDef_FBMapID_LoveR8Rst
PlayerTeamtCheckTeamOnLineCounttGetTeamR%R}t
NotifyCodetOnEnterFBTeamAsktTeamFBAskType_EntertWorldBossFBMapIDListt GameWorldBosstGetBossIsAliveOrCanReborntDef_FBMapID_FamilyWartGameWorldFamilyWart!CheckPlayerCanEnterFamilyWarFBMaptDef_FBMapID_FamilyInvadet GetFamilyIDRqtg_swrhJoinRecordtDef_FBMapID_AllFamilyBosstPlayerFamilyBosstIsInAllFamilyBosstPlayerDBGSEventtGetDBGSTrig_ByKeytDef_AllFamilyBossTimetDef_FBMapID_HorsePetBosstPlayerHorsePetBosstIsInHorsePetBosstDef_HorsePetBossTime(R§t queryCallNametsendCMDRR-t playerManagertmapInfotettagMapIDt    tagLineIDt extendValue1R=t
sceneMapIDtgameMaptonlyDoubleTeamR((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyt EnterFBLineôsv  
 
"  !
 
 cCstjtj||ƒdS(N(R€RR‚tCrossServerMsg_EnterVSRoomRet(t
vsRoomDictRé((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyt"Send_CrossServerMsg_EnterVSRoomRetDsc
Cstjƒ}tjd|ƒ|}xf|jƒD]X\}}tjd||fƒx2|jƒD]$\}}d|kr®|d}||kr®tjd||fƒq`q®ntjƒj|ƒ}    |    sàtjd|ƒq`ntj|    ƒrtjd|ƒq`nd|krq`n|d}
t|
ƒdkr:q`n|
\} } } }}}tj    |    |t
ƒt j |    | | | |||ƒq`Wq0WdS(    Ns7=== ¿ç·þPK¶ÔÕ½·¿¼äÇëÇó½øÈë½á¹û  === curServerGroupID=%ss    roomID=%s,playerDict=%sR‡s9        ²»ÊDZ¾·þÍæ¼Ò£¬²»´¦Àí!playerID=%s,serverGroupID=%ss        Íæ¼Ò²»ÔÚÏß, playerID=%ss        Íæ¼ÒÍÑ»úÖÐ, playerID=%st
regMapInfoi( R+tGetServerGroupIDR,RR¤R¥R}tGetIsTJGRt SetVsRoomIdR#RaR¦(RˆRtcurServerGroupIDR(troomIDt
playerDictR-RR‡tplayerR*t registerMapR:RRRtposXtposY((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyR'Ms6  
      
'(((2R    RRR R}RqR8RRR+R_RRlRatCrossChampionshipRûR…R€R&R‚RfttimeRoRdRnRR R#R>R7R£RƒR|R©RÌRÐRÑR×RÔRÒRÓRßRäRÛRìRèR&RR)R'(((sSE:\SnxxServerCode\ServerPython\CoreServerGroup\GameServer\Script\Player\PlayerFB.pyt<module>s^                      ?         ‡         n K                
                #                        P