From 015bda0f16e211353534cbdcc95df92590dba881 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 24 十二月 2018 10:14:48 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(封包、赛区赛季表)
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 52 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 273 +++++++++++++++++++-----
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 10
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 273 +++++++++++++++++++-----
PySysDB/PySysDBG.h | 20 +
6 files changed, 522 insertions(+), 116 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 4e4e5c2..5065cfc 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -441,6 +441,26 @@
BYTE IsDayReset; //是否每天重置
};
+//跨服竞技场赛区表
+
+struct tagCrossRealmPKZone
+{
+ BYTE _ZoneID; //赛区ID
+ char ZoneName; //赛区名字
+ list ServerGroupIDList; //赛区服务器组ID列表
+};
+
+//跨服竞技场赛季表
+
+struct tagCrossRealmPKSeason
+{
+ BYTE _ZoneID; //赛区ID
+ BYTE SeasonID; //赛季ID
+ char StartDate; //开始日期 yyyy-MM-dd
+ char EndDate; //结束日期 yyyy-MM-dd
+ char EndTime; //结算时间 hh:mm
+};
+
//跨服竞技场段位表
struct tagCrossRealmPKDan
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 3d2aed2..3a2b105 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -8510,19 +8510,156 @@
#------------------------------------------------------
-# C0 04 跨服PK赛季信息 #tagGCCrossRealmPKSeason
+# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
class tagGCCrossRealmPKSeason(Structure):
- Head = tagHead()
- ZoneCount = 0 #(BYTE ZoneCount)// 所有赛区个数
- ZoneIDList = list() #(vector<BYTE> ZoneIDList)// 所有赛区列表
- ZoneID = 0 #(BYTE ZoneID)// 所属赛区ID
SeasonID = 0 #(WORD SeasonID)// 当前赛季ID
StartDate = "" #(char StartDate[10])// 开始日期 yyyy-MM-dd
EndDate = "" #(char EndDate[10])// 结束日期 yyyy-MM-dd
EndTime = "" #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
NextStartDate = "" #(char NextStartDate[10])// 下赛季开始日期 yyyy-MM-dd
NextEndDate = "" #(char NextEndDate[10])// 下赛季结束日期 yyyy-MM-dd
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+ self.NextStartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.NextEndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ return _pos
+
+ def Clear(self):
+ self.SeasonID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.EndTime = ""
+ self.NextStartDate = ""
+ self.NextEndDate = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 2
+ length += 10
+ length += 10
+ length += 5
+ length += 10
+ length += 10
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteWORD(data, self.SeasonID)
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndDate)
+ data = CommFunc.WriteString(data, 5, self.EndTime)
+ data = CommFunc.WriteString(data, 10, self.NextStartDate)
+ data = CommFunc.WriteString(data, 10, self.NextEndDate)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ SeasonID:%d,
+ StartDate:%s,
+ EndDate:%s,
+ EndTime:%s,
+ NextStartDate:%s,
+ NextEndDate:%s
+ '''\
+ %(
+ self.SeasonID,
+ self.StartDate,
+ self.EndDate,
+ self.EndTime,
+ self.NextStartDate,
+ self.NextEndDate
+ )
+ return DumpString
+
+
+class tagGCCrossRealmPKZone(Structure):
+ ZoneID = 0 #(BYTE ZoneID)// 赛区ID
+ ZoneNameLen = 0 #(BYTE ZoneNameLen)
+ ZoneName = "" #(String ZoneName)// 赛区名
+ SeasonCount = 0 #(WORD SeasonCount)
+ SeasonList = list() #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
+ self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.SeasonCount):
+ temSeasonList = tagGCCrossRealmPKSeason()
+ _pos = temSeasonList.ReadData(_lpData, _pos)
+ self.SeasonList.append(temSeasonList)
+ return _pos
+
+ def Clear(self):
+ self.ZoneID = 0
+ self.ZoneNameLen = 0
+ self.ZoneName = ""
+ self.SeasonCount = 0
+ self.SeasonList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += len(self.ZoneName)
+ length += 2
+ for i in range(self.SeasonCount):
+ length += self.SeasonList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ZoneID)
+ data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
+ data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
+ data = CommFunc.WriteWORD(data, self.SeasonCount)
+ for i in range(self.SeasonCount):
+ data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ZoneID:%d,
+ ZoneNameLen:%d,
+ ZoneName:%s,
+ SeasonCount:%d,
+ SeasonList:%s
+ '''\
+ %(
+ self.ZoneID,
+ self.ZoneNameLen,
+ self.ZoneName,
+ self.SeasonCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagGCCrossRealmPKSeasonInfo(Structure):
+ Head = tagHead()
+ ZoneCount = 0 #(BYTE ZoneCount)// 赛区个数
+ ZoneList = list() #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
data = None
def __init__(self):
@@ -8536,15 +8673,9 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.ZoneCount):
- value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
- self.ZoneIDList.append(value)
- self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
- self.NextStartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.NextEndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ temZoneList = tagGCCrossRealmPKZone()
+ _pos = temZoneList.ReadData(_lpData, _pos)
+ self.ZoneList.append(temZoneList)
return _pos
def Clear(self):
@@ -8553,28 +8684,15 @@
self.Head.Cmd = 0xC0
self.Head.SubCmd = 0x04
self.ZoneCount = 0
- self.ZoneIDList = list()
- self.ZoneID = 0
- self.SeasonID = 0
- self.StartDate = ""
- self.EndDate = ""
- self.EndTime = ""
- self.NextStartDate = ""
- self.NextEndDate = ""
+ self.ZoneList = list()
return
def GetLength(self):
length = 0
length += self.Head.GetLength()
length += 1
- length += 1 * self.ZoneCount
- length += 1
- length += 2
- length += 10
- length += 10
- length += 5
- length += 10
- length += 10
+ for i in range(self.ZoneCount):
+ length += self.ZoneList[i].GetLength()
return length
@@ -8583,46 +8701,89 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteBYTE(data, self.ZoneCount)
for i in range(self.ZoneCount):
- data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
- data = CommFunc.WriteBYTE(data, self.ZoneID)
- data = CommFunc.WriteWORD(data, self.SeasonID)
- data = CommFunc.WriteString(data, 10, self.StartDate)
- data = CommFunc.WriteString(data, 10, self.EndDate)
- data = CommFunc.WriteString(data, 5, self.EndTime)
- data = CommFunc.WriteString(data, 10, self.NextStartDate)
- data = CommFunc.WriteString(data, 10, self.NextEndDate)
+ data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
return data
def OutputString(self):
DumpString = '''
Head:%s,
ZoneCount:%d,
- ZoneIDList:%s,
- ZoneID:%d,
- SeasonID:%d,
- StartDate:%s,
- EndDate:%s,
- EndTime:%s,
- NextStartDate:%s,
- NextEndDate:%s
+ ZoneList:%s
'''\
%(
self.Head.OutputString(),
self.ZoneCount,
- "...",
- self.ZoneID,
- self.SeasonID,
- self.StartDate,
- self.EndDate,
- self.EndTime,
- self.NextStartDate,
- self.NextEndDate
+ "..."
)
return DumpString
-m_NAtagGCCrossRealmPKSeason=tagGCCrossRealmPKSeason()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeason.Head.Cmd,m_NAtagGCCrossRealmPKSeason.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeason
+m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
+
+
+#------------------------------------------------------
+# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
+
+class tagGCCrossRealmPKSeasonState(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ZoneID", c_ubyte), # 所属赛区ID
+ ("SeasonID", c_ushort), # 当前赛季ID
+ ("SeasonState", c_ubyte), # 赛季状态;0-未开启,1-开启中,2-已结束
+ ("MatchState", c_ubyte), # 匹配状态;0-未开启;1-开启中
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xC0
+ self.SubCmd = 0x06
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xC0
+ self.SubCmd = 0x06
+ self.ZoneID = 0
+ self.SeasonID = 0
+ self.SeasonState = 0
+ self.MatchState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagGCCrossRealmPKSeasonState)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// C0 06 跨服PK本服赛季状态 //tagGCCrossRealmPKSeasonState:
+ Cmd:%s,
+ SubCmd:%s,
+ ZoneID:%d,
+ SeasonID:%d,
+ SeasonState:%d,
+ MatchState:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ZoneID,
+ self.SeasonID,
+ self.SeasonState,
+ self.MatchState
+ )
+ return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Cmd,m_NAtagGCCrossRealmPKSeasonState.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
#------------------------------------------------------
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 06561ca..cdc320f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -377,6 +377,20 @@
("BYTE", "IsDayReset", 0),
),
+ "CrossRealmPKZone":(
+ ("BYTE", "ZoneID", 1),
+ ("char", "ZoneName", 0),
+ ("list", "ServerGroupIDList", 0),
+ ),
+
+ "CrossRealmPKSeason":(
+ ("BYTE", "ZoneID", 1),
+ ("BYTE", "SeasonID", 0),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("char", "EndTime", 0),
+ ),
+
"CrossRealmPKDan":(
("BYTE", "DanLV", 1),
("WORD", "LVUpScore", 0),
@@ -1106,6 +1120,36 @@
def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+# 跨服竞技场赛区表
+class IPY_CrossRealmPKZone():
+
+ def __init__(self):
+ self.ZoneID = 0
+ self.ZoneName = ""
+ self.ServerGroupIDList = []
+ return
+
+ def GetZoneID(self): return self.ZoneID # 赛区ID
+ def GetZoneName(self): return self.ZoneName # 赛区名字
+ def GetServerGroupIDList(self): return self.ServerGroupIDList # 赛区服务器组ID列表
+
+# 跨服竞技场赛季表
+class IPY_CrossRealmPKSeason():
+
+ def __init__(self):
+ self.ZoneID = 0
+ self.SeasonID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.EndTime = ""
+ return
+
+ def GetZoneID(self): return self.ZoneID # 赛区ID
+ def GetSeasonID(self): return self.SeasonID # 赛季ID
+ def GetStartDate(self): return self.StartDate # 开始日期 yyyy-MM-dd
+ def GetEndDate(self): return self.EndDate # 结束日期 yyyy-MM-dd
+ def GetEndTime(self): return self.EndTime # 结算时间 hh:mm
+
# 跨服竞技场段位表
class IPY_CrossRealmPKDan():
@@ -1205,6 +1249,10 @@
self.ipyActWishingWellLen = len(self.ipyActWishingWellCache)
self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
+ self.ipyCrossRealmPKZoneCache = self.__LoadFileData("CrossRealmPKZone", IPY_CrossRealmPKZone)
+ self.ipyCrossRealmPKZoneLen = len(self.ipyCrossRealmPKZoneCache)
+ self.ipyCrossRealmPKSeasonCache = self.__LoadFileData("CrossRealmPKSeason", IPY_CrossRealmPKSeason)
+ self.ipyCrossRealmPKSeasonLen = len(self.ipyCrossRealmPKSeasonCache)
self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan)
self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
@@ -1437,6 +1485,10 @@
def GetActWishingWellByIndex(self, index): return self.ipyActWishingWellCache[index]
def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
+ def GetCrossRealmPKZoneCount(self): return self.ipyCrossRealmPKZoneLen
+ def GetCrossRealmPKZoneByIndex(self, index): return self.ipyCrossRealmPKZoneCache[index]
+ def GetCrossRealmPKSeasonCount(self): return self.ipyCrossRealmPKSeasonLen
+ def GetCrossRealmPKSeasonByIndex(self, index): return self.ipyCrossRealmPKSeasonCache[index]
def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen
def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index]
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 196d5c2..af51dfc 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -146,6 +146,7 @@
Def_Notify_WorldKey_InitGameWorldTime = "InitGameWorldTime" #启动服务器时间
Def_Notify_WorldKey_OperationActionInfo = "OperationActionInfo_%s" # 运营活动信息,参数为运营活动名
Def_Notify_WorldKey_DailyActionState = "DailyActionState_%s" # 日常活动状态,参数为日常活动ID
+Def_Notify_WorldKey_CrossDailyActionState = "CrossDailyActionState_%s" # 跨服日常活动状态,参数为日常活动ID
Def_Notify_WorldKey_FBEnterTimeLimiitMapID = "FBEnterTimeLimiitMapID" # 进入副本有时间限制的地图ID列表
Def_Notify_WorldKey_FBCanEnter = "FBCanEnter_%s" # 副本是否可进入,参数为副本DataMapID
Def_Notify_WorldKey_FBFuncState = "FBFuncState_%s" # 副本状态,参数为副本DataMapID
@@ -167,6 +168,10 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据
Def_Notify_WorldKey_MergeBoss = "Merge_Boss" # 跨服boss
+
+Def_Notify_WorldKey_CrossPKZoneID = "CrossPKZoneID" # 本服跨服PK所属赛区
+Def_Notify_WorldKey_CrossPKSeasonID = "CrossPKSeasonID" # 本服跨服PK当前赛季
+Def_Notify_WorldKey_CrossPKSeasonState = "CrossPKSeasonState" # 本服跨服PK赛季状态 0-关闭,1-开启中
Def_Notify_WorldKey_Merge_PK = "Merge_PK" # 跨服PK, 仅跨服服务器有用,做为触发PKState用
Def_Notify_WorldKey_MergePKState = "MergePK_State" # 由跨服服务器控制的跨服PK活动状态
@@ -1204,7 +1209,6 @@
CrossServerMsg_PKOverInfo = "PKOverInfo" # 跨服PK结果
CrossServerMsg_PKSeasonInfo = "PKSeasonInfo" # 跨服PK赛季信息
CrossServerMsg_PKSyncBillboard = "PKSyncBillboard" # 跨服PK同步排行榜
-CrossServerMsg_PKActionState = "PKActionState" # 跨服PK活动状态变更
# 子服发送跨服信息定义
ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
@@ -1212,6 +1216,7 @@
ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
ClientServerMsg_PKCancel = "PKCancel" # 跨服PK取消匹配
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
+ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
#跨服匹配PK奖励类型
Def_MergePKAwardTypeList = (
@@ -1537,7 +1542,8 @@
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
DailyActionID_HelpBattleCheckIn, # 助战登记 20
-) = range(1, 20 + 1)
+DailyActionID_CrossReamPK, # 跨服PK 21
+) = range(1, 21 + 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 3d2aed2..3a2b105 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -8510,19 +8510,156 @@
#------------------------------------------------------
-# C0 04 跨服PK赛季信息 #tagGCCrossRealmPKSeason
+# C0 04 跨服PK赛区赛季信息 #tagGCCrossRealmPKSeasonInfo
class tagGCCrossRealmPKSeason(Structure):
- Head = tagHead()
- ZoneCount = 0 #(BYTE ZoneCount)// 所有赛区个数
- ZoneIDList = list() #(vector<BYTE> ZoneIDList)// 所有赛区列表
- ZoneID = 0 #(BYTE ZoneID)// 所属赛区ID
SeasonID = 0 #(WORD SeasonID)// 当前赛季ID
StartDate = "" #(char StartDate[10])// 开始日期 yyyy-MM-dd
EndDate = "" #(char EndDate[10])// 结束日期 yyyy-MM-dd
EndTime = "" #(char EndTime[5])// 赛季结算时间,赛季奖励该时间后才可领取 hh:mm
NextStartDate = "" #(char NextStartDate[10])// 下赛季开始日期 yyyy-MM-dd
NextEndDate = "" #(char NextEndDate[10])// 下赛季结束日期 yyyy-MM-dd
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
+ self.NextStartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.NextEndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ return _pos
+
+ def Clear(self):
+ self.SeasonID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.EndTime = ""
+ self.NextStartDate = ""
+ self.NextEndDate = ""
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 2
+ length += 10
+ length += 10
+ length += 5
+ length += 10
+ length += 10
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteWORD(data, self.SeasonID)
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndDate)
+ data = CommFunc.WriteString(data, 5, self.EndTime)
+ data = CommFunc.WriteString(data, 10, self.NextStartDate)
+ data = CommFunc.WriteString(data, 10, self.NextEndDate)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ SeasonID:%d,
+ StartDate:%s,
+ EndDate:%s,
+ EndTime:%s,
+ NextStartDate:%s,
+ NextEndDate:%s
+ '''\
+ %(
+ self.SeasonID,
+ self.StartDate,
+ self.EndDate,
+ self.EndTime,
+ self.NextStartDate,
+ self.NextEndDate
+ )
+ return DumpString
+
+
+class tagGCCrossRealmPKZone(Structure):
+ ZoneID = 0 #(BYTE ZoneID)// 赛区ID
+ ZoneNameLen = 0 #(BYTE ZoneNameLen)
+ ZoneName = "" #(String ZoneName)// 赛区名
+ SeasonCount = 0 #(WORD SeasonCount)
+ SeasonList = list() #(vector<tagGCCrossRealmPKSeason> SeasonList)// 赛季列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ZoneNameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.ZoneName,_pos = CommFunc.ReadString(_lpData, _pos,self.ZoneNameLen)
+ self.SeasonCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.SeasonCount):
+ temSeasonList = tagGCCrossRealmPKSeason()
+ _pos = temSeasonList.ReadData(_lpData, _pos)
+ self.SeasonList.append(temSeasonList)
+ return _pos
+
+ def Clear(self):
+ self.ZoneID = 0
+ self.ZoneNameLen = 0
+ self.ZoneName = ""
+ self.SeasonCount = 0
+ self.SeasonList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ length += 1
+ length += len(self.ZoneName)
+ length += 2
+ for i in range(self.SeasonCount):
+ length += self.SeasonList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.ZoneID)
+ data = CommFunc.WriteBYTE(data, self.ZoneNameLen)
+ data = CommFunc.WriteString(data, self.ZoneNameLen, self.ZoneName)
+ data = CommFunc.WriteWORD(data, self.SeasonCount)
+ for i in range(self.SeasonCount):
+ data = CommFunc.WriteString(data, self.SeasonList[i].GetLength(), self.SeasonList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ ZoneID:%d,
+ ZoneNameLen:%d,
+ ZoneName:%s,
+ SeasonCount:%d,
+ SeasonList:%s
+ '''\
+ %(
+ self.ZoneID,
+ self.ZoneNameLen,
+ self.ZoneName,
+ self.SeasonCount,
+ "..."
+ )
+ return DumpString
+
+
+class tagGCCrossRealmPKSeasonInfo(Structure):
+ Head = tagHead()
+ ZoneCount = 0 #(BYTE ZoneCount)// 赛区个数
+ ZoneList = list() #(vector<tagGCCrossRealmPKZone> ZoneList)// 赛区列表
data = None
def __init__(self):
@@ -8536,15 +8673,9 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.ZoneCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.ZoneCount):
- value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
- self.ZoneIDList.append(value)
- self.ZoneID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- self.SeasonID,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.EndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.EndTime,_pos = CommFunc.ReadString(_lpData, _pos,5)
- self.NextStartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
- self.NextEndDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ temZoneList = tagGCCrossRealmPKZone()
+ _pos = temZoneList.ReadData(_lpData, _pos)
+ self.ZoneList.append(temZoneList)
return _pos
def Clear(self):
@@ -8553,28 +8684,15 @@
self.Head.Cmd = 0xC0
self.Head.SubCmd = 0x04
self.ZoneCount = 0
- self.ZoneIDList = list()
- self.ZoneID = 0
- self.SeasonID = 0
- self.StartDate = ""
- self.EndDate = ""
- self.EndTime = ""
- self.NextStartDate = ""
- self.NextEndDate = ""
+ self.ZoneList = list()
return
def GetLength(self):
length = 0
length += self.Head.GetLength()
length += 1
- length += 1 * self.ZoneCount
- length += 1
- length += 2
- length += 10
- length += 10
- length += 5
- length += 10
- length += 10
+ for i in range(self.ZoneCount):
+ length += self.ZoneList[i].GetLength()
return length
@@ -8583,46 +8701,89 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteBYTE(data, self.ZoneCount)
for i in range(self.ZoneCount):
- data = CommFunc.WriteBYTE(data, self.ZoneIDList[i])
- data = CommFunc.WriteBYTE(data, self.ZoneID)
- data = CommFunc.WriteWORD(data, self.SeasonID)
- data = CommFunc.WriteString(data, 10, self.StartDate)
- data = CommFunc.WriteString(data, 10, self.EndDate)
- data = CommFunc.WriteString(data, 5, self.EndTime)
- data = CommFunc.WriteString(data, 10, self.NextStartDate)
- data = CommFunc.WriteString(data, 10, self.NextEndDate)
+ data = CommFunc.WriteString(data, self.ZoneList[i].GetLength(), self.ZoneList[i].GetBuffer())
return data
def OutputString(self):
DumpString = '''
Head:%s,
ZoneCount:%d,
- ZoneIDList:%s,
- ZoneID:%d,
- SeasonID:%d,
- StartDate:%s,
- EndDate:%s,
- EndTime:%s,
- NextStartDate:%s,
- NextEndDate:%s
+ ZoneList:%s
'''\
%(
self.Head.OutputString(),
self.ZoneCount,
- "...",
- self.ZoneID,
- self.SeasonID,
- self.StartDate,
- self.EndDate,
- self.EndTime,
- self.NextStartDate,
- self.NextEndDate
+ "..."
)
return DumpString
-m_NAtagGCCrossRealmPKSeason=tagGCCrossRealmPKSeason()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeason.Head.Cmd,m_NAtagGCCrossRealmPKSeason.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeason
+m_NAtagGCCrossRealmPKSeasonInfo=tagGCCrossRealmPKSeasonInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonInfo.Head.Cmd,m_NAtagGCCrossRealmPKSeasonInfo.Head.SubCmd))] = m_NAtagGCCrossRealmPKSeasonInfo
+
+
+#------------------------------------------------------
+# C0 06 跨服PK本服赛季状态 #tagGCCrossRealmPKSeasonState
+
+class tagGCCrossRealmPKSeasonState(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ZoneID", c_ubyte), # 所属赛区ID
+ ("SeasonID", c_ushort), # 当前赛季ID
+ ("SeasonState", c_ubyte), # 赛季状态;0-未开启,1-开启中,2-已结束
+ ("MatchState", c_ubyte), # 匹配状态;0-未开启;1-开启中
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xC0
+ self.SubCmd = 0x06
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.Cmd = 0xC0
+ self.SubCmd = 0x06
+ self.ZoneID = 0
+ self.SeasonID = 0
+ self.SeasonState = 0
+ self.MatchState = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagGCCrossRealmPKSeasonState)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// C0 06 跨服PK本服赛季状态 //tagGCCrossRealmPKSeasonState:
+ Cmd:%s,
+ SubCmd:%s,
+ ZoneID:%d,
+ SeasonID:%d,
+ SeasonState:%d,
+ MatchState:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ZoneID,
+ self.SeasonID,
+ self.SeasonState,
+ self.MatchState
+ )
+ return DumpString
+
+
+m_NAtagGCCrossRealmPKSeasonState=tagGCCrossRealmPKSeasonState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossRealmPKSeasonState.Cmd,m_NAtagGCCrossRealmPKSeasonState.SubCmd))] = m_NAtagGCCrossRealmPKSeasonState
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 196d5c2..af51dfc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -146,6 +146,7 @@
Def_Notify_WorldKey_InitGameWorldTime = "InitGameWorldTime" #启动服务器时间
Def_Notify_WorldKey_OperationActionInfo = "OperationActionInfo_%s" # 运营活动信息,参数为运营活动名
Def_Notify_WorldKey_DailyActionState = "DailyActionState_%s" # 日常活动状态,参数为日常活动ID
+Def_Notify_WorldKey_CrossDailyActionState = "CrossDailyActionState_%s" # 跨服日常活动状态,参数为日常活动ID
Def_Notify_WorldKey_FBEnterTimeLimiitMapID = "FBEnterTimeLimiitMapID" # 进入副本有时间限制的地图ID列表
Def_Notify_WorldKey_FBCanEnter = "FBCanEnter_%s" # 副本是否可进入,参数为副本DataMapID
Def_Notify_WorldKey_FBFuncState = "FBFuncState_%s" # 副本状态,参数为副本DataMapID
@@ -167,6 +168,10 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo" # 仙盟宴会数据
Def_Notify_WorldKey_MergeBoss = "Merge_Boss" # 跨服boss
+
+Def_Notify_WorldKey_CrossPKZoneID = "CrossPKZoneID" # 本服跨服PK所属赛区
+Def_Notify_WorldKey_CrossPKSeasonID = "CrossPKSeasonID" # 本服跨服PK当前赛季
+Def_Notify_WorldKey_CrossPKSeasonState = "CrossPKSeasonState" # 本服跨服PK赛季状态 0-关闭,1-开启中
Def_Notify_WorldKey_Merge_PK = "Merge_PK" # 跨服PK, 仅跨服服务器有用,做为触发PKState用
Def_Notify_WorldKey_MergePKState = "MergePK_State" # 由跨服服务器控制的跨服PK活动状态
@@ -1204,7 +1209,6 @@
CrossServerMsg_PKOverInfo = "PKOverInfo" # 跨服PK结果
CrossServerMsg_PKSeasonInfo = "PKSeasonInfo" # 跨服PK赛季信息
CrossServerMsg_PKSyncBillboard = "PKSyncBillboard" # 跨服PK同步排行榜
-CrossServerMsg_PKActionState = "PKActionState" # 跨服PK活动状态变更
# 子服发送跨服信息定义
ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
@@ -1212,6 +1216,7 @@
ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
ClientServerMsg_PKCancel = "PKCancel" # 跨服PK取消匹配
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
+ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
#跨服匹配PK奖励类型
Def_MergePKAwardTypeList = (
@@ -1537,7 +1542,8 @@
DailyActionID_KillNPC, # 野外怪物
DailyActionID_IceLode, # 冰晶矿脉
DailyActionID_HelpBattleCheckIn, # 助战登记 20
-) = range(1, 20 + 1)
+DailyActionID_CrossReamPK, # 跨服PK 21
+) = range(1, 21 + 1)
--
Gitblit v1.8.0