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