Перейти к содержанию
Форум шарда Middle-Earth
Kallish

Программа Stealth

Рекомендуемые сообщения

Silver, Valorite - до 97

Celestite, Eyrithrite - до 107

Mythril - до 117

Adamntine, Aqua ( + любая др выха) - до 120.

 

При наличии руды и повер скроллов, с 50 до 120 качается часа за 4 примерно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Задержку на гвардс поставь минимум 2 секунды. А то твои боты одновременно начинают флудить гвардс, что вызывает немалое кол-во гвардов, за счет чего нагрузка серва увеличивается. Буду сквелчить в след раз.

в скрипте выше гвардс ДОЛЖЕН повторяться не чаще чем 5 секунд при появлении моба, но к сожалению всё в точности наоборот =(

если увидишь что мои часто орут, ставь сквеч, я хоть буду знать что что-то не так...

вчера переделал гвардс, за сутки вроде сбоев небыло :)

procedure MobDetected;
var
Mob : array [0..1] of cardinal;
t, i : integer;

begin
  if not dead then
    begin
      if InJournalBetweenTimes('attacking you', mdtime, Now) <> -1 then
        begin
          mdtime := Now;
          UOSay('.guards');
        end;
      Mob[0] := $0033;
      Mob[1] := $000E;
      FindDistance := 5; 
      FindVertical := 100;
      for i := 0 to 1 do
        begin
          FindTypeEx(Mob[i], $FFFF, Ground, False);
          if FindCount > 0 then
            begin
              repeat
                repeat
                  UOSay('.guards');
                  wait(2000);
                  FindTypeEx(Mob[i], $FFFF, Ground, False);
                until (FindCount < 1) or (t >= 6000);
              break;
              until false
            end;
        end;
      FindDistance := 100; 
      FindVertical := 1;
    end;
end;

 

Про прокачку руды: на мифриле качается до 120... так же остальная выха тоже качает. Бери каждого вида руды по 1 штуке и пробуй плавить.. если очки идут - плавь на ней)

пробовал... идёт так медленно что проще в минок шахте до 120 докачать

 

с киркой дело говорит... создай нуба.. выбери ему в первичных скиллах мининг.. у него будет нуби кирка, которая не ломается... ей из сумки и копай...

уже так раз 10 сделал)) осталось допилить скрипт на спарринг и будет красота :)

 

так же у тебя в скрипте, когда чар дохнет... он запоминает место, где сдох.. и после реса возвращается к нему... в чем проблема включить лутание своего трупа? зачастую воры оставляют армор и кирку в трупе..

самое ценное что было в трупе, это руда! а она 99% тю-тю

 

Вообще стелс с очень хорошей ходилкой.. но для меня это далеко... я к сожалению не выношу паскаль.. сам не знаю почему..

большие скрипты на инжекте у меня не выходят(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не... по гвардсу у тебя смотри что получается... появляется моб... твой орет гвардс.. ждет 2 секунды и смотрит опять его наличие... так как после команды пока вылезет гвард и убьет моба проходит больше времени... соответственно он орет второй раз.. и так далее пока не исчезнет моб..

 

По прокачке мининга... слайдер.. мифрил до 120 пилит... аква не тащит до 120... и останавливается толи на 110 толи на 115... качал мининг 6-и чарам с 33-х до 120 стабильно 4,5 часа)

 

В трупе руда может и остаться... например тебя убил моб, не относящийся к элементу...

 

Да.. у тебя еще мало проверок на смерть... при каждом перелете проверяйся на дохлость...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не... по гвардсу у тебя смотри что получается... появляется моб... твой орет гвардс.. ждет 2 секунды и смотрит опять его наличие... так как после команды пока вылезет гвард и убьет моба проходит больше времени... соответственно он орет второй раз.. и так далее пока не исчезнет моб..

 

предложи на пальцах более цивилизованный способ

через игнор не вышло... бывает глючит и чар дохнет от моба

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 бывает глючит и чар дохнет от моба

