hxp
2019-02-19 4522a07fe53f63a2ff97701ee6a166e80e329181
6249 【后端】【2.0】拍卖行(拍卖物品表、拍卖记录表定义)
2个文件已修改
1个文件已添加
372 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
New file
@@ -0,0 +1,71 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package AuctionHouse
#
# @todo:拍卖行
# @author hxp
# @date 2019-02-19
# @version 1.0
#
# 详细描述: 拍卖行
#
#-------------------------------------------------------------------------------
#"""Version = 2019-02-19 12:00"""
#-------------------------------------------------------------------------------
import CommFunc
import GameWorld
#拍卖记录管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
class AuctionRecordManager(object):
    def __init__(self):
        return
    ## ===========================================================================================
    # 保存数据 存数据库和realtimebackup
    def GetSaveData(self):
        savaData = ""
        cntData = ""
        cnt = 0
        GameWorld.Log("Save AuctionRecord count :%s" % cnt)
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    # 从数据库载入数据
    def LoadPyGameData(self, datas, pos, dataslen):
        cnt, pos = CommFunc.ReadDWORD(datas, pos)
        GameWorld.Log("Load AuctionRecord count :%s" % cnt)
        return pos
#拍卖物品管理,注意该类只处理数据逻辑,功能相关逻辑不要写在该类,不然重读脚本不会生效
class AuctionItemManager(object):
    def __init__(self):
        return
    ## ===========================================================================================
    # 保存数据 存数据库和realtimebackup
    def GetSaveData(self):
        savaData = ""
        cntData = ""
        cnt = 0
        GameWorld.Log("Save AuctionItem count :%s" % cnt)
        return CommFunc.WriteDWORD(cntData, cnt) + savaData
    # 从数据库载入数据
    def LoadPyGameData(self, datas, pos, dataslen):
        cnt, pos = CommFunc.ReadDWORD(datas, pos)
        GameWorld.Log("Load AuctionItem count :%s" % cnt)
        return pos
ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
@@ -22,6 +22,7 @@
import binascii
import PyGameData
import CrossRealmPK
import AuctionHouse
def GetSavePyData():
    result = PyGameData.g_pyGameDataManager.GetSaveData()
@@ -44,6 +45,8 @@
class PyGameDataManager(object):
    def __init__(self):
        self.AuctionRecord = AuctionHouse.AuctionRecordManager()
        self.AuctionItem = AuctionHouse.AuctionItemManager()
        self.crossPKUnNotifyOverInfo = CrossRealmPK.CrossPKUnNotifyOverInfoManager()
        self.crossPKBillboard = CrossRealmPK.CrossPKBillboardManager()
        self.XMZZManager = PlayerXMZZ.XMZZManager()
@@ -61,6 +64,8 @@
    def GetSaveData(self):
        buff = ""
        buff += self.AuctionRecord.GetSaveData()
        buff += self.AuctionItem.GetSaveData()
        buff += self.crossPKUnNotifyOverInfo.GetSaveData()
        buff += self.crossPKBillboard.GetSaveData()
        buff += self.XMZZManager.GetSaveData()
@@ -77,6 +82,8 @@
        return buff
    
    def LoadGameData(self, gameBuffer, pos):
        pos = self.AuctionRecord.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.AuctionItem.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.crossPKUnNotifyOverInfo.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.crossPKBillboard.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        pos = self.XMZZManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
@@ -92,6 +99,14 @@
        pos = self.socialInfoManager.LoadPyGameData(gameBuffer, pos, len(gameBuffer))
        return pos
# 拍卖记录表
def GetAuctionRecordManager():
    return PyGameData.g_pyGameDataManager.AuctionRecord
# 拍卖物品表
def GetAuctionItemManager():
    return PyGameData.g_pyGameDataManager.AuctionItem
# 跨服竞技场未通知玩家的比赛结果
def GetCrossPKUnNotifyOverInfoManager():
    return PyGameData.g_pyGameDataManager.crossPKUnNotifyOverInfo
