на наверно баян но вчера сидел правил скриптик :)
Код:
//автоматическое использование НР пробирок 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 секунд:
а мой пост о пакете с такими даные найдёте в теме "ищу пакет" я его сам в итоге нашёл всё расписано там