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
145
146
147
148
149
150
151
152
153
154
155
156
157
    »[c@sÆddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZdad„Zd„Zddd„Zd„Zd„Zd„Zd    „Zd
„Zd „Zd „Zd „Zd„Zd„Zdd„Z dgd„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/de0fd „ƒYZ1d!„Z2d"„Z3d#„Z4d$„Z5d%„Z6d&„Z7dgd'„Z8d(„Z9d)„Z:e;d*„Z<d+„Z=dd,„Z>dd-„Z?d.„Z@d/„ZAd0„ZBd1„ZCd2„ZDd3„ZEd4„ZFdS(5iÿÿÿÿNicCsþg}d}t|ƒ}tj|ƒ}||krNtjd||fƒdStjd||fƒxq||D]e}x\|D]T}t|ƒ}t|ƒ}|dkr­q}nt|dƒtjd||fƒq}WqpWtj    ||ƒtjd|ƒdS(NtResetBossKilledCntVers,ÒѾ­ÖØÖùýboss±»»÷ɱ´ÎÊý!curVer=%s,maxVer=%ss*¿ªÊ¼ÖØÖÃboss±»»÷ɱ´ÎÊý!curVer=%s,maxVer=%sis/    ÖØÖÃboss±»»÷ɱ´ÎÊý: bossID=%s,Òѱ»É±´ÎÊý=%ss    ÖØÖóɹ¦: maxVer=%s(
tlentPlayerDBGSEventtGetDBGSTrig_ByKeyt    GameWorldtDebugLogtLogt__GetBossRecDataByIDt__GetKilledCntt__SetKilledCnttSetDBGSTrig_ByKey(t resetVerInfot
resetDBKeytmaxVertcurVertresetBossIDListtbossIDt bossPrizeRect    killedCnt((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt#CheckResetBossKilledCntOnServerInit@s&       cCsÅt|ƒdkrdS|d}|dkr0dS|d}|d}|d}t|ƒdkrj|dnt}t|ƒdkrŒ|dnd}t|ƒ}t|ƒ}    tjd||||||    fƒ|rë|     rëtjdƒdStt    j    ƒƒ}
t
|ƒ} t | |
||ƒ|rYt | ƒ} t | | dƒtjd    || fƒn|r–t|dƒt||
ƒtd|gƒt|ƒntjd
dƒ} || krÁt|ƒndS( Niiiiiisk»÷ɱÊÀ½çboss DoGameWorldBossOnKilled...bossID=%s,hurtValue=%s,mapID=%s,tick=%s,isMapNeedShunt=%s,isAlive=%ssPÐèÒª·ÖÁ÷µÄµØÍ¼boss±»»÷ɱ£¬µ«Êǵ±Ç°bossÈ«¾Ö״̬ΪËÀÍö״̬£¬²»ÔÙ¸üÐÂboss»÷ɱÐÅÏ¢£¡s5    addBossKillCnt: killPlayerName=%s,befKilledCnt=%stFairyGrabBossID(RtTruetNonetIsMapNeedBossShuntt __GetIsAliveRRRtintttimeRt__SetKillRecordRR    t __SetIsAlivetSetBossRefreshTimet Sync_BossInfotSendMapServerBossKilledCntt IpyGameDataPYtGetFuncEvalCfgtOnFamilyKillHorsePetRobBoss(tmsgListttickRtkillPlayerNamet    hurtValuet isAddKillCnttisNotifytmapIDtisMapNeedShunttisAlivet
killedTimeRt befKilledCntthorsePetRobBossIDList((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytDoGameWorldBossOnKilled`sB
 
 
 
""               cs”xKtjD]@}||dkr
|r3||d<n|rF||d<nPq
q
Wttjƒƒ‰tjjd‡fd†ƒtjdtjƒdS(Niiitkeycstd|dˆ|dƒS(Niii(tmax(tasd(tcurTime(sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt<lambda>˜ss'    PyGameData.g_sortBOSSRefreshList=%s(t
PyGameDatatg_sortBOSSRefreshListRRtsortRR(RR,t refreshTimetbossInfo((R3sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt__UpdateBossRefreshLists  c    CsXt|ƒdkrdS|d}|d}t|ƒdkrF|dnd}t|ƒdkrh|dnd}tjd|||||fƒ|dkrždStjdƒ}||k}t|ƒ}|sÞt|||ƒn|rút||||ƒn|t    |ƒkr,t
||ƒt d|gƒn|rT|t j krTt j j|ƒndS(Niiiis?ÊÀ½çboss״̬±ä¸ü: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%st    BossShunt(RRRRR R!RtDoRemoveBossShuntPlayerByNPCIDt__UpdBossLineStateRRRR5tg_familyOwnerBossInfotpop(    R#R$RR+R)tlineIDtbossShuntMapIDListtisBossShuntMapR*((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnGameWorldBossStateChangeœs,
 
""     cCs™|dkrdStjj|iƒ}|j|ƒ|kr>dS|||<|tj|<|s_dS|tjkrtjj|ƒntjdtjƒdS(Ns    ·ÖÁ÷BossÏß·״̬±ä¸ü: %s(RR5tg_bossShuntLineStatetgettg_bossShuntStateChangeBosstappendRR(RR@R+R*tbossLineStateDict((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR=¾s 
 cCs”tƒ}d}xEt|jƒƒD]1}|j|ƒ}|jƒ|kr"|}Pq"q"W|dkrtjd|ƒ|jƒ}|j    |ƒn|S(Ns)ÊÀ½çboss id=%s Î´ÕÒµ½ÒÑÓмǼ£¡Ìí¼ÓмǼ(
t__GetBossPrizeRecDataRtrangetCounttAtt    GetValue1RRtAddRect    SetValue1(RtrecTypeListDatatbossRectindextuniversalRecData((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRÔs      cCs|j|ƒdS(N(t    SetValue3(trecR((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR    és cCs
|jƒS(N(t    GetValue3(RU((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRìscCs!tjƒjtj||ƒdS(N(Rt GetGameWorldtSetDicttChConfigtDef_WorldKey_BossIsAlive(RR+((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRòscCstjƒjtj|ƒS(N(RRWt GetDictByKeyRYRZ(R((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRùscCsªt|ƒ}|r!|jdƒng}|rJ|jd|||fƒn|jd||fƒt|ƒdkr}|d=ndj|ƒ}|j|ƒ|j|ƒdS(Ns|s%s_%s_%ss%s_%sii(t__GetKillRecordtsplitRGRtjoint SetStrValue3t    SetValue2(RUR,t
playerNameR&t
killRecordtkillRecordList((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRs 
  cCs
|jƒS(N(t GetStrValue3(RU((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR\scCs(tj}tjƒ}|j|ƒ}|S(N(t ShareDefinet!Def_UniversalGameRecType_BossInfoRtGetUniversalRecMgrt GetTypeList(trecTypetuniversalRecMgrRP((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRIs     cCsdS(N((R((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR"sc Csãttjƒƒ}tjƒ}tƒ}g|_xït|jƒƒD]Û}|j|ƒ}|j    ƒ}|spqCn|rˆ||krˆqCntj
ƒ}||_ t |j ƒ|_ t|ƒ|_t|jƒ|_|jƒ}    t|j ƒ}
td|
||    ƒ|_|
|_|jj|ƒqCWt|jƒ|_|s¼tjƒ} x–td| jƒƒD]Y} | j| ƒ}|dks\|jƒ rq\ntj |ƒr¥q\nt!j"||ƒq\Wn#tj |ƒrÏdSt!j"||ƒdS(Ni(#RRtChPyNetSendPackttagGCGameWorldBossInfoRIt BossInfoListRJRKRLRMttagBossInfoObjtBossIDRtIsAliveR\t
KillRecordRt    RecordLent    GetValue2t__GetBossRefreshTimeR1t RefreshSecondt    RefreshCDRGtBossCntRtGetPlayerManagertGetActivePlayerCounttGetActivePlayerAtRt    GetInitOKt PlayerControltGetIsTJGt NetPackCommont SendFakePack( t    curPlayertsyncBOSSIDListR3R9RPRRRSRt bossInfoObjR,R8t playerManagerti((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR:sF                     c sÅtjtj|ƒsdSttjƒƒ‰tˆ|ƒtˆƒtj    sëx~t
t j ƒj ƒƒD]d}t j ƒj|ƒ}|jƒ}t|ƒ}|jƒ}t|ƒ}tj    j|||gƒqdWtj    jd‡fd†ƒng}x·tj    D]¬}|\}}}t|ƒ}    |    r(qûntd|ˆ|ƒ}
|
dkrOPntj|ƒt|dƒ|j|ƒtjtj|dƒtjd|||
fƒqûW|rÁtd|ƒndS(NR0cstd|dˆ|dƒS(Niii(R1(R2(R3(sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR4|siis>    Í¨ÖªMapServerÖØÉú: bossID=%s,killedTime=%s,rebornSecond=%s( RtSetWorldDictKeyRYtTYPE_WorldBossProcessTickRRtDoCheckWorldBossShuntInfotBossRebornWorldNotifyR5R6txrangeR tIPY_DatatGetBOSSInfoCounttGetBOSSInfoByIndextGetNPCIDRRsRtRGR7RR1t PlayerGeTuitGeTuiBossRebornRtSendMapServerMsgExRet'Def_Notify_WorldKey_GameWorldBossRebornRRR( R$R„tipyDataRRR,R8RR9R+t rebornSecond((R3sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytDoCheckWorldBossRebornms@ 
                 cCstjtj|ƒsdSttjƒƒ}xktjD]`}|\}}}t|ƒ}|rbq5nt    d|||ƒ}|s…q5nt