ServerPython/CoreServerGroup/GameServer/Script/PyGameDataStruct.py
@@ -15,6 +15,292 @@
from ctypes import (Structure, memset, memmove, sizeof, addressof, create_string_buffer, string_at)
import CommFunc
# 拍卖记录表 #tagDBAuctionRecord
class tagDBAuctionRecord(Structure):
    _pack_ = 1
    _fields_ = [
        ('PlayerID', ctypes.c_ulong),
        ('FamilyID', ctypes.c_ulong),
        ('RecordType', ctypes.c_ubyte),
        ('RecordTime', ctypes.c_char * 19),
        ('RecordPrice', ctypes.c_ulong),
        ('ItemID', ctypes.c_ulong),
        ('Count', ctypes.c_ushort),
        ('UserDataLen', ctypes.c_ushort),
        ('UserData', ctypes.c_char_p),
        ('ADOResult', ctypes.c_ulong),
    ]
    def __init__(self):
        Structure.__init__(self)
        self.clear()
    def clear(self):
        self.PlayerID = 0
        self.FamilyID = 0
        self.RecordType = 0
        self.RecordTime = ''
        self.RecordPrice = 0
        self.ItemID = 0
        self.Count = 0
        self.UserDataLen = 0
        self.UserData = ''
    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.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos)
        self.RecordType, pos = CommFunc.ReadBYTE(buf, pos)
        self.RecordTime, pos = CommFunc.ReadString(buf, pos, 19)
        self.RecordPrice, pos = CommFunc.ReadDWORD(buf, pos)
        self.ItemID, pos = CommFunc.ReadDWORD(buf, pos)
        self.Count, pos = CommFunc.ReadWORD(buf, pos)
        self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos)
        tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen)
        self.UserData = ctypes.c_char_p(tmp)
        return self.getLength()
    def getBuffer(self):
        buf = ''
        buf = CommFunc.WriteDWORD(buf, self.PlayerID)
        buf = CommFunc.WriteDWORD(buf, self.FamilyID)
        buf = CommFunc.WriteBYTE(buf, self.RecordType)
        buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.RecordTime)
        buf = CommFunc.WriteDWORD(buf, self.RecordPrice)
        buf = CommFunc.WriteDWORD(buf, self.ItemID)
        buf = CommFunc.WriteWORD(buf, self.Count)
        buf = CommFunc.WriteWORD(buf, self.UserDataLen)
        buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData)
        return buf
    def getLength(self):
        length = 0
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ubyte)
        length += sizeof(ctypes.c_char) * 19
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ushort)
        length += sizeof(ctypes.c_ushort)
        length += self.UserDataLen
        return length
    def outputString(self):
        output = '''// 拍卖记录表 #tagDBAuctionRecord:
            PlayerID = %s,
            FamilyID = %s,
            RecordType = %s,
            RecordTime = %s,
            RecordPrice = %s,
            ItemID = %s,
            Count = %s,
            UserDataLen = %s,
            UserData = %s,
            ADOResult = %s,
            '''%(
                self.PlayerID,
                self.FamilyID,
                self.RecordType,
                self.RecordTime,
                self.RecordPrice,
                self.ItemID,
                self.Count,
                self.UserDataLen,
                self.UserData,
                self.ADOResult,
            )
        return output
    #Char数组类型Set接口,使用该接口对此类型数据赋值,防止赋值的数据过长报错
    def SetRecordTime(self,Str):
        if len(Str)<=19:
            self.RecordTime = Str
        else:
            self.RecordTime = Str[:19]
