Спарринг

Включает в себя Parrying, Tactics, Fencing, Swordsmanship, Macefighting, Wrestling, Healing, Anatomy.


Вариант 1

Через .options необходимо задать % лечения бинтами.

Program Sparring;
{$Include 'all.inc'}

var
i : Integer;
n : TDateTime;
Weapon : array[1..3] of cardinal;

const
shield = $1B74; //Kite Shield
bandages = $0E21;
mybow = $13B2;
arrows = $0F3F; 

//Настройки
Archery = 0; //1 - качаем Арчери, 0 - нет
UseAnatomy = 1; //1 - качаем Анатомию, 0 - нет
EnemyID = $00000000; //ID кого бьём

//XY места спарринга (.where)
ax = 1000;
ay = 1000;
//XY безопасного места
bx = 1001;
by = 1002;
minHP = 30; //меньше - отходим
maxHP = 50; //больше - возвращаемся на спарринг

procedure weaptype;
begin
  Weapon[1] := $13F6; //Butcher knife
  Weapon[2] := $0F51; //Dager
  Weapon[3] := $13E3; //smitty humer
end;

procedure checkshields;
begin
  if (not dead) and (connected) then
  begin
    if (getquantity(findtype(shield,backpack)) > 0) and (gettype(ObjAtLayer(LhandLayer)) <> gettype(finditem)) then
    begin
      UnEquip(LHandLayer);
      wait(500);
      Equip(LhandLayer,finditem);
      wait(500);
    end;
    if (getquantity(findtype(shield,backpack)) < 0) and (gettype(ObjAtLayer(LhandLayer)) <> gettype(finditem)) then
    begin
      FindDistance := 2;
      FindType(shield, ground);
      if FindCount > 0 then
      begin
        MoveItem(FindItem,1,backpack,0,0,0);
      end;
    end;
  end;
end;

procedure checkhp;
begin
  if (HP < minHP) then newMoveXY(bx,by,true,0,true);
  if (HP > maxHP) then newMoveXY(ax,ay,true,0,true);
end;

procedure checkbandages;
begin
  FindType(bandages, backpack);
  if GetQuantity(FindItem) < 10 then
  begin
    FindDistance := 2;
    FindType(bandages, ground);
    MoveItem(FindItem, GetQuantity(FindItem),backpack,0,0,0);
  end;
end;

procedure Anatomy;
var
d, t: TDateTime;

begin
  d := StrToTime('0:00:11');
  if ((now - n) > d) or (n = 0) then
  begin
    t := now;
    WaitTargetSelf;
    UseSkill('Anatomy');
    if TargetPresent then CancelTarget;
    n := now;
  end;
end;

procedure CheckArrows;
begin
  FindDistance := 2;
  FindType(arrows, ground);
  if FindCount > 0 then
  begin
    MoveItem(FindItem,1000,backpack,0,0,0);
  end;
end;

Begin
  weaptype;
  while not dead do
  begin
    WaitConnection(2000);
    CheckSave;
    Hungry(1, BackPack);
    Attack(EnemyID);
    for i := 1 to 3 do
    begin
      checkhp; //отходим если мало ХП
      checkshields; //ищем щиты в паке, одеваем, если нет - ищем на земле.
      checkbandages; //ищем бинты на земле
      if Archery = 1 then checkarrows; //ищем стрелы на земле
      if UseAnatomy = 1 then Anatomy; //Качаем Анатомию
      if (ObjAtLayer(RHandLayer) = 0) then
      begin
        if Archery = 0 then equipt(RHandLayer, Weapon[i]);
        if Archery = 1 then equipt(RHandLayer, mybow);
        wait(1000);
        i := i + 1;
        if (i > 3) then i := 1
      end;
    end;
  end;
end.
Вариант 2

Без арчери, с одним оружием, но с заменой брони + лечение в скрипте.

// Берём в бэкпэк рыбу, бинты, армор, щиты, вепки и всё. Работает без аутохила

Program Anatomy;

const
Enemy   = $000000;    // кого атакуем
tweapon = $0F5C;      // оружие какое вставляет в руку
tshield = $1B76;      // какой щит одевает
bandage = $0E21;      // бинты

// Тут фулл плейт меил, но всегда можно заменить части на чайнмил, если стр меньше 90
chest    = $1415;
legs     = $1411;
sholders = $1410;
gloves   = $1414;
gorget   = $1413;
helm     = $1412;

ax = 0000;              // координата 1 там, где будет чар драться
ay = 0000;              // координата 2 там, где будет чар драться
bx = 0000;              // координата 1 там куда чар будет отбегать лечиться при лоу хп
by = 0000;              // координата 2 там куда чар будет отбегать лечиться при лоу хп

{$Include 'all.inc'}


procedure checkall;
begin
  if (not dead) and (connected) then
  begin
    //hands
    if (getquantity(findtype(tweapon,backpack)) > 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,backpack)) > 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;
    //armor
    if (getquantity(findtype(chest,backpack)) > 0) and (gettype(ObjAtLayer(TorsoLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Chest change, осталось '+inttostr(findcount-1));
      UnEquip(TorsoLayer);
      wait(500);
      Equip(TorsoLayer,finditem);
      wait(500);
    end;

    if (getquantity(findtype(legs,backpack)) > 0) and (gettype(ObjAtLayer(LegsLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Legs Change, осталось '+inttostr(findcount-1));
      UnEquip(LegsLayer);
      wait(500);
      Equip(LegsLayer,finditem);
      wait(500);
    end;

    if (getquantity(findtype(sholders,backpack)) > 0) and (gettype(ObjAtLayer(ArmsLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Sholders Change, осталось '+inttostr(findcount-1));
      UnEquip(ArmsLayer);
      wait(500);
      Equip(ArmsLayer,finditem);
      wait(500);
    end;
    if (getquantity(findtype(gloves,backpack)) > 0) and (gettype(ObjAtLayer(GlovesLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Gloves Change, осталось '+inttostr(findcount-1));
      UnEquip(GlovesLayer);
      wait(500);
      Equip(GlovesLayer,finditem);
      wait(500);
    end;

    if (getquantity(findtype(gorget,backpack)) > 0) and (gettype(ObjAtLayer(NeckLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Gorget Change, осталось '+inttostr(findcount-1));
      UnEquip(NeckLayer);
      wait(500);
      Equip(NeckLayer,finditem);
      wait(500);
    end;
    if (getquantity(findtype(helm,backpack)) > 0) and (gettype(ObjAtLayer(HatLayer)) <> gettype(finditem)) then
    begin
      addtosystemjournal('Helm Change, осталось '+inttostr(findcount-1));
      UnEquip(HatLayer);
      wait(500);
      Equip(HatLayer,finditem);
      wait(500);
    end;
  end;
end;

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


procedure checkhp;
begin
  while (HP < 100) do  // если ХП меньше 100 то начинаем пробовать себя лечить.
  begin
    if (HP < 80) then newMoveXY(bx,by,true,0,true);  // если упали до 80, то отбегаем
    UseType(bandage, $FFFF);
    WaitTargetSelf;
    wait(1000);
  end;
  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,backpack);
      checkhp;
      checkall;
      Attack(Enemy);
      checkhp;
      If TargetPresent Then CancelTarget;
      UseSkill('Anatomy');
      WaitTargetSelf;
      Wait(1000);
      checkbandages;
      If TargetPresent Then CancelTarget;
    end;
  end;
End.
 
faq/stealth/sparring.txt · Последние изменения: 2019/11/19 22:59 — tsatsur
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki