Показать сообщение отдельно
Старый 04.11.2007, 15:32   #59
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от 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.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием