const
namemain='Zlo11'; // ник главного чара
nameslave='Opasniy11'; // ник второго окна
logmsg=False; // писать лог в приват главе
{ Команды управления начинаются префиксом "-" и оканчиваются статусом "y" или "n" (у-вкл, n-выкл)
Например:
-buy y
Все команды:
-buy y/n - вкл./выкл. синхронная продажа (нпц)
-sell y/n - вкл./выкл. синхронная покупка (у нпц)
-dialog y/n - вкл./выкл. синхронній диалог (с нпц)
-skill y/n - вкл./выкл. синхронное использование скиллов
-go y/n - вкл./выкл. ходьба рядом
-u y/n - синхронный /unstuck
-gorod y/n - уменьшение/увеличение дистанции между чарами
Если написать в пм второму окну, оно напишет в общий чат ваше сообщение }
var
ToX,ToY,ToZ,OrigX,OrigY,OrigZ,i,mid,tid,tx,ty,tz,rand,lenmodif : integer;
com,usedskill:string;
going,skilling:TTimer;
buy,sell,dialog,skill,go:boolean;
procedure sendPM(Msg:string);
begin
buf:=#$4A;
writed(0);
writed(2);
writes('Assist-script'); // ник в чате
writes(' '+msg);
sendtoclientex(namemain);
end;
procedure Init;
begin
sendPM('Вас приветствует скрипт Assist');
sendPM('Возьмите себя в цель');
lenmodif:=100; // расстояние между чарами (лучше оставить как есть)
buy:=true;
sell:=true;
dialog:=true;
skill:=true;
go:=true;
going:=TTimer.Create(nil);
going.OnTimer:=@ongoing;
going.enabled:=false;
skilling:=TTimer.Create(nil);
skilling.OnTimer:=@onskilling;
skilling.enabled:=false;
end;
procedure sendbuf(bufer,name:string);
begin
buf:=bufer;
sendtoserverex(name);
end;
function randlen:integer;
begin
randomize;
case round(random) of
1:
begin
randomize;
result:=round(random*lenmodif);
end;
0:
begin
randomize;
result:=-(round(random*lenmodif));
end;
end;
end;
procedure ongoing(Sender: TObject);
begin
randomize;
going.interval:=1000+round(random()*1000); // спасибо SeregaZ
buf:=#$01; {#$0F}
writemask('ddddddd',[tox+randlen,toy+randlen,toz,origx,origy,origz,1]);
{randlen;
writed(tox+rand);
randlen;
writed(toy+rand);
writed(toz); old method
writed(origx);
writed(origy);
writed(origz);
writed(1);}
sendtoserverEx(nameslave);
going.enabled:=false;
end;
procedure onskilling(Sender: TObject);
begin
randomize;
skilling.interval:=1000+round(random()*1000);
sendbuf(usedskill,nameslave);
skilling.enabled:=false;
end;
procedure Free;
begin
going.Free;
end;
// Начало
begin
if pck='' then exit;
if (pck[1]=#$04) {#$1f} and (connectname=namemain) and (mid=0) then // узнаем ид главного чара
begin
mid:=readd(2);
pck:='';
If logmsg=true then sendPM('Ваш ИД запомнен');
end;
if fromserver and (connectname=nameslave) then
case pck[1] of
#$29: {#$39} // пати
begin
If logmsg=true then sendPM('Принят запрос на группу');
if (reads(2))=namemain then
begin
If logmsg=true then sendPM('Вхожу в группу '+namemain+'а');
sendbuf(hstr('2A01000000'),nameslave); {#$43} // подтверждение пати
end;
end;
end;
if fromclient and (connectname=namemain) then
case pck[1] of
#$04: {#$1f} // главный чар выделил кого-то
begin
i:=2;
tid:=readd(i);
tx:=readd(i);
ty:=readd(i);
tz:=readd(i);
buf:=#$04; {#$1f} // передача данных второму окну
writemask('ddddc', [Tid, Tx, Ty, tz, 0]);
sendtoserverEx(nameslave);
If logmsg=true then sendPM('В цели');
end;
#$21: {#$23} // разговор с npc
begin
if dialog=true then
begin
sendbuf(pck,nameslave);
If logmsg=true then sendPM('Paзговор с нпц');
end;
end;
#$37: {#$48} // отмена цели
begin
sendbuf(pck,nameslave);
If logmsg=true then sendPM('Цель отменена');
end;
#$2F: {#$39} // использование скиллов
begin
usedskill:=pck;
If logmsg=true then sendPM('Скилл использован');
if skill=true then skilling.enabled:=true; // исп. скилл через интервал
end;
#$38: {#$49} // сообщение
begin
i:=2;
com:=reads(i);
if (readd(i)=2) and (reads(i)=nameslave) then
begin
pck:='';
buf:=#$38; {#$49}
writes(com);
writed(0); // в какой чат пишет бот (0=общий)
sendtoserverex(nameslave);
end;
if com[1]='-' then // команда
begin
pck:='';
if com[2]='u' then
begin
sendbuf(hstr('AA34000000'),nameslave); {#$B3}
sendbuf(hstr('AA34000000'),namemain); {#$B3}
end;
if com[2]+com[3]+com[4]+com[5] = 'buy ' then
begin
if com[6] = 'y' then
begin
sendPM('Синхронная покупка разрешена');
buy:=true;
end;
if com[6] = 'n' then
begin
sendPM('Синхронная покупка запрещена');
buy:=false;
end;
end;
if com[2]+com[3]+com[4]+com[5]+com[6] = 'sell ' then
begin
if com[7] = 'y' then
begin
sendPM('Синхронная продажа разрешена');
sell:=true;
end;
if com[7] = 'n' then
begin
sendPM('Синхронная продажа запрещена');
sell:=false;
end;
end;
if com[2]+com[3]+com[4]+com[5]+com[6]+com[7]+com[8] = 'dialog ' then
begin
if com[9] = 'y' then
begin
sendPM('Синхронный диалог с нпц разрешен');
dialog:=true;
end;
if com[9] = 'n' then
begin
sendPM('Синхронный диалог с нпц запрещен');
dialog:=false;
end;
end;
if com[2]+com[3]+com[4]+com[5]+com[6]+com[7] = 'skill ' then
begin
if com[8] = 'y' then
begin
sendPM('Синхронное использование скиллов разрешено');
skill:=true;
end;
if com[8] = 'n' then
begin
sendPM('Синхронное использование скиллов запрещено');
skill:=false;
end;
end;
if com[2]+com[3]+com[4] = 'go ' then
begin
if com[5] = 'y' then
begin
sendPM('Следование за главным персонажем разрешено');
go:=true;
end;
if com[5] = 'n' then
begin
sendPM('Следование за главным персонажем запрещено');
go:=false;
end;
end;
if com[2]+com[3]+com[4]+com[5]+com[6]+com[7] = 'gorod ' then
begin
if com[8]='y' then lenmodif:=40; // уменьшение расстояния между чарами
if com[8]='n' then lenmodif:=100; // восстановление расстояния между чарами
end;
end;
end;
#$01: {#$0F} // обновляем координаты гл. чара
begin
i:=2;
tox:=readd(i);
toy:=readd(i);
toz:=readd(i);
origx:=readd(i);
origy:=readd(i);
origz:=readd(i);
if go=true then going.enabled:=true; // идем через интервал
end;
#$1F: {#$40} // покупка вещей у нпц
begin
if buy=true then
begin
sendbuf(pck,nameslave);
If logmsg=true then sendPM('Покупаю');
end;
end;
#$1E: {#$37} // продажа вещей нпц
begin
if sell=true then
begin
sendbuf(pck,nameslave);
If logmsg=true then sendPM('Продаю');
end;
end;
#$D0: // xz что о_О
begin
sendbuf(pck,nameslave);
end;
end;
end.
/////////////////////////////скрипт что бегал за тобой/////////////////////
2F 34 05 00 00 00 00 00 00 00 - вызов коня
45 F2 03 00 00 00 00 00 00 00 - БАФ С КОНЯ а это поставь в посылку с задержкой сколько надо)