поэтому я и говорю что нужно добавлять хилинг и страховку на клик киркой добавлять фразу гвардс)

 

            CheckDead;
            CheckPickaxe;
            SetWarMode(true); 
            uosay('.bandage self');
            uosay('.guards);
        UseObject(ObjAtLayer(RhandLayer));
            t := 0;
            repeat
              wait(50);
              checksave;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Навоял скрипт на спарринг.

  1. Настраиваем переменные.
  2. Ставим "куклу" так, чтобы перед ней на расстоянии 1 тайла не было чаров.
  3. Ставим атакующего так, чтобы он смотрел на того, кого атаковать.
  4. Кидаем под ноги (в радиусе 2 тайлов) бинты и еду.
  5. Запускаем скрипт на обоих чарах.

ЗЫ: Скрипт писал ночью, вроде рабочий... Если есть желание, по тестируйте и отпишитесь о работоспособности.

Program Sparring;

const
VarHeal = 1;  // 0-Счёт по кол-ву хп; 1-По Процентному соотношению
MinHP = 50;   // Если "VarHeal = 0", то ставим количество хп при котором надо лечиться,
              // если "VarHeal = 1", то ставим количество процентов при котором начинаем лечиться.
Food = $097B; //Тип еды. Сейчас Фиш-стейки.
DebugMode = 0; //Выдавать информацию в системный журнал (Включать при отслеживании ошибок в скрипте).

var
CharX, CharY, IDDoll, Role, CheckVarHeal, Error, dbt: integer;
htime, ftime : TDateTime;
{$Include 'checksave.inc'}

function CheckDead : Boolean;
begin
  if Role = 1 then
    begin
      if GetHP(IDDoll) < 1 then
        begin
          Error := 1;
          result := true;
          SetGlobal('stealth',IntToStr(self),'0')
          AddToSystemJournal('>>> Кукла мертва! Скрипт завершает работу!');
        end;
    end;
  if Role = 0 then
    begin
      if Dead then
        begin
          Error := 1;
          result := true;
          SetGlobal('stealth',IntToStr(self),'0')
          AddToSystemJournal('>>> Я мёртв! Скрипт завершает работу!');
        end;
    end;
end;

procedure Hungry;
var 
FoodID : Cardinal;

begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< Hungry блок'); 
    end;
  if Not Connected then Exit;
  if ftime <= Now then
    begin
      FindType(Food,Ground);
      if FindCount > 0 then
        begin
          ftime := ftime + 15.0/(24*60*3);
          FoodID := FindType(Food,Ground);
          if FoodID <> $00 then UseObject(FoodID);
          wait(200);
        end;
    end;
end;

procedure CheckRes;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< CheckRes блок'); 
    end;
  FindTypeEx($0E21, $FFFF, Ground, False);
  if FindCount < 1 then
    begin
      Error := 1;
      AddToSystemJournal('>>> На полу нет бинтов! Скрипт дальше работать НЕ БУДЕТ!');
    end;
  FindTypeEx(Food, $FFFF, Ground, False);
  if FindCount < 1 then
    begin
      Error := 1;
      AddToSystemJournal('>>> На полу нет еды! Скрипт дальше работать НЕ БУДЕТ!');
    end;
  if Error = 1 then
    begin
      if WarMode then SetWarMode(False);
      SetGlobal('stealth',IntToStr(IDDoll),'0');
      exit;
    end;
  Hungry; 
end;

procedure Heal;
var
t : integer;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< Heal блок'); 
    end;
  dbt := 1;
  while HP < MaxHP do
    begin
      if (DebugMode = 1) and (dbt = 1) then
        begin
          AddToSystemJournal('>>> Debug <<< Heal блок > первичный цикл...');
          dbt := 0; 
        end; 
      FindTypeEx($0E21, $FFFF, Ground, False);
      if FindCount > 0 then
        begin
          if targetpresent then canceltarget;
          htime := Now;
          UseObject(finditem);
          t := 0;
          dbt := 1;
          repeat
            if (DebugMode = 1) and (dbt = 1) then
              begin
                AddToSystemJournal('>>> Debug <<< Heal блок > цикл проверки таргета...');
                dbt := 0; 
              end;
            wait(100);
            CheckSave;
            t := t + 1;
          until TargetPresent or (t >= 50);
          t := 0;
          WaittargetSelf;
        end;
      dbt := 1;
      repeat
        if (DebugMode = 1) and (dbt = 1) then
        begin
          AddToSystemJournal('>>> Debug <<< Heal блок > цикл ожидания фразы...');
          dbt := 0; 
        end;
        wait(100);
        CheckSave;
        t := t + 1;
      until (InJournalBetweenTimes('You were|You have healed|The patient|You must', htime, Now) <> -1) or (t >= 300) or dead;
      t := 0;
      htime := Now;
    end;  
end;

procedure CheckRole;
var
i : integer;
TypeDoll : array [0..1] of cardinal;
begin
  if PredictedDirection = 0 then
    begin
      CharX := GetX(self);
      CharY := GetY(self) - 1;
    end;
  if PredictedDirection = 4 then
    begin
      CharX := GetX(self);
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 2 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self);
    end;
  if PredictedDirection = 6 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self);
    end;
  if PredictedDirection = 1 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self) - 1;
    end;
  if PredictedDirection = 5 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 3 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 7 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self) - 1;
    end;
  if WarMode then SetWarMode(False); 
  TypeDoll[0] := $0190;
  TypeDoll[1] := $0191;
  Ignore(self);
  for i := 0 to 1 do
    begin
      repeat
        FindTypeEx(TypeDoll[i], $FFFF, Ground, False)
        if FindCount > 0 then
          begin
            if (GetX(finditem) = CharX) and (GetY(finditem) = CharY) and (GetHP(finditem) > 0) then
              begin
                IDDoll := finditem;
                SetGlobal('stealth',IntToStr(IDDoll),'0');
                Role := 1;
                AddToSystemJournal('Выбрана роль атакующего...');
                exit;
              end
            else                    
              begin
                Ignore(finditem);
              end;
          end;
      until FindCount < 1;
    end;
  SetGlobal('stealth',IntToStr(self),'0');
  Role := 0;
  AddToSystemJournal('Выбрана роль куклы...');
  Heal;
