|  |  |  | 
|---|
|  |  |  | #------------------------------------------------------------------------------ | 
|---|
|  |  |  | import GameWorld | 
|---|
|  |  |  | import ChConfig | 
|---|
|  |  |  | #import ShareDefine | 
|---|
|  |  |  | import ShareDefine | 
|---|
|  |  |  | import IPY_GameServer | 
|---|
|  |  |  | import ChGameToMapPyPack | 
|---|
|  |  |  | import NetPackCommon | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param addItemList [(itemID, itemCnt, isBind), {或物品信息字典}, ...] | 
|---|
|  |  |  | #  @return GUID | 
|---|
|  |  |  | def SendPersonalItemMailEx(title, content, getDays, playerIDList, addItemList, | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default): | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default, detail=""): | 
|---|
|  |  |  | limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays)) | 
|---|
|  |  |  | limitTime = limitTime.split(".")[0] | 
|---|
|  |  |  | return SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, | 
|---|
|  |  |  | gold, goldPaper, silver, sourceType) | 
|---|
|  |  |  | gold, goldPaper, silver, sourceType, detail=detail) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def SendPersonalItemMailBatch(batchMailInfoList): | 
|---|
|  |  |  | ## 批量发送邮件 | 
|---|
|  |  |  | mailTypeKey, batchPlayerIDList, batchAddItemList, batchParamList, batchGold, batchGoldPaper, batchSilver = batchMailInfoList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | mailTypeKey, batchPlayerIDList, batchAddItemList, batchParamList, batchGold, batchGoldPaper, batchSilver, batchDetail = batchMailInfoList | 
|---|
|  |  |  |  | 
|---|
|  |  |  | lenPlayerID = len(batchPlayerIDList) | 
|---|
|  |  |  | lenItem = len(batchAddItemList) | 
|---|
|  |  |  | lenParam = len(batchParamList) | 
|---|
|  |  |  | lenGold = len(batchGold) | 
|---|
|  |  |  | lenGoldPaper = len(batchGoldPaper) | 
|---|
|  |  |  | lenSilver = len(batchSilver) | 
|---|
|  |  |  | lenDetail = len(batchDetail) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | title = "" | 
|---|
|  |  |  | getDays = 30 | 
|---|
|  |  |  | 
|---|
|  |  |  | gold = batchGold[i] if lenGold == lenPlayerID else 0 | 
|---|
|  |  |  | goldPaper = batchGoldPaper[i] if lenGoldPaper == lenPlayerID else 0 | 
|---|
|  |  |  | silver = batchSilver[i] if lenSilver == lenPlayerID else 0 | 
|---|
|  |  |  | detail = batchDetail[i] if lenDetail == lenPlayerID else "" | 
|---|
|  |  |  | content = "<MailTemplate>%s</MailTemplate>%s" % (mailTypeKey, str(paramList)) | 
|---|
|  |  |  | SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver) | 
|---|
|  |  |  | SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def SendMailByKey(mailTypeKey, playerIDList, addItemList, paramList=[], gold=0, goldPaper=0, silver=0): | 
|---|
|  |  |  | def SendMailByKey(mailTypeKey, playerIDList, addItemList, paramList=[], gold=0, goldPaper=0, silver=0, detail=""): | 
|---|
|  |  |  | if not mailTypeKey: | 
|---|
|  |  |  | mailTypeKey = ShareDefine.DefaultLackSpaceMailType | 
|---|
|  |  |  | GameWorld.DebugLog("SendMailByKey %s, playerIDList=%s, addItemList=%s, paramList=%s, gold=%s, goldPaper=%s, silver=%s" | 
|---|
|  |  |  | % (mailTypeKey, playerIDList, addItemList, paramList, gold, goldPaper, silver)) | 
|---|
|  |  |  | title = "" | 
|---|
|  |  |  | content = "<MailTemplate>%s</MailTemplate>%s" % (mailTypeKey, json.dumps(paramList, ensure_ascii=False)) | 
|---|
|  |  |  | return SendPersonalItemMailEx(title, content, 30, playerIDList, addItemList, gold, goldPaper, silver) | 
|---|
|  |  |  | return SendPersonalItemMailEx(title, content, 30, playerIDList, addItemList, gold, goldPaper, silver, detail=detail) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #  此处货币playerIDList发放统一,如根据玩家不同而变,则应需修改 | 
|---|
|  |  |  | ## 功能发放物品补偿/奖励邮件 | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @return GUID | 
|---|
|  |  |  | #  @remarks addItemList支持append字典 | 
|---|
|  |  |  | def SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default): | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default, detail=""): | 
|---|
|  |  |  | if not playerIDList: | 
|---|
|  |  |  | return "" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | GUID = str(uuid.uuid1()) | 
|---|
|  |  |  | AddPersonalItem(GUID, addItemDictList[startIndex:startIndex + perMailItemCnt], playerIDList, | 
|---|
|  |  |  | limitTime, "%s<$_$>%s<$_$>%s" % (ChConfig.Def_Mail_SenderSys, title, content), | 
|---|
|  |  |  | gold, goldPaper, silver) | 
|---|
|  |  |  | gold, goldPaper, silver, sourceType, detail) | 
|---|
|  |  |  | return GUID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 发送纯文字个人补偿 | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param sourceType 查看 Mail_Type_Default 相关定义 | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | def SendPersonalAsTextMail(PlayerID, title, content, limitTime, sourceType = ChConfig.Mail_Type_Default): | 
|---|
|  |  |  | if GameWorld.IsMergeServer(): | 
|---|
|  |  |  | if GameWorld.IsCrossServer(): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | GUID = str(uuid.uuid1()) | 
|---|
|  |  |  | PyAddPersonalCompensation(GUID, PlayerID, GameWorld.GetCurrentDataTimeStr(), limitTime, | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param addItemDictList, LimitTime, mailInfo, PlayerJob,  Text | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | def AddEntireItem(GUID, addItemDictList, LimitTime, mailInfo, PlayerJob, Text, | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0): | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, detail=""): | 
|---|
|  |  |  | ''' | 
|---|
|  |  |  | @param mailInfo: GetEntireCompensationInfo 的返回值, 目前暂存字段 PlayerLV 中 | 
|---|
|  |  |  | ''' | 
|---|
|  |  |  | if GameWorld.IsMergeServer(): | 
|---|
|  |  |  | if GameWorld.IsCrossServer(): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | #GameWorld.DebugLog("Compensation### AddEntireItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList)) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | PlayerJob, Text, gold, goldPaper, silver) | 
|---|
|  |  |  | checkState, limitLVType, limitLV = ParseEntireCompensationInfo(mailInfo) | 
|---|
|  |  |  | addDict = {"LimitTime":LimitTime, "LimitLV":limitLV, "LimitLVType":limitLVType, "CheckState":checkState, "PlayerJob":PlayerJob, "Text":Text, | 
|---|
|  |  |  | "Gold":gold, "GoldPaper":goldPaper, "Silver":silver, "ItemList":addItemDictList} | 
|---|
|  |  |  | "Gold":gold, "GoldPaper":goldPaper, "Silver":silver, "ItemList":addItemDictList, "Detail":detail} | 
|---|
|  |  |  | #添加流向 | 
|---|
|  |  |  | eventName = "Add" if checkState == CheckState_OK else "AddToCheck" | 
|---|
|  |  |  | DataRecordPack.DR_EntireCompensation(GUID, eventName, addDict) | 
|---|
|  |  |  | 
|---|
|  |  |  | #  @param addItemDict, PlayerIDList, LimitTime, Text | 
|---|
|  |  |  | #  @return None | 
|---|
|  |  |  | def AddPersonalItem(GUID, addItemDictList, PlayerIDList, LimitTime, Text, | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default): | 
|---|
|  |  |  | if GameWorld.IsMergeServer(): | 
|---|
|  |  |  | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default, detail=""): | 
|---|
|  |  |  | if GameWorld.IsCrossServer(): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | GameWorld.DebugLog("Compensation### AddPersonalItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList)) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #添加流向 | 
|---|
|  |  |  | addDict = {"LimitTime":LimitTime, "Text":Text, "Gold":gold, "GoldPaper":goldPaper, "Silver":silver, | 
|---|
|  |  |  | "ItemListLen":len(addItemDictList)} | 
|---|
|  |  |  | "ItemListLen":len(addItemDictList), "Detail":detail} | 
|---|
|  |  |  | DataRecordPack.DR_AddPersonalCompensation(PlayerIDList, GUID, addItemDictList, addDict) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|