From 46c9d7d80fb93f053bd64acd1fa94ee3dc181bf3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 11 二月 2020 13:41:51 +0800
Subject: [PATCH] 8377 新增任务接口(上架橙装、购买橙装、货币变更、更新货币;活跃放置各状态接口)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py |   81 ++++++++++++++++++++++++++--------------
 1 files changed, 53 insertions(+), 28 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 3d9dc44..472748a 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,9 @@
 import EventReport
 import ChConfig
 import PlayerControl
+import IpyGameDataPY
+
+import time
 
 ##A5 3B 请求领取补偿#tagCMRequestCompensation
 #  @param index, clientPack, tick
@@ -68,9 +71,9 @@
         GameWorld.DebugLog("    PlayerID %s no found "%curPackData.PlayerID)
         return
     
+    hasAuctionItem = False
+    needPackSpaceDict = {}
     isPackSpaceEnough = True
-    commPackItemCount = 0 # 常规背包物品个数
-    RuneItemCount = 0 # 符印物品个数
     # 先汇总物品所属背包
     for i in xrange(curPackData.Count):
         curPackItem = curPackData.Items[i]
@@ -78,24 +81,42 @@
         curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
         if not curItemData:
             continue
-        if curItemData.GetType() in [ChConfig.Def_ItemType_Rune, ChConfig.Def_ItemType_RuneExp]:
-            RuneItemCount += curPackItem.Count
-        else:
-            commPackItemCount += 1
+        
+        isAuctionItem = curPackItem.IsBind
+        packType = ChConfig.GetItemPackType(curItemData.GetType())
+        needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count, isAuctionItem)
+        needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
+        if isAuctionItem:
+            hasAuctionItem = True
             
-    if isPackSpaceEnough and RuneItemCount > 0:
-        packSpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptRune, RuneItemCount)
-        if packSpace < RuneItemCount:
+    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
-            GameWorld.DebugLog("    符印背包空间不足, RuneItemCount=%s > packSpace=%s" % (RuneItemCount, packSpace))
-            PlayerControl.NotifyCode(curPlayer, "RuneBagFull")  
-    
-    if isPackSpaceEnough and commPackItemCount > 0:
-        itemPackSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, commPackItemCount)
-        if itemPackSpace < commPackItemCount:
-            isPackSpaceEnough = False
-            GameWorld.DebugLog("    背包空间不足, commPackItemCount=%s > itemPackSpace=%s" % (commPackItemCount, itemPackSpace))
-            PlayerControl.NotifyCode(curPlayer, "BagFull")  
+            break
+        
+    auctionItemTimeout = False
+    auctionItemCreateTime = 0
+    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:
@@ -116,36 +137,40 @@
     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)
         #放入玩家背包
         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