From 167f1018e83452c601f84fa12e0d42fa47cf7ae4 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 28 十二月 2018 11:55:22 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(未同步的PK信息增加存储DB,防止服务器维护后数据丢失) --- ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 157 insertions(+), 0 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py index aa2cd6e..a5a2017 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py @@ -15,6 +15,163 @@ from ctypes import (Structure, memset, memmove, sizeof, addressof, create_string_buffer, string_at) import CommFunc +# 跨服竞技场未通知玩家的比赛结果表 #tagDBCrossPKUnNotifyOverInfo +class tagDBCrossPKUnNotifyOverInfo(Structure): + _pack_ = 1 + _fields_ = [ + ('ZoneID', ctypes.c_ubyte), + ('SeasonID', ctypes.c_ubyte), + ('RoomID', ctypes.c_ushort), + ('TimeStr', ctypes.c_char * 19), + ('OverType', ctypes.c_ubyte), + ('PlayerID', ctypes.c_ulong), + ('WinnerID', ctypes.c_ulong), + ('RoundWinnerLen', ctypes.c_ubyte), + ('RoundWinnerInfo', ctypes.c_char_p), + ('PKScore', ctypes.c_ulong), + ('DanLV', ctypes.c_ubyte), + ('CWinCount', ctypes.c_ushort), + ('AddScore', ctypes.c_ushort), + ('TagPlayerID', ctypes.c_ulong), + ('TagPlayerName', ctypes.c_char * 33), + ('ADOResult', ctypes.c_ulong), + ] + + def __init__(self): + Structure.__init__(self) + self.clear() + + def clear(self): + self.ZoneID = 0 + self.SeasonID = 0 + self.RoomID = 0 + self.TimeStr = '' + self.OverType = 0 + self.PlayerID = 0 + self.WinnerID = 0 + self.RoundWinnerLen = 0 + self.RoundWinnerInfo = '' + self.PKScore = 0 + self.DanLV = 0 + self.CWinCount = 0 + self.AddScore = 0 + self.TagPlayerID = 0 + self.TagPlayerName = '' + + def readData(self, buf, pos = 0, length = 0): + if not pos <= length: + return -1 + if len(buf) < pos + self.getLength(): + return -1 + self.clear() + self.ZoneID, pos = CommFunc.ReadBYTE(buf, pos) + self.SeasonID, pos = CommFunc.ReadBYTE(buf, pos) + self.RoomID, pos = CommFunc.ReadWORD(buf, pos) + self.TimeStr, pos = CommFunc.ReadString(buf, pos, 19) + self.OverType, pos = CommFunc.ReadBYTE(buf, pos) + self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos) + self.WinnerID, pos = CommFunc.ReadDWORD(buf, pos) + self.RoundWinnerLen, pos = CommFunc.ReadBYTE(buf, pos) + tmp, pos = CommFunc.ReadString(buf, pos, self.RoundWinnerLen) + self.RoundWinnerInfo = ctypes.c_char_p(tmp) + self.PKScore, pos = CommFunc.ReadDWORD(buf, pos) + self.DanLV, pos = CommFunc.ReadBYTE(buf, pos) + self.CWinCount, pos = CommFunc.ReadWORD(buf, pos) + self.AddScore, pos = CommFunc.ReadWORD(buf, pos) + self.TagPlayerID, pos = CommFunc.ReadDWORD(buf, pos) + self.TagPlayerName, pos = CommFunc.ReadString(buf, pos, 33) + return self.getLength() + + def getBuffer(self): + buf = '' + buf = CommFunc.WriteBYTE(buf, self.ZoneID) + buf = CommFunc.WriteBYTE(buf, self.SeasonID) + buf = CommFunc.WriteWORD(buf, self.RoomID) + buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.TimeStr) + buf = CommFunc.WriteBYTE(buf, self.OverType) + buf = CommFunc.WriteDWORD(buf, self.PlayerID) + buf = CommFunc.WriteDWORD(buf, self.WinnerID) + buf = CommFunc.WriteBYTE(buf, self.RoundWinnerLen) + buf = CommFunc.WriteString(buf, self.RoundWinnerLen, self.RoundWinnerInfo) + buf = CommFunc.WriteDWORD(buf, self.PKScore) + buf = CommFunc.WriteBYTE(buf, self.DanLV) + buf = CommFunc.WriteWORD(buf, self.CWinCount) + buf = CommFunc.WriteWORD(buf, self.AddScore) + buf = CommFunc.WriteDWORD(buf, self.TagPlayerID) + buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.TagPlayerName) + return buf + + def getLength(self): + length = 0 + length += sizeof(ctypes.c_ubyte) + length += sizeof(ctypes.c_ubyte) + length += sizeof(ctypes.c_ushort) + length += sizeof(ctypes.c_char) * 19 + length += sizeof(ctypes.c_ubyte) + length += sizeof(ctypes.c_ulong) + length += sizeof(ctypes.c_ulong) + length += sizeof(ctypes.c_ubyte) + length += self.RoundWinnerLen + length += sizeof(ctypes.c_ulong) + length += sizeof(ctypes.c_ubyte) + length += sizeof(ctypes.c_ushort) + length += sizeof(ctypes.c_ushort) + length += sizeof(ctypes.c_ulong) + length += sizeof(ctypes.c_char) * 33 + return length + + def outputString(self): + output = '''// 跨服竞技场未通知玩家的比赛结果表 #tagDBCrossPKUnNotifyOverInfo: + ZoneID = %s, + SeasonID = %s, + RoomID = %s, + TimeStr = %s, + OverType = %s, + PlayerID = %s, + WinnerID = %s, + RoundWinnerLen = %s, + RoundWinnerInfo = %s, + PKScore = %s, + DanLV = %s, + CWinCount = %s, + AddScore = %s, + TagPlayerID = %s, + TagPlayerName = %s, + ADOResult = %s, + '''%( + self.ZoneID, + self.SeasonID, + self.RoomID, + self.TimeStr, + self.OverType, + self.PlayerID, + self.WinnerID, + self.RoundWinnerLen, + self.RoundWinnerInfo, + self.PKScore, + self.DanLV, + self.CWinCount, + self.AddScore, + self.TagPlayerID, + self.TagPlayerName, + self.ADOResult, + ) + return output + + #Char数组类型Set接口,使用该接口对此类型数据赋值,防止赋值的数据过长报错 + def SetTimeStr(self,Str): + if len(Str)<=19: + self.TimeStr = Str + else: + self.TimeStr = Str[:19] + + def SetTagPlayerName(self,Str): + if len(Str)<=33: + self.TagPlayerName = Str + else: + self.TagPlayerName = Str[:33] + + # 跨服竞技场PK排行榜 #tagDBCrossPKBillboard class tagDBCrossPKBillboard(Structure): _pack_ = 1 -- Gitblit v1.8.0