end;

procedure PlayRole;
begin
  if Role = 1 then
    begin
      if CheckDead then exit;
      CheckRes;
      if Error = 1 then exit;
      if GetGlobal('stealth',IntToStr(IDDoll)) = IntToStr(1) then
        begin
          if (WarTargetID <> IDDoll) then attack(IDDoll);
        end
      else
        begin
          if WarMode then SetWarMode(False);
        end; 
    end;
  if Role = 0 then
    begin
      if CheckDead then exit;
      CheckRes;
      if Error = 1 then exit;
      if HP <= CheckVarHeal then
        begin
        dbt := 1;
          repeat
            if (DebugMode = 1) and (dbt = 1) then
              begin
                AddToSystemJournal('>>> Debug <<< PlayRole блок > цикл куклы...');
                dbt := 0; 
              end;
            SetGlobal('stealth',IntToStr(self),'0');
            Heal;
            CheckRes;
            if (Error = 1) or CheckDead then exit;
          until HP = MaxHP;
        end;
      SetGlobal('stealth',IntToStr(self),'1');  
    end; 
end;

begin
  Error := 0;
  htime := Now;
  ftime := Now;
  SetARStatus(true);
  SetPauseScriptOnDisconnectStatus(true);
  if VarHeal = 1 then
    begin
      CheckVarHeal := GetMaxHP(Self)*MinHP/100;
    end
  else
    begin
      CheckVarHeal := MinHP;
    end;
  CheckRole;
  dbt := 1;
  repeat
    if (DebugMode = 1) and (dbt = 1) then
      begin
        AddToSystemJournal('>>> Debug <<< Главный блок > Главный цикл...'); 
        dbt := 0;
      end;
    if Error = 1 then
      begin
        SetARStatus(false);
        SetPauseScriptOnDisconnectStatus(false);
        Disconnect;
        exit;
      end;
    PlayRole;
    wait(100);
  until false;
end.

checksave.inc

procedure CheckSave; 
var Time : TDateTime; 
begin 
Time:= Now - (0.5 / 1440); 
if InJournalBetweenTimes('Saving World State',Time,Now) >= 0 then
repeat
wait(1000);
until InJournalBetweenTimes('Saving World State complete',Time,Now) >= 0;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

type
WaterRecord = Record
t,x,y,z,a: integer;
end;

var
WaterTile: array[0..50] of integer;
WaterPlace: array[0..500] of WaterRecord;
WaterCount: integer;
x,y,c,a,i: integer;
s: boolean;

const
mainbag = $58E2D123; //сумка с добычей
fishpole = $0DBF; //удочка(или сети)
dagger = $0F51; //дагер
Trash = $5A399B81; //Мусорка
cut = 0; //1-Резать рыбу(даггер в руки), 0-не резать

procedure CheckGold;
var bag : Cardinal;

Begin
repeat
Ignore(mainbag);
findtype($0e75,ground);
if (FindCount >= 1) and (GetDistance(finditem) <=2) and (GetDistance(finditem) >=0) and connected and (not dead) then begin
bag := finditem;
useobject(bag);
wait(100);
MoveItem(findtype($0EED,bag), 0, mainbag, 0, 0, 0);
wait(100);
MoveItem(bag, 0, Trash, 0, 0, 0);
end;

until (FindCount < 1) or dead;
End;

procedure MoveSos;
begin
repeat
FindType($099F, backpack);
if (FindCount >= 1) and (GetDistance(finditem) <=2) and (GetDistance(finditem) >=0) and connected and (not dead) then begin
wait(100);
MoveItem(finditem, 0, Trash, 0, 0, 0);
wait(100);
end;
until (FindCount < 1) or dead;
end;

procedure MoveMap;
begin
repeat
FindType($14ED, ground);
if (FindCount >= 1) and (GetDistance(finditem) <=2) and (GetDistance(finditem) >=0) and connected and (not dead) then begin
wait(100);
MoveItem(finditem, 0, Trash, 0, 0, 0);
wait(100);
end;
until (FindCount < 1) or dead;
end;

procedure seaweed;
begin
repeat
FindType($0DBA, ground);
if (FindCount >= 1) and (GetDistance(finditem) <=2) and (GetDistance(finditem) >=0) and connected and (not dead) then begin
wait(100);
MoveItem(finditem, 0, Trash, 0, 0, 0);
wait(100);
end;
until (FindCount < 1) or dead;
end;

procedure fishgrab;
begin
if FindType($09CC, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($09CD, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($09CE, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($09CF, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($14EB, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($0DD6, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($0DD7, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
if FindType($0DD8, ground) > 0 then
MoveItem(finditem, 0, mainbag, 0, 0, 0);
end;

procedure CheckDagger;
begin
if (cut = 1) and (RHandLayer<>dagger) then begin
Equipt(RHandLayer, dagger);
end;
if cut = 0 then begin
unequip(RHandLayer);
end;
end;

procedure CheckWaterTile;
var
t: integer;
LCount: integer;
TTile: TStaticCell;
begin
TTile:=ReadStaticsXY(x, y, WorldNum);
LCount:=GetLayerCount(x, y, WorldNum);
i:=0;
while i < LCount do
begin
for t:=0 to 6 do
begin
if TTile.Statics[0].Tile=WaterTile[t] then
begin
WaterPlace[c].t:=TTile.Statics[0].Tile;
WaterPlace[c].x:=x;
WaterPlace[c].y:=y;
WaterPlace[c].z:=TTile.Statics[0].z;
WaterPlace[c].a:=1;
c:=c+1;
end; 
end;
i:=i+1;
end; 
end;

procedure FindWaterTile;
begin
for x:=GetX(self)-7 to GetX(self)+7 do
for y:=GetY(self)-7 to GetY(self)+7 do
begin
CheckWaterTile;
end; 
WaterCount:=c-1;
end;

procedure Fishing;

begin
for a:=0 to WaterCount do
begin
if WaterPlace[a].a = 1 then begin
WaitTargetTile(WaterPlace[a].t, WaterPlace[a].x, WaterPlace[a].y, WaterPlace[a].z);
wait(3000);
if Length(LastJournalMessage)=34 then begin
WaterPlace[a].a:=0;
AddToSystemJournal('Заброкован таил');
ClearJournal;
end;
UseType(fishpole, 0);
if cut = 0 then begin
fishgrab;
end;
CheckGold;
MoveSos;
MoveMap;
seaweed;
end; 
end;
end;

begin

s:=true;

WaterTile[0]:=6040;
WaterTile[1]:=6039;
WaterTile[2]:=6041;
WaterTile[3]:=6043;
WaterTile[4]:=6044;
WaterTile[5]:=6042;
WaterTile[6]:=6044;


FindWaterTile;

AddToSystemJournal('Найдено тайлов для рыбалки: '+IntToStr(WaterCount));
while not Dead and s do begin
if cut = 1 then begin
CheckDagger;
end;
Fishing;
end;
end.

 

Фишинг с берега работает у нас) Честно-стыреный с одного из форумов скрипт)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nepret, у меня сдох один чар я не понял как ) да на инжекте уже по-привычней в спаринге качать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
nepret, у меня сдох один чар я не понял как ) да на инжекте уже по-привычней в спаринге качать.

хеал настроен?

 

добавил проверку на оружие

  • новые стволы берёт из бекпака

тустим...

немного переделал скрипт, пробуйте:

 

Program Sparring;

const
VarHeal = 1;  // 0-Счёт по кол-ву хп; 1-По Процентному соотношению
MinHP = 30;   // Если "VarHeal = 0", то ставим количество хп при котором надо лечиться,
              // если "VarHeal = 1", то ставим количество процентов при котором начинаем лечиться.
Food = $097B; //Тип еды. Сейчас Фиш-стейки.
DebugMode = 0; //Выдавать информацию в системный журнал (Включать при отслеживании ошибок в скрипте).

var
CharX, CharY, IDDoll, Role, CheckVarHeal, Error, dbt, RLayer, LLayer: integer;
NameRWeapon, NameLWeapon : String;
htime, ftime : TDateTime;
{$Include 'checksave.inc'}

procedure CheckConnect;
var
dbt : integer;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< CheckConnect блок'); 
    end;
  if not Connected then
    begin
      dbt := 0;
      repeat
        dbt := dbt + 1; 
        if (DebugMode = 1) and (dbt = 30) then
        begin
          AddToSystemJournal('>>> Debug <<< CheckConnect блок > цикл ожидания...');
        end;
        wait(1000);
      until Connected;
      dbt := 0;
      wait(60000);
    end;
end;

function CheckDead : Boolean;
begin
  CheckConnect;
  if Role = 1 then
    begin
      if GetHP(IDDoll) < 1 then
        begin
          Error := 1;
          result := true;
          SetGlobal('stealth',IntToStr(self),'0')
          AddToSystemJournal('>>> Кукла мертва! Скрипт завершает работу!');
        end;
    end;
  if Role = 0 then
    begin
      if Dead then
        begin
          Error := 1;
          result := true;
          SetGlobal('stealth',IntToStr(self),'0')
          AddToSystemJournal('>>> Я мёртв! Скрипт завершает работу!');
        end;
    end;
end;

procedure Hungry;
var 
FoodID : Cardinal;

begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< Hungry блок'); 
    end;
  CheckConnect;
  if CheckDead then exit;
  if ftime <= Now then
    begin
      FindType(Food,Ground);
      if FindCount > 0 then
        begin
          ftime := ftime + 15.0/(24*60*3);
          FoodID := FindType(Food,Ground);
          if FoodID <> $00 then UseObject(FoodID);
          wait(200);
        end;
    end;
end;

procedure CheckArm;
var
t : integer;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< CheckArm блок'); 
    end;
  CheckConnect;
  if CheckDead then exit;
  if RLayer <> 0 then
    begin
      if ObjAtLayer(RhandLayer) = 0 then
        begin  
          FindTypeEx(RLayer, $FFFF, Backpack, False);
          if FindCount > 0 then
            begin
              Equip(RhandLayer,finditem);
              dbt := 0;
              repeat
                dbt := dbt + 1;
                if (DebugMode = 1) and (dbt = 150) then
                  begin
                    AddToSystemJournal('>>> Debug <<< CheckArm блок > цикл ожидания надевания вещи в слой RhandLayer...');
                  end;
                wait(100);
                CheckConnect;
                CheckSave;
                if CheckDead then exit;
                t := t + 1
              until (ObjAtLayer(RhandLayer) > 0) or (t >= 50) or dead;
            end
          else
            begin
              Error := 1;
              AddToSystemJournal('>>> В бекпаке больше нет '+ NameRWeapon +'! Скрипт дальше работать НЕ БУДЕТ!');
              exit;
            end;
        end;
    end;
  if LLayer <> 0 then
    begin
      if ObjAtLayer(LhandLayer) = 0 then
        begin  
          FindTypeEx(LLayer, $FFFF, Backpack, False);
          if FindCount > 0 then
            begin
              Equip(LhandLayer,finditem);
              dbt := 0;
              repeat
                dbt := dbt + 1;
                if (DebugMode = 1) and (dbt = 150) then
                  begin
                    AddToSystemJournal('>>> Debug <<< CheckArm блок > цикл ожидания надевания вещи в слой LhandLayer...');
                  end;
                wait(100);
                CheckConnect;
                CheckSave;
                if CheckDead then exit;
                t := t + 1
              until (ObjAtLayer(LhandLayer) > 0) or (t >= 50) or dead;
            end
          else
            begin
              Error := 1;
              AddToSystemJournal('>>> В бекпаке больше нет '+ NameLWeapon +'! Скрипт дальше работать НЕ БУДЕТ!');
              exit;
            end;
        end;
    end;
end;

procedure SaveArm;
begin
  if (ObjAtLayer(RhandLayer) <> 0) or (ObjAtLayer(LhandLayer) <> 0) then
    begin
      AddToSystemJournal('Будем качаться с оружием в руках.');
      if ObjAtLayer(RhandLayer) <> 0 then
        begin
          RLayer := GetType(ObjAtLayer(RhandLayer));
          ClickOnObject(ObjAtLayer(RhandLayer));
          CheckSave;
          wait(2000);
          NameRWeapon := GetName(ObjAtLayer(RhandLayer));
          FindTypeEx(RLayer, $FFFF, Backpack, False);
          if FindCount >= 0 then AddToSystemJournal('В бекпаке найдено: '+ IntToStr(FindCount) + ' "'+ NameRWeapon + '".');
        end;
       if ObjAtLayer(LhandLayer) <> 0 then
        begin
          LLayer := GetType(ObjAtLayer(LhandLayer));
          ClickOnObject(ObjAtLayer(LhandLayer));
          CheckSave;
          wait(2000);
          NameLWeapon := GetName(ObjAtLayer(LhandLayer));
          FindTypeEx(LLayer, $FFFF, Backpack, False);
          if FindCount >= 0 then AddToSystemJournal('В бекпаке найдено: '+ IntToStr(FindCount) + ' "'+ NameLWeapon + '".');
        end;
    end
  else
    begin
      AddToSystemJournal('Будем качаться без оружия в руках.');
    end;
end;

procedure CheckRes;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< CheckRes блок'); 
    end;
  CheckConnect;
  FindTypeEx($0E21, $FFFF, Ground, False);
  if FindCount < 1 then
    begin
      Error := 1;
      AddToSystemJournal('>>> На полу нет бинтов! Скрипт дальше работать НЕ БУДЕТ!');
    end;
  CheckConnect;
  FindTypeEx(Food, $FFFF, Ground, False);
  if FindCount < 1 then
    begin
      Error := 1;
      AddToSystemJournal('>>> На полу нет еды! Скрипт дальше работать НЕ БУДЕТ!');
    end;
  if CheckDead then Error := 1;
  if Error = 1 then
    begin
      CheckConnect;
      if WarMode then SetWarMode(False);
      SetGlobal('stealth',IntToStr(IDDoll),'0');
      exit;
    end;
  Hungry; 
end;

procedure Heal;
var
t : integer;
begin
  if DebugMode = 1 then
    begin
      AddToSystemJournal('>>> Debug <<< Heal блок'); 
    end;
  CheckConnect;
  dbt := 1;
  while HP < MaxHP do
    begin
      if CheckDead then exit;
      if (DebugMode = 1) and (dbt = 1) then
        begin
          AddToSystemJournal('>>> Debug <<< Heal блок > первичный цикл...');
          dbt := 0; 
        end;
      CheckConnect; 
      FindTypeEx($0E21, $FFFF, Ground, False);
      if FindCount > 0 then
        begin
          if targetpresent then canceltarget;
          htime := Now;
          CheckConnect;
          UseObject(finditem);
          t := 0;
          dbt := 0;
          repeat
            dbt := dbt + 1;
            if (DebugMode = 1) and (dbt = 150) then
              begin
                AddToSystemJournal('>>> Debug <<< Heal блок > цикл проверки таргета...');
              end;
            wait(100);
            CheckConnect;
            CheckSave;
            if CheckDead then exit;
            t := t + 1;
          until TargetPresent or (t >= 50);
          t := 0;
          CheckConnect;
          WaittargetSelf;
        end;
      dbt := 0;
      repeat
        dbt := dbt + 1;
        if (DebugMode = 1) and (dbt = 150) then
        begin
          AddToSystemJournal('>>> Debug <<< Heal блок > цикл ожидания фразы...'); 
        end;
        wait(100);
        CheckConnect;
        CheckSave;
        t := t + 1;
      until (InJournalBetweenTimes('You were|You have healed|The patient|You must', htime, Now) <> -1) or (t >= 300) or dead;
      t := 0;
      htime := Now;
    end;  
end;

procedure CheckRole;
var
i : integer;
TypeDoll : array [0..1] of cardinal;
begin
  if PredictedDirection = 0 then
    begin
      CharX := GetX(self);
      CharY := GetY(self) - 1;
    end;
  if PredictedDirection = 4 then
    begin
      CharX := GetX(self);
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 2 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self);
    end;
  if PredictedDirection = 6 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self);
    end;
  if PredictedDirection = 1 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self) - 1;
    end;
  if PredictedDirection = 5 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 3 then
    begin
      CharX := GetX(self) + 1;
      CharY := GetY(self) + 1;
    end;
  if PredictedDirection = 7 then
    begin
      CharX := GetX(self) - 1;
      CharY := GetY(self) - 1;
    end;
  if WarMode then SetWarMode(False); 
  TypeDoll[0] := $0190;
  TypeDoll[1] := $0191;
  Ignore(self);
  for i := 0 to 1 do
    begin
      repeat
        CheckConnect;
        FindTypeEx(TypeDoll[i], $FFFF, Ground, False)
        if FindCount > 0 then
          begin
            if (GetX(finditem) = CharX) and (GetY(finditem) = CharY) and (GetHP(finditem) > 0) then
              begin
                IDDoll := finditem;
                SetGlobal('stealth',IntToStr(IDDoll),'0');
                Role := 1;
                SaveArm;
                AddToSystemJournal('Выбрана роль атакующего...');
                exit;
              end
            else                    
              begin
                Ignore(finditem);
              end;
          end;
      until FindCount < 1;
    end;
  SetGlobal('stealth',IntToStr(self),'0');
  Role := 0;
  AddToSystemJournal('Выбрана роль куклы...');
  Heal;
