Решил попробовать написать свой сендер скилов, пока что все получается, но возникла проблемка. Как напасть именно на того кто в таргете? А то перс думают якобы все действия посылаются к нему и соответственно не атакует.
Не много не понял саму последовательность действий. Можете ее написать?
Я делаю так:
Узнаю WID персонажа в таргете, например пусть будет 31664. В калькуляторе получается 7B B0. А вот в PW если отловить пакет взятия в таргет этого же персонажа, почему то получается B0 7B(То есть перевернуто). Или я вообще делаю не так? Не очень понятен мне просто сам алгоритм.
Так все верно. Прочитайте эту статью [Ссылки могут видеть только зарегистрированные пользователи. ] (или [Ссылки могут видеть только зарегистрированные пользователи. ])
В пакетах почти всегда (но есть исключения) используется обратный порядок байт (little-endian), а калькулятор виндовый оперирует прямым порядком (big-endian). Поэтому при написании софта это надо учитывать.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Ну, как сказать..
Есть размерность - 1 байт, 2 байта, 4 байта, 8 байт. (по степени числа 2).
Если число занимает меньше указанного размера, то остаток заполняется нулями.
Например, число 123 456. Переводим в HEX = 1E240, как бы 3 байта. Дополняем нулями, до степени двойки (до 4 байт) - 00 01 E2 40. Переворачиваем - 40 E2 01 00.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Ну, как сказать..
Есть размерность - 1 байт, 2 байта, 4 байта, 8 байт. (по степени числа 2).
Если число занимает меньше указанного размера, то остаток заполняется нулями.
Например, число 123 456. Переводим в HEX = 1E240, как бы 3 байта. Дополняем нулями, до степени двойки (до 4 байт) - 00 01 E2 40. Переворачиваем - 40 E2 01 00.
function strIntToHex(s :String):String;
var
x0,x1,p,t :LongWord;
i,j :LongInt;
res :String;
begin
x0:=0;
x1:=0;
p:=1;
for i:=Length(s) downto 1 do
begin
t:=(ord(s[i])-$30);
for j:=1 to t do //сделал циклом потому-что умножение на асме делать было в лом
asm
mov eax,p
add x0,eax
jnc @dop_sum
adc x1,0
@dop_sum:
end;
p:=p*10;
end;
res:=IntToHex(x1,8)+IntToHex(x0,8); //аналог ф-ии IntToHex для 4 байтового операнда труда не составит у любого, потому не стал я этого делать
//далее вырезаем ведущие нули
j:=Length(res);
for i:=1 to Length(res) do
if res[i]<>'0' then
begin
j:=i;
break;
end;
Result:=Copy(res,j,Length(res)-j+1);
end;
function getStrIntToHex(data:string;data2: integer): String;
var
chast1,chast2,chast3,chast4:String;
begin
if Connected then
begin
if data2=2 then
begin
Chast1:= copy(strIntToHex(data),1,2);
result:= chast1;
end;
if data2=4 then
begin
Chast1:= copy(strIntToHex(data),1,2);
Chast2:= copy(strIntToHex(data),3,2);
result:= chast2+chast1;
end;
if data2=6 then
begin
Chast1:= copy(strIntToHex(data),1,2);
Chast2:= copy(strIntToHex(data),3,2);
Chast3:= copy(strIntToHex(data),5,2);
result:= chast3+chast2+chast1;
end;
if data2=8 then
begin
Chast1:= copy(strIntToHex(data),1,2);
Chast2:= copy(strIntToHex(data),3,2);
Chast3:= copy(strIntToHex(data),5,2);
Chast4:= copy(strIntToHex(data),7,2);
result:= chast4+chast3+chast2+chast1;
end;
end;
end;
а вот если интегер
Код:
{==========================================|
| IntToHex если более 2 |
|==========================================}
function getIntToHex(data,data2: integer): String;
var
chast1,chast2,chast3,chast4:String;
begin
if Connected then
begin
if data2=2 then
begin
Chast1:= copy(IntToHex(data, 2),1,2);
result:= chast1;
end;
if data2=4 then
begin
Chast1:= copy(IntToHex(data, 4),1,2);
Chast2:= copy(IntToHex(data, 4),3,2);
result:= chast2+chast1;
end;
if data2=6 then
begin
Chast1:= copy(IntToHex(data, 6),1,2);
Chast2:= copy(IntToHex(data, 6),3,2);
Chast3:= copy(IntToHex(data, 6),5,2);
result:= chast3+chast2+chast1;
end;
if data2=8 then
begin
Chast1:= copy(IntToHex(data, 8),1,2);
Chast2:= copy(IntToHex(data, 8),3,2);
Chast3:= copy(IntToHex(data, 8),5,2);
Chast4:= copy(IntToHex(data, 8),7,2);
result:= chast4+chast3+chast2+chast1;
end;
end;
end;
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).