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
³ic@s¥ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZd„Zd„Zd„Zdd„Zd„Zgdd    d
„Zd „Zddd    d „Zddd    d    d    d    d „Zd„Zd„Zd„Zd„Zed    d„Zd„Zd„Z d„Z!dd„Z"d„Z#d„Z$d„Z%dS(iÿÿÿÿNcCst|ƒt|ƒdS(N(tSync_PlayerServerMailtSync_PersonalMail(t    curPlayer((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt OnPlayerLogin#s
 
cCs*ttjƒƒ}t|ƒt|ƒdS(N(tintttimetDelTimeoutServerMailtDelTimeoutPersonalMail(tcurTime((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pytOnDayEx(s
 
cCsžtjƒ}|jƒ}x|D]w}|j|ƒ}|s@qntj|jƒƒ}tj||ƒd}|jƒ}||kr‰qnt    |dƒqWdS(NitTimeout(
t    DBDataMgrt
GetMailMgrtGetServerMailGuidst GetServerMailt    GameWorldtChangeTimeStrToNumt GetCreateTimet GetDiff_Dayt GetLimitDayst DelServerMail(RtmailMgrtserverMailGuidstguidtmailObjt
createTimetpassDayst    limitDays((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR.s     tc    CsÊtjd|ƒtjƒ}|j|ƒ}tj|d|ƒ|sJdStjƒ}tit    j
|6ƒ}xW|j ƒD]I\}}|t    j
kršqyn|j |ƒ}|ryt j||ƒqyqyWdS(Nsɾ³ýÈ«·þÓʼþ: %stDelete(RtLogR R RtDataRecordPackt DR_ServerMailtGetPlayerManagert__packMailStateChanget ShareDefinet MailState_DeltitemstFindPlayerByIDt NetPackCommont SendFakePack(    RtdelEventRtplayerStateDictt    playerMgrt
clientPacktplayerIDt    mailStateR((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRAs  c Cs tjƒ}|jƒ}xí|jƒD]ß\}}i}x“|jƒD]…\}}tj|jƒƒ}tj||ƒd}    |jƒ}
|    |
kr™qDn|j    ||ƒt
j ||dƒt j ||<qDW|sÙq%ntjƒj|ƒ} | r%t| |ƒq%q%WdS(NiR
(R R tGetAllPersonalMailDictR%RRRRRtDelPersonalMailRt
DR_MailDelR#R$R!R&tSync_PlayerMailState( RRtpersonalMailDictR-tmailDicttnotifyGUIDStateRRRRRR((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRRs&    iic Csì|dkr„tjƒs3tjd||fƒdSi|d6|d6|d6|d6}tj|ƒ}tjtj||g|ƒdS|s–tj}nd|}dt    j
g|D]}    t |    ƒ^q°d    t ƒ}
t |||
||ƒdS(
Nis8·Ç¿ç·þ·þÎñÆ÷²»ÄÜÏòÆäËû·þÎñÆ÷·¢Ë͸öÈËÓʼþ! %s,playerID=%st mailTypeKeytitemListt    paramListRs    <T>%s</T>s%st ensure_ascii(Rt IsCrossServertErrLogtGetMainServerIDtCrossMsgtSendToClientServerR#tC2S_SendPlayerMailtDefaultLackSpaceMailTypetjsontdumpststrtFalsetSendMail( R6R-R7R8Rt
toServerIDtdataMsgt mainServerIDttitletpttext((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt SendMailByKeyrs  " 
2cCsU|d}|d}|d}|d}tj|ƒs;dSt|||||ƒdS(NR6R7R8R(RtGetDBPlayerAccIDByIDRL(RGR-R6R7R8R((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR?†s
 
 
 
c
Cs°|dkrg}nt|tƒrRg|jƒD]\}}||g^q1}ntjƒ}tjddƒ}    |j|ƒ}
|
|    krù|j    |ƒ} | j
dd„ƒt d|    dƒ} t } d}i}xí|| krÁ| rÁ| rÁ| j dƒ}|s    qÕn|jƒ}|jƒ}|tjksN|tjkrg|j|ƒrgt} |dkrgPqgn|d7}tjd|||| fƒ|j||ƒtj||dƒtj||<qÕW|rùtjƒj|ƒ}|röt||ƒqöqùn|j||||||ƒ}|jƒ}|jƒ}i|d    6|d
6|d 6|d 6|d 6t |ƒd6}tj!|||ƒtjƒj|ƒ}|r¬t"||jƒgƒndS(Nt PersonalMailitkeycSs|jƒ |jƒfS(N(t GetMailStateR(tm((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt<lambda>œsi
is<ϵͳ×Ô¶¯É¾³ýÓʼþ: playerID=%s,guid=%s,mailState=%s,isStop=%stMaxCountLimiitt
CreateTimetTitletTextt    LimitDaystItemListt ItemListLen(#tNonet
isinstancetdictR%R R t IpyGameDataPYt
GetFuncCfgtGetPersonalMailCounttGetPersonalMailstsorttmaxRDtpoptGetGUIDRPR#tMailState_UnReadtMailState_ReadtGetMailItemCounttTrueRtDebugLogR0RR1R$R!R&R2tAddPersonalMailRtlent DR_MailSendR(R-RIRKR7RtmailTypetitemIDt    itemCountRtmailMaxtmailCnttmailListt    oneDelCnttisStoptdelCntR5RRR.RRTtGUIDtaddDict((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyREsV     .    - 
  c    Cs2|d
krg}nt|tƒrRg|jƒD]\}    }
|    |
g^q1}ntjƒ} | j||||||ƒ} | s†| S| jƒ} | j|ƒ| j    |ƒ| j
|ƒ|sÅdnd}i|d6|d6|d6|d6|d6|d6|d    6}t j | ||ƒ|s.t | jƒƒn| S( sw·¢ËÍÈ«·þÓʼþ
    @param guid: ¿É´«Èë¿Õ£¬Ôòϵͳ×Ô¶¯Éú³Éguid
    @param itemList: ÔªËØÖ§³Ö×Öµä{itemID:itemCount, ...} »òÁбí [itemID, itemCount, ¿ÉÑ¡ÊÇ·ñÅÄÆ·, ÎïÆ·UserData]
    @param limitLV: ÏÞÖÆ¿ÉÁìµÄ×îµÍµÈ¼¶
    @param limitLVType: µÈ¼¶´ïµ½ºóÊÇ·ñ¿ÉÁ죬ĬÈϲ»¿É
    @param checkState: ÊÇ·ñÐèÒªÉóºË£¬Ä¬Èϲ»ÐèÒª
    @return: None - ·¢ËÍʧ°Ü£» mailObj - ³É¹¦·¢Ë͵ÄÓʼþʵÀý
    tAddt
AddToCheckRWtLimitLVt LimitLVTypet
CheckStateRURVRXN(RZR[R\R%R R t AddServerMailRdt
SetLimitLVtSetLimitLVTypet SetCheckStateRR tSync_ServerMail(RRIRKR7RRmtlimitLVt limitLVTypet
checkStateRnRoRRRvt    eventNameRw((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt SendSeverMailÈs&         .     cCsxtjƒ}|j|ƒ}|s%dS|s<t|dƒdStjd|ƒ|jdƒtj|dƒt    |ƒdS(NtGMDelsÈ«·þÓʼþÉóºËͨ¹ý: %sitCheckOK(
R R RRRRR€RR R(RtisOKRR((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pytCheckServerMailResultås   
cCsptjƒj|ƒ}|j}|j}|dkrCt||ƒn)|dkr_t||ƒn t||ƒdS(Nii(RR!tGetPlayerByIndexRvtReqTypet    doMailDeltdoMailGetAwardt
doMailRead(tindext curPackDatattickRRtreqType((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt OnRequestMailþs           cCsv|s
dS|jƒ}tjƒ}|j||ƒ}|tjkr^|j||tjƒ}nt|i||6ƒdS(N(    t GetPlayerIDR R tGetPlayerMailStateR#RetSetPlayerMailStateRfR2(RRR-RR.((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR s  cCs|jƒ}tjƒ}|s0|j|ƒ}n    |g}g}i}t}i}x-|D]%}|j||ƒ}    |    tjksŽ|    tjkr®t    j
d|    |f|ƒqXn|j |ƒ}
|
sÝt    j
d||ƒqXni} x$t |
ƒD]} |j || ƒ} | jƒ}| jƒ}| jƒ}| jƒ}t    jƒj|ƒ}|sYqðntj|ƒ}|r|j||||gƒd}n\||f}||krÂd||<|j|ƒn|||||<tj||||ƒ}| j|dƒ|| |<qðWt    j
d|| fƒxU| jƒD]G\}}|tj|||ƒkr.tj|d|gƒt}Pq.q.W|sƒPn|j ||tjƒ||<xËt |
ƒD]½} |j || ƒ} | jƒ}| jƒ}| jƒ}| jƒ}d}|r#yt"|ƒ}Wq#d}q#Xntj#||||t$j%gdtj&ti|d6gd    |ƒs¬q¬q¬q¬Wt'j(||ƒqXWg}xd|D]\}t)|ƒd
krÝ|\}}|j|dƒ}|j|||gƒqŽ|j|ƒqŽW|r
tj*||d ƒnt+||ƒdS( Ns)Óʼþ״̬ÒÑÁìÈ¡»ò²»ÄÜÁìÈ¡! mailState=%s,%ssÓʼþûÓÐÎïÆ·¿ÉÁìÈ¡! %siis     guid=%s,needPackSpaceDict=%stGeRen_chenxin_676165teventtMailGUIDt setAttrDictitMail(,R•R R tGetPersonalMailGuidsRhR–R#tMailState_Unknownt MailState_GotRRiRgtranget GetMailItemAtt    GetItemIDtGetCountt    GetIsBindt GetUserDatat GetGameDatatGetItemByTypeIDtChConfigtGetItemPackTypetappendt ItemControlertGetItemNeedPackCounttgetR%t
ItemCommontGetItemPackSpacet PlayerControlt
NotifyCodeRDR—RZtevaltGivePlayerItemt IPY_GameWorldtrptItemt ItemGive_MailRtDR_MailGiveSuccessRktNotifyGiveAwardInfoR2(RRR-RtguidListt statItemListt statItemDicttisPackSpaceEnoughR5R.t mailItemCounttneedPackSpaceDictRtmailItemRnRotisBindtuserDatat curItemDatatpackTypet    needSpaceROR›t giveItemInfotstatItem((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRŽs–                 
     "
   c    CsI|r|jƒ}ntjƒ}|s9|j|ƒ}n    |g}i}xä|D]Ü}|j||ƒ}|tjkr|qOn|só|j|ƒ}|rÀ|tjkrÀt    j
d||ƒqOn| ró|tj krót    j
d||ƒqOqón|j ||tjƒ||<|rOt j||dƒqOqOW|rEt||ƒndS(NsÓÐÎïÆ·ÓʼþδÁìÈ¡²»ÄÜɾ³ý! %ssÎÞÎïÆ·Óʼþδ¶Á²»ÄÜɾ³ý! %sR‡(R•R R RR–R#R$RgRŸRRiRfR—RR1R2(    RRtisGMR-RR¹R5R.R½((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRzs2          c    Cstjƒ}|j|ƒ}|s%dSt|ƒ}tjƒ}d|_|g|_t|jƒ|_    t
j ƒ}xŠt |j ƒƒD]v}|j|ƒ}t
j|ƒs­qƒnt||ƒ}|tjksƒ|tjkràqƒn||_tj||ƒqƒWdS(Ni(R R Rt __packMailObjtChPyNetSendPackt tagMCMailListt IsServerMailtMailListRktCountRR!R t OnlineCounttOnlineAttIsNormalPlayertCheckPlayerServerMailStateR#RžR$t    MailStateR'R((    RRt
serverMailtpackMailR,t playerManagertiRR.((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRŸs(             c    Cs÷tjƒ}|jƒ}|s"dSg}x~|D]v}|j|ƒ}|sPq/nt||ƒ}|tjks/|tjkrƒq/nt|ƒ}||_    |j
|ƒq/W|s³dSt j ƒ}d|_ ||_t|jƒ|_tj||ƒdS(Ni(R R R RRÑR#RžR$RÈRÒRªRÉRÊRËRÌRkRÍR'R((    RRR¹RrRRR.tmailR,((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR»s.                 c    CsÕ| s|jƒrtjS|jƒ}|jƒ}tjƒ}|j||ƒ}|tjkrc|Stj}|jƒ}|j    ƒ}|j
ƒ}||kr¿|s¸|j ||tj ƒStjS|j ||tj ƒS(N(t GetCheckStateR#RžR•RdR R R–t
GetLimitLVtGetLimitLVTypetGetLVR—tMailState_LimitRe(    RRÓR-RRR.R‚RƒtplayerLV((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRÑÚs"           cCsÏ|jƒ}tjƒ}|s0|j|ƒ}n|s:dStjƒ}g|_xW|D]O}|j||ƒ}|szqVnt|ƒ}|j    ƒ|_
|jj |ƒqVWt |jƒ|_ tj||ƒdS(N(R•R R RRÉRÊRÌtGetPersonalMailRÈRPRÒRªRkRÍR'R((RR¹R-RR,RRR×((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRôs$         cCs`|jƒ}tjƒ}||_|jƒ|_|jƒ|_|jƒ|_    |j
ƒ|_ t |j ƒ|_ |jƒ|_t |jƒ|_tjƒ}|j|ƒ}xœt|ƒD]Ž}|j||ƒ}|sÜq¸ntjƒ}|jƒ|_|jƒ|_|jƒ|_|jƒ|_t |jƒ|_|j j!|ƒq¸Wt |j ƒ|_|S(N("RdRÉt    tagMCMailRvtGetTypetTypeRRTRRWtGetTitleRURktTitleLentGetTextRVtTextLenR R RgR R¡t tagMCMailItemR¢tItemIDR£RÍR¤tIsBindR¥tUserDatat UserDataLentItemsRª(RRR×RR½RR¿titem((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyRÈ s2        cCsvtjƒ}g|_xH|jƒD]:\}}tjƒ}||_||_|jj|ƒq"Wt|jƒ|_    |S(N(
RÉttagMCMailStateChangeRÌR%ttagMCMailStateRvRÒRªRkRÍ(R5R,RR.R×((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR")s              cCs$|s
dStj|t|ƒƒdS(N(R'R(R"(RR5((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyR24s(&R=RR®R°R´RRÉR]R«R'R#R R¨RARRR    RRRRLR?RZRER†RŠR”RRŽRDRRRRÑRRÈR"R2(((siD:\SG_ServerCode\ServerPython\ZoneServerGroup\map1_8G\MapServer\MapServerData\Script\Player\PlayerMail.pyt<module>sF                                     
8                 b%