end;

procedure PlayRole;
begin
  if Role = 1 then
    begin
      if CheckDead then exit;
      CheckRes;
      CheckArm;
      if Error = 1 then exit;
      if GetGlobal('stealth',IntToStr(IDDoll)) = IntToStr(1) then
        begin
          CheckConnect;
          if (WarTargetID <> IDDoll) then attack(IDDoll);
        end
      else
        begin
          CheckConnect;
          if WarMode then SetWarMode(False);
        end; 
    end;
  if Role = 0 then
    begin
      if CheckDead then exit;
      CheckRes;
      if Error = 1 then exit;
      CheckConnect;
      if HP <= CheckVarHeal then
        begin
        dbt := 1;
          repeat
            if (DebugMode = 1) and (dbt = 1) then
              begin
                AddToSystemJournal('>>> Debug <<< PlayRole блок > цикл куклы...');
                dbt := 0; 
              end;
            SetGlobal('stealth',IntToStr(self),'0');
            Heal;
            CheckRes;
            if (Error = 1) or CheckDead then exit;
            CheckConnect;
          until HP = MaxHP;
          dbt := 1;
        end;
      SetGlobal('stealth',IntToStr(self),'1');  
    end; 
end;

begin
  dbt := 0;
  Error := 0;
  htime := Now;
  ftime := Now;
  SetARStatus(true);
  SetPauseScriptOnDisconnectStatus(false);
  if VarHeal = 1 then
    begin
      CheckVarHeal := GetMaxHP(Self)*MinHP/100;
    end
  else
    begin
      CheckVarHeal := MinHP;
    end;
  CheckRole;
  dbt := 1;
  repeat
    if (DebugMode = 1) and (dbt = 1) then
      begin
        AddToSystemJournal('>>> Debug <<< Главный блок > Главный цикл...'); 
        dbt := 0;
      end;
    if Error = 1 then
      begin
        SetARStatus(false);
        Disconnect;
        exit;
      end;
    CheckConnect;
    PlayRole;
    wait(100);
  until false;
