From 824aab9ae8d1b4c8619f96ae821b513ddd65ab43 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 23 三月 2021 16:35:17 +0800
Subject: [PATCH] 8860 【BT2】【主干】【后端】极品白拿功能(返还奖励改为按相差天计算;逻辑购买、领取返还奖励逻辑);

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py          |    6 +++---
 PySysDB/PySysDBPY.h                                                                           |    2 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFreeGoods.py |   40 ++++++++++++++++++++--------------------
 3 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index e466149..5ea565625 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1319,7 +1319,7 @@
 	BYTE		_ID;	//ID
 	dict		AwardItem;	//奖励 {"职业":[[物品ID,个数],...], ...}
 	WORD		NeedMoney;	//需要仙玉
-	DWORD		ReturnTime;	//返还时间(s)
+	DWORD		ReturnDays;	//返还所需天
 };
 
 //限时礼包活动表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 7920d3c..85c7c3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1057,7 +1057,7 @@
                         ("BYTE", "ID", 1),
                         ("dict", "AwardItem", 0),
                         ("WORD", "NeedMoney", 0),
-                        ("DWORD", "ReturnTime", 0),
+                        ("DWORD", "ReturnDays", 0),
                         ),
 
                 "ActFlashGiftbag":(
@@ -3910,13 +3910,13 @@
         self.ID = 0
         self.AwardItem = {}
         self.NeedMoney = 0
-        self.ReturnTime = 0
+        self.ReturnDays = 0
         return
         
     def GetID(self): return self.ID # ID
     def GetAwardItem(self): return self.AwardItem # 奖励 {"职业":[[物品ID,个数],...], ...}
     def GetNeedMoney(self): return self.NeedMoney # 需要仙玉
-    def GetReturnTime(self): return self.ReturnTime # 返还时间(s)
+    def GetReturnDays(self): return self.ReturnDays # 返还所需天
 
 # 限时礼包活动表
 class IPY_ActFlashGiftbag():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFreeGoods.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFreeGoods.py
index 0571d83..ff2cbd0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFreeGoods.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFreeGoods.py
@@ -18,14 +18,13 @@
 """Version = 2018-07-10 16:50"""
 #---------------------------------------------------------------------
 
-import IPY_GameWorld
 import GameWorld
 import ChConfig
+import IPY_GameWorld
 import IpyGameDataPY
-import ItemCommon
+import ChPyNetSendPack
 import PlayerControl
 import ItemControler
-import ChPyNetSendPack
 import NetPackCommon
 
 import time
@@ -47,6 +46,9 @@
 #  @param curPlayer
 #  @return None
 def OnLogin(curPlayer):
+    openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)
+    if not openTime:
+        return
     Sync_FreeGoodsInfo(curPlayer)
     return
 
@@ -58,8 +60,11 @@
         若玩家在最后一个可领取返还仙玉倒计时结束的当天未领取仙玉,则在隔天凌晨5:00帮其把所有未领取仙玉领取通过邮件发放
     '''
     openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)
+    if not openTime:
+        return
     curTimeNum = int(time.time())
     if curTimeNum - openTime <= IpyGameDataPY.GetFuncCfg('FreeGoodsOpenTime'):
+        #GameWorld.DebugLog("极品白拿购买时间未到期,不处理!")
         return
     giveMoney = 0
     giveGoodsIDList = []
@@ -69,18 +74,20 @@
         goodsState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsBuyState % goodsID)
         if goodsState in [0, 1]:
             continue
-        if curTimeNum - goodsState - ipyData.GetReturnTime() < 24*3600:
+        buyTime = goodsState
+        passDays = GameWorld.GetDiff_Day(curTimeNum, buyTime)
+        if passDays <= ipyData.GetReturnDays():
             giveMoney = 0
             giveGoodsIDList = []
+            #GameWorld.DebugLog("    还有白拿奖励领奖时间未预期,不处理! goodsID=%s,passDays=%s" % (goodsID, passDays))
             break
         giveMoney += ipyData.GetNeedMoney()
         giveGoodsIDList.append(goodsID)
     if giveMoney:
-        GameWorld.DebugLog('    极品白拿帮领取返还 giveMoney=%s,giveGoodsIDList=%s'%(giveMoney, giveGoodsIDList), curPlayer.GetID())
+        GameWorld.DebugLog('    极品白拿邮件返还 giveMoney=%s,giveGoodsIDList=%s' % (giveMoney, giveGoodsIDList), curPlayer.GetID())
         for goodsID in giveGoodsIDList:
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsBuyState % goodsID, 1)
         PlayerControl.SendMailByKey('WhiteTakeJade', [curPlayer.GetID()], [], [], giveMoney)
-
         
         Sync_FreeGoodsInfo(curPlayer)
     return
@@ -98,12 +105,15 @@
     goodsState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsBuyState % freeGoodsID)
     addDataDict = {"freeGoodsID":freeGoodsID}
     if goodsState == 1:
+        GameWorld.DebugLog(' 极品白拿已领取该奖励!', curPlayer.GetID())
         return
     if goodsState != 0:
         #领取返还
-        
-        if curTimeNum - goodsState < ipyData.GetReturnTime():
-            GameWorld.DebugLog(' 极品白拿 未到返还时间!freeGoodsID=%s, passTime=%s' % (freeGoodsID, curTimeNum - goodsState), curPlayer.GetID())
+        buyTime = goodsState
+        passDays = GameWorld.GetDiff_Day(curTimeNum, buyTime)
+        if passDays < ipyData.GetReturnDays():
+            GameWorld.DebugLog(' 极品白拿 未到返还时间!freeGoodsID=%s, buyTime=%s, passDays=%s < %s' 
+                               % (freeGoodsID, GameWorld.ChangeTimeNumToStr(buyTime), passDays, ipyData.GetReturnDays()), curPlayer.GetID())
             return
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsBuyState % freeGoodsID, 1)
         returnMoney = ipyData.GetNeedMoney()
@@ -122,20 +132,10 @@
         #给物品
         awardItemDict = ipyData.GetAwardItem()
         awardItemList = awardItemDict.get(str(curPlayer.GetJob()), [])
-        # 检查背包
-        needSpace = len(awardItemList)
-        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-        if needSpace > packSpace:
-            PlayerControl.SendMailByKey('WhiteTakeBagFull', [curPlayer.GetID()], awardItemList, [freeGoodsID])
-        else:
-            # 给物品
-            for itemID, itemCount, isBind in awardItemList:
-                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
+        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, "WhiteTakeBagFull", event=["FreeGoods", False, addDataDict])
         
     Sync_FreeGoodsInfo(curPlayer, [freeGoodsID])
     return
-
-
 
 def Sync_FreeGoodsInfo(curPlayer, freeGoodsIDList=[]):
     #通知极品白拿信息

--
Gitblit v1.8.0