From 6316f747b4ebd078967bc2c34b9a0d293b153544 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 26 七月 2019 16:52:26 +0800
Subject: [PATCH] 8154 【后端】【主干】【300】拍卖行优化(系统上架拍品支持每件拍品间隔随机秒数上架)

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                   |    3 +++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py |    2 +-
 PySysDB/PySysDBG.h                                                                |    1 +
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py     |   48 +++++++++++++++++++++++++++++++++++++++---------
 4 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index b367f51..773614f 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -66,6 +66,7 @@
 	BYTE		AuctionCount;	//上架次数
 	list		RandMinuteRange;	//上架随机间隔分钟下限|上限
 	list		ItemCountWeightList;	//上架随机件数权重列表, [[权重, 件数], ...]
+	list		AddRandSecondRange;	//每件拍品随机间隔上架秒数 上限|下限
 	list		AuctionItemWeightList;	//上架物品随机权重, [[权重, 物品ID],[权重, [阶,颜色,部位集合,是否套装,星级]] ...]
 	list		RandMailKeyList;	//上架随机邮件列表,有配置时上架的时候在线玩家会收到一封上架邮件提醒
 };
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
index c3ae103..adc2ff1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
@@ -496,7 +496,7 @@
     GameWorld.Log("=============================================================")
     return AuctionSystemItem[1]
 
-def OnAuctionItemMinuteProcess():
+def OnAuctionItemMinuteProcess(tick):
     ## 拍卖行拍品定时处理,每整分钟触发一次
     
     # 这里时间需精确到分钟,不然后面的比较会匹配不到
@@ -505,7 +505,10 @@
                                                                     curDateTime.hour, curDateTime.minute), ChConfig.TYPE_Time_Format)
     
     randMailKey = ""
-    sysAuctionItemList = []
+    addItemTick = tick
+    sysAuctionItemList = IpyGameDataPY.GetConfigEx("SysWaitAuctionItemList") # 系统等待上架的拍品列表
+    if not sysAuctionItemList:
+        sysAuctionItemList = []
     addSystemAuctionItemInfo = __GetAuctionSystemItemInfo()
     for cfgID, ipyData, addAuctionItemDatetimeList in addSystemAuctionItemInfo:
         if curDateTime not in addAuctionItemDatetimeList:
@@ -513,20 +516,29 @@
         #cfgID = ipyData.GetCfgID()
         addCountWeightList = ipyData.GetItemCountWeightList()
         auctionItemWeightList = ipyData.GetAuctionItemWeightList()
+        randSecondRange = ipyData.GetAddRandSecondRange()
         
         addCount = GameWorld.GetResultByWeightList(addCountWeightList)
-        addSysItemList = []
+        GameWorld.Log("增加等待上架的系统拍品信息: cfgID=%s,addCount=%s,addItemTick=%s" % (cfgID, addCount, addItemTick))
         for _ in xrange(addCount):
             itemInfo = GameWorld.GetResultByWeightList(auctionItemWeightList)
             if itemInfo != None:
-                addSysItemList.append(itemInfo)
-        GameWorld.Log("增加上架系统拍品信息: cfgID=%s,addCount=%s, %s" % (cfgID, addCount, addSysItemList))
-        sysAuctionItemList += addSysItemList
-        
+                randSeconds = 0
+                if len(randSecondRange) == 2:
+                    randSeconds = random.randint(randSecondRange[0], randSecondRange[1])
+                elif len(randSecondRange) == 1:
+                    randSeconds = randSecondRange[0]
+                addItemTick = addItemTick + randSeconds * 1000
+                sysAuctionItemList.append([addItemTick, itemInfo])
+                GameWorld.Log("    增加等待上架的系统拍品: randSeconds=%s,addItemTick=%s,itemInfo=%s" % (randSeconds, addItemTick, itemInfo))
+                
         randMailKeyList = ipyData.GetRandMailKeyList()
         if randMailKeyList:
             randMailKey = random.choice(randMailKeyList)
             