end.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У у написавшего скрипт спаррингующиеся тоже дохли)))

П.С. лучше напишите макрос на кастера)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну а чего вы хотели при 100 STR'е и всего 30% от оставшегося хп для команды stop->wait me full HP :)

 

это кстати первый раз за более 2 суток тестирования!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ну а чего вы хотели при 100 STR'е и всего 30% от оставшегося хп для команды stop->wait me full HP :)

 

это кстати первый раз за более 2 суток тестирования!

Да я когда переименовывал они дохли как мухи))

Я как в игре с автоматами.. стоял ресал)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

П.С. лучше напишите макрос на кастера)))

program cast;
const
sunduk = $4499C893;
var 
r,i : integer;
s : string;
MissingReg : cardinal;
Reags : array[1..8] of cardinal;
ctime : TDateTime;

{$Include 'all.inc'}


function timer(var acttimer:integer;actafter:integer):boolean;
begin
   result:=false;
   acttimer:=acttimer+1;
   if acttimer>=actafter then
   begin
      acttimer:=0;
      result:=true;       
   end;
end;

procedure CheckJournal;
begin
if InJournalBetweenTimes('Cast!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Bless');
    wait(3000);
    WaitTargetObject(LineID);
    cast('Protection');
    exit;
    end;
if InJournalBetweenTimes('Ress!', ctime, Now) <> -1 then
    begin    
    WaitTargetObject(LineID);
    cast('Resurrection');
    wait(1000);     
    exit;
    end;
