Цитата:
Сообщение от DeVolf
да что та есть похожие) но увы ...)
так что мне некто не может помоч?
|
В чем помоч-то?
Добавлено спустя 59 минут 57 секунд:
Re: ДА БУДЕТ БОТ!
Немного подправил скрипт Бота.
Внес изменения в кач дракона, чтобы он мог атаковать и без маны.
Код:
//автоматический кач 'Hatchling of the Stars' by NLObP
//******************************************************************************
// Для работы скрипта:
// 1 - Саммоним дракона
// 2 - кладем ему еду
//******************************************************************************
// На автомате, при нападении хозяина на моба дракон автоматически ассистит
// при необходимости лечит себя, после боя следует за хозяином.
//******************************************************************************
//******************************************************************************
// константы и переменные скрипта
//******************************************************************************
const
Owner='NLObP'; //ник перса хозяина
Pet=''; //имя Пета
var
OwnerID, PetID, TargetID : Integer; //ИД хозяина, пета, ИД таргета
CoordX, CoordY, CoordZ : String; //координаты пета
Cmd :String; //команда пету
CurHP, MaxHP, CurMP, MaxMP, i : Integer;
tick: Integer;
timerA: TTimer;
timerB: TTimer;
timerHP: TTimer;
MagicAtck:boolean;
//******************************************************************************
// Подпрограммы
//******************************************************************************
//(c)dmitry501
//если ставить sleep() то скрипт останавливается на время, но и пакеты тоже
//не принимаются и не отправляются, так вот эта функция позваляет избежать этого
function Pause(Timewait: Integer):Boolean;
// сквозная проверка без остановки скрипта
var
t : integer;
begin
result:=false;
t:= Round(Time*86400);
if t>(tick+Timewait) then
begin
tick:=t;
result:=true;
end;
end;
//все сообщения ботов в приватном чате патилидера
//видны только нам
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(ConnectName);
WriteS(msg);
SendToClientEx(Owner);
end;
procedure OnTimerA(Sender: TObject);
begin
//пакет RequestActionUse;
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
SendToServerEX(Owner);
//Say('магическая атака пета');
end;
procedure OnTimerB(Sender: TObject);
begin
//пакет RequestActionUse;
buf:=hstr('45 10 00 00 00 00 00 00 00 00'); //атака пета
SendToServerEX(Owner);
end;
procedure OnTimerHP(Sender: TObject);
begin
buf:=hstr('45 EE 03 00 00 00 00 00 00 00'); //пет лечиться
SendToServerEX(Owner);
end;
//******************************************************************************
// Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
MagicAtck:=true; //магическая атака
OwnerID:=0;
PetID:=0;
timerA:=TTimer.Create(nil);
timerA.OnTimer:=@OnTimerA;
timerA.enabled:=false;
timerA.interval:=5000; //время отката магии пета
timerB:=TTimer.Create(nil);
timerB.OnTimer:=@OnTimerB;
timerB.enabled:=false;
timerB.interval:=5000; //время отката
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=false;
timerHP.interval:=2000; //время отката лечения пета
end;
//******************************************************************************
// Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
timerA.Free;
timerB.Free;
timerHP.Free;
end;
//******************************************************************************
// Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//если от сервака принят пакет с UserInfo
if FromServer and (OwnerID=0) and (ConnectName=Owner) and (pck[1]=#$04) then begin
//Запоминаем собственный ИД
OwnerID:=ReadD(18);
Say('Скрипт готов к работе!');
end;
//пакет Attack
//атаковать, если хозяин напал на цель
if FromServer and (ConnectName=Owner) and (pck[1]=#$05) and (OwnerID=ReadD(2)) then begin
if (TargetID<>0) and (OwnerID<>TargetID) then begin
if magicatck then begin
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
SendToServerEX(Owner);
Say('Атакую магией!');
TimerA.enabled:=true;
TimerB.enabled:=false;
//Say('Включили таймер');
end
else begin
Say('Атакую цель!');
TimerB.enabled:=true;
TimerA.enabled:=false;
end;
end;
end;
//пакет MagicSkillUse
//атаковать, если хозяин напал на цель магией
if FromServer and (ConnectName=Owner) and (pck[1]=#$48) and (OwnerID=ReadD(2)) then begin
if (TargetID<>0) and (OwnerID<>TargetID) then begin
if magicatck then begin
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
SendToServerEX(Owner);
Say('Атакую магией!');
TimerA.enabled:=true;
TimerB.enabled:=false;
//Say('Включили таймер');
end
else begin
Say('Атакую цель!');
TimerB.enabled:=true;
TimerA.enabled:=false;
end;
end;
end;
//пакет TargetSelect
//если принят пакет со сменой таргета
if FromServer and (ConnectName=Owner) and (pck[1]=#$a6) then begin
//запоминаем ИД таргета для ассиста
TargetID:=ReadD(2);
//Say('Это ИД таргета.');
end;
//пакет TargetUnselected
//командир отменил цель
if FromServer and (ConnectName=Owner) and (pck[1]=#$2a) and (OwnerID=ReadD(2)) then begin
TargetID:=0;
buf:=hstr('45 11 00 00 00 00 00 00 00 00'); //stop current action
SendToServerEX(Owner);
//Say('Стоп!');
TimerA.enabled:=false;
TimerB.enabled:=false;
//Say('Выключили таймер');
end;
//если от сервака принят пакет с PetInfo
if FromServer and (PetID=0) and (ConnectName=Owner) and (pck[1]=#$b1) then begin
//Запоминаем ИД пета
PetID:=ReadD(6);
//смещение переменное, зависит от имени Пета(LenName*2+2) и имени Чара(LenName*2+2)
//126 байт до имени Пета(LenName*2+2) и имени Чара(LenName*2+2) после 20 байт (+1 начало CurHP)
i:=126+(Length(Pet)*2+2)+(Length(Owner)*2+2)+20+1;
CurHP:=ReadD(i);
MaxHP:=ReadD(i);
CurMP:=ReadD(i);
MaxMP:=ReadD(i);
if (CurHP<MaxHP)
then TimerHP.enabled:=true
else TimerHP.enabled:=false;
if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магическая атака
end;
//пакет PetStatusUpdate
//проверяем на жизнь пета
if FromServer and (ConnectName=Owner) and (pck[1]=#$b5) and (PetID=ReadD(6)) then begin
//смещение переменное, зависит от имени Пета(LenName*2+2)
//21 байт до имени Пета(LenName*2+2) после 8 байт (+1 начало CurHP)
i:=21+(Length(Pet)*2+2)+8+1;
CurHP:=ReadD(i);
MaxHP:=ReadD(i);
CurMP:=ReadD(i);
MaxMP:=ReadD(i);
//Say('Считываем параметры пета');
if (CurHP<MaxHP)
then TimerHP.enabled:=true
else TimerHP.enabled:=false;
if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магическая атака
end;
end.