hch
2021-05-04 1a0ad714b01722f0a1c9bc4777b8e0d11ed15e01
0312 同步脚本
5个文件已修改
219 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IPY_Player.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ChinNPC.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tool/数据库/ChangeAccount/Collections/DataServerPlayerData.py 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py
@@ -366,6 +366,7 @@
    __repr__ = _swig_repr
    def GetType(self): return _IPY_MapServerToGameServer.IPY_GRefreshPlayerProperty_GetType(self)
    def GetValue(self): return _IPY_MapServerToGameServer.IPY_GRefreshPlayerProperty_GetValue(self)
    def GetValueEx(self): return _IPY_MapServerToGameServer.IPY_GRefreshPlayerProperty_GetValueEx(self)
    def __init__(self): 
        this = _IPY_MapServerToGameServer.new_IPY_GRefreshPlayerProperty()
        try: self.this.append(this)
ServerPython/CoreServerGroup/GameServer/Script/IPY_Player.py
@@ -287,6 +287,7 @@
    def GetLVEx(self): return _IPY_Player.IPY_Player_GetLVEx(self)
    def GetLV2(self): return _IPY_Player.IPY_Player_GetLV2(self)
    def GetFightPower(self): return _IPY_Player.IPY_Player_GetFightPower(self)
    def GetFightPowerEx(self): return _IPY_Player.IPY_Player_GetFightPowerEx(self)
    def GetOfficialRank(self): return _IPY_Player.IPY_Player_GetOfficialRank(self)
    def GetCountry(self): return _IPY_Player.IPY_Player_GetCountry(self)
    def GetCreateRoleTime(self): return _IPY_Player.IPY_Player_GetCreateRoleTime(self)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ChinNPC.py
@@ -323,7 +323,6 @@
    def SetMoveArea(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetMoveArea(self, *args)
    def SetAttentionRefreshID(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetAttentionRefreshID(self, *args)
    def SetHP(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetHP(self, *args)
    def SetHPEx(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetHPEx(self, *args)
    def SetHPRestore(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetHPRestore(self, *args)
    def SetEventArea(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetEventArea(self, *args)
    def SetIsBoss(self, *args): return _IPY_ChinNPC.IPY_NPCData_SetIsBoss(self, *args)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
@@ -288,6 +288,7 @@
    def GetObjID(self): return _IPY_GameObj.IPY_HurtObj_GetObjID(self)
    def GetAttackType(self): return _IPY_GameObj.IPY_HurtObj_GetAttackType(self)
    def GetHurtHP(self): return _IPY_GameObj.IPY_HurtObj_GetHurtHP(self)
    def GetHurtHPEx(self): return _IPY_GameObj.IPY_HurtObj_GetHurtHPEx(self)
    def GetCurHP(self): return _IPY_GameObj.IPY_HurtObj_GetCurHP(self)
    def GetCurHPEx(self): return _IPY_GameObj.IPY_HurtObj_GetCurHPEx(self)
    def SetObjType(self, *args): return _IPY_GameObj.IPY_HurtObj_SetObjType(self, *args)
@@ -295,7 +296,6 @@
    def SetAttackType(self, *args): return _IPY_GameObj.IPY_HurtObj_SetAttackType(self, *args)
    def SetHurtHP(self, *args): return _IPY_GameObj.IPY_HurtObj_SetHurtHP(self, *args)
    def SetCurHP(self, *args): return _IPY_GameObj.IPY_HurtObj_SetCurHP(self, *args)
    def SetCurHPEx(self, *args): return _IPY_GameObj.IPY_HurtObj_SetCurHPEx(self, *args)
    def Clear(self): return _IPY_GameObj.IPY_HurtObj_Clear(self)
IPY_HurtObj_swigregister = _IPY_GameObj.IPY_HurtObj_swigregister
IPY_HurtObj_swigregister(IPY_HurtObj)
@@ -423,6 +423,7 @@
    def GetID(self): return _IPY_GameObj.IPY_GameObj_GetID(self)
    def GetIndex(self): return _IPY_GameObj.IPY_GameObj_GetIndex(self)
    def GetHP(self): return _IPY_GameObj.IPY_GameObj_GetHP(self)
    def GetHPEx(self): return _IPY_GameObj.IPY_GameObj_GetHPEx(self)
    def Move(self, *args): return _IPY_GameObj.IPY_GameObj_Move(self, *args)
    def ChangePos(self, *args): return _IPY_GameObj.IPY_GameObj_ChangePos(self, *args)
    def StopMove(self): return _IPY_GameObj.IPY_GameObj_StopMove(self)
@@ -963,7 +964,9 @@
    def GetPosY(self): return _IPY_GameObj.IPY_Player_GetPosY(self)
    def GetState(self): return _IPY_GameObj.IPY_Player_GetState(self)
    def GetMaxHP(self): return _IPY_GameObj.IPY_Player_GetMaxHP(self)
    def GetMaxHPEx(self): return _IPY_GameObj.IPY_Player_GetMaxHPEx(self)
    def GetHP(self): return _IPY_GameObj.IPY_Player_GetHP(self)
    def GetHPEx(self): return _IPY_GameObj.IPY_Player_GetHPEx(self)
    def GetMaxMP(self): return _IPY_GameObj.IPY_Player_GetMaxMP(self)
    def GetMP(self): return _IPY_GameObj.IPY_Player_GetMP(self)
    def GetXP(self): return _IPY_GameObj.IPY_Player_GetXP(self)
@@ -1532,6 +1535,7 @@
    def GetTotalSoulPropretyLV(self): return _IPY_GameObj.IPY_Player_GetTotalSoulPropretyLV(self)
    def SetTotalSoulPropretyLV(self, *args): return _IPY_GameObj.IPY_Player_SetTotalSoulPropretyLV(self, *args)
    def GetFightPower(self): return _IPY_GameObj.IPY_Player_GetFightPower(self)
    def GetFightPowerEx(self): return _IPY_GameObj.IPY_Player_GetFightPowerEx(self)
    def SetFightPower(self, *args): return _IPY_GameObj.IPY_Player_SetFightPower(self, *args)
    def GetSlashRate(self): return _IPY_GameObj.IPY_Player_GetSlashRate(self)
    def SetSlashRate(self, *args): return _IPY_GameObj.IPY_Player_SetSlashRate(self, *args)
@@ -1979,6 +1983,7 @@
    def GetObjID(self): return _IPY_GameObj.IPY_NPCAngrityValue_GetObjID(self)
    def GetObjType(self): return _IPY_GameObj.IPY_NPCAngrityValue_GetObjType(self)
    def GetAngryValue(self): return _IPY_GameObj.IPY_NPCAngrityValue_GetAngryValue(self)
    def GetAngryValueEx(self): return _IPY_GameObj.IPY_NPCAngrityValue_GetAngryValueEx(self)
    def GetIsDisable(self): return _IPY_GameObj.IPY_NPCAngrityValue_GetIsDisable(self)
    def SetObjID(self, *args): return _IPY_GameObj.IPY_NPCAngrityValue_SetObjID(self, *args)
    def SetObjType(self, *args): return _IPY_GameObj.IPY_NPCAngrityValue_SetObjType(self, *args)
@@ -2126,7 +2131,6 @@
    def GetCurPatrolIndex(self): return _IPY_GameObj.IPY_NPC_GetCurPatrolIndex(self)
    def SetCurLV(self, *args): return _IPY_GameObj.IPY_NPC_SetCurLV(self, *args)
    def SetHP(self, *args): return _IPY_GameObj.IPY_NPC_SetHP(self, *args)
    def SetHPEx(self, *args): return _IPY_GameObj.IPY_NPC_SetHPEx(self, *args)
    def SetCurAction(self, *args): return _IPY_GameObj.IPY_NPC_SetCurAction(self, *args)
    def SetActionTick(self, *args): return _IPY_GameObj.IPY_NPC_SetActionTick(self, *args)
    def SetAttackTick(self, *args): return _IPY_GameObj.IPY_NPC_SetAttackTick(self, *args)
@@ -2226,7 +2230,6 @@
    def SetThunderDef(self, *args): return _IPY_GameObj.IPY_NPC_SetThunderDef(self, *args)
    def SetWindDef(self, *args): return _IPY_GameObj.IPY_NPC_SetWindDef(self, *args)
    def SetMaxHP(self, *args): return _IPY_GameObj.IPY_NPC_SetMaxHP(self, *args)
    def SetMaxHPEx(self, *args): return _IPY_GameObj.IPY_NPC_SetMaxHPEx(self, *args)
    def SetMaxMP(self, *args): return _IPY_GameObj.IPY_NPC_SetMaxMP(self, *args)
    def SetMiss(self, *args): return _IPY_GameObj.IPY_NPC_SetMiss(self, *args)
    def SetSuperHit(self, *args): return _IPY_GameObj.IPY_NPC_SetSuperHit(self, *args)
@@ -2260,9 +2263,7 @@
    def GetAttentionPlayersCount(self): return _IPY_GameObj.IPY_NPC_GetAttentionPlayersCount(self)
    def GetAttentionPlayerByIndex(self, *args): return _IPY_GameObj.IPY_NPC_GetAttentionPlayerByIndex(self, *args)
    def Notify_HP(self): return _IPY_GameObj.IPY_NPC_Notify_HP(self)
    def Notify_HPEx(self): return _IPY_GameObj.IPY_NPC_Notify_HPEx(self)
    def Notify_MaxHP(self): return _IPY_GameObj.IPY_NPC_Notify_MaxHP(self)
    def Notify_MaxHPEx(self): return _IPY_GameObj.IPY_NPC_Notify_MaxHPEx(self)
    def GetAngryNPCCount(self): return _IPY_GameObj.IPY_NPC_GetAngryNPCCount(self)
    def GetAngryNPCByIndex(self, *args): return _IPY_GameObj.IPY_NPC_GetAngryNPCByIndex(self, *args)
    def GetDamReduce(self): return _IPY_GameObj.IPY_NPC_GetDamReduce(self)
@@ -2528,6 +2529,7 @@
    def GetBaseMissRate(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseMissRate(self)
    def GetBaseSuperHiteRate(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseSuperHiteRate(self)
    def GetBaseMaxHP(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseMaxHP(self)
    def GetBaseMaxHPEx(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseMaxHPEx(self)
    def GetBaseHPRestore(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseHPRestore(self)
    def GetBaseOrgSpeed(self): return _IPY_GameObj.IPY_SummonNPC_GetBaseOrgSpeed(self)
    def GetMoveType(self): return _IPY_GameObj.IPY_SummonNPC_GetMoveType(self)
@@ -2788,6 +2790,7 @@
    def Sync_PetTrainingEnd(self): return _IPY_GameObj.IPY_RolePet_Sync_PetTrainingEnd(self)
    def SetMaxHP(self, *args): return _IPY_GameObj.IPY_RolePet_SetMaxHP(self, *args)
    def GetMaxHP(self): return _IPY_GameObj.IPY_RolePet_GetMaxHP(self)
    def GetMaxHPEx(self): return _IPY_GameObj.IPY_RolePet_GetMaxHPEx(self)
    def GetGrade(self): return _IPY_GameObj.IPY_RolePet_GetGrade(self)
    def GetLeftPoints(self): return _IPY_GameObj.IPY_RolePet_GetLeftPoints(self)
    def SetGrade(self, *args): return _IPY_GameObj.IPY_RolePet_SetGrade(self, *args)
Tool/Êý¾Ý¿â/ChangeAccount/Collections/DataServerPlayerData.py
@@ -162,6 +162,8 @@
        ('ExAttr18', ctypes.c_ulong),
        ('ExAttr19', ctypes.c_ulong),
        ('ExAttr20', ctypes.c_ulong),
        ('HPEx', ctypes.c_ulong),
        ('FightPowerEx', ctypes.c_ulong),
        ('ADOResult', ctypes.c_ulong),
        ('SID', ctypes.c_int),    #用于校验
        ('VerNO', ctypes.c_ulong)   #用于SID校验时比较版本号
@@ -175,18 +177,149 @@
    def clear(self):
        memset(addressof(self), 0, self.getLength())
    def readData(self, buf, pos = 0, length = 0):
        if not pos <= length:
            msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length))
            msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length))
            mylog.error(msg)
            return -1
        if len(buf) < pos + self.getLength():
            msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
            msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
            mylog.error(msg)
            return -1
        self.clear()
        memmove(addressof(self), buf[pos:], self.getLength())
        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
        self.AccID, pos = CommFunc.ReadString(buf, pos, 65)
        self.PlayerName, pos = CommFunc.ReadString(buf, pos, 33)
        self.AccState, pos = CommFunc.ReadBYTE(buf, pos)
        self.IsDeleted, pos = CommFunc.ReadBYTE(buf, pos)
        self.GMLevel, pos = CommFunc.ReadBYTE(buf, pos)
        self.Sex, pos = CommFunc.ReadDWORD(buf, pos)
        self.Hair, pos = CommFunc.ReadDWORD(buf, pos)
        self.HairColor, pos = CommFunc.ReadDWORD(buf, pos)
        self.Face, pos = CommFunc.ReadDWORD(buf, pos)
        self.FacePic, pos = CommFunc.ReadDWORD(buf, pos)
        self.Job, pos = CommFunc.ReadDWORD(buf, pos)
        self.ReincarnationLv, pos = CommFunc.ReadWORD(buf, pos)
        self.LV, pos = CommFunc.ReadDWORD(buf, pos)
        self.TotalExp, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyID, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyName, pos = CommFunc.ReadString(buf, pos, 33)
        self.Country, pos = CommFunc.ReadDWORD(buf, pos)
        self.TeamHornor, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyHornor, pos = CommFunc.ReadDWORD(buf, pos)
        self.FamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos)
        self.LastWeekFamilyActiveValue, pos = CommFunc.ReadDWORD(buf, pos)
        self.CountryHornor, pos = CommFunc.ReadDWORD(buf, pos)
        self.CountryLastWeekHornor, pos = CommFunc.ReadDWORD(buf, pos)
        self.Mate, pos = CommFunc.ReadDWORD(buf, pos)
        self.Gold, pos = CommFunc.ReadDWORD(buf, pos)
        self.GoldPaper, pos = CommFunc.ReadDWORD(buf, pos)
        self.Silver, pos = CommFunc.ReadDWORD(buf, pos)
        self.SilverPaper, pos = CommFunc.ReadDWORD(buf, pos)
        self.FightPoint, pos = CommFunc.ReadDWORD(buf, pos)
        self.HappyPoint, pos = CommFunc.ReadDWORD(buf, pos)
        self.MapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.DataMapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.CopyMapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.PosX, pos = CommFunc.ReadWORD(buf, pos)
        self.PosY, pos = CommFunc.ReadWORD(buf, pos)
        self.FromMapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.FromCopyMapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.FromPosX, pos = CommFunc.ReadWORD(buf, pos)
        self.FromPosY, pos = CommFunc.ReadWORD(buf, pos)
        self.State, pos = CommFunc.ReadDWORD(buf, pos)
        self.HP, pos = CommFunc.ReadDWORD(buf, pos)
        self.MP, pos = CommFunc.ReadDWORD(buf, pos)
        self.XP, pos = CommFunc.ReadDWORD(buf, pos)
        self.HPRestoreSetting, pos = CommFunc.ReadWORD(buf, pos)
        self.MPRestoreSetting, pos = CommFunc.ReadWORD(buf, pos)
        self.FreePoint, pos = CommFunc.ReadDWORD(buf, pos)
        self.FreeSkillPoint, pos = CommFunc.ReadDWORD(buf, pos)
        self.STR, pos = CommFunc.ReadDWORD(buf, pos)
        self.PNE, pos = CommFunc.ReadDWORD(buf, pos)
        self.PHY, pos = CommFunc.ReadDWORD(buf, pos)
        self.CON, pos = CommFunc.ReadDWORD(buf, pos)
        self.TotalSTR, pos = CommFunc.ReadDWORD(buf, pos)
        self.TotalPNE, pos = CommFunc.ReadDWORD(buf, pos)
        self.TotalPHY, pos = CommFunc.ReadDWORD(buf, pos)
        self.TotalCON, pos = CommFunc.ReadDWORD(buf, pos)
        self.Setting, pos = CommFunc.ReadString(buf, pos, 100)
        self.PKValue, pos = CommFunc.ReadWORD(buf, pos)
        self.FightPower, pos = CommFunc.ReadDWORD(buf, pos)
        self.ActiveValue, pos = CommFunc.ReadWORD(buf, pos)
        self.PlayerType, pos = CommFunc.ReadBYTE(buf, pos)
        self.BackpackLV, pos = CommFunc.ReadBYTE(buf, pos)
        self.WarehouseLV, pos = CommFunc.ReadBYTE(buf, pos)
        self.HaveWarehousePsw, pos = CommFunc.ReadBYTE(buf, pos)
        self.WarehousePsw, pos = CommFunc.ReadString(buf, pos, 15)
        self.WarehouseLocked, pos = CommFunc.ReadBYTE(buf, pos)
        self.WarehouseGold, pos = CommFunc.ReadDWORD(buf, pos)
        self.WarehouseSilver, pos = CommFunc.ReadDWORD(buf, pos)
        self.TeamID, pos = CommFunc.ReadDWORD(buf, pos)
        self.UseGoldType, pos = CommFunc.ReadBYTE(buf, pos)
        self.UseSilverType, pos = CommFunc.ReadBYTE(buf, pos)
        self.AttackMode, pos = CommFunc.ReadBYTE(buf, pos)
        self.RebornMapID, pos = CommFunc.ReadWORD(buf, pos)
        self.RebornPosX, pos = CommFunc.ReadWORD(buf, pos)
        self.RebornPosY, pos = CommFunc.ReadWORD(buf, pos)
        self.WeekOnlineTime, pos = CommFunc.ReadDWORD(buf, pos)
        self.LastWeekOnlineTime, pos = CommFunc.ReadDWORD(buf, pos)
        self.LogoffTime, pos = CommFunc.ReadString(buf, pos, 30)
        self.IsHideMask, pos = CommFunc.ReadBYTE(buf, pos)
        self.DayProcessGameEventCount, pos = CommFunc.ReadDWORD(buf, pos)
        self.LoginIP, pos = CommFunc.ReadString(buf, pos, 20)
        self.LoginTime, pos = CommFunc.ReadString(buf, pos, 30)
        self.OnlineTime, pos = CommFunc.ReadDWORD(buf, pos)
        self.FriendFavor, pos = CommFunc.ReadDWORD(buf, pos)
        self.TeamPrivity, pos = CommFunc.ReadDWORD(buf, pos)
        self.OfflineMinutes, pos = CommFunc.ReadDWORD(buf, pos)
        self.Energy, pos = CommFunc.ReadDWORD(buf, pos)
        self.ReceivedSalary, pos = CommFunc.ReadDWORD(buf, pos)
        self.EquipShowSwitch, pos = CommFunc.ReadDWORD(buf, pos)
        self.LuckValue, pos = CommFunc.ReadWORD(buf, pos)
        self.ExAttr1, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr2, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr3, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr4, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr5, pos = CommFunc.ReadDWORD(buf, pos)
        self.Faction, pos = CommFunc.ReadDWORD(buf, pos)
        self.InfamyValue, pos = CommFunc.ReadDWORD(buf, pos)
        self.OfficialRank, pos = CommFunc.ReadBYTE(buf, pos)
        self.IsFindByLabel, pos = CommFunc.ReadBYTE(buf, pos)
        self.IsCloseFriendLabel, pos = CommFunc.ReadBYTE(buf, pos)
        self.ChangeCoinPointTotal, pos = CommFunc.ReadDWORD(buf, pos)
        self.VIPLv, pos = CommFunc.ReadBYTE(buf, pos)
        self.VIPLvForPhone, pos = CommFunc.ReadBYTE(buf, pos)
        self.PhoneVIPStartTime, pos = CommFunc.ReadDouble(buf, pos)
        self.PhoneVIPEndTime, pos = CommFunc.ReadDouble(buf, pos)
        self.VsRoomId, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr6, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr7, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr8, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr9, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr10, pos = CommFunc.ReadDWORD(buf, pos)
        self.ModelMark, pos = CommFunc.ReadDWORD(buf, pos)
        self.FromDataMapID, pos = CommFunc.ReadDWORD(buf, pos)
        self.LastOrderId, pos = CommFunc.ReadString(buf, pos, 40)
        self.PrizeCoin, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr11, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr12, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr13, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr14, pos = CommFunc.ReadDWORD(buf, pos)
        self.CreateRoleTime, pos = CommFunc.ReadString(buf, pos, 30)
        self.LVEx, pos = CommFunc.ReadWORD(buf, pos)
        self.LV2, pos = CommFunc.ReadWORD(buf, pos)
        self.ExpPoint, pos = CommFunc.ReadDWORD(buf, pos)
        self.OperateInfo, pos = CommFunc.ReadDWORD(buf, pos)
        self.Operate, pos = CommFunc.ReadString(buf, pos, 15)
        self.ServerID, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr15, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr16, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr17, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr18, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr19, pos = CommFunc.ReadDWORD(buf, pos)
        self.ExAttr20, pos = CommFunc.ReadDWORD(buf, pos)
        self.HPEx, pos = CommFunc.ReadDWORD(buf, pos)
        self.FightPowerEx, pos = CommFunc.ReadDWORD(buf, pos)
        return self.getLength()
@@ -337,6 +470,8 @@
        rec[u'ExAttr18'] = self.ExAttr18
        rec[u'ExAttr19'] = self.ExAttr19
        rec[u'ExAttr20'] = self.ExAttr20
        rec[u'HPEx'] = self.HPEx
        rec[u'FightPowerEx'] = self.FightPowerEx
        rec[u'SID'] = self.SID
        rec[u'VerNO'] = self.VerNO
        return rec
@@ -475,6 +610,8 @@
        self.ExAttr18 = rec.get(u'ExAttr18', 0)
        self.ExAttr19 = rec.get(u'ExAttr19', 0)
        self.ExAttr20 = rec.get(u'ExAttr20', 0)
        self.HPEx = rec.get(u'HPEx', 0)
        self.FightPowerEx = rec.get(u'FightPowerEx', 0)
        self.SID = rec['SID']
        self.VerNO = rec.get(u'VerNO', 0)
@@ -828,6 +965,8 @@
            ExAttr18 = %s,
            ExAttr19 = %s,
            ExAttr20 = %s,
            HPEx = %s,
            FightPowerEx = %s,
            ADOResult = %s,
            SID = %s,
            VerNO = %s,
@@ -964,6 +1103,8 @@
                self.ExAttr18,
                self.ExAttr19,
                self.ExAttr20,
                self.HPEx,
                self.FightPowerEx,
                self.ADOResult,
                self.SID,
                self.VerNO
@@ -971,7 +1112,7 @@
        return output
    def dumpString(self):
        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
                self.PlayerID,
                self.AccID,
                self.PlayerName,
@@ -1104,6 +1245,8 @@
                self.ExAttr18,
                self.ExAttr19,
                self.ExAttr20,
                self.HPEx,
                self.FightPowerEx,
            )
        return output
@@ -15337,6 +15480,7 @@
        ('Name', ctypes.c_char * 24),
        ('Friendliness', ctypes.c_ushort),
        ('HP', ctypes.c_ulong),
        ('HPEx', ctypes.c_ulong),
        ('MP', ctypes.c_ulong),
        ('Lv', ctypes.c_ushort),
        ('Exp', ctypes.c_ulong),
@@ -15373,18 +15517,47 @@
    def clear(self):
        memset(addressof(self), 0, self.getLength())
    def readData(self, buf, pos = 0, length = 0):
        if not pos <= length:
            msg = error.formatMsg('error', error.ERROR_NO_150, '(pos = %s)> (length = %s)'%(pos, length))
            msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length))
            mylog.error(msg)
            return -1
        if len(buf) < pos + self.getLength():
            msg = error.formatMsg('error', error.ERROR_NO_151, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
            msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
            mylog.error(msg)
            return -1
        self.clear()
        memmove(addressof(self), buf[pos:], self.getLength())
        self.PetID, pos = CommFunc.ReadDWORD(buf, pos)
        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
        self.NPCID, pos = CommFunc.ReadDWORD(buf, pos)
        self.Name, pos = CommFunc.ReadString(buf, pos, 24)
        self.Friendliness, pos = CommFunc.ReadWORD(buf, pos)
        self.HP, pos = CommFunc.ReadDWORD(buf, pos)
        self.HPEx, pos = CommFunc.ReadDWORD(buf, pos)
        self.MP, pos = CommFunc.ReadDWORD(buf, pos)
        self.Lv, pos = CommFunc.ReadWORD(buf, pos)
        self.Exp, pos = CommFunc.ReadDWORD(buf, pos)
        self.HPTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.MPTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.PhysicAtkTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.MagicAtkTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.PhysicDefTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.MagicDefTalent, pos = CommFunc.ReadWORD(buf, pos)
        self.BindType, pos = CommFunc.ReadBYTE(buf, pos)
        self.STR, pos = CommFunc.ReadDWORD(buf, pos)
        self.PNE, pos = CommFunc.ReadDWORD(buf, pos)
        self.PHY, pos = CommFunc.ReadDWORD(buf, pos)
        self.CON, pos = CommFunc.ReadDWORD(buf, pos)
        self.Pos, pos = CommFunc.ReadBYTE(buf, pos)
        self.DailyTrainCnt, pos = CommFunc.ReadBYTE(buf, pos)
        self.RemainTrainTime, pos = CommFunc.ReadDWORD(buf, pos)
        self.UseCreatorDrugCnt, pos = CommFunc.ReadBYTE(buf, pos)
        self.LeftPoints, pos = CommFunc.ReadWORD(buf, pos)
        self.AIMode, pos = CommFunc.ReadBYTE(buf, pos)
        self.IsBattle, pos = CommFunc.ReadBYTE(buf, pos)
        self.BattlePower, pos = CommFunc.ReadDWORD(buf, pos)
        self.IncreateSkillCnt, pos = CommFunc.ReadBYTE(buf, pos)
        self.TrainType, pos = CommFunc.ReadBYTE(buf, pos)
        self.PetIndex, pos = CommFunc.ReadBYTE(buf, pos)
        return self.getLength()
@@ -15405,6 +15578,7 @@
        rec[u'Name'] = fix_incomingText(self.Name)
        rec[u'Friendliness'] = self.Friendliness
        rec[u'HP'] = self.HP
        rec[u'HPEx'] = self.HPEx
        rec[u'MP'] = self.MP
        rec[u'Lv'] = self.Lv
        rec[u'Exp'] = self.Exp
@@ -15440,6 +15614,7 @@
        self.Name = fix_outgoingText(rec.get(u'Name', u''))
        self.Friendliness = rec.get(u'Friendliness', 0)
        self.HP = rec.get(u'HP', 0)
        self.HPEx = rec.get(u'HPEx', 0)
        self.MP = rec.get(u'MP', 0)
        self.Lv = rec.get(u'Lv', 0)
        self.Exp = rec.get(u'Exp', 0)
@@ -15622,6 +15797,7 @@
            Name = %s,
            Friendliness = %s,
            HP = %s,
            HPEx = %s,
            MP = %s,
            Lv = %s,
            Exp = %s,
@@ -15655,6 +15831,7 @@
                self.Name,
                self.Friendliness,
                self.HP,
                self.HPEx,
                self.MP,
                self.Lv,
                self.Exp,
@@ -15685,13 +15862,14 @@
        return output
    def dumpString(self):
        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
                self.PetID,
                self.PlayerID,
                self.NPCID,
                self.Name,
                self.Friendliness,
                self.HP,
                self.HPEx,
                self.MP,
                self.Lv,
                self.Exp,
@@ -15727,7 +15905,6 @@
        else:
            self.Name = Str[:24]
            
#------------------------------------------------------
#玩家重复事件表#tagRoleRepeatTime