if InJournalBetweenTimes('help', ctime, Now) <> -1 then
    begin
    uosay('Скажи мне "cast!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "ress!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "bless!"- c большой буквы');
    wait(100);
    uosay('Скажи мне "prot!"- c большой буквы');
    wait(100);
    UseSkill('Spirit Speak');
    exit;
    end;
if InJournalBetweenTimes('Bless!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Bless');
    exit;
    end;
if InJournalBetweenTimes('Prot!', ctime, Now) <> -1 then 
    begin
    WaitTargetObject(LineID);
    cast('Protection');
    exit;
    end;
end;

function CheckReags : boolean;
begin
Result := True;
Reags[1] := $0F7B // BloodMosss
Reags[2] := $0F7A // BlackPearls
Reags[3] := $0F84 // Garlick
Reags[4] := $0F85 // Ginseng
Reags[5] := $0F86 // Madrake Roots
Reags[6] := $0F88 // NightShades
Reags[7] := $0F8C // Sulphuruos Ashs
Reags[8] := $0F8D // Spider Silks
for r := 1  to 8  do
    begin 
    findtype(Reags[r],BackPack);
    if findcount = 0 then  
        begin
        MissingReg := Reags[r];
        Result := False;
        end; 
    end;
end;

procedure Waiting;
begin
if MissingReg = $0F7B then s := 'BloodMosss';
if MissingReg = $0F7A then s := 'BlackPearls';
if MissingReg = $0F84 then s := 'Garlick';
if MissingReg = $0F85 then s := 'Ginseng';
if MissingReg = $0F86 then s := 'Madrake Roots';
if MissingReg = $0F88 then s := 'NightShades';
if MissingReg = $0F8C then s := 'Sulphuruos Ashs';
if MissingReg = $0F8D then s := 'Spider Silks';
AddToSystemJournal('KoH4uJIucb ' + s);
while (not CheckReags) do
    begin 
    ctime := now;
    wait(10000);
    if InJournalBetweenTimes('dispel!|hunt!|macro!', ctime, Now) <> -1 then uosay('KoH4uJIucb ' + s );
    uosay(' ');
    findtype(MissingReg,sunduk);
    if findcount > 0 then MoveItems(sunduk, MissingReg, $FFFF, backpack, 0, 0, 0, 500);
    end; 
