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
DkÐ[c@s˜ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z defd„ƒYZdefd„ƒYZdefd„ƒYZdefd    „ƒYZd
efd „ƒYZd efd „ƒYZdefd„ƒYZdefd„ƒYZeƒd„Zd„Zd„Zd„Zd„Zd„ZdS(iÿÿÿÿNt SocialPlayerscBseeZd„Zed„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d„Z d    „Z RS(
cCs(||_||_i|_||_dS(N(tPlayerIDt classObjectt
SocialDictt    GroupType(tselfRRt    groupType((s.\\PlayerSocial.pyt__init__!s            cCsAtjd|j|j|fƒ||jkr@tjdƒtS|jƒ|j|<|j|}|j|_||_tjƒj    |ƒ}|sÎt
j ƒj |ƒ}|r¸|j ƒqát
j ƒj|ƒnt
j ƒj|ƒt||jƒ|sûtStjƒj    |jƒ}|stS|j||ƒ|j||ƒtS(NsSocialPlayers----Add %s-%s-%ssSocialPlayers----Add Öظ´(t    GameWorldtDebugLogRRRtFalseRtTagIDtGetPlayerManagertFindPlayerByIDt PyDataManagertGetPersonalSocialManagertGetSocialPlayert AddSocialReftAddPlayerInfoByViewCachet AddPlayerInfot AddBeSocialtTruet NotifyC_AddtSync_SocialPlayer(RttagIDtisNotifyt    newPlayert    tagPlayert
playerDatat    curPlayer((s.\\PlayerSocial.pytAdd(s0         cCs©tjd|j|j|fƒ||jkr@tjdƒdS|jj|ƒtjƒj|ƒt    ||jƒtj
ƒj |jƒ}|s•dS|j ||ƒdS(Ns SocialPlayers----Delete %s-%s-%ss SocialPlayers----Delete Òѱ»É¾³ý( RR    RRRtpopRRt DelPlayerInfot SubBeSocialR R t NotifyC_Del(RRR((s.\\PlayerSocial.pytDeletePs  cCs t|jƒS(N(tlenR(R((s.\\PlayerSocial.pytGetCountcscCs|jj|dƒS(N(RtgettNone(RR((s.\\PlayerSocial.pytFindfscCs?tjƒ}|jƒ||_|j|_tj||ƒdS(N(tChPyNetSendPackttagGCAddSocialPlayertClearRRt NetPackCommont SendFakePack(RRRtpack((s.\\PlayerSocial.pyRjs  
     cCs?tjƒ}|jƒ||_|j|_tj||ƒdS(N(R)ttagGCDelSocialPlayerR+RRR,R-(RRRR.((s.\\PlayerSocial.pyR"ss  
     cCs±tjƒ}|jƒ|j|_g|_|jƒ|_x`|jjƒD]O}tj    ƒ}|j
|_ t |dƒr€|j nd|_|jj|ƒqJWtj||ƒdS(Nt    Timestampi(R)ttagGCGroupPlayersR+RtPlayersR%tCountRtvaluesttagGCGroupPlayerR RthasattrR0t    SortValuetappendR,R-(RRR.tplayertinPack((s.\\PlayerSocial.pytSync_SocialsInfo}s 
       !cCsvtjƒ}|jƒd|_g|_tjƒ}|j|ƒjtj    ƒƒ}|jj
|ƒt j ||ƒdS(Ni( R)ttagGCSocialPlayersR+R3tPlayerRRRt GetPackStructttagGCSocialPlayerR8R,R-(RRRtsendPackt socialManagert
socialInfo((s.\\PlayerSocial.pyRs 
         cCsLg}x?|jD]4}tjƒj|ƒ}|s7qn|j|ƒqW|S(N(RRR R R8(RtonlinesRR9((s.\\PlayerSocial.pytGetOnlinePlayerss( t__name__t
__module__RRRR#R%R(RR"R;RRD(((s.\\PlayerSocial.pyR s     (                        
         tFriendscBs,eZd„Zd„Zd„Zd„ZRS(cCs&tt|ƒj|tjtjƒdS(N(tsuperRGRtPyGameDataStructttagDBPyPlayerFriendtChConfigtDef_SocialGroup_Friend(RR((s.\\PlayerSocial.pyR¬scCs6|j|ƒtjƒj|jƒ}|j|ƒdS(N(RRR R RtMapServer_SyncFriendInfo(RtfriendIDR((s.\\PlayerSocial.pyt    AddFriend±s cCs6|j|ƒtjƒj|jƒ}|j|ƒdS(N(R#RR R RRM(Rt delFriendIDR((s.\\PlayerSocial.pyt    DelFriend¸s cCsdS(N((RR((s.\\PlayerSocial.pyRM¿s(RERFRRORQRM(((s.\\PlayerSocial.pyRG«s            t FriendManagercBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs i|_dS(N(t PlayerFriends(R((s.\\PlayerSocial.pyRÓscCs®||jkr%t|ƒ|j|<n|j|}|j|ƒtjƒj||ƒ||jkrzt|ƒ|j|<n|j|}|j|ƒtjƒj||ƒdS(N(RSRGRORtGetEnemyManagertDelEnemy(Rt    friendAIDt    friendBIDtfriends((s.\\PlayerSocial.pyt AddFriendBoth×s    cCsZ|jj|dƒ}|r+|j|ƒn|jj|dƒ}|rV|j|ƒndS(N(RSR&R'R#(RRVRWt friendAStructt friendBStruct((s.\\PlayerSocial.pyt DelFriendBothês cCs|jj|dƒS(N(RSR&R'(RtplayerID((s.\\PlayerSocial.pyt
GetFriendsøscCs t|ƒ|j|<|j|ƒS(N(RGRSR^(RR]((s.\\PlayerSocial.pyt
AddFriendsüscCs…d}d}d}xK|jjƒD]:}x1|jjƒD] }|d7}||jƒ7}q8Wq"Wtjd|ƒtj||ƒ|S(NtiisSaveFriendData cnt :%s(RSR4Rt    getBufferRtLogtCommFunct
WriteDWORD(RtsavaDatatcntDatatcntRXtfriend((s.\\PlayerSocial.pyt GetSaveDatas
cCs×tj||ƒ\}}tjd|ƒi|_xžt|ƒD]}tjƒ}|jƒ||j    |||ƒ7}|j
|jkr¢t |j
ƒ|j|j
<n||j|j
j |j <t|j |j
ƒq?W|S(NsLoadFriendData cnt :%s(Rct    ReadDWORDRRbRStxrangeRIRJtcleartreadDataRRGRR R(RtdatastpostdataslenRgtit playerFriend((s.\\PlayerSocial.pytLoadPyGameDatas     
(    RERFRRYR\R^R_RiRs(((s.\\PlayerSocial.pyRRÒs                         t EnemyManagercBsPeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z    RS(cCs i|_dS(N(R2(R((s.\\PlayerSocial.pyR#scCs,ttjƒƒ}||jkr‡|j|}|j|ƒr¦||j|ƒ_tjƒj|ƒ}|r€|j|||ƒndSnt    |t
j t j ƒ|j|<|j|}|j|tƒr(||j|ƒ_tjƒj|ƒ}|r|j||ƒ|j|||ƒn|j|ƒndS(N(tintttimeR2R(t    timestampRR R tNotify_UpdateTagRRIttagPlayerEnemyRKtDef_SocialGroup_EnemyRR
Rt DelOldEnemy(RR]RRwt socialPlayerR((s.\\PlayerSocial.pytAddEnemy's(   cCsHtjƒ}|jƒ||_tj|_||_tj    ||ƒdS(N(
R)R*R+RRKRzRR7R,R-(RRRRwR.((s.\\PlayerSocial.pyRxDs  
         cCs0|jj|dƒ}|sdS|j|ƒdS(N(R2R&R'R#(RR]RR|((s.\\PlayerSocial.pyRUNsc Csó|jj|dƒ}|sdStjdƒ}|jƒ|}|dkrNdSg}xQ|jjƒD]@\}}tj    ƒj
|ƒ}|j ||j j |jgƒqdW|jdtƒx4t|ƒD]&}    |jƒ}
|j||
dƒqÅWdS(Nt EnemiesMaxCntitcmp(R2R&R't IpyGameDataPYt
GetFuncCfgR%RtitemsRRRR8t
playerInfot
OnlineTypeR0tsortt SortOldListRkRRU( RR]R|t enemiesMaxCnttdelcnttdelListttmpIDR9RRqtresult((s.\\PlayerSocial.pyR{Ws  # cCs|jj|dƒS(N(R2R&R'(RR]((s.\\PlayerSocial.pyt
GetEnemiessscCs…d}d}d}xK|jjƒD]:}x1|jjƒD] }|d7}||jƒ7}q8Wq"Wtjd|ƒtj||ƒ|S(NR`iis!!SaveEnemyData cnt :%s(R2R4RRaRRbRcRd(RReRfRgt socialPlayersR|((s.\\PlayerSocial.pyRiws
cCsãtj||ƒ\}}tjd|ƒi|_xªt|ƒD]œ}tjƒ}|jƒ||j    |||ƒ7}|j
|jkr®t |j
tjt j ƒ|j|j
<n||j|j
j|j<t|j|j
ƒq?W|S(Ns!!LoadEnemyData cnt :%s(RcRjRRbR2RkRIRyRlRmRRRKRzRR R(RRnRoRpRgRqt playerEnemy((s.\\PlayerSocial.pyRs„s     
(
RERFRR}RxRUR{RŒRiRs(((s.\\PlayerSocial.pyRt"s            
                     tContactsManagercBsbeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z RS(
cCs i|_dS(N(R2(R((s.\\PlayerSocial.pyRšscCs7||jkrtS|j|}|j|ƒs3tStS(N(R2R
R(R(RR]RR|((s.\\PlayerSocial.pyt FindContacts  cCsättjƒƒ}||jkrCt|tjtjƒ|j|<n|j|}t}|j    |ƒs|j
|tƒt }||j    |ƒ_ |j |ƒn||j    |ƒ_ tjƒj|ƒ}|rù|j|||ƒ|rù|j||ƒqùn||jkr*t|tjtjƒ|j|<n|j|}t}|j    |ƒs„|j
|tƒt }||j    |ƒ_ |j |ƒn||j    |ƒ_ tjƒj|ƒ}|rà|j|||ƒ|rà|j||ƒqàndS(N(RuRvR2RRIttagDBPyPlayerContactsRKtDef_SocialGroup_ContactsR
R(RRR0t DelOldContactRR R RxR(RR]RRwR|t notifySocialRR((s.\\PlayerSocial.pytAddContactsBoth¨sD    cCsHtjƒ}|jƒ||_tj|_||_tj    ||ƒdS(N(
R)R*R+RRKR’RR7R,R-(RRRRwR.((s.\\PlayerSocial.pyRxÛs  
         cCs0|jj|dƒ}|sdS|j|ƒdS(N(R2R&R'R#(RR]RR|((s.\\PlayerSocial.pyt
DelContactäscCs$|j||ƒ|j||ƒdS(N(R–(RR]R((s.\\PlayerSocial.pytDelContactBothîsc Csó|jj|dƒ}|sdStjdƒ}|jƒ|}|dkrNdSg}xQ|jjƒD]@\}}tj    ƒj
|ƒ}|j ||j j |jgƒqdW|jdtƒx4t|ƒD]&}    |jƒ}
|j||
dƒqÅWdS(NtContactsMaxCntiR(R2R&R'R€RR%RR‚RRRR8RƒR„R0R…R†RkRR–( RR]R|tcontactsMaxCntRˆR‰RŠR9RRqR‹((s.\\PlayerSocial.pyR“ôs  # cCs|jj|dƒS(N(R2R&R'(RR]((s.\\PlayerSocial.pyt GetContactsscCs…d}d}d}xK|jjƒD]:}x1|jjƒD] }|d7}||jƒ7}q8Wq"Wtjd|ƒtj||ƒ|S(NR`iis!!SaveContactsData cnt :%s(R2R4RRaRRbRcRd(RReRfRgRR|((s.\\PlayerSocial.pyRis
cCsãtj||ƒ\}}tjd|ƒi|_xªt|ƒD]œ}tjƒ}|jƒ||j    |||ƒ7}|j
|jkr®t |j
tjt j ƒ|j|j
<n||j|j
j|j<t|j|j
ƒq?W|S(Ns!!LoadContactsData cnt :%s(RcRjRRbR2RkRIR‘RlRmRRRKR’RR R(RRnRoRpRgRqR9((s.\\PlayerSocial.pyRs s     
( RERFRRR•RxR–R—R“RšRiRs(((s.\\PlayerSocial.pyR™s             3            
                 tBlacklistManagercBsJeZd„Zd„Zd„Zdd„Zd„Zd„Zd„Z    RS(cCs i|_dS(N(R2(R((s.\\PlayerSocial.pyR5scCs|jj|dƒs7t|tjtjƒ|j|<n|j|}|j|ƒt    j
ƒj ||ƒt    j ƒj ||ƒdS(N(R2R&R'RRIttagDBPyPlayerBlackRKtDef_SocialGroup_BlackRRtGetFriendManagerR\tGetContactsManagerR—(RR]RR|((s.\\PlayerSocial.pyt JoinBlacklist9s   cCs=|jj|dƒ}|sdStjdƒ|j|ƒdS(Nt DelBlacklist(R2R&R'RR    R#(RR]RR|((s.\\PlayerSocial.pyR¡Hs
 cCsˆ||jkrB|j|j|ƒrB|r>tj|dƒntS||jkr„|j|j|ƒr„|r€tj|dƒntStS(NtFriend_RemoveBlacklisttFriend_Blacklist(R2R(t PlayerControlt
NotifyCodeRR
(RR]RR((s.\\PlayerSocial.pytCheckBlacklistBothQs%%cCs|jj|dƒS(N(R2R&R'(RR]((s.\\PlayerSocial.pyt GetBlacklist`scCs…d}d}d}xK|jjƒD]:}x1|jjƒD] }|d7}||jƒ7}q8Wq"Wtjd|ƒtj||ƒ|S(NR`iis!!SaveBlacklistData cnt :%s(R2R4RRaRRbRcRd(RReRfRgRR|((s.\\PlayerSocial.pyRids
cCsãtj||ƒ\}}tjd|ƒi|_xªt|ƒD]œ}tjƒ}|jƒ||j    |||ƒ7}|j
|jkr®t |j
tjt j ƒ|j|j
<n||j|j
j|j<t|j|j
ƒq?W|S(Ns!!LoadBlacklistData cnt :%s(RcRjRRbR2RkRIRœRlRmRRRKRRR R(RRnRoRpRgRqR9((s.\\PlayerSocial.pyRsqs     
N(
RERFRR R¡R'R¦R§RiRs(((s.\\PlayerSocial.pyR›4s                          tSocialPlayerDatacBsGeZddd„Zd„Zd„Zdd„Zd„Zd„ZRS(cCs;tjƒ|_|r!||_n|r7|j|ƒndS(N(RIttagPersonalSocialRƒtUpdateByPlayer(Rt playerSocialR9((s.\\PlayerSocial.pyR†s  cCs…|jƒ|j_|jƒ|j_|jƒ|j_|jƒ|j_|j    ƒ|j_
d|j_ |jj sd|j_ ndS(Ni( t GetPlayerIDRƒRtGetNamet
PlayerNametGetJobtJobtGetLVtLVtGetOfficialRanktRealmLVR„tRefCount(RR((s.\\PlayerSocial.pyRªs  cCs^|jj|_|jj|_|jj|_|jj|_|jj|_|jj|_|S(N(RƒRR®R°R²R´R„(Rt
packStruct((s.\\PlayerSocial.pyR>œscCs9|jjd7_tjd|jj|jjfƒdS(NisAddSocialRef %s-%s(RƒRµRR    R(RR((s.\\PlayerSocial.pyR§s#cCs9|jjd8_tjd|jj|jjfƒdS(NisSubSocialRef %s-%s(RƒRµRR    R(R((s.\\PlayerSocial.pyt SubSocialRef­s#cCs
|jjS(N(RƒRµ(R((s.\\PlayerSocial.pyt GetRefCount²sN(    RERFR'RRªR>RR·R¸(((s.\\PlayerSocial.pyR¨…s 
              tSocialInfoManagercBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs i|_dS(N(t
SocialInfo(R((s.\\PlayerSocial.pyR·s    cCsP|jƒ}||jkr5td|ƒ|j|<dS|j|}|jƒdS(NR9(R¬RºR¨R(RRR]R|((s.\\PlayerSocial.pyR¼s   cCsýtjj|ƒ}tjƒ}|sj|jƒ||_d|_d|_d|_    d|_
t j |_ net|jƒƒ}|jƒ||_|d|_|d|_|d|_    |d|_
t j |_ t|ƒ|j|<|j|}|jƒdS(NR`itNameR°R²R´(tPlayerViewCachet ViewCacheMgrt    FindCacheRIR©RlRR®R°R²R´RKt Def_OfflineR„tevalt GetPropDataR¨RºR(RR]tcurCacheR«t    cacheDictR|((s.\\PlayerSocial.pyRÇs* 
                    
          cCsS||jkrdS|j|}|jƒ|jƒdkrO|jj|ƒndS(Ni(RºR·R¸R(Rt delPlayerIDR|((s.\\PlayerSocial.pyR äs  
cCs|jj|dƒS(N(RºR&R'(RR]((s.\\PlayerSocial.pyRïscCsnd}d}d}x4|jjƒD]#}|d7}||jjƒ7}q"Wtjd|ƒtj||ƒ|S(NR`iisSaveSocialData cnt :%s(RºR4RƒRaRRbRcRd(RReRfRgR|((s.\\PlayerSocial.pyRiôs
cCs’tj||ƒ\}}tjd|ƒi|_xYt|ƒD]K}tjƒ}|jƒ||j    |||ƒ7}t
|ƒ|j|j <q?W|S(NsLoadSocialData cnt :%s( RcRjRRbRºRkRIR©RlRmR¨R(RRnRoRpRgRqR«((s.\\PlayerSocial.pyRss     
(    RERFRRRR RRiRs(((s.\\PlayerSocial.pyR¹¶s                           cCsü|tjkrdS|tjkrCtjƒ}||_||_nW|tj    krstj
ƒ}||_||_ n'tj ƒ}||_||_ ||_x[tj|D]L}tjƒj|ƒ}|sÏq¨ntj|ƒräq¨ntj||ƒq¨WdS(N(t
PyGameDatatg_BeSocialListtIPY_PlayerDefinetCDBPlayerRefresh_PlayerNameR)ttagGCSocialNameRR»RKtDef_CDBPlayerRefresh_OnlinettagGCSocialOnlineR„ttagGCSocialRefreshTypet RefreshTypetValueRR R R¤tGetIsTJGR,R-(R]t
notifyTypetvaluetsetInfoR.RR9((s.\\PlayerSocial.pyt
Notify_Alls*                         cCsŸtjƒj|jƒƒ}|dkr+dS|tjkrI||j_n<|tj    krg||j_
n|tj kr…||j_ nt |jƒ||ƒdS(N(RRRtGetIDR'RÇtCDBPlayerRefresh_LVRƒR²tCDBPlayerRefresh_OfficialRankR´RÈR®RÓ(RRÐRÑR|((s.\\PlayerSocial.pytUpdateSocialInfo/s cCs˜|jƒ}tjƒj|ƒ}|r6|jjƒng}tjƒj|ƒ}|rf|jjƒng}tjƒj    |ƒ}|r–|jjƒng}tj
ƒj |ƒ}|rÆ|jjƒng}    t |ƒt |ƒBt |ƒBt |    ƒB}
t jƒ} | jƒg| _tjƒ} xN|
D]F} | j| ƒ}|sIq(n|jt jƒƒ}| jj|ƒq(Wt| jƒ| _tj|| ƒdS(N(RÔRRžR^RtkeysRTRŒRŸRštGetBlacklistManagerR§tsetR)R<R+R=RRR>R?R8R$R3R,R-(RR]RXtlist1tenemiestlist2tcontactstlist3t
blackliststlist4t    resultSetR@RARR|RB((s.\\PlayerSocial.pytSync_AllSocialsInfo@s. * 
      cCsj|tjkritj|<n|tj|krFdtj||<n tj||dtj||<dS(Ni(RÅRÆ(R]t tagPlayerID((s.\\PlayerSocial.pyRds
cCsw|tjkrdS|tj|kr*dStj||}|dtj||<|dkrstj|j|ƒndS(Ni(RÅRÆR(R]RätcurCount((s.\\PlayerSocial.pyR!ms cCs„|drdnd}|dr&dnd}||kr<dS||krLdS|d|dkrddS|d|dkr|dSdSdS(Niiiÿÿÿÿi((tinfo1tinfo2tresult1tresult2((s.\\PlayerSocial.pyR†}s  (RIRcRR)R,tChGameToMapPyPackRRÇRKR¤RvR€R¼RÅtobjectRRGRRRtRR›R¨R¹RÚRÓR×RãRR!R†(((s.\\PlayerSocial.pyt<module>s6              ‹'Pw›Q1[        $