From 6544af7b584112da8dc482cb29dacfb89d750ba6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 七月 2019 19:05:09 +0800
Subject: [PATCH] 8154 【后端】【主干】【300】拍卖行优化(可根据开服天或指定日期上架系统拍品)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 13 ++
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 44 +++++++
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 14 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 2
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py | 42 +++++++
PySysDB/PySysDBG.h | 16 ++
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py | 163 ++++++++++++++++++++++++++
11 files changed, 296 insertions(+), 10 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index a28162f..b367f51 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -54,6 +54,22 @@
BYTE Sortpriority; //排序优先级归组
};
+//拍卖行系统拍品表
+
+struct tagAuctionSystemItem
+{
+ DWORD _CfgID;
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ char StartTime; //开启时间
+ char EndTime; //结束时间
+ BYTE AuctionCount; //上架次数
+ list RandMinuteRange; //上架随机间隔分钟下限|上限
+ list ItemCountWeightList; //上架随机件数权重列表, [[权重, 件数], ...]
+ list AuctionItemWeightList; //上架物品随机权重, [[权重, 物品ID],[权重, [阶,颜色,部位集合,是否套装,星级]] ...]
+ list RandMailKeyList; //上架随机邮件列表,有配置时上架的时候在线玩家会收到一封上架邮件提醒
+};
+
//日常活动表
struct tagDailyAction
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index a0864ca..b680926 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -650,6 +650,8 @@
Def_PlayerKey_ViewCrossPKBillboardTick = "ViewCrossPKBillboardTick_%s_%s" #查询PK排行榜tick,参数(zoneID, seasonID)
+#主城地图、缥缈宗
+Def_FBMapID_MainCity = 10010
#渡劫副本
Def_FBMapID_DuJie = 31110
#仙盟联赛
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
index 674e250..d9006e9 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
@@ -917,6 +917,19 @@
return defValue
+## 从列表中产生物品,[[权重, object], ....]
+# @param weightList 待选列表
+def GetResultByWeightList(weightList):
+ randList = []
+ weight = 0
+ for info in weightList:
+ weight += info[0]
+ randList.append([weight, info[1] if len(info) == 2 else info[1:]])
+ if not randList:
+ return
+ rate = random.randint(1, randList[-1][0])
+ return GetResultByRiseList(randList, rate)
+
## 根据字典key获取value值
# @return
def GetDictValueByKey(attrDict, findKey, defaultValue=None):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
index 8aa568d..8f155b3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
@@ -21,6 +21,7 @@
import PyGameDataStruct
import PlayerCompensation
import ChPyNetSendPack
+import PlayerDBGSEvent
import IpyGameDataPY
import NetPackCommon
import PlayerBourse
@@ -28,6 +29,8 @@
import ShareDefine
import ChConfig
+import random
+import datetime
import operator
import time
import math
@@ -326,6 +329,145 @@
return True
return False
+
+def __GetAuctionSystemItemInfo():
+ key = "AuctionSystemItem"
+ openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+ AuctionSystemItem = IpyGameDataPY.GetConfigEx(key)
+ reloadSign = openServerDay
+ if AuctionSystemItem and AuctionSystemItem[0] == reloadSign:
+ GameWorld.DebugLog("已经加载过本日系统拍品处理信息!openServerDay=%s" % openServerDay)
+ return AuctionSystemItem[1]
+
+ # 因为后面的时间判断都是精确到分的,而处理此逻辑的时候可能不是0秒,所以这里的datetime取当前时间精确到分的
+ serverTime = GameWorld.GetServerTime()
+ curDateStr = "%d-%d-%d" % (serverTime.year, serverTime.month, serverTime.day)
+ curDateTimeStr = "%d-%d-%d %02d:%02d:00" % (serverTime.year, serverTime.month, serverTime.day, serverTime.hour, serverTime.minute)
+ curDateTime = datetime.datetime.strptime(curDateTimeStr, ChConfig.TYPE_Time_Format)
+
+ GameWorld.Log("===== 加载本日系统拍品信息: %s,openServerDay=%s =====" % (curDateTime, openServerDay))
+ addSystemAuctionItemInfo = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetAuctionSystemItemCount()):
+ ipyData = ipyDataMgr.GetAuctionSystemItemByIndex(index)
+ cfgID = ipyData.GetCfgID()
+ startDateStr = ipyData.GetStartDate()
+ endDateStr = ipyData.GetEndDate()
+ startTimeStr = ipyData.GetStartTime()
+ endTimeStr = ipyData.GetEndTime()
+ auctionCount = ipyData.GetAuctionCount()
+ randMinuteRange = ipyData.GetRandMinuteRange()
+
+ GameWorld.DebugLog("cfgID=%s,startDateStr=%s,endDateStr=%s,startTimeStr=%s,endTimeStr=%s,auctionCount=%s,randMinuteRange=%s"
+ % (cfgID, startDateStr, endDateStr, startTimeStr, endTimeStr, auctionCount, randMinuteRange))
+
+ if not startDateStr:
+ startDateStr = curDateStr
+ elif startDateStr.isdigit():
+ startServerDay = int(startDateStr)
+ openServerDateTime = curDateTime + datetime.timedelta(days=(startServerDay-openServerDay))
+ startDateStr = "%d-%d-%d" % (openServerDateTime.year, openServerDateTime.month, openServerDateTime.day)
+
+ if not endDateStr:
+ endDateStr = curDateStr
+ elif endDateStr.isdigit():
+ endServerDay = int(endDateStr)
+ endServerDateTime = curDateTime + datetime.timedelta(days=(endServerDay-openServerDay))
+ endDateStr = "%d-%d-%d" % (endServerDateTime.year, endServerDateTime.month, endServerDateTime.day)
+
+ startDate = datetime.datetime.strptime("%s 00:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
+ endDate = datetime.datetime.strptime("%s 23:59:00" % (endDateStr), ChConfig.TYPE_Time_Format)
+ if serverTime < startDate or serverTime > endDate:
+ GameWorld.DebugLog(" 不在上架日期内,不处理!")
+ continue
+
+ if not startTimeStr:
+ startTimeStr = "00:00"
+ if not endTimeStr:
+ endTimeStr = "23:59"
+ startDatetime = datetime.datetime.strptime("%s %s:00" % (curDateStr, startTimeStr), ChConfig.TYPE_Time_Format)
+ endDatetime = datetime.datetime.strptime("%s %s:00" % (curDateStr, endTimeStr), ChConfig.TYPE_Time_Format)
+ if serverTime >= endDatetime:
+ GameWorld.DebugLog(" 已超过今日的上架时间段,不处理!")
+ continue
+ if serverTime > startDatetime:
+ startDatetime = curDateTime
+
+ addAuctionItemDatetimeList = []
+ nextAddAuctionItemDatetime = startDatetime
+ for _ in xrange(auctionCount):
+ if len(randMinuteRange) == 2:
+ nextAddMinutes = random.randint(randMinuteRange[0], randMinuteRange[1])
+ elif len(randMinuteRange) == 1:
+ nextAddMinutes = randMinuteRange[0]
+ else:
+ continue
+ nextAddAuctionItemDatetime += datetime.timedelta(minutes=nextAddMinutes)
+ if nextAddAuctionItemDatetime > endDatetime:
+ break
+ GameWorld.DebugLog(" 添加上架系统拍品时间: nextAddMinutes=%s %s" % (nextAddMinutes, nextAddAuctionItemDatetime))
+ addAuctionItemDatetimeList.append(nextAddAuctionItemDatetime)
+
+ if not addAuctionItemDatetimeList:
+ continue
+ GameWorld.DebugLog(" 添加上架系统拍品时间: %s" % addAuctionItemDatetimeList)
+ addSystemAuctionItemInfo.append([cfgID, ipyData, addAuctionItemDatetimeList])
+
+ AuctionSystemItem = IpyGameDataPY.SetConfigEx(key, [reloadSign, addSystemAuctionItemInfo])
+ GameWorld.Log("本日系统拍品信息加载完毕!reloadSign=%s" % (reloadSign))
+ GameWorld.Log("本日系统拍品上架时间信息: %s" % addSystemAuctionItemInfo)
+ GameWorld.Log("=============================================================")
+ return AuctionSystemItem[1]
+
+def OnAuctionItemMinuteProcess():
+ ## 拍卖行拍品定时处理,每整分钟触发一次
+
+ # 这里时间需精确到分钟,不然后面的比较会匹配不到
+ curDateTime = GameWorld.GetServerTime()
+ curDateTime = datetime.datetime.strptime("%d-%d-%d %d:%d:00" % (curDateTime.year, curDateTime.month, curDateTime.day,
+ curDateTime.hour, curDateTime.minute), ChConfig.TYPE_Time_Format)
+
+ randMailKey = ""
+ sysAuctionItemList = []
+ addSystemAuctionItemInfo = __GetAuctionSystemItemInfo()
+ for cfgID, ipyData, addAuctionItemDatetimeList in addSystemAuctionItemInfo:
+ if curDateTime not in addAuctionItemDatetimeList:
+ continue
+ #cfgID = ipyData.GetCfgID()
+ addCountWeightList = ipyData.GetItemCountWeightList()
+ auctionItemWeightList = ipyData.GetAuctionItemWeightList()
+
+ addCount = GameWorld.GetResultByWeightList(addCountWeightList)
+ addSysItemList = []
+ 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
+
+ randMailKeyList = ipyData.GetRandMailKeyList()
+ if randMailKeyList:
+ randMailKey = random.choice(randMailKeyList)
+
+ # 随机邮件通知
+ if randMailKey:
+ playerIDList = []
+ addItemList = []
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.GetActivePlayerCount()):
+ player = playerManager.GetActivePlayerAt(i)
+ if player == None:
+ continue
+ if PlayerControl.GetIsTJG(player):
+ continue
+ playerIDList.append(player.GetPlayerID())
+ PlayerCompensation.SendMailByKey(randMailKey, playerIDList, addItemList)
+
+ if sysAuctionItemList:
+ DoAddSystemAuctionItem(sysAuctionItemList)
+ return
+
def OnAuctionItemTimeProcess(curTime, tick):
## 拍卖行拍品定时处理,每秒触发一次
allAuctionItemByEndTimeList = PyDataManager.GetAuctionItemManager().allAuctionItemByEndTimeList
@@ -492,6 +634,9 @@
PlayerCompensation.SendMailByKey("PaimaiMail7", [playerID], [], paramList, gold=givePlayerGold,
detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionGain)
+ else:
+ GameWorld.Log("系统拍品成交: itemGUID=%s,itemID=%s" % (itemGUID, itemID))
+
AddAuctionRecord(auctionItem, AuctionRecordResult_SellOK)
#策划需求屏蔽掉成交广播
@@ -504,7 +649,7 @@
endType = "Recycle"
AddAuctionRecord(auctionItem, AuctionRecordResult_Recycle)
# 个人拍品流拍,物品返还
- else:
+ elif playerID:
endType = "Return"
# 流拍返还物品邮件
@@ -514,6 +659,9 @@
PlayerCompensation.SendMailByKey("PaimaiMail4", [playerID], addItemList, paramList, detail=detail)
AddAuctionRecord(auctionItem, AuctionRecordResult_SellFail)
+ else:
+ endType = "SystemDelete"
+ GameWorld.Log("系统拍品流拍: itemGUID=%s,itemID=%s" % (itemGUID, itemID))
drDict = {"AuctionItemInfo":__GetAuctionItemDRDict(auctionItem), "EndType":endType, "EndEvent":endEvent}
DR_AuctionHouse(None, "EndAuctionItem", drDict)
@@ -661,8 +809,9 @@
notifyAddItemList = [] # 新增拍品通知 [[itemGUID, itemID, playerID], ...]
notifyFamilyAddItemDict = {} # 新增仙盟拍品通知 {familyID:[auctionItem, ...], ...}
for playerID, familyID, familyPlayerIDList, itemData in addAuctionItemList:
- if not playerID and not familyID:
- continue
+ #系统拍品玩家ID、仙盟ID都为0,可上架,这里不再限制
+ #if not playerID and not familyID:
+ # continue
auctionItem = __DoAddAuctionItem(curPlayer, playerID, familyID, familyPlayerIDList, itemData)
if not auctionItem:
@@ -1394,3 +1543,11 @@
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AddFamilyAuctionItem, [mapID, familyAuctionItemDict])
return
+def DoAddSystemAuctionItem(sysAuctionItemList):
+ ''' 上架系统拍品
+ '''
+ mapID = ChConfig.Def_FBMapID_MainCity
+ GameWorld.Log("发送地图上架系统拍品: mapID=%s, %s" % (mapID, sysAuctionItemList))
+ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AddSystemAuctionItem, [mapID, sysAuctionItemList])
+ return
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 5dd62fb..bebae61 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -357,6 +357,8 @@
PlayerFBHelpBattle.OnMinuteProcess()
#红包
PlayerFamilyRedPacket.OnRedPacketMinuteProcess()
+ #拍卖行
+ AuctionHouse.OnAuctionItemMinuteProcess()
#每5分钟触发一次仙盟总战力更新
if curMinute % 5 == 0:
PlayerFamily.UpdFamilyTotalFightPower()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 6a43b21..ef4336f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -73,6 +73,19 @@
("BYTE", "Sortpriority", 0),
),
+ "AuctionSystemItem":(
+ ("DWORD", "CfgID", 1),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("char", "StartTime", 0),
+ ("char", "EndTime", 0),
+ ("BYTE", "AuctionCount", 0),
+ ("list", "RandMinuteRange", 0),
+ ("list", "ItemCountWeightList", 0),
+ ("list", "AuctionItemWeightList", 0),
+ ("list", "RandMailKeyList", 0),
+ ),
+
"DailyAction":(
("DWORD", "DailyID", 1),
("dict", "OpenTimeDict", 0),
@@ -622,6 +635,33 @@
def GetBiddingAdd(self): return self.BiddingAdd # 竞价增加
def GetNeedWorldNotify(self): return self.NeedWorldNotify # 是否需要广播
def GetSortpriority(self): return self.Sortpriority # 排序优先级归组
+
+# 拍卖行系统拍品表
+class IPY_AuctionSystemItem():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.StartTime = ""
+ self.EndTime = ""
+ self.AuctionCount = 0
+ self.RandMinuteRange = []
+ self.ItemCountWeightList = []
+ self.AuctionItemWeightList = []
+ self.RandMailKeyList = []
+ return
+
+ def GetCfgID(self): return self.CfgID
+ def GetStartDate(self): return self.StartDate # 开启日期
+ def GetEndDate(self): return self.EndDate # 结束日期
+ def GetStartTime(self): return self.StartTime # 开启时间
+ def GetEndTime(self): return self.EndTime # 结束时间
+ def GetAuctionCount(self): return self.AuctionCount # 上架次数
+ def GetRandMinuteRange(self): return self.RandMinuteRange # 上架随机间隔分钟下限|上限
+ def GetItemCountWeightList(self): return self.ItemCountWeightList # 上架随机件数权重列表, [[权重, 件数], ...]
+ def GetAuctionItemWeightList(self): return self.AuctionItemWeightList # 上架物品随机权重, [[权重, 物品ID],[权重, [阶,颜色,部位集合,是否套装,星级]] ...]
+ def GetRandMailKeyList(self): return self.RandMailKeyList # 上架随机邮件列表,有配置时上架的时候在线玩家会收到一封上架邮件提醒
# 日常活动表
class IPY_DailyAction():
@@ -1622,6 +1662,8 @@
self.ipyMarketQueryLen = len(self.ipyMarketQueryCache)
self.ipyAuctionItemCache = self.__LoadFileData("AuctionItem", IPY_AuctionItem)
self.ipyAuctionItemLen = len(self.ipyAuctionItemCache)
+ self.ipyAuctionSystemItemCache = self.__LoadFileData("AuctionSystemItem", IPY_AuctionSystemItem)
+ self.ipyAuctionSystemItemLen = len(self.ipyAuctionSystemItemCache)
self.ipyDailyActionCache = self.__LoadFileData("DailyAction", IPY_DailyAction)
self.ipyDailyActionLen = len(self.ipyDailyActionCache)
self.ipyDailyActionCustomCache = self.__LoadFileData("DailyActionCustom", IPY_DailyActionCustom)
@@ -1884,6 +1926,8 @@
def GetMarketQueryByIndex(self, index): return self.ipyMarketQueryCache[index]
def GetAuctionItemCount(self): return self.ipyAuctionItemLen
def GetAuctionItemByIndex(self, index): return self.ipyAuctionItemCache[index]
+ def GetAuctionSystemItemCount(self): return self.ipyAuctionSystemItemLen
+ def GetAuctionSystemItemByIndex(self, index): return self.ipyAuctionSystemItemCache[index]
def GetDailyActionCount(self): return self.ipyDailyActionLen
def GetDailyActionByIndex(self, index): return self.ipyDailyActionCache[index]
def GetDailyActionCustomCount(self): return self.ipyDailyActionCustomLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 69cc74b..c5739ce 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -169,6 +169,7 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据
Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem" # 添加仙盟拍品
+Def_Notify_WorldKey_AddSystemAuctionItem = "AddSystemAuctionItem" # 添加系统拍品
Def_Notify_WorldKey_CrossServerConnState = "CrossServerConnState" # 跨服服务器链接状态
Def_Notify_WorldKey_CrossServerOpen = "CrossServerOpen" # 跨服服务器是否开启中
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index ea38c91..dfe8ab3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -2289,7 +2289,7 @@
''' 获取功能产出的物品实例
@param isAuctionItem: 是否拍品,默认非拍品
@param expireTime: 有效时间,时间单位由时效类型决定
- @param curPlayer: 产出该物品时的玩家,非拍品时需传入该值,物品某些属性由玩家等级决定,如传奇属性
+ @param curPlayer: 产出该物品时的玩家,物品某些属性由玩家等级决定,如传奇属性
@param isAllAttr: 是否生成该装备所有属性,GM创建物品时用,需验证相关权限
'''
curItem = ItemCommon.CreateSingleItem(itemID, itemCount, isAuctionItem, expireTime)
@@ -2345,11 +2345,13 @@
if not legendAttrCountInfoList:
return
- if not curPlayer:
- GameWorld.ErrLog("生成装备传奇属性时玩家不存在!itemID=%s" % (itemID))
- return
-
- playerID, playerLV = curPlayer.GetPlayerID(), curPlayer.GetLV()
+ if curPlayer:
+ playerID, playerLV = curPlayer.GetPlayerID(), curPlayer.GetLV()
+ else:
+ playerID = 0
+ playerLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
+ GameWorld.Log("生成装备传奇属性时没有玩家等级, 取当前世界等级! itemID=%s,worldLV=%s" % (itemID, playerLV))
+
# 2. 定属性ID
attrTypeIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrType", itemType)
if not attrTypeIpyData:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
index 9eb69c0..3260143 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
@@ -24,7 +24,9 @@
import ChConfig
import ShareDefine
import PlayerActivity
+import NPCCommon
+import random
import time
#// B5 13 拍卖行上架拍品 #tagCMSellAuctionItem
@@ -204,6 +206,46 @@
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_AuctionItem, 1)
return
+def DoAddSystemAuctionItem(sysAuctionItemList):
+ ''' 上架系统拍品
+ @param sysAuctionItemList: [物品ID, [阶,颜色,[部位, ...],是否套装,星级]]
+ '''
+ GameWorld.Log("上架系统拍品: %s" % sysAuctionItemList)
+
+ itemCount = 1 # 系统拍品,默认上架一个
+ isAuctionItem = True
+ auctionItemList = []
+ for sysAuctionItemInfo in sysAuctionItemList:
+ if type(sysAuctionItemInfo) == int:
+ itemID = sysAuctionItemInfo
+ elif type(sysAuctionItemInfo) == list and len(sysAuctionItemInfo) >= 5:
+ classLV, color, placeList, isSuit, star = sysAuctionItemInfo[:5]
+ if star:
+ # 有星级的代表非境界装备,暂不处理,之后有需要扩展
+ randEquipIDList = []
+ else:
+ itemJobList = sysAuctionItemInfo[5] if len(sysAuctionItemInfo) > 5 else []
+ randEquipIDList = NPCCommon.__GetEquipIDList(0, classLV, color, isSuit, placeList, itemJobList, findType="SystemAuctionItem")
+ if not randEquipIDList:
+ GameWorld.ErrLog("系统拍品找不到可上架的装备! %s" % str(sysAuctionItemInfo))
+ continue
+ itemID = random.choice(randEquipIDList)
+ else:
+ GameWorld.ErrLog("系统拍品格式错误,无法上架! %s" % str(sysAuctionItemInfo))
+ continue
+ ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
+ if not ipyData:
+ GameWorld.ErrLog("非拍卖物品,无法上架系统拍品! itemID=%s" % (itemID))
+ continue
+ curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem)
+ if not curItem:
+ continue
+ auctionItemList.append([curItem])
+ if not auctionItemList:
+ return
+ __DoAddAuctionItem(None, auctionItemList)
+ return
+
def DR_AuctionHouse(curPlayer, eventName, drDict):
accID = "" if not curPlayer else curPlayer.GetAccID()
playerID = 0 if not curPlayer else curPlayer.GetPlayerID()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 0eb6eb3..3a55786 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -1289,6 +1289,12 @@
PlayerAuctionHouse.DoAddFamilyAuctionItem(familyAuctionItemDict)
return
+ if key == ShareDefine.Def_Notify_WorldKey_AddSystemAuctionItem:
+ mapID, sysAuctionItemList = eval(msgValue)
+ if GameWorld.GetMap().GetMapID() == mapID:
+ PlayerAuctionHouse.DoAddSystemAuctionItem(sysAuctionItemList)
+ return
+
if key == ShareDefine.Def_Notify_WorldKey_FairyDomainLimit:
isAdd, limitList = eval(msgValue)
if isAdd:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index d09fbab..c5739ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -169,6 +169,7 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据
Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem" # 添加仙盟拍品
+Def_Notify_WorldKey_AddSystemAuctionItem = "AddSystemAuctionItem" # 添加系统拍品
Def_Notify_WorldKey_CrossServerConnState = "CrossServerConnState" # 跨服服务器链接状态
Def_Notify_WorldKey_CrossServerOpen = "CrossServerOpen" # 跨服服务器是否开启中
@@ -619,7 +620,7 @@
Def_BT_NewFCCostGold, #消费排行榜(新仙界盛典)
Def_BT_Campaign_LingGen, #灵根总点(开服活动榜)
- Def_BT_Campaign_StarLV, #升星等级(开服活动榜)
+ Def_BT_Campaign_StarLV, #升星等级(开服活动榜) 25
Def_BT_Max, #排行榜最大类型
) = range(0, 25 + 2)
--
Gitblit v1.8.0