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