PDA

Просмотр полной версии : бег ботом)


dyh9l
31.12.2010, 07:29
я сделал мини-скриптик, т.к. бег между клиентом и волкером отличается
const
name = 'okda';

procedure MoveTo;
begin
SendMsg('Начинаю делать процедуру');
buf:=#$0F;
WriteD(ReadD(2));
WriteD(ReadD(6));
WriteD(ReadD(10));
WriteD(ReadD(14));
WriteD(ReadD(18));
WriteD(ReadD(22));
WriteD(1);
end;

begin
if FromClient then
case ConnectName of
name:
case pck[1] of
#$0F: begin
SendMsg('Пришел пакет бега');
MoveTo;
end;
end;
end;

end.
Как бы лог мне показывает
31.12.2010 05:14:32 Script: Пришел пакет бега
31.12.2010 05:14:32 Script: Начинаю делать процедуру
и тем не менее пакет
Tип: 0x0F (MoveBackwardToLocation)
Pазмер: 25+2
Время прихода: 05:14:32:812
0002 d ToX: 80792 (0x00013B98)
0006 d ToY: 146936 (0x00023DF8)
000A d ToZ: -3520 (0xFFFFF240)
000E d OriginX: 80712 (0x00013B48)
0012 d OriginY: 146776 (0x00023D58)
0016 d OriginZ: -3520 (0xFFFFF240)
разница между пакетами клиента и бота, что в клиенте еще приплюсовывается цифра 1, типо бег мышкой или клавишами) т.е WriteD(1); у мну тупо не идет в пакет)

еще пытался добавлять pck:=''; перед процедурой, дак там вобще некак не ходило)

Добавлено через 8 минут
капец я дурак) забыл SendToServerEx(name); прямо как в подписи все :(

Добавлено через 2 минуты
как кста беспалевней сделать, мышкой или клавиатурой?

Добавлено через 56 минут
теперь еще одна проблема, если сделать pck:=''; то значения все время будут 0 (тоесть тока на 1 раз сработает) если же не делать pck:=''; то за 1 ходьбу делает сразу 2 пакета, правильный и неправильный)

alexteam
31.12.2010, 12:54
аццкий быдлокод )


begin
if FromClient then
case ConnectName of
name:
case pck[1] of
#$0F: begin
buf := pck;
WriteD(1);
pck := buf;
SendMsg('Пофиксили');
end;
end;
end;

end.

J-Fobos
31.12.2010, 12:55
Все можно сделать намного проще. Не блокировать pck, а изменять его. Вот так pck:=pck+#$00+#$00+#$00+#$00;

ps: опять я опоздал с ответом :D

Breadfan
31.12.2010, 13:06
Только заодно длину пакета проверяй, чтоб скрипт не фиксил пакеты бега когда вручную бежишь (актуально на ИГ волкере). Вот как-то так было: begin
if fromclient and (pck[1]=#01) and ((length(pck))<>29) then begin
sendmsg('Alert!!! '+inttostr(length(pck)));
pck:=pck+hstr('01 00 00 00');
end;
end.

как вариант:

if fromclient and (pck[1]=#01) and ((length(pck))=25) then pck:=pck+hstr('01 00 00 00');

wimax
10.01.2011, 14:52
begin
if (fromclient) and (pck[1]=#$0F) and (length(pck)<28) then
begin
buf:=pck;
pck:='';
WriteD(0);
SendToServer;
end;
end.

а так не проще?

dyh9l
10.01.2011, 14:56
мож мне кто скажет на руском, buf := pck; вот эт че блд такое xD
а еще я бы очень рад услышать о том, для чего нужен lenght (да я кучу раз перечитал что оно возращает длину строки, но мне это не понятно)

wimax
10.01.2011, 16:46
begin
if (fromclient) and (pck[1]=#$0F) and (length(pck)<28) then
begin
buf:=pck;
pck:='';
WriteD(0);
SendToServer;
end;
end.

как я понел length он делает сначала проверку сколка байтовый пакет <28 то если меньше он добавляет до этого же числа то есть 28
и отправление pck с длиной в 28 то есть исправляиет