Показать сообщение отдельно
Старый 06.02.2008, 09:44   #215
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию кушаем ЦП баночки

на наверно баян но вчера сидел правил скриптик :)
Код:
//автоматическое использование НР пробирок by NLObP      + СP редакция GrinchB
// 1-Изменяем Name='ххх';
// 2-бросаем, подбираем или выпиваем Heal Potion и СП как включите там всё написано будет в чат
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и  Protocol 656

const
    Name='ххх';
var
    ColvoCP,ColvoHP, CharObjID, ItemObjHP, ItemObjCP: integer;
    CurHP,MaxHP,CurCP,MaxCP: integer;
    TimerCP,TimerHP: TTimer;
    Status: boolean;
//******************************************************************************
procedure OnTimerHP(Sender: TObject);
begin
    if ColvoHP=0 then exit;
    buf:=#$14;
    WriteD(ItemObjHP);
    WriteD(00);
    SendToServerEx(Name);
    ColvoHP:=ColvoHP-1; //количество хилок
    if ColvoHP=0 then begin
      Say('Хилок='+inttostr(ColvoHP));
      Say('Кончились хилки! Закупите Heal Potion!');
    end;
end;
procedure OnTimerCP(Sender: TObject);
begin
    if ColvoCP=0 then exit;
    buf:=#$14;
    WriteD(ItemObjCP);
    WriteD(00);
    SendToServerEx(Name);
    ColvoCP:=ColvoCP-1; //количество CP
    if ColvoCP=0 then begin
      Say('CP='+inttostr(ColvoCP));
      Say('ЕСЛИ ТЫ ПОЛУЧИЛ ЭТО СООБЩЕНИЕ ТЫ ТРУП!');
    end;
end;
//******************************************************************************
procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(Name);
  WriteS(msg);
  SendToClientEx(Name);
end;
//******************************************************************************
procedure InitStats;
var
  i: integer;
begin
  //Запоминаем ИД
  i:=18;
  CharObjID:=ReadD(i);
  //смещение переменное, зависит от имени (LenName*2+2)
  i:=i+(Length(Name)*2+2)+44;
  MaxHP:=ReadD(i);
  CurHP:=ReadD(i);
  MaxCP:=ReadD(i);
  CurCP:=ReadD(i);
  //Say('MaxHP='+inttostr(MaxHP)+'CurHP='+inttostr(CurHP));
  if ItemObjHP=0 then exit;
  if (CurHP<MaxHP-50) then TimerHP.enabled:=true else TimerHP.enabled:=false;
end;
//******************************************************************************
procedure StatsUpdate;
var
  i: integer;
begin
  for i:=0 to ReadD(6)-1 do begin
    case pck[i*8+10] of
      #$09: CurHP:=ReadD(i*8+14);
      #$0A: MaxHP:=ReadD(i*8+14);
      #$21: CurCP:=ReadD(i*8+14);
      #$22: MaxCP:=ReadD(i*8+14);
    end;
  end;
  if ItemObjHP=0 then exit;
  if (CurHP<=MaxHP-50) then TimerHP.enabled:=true else TimerHP.enabled:=false;
  if ItemObjCP=0 then exit;
  if (CurCP<=MaxCP-200) then TimerCP.enabled:=true else TimerCP.enabled:=false;
end;
//******************************************************************************
procedure ObjtoColvoHP(ItemObjHP:integer);
var
  i: integer;
begin
  if ItemObjHP=0 then exit;
  for i:=0 to ReadD(4)-1 do begin
    if ItemObjHP=ReadD(i*28+8) then ColvoHP:=ReadD(i*28+16); //количество хилок
  end;
end;
procedure ObjtoColvoCP(ItemObjCP:integer);
var
  i: integer;
  begin
  if ItemObjCP=0 then exit;
  for i:=0 to ReadD(8)-1 do begin
    if ItemObjCP=ReadD(i*28+8) then ColvoCP:=ReadD(i*28+16); //количество хилок
  end;
end;


//******************************************************************************
//                 Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
    status:=false;
    CharObjID:=0;
    ItemObjHP:=0;
    ItemObjCP:=0;
    timerHP:=TTimer.Create(nil);
    timerHP.OnTimer:=@OnTimerHP;
    timerHP.enabled:=false;
    timerHP.interval:=5000; //время отката лечения
    Say('Для начала работы скрипта бросаем, подбираем или выпиваем Heal Potion!');
    timerCP:=TTimer.Create(nil);
    timerCP.OnTimer:=@OnTimerCP;
    timerCP.enabled:=false;
    timerCP.interval:=100; //время отката для шоков или где быстро кушаются банки
    Say('Для начала работы скрипта бросаем, подбираем или выпиваем CP!');
end;
//******************************************************************************
//                 Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
     timerHP.Free;
     timerCP.Free;
end;
//******************************************************************************
//       Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//******************************************************************************
  //не обрабатываем пустые пакеты
  if pck='' then exit;
//******************************************************************************
//InventoryUpdate
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)=1060) or (ReadD(12)=1061)) then begin //Healing Potion, Lesser Healing Potion
    ItemObjHP:=ReadD(8);
    ColvoHP:=ReadD(16); //количество хилок
    if status then exit;
    Say('Автоматическое использование Нeal Рotion готово к работе!');
    Say('Хилок='+inttostr(ColvoHP));

end;
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and (ReadD(12)=5592)  then begin //CP, Lesser Healing Potion
    ItemObjCP:=ReadD(8);
    ColvoCP:=ReadD(16); //количество CP
    if status then exit;
    Say('Автоматическое использование CP готово к работе!');
    Say('CP='+inttostr(ColvoCP));

    status:=true;
end;
//******************************************************************************
//ItemList
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then begin
    ObjtoColvoHP(ItemObjHP); //количество хилок
    //Say('Хилок='+inttostr(ColvoHP));
end;
//******************************************************************************
//UserInfo
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
//******************************************************************************
//StatusUpdate
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
end.
скажу сразу я пока учусь програмить и спс NLObP и его коментариям т.к. без них я б не разобрался как ет работает и не добавил банки ЦП. думаю доработать потом под 2 вида банок что б кушалось по очереди т.к. метод кульный :) и грейт хилки добавить на условие кушания меньше 30% и до 60% потом снова красненькие вот тока сейчас не эти занят хочу велосипед изобрести.
Идея простая скилы юзаются в порядке нажатия после отката предыдущего так вот хочу сделать процедурку котороя бы на автомате брала время из пакета и заменить в скриптах на баф таймер ровно допустим 2секунды на число реального каста как правило ето в районе 1-5 секунд взависимости от бафа под смом вообще стремиться к нулю. Так что пока буду думать юзайте хп и цп банки так. Или помогите кто шарит в програмерстве т.к. ет не простая процедура и очень как мне кажеться полезная

Добавлено спустя 4 минуты 47 секунд:
а мой пост о пакете с такими даные найдёте в теме "ищу пакет" я его сам в итоге нашёл всё расписано там
Grinch вне форума   Ответить с цитированием