Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Спарринг (рабочий)

тут можно задать вопрос по скриптингу
Post Reply
Verana
Novice
Novice
Posts: 60
Joined: 26.06.2015 18:44

Спарринг (рабочий)

Post by Verana »

Скрипт рабочий просто хочется слегка доработать... В общем когда хп меньше определенного уровня чар отходит в нужный тайл и там лечится, но лечится только один раз, а нужно чтоб он лечился до конца а потом только шел обратно в спарринг. Как это лучше реализовать чтоб был репеат пока не станет MaxHp или есть что поизящнее?

Program Anatomy;
// - Жаренную рыбку рядом на пол и бинты тоже.
//Щиты и оружие для перезарядки тоже рядом на пол.
//Все остальное файты будут делать сами.
const
Enemy = $0000CB75; //- айди с кем воюем и на ком качаем анатомку
tweapon = $0000; // - тип пушек для перезарядки
tshield = $1B72; // - тип щитов для перезарядки
ax = 4576; // - координыты, где вместе стоим в спаринге
ay = 1176; // ...
bx = 4576; // - координаты через одну клетку, куда отбегать если хп опустится ниже 25 и не будем успевать отхиливаться.
by = 1175; // ...

{$Include 'all.inc'}

procedure checkall;
begin
if (not dead) and (connected) then
begin
if (getquantity(findtype(tweapon,ground)) > 0) and (gettype(ObjAtLayer(RhandLayer)) <> gettype(finditem)) then
begin
addtosystemjournal('Weapon Change, осталось '+inttostr(findcount-1));
UnEquip(RHandLayer);
wait(500);
Equip(RhandLayer,finditem);
Wait(500);
end;
if (getquantity(findtype(tshield,ground)) > 0) and (gettype(ObjAtLayer(LhandLayer)) <> gettype(finditem)) then
begin
addtosystemjournal('Shield Change, осталось '+inttostr(findcount-1));
UnEquip(LHandLayer);
wait(500);
Equip(LhandLayer,finditem);
wait(500);
end;
end;
end;

procedure checkbandages;
begin
if (count($0E21) < 10) and (not dead) then
begin
MoveItem(FindType($0E21,ground),50,backpack,0,0,0);
wait(500);
end;
end;

procedure checkhp;
begin
if (HP < 35) then newMoveXY(bx,by,true,0,true);
if (HP > 35) then newMoveXY(ax,ay,true,0,true); // вариант такой еще if (HP = MaxHP) then newMoveXY(ax,ay,true,0,true);
end;

Begin
SetARStatus(true);
moveThroughNPC := 1;
while true do
begin
SetWarMode(True);
while not Dead do
begin
Hungry(1,ground);
checkhp;
checkall;
Attack(Enemy);
checkhp;
If TargetPresent Then CancelTarget;
UseSkill('Anatomy');
WaitTargetObject(Enemy);
Wait(1000);
checkbandages;
If TargetPresent Then CancelTarget;
if (count($0E21) > 0) then
begin
if (HP < 35) then
begin
UseType($0E21,$0000);
WaitTargetSelf;
Wait(1000);
end;
end;
if (Count($0E23) > 0) then stack($0E23,$0000);
end;
end;
End.
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

Re: Спарринг (рабочий)

Post by maza »

while (HP<>MaxHP) do
begin
что то там делаем чтобы было полное хп :D
end;
Verana
Novice
Novice
Posts: 60
Joined: 26.06.2015 18:44

Re: Спарринг (рабочий)

Post by Verana »

maza wrote:while (HP<>MaxHP) do
begin
что то там делаем чтобы было полное хп :D
end;
В таком случае он ведь будет хилиться нонстопом даже во время сарринга... Нужно чтоб он хилился до полного на тайле куда будет для этого отбегает, в скрипте для этого есть функция отхода.. ( чтоб при спарринге не физлился хилинг)
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

Re: Спарринг (рабочий)

Post by maza »

Code: Select all

Program Anatomy;
// - Жаренную рыбку рядом на пол и бинты тоже.
//Щиты и оружие для перезарядки тоже рядом на пол.
//Все остальное файты будут делать сами.
const
Enemy = $0000CB75; //- айди с кем воюем и на ком качаем анатомку
tweapon = $0000; // - тип пушек для перезарядки
tshield = $1B72; // - тип щитов для перезарядки
ax = 4576; // - координыты, где вместе стоим в спаринге
ay = 1176; // ...
bx = 4576; // - координаты через одну клетку, куда отбегать если хп опустится ниже 25 и не будем успевать отхиливаться.
by = 1175; // ...

{$Include 'all.inc'}

procedure checkall;
begin
if (not dead) and (connected) then
begin
if (getquantity(findtype(tweapon,ground)) > 0) and (gettype(ObjAtLayer(RhandLayer)) <> gettype(finditem)) then
begin
addtosystemjournal('Weapon Change, осталось '+inttostr(findcount-1));
UnEquip(RHandLayer);
wait(500);
Equip(RhandLayer,finditem);
Wait(500);
end;
if (getquantity(findtype(tshield,ground)) > 0) and (gettype(ObjAtLayer(LhandLayer)) <> gettype(finditem)) then
begin
addtosystemjournal('Shield Change, осталось '+inttostr(findcount-1));
UnEquip(LHandLayer);
wait(500);
Equip(LhandLayer,finditem);
wait(500);
end;
end;
end;

procedure checkbandages;
begin
if (count($0E21) < 10) and (not dead) then
begin
MoveItem(FindType($0E21,ground),50,backpack,0,0,0);
wait(500);
end;
end;

procedure checkhp;
begin
if (HP < 35) then newMoveXY(bx,by,true,0,true); //Отбежать
 checkbandages; //Проверить бинты
  while (HP<>MaxHP) do // Юзать бинт на себя пока не будет макс хп
   begin
     if (count($0E21) > 0) then
      begin
      UseType($0E21,$0000);
      WaitTargetSelf;
      Wait(1000);
      end;
   end;
   if (HP = MaxHP) then newMoveXY(ax,ay,true,0,true); // Подбежать
end;

Begin
SetARStatus(true);
moveThroughNPC := 1;
while true do
begin
SetWarMode(True);
while not Dead do
begin
Hungry(1,ground);
checkhp;
checkall;
Attack(Enemy);
checkhp;
If TargetPresent Then CancelTarget;
UseSkill('Anatomy');
WaitTargetObject(Enemy);
Wait(1000);
If TargetPresent Then CancelTarget;
checkhp;
if (Count($0E23) > 0) then stack($0E23,$0000);
end;
end;
End.
Post Reply