end;

BEGIN
MissingReg := 0;
while (not dead) do
    begin 
    if (not CheckReags) then Waiting;
    ctime:=now;
    wait(1000);
        if timer(i,100) then 
        begin
        Hungry(1,backpack);
        uosay(' ');
        end;
    if TargetPresent then CancelTarget;
    CheckJournal;
    if mana < 35  then 
        begin
        wait(1000);
        useskill('Meditation');
        WaitJournalLine(now,'stop medit',30000);
                end;
    end;
END.

Можно использовать без настройки переменных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я так понимаю сундук - это ИД секура ставить надо, который рядом с персонажем?

И не понял зачем ресать персов? Особенно проверка журнала.. госты в вар моде если что-то пишут, то мы видим "ОоОо ооооОо"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ресать надо для нескольких причин...

самая важная это когда в доме начинается замес

потом на случай "несчастного случая"

ну и если убили при телепорте домой

 

если я доделаю хунгри иклюд, то выкину свой скрипт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скажи мне.. что произойдет с кастером, если я скажу в .f чате Cast!

или же скажу команду за стеной, то есть он не сможет на меня повесить таргет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скорей всего ид не высветиться и он будет кастовать в молоко

так же в молоко

 

у меня он проверяет 3 переменный:

x, y, z

z должна быть такая же как и у кастера

х и у должны быть не дальше 5 тайлов от кастера

если к примеру ты скажешь в системный чат (баф, каст и тд) мой скрипт проигнорирует это

+ненадо никаких контейнеров... реги под ноги кастеру (будет ждать пока ему не дадут нужный рег)

информативность... есть функция оповещения при заканчивающемся реагенте(настраеваеться)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://stealth.od.ua

 

функции := http://stealth.od.ua/Doc:RU/Api (с примерами)

"все" функции := http://stealth.od.ua/wiki/doku.php?id=functions (c примерами)

ОБСАЛЮТНО все функции := http://stealth.od.ua/forum/viewtopic.php?t=1220 (без примеров (их очень мало))

 

зы: пост выше писался про мой скрипт который я доделать не могу (влом =) )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...