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

Mining DRW

Only working scripts
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Mining DRW

Post by v26RuS »

За основу взят скрипт Edred'a
Скрипт для копки в обычной шахте
1-я рунка в рунбуке домой 9-я в шахту.
Удачной копки.

версия 1.1:
- внесены некоторые изменения введен добор скролов и реагентов при разгрузке.
версия 1.2:
- написана процедура убийства элементаля
- доработана проверка на кирку и при ее исчезновении рекол домой за ней
- испрвлены некоторые ошибки в коде
- теперь перед реколом при появлении ПК выпиваем бутылку с инвизкой

Code: Select all

program Mining; 
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.2
{$Include 'all.inc'}

const 
M_nothing1 = 'There is no ore here to mine'; 
M_nothing2 = 'That is too far'; 
M_nothing3 = 'Try mining in rock'; 
M_nothing4 = 'You cannot mine so close'; 
M_nothing5 = 'You have no line'; 
M_nothing6 = 'reach'; 
M_fizzles1 = 'You loosen some rocks'; 
M_needwait = 'You decide not to mine'; 
M_success = 'in your pack.';
MaxLimit = 15;               // максимальное кол-во физлов одной точки 
Pickaxe1 = $0E85;            // Типы кирок 
Pickaxe2 = $0E86; 
Ore1 = $19B7;               // 1 Ore 
Ore2 = $19BA;               // 2 Ore 
Ore3 = $19B8;               // 3 Ore 
Ore4 = $19B9;               // 4 Ore 
Sunduk_ore = $4010C799;     // Sunduk of ore
runebook = $404B4021;	    // Runebook
r_cave = 1025;		    // Number of rune to cave 9 (no change)
r_home = 21;		    // Number of rune to home 1 (no change)
MyMaxWeight = 400;	    // Max Weight
CaveLimit = 1282; 	    // Cave limit
RuneHome=$4001E531;	    // Rune to fast recall
Recall=$1F4C;  		    // Type Recall scrolls
pk_time=120;		    // Seconds of wait to pk go
kill_elem=0;		    // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела)
Itype=$0F09; 		    // Тип инвизки
vxcol=$FFFF; 		    // Цвет скрола вортекса
vacol=$FFFF; 		    // Цвет скрола мас диспела

var 
minret,StartFlag : Integer; 
HowManyDischarge : Integer; 
ScriptStartTime : TDateTime; 

flag1 : Boolean; 

   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
FullDisconnect; 
end 
      end; 

procedure kill_elemental;
var
ctime : TDateTime;
castvx, castva : Boolean; 
c, Eltype: Integer;
begin
Eltype:=$0010; // Тип элементаля
castvx:=false;
castva:=false;
// Search and use Invisible potion
   FindType(Itype,backpack);
    if FindCount>0 then 
     begin
       UseType(Itype,$FFFF); 
    end;

// Search and use Vortex Scroll
repeat
   FindTypeEx($0F0E,vxcol,Backpack,false);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую вортекса'); 
	repeat
	   UseObject(FindItem); 
	   ctime:=Now;
 	   wait(5000);
	   FindTypeEx($0F0E,vxcol,backpack,false);
	until (inJournalBetweenTimes('Vortex', ctime, Now)<>0) or (FindCount = 0);
if (inJournalBetweenTimes('Vortex', ctime, Now)<>0) then castvx:=true;
    end;

// Search Elemental
if castvx = true then
begin
FindDistance:=17; 
AddToSystemJournal('Жду пока умрет элементаль'); 
FindType(Eltype,ground)
c:=0;
repeat
c:=c+1;
wait(10000);
FindType(Eltype,ground)
until (FindCount = 0) OR (c = 20);
end;
until (c < 20) or (castvx = false);

