Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses SysUtils, Classes;
- var
- SafePoint: array of integer = [147593, -112774, -2144]; // "безопасная" точка - куда отбегать для ребафа
- BuffID: integer = 1204; // ID бафа, по которому проверять необходимость ребафа
- RebuffTime: cardinal = 60000; // время до окончания бафа для ребафа (в мс)
- AltB: array of string = ['_bbshome', '_cbbsbuff;', '_cbbsblist:mage_scheme:index']; // байпасы для бафа
- procedure AltB_Rebuff_Thread();
- var X, Y, Z: integer;
- begin
- while delay(555) do begin
- if not User.Buffs.Byid(15649, Obj) or (Obj.EndTime<30000) then begin //эту строку я поменял
- Engine.Msg('[Rebuff]', 'Пора ребафаться, отхожу в безопасное место', 0);
- // предпринимаем необходимые действия, например тормозим другие потоки или что-то еще
- // если хотите чтобы бот сначала добил всех агро мобов, которые висят на нем,
- // прежде чем бежать в безопасную точку, то раскоментируйте код ниже
- {if (HaveAgroMobs) then begin
- Engine.Msg('[Rebuff]', 'Отбиваюсь от мобов', 128);
- while (HaveAgroMobs) do delay(555);
- Engine.FaceControl(1, true);
- end; }
- X:= User.X;
- Y:= User.Y;
- Z:= User.Z;
- Engine.FaceControl(1, false);
- Engine.Msg('[Rebuff]', 'Запомнил свои координаты: ['+IntToStr(X)+', '+IntToStr(Y)+', '+IntToStr(Z)+']', 0);
- while (User.DistTo(SafePoint[0], SafePoint[1], SafePoint[2]) > 222) do // если нужно, то
- if Engine.MoveTo(SafePoint[0], SafePoint[1], SafePoint[2]) then delay(555); // бежим в безопасную точку
- Delay(1000);
- if (HaveAgroMobs) then begin // если на нас висят агро мобы, то
- Engine.Msg('[Rebuff]', 'Отбиваюсь от мобов', 128);
- Engine.FaceControl(1, true); // включаем интерфейс
- while (HaveAgroMobs) do delay(555); // пока есть агро мобы - ждем
- Engine.FaceControl(1, false); // выключаем интерфейс
- while (User.InCombat) do delay(555); // ждем выхода из боя
- end;
- repeat BuffAltB(); // ребафаемся до тех пор
- //коментим эту строку так как нам не интересно \ьл until (BuffTime(BuffID) > RebuffTime);
- // пока время бафа не станет больше требуемого
- Engine.MoveTo(X, Y, Z); // возвращаемся в координаты, которые запомнили перед бафом
- Engine.FaceControl(1, true); // включаем обратно интерфейс и продолжаем фарм
- end;
- end;
- end;
- function BuffTime(ID: integer): cardinal;
- var i: integer;
- begin
- result:= 0;
- for i:= 0 to User.Buffs.Count-1 do begin // пробегаем по списку своих бафов
- if (User.Buffs.Items(i).id = ID) then begin // если ID совпал, то
- result:= User.Buffs.Items(i).EndTime; // записываем в результат время до окончания бафа
- break;
- end;
- end;
- end;
- procedure BuffAltB();
- var i: integer;
- begin
- for i:= Low(AltB) to High(AltB) do
- if Engine.BypassToServer(AltB[i]) then delay(555);
- end;
- function HaveAgroMobs(): boolean; // функция проверяет, висят ли на нас агромобы
- var i: integer;
- begin
- result:= false;
- for i:= 0 to NpcList.Count-1 do begin
- if (IsAgr(NpcList(i))) then begin
- result:= true;
- exit;
- end;
- end;
- end;
- function IsAgr(Mob: TL2Npc): boolean;
- begin
- result:= (Mob.AtkOID = User.OID) and (not Mob.Dead);
- end;
- begin
- Script.NewThread(@AltB_Rebuff_Thread);
- // тут может быть дополнительный код если что
- Delay(-1);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement