Наконец-то закончил скрипт для Interlude. Он повторяет действия чара во втором окне.
Мain - главный чар, slave - второе окно. Чары должны быть одинаковыми (т.е. иметь одинаковые скиллы).
Основные возможности:
- slave принимает пати от main;
- slave бежит за main;
- slave выделяет того, кого выделил main;
- slave снимает таргет синхронно с main;
- slave юзает скиллы, используемые main;
- slave использует "/unstuck" синхронно с main по команде "-u".
Команды пишутся в общий чат. Планируется будущая доработка скрипта.
Оставляйте свои комментарии/предложения.
За это сообщение spiritofsands нажился спасибкой от:
Так эта проверка есть, но иногда бот бьет мейна. Приведу скрипт тут:
Код:
// Управление вторым окном
// by spiritofsands
//
const
namemain='Lockhorn'; // ник главного чара
nameslave='Ikhanna'; // ник второго окна
var
ToX, ToY, ToZ, OrigX, OrigY, OrigZ, i, mid, q, p, tid, tx, ty, tz, tick,
partyID1, pID1x, pID1y, pID1z, ctid, atk : integer;
d:string;
procedure Init; //Вызывается при включении скрипта
begin
send2msg('target self');
q:=2;
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure Send2Msg(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(namemain);
end;
begin
if (pck[1]=#$04) and (connectname=namemain) and (q=2) then
begin
i:=2;
mid:=readd(i);
pck:='';
send2msg('id');
q:=0;
end;
if fromserver and (connectname=nameslave) then
case pck[1] of
#$39: // party
begin
i:=2;
send2msg('party request');
if (reads(i))=namemain then
begin
send2msg('join '+namemain+'s party');
buf:=#$2A#$01#$00#$00#$00;
SendToServerEX(Nameslave);
end;
end;
#$A7: // partymember 1 id and pos
begin
i:=2;
p:=readd(i);
partyID1:=readd(i);
pID1x:=readd(i);
pID1y:=readd(i);
pID1z:=readd(i);
buf:=#$04;
writed(partyID1);
writed(pID1x);
writed(pID1y);
writed(pID1z);
buf:= buf + hstr('00');
SendToServerEX(Nameslave);
end;
#$29:
begin
if atk=1 then // atk if target<>main
begin
i:=2;p:=readd(i);ctid:=readd(i);if (ctid<>partyid1) then
begin
buf:=d;
sendtoserverEx(nameslave);
atk:=0;
end;
end;
end;
end;
if fromclient and (connectname=namemain) then // from main client
case pck[1] of
#$04: // target
begin
i:=2;
tid:=readd(i);
tx:=readd(i);
ty:=readd(i);
tz:=readd(i);
buf:=#$04;
writemask('ddddc', [Tid, Tx, Ty, tz, 0]);
sendtoserverEx(nameslave);
//Send2Msg('on target');
end;
#$21: // npc dialog
begin
buf:=pck;
sendtoserverEx(nameslave);
//Send2Msg('dialog proceed');
end;
#$37: // cancel target
begin
buf:=pck;
sendtoserverEx(nameslave);
//Send2Msg('target canceled');
end;
#$2F: // use skill
begin
d:=pck;
buf:=#$04; //
writemask('ddddc', [Tid, Tx, Ty, tz, 0]); // assist
sendtoserverEx(nameslave); //
atk:=1;
//Send2Msg('skill used');
end;
#$38: // -u = /unstuck all
begin
i:=2;
if reads(i)='-u' then
begin
pck:='';
buf:=#$AA#$34#$00#$00#$00;
sendtoserverEx(namemain);
sendtoserverEx(nameslave);
end;
end;
#$A7:
begin
buf:=pck;
sendtoserverEx(nameslave);
end;
end;
end.
не... чото у тебя не так. у меня четкое равно, а утебя больше-меньше. исправь по моей задумке и попробуй.
второй вариант:
можно еще попробовать убрать "нажатый ctrl" при использовании скила. моба он будет бить полюбому, в пвп - если противник флагнут, то тоже атаковать можно без ctrl. проблема возникнет если ты первый флагаешься - бот не будет бить до тех пор, пока таргет наконец не флагнется. и самое главное будучи в пати - он без ctrl не будет стрелять в мейна, даже если взял его по ошибке в таргет.
не... чото у тебя не так. у меня четкое равно, а утебя больше-меньше. исправь по моей задумке и попробуй.
Больше-меньше это неравно. Т.Е. юзать если таргет не главный чар. Ctrl убирать не буду. Прийдется изменить систему движения за главным чаром, чтоб бот его не брал в таргет.
Добавлено через 5 часов 58 минут
Подправил систему следования за главным персонажем, добавлена константа растояния. Теперь бот не выделяет его => нет глюка с атакой мастера.
Код:
// Управление вторым окном
// by spiritofsands
//
const
namemain='Lockhorn'; // ник главного чара
nameslave='Ikhanna'; // ник второго окна
len=50; // расстояние между персонажами
var
ToX, ToY, ToZ, OrigX, OrigY, OrigZ, i, mid, q, p, tid, tx, ty, tz, tick,
partyID1, pID1x, pID1y, pID1z, ctid, atk : integer;
d:string;
procedure Init; //Вызывается при включении скрипта
begin
send2msg('target self');
q:=2;
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure Send2Msg(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(namemain);
end;
begin
if (pck[1]=#$04) and (connectname=namemain) and (q=2) then
begin
i:=2;
mid:=readd(i);
pck:='';
send2msg('id');
q:=0;
end;
if fromserver and (connectname=nameslave) then
case pck[1] of
#$39: // party
begin
i:=2;
send2msg('party request');
if (reads(i))=namemain then
begin
send2msg('join '+namemain+'s party');
buf:=#$2A#$01#$00#$00#$00;
SendToServerEX(Nameslave);
end;
end;
{#$A7: // partymember 1 id and pos
begin
i:=2;
p:=readd(i);
partyID1:=readd(i);
pID1x:=readd(i);
pID1y:=readd(i);
pID1z:=readd(i);
buf:=#$04;
writed(partyID1);
writed(pID1x);
writed(pID1y);
writed(pID1z);
buf:= buf + hstr('00');
SendToServerEX(Nameslave);
end;}
end;
if fromclient and (connectname=namemain) then // from main client
case pck[1] of
#$04: // target
begin
i:=2;
tid:=readd(i);
tx:=readd(i);
ty:=readd(i);
tz:=readd(i);
buf:=#$04;
writemask('ddddc', [Tid, Tx, Ty, tz, 0]);
sendtoserverEx(nameslave);
//Send2Msg('on target');
end;
#$21: // npc dialog
begin
buf:=pck;
sendtoserverEx(nameslave);
//Send2Msg('dialog proceed');
end;
#$37: // cancel target
begin
buf:=pck;
sendtoserverEx(nameslave);
//Send2Msg('target canceled');
end;
#$2F: // use skill
begin
buf:=pck;
sendtoserverEx(nameslave);
//Send2Msg('skill used');
end;
#$38: // -u = /unstuck all
begin
i:=2;
if reads(i)='-u' then
begin
pck:='';
buf:=#$AA#$34#$00#$00#$00;
sendtoserverEx(namemain);
sendtoserverEx(nameslave);
end;
end;
#$01: //go to
begin
i:=2;
tox:=readd(i);
toy:=readd(i);
toz:=readd(i);
origx:=readd(i);
origy:=readd(i);
origz:=readd(i);
buf:=#$01;
writed(tox-len);
writed(toy-((len*toy) div (tox)));
writed(toz-((len*toz) div (tox)));
writed(origx);
writed(origy);
writed(origz);
writed(1);
sendtoserverEx(nameslave);
end;
#$A7:
begin
buf:=pck;
sendtoserverEx(nameslave);
end;
end;
end.
Добавлено через 51 минуту
Появилась новая проблема - бот ходит только с одной координатной стороны главного чара. Как можно усовершенствовать скрипт, чтобы бот ходил сзади/сбоку чара?
Последний раз редактировалось spiritofsands, 03.02.2010 в 02:11.
Причина: Добавлено сообщение
За это сообщение spiritofsands нажился спасибкой от:
кстати чтоб совсем уж не отличить - сделай начало движения по таймеру. к примеру через 1 секунду после начала движения мастера. а то одновременное начало движения ну совсем уж картину палит. а если с паузой - то типа "человек, увидел, что сопати двинулся - то двинулся следом."