// Search and use Vas An Ort Scroll
if castvx = true then
begin
   FindTypeEx($0F0E,vacol,backpack,false);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую воз ан орт'); 
	repeat
	   UseObject(FindItem); 
  	   ctime:=Now;
	   wait(6000);
	   FindTypeEx($0F0E,vacol,backpack,false);
	until (inJournalBetweenTimes('fizzles', ctime, Now) = 0) or (FindCount = 0);
	if (inJournalBetweenTimes('fizzles', ctime, Now) = 0) then castva:=true;
    end;
if castva = true then
begin
AddToSystemJournal('Лутаю'); 
FindType($19B9,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B7,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19BA,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B8,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($0EED,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;
end;
end;
end;

   procedure elemental;
var TimeInterno : TDateTime; 
   begin
if kill_elem = 1 then
 begin
  kill_elemental;
  wait(1000);
  exit;
 end;
ClearJournal; 
   TimeInterno := Now; 
   Addtosystemjournal('В переще элементаль для продолжение напишите start');
repeat
   UOSay('\w Galiano: Elemental!!!'); // Приватное сообщение помощнику (который прийдет и убьет эля)...
wait(3000);
until (inJournalBetweenTimes('start', TimeInterno, Now) >= 0); 
   end;


   function pk_save : Boolean; 
   var mx, my, k, Res, scrol_r : Integer; 

begin
Result := true;
addtosystemjournal('Найдены опасные персонажи реколимся домой по рунке'); 

repeat
      Res := 0; 
if not Hidden then
begin
// Search and use Invisible potion
   FindType(Itype,backpack);
    if FindCount>0 then 
     begin
       UseType(Itype,$FFFF); 
    end;

end;
        CheckDead; 
AddToSystemJournal('Пробуем улететь');

if TargetPresent then CancelTarget;
FindType(Recall,backpack);
if (FindQuantity <> 0) then
begin
Addtosystemjournal('Используем свиток');
UseObject(finditem); 
WaitForTarget(1500);
TargetToObject(RuneHome);
scrol_r := 1;
end;

if scrol_r < 1 then
begin
Addtosystemjournal('Реколимся при помощи магии');
cast('Recall')
WaitForTarget(1500);
TargetToObject(RuneHome);
end;
	mx := GetX(self);
	my := GetY(self);
		k := 0;
	repeat
		wait(500)
		k := k + 1;
	until (mx<>GetX(self)) or (my<>GetY(self)) or Dead or (k = 10)

	if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;

until Res = 1;
wait(pk_time*1000);

   end;


   function CheckPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
                 addtosystemjournal('Нету кирки :(('); 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
      		  addtosystemjournal('Нету кирки :(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
   end; 

   procedure CheckHide; 
   begin 
      if Hidden then exit; 
      if WarMode = true then SetWarMode(false); 
      repeat 
         UseSkill('Hiding'); 
         wait(4500); 
         checksave; 
      until Hidden or (not Connected); 
   end; 



function redcheck : Boolean;
   // Ищет персонажей от серого к красному в радиусе 10-ти клеток. Возвращаем: 
   // True - найдетны такие персонажи. 
   // False - персонажей не найдено все спокойно. 
var  n : integer; l : TStringList; 
begin 
l := TStringList.Create();
Result := False;
FindType($190,ground); 
GetFindedList(l); 
if (l.count > 0) then 
begin 
for n:= 0 to (l.count-1) do 
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true; 
end; 
l.free;
l := TStringList.Create();
FindType($191,ground); 
GetFindedList(l); 
if (l.count > 0) then 
begin 
for n:= 0 to (l.count-1) do 
if (GetNotoriety(StrToInt('$'+l.strings[n]))>2) then Result := true; 
end; 
l.free; 
end;


   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   // 5 - PK
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -4 to 4 do 
      begin 
         for y := -4 to 4 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000);
               if not CheckPickaxe then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               CheckHide; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(1000); 
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self)); 
               k := 0; 
               repeat 
                  wait(100); 
                  k := k + 1; 
                  checksave; 
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 300); 

	       if InJournalBetweenTimes('heavy', ctime, Now) <> -1 then
		begin
		  Result := 6
		  exit;
	       end;
	
	       if redcheck = true then
		begin
		  Result := 5
		  exit;
	       end;

               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 

