From 901abc39e97bd248b848aba24e0439af24a62ca2 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 22 十月 2021 16:31:04 +0800 Subject: [PATCH] 5237 【主干】【BT5】【BT4】【BT3】【bt3_1.102.1】【gt_1.102.1】[(神兽背包满时)领取永久累充奖励未获得神兽背包道具 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py | 71 ++++++++++++++++++++++++++++------- 1 files changed, 57 insertions(+), 14 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py index 3a508cc..2ab86c5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py @@ -29,6 +29,10 @@ import EventReport import ChConfig import PlayerControl +import IpyGameDataPY +import EventShell + +import time ##A5 3B 请求领取补偿#tagCMRequestCompensation # @param index, clientPack, tick @@ -68,6 +72,7 @@ GameWorld.DebugLog(" PlayerID %s no found "%curPackData.PlayerID) return + hasAuctionItem = False needPackSpaceDict = {} isPackSpaceEnough = True # 先汇总物品所属背包 @@ -78,16 +83,42 @@ if not curItemData: continue - packType = ChConfig.GetItemPackType(curItemData.GetType()) - needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count) + isAuctionItem = curPackItem.IsBind + packType = ChConfig.GetItemPackType(curItemData) + needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count, isAuctionItem) needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace + if isAuctionItem: + hasAuctionItem = True - GameWorld.DebugLog(" needPackSpaceDict=%s" % str(needPackSpaceDict)) + GameWorld.DebugLog(" hasAuctionItem=%s,needPackSpaceDict=%s" % (hasAuctionItem, needPackSpaceDict)) for packType, needSpace in needPackSpaceDict.items(): if needSpace > ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType]) isPackSpaceEnough = False break + + auctionItemTimeout = False + auctionItemCreateTime = 0 + # 20201223 主干取消拍品有效时长设定 +# if hasAuctionItem: +# auctionItemValidTimesMax = IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600 # 拍品有效时长 +# auctionItemValidTimesMail = IpyGameDataPY.GetFuncCfg("AuctionItem", 2) * 3600 # 邮件拍品附加有效时长 +# auctionItemValidTimesTotal = auctionItemValidTimesMail + auctionItemValidTimesMax +# mailCreateTimeStr = curPackData.CreateTime +# mailCreateTime = GameWorld.ChangeTimeStrToNum(mailCreateTimeStr) +# curTime = int(time.time()) +# passTime = curTime - mailCreateTime +# if passTime <= auctionItemValidTimesMail: +# GameWorld.DebugLog("邮件拍品领取时间在附加保护时长内,拍品创建时间即领取邮件时间开始算!passTime(%s) <= auctionItemValidTimesMail(%s)" % (passTime, auctionItemValidTimesMail)) +# pass +# elif auctionItemValidTimesMail < passTime < auctionItemValidTimesTotal: +# auctionItemCreateTime = curTime - (passTime - auctionItemValidTimesMail) +# GameWorld.DebugLog("邮件拍品领取时间超过邮件保护时间,拍品创建时间需扣除领取时的溢出时间!auctionItemValidTimesMail(%s) < passTime(%s) < auctionItemValidTimesTotal(%s), auctionItemCreateTime=%s" +# % (auctionItemValidTimesMail, passTime, auctionItemValidTimesTotal, GameWorld.ChangeTimeNumToStr(auctionItemCreateTime))) +# elif passTime >= auctionItemValidTimesMax: +# auctionItemTimeout = True +# GameWorld.DebugLog("邮件中的拍品已过期,将自动转为非拍品!passTime(%s) >= auctionItemValidTimesMax(%s)" +# % (passTime, auctionItemValidTimesMax)) #背包空间不足 if not isPackSpaceEnough: @@ -104,40 +135,52 @@ sendPack.Result = 0 NetPackCommon.SendPyPackToGameServer(sendPack) return - + + Text = curPackData.Text + _, _, content = Text.split("<$_$>") + isPaimaiMail = "<MailTemplate>PaimaiMail3</MailTemplate>" in content + for i in xrange(curPackData.Count): curPackItem = curPackData.Items[i] itemID = curPackItem.ItemID + isAuctionItem = curPackItem.IsBind and not auctionItemTimeout if ItemControler.GetAppointItemRealID(itemID): - #定制物品 - ItemControler.GivePlayerItem(curPlayer, itemID, curPackItem.Count, curPackItem.IsBind, [IPY_GameWorld.rptItem], - False, showSysInfo=False, event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}]) - continue - - curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, curPackItem.IsBind) + curCreateItem = ItemControler.GetItemByData(ItemControler.GetAppointItemDictData(itemID, isAuctionItem)) + else: + curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, isAuctionItem) if not curCreateItem: GameWorld.ErrLog("OnGMRequestCompensationResult CreateSingleItem %s Err "%itemID) continue ##UserData包含了追加属性不完整,这里需要补齐 + userDataCreateTime = 0 if curPackItem.UserDataLen: UserDataDict = eval(curPackItem.UserData) #设置UserData UserData = "%s"%UserDataDict curCreateItem.SetUserData(UserData, len(UserData)) + userDataCreateTime = curCreateItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime) + + if isAuctionItem and auctionItemCreateTime and not userDataCreateTime: + curCreateItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, auctionItemCreateTime) + ItemCommon.MakeEquipGS(curCreateItem) + + if isPaimaiMail and ItemCommon.CheckItemIsEquip(curCreateItem): + EventShell.EventRespons_BuyAuctionEquip(curPlayer, curCreateItem.GetItemColor()) + #放入玩家背包 ItemControler.PlayerItemControler(curPlayer).PutInItem(IPY_GameWorld.rptItem, curCreateItem, event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}]) - + moneySource = curPackData.MoneySource + ChConfig.Def_GiveMoney_Unknown # 存值时为byte类型,使用时需还原回来 if curPackData.Gold != 0: - PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, ChConfig.Def_GiveMoney_Mail) + PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, moneySource) if curPackData.GoldPaper != 0: - PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, ChConfig.Def_GiveMoney_Mail) + PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, moneySource) if curPackData.Silver != 0: - PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, ChConfig.Def_GiveMoney_Mail) + PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, moneySource) #发送相关数据 回报补偿发放结果 sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult() -- Gitblit v1.8.0