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

[DRW] Parring / Tactics

Only working scripts
Post Reply
ybw
Neophyte
Neophyte
Posts: 13
Joined: 02.04.2012 18:47

[DRW] Parring / Tactics

Post by ybw »

в пак — пару ножей, 500 бинтов, ванну для мытья бинтов
вы руки — нож (даггер), щит.

я качал в сартире и делал так.
fight_x/fight_y = центр дома.
Один бот в одном углу дома, другой в противоположном.

Code: Select all

program parring;
{$Include 'all.inc'}

Const
    MinHP = 70; // debug
    Dagger = $0f51;
    ShieldType = $1b76;
    clean_bandages = $0E21;
    bloody_bandages = $0E20;
    a_wash_basin = $1008;
    fight_x = 4230;
    fight_y = 699;
    

var
    x, y: Word;
    ctime: TDateTime;
    enemy: Cardinal;

procedure Wash;
    begin
        UseObject(FindType(bloody_bandages,Backpack));
        checksave;
        WaitTargetObject(FindType(a_wash_basin,Backpack));
    end;

procedure Heal;
    var
        ctime : TDateTime;
        k : integer;
    begin
        SetWarMode(false);
        repeat
            checksave;
            UseObject(FindType(clean_bandages,Backpack));
            WaitTargetObject(self);
            k := 0;
            repeat
                k:=k+1;
                wait(100);
                checksave;
            until (((InJournalBetweenTimes('bloody|barely|does not need|bandage yet', ctime, Now))<>-1) or (k > 100)); 
            wait(50);
        until (GetHP(self) = GetMaxHP(self));
        Wash;
    end;

begin
    moveThroughNPC := 0;
    x := GetX(self);
    y := GetY(self);
    while true do
        begin
            AddToSystemJournal('Начали');
            repeat
                wait(10)
            until newMoveXY(fight_x, fight_y, false, 0, true);
            SetWarMode(true);
            ctime := Now;
            AddToSystemJournal('Атакуй');
            FindDistance := 0;
            Ignore(self);
            if enemy = 0 then
                begin
                    repeat
                        enemy := FindType($0190, ground);
                        if enemy = 0 then enemy := FindType($0191, ground);
                        wait(100);
                    until (enemy <> 0) and (enemy <> self) and (IsNPC(enemy) <> false);
                end;
            AddToSystemJournal('Подождем пока нас изобьют');
            repeat
                Attack(enemy);
                wait(100)
                if (fight_y <> GetY(self)) or (fight_x <> GetX(self)) then
                    begin
                        SetWarMode(false);
                        repeat
                            AddToSystemJournal('Возвращаемся на боевую клетку')
                            wait(100)
                        until newMoveXY(fight_x, fight_y, false, 0, true);
                        Attack(enemy);
                    end;
            until (GetHP(enemy) < 5) or (GetHP(self) < MinHP) or (gettype(ObjAtLayer(RhandLayer)) <> Dagger) or ((GetDistance(enemy) > 0) and (GetHP(self) <> GetMaxHP(self)));
            AddToSystemJournal('Отходим на лечение');
            repeat
                SetWarMode(false);
                wait(100);
            until newMoveXY(x, y, false, 0, true);
            AddToSystemJournal('Лечимся');
            Heal;
            AddToSystemJournal('Одели щит');
            UseObject(FindType(ShieldType, backpack));
            UseObject(FindType(Dagger, backpack));
            wait(500);
            checksave;
            if gettype(ObjAtLayer(RhandLayer)) <> Dagger then
                exit;
        end;
end.
Post Reply