Цитата:
Сообщение от J-Fobos
С этим у меня пока что проблем не возникало.
Delphi Код:
procedure UserInfo;
var
i, CubicsSize, tmpCharObjectId: integer;
tmpMyName, tmpMyTitle: string;
begin
tmpCharObjectId:=ReadD(18);
if CharObjectId=0 then CharObjectId:=tmpCharObjectId;
case tmpCharObjectId of
CharObjectId:
begin
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
i:=22;
tmpMyName:=ReadS(i);
i:=i+48;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
i:= 552 + length(tmpMyName) * 2;
tmpMyTitle:=ReadS(i);
i:= i + 31;
CubicsSize:= ReadH(i);
i:= i + 28 + (CubicsSize * 2);
MaxCP:=ReadD(i);
CurCP:=ReadD(i);
end;
end;
end;
|
в принцыпе у меня так и есть
тоже учитываю тока длинну титула, имени и кубика...
Delphi Код:
PUserInfoA = ^TUserInfoA;
TUserInfoA = packed record
pos:TL2Vector;
heading : integer;
ID : DWORD;
end;
// тут ИМЯ нуль-терминальная юникод строка
PUserInfoB =^TUserInfoB;
TUserInfoB = packed record
race : DWORD;
sex : DWORD;
classid : DWORD;
lvl : DWORD;
exp : int64;
STR: DWORD;
DEX: DWORD;
CON: DWORD;
INT: DWORD;
WIT: DWORD;
MEN : DWORD;
MaxHP, CurrentHP:DWORD;
MaxMP, CurrentMP:DWORD;
sp: dword;
load:dword;
maxload:dword;
weaponequip:dword;
equipsobj:array[0..25]of dword; //
equipsid:array[0..25]of dword; // тут всякие ID для экипа, ауги, итд для каждой вещи (их 25)
equipsaug:array[0..25]of dword; //
slotst:dword;
dw1 : DWORD;
dw2 : DWORD;
dw3 : DWORD;
dw4: DWORD;
dw5:dword;
dw6:dword;
stats:array[0..9]of dword; // м.аттака пдеф итд (щсновные статы)
pvpflag:dword;
karma:dword;
walkstats:array[0..7]of dword;// начиная с сего момента до конца рекорда неуверен в точности)) но по байтам так
movemul:double;
atkspdmul:double;
colw:dword;
colh:dword;
w:word;
hairstyle:dword;
haircolor:dword;
face:dword;
isgm:dword;
end;
// тут ТИТУЛ нуль-терминальная юникод строка
PUserInfoC =^TUserInfoC;
TUserInfoC = packed record
ClanID :dword;
ClanCrestID :dword;
AllyID :dword;
AllyCrestID :dword;
Relation :dword;
mounttype : byte;
privatestore: byte;
dwarwencraft: byte;
pkkills : DWORD;
pvpkills : DWORD;
cubicsize : WORD; // array of cubic ID word
end;
// тут массив WORD длинной cubicsize
PUserInfoD =^TUserInfoD;
TUserInfoD = packed record
b0 : byte;
dAbnormal : DWORD;
flymounted : byte;
clanPrivelegies : DWORD;
recomLeft : WORD;
recomHave : WORD;
mountNPCID: DWORD;
invLimit : WORD;
classID : DWORD;
dw0 : DWORD;
maxCP : DWORD;
currCP : DWORD;
isMounted : byte;
teamhilight : byte; //Team:1-blue,2-red
clanCrestLargeID : DWORD;
isNoble : byte;
isHero : byte;
isFishing : byte;
fishingX : integer;
fishingY : integer;
fishingZ : integer;
nameColor: DWORD;
isRunning:byte;
PledgeClass:DWORD;
PledgeType:DWORD;
TitleColor:DWORD;
CursedWeaponEquipID:DWORD;
TranformationID:DWORD;
AtkElementAttr:WORD;
AttackElementVal:WORD;
DefAttrFire:WORD;
DefAttrWater:WORD;
DefAttrWind :WORD;
DefAttrEarth:WORD;
DefAttrHoly :WORD;
DefAttrDark :WORD;
AgathionId :DWORD;
Fame :DWORD;
Unknown :DWORD;
VitalityPoints:DWORD;
end;