# -*- coding: GBK -*- # ¶ÁÈ¡µØÍ¼ÇÐͼµã # author: Alee # Date: 2011.9.1 # history: 2011.9.1 Created import string import CommFunc import binascii import os import logging from ConfigurationReader import ConfigIniReader DUMP_TRANSPORT = False class tagTransportRefresh: RefreshID = 0 # (DWORD RefreshID ) MapID = 0 # (WORD MapID ) PosX = 0 # (WORD PosX ) //×ø±ê PosY = 0 # (WORD PosY ) Range = 0 # (WORD Range ) //·¶Î§ TargetMapID = 0 # (WORD TargetMapID ) //Ä¿±êµØÍ¼ID TargetPosX = 0 # (WORD TargetPosX ) //Ä¿±ê×ø±ê TargetPosY = 0 # (WORD TargetPosY ) count = 8 def __init__(self): self.Clear() return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() self.RefreshID, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.MapID, _pos = CommFunc.ReadWORD(_lpData, _pos) self.PosX, _pos = CommFunc.ReadWORD(_lpData, _pos) self.PosY, _pos = CommFunc.ReadWORD(_lpData, _pos) self.Range, _pos = CommFunc.ReadWORD(_lpData, _pos) self.TargetMapID, _pos = CommFunc.ReadWORD(_lpData, _pos) self.TargetPosX, _pos = CommFunc.ReadWORD(_lpData, _pos) self.TargetPosY, _pos = CommFunc.ReadWORD(_lpData, _pos) if _Len != 0 and _pos != _Len: logging.error("Error in tagTransportRefresh : %s "% binascii.b2a_hex(_lpData)) return 0 return _pos def Clear(self): self.RefreshID = 0 self.MapID = 0 self.PosX = 0 self.PosY = 0 self.Range = 0 self.TargetMapID = 0 self.TargetPosX = 0 self.TargetPosY = 0 self.count = 0 return def GetLength(self): length = 0 length += 4 length += 2 length += 2 length += 2 length += 2 length += 2 length += 2 length += 2 return length; def GetBuffer(self): data = '' data = CommFunc.WriteDWORD(data, self.RefreshID) data = CommFunc.WriteWORD(data, self.MapID) data = CommFunc.WriteWORD(data, self.PosX) data = CommFunc.WriteWORD(data, self.PosY) data = CommFunc.WriteWORD(data, self.Range) data = CommFunc.WriteWORD(data, self.TargetMapID) data = CommFunc.WriteWORD(data, self.TargetPosX) data = CommFunc.WriteWORD(data, self.TargetPosY) return data def ReadFromList(self, curList): self.RefreshID = CommFunc.ToIntDef(curList[0]) self.MapID = CommFunc.ToIntDef(curList[1]) self.PosX = CommFunc.ToIntDef(curList[2]) self.PosY = CommFunc.ToIntDef(curList[3]) self.Range = CommFunc.ToIntDef(curList[4]) self.TargetMapID = CommFunc.ToIntDef(curList[5]) self.TargetPosX = CommFunc.ToIntDef(curList[6]) self.TargetPosY = CommFunc.ToIntDef(curList[7]) self.count = 8 return def __str__(self): DumpString = "Çл»µã¶¨Òå#tagTransportRefresh:"\ "RefreshID:%d,"\ "MapID:%d,"\ "PosX:%d,"\ "PosY:%d,"\ "Range:%d,"\ "TargetMapID:%d,"\ "TargetPosX:%d,"\ "TargetPosY:%d"\ %( \ self.RefreshID,\ self.MapID,\ self.PosX,\ self.PosY,\ self.Range,\ self.TargetMapID,\ self.TargetPosX,\ self.TargetPosY\ ) return DumpString class TransportDataReader(): def __init__(self, PyBaseRoot, mapDataPath ): self.__AllTransportData = {} mapTransportPath = os.path.join( PyBaseRoot, mapDataPath,'maptransport.txt' ) f = file(mapTransportPath) lines = f.readlines() for line in lines: if line.strip() == '': continue items = line.split('\t') curData = tagTransportRefresh() if len(items) != 8: continue curData.ReadFromList(items) if self.__AllTransportData.has_key(curData.MapID) == False: self.__AllTransportData[curData.MapID] = [] self.__AllTransportData[curData.MapID].append(curData) def GetAllTransportData(self): return self.__AllTransportData def GetTransportDataByMapID(self, mapID): if not self.__AllTransportData.has_key( mapID ): return [] else: return self.__AllTransportData[mapID] def __str__(self): data = "TransportData Dump:\n" for mapID in self.__AllTransportData.keys(): for transData in self.__AllTransportData[mapID]: data += str(transData) data += "\n" return data __gTransportData = None def ReadTransportData( PyBaseRoot ): global __gTransportData if not __gTransportData: __gTransportData = TransportDataReader( PyBaseRoot,\ ConfigIniReader.GetConfig().GetMapFilePath()) if DUMP_TRANSPORT: logging.debug( "%s", str(__gTransportData) ) def GetTransportData(): global __gTransportData return __gTransportData