# 拍卖物品表 #tagDBAuctionItem
class tagDBAuctionItem(Structure):
    _pack_ = 1
    _fields_ = [
        ('ItemGUID', ctypes.c_char * 40),
        ('PlayerID', ctypes.c_ulong),
        ('FamilyID', ctypes.c_ulong),
        ('ItemID', ctypes.c_ulong),
        ('Count', ctypes.c_ushort),
        ('AddTime', ctypes.c_char * 19),
        ('BiddingTime', ctypes.c_char * 19),
        ('BidderID', ctypes.c_ulong),
        ('BidderName', ctypes.c_char * 33),
        ('BidderPrice', ctypes.c_ulong),
        ('ItemType', ctypes.c_ulong),
        ('ItemJobLimit', ctypes.c_ulong),
        ('UserDataLen', ctypes.c_ushort),
        ('UserData', ctypes.c_char_p),
        ('FamilyPlayerIDLen', ctypes.c_ushort),
        ('FamilyPlayerIDInfo', ctypes.c_char_p),
        ('ADOResult', ctypes.c_ulong),
    ]
    def __init__(self):
        Structure.__init__(self)
        self.clear()
    def clear(self):
        self.ItemGUID = ''
        self.PlayerID = 0
        self.FamilyID = 0
        self.ItemID = 0
        self.Count = 0
        self.AddTime = ''
        self.BiddingTime = ''
        self.BidderID = 0
        self.BidderName = ''
        self.BidderPrice = 0
        self.ItemType = 0
        self.ItemJobLimit = 0
        self.UserDataLen = 0
        self.UserData = ''
        self.FamilyPlayerIDLen = 0
        self.FamilyPlayerIDInfo = ''
    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.ItemGUID, pos = CommFunc.ReadString(buf, pos, 40)
        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos)
        self.ItemID, pos = CommFunc.ReadDWORD(buf, pos)
        self.Count, pos = CommFunc.ReadWORD(buf, pos)
        self.AddTime, pos = CommFunc.ReadString(buf, pos, 19)
        self.BiddingTime, pos = CommFunc.ReadString(buf, pos, 19)
        self.BidderID, pos = CommFunc.ReadDWORD(buf, pos)
        self.BidderName, pos = CommFunc.ReadString(buf, pos, 33)
        self.BidderPrice, pos = CommFunc.ReadDWORD(buf, pos)
        self.ItemType, pos = CommFunc.ReadDWORD(buf, pos)
        self.ItemJobLimit, pos = CommFunc.ReadDWORD(buf, pos)
        self.UserDataLen, pos = CommFunc.ReadWORD(buf, pos)
        tmp, pos = CommFunc.ReadString(buf, pos, self.UserDataLen)
        self.UserData = ctypes.c_char_p(tmp)
        self.FamilyPlayerIDLen, pos = CommFunc.ReadWORD(buf, pos)
        tmp, pos = CommFunc.ReadString(buf, pos, self.FamilyPlayerIDLen)
        self.FamilyPlayerIDInfo = ctypes.c_char_p(tmp)
        return self.getLength()
    def getBuffer(self):
        buf = ''
        buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 40, self.ItemGUID)
        buf = CommFunc.WriteDWORD(buf, self.PlayerID)
        buf = CommFunc.WriteDWORD(buf, self.FamilyID)
        buf = CommFunc.WriteDWORD(buf, self.ItemID)
        buf = CommFunc.WriteWORD(buf, self.Count)
        buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.AddTime)
        buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 19, self.BiddingTime)
        buf = CommFunc.WriteDWORD(buf, self.BidderID)
        buf = CommFunc.WriteString(buf, sizeof(ctypes.c_char) * 33, self.BidderName)
        buf = CommFunc.WriteDWORD(buf, self.BidderPrice)
        buf = CommFunc.WriteDWORD(buf, self.ItemType)
        buf = CommFunc.WriteDWORD(buf, self.ItemJobLimit)
        buf = CommFunc.WriteWORD(buf, self.UserDataLen)
        buf = CommFunc.WriteString(buf, self.UserDataLen, self.UserData)
        buf = CommFunc.WriteWORD(buf, self.FamilyPlayerIDLen)
        buf = CommFunc.WriteString(buf, self.FamilyPlayerIDLen, self.FamilyPlayerIDInfo)
        return buf
    def getLength(self):
        length = 0
        length += sizeof(ctypes.c_char) * 40
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ushort)
        length += sizeof(ctypes.c_char) * 19
        length += sizeof(ctypes.c_char) * 19
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_char) * 33
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ulong)
        length += sizeof(ctypes.c_ushort)
        length += self.UserDataLen
        length += sizeof(ctypes.c_ushort)
        length += self.FamilyPlayerIDLen
        return length
    def outputString(self):
        output = '''// 拍卖物品表 #tagDBAuctionItem:
            ItemGUID = %s,
            PlayerID = %s,
            FamilyID = %s,
            ItemID = %s,
            Count = %s,
            AddTime = %s,
            BiddingTime = %s,
            BidderID = %s,
            BidderName = %s,
            BidderPrice = %s,
            ItemType = %s,
            ItemJobLimit = %s,
            UserDataLen = %s,
            UserData = %s,
            FamilyPlayerIDLen = %s,
            FamilyPlayerIDInfo = %s,
            ADOResult = %s,
            '''%(
                self.ItemGUID,
                self.PlayerID,
                self.FamilyID,
                self.ItemID,
                self.Count,
                self.AddTime,
                self.BiddingTime,
                self.BidderID,
                self.BidderName,
                self.BidderPrice,
                self.ItemType,
                self.ItemJobLimit,
                self.UserDataLen,
                self.UserData,
                self.FamilyPlayerIDLen,
                self.FamilyPlayerIDInfo,
                self.ADOResult,
            )
        return output
    #Char数组类型Set接口,使用该接口对此类型数据赋值,防止赋值的数据过长报错
    def SetItemGUID(self,Str):
        if len(Str)<=40:
            self.ItemGUID = Str
        else:
            self.ItemGUID = Str[:40]
    def SetAddTime(self,Str):
        if len(Str)<=19:
            self.AddTime = Str
        else:
            self.AddTime = Str[:19]
    def SetBiddingTime(self,Str):
        if len(Str)<=19:
            self.BiddingTime = Str
        else:
            self.BiddingTime = Str[:19]
    def SetBidderName(self,Str):
        if len(Str)<=33:
            self.BidderName = Str
        else:
            self.BidderName = Str[:33]
# 跨服竞技场未通知玩家的比赛结果表 #tagDBCrossPKUnNotifyOverInfo
class tagDBCrossPKUnNotifyOverInfo(Structure):
    _pack_ = 1