Привет, знатоки, не мог бы ктото выложить пример скрипта, примитивного бота.
начало цикла
взять таргет на сближаюшую цель (моб любой)
пока хп цели >0 атака иначе
следующая
повторить
конец
пытался из других ботов (локомотивов ) разных авторов разобрать процедуру "атак" но хотелось бы отдельно с пояснением где что для чего какой пакет как поймато и тд...
заранее большое спасибо.
(сори кажетсья не втом разделе создал по запарке переместите плз если нада...
атака моба руками равносильна взятию его в цель 2 раза подряд:
buf:=#$1F;
WriteD(TargetOID); //Object id того кого взять в цель, второй раз произойдет атака.
WriteD(MyX); //х координата моего чара
WriteD(MyY); //у
WriteD(MyZ); //з
WriteC(00); //нажат ли контрол ?
SendToServerEx(Name); //отправка серверу
А что бы сделать выбор мобов по очереди нужно их всех запомнить, а потом при каждом выборе пересчитывать расстояние до каждого и выбирать ближайшего. К сожалению примера нет. Тебе нужно анализировать для этого пакет #$0C от сервера
ID и OID (Object ID) разные понятия. Ид определяет тип монстра, это как класс в программировании. А ОИД это конкретны экземпляр моба (класса) который имеет конкретное место положения в мире хп и т.д.
Заметь что серверу нужно отправлять не ИД (тип) предметов и монстров, а ИД объектов предметов и монстров.
От сервера будут приходить пакеты о создании различных обьектов (#$0C - создание объекта моба) и о их удалении. Вот это тебе нужно просто взять и в режиме просмотра получаемых пакетов выяснить.
*нажат ли контрол - если отправлять 0 то будет бить игроков, а мобов будет. Что бы заставить бить всех отправлять нужно 01
пакет #$0C приодит в клиент с респом каждого моба? при попадении моба или чара в определенный радиус взаимодействия? или каждый интервал времени?
сегодня много наблюдал за пакетам клиент постоянно отправляет один и то же пакет, с одинаквым интервалом времени. чар просто стоит вокруг нет ничего и никого нет флуда в шаут трейд хч и тд.. а пакеты идут и идут обсолютно идентичные. какой их смысл?
Последний раз редактировалось LamerOK, 06.02.2010 в 18:54.
Вся игровая область поделена на зоны. Каждый раз когда ты попадаешь в новую зону сервер тебе сообщает обо всем что там находится, в том числе и о мобах(этот самый пакет НПЦинфо). Когда монстр умерает или исчизает, или уходит из области приходит пакет ДэлэйОбжэкт(ид не помню) и обьект который указан в пакете следует удалить, он нам точно не понадобится.
sinles, спс помог, еще есть вопрос, нада отследить когда моб атакует чара.
(понимаю глупо звучит наверно просто хочу сам во всем разобраться, по мере возникая сложностей я упрощаю по ставенную задачу. теперь просто хочу чтобы чар стол среди мобов и давал сдачи полезшим к нему аграм. тем самым избегу пока что непонятного для меня создания БД и массива мобов примрено так
взять данные атакующей цели
убедиться что мертва
ждать атаки дальше
тут проблема...
моб даже мертвый пока не исчез держиться в таргете.. в пакете содержится его ХП?
)
если не тружно конкретизируйте ваши советы для хроник ГрацияФинал, это не потому что мне влом посмотреть пакеты, на моем сервере видимо какято фигня но пости ВСЕ пакеты приходят "unknow(ID)" о оих очень много я не успеваю понять какой за что отвечает
составил вырезку из своего скрипта рыбалки (он умеет бить тех кто его ударил) Не проверял, но по идеи он должен бить тех кто нападает. Если нападет 2 моба он убьет одного, а потом когда его ударит другой переключится бить его.
delphi Код:
const
Name='Sinner';
var
underAttack : boolean; //находимся ли мы в бою
myX,myY,myZ: integer; //наши статы
myOID: integer;
AttackerOID: integer;
procedure Init;
begin
underAttack := false;
end;
procedure Free;
beginend;
procedure UserInfo; //обновление данных о себеvar
i:word;
begin
MyOID:=ReadD(18);
MyX:=ReadD(2);
MyY:=ReadD(6);
MyZ:=ReadD(10);
end;
//1F=Action:d(ObjectID)d(OrigX)d(OrigY)d(OrigZ)c(ActionID)procedure Target(Attacker: Integer);
begin
buf:=#$1F;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
delay(800);
end;
// вызывается при приходе каждого пакета, если скрипт включенbegin//**************************************************************************//не обрабатываем пустые пакетыif pck=''thenexit;
if(ConnectName=Name)and FromServer thenbegincase pck[1] of//пакет Die (моб умер)//00=Die:d(CharID)d(1)d(HasHideout)d(HasCastle)d(Flags)d(Sweepable)d(Access)
#$00: beginif(AttackerOID=ReadD(2))thenbegin//мы убили свою цель
underattack:=false;
end;
if(MyOID=ReadD(2))thenbegin//нас убили//тут слудет остановить скрипт, что бы не палитьсяend;
end;
#$32: UserInfo; //пакет с инфой о моём чаре//************************************************************************//s33=Attack:d(AttackerID)d(TargetID)d(Damage)c(Flags)d(X)d(Y)d(Z)h(HitsSize:Loop.01.0003)d(TargetID)d(Damage)c(Flags)
#$33: beginif(MyOID=ReadD(6))and(MyOID<>ReadD(2))thenbegin//на нас напалиifnot underattack thenbegin
underattack:=true;
//сохраним OID напавшего
AttackerOID:=ReadD(2);
Target(AttackerOID); //
Target(AttackerOID); //дабл клик по мобу, начинаем атаку end;
end;
end;
end;
end;
end.