+    IpyGameDataPY.SetConfigEx("SysWaitAuctionItemList", sysAuctionItemList)
+    #GameWorld.DebugLog("等待系统上架的拍品列表: %s" % sysAuctionItemList)
+    
     # 随机邮件通知 
     if randMailKey:
         playerIDList = []
@@ -540,9 +552,25 @@
                 continue
             playerIDList.append(player.GetPlayerID())
         PlayerCompensation.SendMailByKey(randMailKey, playerIDList, addItemList)
+               
+    return
+
+def __DoSysWaitAddAuctionItem(tick):
+    sysAuctionItemList = IpyGameDataPY.GetConfigEx("SysWaitAuctionItemList") # 系统等待上架的拍品列表
+    if not sysAuctionItemList:
+        return
+    
+    doCount = len(sysAuctionItemList)
+    while doCount > 0 and sysAuctionItemList:
+        doCount -= 1
+        addItemTick, itemInfo = sysAuctionItemList[0]
+        if tick < addItemTick:
+            #GameWorld.DebugLog("未到系统等待上架的拍品tick,不处理! tick=%s,sysAuctionItemList=%s" % (tick, sysAuctionItemList))
+            break
+        sysAuctionItemList.pop(0)
+        GameWorld.DebugLog("系统等待上架的拍品tick已到,可上架! tick=%s >= addItemTick=%s,itemInfo=%s,sysAuctionItemList=%s" % (tick, addItemTick, itemInfo, sysAuctionItemList))
+        DoAddSystemAuctionItem([itemInfo])
         
-    if sysAuctionItemList:
-        DoAddSystemAuctionItem(sysAuctionItemList)        
     return
 
 def OnAuctionItemTimeProcess(curTime, tick):
@@ -550,6 +578,8 @@
     
     __DoSysBuyoutItemByTime(curTime)
     
+    __DoSysWaitAddAuctionItem(tick)
+    
     allAuctionItemByEndTimeList = PyDataManager.GetAuctionItemManager().allAuctionItemByEndTimeList
     if not allAuctionItemByEndTimeList:
         return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 66ff9ca..4ce5a49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -359,7 +359,7 @@
     #红包
     PlayerFamilyRedPacket.OnRedPacketMinuteProcess()
     #拍卖行
-    AuctionHouse.OnAuctionItemMinuteProcess()
+    AuctionHouse.OnAuctionItemMinuteProcess(tick)
     #每5分钟触发一次仙盟总战力更新
     if curMinute % 5 == 0:
         PlayerFamily.UpdFamilyTotalFightPower()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index ef4336f..b4d2e6f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -82,6 +82,7 @@
                         ("BYTE", "AuctionCount", 0),
                         ("list", "RandMinuteRange", 0),
                         ("list", "ItemCountWeightList", 0),
+                        ("list", "AddRandSecondRange", 0),
                         ("list", "AuctionItemWeightList", 0),
                         ("list", "RandMailKeyList", 0),
                         ),
@@ -648,6 +649,7 @@
         self.AuctionCount = 0
         self.RandMinuteRange = []
         self.ItemCountWeightList = []
+        self.AddRandSecondRange = []
         self.AuctionItemWeightList = []
         self.RandMailKeyList = []
         return
@@ -660,6 +662,7 @@
     def GetAuctionCount(self): return self.AuctionCount # 上架次数
     def GetRandMinuteRange(self): return self.RandMinuteRange # 上架随机间隔分钟下限|上限
     def GetItemCountWeightList(self): return self.ItemCountWeightList # 上架随机件数权重列表, [[权重, 件数], ...]
+    def GetAddRandSecondRange(self): return self.AddRandSecondRange # 每件拍品随机间隔上架秒数 上限|下限
     def GetAuctionItemWeightList(self): return self.AuctionItemWeightList # 上架物品随机权重, [[权重, 物品ID],[权重, [阶,颜色,部位集合,是否套装,星级]] ...]
     def GetRandMailKeyList(self): return self.RandMailKeyList # 上架随机邮件列表,有配置时上架的时候在线玩家会收到一封上架邮件提醒
 

--
Gitblit v1.8.0