From af5522def1cb54b7754696424edd3d392dea8105 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 28 八月 2024 17:41:02 +0800
Subject: [PATCH] 10256 【越南】【砍树】排行榜名次加入积分限制 1. 跨服榜增加延迟排序,每分钟对变更数据且不实时排序的榜单进行排序,或玩家查询时触发排序; 2. 骑宠跨服榜改为仅更新数据,不实时排序; 3. 骑宠养成增加各排名上榜积分限制;增加名次达标积分额外奖励;去除跨服榜单上榜限制配置,统一取榜单模版中最后一条限制作为保底限制;
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 10
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_QueryBillboardCross.py | 1
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 2
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActHorsePetTrain.py | 143 ++++++++----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 205 ++++++++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py | 23 ++
PySysDB/PySysDBPY.h | 2
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py | 39 +++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 205 ++++++++++++++++--
PySysDB/PySysDBG.h | 3
11 files changed, 532 insertions(+), 107 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 4a1396f..843631d 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -649,7 +649,6 @@
char EndDate; //结束日期
char JoinStartTime; //参与开始时间点
char JoinEndTime; //参与结束时间点
- WORD RankLimitPersonal; //个人上榜积分限制
WORD PersonalTemplateID; //个人排行模板编号
};
@@ -660,6 +659,8 @@
DWORD _TemplateID; //模板编号
BYTE Rank; //名次
list AwardItemList; //奖励物品列表[[物品ID,个数,是否拍品], ...]
+ DWORD NeedScore; //上榜所需积分
+ dict ScoreAwardEx; //达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
};
//古宝养成活动时间表
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 8267ff7..216cc06 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1924,6 +1924,8 @@
DWORD _TemplateID; //模板编号
BYTE Rank; //名次
list AwardItemList; //奖励物品列表[[物品ID,个数,是否拍品], ...]
+ DWORD NeedScore; //上榜所需积分
+ dict ScoreAwardEx; //达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...}
};
//古宝养成活动时间表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index bd75dcc..fdf076f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -36064,10 +36064,10 @@
return DumpString
-class tagMCActHorsePetTrainBillard(Structure):
- Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
- Count = 0 #(BYTE Count)// 奖励物品数
- AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+class tagMCActHorsePetTrainAwardEx(Structure):
+ NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分
+ Count = 0 #(BYTE Count)// 额外奖励物品数
+ AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
data = None
def __init__(self):
@@ -36076,7 +36076,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.Count):
temAwardItemList = tagMCActHorsePetTrainItem()
@@ -36085,7 +36085,7 @@
return _pos
def Clear(self):
- self.Rank = 0
+ self.NeedScore = 0
self.Count = 0
self.AwardItemList = list()
return
@@ -36101,7 +36101,7 @@
def GetBuffer(self):
data = ''
- data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
data = CommFunc.WriteBYTE(data, self.Count)
for i in range(self.Count):
data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -36109,13 +36109,96 @@
def OutputString(self):
DumpString = '''
- Rank:%d,
+ NeedScore:%d,
Count:%d,
AwardItemList:%s
'''\
%(
+ self.NeedScore,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActHorsePetTrainBillard(Structure):
+ Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+ NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分
+ CountEx = 0 #(BYTE CountEx)// 额外奖励数
+ AwardItemExList = list() #(vector<tagMCActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCActHorsePetTrainItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CountEx):
+ temAwardItemExList = tagMCActHorsePetTrainAwardEx()
+ _pos = temAwardItemExList.ReadData(_lpData, _pos)
+ self.AwardItemExList.append(temAwardItemExList)
+ return _pos
+
+ def Clear(self):
+ self.Rank = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ self.NeedScore = 0
+ self.CountEx = 0
+ self.AwardItemExList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+ length += 4
+ length += 1
+ for i in range(self.CountEx):
+ length += self.AwardItemExList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
+ data = CommFunc.WriteBYTE(data, self.CountEx)
+ for i in range(self.CountEx):
+ data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Rank:%d,
+ Count:%d,
+ AwardItemList:%s,
+ NeedScore:%d,
+ CountEx:%d,
+ AwardItemExList:%s
+ '''\
+ %(
self.Rank,
self.Count,
+ "...",
+ self.NeedScore,
+ self.CountEx,
"..."
)
return DumpString
@@ -41742,10 +41825,10 @@
return DumpString
-class tagMCCrossActHorsePetTrainBillard(Structure):
- Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
- Count = 0 #(BYTE Count)// 奖励物品数
- AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+class tagMCCrossActHorsePetTrainAwardEx(Structure):
+ NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分
+ Count = 0 #(BYTE Count)// 额外奖励物品数
+ AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
data = None
def __init__(self):
@@ -41754,7 +41837,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.Count):
temAwardItemList = tagMCCrossActHorsePetTrainItem()
@@ -41763,7 +41846,7 @@
return _pos
def Clear(self):
- self.Rank = 0
+ self.NeedScore = 0
self.Count = 0
self.AwardItemList = list()
return
@@ -41779,7 +41862,7 @@
def GetBuffer(self):
data = ''
- data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
data = CommFunc.WriteBYTE(data, self.Count)
for i in range(self.Count):
data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -41787,13 +41870,96 @@
def OutputString(self):
DumpString = '''
- Rank:%d,
+ NeedScore:%d,
Count:%d,
AwardItemList:%s
'''\
%(
+ self.NeedScore,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCCrossActHorsePetTrainBillard(Structure):
+ Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+ NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分
+ CountEx = 0 #(BYTE CountEx)// 额外奖励数
+ AwardItemExList = list() #(vector<tagMCCrossActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCCrossActHorsePetTrainItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CountEx):
+ temAwardItemExList = tagMCCrossActHorsePetTrainAwardEx()
+ _pos = temAwardItemExList.ReadData(_lpData, _pos)
+ self.AwardItemExList.append(temAwardItemExList)
+ return _pos
+
+ def Clear(self):
+ self.Rank = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ self.NeedScore = 0
+ self.CountEx = 0
+ self.AwardItemExList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+ length += 4
+ length += 1
+ for i in range(self.CountEx):
+ length += self.AwardItemExList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
+ data = CommFunc.WriteBYTE(data, self.CountEx)
+ for i in range(self.CountEx):
+ data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Rank:%d,
+ Count:%d,
+ AwardItemList:%s,
+ NeedScore:%d,
+ CountEx:%d,
+ AwardItemExList:%s
+ '''\
+ %(
self.Rank,
self.Count,
+ "...",
+ self.NeedScore,
+ self.CountEx,
"..."
)
return DumpString
@@ -41808,7 +41974,6 @@
EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss
JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss
- RankLimitPersonal = 0 #(WORD RankLimitPersonal)// 个人榜上榜积分保底限制;
PersonalBillCount = 0 #(BYTE PersonalBillCount)
PersonalBillboardInfoList = list() #(vector<tagMCCrossActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
data = None
@@ -41829,7 +41994,6 @@
self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
- self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.PersonalBillCount):
temPersonalBillboardInfoList = tagMCCrossActHorsePetTrainBillard()
@@ -41849,7 +42013,6 @@
self.EndtDate = ""
self.JoinStartTime = ""
self.JoinEndTime = ""
- self.RankLimitPersonal = 0
self.PersonalBillCount = 0
self.PersonalBillboardInfoList = list()
return
@@ -41864,7 +42027,6 @@
length += 10
length += 5
length += 5
- length += 2
length += 1
for i in range(self.PersonalBillCount):
length += self.PersonalBillboardInfoList[i].GetLength()
@@ -41881,7 +42043,6 @@
data = CommFunc.WriteString(data, 10, self.EndtDate)
data = CommFunc.WriteString(data, 5, self.JoinStartTime)
data = CommFunc.WriteString(data, 5, self.JoinEndTime)
- data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
for i in range(self.PersonalBillCount):
data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -41897,7 +42058,6 @@
EndtDate:%s,
JoinStartTime:%s,
JoinEndTime:%s,
- RankLimitPersonal:%d,
PersonalBillCount:%d,
PersonalBillboardInfoList:%s
'''\
@@ -41910,7 +42070,6 @@
self.EndtDate,
self.JoinStartTime,
self.JoinEndTime,
- self.RankLimitPersonal,
self.PersonalBillCount,
"..."
)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_QueryBillboardCross.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_QueryBillboardCross.py
index 0fcb5b0..eae8484 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_QueryBillboardCross.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_QueryBillboardCross.py
@@ -61,6 +61,7 @@
if groupValue1 != None and groupValue2 != None:
billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
+ billboardObj.DoDelaySort()
dataTotal = billboardObj.GetCount()
fromIndex = startRank - 1
toIndex = fromIndex + queryCount
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
index ccb8aa3..2f8cfed 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBillboard.py
@@ -115,6 +115,7 @@
self.__clientServerDataVer = 0 # 子服榜单数据版本
self.__billboardList = [] # [tagDBCrossBillboard, ...]
self.__idOrderDict = {} # {id:名次, ...}
+ self.__sortDelay = False # 是否需要延迟排序
return
def GetBillboardType(self): return self.__billboardType
@@ -133,9 +134,27 @@
return
def SortData(self):
+ GameWorld.DebugLog("跨服榜单排序: billboardType=%s,groupValue1=%s,groupValue2=%s,dataCount=%s"
+ % (self.__billboardType, self.__groupValue1, self.__groupValue2, len(self.__billboardList)))
self.__billboardList.sort(key=operator.attrgetter("CmpValue", "CmpValue2", "CmpValue3"), reverse=True)
self.__idOrderDict = {} # 排序后重置,下次查询时更新并缓存
+ self.__sortDelay = False
self.UpdCrossServerDataVer()
+ return
+
+ def SetDelaySort(self):
+ ## 设置延迟排序
+ GameWorld.DebugLog("跨服榜单设置延迟排序: billboardType=%s,groupValue1=%s,groupValue2=%s,dataCount=%s"
+ % (self.__billboardType, self.__groupValue1, self.__groupValue2, len(self.__billboardList)))
+ self.__sortDelay = True
+ self.UpdCrossServerDataVer()
+ return
+
+ def DoDelaySort(self):
+ ## 延迟排序
+ if not self.__sortDelay:
+ return
+ self.SortData()
return
def AddBillboardData(self, billboardData):
@@ -172,6 +191,7 @@
def SaveDRData(self, eventName="", addDataDict={}):
## 记录流向数据
+ self.DoDelaySort()
dataCount = len(self.__billboardList)
if not dataCount:
return
@@ -288,6 +308,15 @@
for billboardType, groupValue1, groupValue2 in groupList:
billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
billboardObj.SaveDRData("OnDay")
+ return
+
+def OnMinuteProcess():
+ billboardMgr = PyDataManager.GetCrossBillboardManager()
+ for billboardType in ShareDefine.CrossBillboardTypeList:
+ groupList = billboardMgr.GetBillboardGroupList(billboardType)
+ for billboardType, groupValue1, groupValue2 in groupList:
+ billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
+ billboardObj.DoDelaySort()
return
def CopyBillboard(fromBillboardType, toBillboardType):
@@ -419,6 +448,7 @@
queryData = {}
billboardMgr = PyDataManager.GetCrossBillboardManager()
billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)
+ billboardObj.DoDelaySort()
crossServerDataVer = billboardObj.GetCrossServerDataVer()
msgData = {"BillboardType":billboardType, "GroupValue1":groupValue1, "GroupValue2":groupValue2,
"QueryData":queryData, "CrossServerDataVer":crossServerDataVer}
@@ -757,8 +787,15 @@
type2, value1, value2, cmpValue, cmpValue2, cmpValue3, kwargs), dataID)
if noSortAndSync:
return True
- if autoSort and cmpValueChange:
+
+ # 新数据可能导致榜单ID增减,强制排序一次
+ if isNewData:
billboardObj.SortData()
+ elif cmpValueChange:
+ if autoSort:
+ billboardObj.SortData()
+ else:
+ billboardObj.SetDelaySort()
else:
billboardObj.UpdCrossServerDataVer()
return True
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 52c586c..6d688c0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -375,6 +375,8 @@
DisposeGameActivePlayer(tick)
#处理游戏世界中的时间事件
DisposeGameWorldEvenByTime(tick)
+ #榜单
+ CrossBillboard.OnMinuteProcess()
GameWorldActionControl.Dispose_OperationActionState()
GameWorldActionControl.Dispose_DailyActionState()
GameWorldActionControl.Dispose_FBStateTime()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 984506e..01be09c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -539,7 +539,6 @@
("char", "EndDate", 0),
("char", "JoinStartTime", 0),
("char", "JoinEndTime", 0),
- ("WORD", "RankLimitPersonal", 0),
("WORD", "PersonalTemplateID", 0),
),
@@ -547,6 +546,8 @@
("DWORD", "TemplateID", 1),
("BYTE", "Rank", 0),
("list", "AwardItemList", 0),
+ ("DWORD", "NeedScore", 0),
+ ("dict", "ScoreAwardEx", 0),
),
"ActGubao":(
@@ -1892,8 +1893,7 @@
def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
def GetJoinStartTime(self): return self.attrTuple[6] # 参与开始时间点 char
def GetJoinEndTime(self): return self.attrTuple[7] # 参与结束时间点 char
- def GetRankLimitPersonal(self): return self.attrTuple[8] # 个人上榜积分限制 WORD
- def GetPersonalTemplateID(self): return self.attrTuple[9] # 个人排行模板编号 WORD
+ def GetPersonalTemplateID(self): return self.attrTuple[8] # 个人排行模板编号 WORD
# 骑宠养成榜单模版表
class IPY_ActHorsePetTrainBillTemp():
@@ -1904,7 +1904,9 @@
def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
def GetRank(self): return self.attrTuple[1] # 名次 BYTE
- def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
+ def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
+ def GetNeedScore(self): return self.attrTuple[3] # 上榜所需积分 DWORD
+ def GetScoreAwardEx(self): return self.attrTuple[4] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
# 古宝养成活动时间表
class IPY_ActGubao():
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActHorsePetTrain.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActHorsePetTrain.py
index b1116b7..a08bd2d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActHorsePetTrain.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerActHorsePetTrain.py
@@ -85,36 +85,54 @@
if not templateID:
GameWorld.Log("本次活动没有个人榜奖励!")
return
- tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", templateID)
- if not tempIpyDataList:
+ billboardDataCount = billBoard.GetCount()
+ billBoard.Sort()
+
+ GameWorld.Log("结算个人榜单奖励: billboardType=%s,templateID=%s,billboardDataCount=%s" % (billboardType, templateID, billboardDataCount))
+
+ orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", templateID)
+ if not orderIpyDataList:
return
- rankAwardDict = {}
- for tempIpyData in tempIpyDataList:
- rankAwardDict[tempIpyData.GetRank()] = tempIpyData.GetAwardItemList()
+ rankPre = 0
+ billboardIndex = 0
+ for ipyData in orderIpyDataList:
+ rank = ipyData.GetRank()
+ needScore = ipyData.GetNeedScore()
+ scoreAwardEx = ipyData.GetScoreAwardEx()
+ scoreAwardExList = scoreAwardEx.keys()
+ awardItemList = ipyData.GetAwardItemList()
+ orderCountTotal = rank - rankPre # 奖励名次数量
+ rankPre = rank
- GameWorld.Log("结算个人榜单奖励: templateID=%s,rankAwardDict=%s" % (templateID, rankAwardDict))
- billBoard.Sort()
- for index in xrange(billBoard.GetCount()):
- billBoardData = billBoard.At(index)
- if not billBoardData:
- continue
-
- rank = index + 1
-
- awardItemList = GameWorld.GetOrderValueByDict(rankAwardDict, rank, False)
- if not awardItemList:
- break
-
- playerID = billBoardData.GetID()
- name2 = billBoardData.GetName2()
- cmpValue = billBoardData.GetCmpValue()
-
- GameWorld.Log(" 发放骑宠养成个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s"
- % (rank, playerID, cmpValue, awardItemList, name2))
-
- PlayerCompensation.SendMailByKey("ActHorsePetTrainPlayer", [playerID], awardItemList, [rank])
-
+ for index in xrange(billboardIndex, billboardDataCount):
+ if orderCountTotal <= 0:
+ break
+
+ billBoardData = billBoard.At(index)
+ playerID = billBoardData.GetID()
+ name2 = billBoardData.GetName2()
+ cmpValue = billBoardData.GetCmpValue()
+
+ if cmpValue < needScore:
+ GameWorld.Log(" 积分不足该榜单所需积分,跳过该名次: index=%s,rank=%s,playerID=%s,cmpValue=%s < %s" % (index, rank, playerID, cmpValue, needScore))
+ break
+
+ awardItemExList = []
+ for scoreEx in scoreAwardExList:
+ if cmpValue < scoreEx:
+ break
+ awardItemExList = scoreAwardEx[scoreEx] # 取最大满足条件的一档
+ finalAwardItemList = awardItemList + awardItemExList
+
+ playerRank = rank - orderCountTotal + 1
+ GameWorld.Log(" 发放骑宠养成个人榜单奖励: index=%s,rank=%s,playerRank=%s,playerID=%s,cmpValue=%s,awardItemList=%s,scoreAwardEx=%s,finalAwardItemList=%s, %s"
+ % (index, rank, playerRank, playerID, cmpValue, awardItemList, scoreAwardEx, finalAwardItemList, name2))
+ PlayerCompensation.SendMailByKey("ActHorsePetTrainPlayer", [playerID], finalAwardItemList, [playerRank])
+
+ orderCountTotal -= 1
+ billboardIndex += 1
+
return
def MapServer_HorsePetTrain(curPlayer, msgList):
@@ -187,7 +205,12 @@
ipyData = IpyGameDataPY.GetIpyGameData("CrossActHorsePetTrain", cfgID)
if not ipyData:
return
- personlLimit = ipyData.GetRankLimitPersonal()
+ PersonalTemplateID = ipyData.GetPersonalTemplateID()
+ rankIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", PersonalTemplateID)
+ if not rankIpyDataList:
+ return
+ lastRankIpyData = rankIpyDataList[-1] # 取最后一个为最低上榜积分限制
+ personlLimit = lastRankIpyData.GetNeedScore()
playerID = playerInfo["playerID"]
playerName = playerInfo["playerName"]
@@ -201,7 +224,7 @@
if playerScore >= personlLimit:
name2, type2, value1, value2 = accID, job, realmLV, 0
CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_HorsePetTrainScore, groupValue1, playerID, playerName,
- name2, type2, value1, value2, playerScore)
+ name2, type2, value1, value2, playerScore, autoSort=False)
return
def OnCrossActIDChange(cfgID, zoneID, ipyData, state):
@@ -278,32 +301,46 @@
% (billboardType, zoneID, cfgID, templateID, billboardDataCount))
orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActHorsePetTrainBillTemp", templateID)
- if orderIpyDataList:
- rankPre = 0
- billboardIndex = 0
- for ipyData in orderIpyDataList:
- rank = ipyData.GetRank()
- awardItemList = ipyData.GetAwardItemList()
- orderCountTotal = rank - rankPre # 奖励名次数量
- rankPre = rank
- orderCount = 0
+ if not orderIpyDataList:
+ return
+
+ rankPre = 0
+ billboardIndex = 0
+ for ipyData in orderIpyDataList:
+ rank = ipyData.GetRank()
+ needScore = ipyData.GetNeedScore()
+ scoreAwardEx = ipyData.GetScoreAwardEx()
+ scoreAwardExList = scoreAwardEx.keys()
+ awardItemList = ipyData.GetAwardItemList()
+ orderCountTotal = rank - rankPre # 奖励名次数量
+ rankPre = rank
+
+ for index in xrange(billboardIndex, billboardDataCount):
+ if orderCountTotal <= 0:
+ break
- for index in xrange(billboardIndex, billboardDataCount):
- if orderCount >= orderCountTotal:
+ billboardData = billboardObj.At(index)
+ playerID = billboardData.ID
+ name2 = billboardData.Name2
+ cmpValue = billboardData.CmpValue
+ if cmpValue < needScore:
+ GameWorld.Log(" 积分不足该榜单所需积分,跳过该名次: index=%s,rank=%s,playerID=%s,cmpValue=%s < %s" % (index, rank, playerID, cmpValue, needScore))
+ break
+
+ awardItemExList = []
+ for scoreEx in scoreAwardExList:
+ if cmpValue < scoreEx:
break
-
- billboardData = billboardObj.At(index)
- playerID = billboardData.ID
- name2 = billboardData.Name2
- cmpValue = billboardData.CmpValue
-
- playerRank = index + 1
- GameWorld.Log(" 发放骑宠养成个人榜单奖励: rank=%s,playerID=%s,cmpValue=%s,awardItemList=%s, %s"
- % (rank, playerID, cmpValue, awardItemList, name2))
- PlayerCompensation.SendMailByKey("ActHorsePetTrainCrossPlayer", [playerID], awardItemList, [playerRank], crossMail=True)
-
- orderCount += 1
- billboardIndex += 1
+ awardItemExList = scoreAwardEx[scoreEx] # 取最大满足条件的一档
+ finalAwardItemList = awardItemList + awardItemExList
+
+ playerRank = rank - orderCountTotal + 1
+ GameWorld.Log(" 发放骑宠养成个人榜单奖励: index=%s,rank=%s,playerRank=%s,playerID=%s,cmpValue=%s,awardItemList=%s,scoreAwardEx=%s,finalAwardItemList=%s, %s"
+ % (index, rank, playerRank, playerID, cmpValue, awardItemList, scoreAwardEx, finalAwardItemList, name2))
+ PlayerCompensation.SendMailByKey("ActHorsePetTrainCrossPlayer", [playerID], finalAwardItemList, [playerRank], crossMail=True)
+
+ orderCountTotal -= 1
+ billboardIndex += 1
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index bd75dcc..fdf076f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -36064,10 +36064,10 @@
return DumpString
-class tagMCActHorsePetTrainBillard(Structure):
- Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
- Count = 0 #(BYTE Count)// 奖励物品数
- AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+class tagMCActHorsePetTrainAwardEx(Structure):
+ NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分
+ Count = 0 #(BYTE Count)// 额外奖励物品数
+ AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
data = None
def __init__(self):
@@ -36076,7 +36076,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.Count):
temAwardItemList = tagMCActHorsePetTrainItem()
@@ -36085,7 +36085,7 @@
return _pos
def Clear(self):
- self.Rank = 0
+ self.NeedScore = 0
self.Count = 0
self.AwardItemList = list()
return
@@ -36101,7 +36101,7 @@
def GetBuffer(self):
data = ''
- data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
data = CommFunc.WriteBYTE(data, self.Count)
for i in range(self.Count):
data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -36109,13 +36109,96 @@
def OutputString(self):
DumpString = '''
- Rank:%d,
+ NeedScore:%d,
Count:%d,
AwardItemList:%s
'''\
%(
+ self.NeedScore,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActHorsePetTrainBillard(Structure):
+ Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+ NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分
+ CountEx = 0 #(BYTE CountEx)// 额外奖励数
+ AwardItemExList = list() #(vector<tagMCActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCActHorsePetTrainItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CountEx):
+ temAwardItemExList = tagMCActHorsePetTrainAwardEx()
+ _pos = temAwardItemExList.ReadData(_lpData, _pos)
+ self.AwardItemExList.append(temAwardItemExList)
+ return _pos
+
+ def Clear(self):
+ self.Rank = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ self.NeedScore = 0
+ self.CountEx = 0
+ self.AwardItemExList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+ length += 4
+ length += 1
+ for i in range(self.CountEx):
+ length += self.AwardItemExList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
+ data = CommFunc.WriteBYTE(data, self.CountEx)
+ for i in range(self.CountEx):
+ data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Rank:%d,
+ Count:%d,
+ AwardItemList:%s,
+ NeedScore:%d,
+ CountEx:%d,
+ AwardItemExList:%s
+ '''\
+ %(
self.Rank,
self.Count,
+ "...",
+ self.NeedScore,
+ self.CountEx,
"..."
)
return DumpString
@@ -41742,10 +41825,10 @@
return DumpString
-class tagMCCrossActHorsePetTrainBillard(Structure):
- Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
- Count = 0 #(BYTE Count)// 奖励物品数
- AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+class tagMCCrossActHorsePetTrainAwardEx(Structure):
+ NeedScore = 0 #(DWORD NeedScore)// 额外奖励所需积分
+ Count = 0 #(BYTE Count)// 额外奖励物品数
+ AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 额外奖励物品列表
data = None
def __init__(self):
@@ -41754,7 +41837,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.Count):
temAwardItemList = tagMCCrossActHorsePetTrainItem()
@@ -41763,7 +41846,7 @@
return _pos
def Clear(self):
- self.Rank = 0
+ self.NeedScore = 0
self.Count = 0
self.AwardItemList = list()
return
@@ -41779,7 +41862,7 @@
def GetBuffer(self):
data = ''
- data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
data = CommFunc.WriteBYTE(data, self.Count)
for i in range(self.Count):
data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
@@ -41787,13 +41870,96 @@
def OutputString(self):
DumpString = '''
- Rank:%d,
+ NeedScore:%d,
Count:%d,
AwardItemList:%s
'''\
%(
+ self.NeedScore,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCCrossActHorsePetTrainBillard(Structure):
+ Rank = 0 #(DWORD Rank)// 名次,1-代表第一名;支持夸段,如1,3 代表第1名,第2~3名
+ Count = 0 #(BYTE Count)// 奖励物品数
+ AwardItemList = list() #(vector<tagMCCrossActHorsePetTrainItem> AwardItemList)// 奖励物品列表
+ NeedScore = 0 #(DWORD NeedScore)// 上榜所需积分
+ CountEx = 0 #(BYTE CountEx)// 额外奖励数
+ AwardItemExList = list() #(vector<tagMCCrossActHorsePetTrainAwardEx> AwardItemExList)// 额外奖励列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Rank,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAwardItemList = tagMCCrossActHorsePetTrainItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ self.NeedScore,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.CountEx):
+ temAwardItemExList = tagMCCrossActHorsePetTrainAwardEx()
+ _pos = temAwardItemExList.ReadData(_lpData, _pos)
+ self.AwardItemExList.append(temAwardItemExList)
+ return _pos
+
+ def Clear(self):
+ self.Rank = 0
+ self.Count = 0
+ self.AwardItemList = list()
+ self.NeedScore = 0
+ self.CountEx = 0
+ self.AwardItemExList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ for i in range(self.Count):
+ length += self.AwardItemList[i].GetLength()
+ length += 4
+ length += 1
+ for i in range(self.CountEx):
+ length += self.AwardItemExList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.Rank)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.NeedScore)
+ data = CommFunc.WriteBYTE(data, self.CountEx)
+ for i in range(self.CountEx):
+ data = CommFunc.WriteString(data, self.AwardItemExList[i].GetLength(), self.AwardItemExList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Rank:%d,
+ Count:%d,
+ AwardItemList:%s,
+ NeedScore:%d,
+ CountEx:%d,
+ AwardItemExList:%s
+ '''\
+ %(
self.Rank,
self.Count,
+ "...",
+ self.NeedScore,
+ self.CountEx,
"..."
)
return DumpString
@@ -41808,7 +41974,6 @@
EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
JoinStartTime = "" #(char JoinStartTime[5])// 参与开始时间点 mm:ss
JoinEndTime = "" #(char JoinEndTime[5])// 参与结束时间点 mm:ss
- RankLimitPersonal = 0 #(WORD RankLimitPersonal)// 个人榜上榜积分保底限制;
PersonalBillCount = 0 #(BYTE PersonalBillCount)
PersonalBillboardInfoList = list() #(vector<tagMCCrossActHorsePetTrainBillard> PersonalBillboardInfoList)// 个人榜单奖励信息列表,如果没有代表本次活动没有该榜奖励
data = None
@@ -41829,7 +41994,6 @@
self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
self.JoinStartTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
self.JoinEndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
- self.RankLimitPersonal,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.PersonalBillCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.PersonalBillCount):
temPersonalBillboardInfoList = tagMCCrossActHorsePetTrainBillard()
@@ -41849,7 +42013,6 @@
self.EndtDate = ""
self.JoinStartTime = ""
self.JoinEndTime = ""
- self.RankLimitPersonal = 0
self.PersonalBillCount = 0
self.PersonalBillboardInfoList = list()
return
@@ -41864,7 +42027,6 @@
length += 10
length += 5
length += 5
- length += 2
length += 1
for i in range(self.PersonalBillCount):
length += self.PersonalBillboardInfoList[i].GetLength()
@@ -41881,7 +42043,6 @@
data = CommFunc.WriteString(data, 10, self.EndtDate)
data = CommFunc.WriteString(data, 5, self.JoinStartTime)
data = CommFunc.WriteString(data, 5, self.JoinEndTime)
- data = CommFunc.WriteWORD(data, self.RankLimitPersonal)
data = CommFunc.WriteBYTE(data, self.PersonalBillCount)
for i in range(self.PersonalBillCount):
data = CommFunc.WriteString(data, self.PersonalBillboardInfoList[i].GetLength(), self.PersonalBillboardInfoList[i].GetBuffer())
@@ -41897,7 +42058,6 @@
EndtDate:%s,
JoinStartTime:%s,
JoinEndTime:%s,
- RankLimitPersonal:%d,
PersonalBillCount:%d,
PersonalBillboardInfoList:%s
'''\
@@ -41910,7 +42070,6 @@
self.EndtDate,
self.JoinStartTime,
self.JoinEndTime,
- self.RankLimitPersonal,
self.PersonalBillCount,
"..."
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 8f7114e..ff3b49d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1523,6 +1523,8 @@
("DWORD", "TemplateID", 1),
("BYTE", "Rank", 0),
("list", "AwardItemList", 0),
+ ("DWORD", "NeedScore", 0),
+ ("dict", "ScoreAwardEx", 0),
),
"ActGubao":(
@@ -4625,7 +4627,9 @@
def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
def GetRank(self): return self.attrTuple[1] # 名次 BYTE
- def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
+ def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
+ def GetNeedScore(self): return self.attrTuple[3] # 上榜所需积分 DWORD
+ def GetScoreAwardEx(self): return self.attrTuple[4] # 达标积分额外奖励 {积分:[[物品ID,个数,是否拍品], ...], ...} dict
# 古宝养成活动时间表
class IPY_ActGubao():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
index f6c1cca..40afe79 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
@@ -279,7 +279,6 @@
clientPack.EndtDate = ipyDataDict.get("EndDate", "")
clientPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "")
clientPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "")
- clientPack.RankLimitPersonal = ipyDataDict.get("RankLimitPersonal", 0)
clientPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
clientPack.PersonalBillCount = len(clientPack.PersonalBillboardInfoList)
@@ -317,5 +316,27 @@
# rankInfo.MemAwardItemList.append(item)
# rankInfo.MemCount = len(rankInfo.MemAwardItemList)
+ rankInfo.NeedScore = tempIpyData.GetNeedScore()
+ rankInfo.AwardItemExList = []
+ scoreAwardEx = tempIpyData.GetScoreAwardEx()
+ scoreExList = scoreAwardEx.keys()
+ scoreExList.sort()
+ for scoreEx in scoreExList:
+ itemExList = scoreAwardEx[scoreEx]
+ awardEx = ChPyNetSendPack.tagMCActHorsePetTrainAwardEx()
+ awardEx.NeedScore = scoreEx
+ awardEx.AwardItemList = []
+ for itemID, itemCount, isAuctionItem in itemExList:
+ item = ChPyNetSendPack.tagMCActHorsePetTrainItem()
+ item.Clear()
+ item.ItemID = itemID
+ item.ItemCount = itemCount
+ item.IsBind = isAuctionItem
+ awardEx.AwardItemList.append(item)
+ awardEx.Count = len(awardEx.AwardItemList)
+
+ rankInfo.AwardItemExList.append(awardEx)
+ rankInfo.CountEx = len(rankInfo.AwardItemExList)
+
packBillList.append(rankInfo)
return packBillList
--
Gitblit v1.8.0