#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GM.Commands.Mail # # @todo:Óʼþ # @author hxp # @date 2025-05-14 # @version 1.0 # # ÏêϸÃèÊö: Óʼþ # #------------------------------------------------------------------------------- #"""Version = 2025-05-14 12:00""" #------------------------------------------------------------------------------- import GameWorld import PlayerMail import ShareDefine import DataRecordPack import DBDataMgr import random ## Ö´ÐÐÂß¼­ # @param curPlayer µ±Ç°Íæ¼Ò # @param gmList [] # @return None def OnExec(curPlayer, gmList): if not gmList: GameWorld.DebugAnswer(curPlayer, "Çå¿ÕÓʼþ: Mail 0") GameWorld.DebugAnswer(curPlayer, "·¢ËÍÓʼþ: Mail ¼¸·â ÎïÆ·Êý [Ä£°åkey ²ÎÊý1 ...]") GameWorld.DebugAnswer(curPlayer, "Êä³öÓʼþ: Mail p") GameWorld.DebugAnswer(curPlayer, "·¢ËÍÈ«·þ: Mail s ÎïÆ·Êý [ÌìÊý]") return value = gmList[0] if value == 0: ClearMail(curPlayer) return if value == "p": PrintPlayerMail(curPlayer) return if value == "s": SendServerMail(curPlayer, gmList) return if value > 0: SendPlayerMail(curPlayer, gmList) return return def SendPlayerMail(curPlayer, gmList): playerID = curPlayer.GetPlayerID() sendCnt = gmList[0] mailItemCnt = gmList[1] if len(gmList) > 1 else 5 mailTypeKey = gmList[2] if len(gmList) > 2 else "" paramList = gmList[3:] mailMgr = DBDataMgr.GetMailMgr() mailCntBef = mailMgr.GetPersonalMailCount(playerID) for _ in range(sendCnt): itemList = __randMailItem(mailItemCnt) PlayerMail.SendMailByKey(mailTypeKey, playerID, itemList, paramList) mailCntAft = mailMgr.GetPersonalMailCount(playerID) GameWorld.DebugAnswer(curPlayer, "·¢Ë͸öÈËÓʼþOK:%s, %s~%s" % (sendCnt, mailCntBef, mailCntAft)) return def SendServerMail(curPlayer, gmList): mailItemCnt = gmList[1] if len(gmList) > 1 else 5 limitDays = gmList[2] if len(gmList) > 2 else 7 randValue = random.randint(1, 1000) title = GameWorld.GbkToCode("È«·þÓʼþ±êÌâ%s" % randValue) text = GameWorld.GbkToCode( '''È«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝ È«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝÈ«·þÓʼþÄÚÈÝ%s ''' % randValue ) itemList = __randMailItem(mailItemCnt) PlayerMail.SendSeverMail("", title, text, itemList, limitDays) GameWorld.DebugAnswer(curPlayer, "·¢ËÍÈ«·þÓʼþOK!") return def __randMailItem(mailItemCnt): itemIDList = range(3501, 3530 + 1) moneyIDList = [20, 30] isBind = 0 itemList = [] if mailItemCnt: for moneyID in moneyIDList: itemCount = random.choice([100, 1000, 10000, 20000, 50000, 100000, 200000, 300000, 500000]) itemList.append([moneyID, itemCount, isBind]) if len(itemList) >= mailItemCnt: break random.shuffle(itemIDList) for i in range(mailItemCnt): itemID = itemIDList[i%len(itemIDList)] itemCount = random.randint(1, 100000) itemList.append([itemID, itemCount, isBind]) if len(itemList) >= mailItemCnt: break return itemList def ClearMail(curPlayer): notifyGUIDState = {} playerID = curPlayer.GetPlayerID() mailMgr = DBDataMgr.GetMailMgr() guidList = mailMgr.GetPersonalMailGuids(playerID) for guid in guidList: mailMgr.DelPersonalMail(playerID, guid) DataRecordPack.DR_MailDel(playerID, guid, "GMDel") notifyGUIDState[guid] = ShareDefine.MailState_Del GameWorld.DebugAnswer(curPlayer, "ɾ³ý¸öÈËÓʼþ:%s" % len(guidList)) PlayerMail.Sync_PlayerMailState(curPlayer, notifyGUIDState) guidList = mailMgr.GetServerMailGuids() for guid in guidList: PlayerMail.DelServerMail(guid, "GMDel") if len(guidList): GameWorld.DebugAnswer(curPlayer, "ɾ³ýÈ«·þÓʼþ:%s" % len(guidList)) return def PrintPlayerMail(curPlayer): playerID = curPlayer.GetPlayerID() mailMgr = DBDataMgr.GetMailMgr() guidList = mailMgr.GetPersonalMailGuids(playerID) GameWorld.DebugAnswer(curPlayer, "¸öÈËÓʼþÊý:%s" % len(guidList)) for num, guid in enumerate(guidList, 1): mailObj = mailMgr.GetPersonalMail(playerID, guid) __printMailLog(curPlayer, mailMgr, mailObj, num, False) guidList = mailMgr.GetServerMailGuids() GameWorld.DebugAnswer(curPlayer, "È«·þÓʼþÊý:%s" % len(guidList)) for num, guid in enumerate(guidList, 1): mailObj = mailMgr.GetServerMail(guid) __printMailLog(curPlayer, mailMgr, mailObj, num, True) GameWorld.DebugAnswer(curPlayer, "ÓʼþÃ÷ϸÏê¼ûµØÍ¼ÈÕÖ¾") return def __printMailLog(curPlayer, mailMgr, mailObj, num, isServerMail): playerID = curPlayer.GetPlayerID() GUID = mailObj.GetGUID() Title = mailObj.GetTitle() Text = mailObj.GetText() CreateTime = mailObj.GetCreateTime() LimitDays = mailObj.GetLimitDays() mailState = mailMgr.GetPlayerMailState(GUID, playerID) mailItemCount = mailMgr.GetMailItemCount(GUID) GameWorld.DebugLog("%s,%s,mailState=%s,mailItemCount=%s" % (num, GUID, mailState, mailItemCount), playerID) GameWorld.DebugLog(" CreateTime=%s,LimitDays=%s,Title=%s,Text=%s" % (CreateTime, LimitDays, Title, Text), playerID) if isServerMail: LimitLV = mailObj.GetLimitLV() LimitLVType = mailObj.GetLimitLVType() CheckState = mailObj.GetCheckState() GameWorld.DebugLog(" LimitLV=%s,Éý¼¶¿ÉÁì=%s,ÐèÒªÉóºË=%s" % (LimitLV, LimitLVType, CheckState), playerID) itemList = [] for index in range(mailItemCount): mailItem = mailMgr.GetMailItemAt(GUID, index) itemID = mailItem.GetItemID() itemCount = mailItem.GetCount() isBind = mailItem.GetIsBind() userData = mailItem.GetUserData() itemList.append([itemID, itemCount, isBind, userData]) if itemList: GameWorld.DebugLog(" %s,itemList=%s" % (mailItemCount, itemList), playerID) return