function DischargeSunduk : Boolean; 
   // Разгружаем пак чара в сундук. Возвращаем: 
   // 1 - все ок, пак разгружен. 
   // 0 - не получилось. 
   var tmpcnt : Integer; 
      tmpid, tmpstack : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
            addtosystemjournal('Пришли на разгрузку'); 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk_ore); 
      checksave; 
      // Переместим руду 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить руду!'); 
            Result := false; 
            exit; 
         end; 
         repeat 
            tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk_ore,False); 
            if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
         until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000); 
         // Если не найден в сундуке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk_ore; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      HowManyDischarge := HowManyDischarge + 1; 
      IgnoreReset; 
	FindType(Recall,Backpack);
	 if (FindCount = 0) or (Count(Recall) < 5) then
	  begin
		  AddToSystemJournal('Добираем скролы');
	  FindType(Recall,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
		  AddToSystemJournal('Добираем реагенты');
	FindType($0F86,Backpack);
	 if (FindCount = 0) or (Count($0F86) < 10) then
	  begin
	  FindType($0F86,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7A,Backpack);
	 if (FindCount = 0) or (Count($0F7A) < 10) then
	  begin
	  FindType($0F7A,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7B,Backpack);
	 if (FindCount = 0) or (Count($0F7B) < 10) then
	  begin
	  FindType($0F7B,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;
	FindType($0F7B,Backpack);
	 if (FindCount = 0) or (Count($0F7B) < 10) then
	  begin
	  FindType($0F7B,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,10,Backpack,0,0,0);
		end;
	 end;

	FindType(Itype,Backpack);
	 if (FindCount = 0) or (Count(Itype) <= 2) then
	  begin
		  AddToSystemJournal('Добираем инвизки');
	  FindType(Itype,Sunduk_ore);
		if FindCount > 0 then
		  begin
		  MoveItem(FindItem,5,Backpack,0,0,0);
		end;
	 end;


      with TStringList.Create do 
         try 
         Add('Разгрузка руды: ' + DateTimeToStr(Now)); 
         SaveToFile('mining_' + GetName(self) + '.log'); 
         finally 
         free; 
      end; 
         addtosystemjournal('Разгрузка закончена'); 
   end;
 
   procedure recal_rb(rune : integer); 
   var tmpr : Integer; 
   mx, my, k, Res : Integer; 

   begin 
repeat
      Res := 0; 
        CheckDead; 
AddToSystemJournal('Пытаемся рекольнуться');
	tmpr := rune;
	waitgump(IntToStr(tmpr));
wait(1000)
	UseObject(runebook);
	mx := GetX(self);
	my := GetY(self);
		k := 0;
	repeat
		wait(500)
		k := k + 1;
	until (mx<>GetX(self)) or (my<>GetY(self)) or Dead or (k = 20)

	if (mx<>GetX(self)) or (my<>GetY(self)) then Res := 1;

until Res = 1;

   end;
   function GetPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
if Result = false then
begin
                 recal_rb(r_home);
		 useobject(sunduk_ore);
		 tmpser := findtype(Pickaxe1,Sunduk_ore);
		 if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_ore); 
		 if tmpser = 0 then
		 begin
		  Result := false;
		  addtosystemjournal('Нету кирки в сундуке:((');
		 end;
		 grab(Finditem,1);
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
		  addtosystemjournal('Нету кирки в сундуке:((');
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
                 recal_rb(r_cave);
end;
   end; 


Begin 
   ScriptStartTime := Now; 
   HowManyDischarge := 0; 
   StartFlag := 1; 
   repeat 
   // стартуем от сундука 
      CheckDead; 

      addtosystemjournal('Вылетаю в шахту'); 
	recal_rb(r_cave);
      repeat 
         CheckDead; 
         if Dead then break; 
         GetPickaxe;
         minret := MiningAround; 
         CheckDead; 
         if Dead then break; 
         if minret = 4 then  GetPickaxe;
	 if minret = 5 then  pk_save;
	 if minret = 6 then  elemental;
      until minret = 2; 
      addtosystemjournal('Пора на разгрузку'); 
      CheckDead;
	recal_rb(r_home); 
      if not Dead then 
      begin 
         repeat 
            WaitConnection(5000); 
            CheckDead; 
            if Dead then break; 
            flag1 := DischargeSunduk; 
            wait(100); 
         until flag1 = true; 
	recal_rb(r_cave);
      end; 
      CheckDead; 
   until false; 
End.
Last edited by v26RuS on 13.07.2008 7:16, edited 3 times in total.
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

Хм под випку было бы лучше :idea:
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Все просто убери рекол проверку на пк добавь ходилку кординаты и будет для випки...
Невозможное возможнО!
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Изменения в скрипте
версия 1.1 - внесены некоторые изменения введен добор скролов и реагентов при разгрузке.
Невозможное возможнО!
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

v26RuS wrote:Все просто убери рекол проверку на пк добавь ходилку кординаты и будет для випки...
Проблема в ходилке будет и подход к сундуку (
Не догнал я ешё пока как тут с ходилкой пользаватся :roll:
p.s ясно кто терь Консультант Гайры :D
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Post by Unholy »

RaTaMaHaTTa wrote:Хм под випку было бы лучше :idea:
А что под випку делать то? Ставишь 3 левача, которые обкапывают вокруг (в хайде) себя! И все!
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

Unholy wrote:
RaTaMaHaTTa wrote:Хм под випку было бы лучше :idea:
А что под випку делать то? Ставишь 3 левача, которые обкапывают вокруг (в хайде) себя! И все!
Уху канешно и не отходить не на минуту, и скидавать ручками.
Смысл от скрипта тогда ? :roll:
Если брать этот скрипт за основу, надо ненужные фукции уберать например:

Code: Select all

function redcheck
function pk_save

Потом брать ходилку прописавать чтобы он ходил по точкам
ну и разгурзку тоже делать прописавать координаты сундука. И уже по желанию можно зделать килл Елема .
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Народ есть вопрос нужена ли функция кила элема или нет и по какой схеме по схеме морфа или же вортекса?
Невозможное возможнО!
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

v26RuS wrote:Народ есть вопрос нужена ли функция кила элема или нет и по какой схеме по схеме морфа или же вортекса?
Вортекса.

Code: Select all

Инвиз
со скрола ворта
проверка на труп если нет ешё раз ворта
Вас со скрола 
лут
Хотя хм на инжект я не замарачивался и делал просто 2 ворта кинуть на всякий пожарный . Ну в целях экономии можно и проверку поставить.
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

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

Code: Select all

procedure kill_elem;
var
ctime : TDateTime;
castvx, castva : Boolean; 
c, Itype,vxcol,vacol,Eltype: Integer;
begin
Itype:=$0F09; // Тип инвизки
vxcol:=$FFFF; // Цвет скрола вортекса
vacol:=$FFFF; // Цвет скрола мас диспела
Eltype:=$0010; // Тип элементаля
castvx:=false;
castva:=false;
// Search and use Invisible potion
   FindType(Itype,backpack);
    if FindCount>0 then 
     begin
       UseType(Itype,$FFFF); 
    end;

// Search and use Vortex Scroll
repeat
   FindTypeEx($0F0E,vxcol,Backpack,false);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую вортекса'); 
	repeat
	   UseObject(FindItem); 
	   ctime:=Now;
 	   wait(5000);
	   FindTypeEx($0F0E,vxcol,backpack,false);
	until (inJournalBetweenTimes('Vortex', ctime, Now)<>0) or (FindCount = 0);
if (inJournalBetweenTimes('Vortex', ctime, Now)<>0) then castvx:=true;
    end;

// Search Elemental
if castvx = true then
begin
FindDistance:=17; 
AddToSystemJournal('Жду пока умрет элементаль'); 
FindType(Eltype,ground)
c:=0;
repeat
c:=c+1;
wait(10000);
FindType(Eltype,ground)
until (FindCount = 0) OR (c = 20);
end;
until (c < 20) or (castvx = false);

// Search and use Vas An Ort Scroll
if castvx = true then
begin
   FindTypeEx($0F0E,vacol,backpack,false);
    if FindCount>0 then 
     begin
AddToSystemJournal('Кастую воз ан орт'); 
	repeat
	   UseObject(FindItem); 
  	   ctime:=Now;
	   wait(6000);
	   FindTypeEx($0F0E,vacol,backpack,false);
	until (inJournalBetweenTimes('fizzles', ctime, Now) = 0) or (FindCount = 0);
	if (inJournalBetweenTimes('fizzles', ctime, Now) = 0) then castva:=true;
    end;
if castva = true then
begin
AddToSystemJournal('Лутаю'); 
FindType($19B9,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B7,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19BA,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($19B8,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;

FindType($0EED,ground);
if FindCount > 0 then
begin
grab(FindItem,0);
wait(800)
end;
end;
end;
end;
Невозможное возможнО!
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Новая версия скрипта 1.2:
- написана процедура убийства элементаля
- доработана проверка на кирку и при ее исчезновении рекол домой за ней
- испрвлены некоторые ошибки в коде
- теперь перед реколом при появлении ПК выпиваем бутылку с инвизкой
Невозможное возможнО!
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

v26RuS wrote:Новая версия скрипта 1.2:
- написана процедура убийства элементаля
- доработана проверка на кирку и при ее исчезновении рекол домой за ней
- испрвлены некоторые ошибки в коде
- теперь перед реколом при появлении ПК выпиваем бутылку с инвизкой
:wink: Чёрт мне бы домучить эту ходилку грёбанную ( чёто не фига не догоняю как сней. Воше делфи для меня тьма, я грёбаную курсовую по нему аж токо на 6 здал :twisted:
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

Я пользуюсь ходилкой Somebody исправленую Grundik
Норм ходилка и работает отлично
вот http://stealth.od.ua/forum/viewtopic.php?t=1038
Невозможное возможнО!
RaTaMaHaTTa
Novice
Novice
Posts: 89
Joined: 16.06.2008 12:22
Location: <||TORCHKI||>
Contact:

Post by RaTaMaHaTTa »

v26RuS wrote:Я пользуюсь ходилкой Somebody исправленую Grundik
Норм ходилка и работает отлично
вот http://stealth.od.ua/forum/viewtopic.php?t=1038
Обана спс ) Будем изучать.
v26RuS
Novice
Novice
Posts: 61
Joined: 18.05.2008 16:07
Location: DRW
Contact:

Post by v26RuS »

По просьбам трудящихся VIP Mining For DRW

Code: Select all

program MiningVip; 
// (c) v26RuS (Galiano{ASTARTA} DRW) v1.1 
{$Include 'all.inc'} 

const 
M_nothing1 = 'There is no ore here to mine'; 
M_nothing2 = 'That is too far'; 
M_nothing3 = 'Try mining in rock'; 
M_nothing4 = 'You cannot mine so close'; 
M_nothing5 = 'You have no line'; 
M_nothing6 = 'reach'; 
M_fizzles1 = 'You loosen some rocks'; 
M_needwait = 'You decide not to mine'; 
M_success = 'in your pack.'; 
MaxLimit = 15;              // максимальное кол-во физлов одной точки 
Cords_x = 1251;       // Кордината сундука X 
Cords_y = 1251;       // Кордината сундука Y 
Cord_x = 1251;          // Кордината копки X 
Cord_y = 1251;          // Кордината копки Y 
Pickaxe1 = $0E85;           // Типы кирок 
Pickaxe2 = $0E86; 
Ore1 = $19B7;               // 1 Ore 
Ore2 = $19BA;               // 2 Ore 
Ore3 = $19B8;               // 3 Ore 
Ore4 = $19B9;               // 4 Ore 
Sunduk = $4010C799;        // Общий сундук 
Sunduk_pix = $4010C799;     // Сундук c кирками 
Sunduk_ore = $4010C799;     // Сундук для руды 
MyMaxWeight = 400;       // Max Weight 
CaveLimit = 1282;        // Cave limit 
Itype=$0F09;           // Тип инвизки 
kill_elem=0;          // Убивать элементаля (в паке должны быть инвизки, скролы вортекса, скролы масс диспела) 
vxcol=$FFFF; 		    // Цвет скрола вортекса
vacol=$FFFF; 		    // Цвет скрола мас диспела


var 
minret,StartFlag : Integer; 
HowManyDischarge : Integer; 
ScriptStartTime : TDateTime; 

flag1 : Boolean; 

   procedure CheckDead; 
Begin 
if Dead then 
begin 
AddToSystemJournal('Персонаж мертв: '+TimeToStr(now)); 
FullDisconnect; 
end 
      end; 

procedure kill_elemental; 
var 
ctime : TDateTime; 
castvx, castva : Boolean; 
c, Eltype: Integer; 
begin 
Eltype:=$0010; // Тип элементаля 
castvx:=false; 
castva:=false; 
// Search and use Invisible potion 
   FindType(Itype,backpack); 
    if FindCount>0 then 
     begin 
       UseType(Itype,$FFFF); 
    end; 

// Search and use Vortex Scroll 
repeat 
   FindTypeEx($0F0E,vxcol,Backpack,false); 
    if FindCount>0 then 
     begin 
AddToSystemJournal('Кастую вортекса'); 
   repeat 
      UseObject(FindItem); 
      ctime:=Now; 
       wait(5000); 
      FindTypeEx($0F0E,vxcol,backpack,false); 
   until (inJournalBetweenTimes('Vortex', ctime, Now)<>0) or (FindCount = 0); 
if (inJournalBetweenTimes('Vortex', ctime, Now)<>0) then castvx:=true; 
    end; 

// Search Elemental 
if castvx = true then 
begin 
FindDistance:=17; 
AddToSystemJournal('Жду пока умрет элементаль'); 
FindType(Eltype,ground) 
c:=0; 
repeat 
c:=c+1; 
wait(10000); 
FindType(Eltype,ground) 
until (FindCount = 0) OR (c = 20); 
end; 
until (c < 20) or (castvx = false); 

// Search and use Vas An Ort Scroll 
if castvx = true then 
begin 
   FindTypeEx($0F0E,vacol,backpack,false); 
    if FindCount>0 then 
     begin 
AddToSystemJournal('Кастую воз ан орт'); 
   repeat 
      UseObject(FindItem); 
        ctime:=Now; 
      wait(6000); 
      FindTypeEx($0F0E,vacol,backpack,false); 
   until (inJournalBetweenTimes('fizzles', ctime, Now) = 0) or (FindCount = 0); 
   if (inJournalBetweenTimes('fizzles', ctime, Now) = 0) then castva:=true; 
    end; 
if castva = true then 
begin 
AddToSystemJournal('Лутаю'); 
FindType($19B9,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19B7,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19BA,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($19B8,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 

FindType($0EED,ground); 
if FindCount > 0 then 
begin 
grab(FindItem,0); 
wait(800) 
end; 
end; 
end; 
end; 

   procedure elemental; 
var TimeInterno : TDateTime; 
   begin 
if kill_elem = 1 then 
 begin 
  kill_elemental; 
  wait(1000); 
  exit; 
 end; 
ClearJournal; 
   TimeInterno := Now; 
   Addtosystemjournal('В переще элементаль для продолжение напишите start'); 
repeat 
   UOSay('\w Galiano: Elemental!!!'); // Приватное сообщение помощнику (который прийдет и убьет эля)... 
wait(3000); 
until (inJournalBetweenTimes('start', TimeInterno, Now) >= 0); 
   end; 

procedure GoXY(x,y : integer; runflag : boolean); 
   // x,y - eii?aeiaou, a eioi?ua eaai 
   // prec - oi?iinou iiaoiaa 
   // runflag - aa?aou eee eaoe 
   // v. 1.04 (n) Edred, ne?eio ii?oe?iaai n ei?aeoa 
   // i?eaeiaeuiay aa?ney Yoko n ai?aaioeie AGRS e Edred. 
   var ld, ldc, dx, dy, mx, my,d,e,a : Integer; 
   begin 
        ld := 0;   ldc := 0;   d := 0;     e := 2; 
   AddToSystemJournal('Начинаем переход'); 
     while true do 
        begin 
         dx := GetX(self) - x; if dx < 0 then dx := 0 - dx; 
         dy := GetY(self) - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         mx := GetX(self); my := GetY(self); 
         dx := mx - x; if dx < 0 then dx := 0 - dx; 
         dy := my - y; if dy < 0 then dy := 0 - dy; 
         if dy > dx then dx := dy; 
         if ld = dx then begin 
            ldc := ldc + 1; 
           if ldc > 4 then begin 
             addtosystemjournal( 'GotoXY: Cannot reach location!' ); 
             a := 0 
             repeat 
             Raw_Move(d,runflag); 
             a := a+1 
             until a = e 
             d := d + 2; 
             If d = 8 then d:=0 e:= e+1 ldc :=0 
              end; 
         end 
         else ld := dx; 
         waitconnection(5000); 
         if mx = x then begin 
            if my = y then exit; 
            // North 
            if my > y then begin Raw_Move(0,runflag); continue; end; 
            // South 
            Raw_Move(4,runflag); continue; 
         end; 
         if mx < x then begin 
            // Northeast 
            if my > y then begin Raw_Move(1,runflag); continue; end; 
            // East 
            if my = y then begin Raw_Move(2,runflag); continue; end; 
            // Southeast 
            Raw_Move(3,runflag); continue; 
         end; 
         // Southwest 
         if my < y then begin Raw_Move(5,runflag); continue; end; 
         // West 
         if my = y then begin Raw_Move(6,runflag); continue; end; 
         // Nortwest 
         Raw_Move(7,runflag); continue; 
      end; 
   end; 
   function CheckPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
                 addtosystemjournal('Нету кирки :(('); 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
              addtosystemjournal('Нету кирки :(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
   end; 

   procedure CheckHide; 
   begin 
      if Hidden then exit; 
      if WarMode = true then SetWarMode(false); 
      repeat 
         UseSkill('Hiding'); 
         wait(4500); 
         checksave; 
      until Hidden or (not Connected); 
   end; 




   function MiningAround : Integer ; 
   // копаем вокруг чара 
   // параметр - максимальный вес. 
   // возвращаем: 
   // 1 - вокруг чара все вскопано успешно 
   // 2 - превышен максимальный вес 
   // 3 - чар под атакой 
   // 4 - нет кирки 
   var k, r, x, y : Integer; 
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer; 
   var ctime : TDateTime; 
   begin 
      Result := 1; 
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight)); 
      for x := -4 to 4 do 
      begin 
         for y := -4 to 4 do 
         begin 
            r := 0; 
            repeat 
               waitconnection(5000); 
               if not CheckPickaxe then 
               begin 
                  Result := 4; 
                  exit; 
               end; 
               CheckHide; 
               if TargetPresent then CancelTarget; 
               if WarMode = true then SetWarMode(false); 
               ctime := Now; 
               UseObject(ObjAtLayerEx(RhandLayer,self)); 
               WaitForTarget(1000); 
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self)); 
               k := 0; 
               repeat 
                  wait(100); 
                  k := k + 1; 
                  checksave; 
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 300); 

          if InJournalBetweenTimes('heavy', ctime, Now) <> -1 then 
      begin 
        Result := 6 
        exit; 
          end; 
    

               if Weight > MyMaxWeight then 
               begin 
                  Result := 2; 
                  exit; 
               end; 
               if (mf1<>-1) then 
               begin 
                  r := r + 1; 
                  if r >= 10 then break 
                  else continue; 
               end; 
               if (mw1<>-1) then wait(3000); 
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1); 
         end; 
      end; 
   end; 

function DischargeSunduk : Boolean; 
   // Разгружаем пак чара в сундук. Возвращаем: 
   // 1 - все ок, пак разгружен. 
   // 0 - не получилось. 
   var tmpcnt : Integer; 
      tmpid, tmpstack : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
            addtosystemjournal('Пришли на разгрузку'); 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk_ore); 
      checksave; 
      // Переместим руду 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить руду!'); 
            Result := false; 
            exit; 
         end; 
         repeat 
            tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk_ore,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk_ore,False); 
            if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
         until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000); 
         // Если не найден в сундуке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk_ore; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      HowManyDischarge := HowManyDischarge + 1; 
      IgnoreReset; 

   FindType(Itype,Backpack); 
    if (FindCount = 0) or (Count(Itype) <= 2) then 
     begin 
        AddToSystemJournal('Добираем инвизки'); 
     FindType(Itype,Sunduk_ore); 
      if FindCount > 0 then 
        begin 
        MoveItem(FindItem,5,Backpack,0,0,0); 
      end; 
    end; 


      with TStringList.Create do 
         try 
         Add('Разгрузка руды: ' + DateTimeToStr(Now)); 
         SaveToFile('mining_' + GetName(self) + '.log'); 
         finally 
         free; 
      end; 
         addtosystemjournal('Разгрузка закончена'); 
   end; 
  
   function GetPickaxe : Boolean; 
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку 
   // возвращаем true - если все ок, false - если нет кирки 
   // Проверка на то, что в руке у чара не кирка не производится! 
   var tmpser : Cardinal; 
   begin 
      Result := true; 
      if (ObjAtLayerEx(RhandLayer,self) = 0) then 
      begin 
         // ничего в руках нету 
         tmpser := findtype(Pickaxe1,backpack); 
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack); 
         if tmpser = 0 then 
         begin 
            Result := false; 
            exit; 
         end; 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
      end; 