j ||ƒq5WdS(Ni( RR…RYtTYPE_WorldBossGeTuiTickRRR5R6RR1RŽt    GeTuiBoss(R$R3R9RR,R8R+R“((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytProcessBossGeTuiœs cCsit|ƒ}|jƒ}t|ƒ}ttjƒƒ}td|||ƒ}t|ƒ}|ph|dkS(Ni(RRsRtRRR1R(RRR,R8R3R“R+((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytGetBossIsAliveOrCanReborn°s    cCs•xŽttjƒjƒƒD]t}tjƒj|ƒ}|jƒ}t|ƒ}|sXqn|jƒ}|tj    krt
j t j |dƒqqWdS(Ni(R‰R RŠR‹RŒRRtGetMapIDRYtDef_FBMapID_SealDemonRRReR‘(R„R’RR+R)((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt__SendMapServerAliveBoss½s   cCs|t|ƒtjƒj|ƒtdƒr6t|ƒntjƒ}|jt    j
t j ƒ}|rnt |ƒnt|ƒdS(Ni(Rt PyDataManagertGetBossAttentionManagertNotifyBossAttentionInfoRtSync_BossShuntLineInfoRRWR[RYt!Def_WorldKey_OperationActionStateRetOperationActionName_BossReborntSync_BossRebornPointtSync_DogzNPCRefreshTime(R€t    gameWorldtstate((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt OnPlayerLoginÌs
 
cCs¨tƒtƒtdƒrItjtjtjƒtjtj    tj
ƒnt j ddƒ}t |ƒd}tjtj||ƒtjr¤tjtjtjƒndS(NitDogzFBRefreshCfgi(RR›RRtSendCommMapServerMsgRet#Def_Notify_WorldKey_BossShuntPlayerR5tg_bossShuntPlayerInfot&Def_Notify_WorldKey_BossShuntLineStateRDR t
GetFuncCfgt__GetBossOnlineHeroCntRt%Def_Notify_WorldKey_BossOnlineHeroCntt"g_familyKillHorsePetRobBossCntDictt0Def_Notify_WorldKey_FamilyKillHorsePetRobBossCnt(Rt    onlineCnt((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnMapServerInitOKÜs     c    Cs#t|ƒdkrdS|\}}}}}}}tjd||||||fƒtjdƒ}    |    smdStj}
tjƒ} | j|
ƒ} |    | j    ƒkrñt
t j ƒƒ} tjddƒddd}| j dƒ}|j ƒ}| ||kr| jdƒqñg}xWt| j    ƒƒD]C}| j |ƒ}|j ƒ}|jƒ}|j|||gƒq'W|jd|| gƒt|d    d
„d tƒ}|d }|jd    d „ƒ|rñ|dddkrñ| j|ddƒqñntjd|
|||||g|d|gƒdS(NisZ»÷ɱBossµôÂäºÃÎïÆ·: mapID=%s,npcID=%s,killerName=%s,itemID=%s, userData=%s, weightValue=%st DropRecordNumiii<iiÿÿÿÿR0cSs|dS(Ni((R2((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR4 streverseicSs|dS(Ni((R2((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR4st(RRRR R¬Ret-Def_UniversalGameRecType_BossDropGoodItemInfoRgRhRKRRRLtGetTimetDeleteR‰t    GetValue5RGtsortedRR7tPlayerUniversalGameRectMapServer_UniversalGameRecR(R#R$tplayerIDt
killerNameR)tnpcIDtitemIDtuserDatat weightValuet maxRecordCntRiRjt
recordListR3t    rangeTimet firstRecDatat    fsaveTimetdropRecordListR„trecDatatsaveTimetcurWeightValuet
commonList((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnKillBossDropGoodItemïsB            
cCsUtjtj|ƒsdStjdƒi}xlttjƒjƒƒD]R}tjƒj    |ƒ}|j
ƒ}|j ƒ}d|krE|j ƒ||<qEqEWi}tj ƒ}xÇt|jƒƒD]³}|j|ƒ}|dksÀ|jƒ rôqÀntj|ƒr    qÀn|jƒ}    x[|jƒD]M\}
} | d|    koM| dknr"|j|
dƒd||
<q"q"WqÀWtjd|ƒtjƒ} x| jƒD]q} | tj}    x[|jƒD]M\}
} | d|    koì| dknrÁ|j|
dƒd||
<qÁqÁWq¡Wtjd|ƒx'|jƒD]\}
}t|
|ƒq4WdS(NsÊÀ½çbossÔÚÏßÈËÊýͳ¼ÆR±iis#    bossµÈ¼¶ÐÅÏ¢¶ÔÓ¦±¾·þÔÚÏßÈËÊý %ss)    bossµÈ¼¶ÐÅÏ¢¶ÔÓ¦±¾·þ¼°¿ç·þÔÚÏßÈËÊý %s(RR…RYtTYPE_WorldBossOnlineCntTickRR‰R RŠR‹RŒRtGetRefreshTimet
GetLVLimitRxRyRzRR{R|R}tGetLVtitemsREt MergePlayertGetMergeServerOnlinePlayerInfotvaluestDef_MSOLPlayer_LVtSetBossOnlineHeroCnt(R$tbossRebornDictR„R’RtrefreshTimeStrt playerCntDictRƒt
findPlayertfindLVtbossidtlvLimittmergeServerOnlinePlayerDictt
playerInfot curOnlineCnt((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytCalcGameWorldBossOnlineCntsB      $%  $%cCstjd|ƒ}|sdSt|ƒ\}}| sYt||ƒd||jƒkrh|}d}n1||jƒkr‰|}d}n|}|d7}|d|}tjtj    ||ƒ|tj
ddƒkrðt j tj ||ƒnt jd||||fƒdS(    s ÉèÖüÆËãbossË¢ÐÂʱ¼äÓõÄÔÚÏßÈËÊýtBOSSInfoNidiiR§isiÉèÖüÆËãbossË¢ÐÂʱ¼äÓõÄÔÚÏßÈËÊý Change:bossid=%s, beforeOnlineCnt = %s, newOnlieCnt = %s, unUpdataCnt=%s(R tGetIpyGameDataR­tabst
GetDiffPertGetNoUpdataCntRR
Ret*Def_Notify_WorldKey_GameWorldBossOnlineCntR¬RRR®R(RÝtonlieCntR’tbeforeOnlineCntt unUpdataCntt newOnlieCnttnewNum((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR×Hs$+        
cCs5tjtj|ƒ}|d|d}}||fS(s »ñÈ¡¼ÆËãbossË¢ÐÂʱ¼äÓõÄÔÚÏßÈËÊýid(RRReRè(RÝt    beforeNumRéRë((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR­asc        Cs&tjd|ƒ}|sdSt|ƒd}|jƒ}tjtjƒ}|dkr½|r½t|ƒdkr½tgtj    j
ƒD]0}|d|ko¦|dknrd^qƒ}ntj dƒ}t |j ƒƒ}tjtj||ƒt|||ƒtjd||||fƒdS(sÉèÖÃbossË¢ÐÂʱ¼äRãNiiitFirstDayActivePlayerCntsJ    ÉèÖÃbossË¢ÐÂʱ¼ä BossID=%s,onlineCnt=%s,yesterdayCnt=%s,refreshTime=%s(R RäR­RÐRRt Def_ServerDayRR5tg_yesterdayPlayerLVDictRÕR¬tevalRÏR
tDef_BossRefreshTimeR:RR(    RÝR,R’R±tLVLimitt openServerDaytlvt yesterdayCntR8((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRgs $OcCstjtj|ƒS(s»ñÈ¡bossË¢ÐÂʱ¼ä(RRRó(RÝ((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRtzscCsJtjƒj|ƒ}|j}|j}tjƒj|jƒ||ƒdS(N(    RRxtGetPlayerByIndexRotIsAddRœRtUpdateBossAttentiont GetPlayerID(RRt
clientDataR$R€RtisAdd((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnAttentionBoss‡s
        tBossAttentionManagercBs>eZd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs i|_dS(N(tbossAttentionDict(tself((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt__init__•s    cCs|jS(N(R(R((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytGetBossAttentionDict™scCs||jkr•|j|}t|jƒ}|r>|||<n|j|dƒ|sq|jƒ|jj|ƒqót|ƒ|_t|jƒ|_n^|sŸdStj    ƒ}|jƒ||_
ti||6ƒ|_t|jƒ|_||j|<t j d|||fƒdS(Nis/¸üÐÂBOSS¹Ø×¢¼Ç¼ playerid=%s,bossid=%s,isAdd=%s( RRòt
RecordDataR?tcleartstrRtDataLentPyGameDataStructttagDBPyBossAttentiontPlayerIDRR(RtplayeridRÝRýtbossAttentionDatat
recordDictt bossAttention((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRúœs*  
 
     cCsÊtj|ƒrdS|jj|jƒƒ}|s5dSt|jƒ}tjƒ}g|_    xH|j
ƒD]:\}}tj ƒ}||_ ||_ |j    j|ƒqfWt|j    ƒ|_tj||ƒdS(N(R|R}RRERûRòRRkttagGCBossAttentionInfotBossListRÒttagGCBossAttentionRotAddStateRGRRwR~R(RR€t attentionDatat bttentionDicttpackDataRÝtaddStateR9((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRž¹s               cCskd}d}d}x1|jjƒD] }|d7}||jƒ7}q"Wtjd|ƒtj||ƒ|S(NRµiisSaveBossAttention cnt :%s(RRÕt    getBufferRRtCommFunct
WriteDWORD(RtsavaDatatcntDatatcntR((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt GetSaveDataÎs
cCsºtj||ƒ\}}tjd|ƒi|_xt|ƒD]s}tjƒ}|jƒ||j    |||ƒ7}|j
}t t |j ƒƒtkr¨||j|<q?|jƒq?W|S(NsLoadBossAttention cnt :%s(Rt    ReadDWORDRRRR‰RR    RtreadDataR
ttypeRòRtlist(RtdatastpostdataslenRt_tdataR½((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytLoadPyGameDataÚs     
    (t__name__t
__module__RRRúRžRR'(((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRÿ“s                      cCs[tjddƒ}tjtjƒd}||krW|s>tStjdƒ}||kStS(NR;ii(R R¬RRRðRR!tFalse(R)tbossShuntMaxServerDayRõRA((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRîs 
cCsB|\}}}||f}|tj|<tjtjtjƒdS(N(R5RªRR¨ReR©(R#R$R)R@tshuntPlayerDictR0((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytMapServer_WorldBossShuntInfoùs
  c Csâtjs dS|jƒ}t}xtjjƒD]Œ\}}|\}}xq|jƒD]c\}}|\}    }
} ||
krqTn||d<t}tjd|||    ||
| |fƒqTWq/W|rÞtjt    j
tjƒndS(NisbBoss·ÖÁ÷Íæ¼Ò¶ÓÎé±ä¸ü:mapID=%s,lineID=%s,npcID=%s,playerID=%s,teamID=%s,relatedTick=%s,updTeamID=%s( R5Rªt    GetTeamIDR*RÒRRRR¨ReR©( R€t    updTeamIDt isNeedSyncMapR0R,R)R@R½t    shuntInfoR¿tteamIDt relatedTick((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnPlayerTeamChanges"       
    %c    Csá||f}|tjkrdStj|}g}xM|jƒD]?\}}|d}||kr?|j|ƒ|j|ƒq?q?W|s›tjj|ƒn|rÝtjtjtjƒtj    d||||tjfƒndS(NisP    Çå³ýbossÏß··ÖÁ÷Íæ¼Ò: mapID=%s,lineID=%s,bossID=%s,removePlayerIDList=%s, %s(
R5RªRÒR?RGRR¨ReR©R(    R)R@RR0R,tremovePlayerIDListR½R1R¿((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR<s"  
      c CsOtjrK|ddkrKtjtjtjƒtdtjƒgt_n|ddkr_dSd}t    }x¾tj
j ƒD]­\}}|\}}xy|j ƒD]k\}}    |    \}
} } | s || |krØq nt }|j |ƒtjd|||
|| fƒq W|s{tj
j |ƒq{q{W|rKtjtjtj
ƒndS(Niii
i ¿sFBoss·ÖÁ÷ÒÆ³ý³¬Ê±Íæ¼Ò:mapID=%s,lineID=%s,npcID=%s,playerID=%s,teamID=%s(R5RFRR¨ReR«RDRŸRR*RªRÒRR?RR©( R3R$t    ProceTimeR0R0R,R)R@R½R1R¿R2R3((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR‡-s,   $c
Cstjs dS|jƒ}|jƒ}|jƒ}|jƒ}t}xŸtjjƒD]Ž\}}|\}}    ||kr‰||    kr‰qSn||krSt}|j    |ƒt
j d||    ||fƒ|sátjj    |ƒqáqSqSW|rt
j t jtjƒndS(NsJÇÐÍ¼ÒÆ³ýÆäËûµØÍ¼Ïß·boss·ÖÁ÷Íæ¼Ò: mapID=%s,lineID=%s,playerID=%s,teamID=%s(R5RªR.RûR™tGetFBIDR*RÒRR?RRR¨ReR©(
R€R2R½t playerMapIDt playerLineIDR0R0R,R)R@((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnPlayerChangeMapJs(           c Cs§|stjjƒ}ntjƒ}|jƒg|_x¯|D]§}tjj|iƒ}g}g}x4|jƒD]&\}}|j    |ƒ|j    |ƒqrWtj
ƒ}    ||    _ ||    _ ||    _ t|    j ƒ|    _|jj    |    ƒq>Wt|jƒ|_|s€tjƒ}
x“t|
jƒƒD]Y} |
j| ƒ}|dks |jƒ rTq ntj|ƒriq ntj||ƒq Wn#tj|ƒr“dStj||ƒdS(N(R5RDtkeysRkttagGCBossShuntLineStateInfotCleartBossLineStateInfoRERÒRGttagGCBossShuntLineStateRot
LineIDListt    StateListRt    LineCountRKRRxR‰RyRzRR{R|R}R~R( R€RtbossShuntLineInfoRRHt
lineIDListt    stateListR@R¥t bossLineStateRƒR„((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRŸfs@ 
                    cs™tjƒ}|jtjtjƒ}|s<tjdƒdS|jtjƒ}|s`t    ƒ}n|swtjdƒdSt
j t
j ƒ}|||}t
j t
j |ƒ|||kr*t
j t
jƒ}t
j t
j|dƒtjddiƒ}g}xH|jƒD]:\}    }
|
tjtjgkr5q n|t|    ƒ7}q Wtjd|ƒg} xttjƒD]n\} } | \}}}||krqpnt|ƒ}|rµqpnd}|||gtj| <| j|ƒqpWttjƒƒ‰tjjd‡fd†ƒtjd    | ƒˆandtjd
ƒ}xR|D]J}||d }||kok|knr@tjdd |gƒPq@q@Wt ƒdS( Ns Ôö¼Óboss¸´»îµã »î¶¯Î´¿ªÆôs" Ôö¼Óboss¸´»îµã Ã»ÓÐ×ܵãÊý£¡£¡£¡£¡itKillBossCntLimitscanRebornBossIDList=%siR0cstd|dˆ|dƒS(Niii(R1(R2(R3(sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR4ºss$ boss¸´»î»î¶¯ ÖØÉúboss bossIDList=%stBossRebornNotifyidt BossFHPoint1(!RRWR[RYR ReR¡Rt Def_WorldKey_BossRebornNeedPointtSetBossRebornNeedPointRRtDef_BossRebornPointR
tDef_BossRebornCntR R!RÒtDef_Boss_Func_WorldtDef_Boss_Func_HomeR!t    enumerateR5R6RRGRRR7tg_lastBossRebornTimeR|t WorldNotifyR¢(taddPointR¤R¥t
totalPointtcurPointtupdPointt    rebornCnttkillBossCntLimitDicttcanRebornBossIDListtbidlisttbkeyt
bossIDListR„R9RR,R8R+tneedNotifyPointPerListtpointPertnPoint((R3sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytAddBossRebornPoints^           cCs·tjtjdƒtjtjdƒtjdƒ}tgtjj    ƒD]}||krHd^qHƒ}t
tj ddƒƒ}tjtj |ƒt jd|ƒtƒtƒdS(NitServerActivePlayerCntiis;    boss¸´»î»î¶¯¿ªÆôʱÉèÖÃ×òÈÕ»îÔ¾ÈËÊýyesterdayPlayerCnt=%s(RR
RLRMR R¬RR5RñRÕRòtGetFuncCompileCfgtDef_BRServerPlayerCntRRRKR¢(RÞRötyesterdayPlayerCnttserverActivePlayerCnt((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytResetBossRebornPointÊs4c    Csùtjdƒ}tjddƒ}tjtjƒ}t|ƒd}x`t|ƒD]R\}}|dkrndn ||d}||ko“|knrP|}PqPqPW|t|ƒkrÂ|dn||}tjƒj    t
j |ƒ|rõt ƒn|S(NtBossRebornTotalPointiiiiÿÿÿÿ( R R!RRRcRRPRRWRXRYRJR¢(    tisSyncttotalPointListt playerCntListtBRServerPlayerCntRRR„RtpreCntRT((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRKÛs &
cCsats
dStjddƒ}|t|dkr:dadS|t|kr]tjddƒndS(NRHiiÿÿÿÿit BossFHPoint2(RQR R!R|RR(R3tnotifySecondList((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyRˆîscCstjƒ}tjtjƒ|_tjƒjt    j
ƒ}|sKt ƒ}n||_ tjtj ƒ|_tjƒ}|sîx“t|jƒƒD]Y}|j|ƒ}|dksŽ|jƒ rÂqŽntj|ƒr×qŽntj||ƒqŽWn#tj|ƒrdStj||ƒdS(N(RkttagGCBossRebornPointRRRLtPointRRWR[RYRJRKt
TotalPointRMt    RebornCntRxR‰RyRzRR{R|R}R~R(R€RRTRƒR„((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR¢ús(       c Csftj}|sdSttjƒƒ}tjƒ}g|_xk|jƒD]]\}}|\}}td|||ƒ}tj    ƒ}    ||    _
||    _ |jj |    ƒqGWt |jƒ|_|s?tjƒ}
x“t|
jƒƒD]Y} |
j| ƒ}|dksß|jƒ rqßntj|ƒr(qßntj||ƒqßWn#tj|ƒrRdStj||ƒdS(Ni(R5tg_dogzNPCRefreshTimeDictRRRkttagGCDogzNPCRefreshTimetInfoListRÒR1ttagDogzTimeInfoObjtNPCIDRuRGRtCntRRxR‰RyRzRR{R|R}R~R( R€trefreshTimeDictR3RtnpcidttimeinfotlastRefreshTimet nextNeedTimet
remainTimettimeInfoRƒR„((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR£s6                    cCsŠtjƒj|ƒ}|s0tjd|ƒdS|jƒ}tjj|dƒdtj|<tjt    j
tjƒtj dtjƒdS(Ns!ÕÒ²»µ½¸ÃÏÉÃËÃû: killFamilyName=%siisÆï³èÕù¶áÏÉÃË»÷ɱBossÊýͳ¼Æ: %s( RtGetFamilyManagertFindFamilyByNametErrLogtGetIDR5R¯RERReR°R(tkillFamilyNametfamilytfamilyID((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyR"4s  cCs,ttjddƒƒ}tjtjƒ}tjtj    ƒ}t
|||ƒ}d}t j ƒ}x‘t |jƒƒD]}}|j|ƒ}|dkst|jƒ r¨qtntj|ƒr½qtn|jƒsÏqtn|jƒ|krçqtn|d7}qtWt jtj|ƒt jd|||||fƒdS(NRiiis]ͬ²½Æï³èÕù¶áÓÐЧ²ÎÓëÈËÊý: playerCount=%s,minLV=%s,funcLimitLV=%s,curWorldLV=%s,diffWorldLV=%s(RR R¬R|tGetFuncLimitLVRetGameFuncID_HorsePetRobBossRRt"Def_Notify_WorldKey_WorldAverageLvR1RRxR‰RyRzRR{R}t GetFamilyIDRÑRt.Def_Notify_WorldKey_HorsePetRobBossPlayerCountR(t diffWorldLVt funcLimitLVt
curWorldLVtminLVt playerCountRƒR„RÛ((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt(SyncMapServer_HorsePetRobBossPlayerCountBs*      cCs#it_tjtjtjƒdS(N(R5R¯RRReR°(tisOpen((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnHorsePetRobBossActionChangeas    c
CsGtjdt|ƒƒt|tƒ r=t|ƒdkr=dS|\}}|tj|<tjdtjƒtj    ddƒ}x!|D]}|tjkrƒdSqƒWtj    ddƒ}g}x[tjj
ƒD]J}xA|j
ƒD]3}x*|D]"}    |    |krè|j |    ƒqèqèWqÛWqÈWtjd|ƒt j d||ƒit_dS(NsÆï³èÕù¶ábossÉËÑªÍæ¼Òͬ²½: %sisÉËÑªÍæ¼Ò»ã×Ü: %sRis+½áËãÆï³èÕù¶á²ÎÓë½±Íæ¼Ò: joinPlayerIDList=%stFairyGrabBossJoin(RRRt
isinstanceR!RR5t!g_horsePetRobBossHurtPlayerIDInfoR R!RÕRGtPlayerCompensationt SendMailByKey(
tmsgInfoRtfamilyHurtPlayerIDListDictR.t
needBossIDtjoinAwardItemListtjoinPlayerIDListtfamilyHurtPlayerIDDictt playerIDListR½((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt#MapServer_HorsePetRobBossHurtPlayerks*"         cCs't|tƒsdStjj|ƒdS(N(R•tdictR5R>tupdate(R™((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytMapServer_FamilyOwnerBossInfo‰sc Cs tjƒj|ƒ}tjƒ}g|_x¸tjjƒD]§\}}|\}}}    }
tj    ƒ}||_
|t j |_ |t j |_|t j |_|t j |_|    |_|
|_t|jƒ|_|jj|ƒq:Wt|jƒ|_tj||ƒdS(N(RRxRøRkttagGCAllFamilyBossHurtInfoListt NPCHurtInfoR5R>RÒttagGCFamilyBossHurtInfoRwRetDef_PerPointValuetCurHPtCurHPExtMaxHPtMaxHPExtFamilyIDt
FamilyNameRtNameLenRGtNPCCountR~R( RRRüR$R€thurtPackR¿thurtInfotcurHPtmaxHPt firstFamilyIDtfirstFamilyName((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnQueryAllFamilyBossHurtšs$                  cCs®tjƒj|ƒ}|jƒ}|j}|jƒ}|dkrFdS|j|ƒ}|dkredS|jƒt    j
krŽtj d|ƒdSt j |jƒd|gƒdS(NsÆÕͨ³ÉÔ±ÎÞ·¨ÕÙ¼¯£¡tFairyGrabBossHelp(RRxRøRûRwt    GetFamilyRt
FindMembert GetFamilyLVtIPY_GameServert    fmlMemberRR|t FamilyNotifyRƒ(RRRüR$R€R½R¿t    curFamilyt    curMember((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pytOnCallupFamilyMemberToBoss¶s        (GRReRYR~RkRR»R—R RÓRRœR|RR5RŽR»RRQRR/R:RCR=RR    RRRRR\RIRRRR”R—R˜R›R¦R²RÍRâR×R­RRtRþtobjectRÿRR-R4R<R‡R:RŸR`RfR*RKRˆR¢R£R"R‘R“R R£R¶RÀ(((sP.\ServerPython\CoreServerGroup\GameServer\Script\GameWorldLogic\GameWorldBoss.pyt<module> s†                           /     "                                     3    /                         .    +                      [                         )    ;           "