if Result = false then 
begin 
                 GoXY(Cords_x,Cords_y,true); 
       useobject(sunduk_ore); 
       tmpser := findtype(Pickaxe1,Sunduk_pix); 
       if tmpser = 0 then tmpser := findtype(Pickaxe2,Sunduk_pix); 
       if tmpser = 0 then 
       begin 
        Result := false; 
        addtosystemjournal('Нету кирки в сундуке:(('); 
       end; 
       grab(Finditem,1); 
         if not equip(RhandLayer,tmpser) then 
         begin 
            wait(1000); 
            if not equip(RhandLayer,tmpser) then 
            begin 
               Result := false; 
        addtosystemjournal('Нету кирки в сундуке:(('); 
               exit; 
            end; 
         end; 
         wait(500); 
         checksave; 
                 GoXY(Cord_x,Cord_y,true); 
end; 
   end; 


Begin 
   ScriptStartTime := Now; 
   HowManyDischarge := 0; 
   StartFlag := 1; 
   repeat 
   // стартуем от сундука 
      CheckDead; 

      addtosystemjournal('Вылетаю в шахту'); 
   GoXY(Cord_x,Cord_y,true); 
      repeat 
         CheckDead; 
         if Dead then break; 
         GetPickaxe; 
         minret := MiningAround; 
         CheckDead; 
         if Dead then break; 
         if minret = 4 then  GetPickaxe; 
    if minret = 6 then  elemental; 
      until minret = 2; 
      addtosystemjournal('Пора на разгрузку'); 
      CheckDead; 
   GoXY(Cords_x,Cords_y,true); 
      if not Dead then 
      begin 
         repeat 
            WaitConnection(5000); 
            CheckDead; 
            if Dead then break; 
            flag1 := DischargeSunduk; 
            wait(100); 
         until flag1 = true; 
   GoXY(Cord_x,Cord_y,true); 
      end; 
      CheckDead; 
   until false; 
End.
Last edited by v26RuS on 14.07.2008 15:41, edited 2 times in total.
Невозможное возможнО!
Post Reply