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

Mining или наставьте на путь:)))

Only working scripts
Post Reply
Fess
Posts: 8
Joined: 19.02.2011 3:26

Mining или наставьте на путь:)))

Post by Fess »

Скрипт Эдредовский ,раньше пахал на все 100, потом после некоторых изменений на сфере перестал жить.Вроде всё перенастроил и чары к сундуку и от него стали бегать норм ,а вот стали тупить при сбросе руды регов и т.д.Просто пишут что руда найдена и просто перетаскивают её по сумке а в сундук не скидывают.
СУндуки менять пробывал . Помогите плиз разобраться в проблеме.Вот скрипт

Code: Select all

program MineBotRiven;
// Скрипт на мининг на шарде FW.
// Все тоже самое, но у ривена, разгрузка в сундук, кирки в мешке там же.
// Все чары в один сундук. Маршрутов всего три: шахта-дом, дом-ГЗ, ГЗ-крест.
//
// v.2.08 (c) Edred

{$Include 'all.inc'}

const
r1 = 10; r2 = 12; r3 = 8;
rmax = 12;                                // максимальный
M_nothing1 = 'There is nothing here';
M_nothing2 = 'That is too far';
M_nothing3 = 'Try mining elsewhere.';
M_nothing4 = 'You cannot mine so close';
M_nothing5 = 'You have no line';
M_nothing6 = 'reach';
M_nothing7 = 'Вы переместили Iron Ore в свою сумку..';
M_nothing8 = 'Вы переместили Jewel of Spirits в свою сумку..';
M_nothing9 = 'Вы переместили Silver Ore в свою сумку..';
M_nothing10 = 'Вы переместили Dark Iron Ore в свою сумку..';
M_fizzles1 = 'You loosen some rocks';
M_fizzles2 = 'не смогли выкопать ничего';
M_needwait = 'You decide not to mine';
M_success = 'Вы переместили';
MaxLimit = 300;               // максимальное кол-во физлов одной точки
Pickaxe1 = $0E85;            // Типы кирок
Pickaxe2 = $0E86;
AnkhID = $40002BA3;
JevelType = $0F29;            // тип Jewel of Spirits
Ore1 = $19B7;               // 1 Ore
Ore2 = $19BA;               // 2 Ore
Ore3 = $19B8;               // 3 Ore
Ore4 = $19B9;               // 4 Ore
Ident = $000046B1;
Sunduk = $4002D21D;
BagPickaxe1 = $4000EB58;
//BagPickaxe2 = $4008AF82;
DeadLife = 40;               // Временно - если меньше здоровья - мы мертвы
                        // Точнее, проверить через реконнект.

type Rail = array[1..rmax] of Integer;

var
Rail_1, Rail_2, Rail_3, StartMinPoint : Rail;
minret, MyMaxWeight,StartFlag, CaveLimit : integer;
IronCnt,BlueriteCnt,ShadowCnt,DarkIronCnt,AgapiteCnt : Integer;
BlackrockCnt,SilverCnt,DiamondCnt,ValoriteCnt,MytherilCnt : Integer;
GoldCnt,VeriteCnt,BloodRockCnt,HowManyDischarge : Integer;
ResCnt : Integer;
ScriptStartTime : TDateTime;

flag1 : Boolean;



function InitConfig : Boolean;
   // Настройка переменных под конкретного чара
   begin
      Result := true;
      // Rail_1: сундук - шахта
      Rail_1[1] := 1666; Rail_1[2] := 3001;
      Rail_1[3] := 1661; Rail_1[4] := 3001;
      Rail_1[5] := 1661; Rail_1[6] := 2997;
      Rail_1[7] := 1661; Rail_1[8] := 2991;
      Rail_1[9] := 1661; Rail_1[10] := 2983;  
      // Rail_2: сундук - ГЗ
      Rail_2[1] := 1331; Rail_2[2] := 2856;
      Rail_2[3] := 1331; Rail_2[4] := 2848;
      Rail_2[5] := 1351; Rail_2[6] := 2828;
      Rail_2[7] := 1370; Rail_2[8] := 2828;
      Rail_2[9] := 1370; Rail_2[10] := 2819;
      Rail_2[11] := 1376; Rail_2[12] := 2813; 
      // Rail_3: ГЗ - крест
      Rail_3[1] := 1376; Rail_3[2] := 2813;
      Rail_3[3] := 1376; Rail_3[4] := 2804;
      Rail_3[5] := 1371; Rail_3[6] := 2804;
      Rail_3[7] := 1371; Rail_3[8] := 2802;
      // Счетчики разгруженной руды
      IronCnt := 0;
      BlueriteCnt := 0;
      ShadowCnt := 0;
      DarkIronCnt := 0;
      AgapiteCnt := 0;
      BlackrockCnt := 0;
      SilverCnt := 0;
      DiamondCnt := 0;
      ValoriteCnt := 0;
      MytherilCnt := 0;
      GoldCnt := 0;
      VeriteCnt := 0;
      BloodRockCnt := 0;
      ResCnt := 0; 

    //if GetName(self) = 'Ident' then
      if self = Ident then
      begin
         MyMaxWeight := 370;
         StartMinPoint[1] := 1649;
         StartMinPoint[2] := 2981;
         StartMinPoint[3] := 1661;
         StartMinPoint[4] := 2977;
         StartMinPoint[5] := 1657;
         StartMinPoint[6] := 2977;
         StartMinPoint[7] := 1653;
         StartMinPoint[8] := 2977;
         StartMinPoint[9] := 1677;
         StartMinPoint[10] := 2977;
         StartMinPoint[11] := 1673;
         StartMinPoint[12] := 2977;
         CaveLimit := 1648;
         exit;
      end;    
      // Если дошли до сюда - это плохо!
      Result := false;
      addtosystemjournal('Error: Не могу настроиться под чара!');
      exit;
   end;


procedure PrintStatistic;
   // выводит в файл с именем charname.log суммарную статистику с запуска скрипта
   begin
      with TStringList.Create do
         try
         Add('Скрипт начал работу: ' + DateTimeToStr(ScriptStartTime));
         Add('             Сейчас: ' + DateTimeToStr(Now));
         Add(' ');
         Add('Количество разгрузок: ' + inttostr(HowManyDischarge));
         Add(' ');
         Add('Добыто:');
         Add('   Iron ' + inttostr(IronCnt));
         Add('   Dark Iron ' + inttostr(DarkIronCnt));
         Add('   Gold ' + inttostr(GoldCnt));
         Add('   Silver ' + inttostr(SilverCnt));
         Add('   Verite ' + inttostr(VeriteCnt));
         Add('   Valorite ' + inttostr(ValoriteCnt));
         Add('   Shadow ' + inttostr(ShadowCnt));
         Add('   Agapite ' + inttostr(AgapiteCnt));
         Add('   Blood Rock ' + inttostr(BloodRockCnt));
         Add('   Mytheril ' + inttostr(MytherilCnt));
         Add('   Diamond ' + inttostr(DiamondCnt));
         Add('   Black Rock ' + inttostr(BlackrockCnt));
         Add('   Bluerite ' + inttostr(BlueriteCnt));
         Add(' ');
         Add('Количество ресов чара: ' + inttostr(ResCnt));
         SaveToFile('__' + GetName(self) + '.log');
         finally
         free;
      end;
   end;

   procedure CheckDead;
      begin
         if Dead then exit;
         if HP < 40 then
         begin
            SetARStatus(False);
            Disconnect;
            wait(5000);
            Connect;
            SetARStatus(True);
            repeat
               wait(100);
            until Connected;
         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;
            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;
   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, mn7, mn8, mn9, mn10, mf1, mf2, mw1, ms1 : Integer;
   var ctime : TDateTime;
   begin
      Result := 1;
      if (HP < MaxHP) or Dead then
      begin
         Result := 3;
         exit;
      end;
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight));
      for x := -2 to 2 do
      begin
         for y := -2 to 2 do
         begin
            r := 0;
            repeat
               waitconnection(5000);
               if (HP < MaxHP) or Dead then
               begin
                  Result := 3;
                  exit;
               end;
               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(5000);
               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);
                  mn7 := InJournalBetweenTimes(M_nothing7, ctime, Now);
                  mn8 := InJournalBetweenTimes(M_nothing8, ctime, Now);
                  mn9 := InJournalBetweenTimes(M_nothing9, ctime, Now);
                  mn10 := InJournalBetweenTimes(M_nothing10, ctime, Now);
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now);
                  mf2 := InJournalBetweenTimes(M_fizzles2, 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 (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1) or (mf1<>-1) or (mf2<>-1) or (ms1<>-1) or (HP < MaxHP) or Dead or (k > 300);
               if (HP < MaxHP) or Dead then
               begin
                  Result := 3;
                  exit;
               end;
               if Weight > MyMaxWeight then
               begin
                  Result := 2;
                  exit;
               end;
               if (mf1<>-1) or (mf2<>-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) or (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1);
         end;
      end;
   end;


procedure GotoXY(x,y,prec : integer; runflag : boolean);
   // x,y - координаты, в которые идем
   // prec - точность подхода
   // runflag - бежать или идти
   // v. 1.04 (с) Edred, скрипт портирован с инжекта
   // оригинальная версия Yoko с доработкой AGRS и Edred.
   var ld, ldc, dx, dy, mx, my : Integer;
   begin
      ld := 0; ldc := 0;
      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;
         if dx <= prec then exit;
         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 dx <= prec then exit;
         if ld = dx then begin
            ldc := ldc + 1;
            if ldc > 100 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; 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(4,runflag); continue; end;
         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;

procedure GotoRail(TmpR : Rail; TmpRD : Integer; dir, guard : Boolean);
	// TmpR - маршрут, по которому двигаться
	// TmpRD - размер этого массива
	// dir - направление перемещения по маршруту (true - прямое, false - обратное)
	// guard - звать гвардов если бьют по дороге или нет (true - звать, false - нет)
	// v.1.21 (c) Edred, основана на моих аналогичных функциях для Инжекта и Изи.
	var i,k,x,y : Integer;
   
	begin
	// число элементов в массиве четное. Каждые два - это координаты.
	// 1 : 1,2      2 : 3,4      3 : 5,6      n : n*2-1,n*2
	// обратное направление:
	// 1 : max-1,max   2 : max-3,max-2      n : max-n*2+1,max-n*2+2
	k := TmpRD/2;
	for i := 1 to k do
	begin
		if dir then
		begin x := TmpR[i*2 - 1]; y := TmpR[i*2]; end
		else
		begin x := TmpR[TmpRD - i*2 + 1]; y := TmpR[TmpRD - i*2 + 2]; end;
		if guard AND (HP < MaxHP) then
		begin UOSay( 'GUARDS' ); wait(100); end;
		repeat
		wait(1000);
         addtosystemjournal('Отладка: идем в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');
            GotoXY(x,y,0,true);
	addtosystemjournal('Отладка: пришли в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');         
         until (GetX(self)=x) and (GetY(self)=y);
      end;
   end;

procedure Medita;
   // медитация до полного восстановления маны
   var
      tmptime : TDateTime;
      k : Integer;
   begin
      if WarMode = true then SetWarMode(false);
      waitconnection(5000);
      if (Mana <= MaxMana) then
      begin
         tmptime := Now;
         k:=0;
         repeat
            useskill('meditation');
            wait(2000);
            k := k + 1;
            checksave;
         until (InJournalBetweenTimes('у вас полный уровень маны', tmptime, Now)<>-1) or (k = 100);
         addtosystemjournal('медитация закончена');
      end;
   end;

procedure HealChar;
   // лечение чара спирит спиком до полного здоровья
   var
      tmptime : TDateTime;
      k : Integer;
   begin
      while (HP<MaxHP) do
      begin
         waitconnection(3000);
         tmptime := Now;
         k := 0
         UseSkill('Spirit Speak');
         repeat
            wait(100);
            k := k + 1;
         until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (k > 300);
         wait(500);
         if Mana < 30 then Medita;
      end;
   end;
function ResChar : Boolean;
   // Рес чара с креста
   begin
      Result := true;
      WaitConnection(5000);
      if WarMode = true then SetWarMode(false);
      UseObject(AnkhID);
      wait(2000);
      checksave;
      if Dead then
      begin
         addtosystemjournal('Error: не могу реснуться!');
         Result := false;
         exit;
      end;
      ResCnt := ResCnt + 1;
      HealChar;
   end;

function GetPickaxe : Boolean;
   // проверяем, есть ли кирка у чара в паке или на нужном слое.
   // если ее нет - открываем сундук и мешок, берем кирку. Если кирки нет
   // в мешке - выход.
   var tmpser : Cardinal;
   begin
      Result := true;
      waitconnection(3000);
      CheckDead;
      if Dead then
      begin
         Result := false;
         exit;
      end;
      if (ObjAtLayerEx(RhandLayer,self) <> 0) or (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0) then exit;
      // нет у чара кирки
      repeat
         CheckDead;
         if Dead then
         begin
            Result := false;
            exit;
         end;
         waitconnection(3000);
         UseObject(Sunduk);
         wait(1000);
         checksave;
         UseObject(BagPickaxe1);
         wait(1000);
         checksave;
         tmpser := findtype(Pickaxe1,BagPickaxe1);
         if tmpser = 0 then tmpser := findtype(Pickaxe2,BagPickaxe1);
         if tmpser <> 0 then
         begin
            Grab(tmpser,1);
            wait(1000);
            checksave;
         end;
      until (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0);
   end;


function GetOreColor(c : cardinal) : string;
   // сравниваем цвет указанного итема с табличкой и возвращаем
   // название этого цвета с пробелом в начале
   begin
      Result := ' unknown';
      Case GetColor(c) of
         $0000 : begin Result := ' Iron'; IronCnt := IronCnt + GetQuantity(c); end;
         $00BE : begin Result := ' Bluerite'; BlueriteCnt := BlueriteCnt + GetQuantity(c); end;
         $0381 : begin Result := ' Shadow'; ShadowCnt := ShadowCnt + GetQuantity(c); end;
         $0386 : begin Result := ' Dark Iron'; DarkIronCnt := DarkIronCnt + GetQuantity(c); end;
         $0400 : begin Result := ' Agapite'; AgapiteCnt := AgapiteCnt + GetQuantity(c); end;
         $0455 : begin Result := ' Blackrock'; BlackrockCnt := BlackrockCnt + GetQuantity(c); end;
         $0482 : begin Result := ' Silver'; SilverCnt := SilverCnt + GetQuantity(c); end;
         $048F : begin Result := ' Diamond'; DiamondCnt := DiamondCnt + GetQuantity(c); end;
         $0515 : begin Result := ' Valorite'; ValoriteCnt := ValoriteCnt + GetQuantity(c); end;
         $052D : begin Result := ' Mytheril'; MytherilCnt := MytherilCnt + GetQuantity(c); end;
         $0630 : begin Result := ' Gold'; GoldCnt := GoldCnt + GetQuantity(c); end;
         $07D1 : begin Result := ' Verite'; VeriteCnt := VeriteCnt + GetQuantity(c); end;
         $0994 : begin Result := ' Blood Rock'; BloodRockCnt := BloodRockCnt + GetQuantity(c); end;
      end;
   end;

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


Begin
   ScriptStartTime := Now;
   HowManyDischarge := 0;
   if not InitConfig then exit;
   StartFlag := 1;
   repeat
   // стартуем от сундука
      CheckDead;
      if not Dead then
      begin
         HealChar;
         CheckDead;
      end;
      if (GetX(self) = Rail_1[1]) and (GetY(self) = Rail_1[2]) then
      begin
         If not dead then if not GetPickaxe then exit;
         addtosystemjournal('Скрипт начинает работу от сундука, идем в шахту');
         GotoRail(Rail_1,r1,true,false);
      end;
      addtosystemjournal('Я в шахте. Начнем с точки ' + inttostr(StartFlag));
      Case StartFlag of
         1 : begin
               GotoXY( StartMinPoint[1],StartMinPoint[2],0,true);
               StartFlag := 2;
            end;
         2 : begin
               GotoXY( StartMinPoint[3],StartMinPoint[4],0,true);
               StartFlag := 3;
            end;
         3 : begin
               GotoXY( StartMinPoint[5],StartMinPoint[6],0,true);
               StartFlag := 4;
            end;
         4 : begin
               GotoXY( StartMinPoint[7],StartMinPoint[8],0,true);
               StartFlag := 5;
            end;
         5 : begin
               GotoXY( StartMinPoint[9],StartMinPoint[10],0,true);
               StartFlag := 6;
            end;
         6 : begin
               GotoXY( StartMinPoint[11],StartMinPoint[12],0,true);
               StartFlag := 1;
            end;
      end;
      repeat
         CheckDead;
         if Dead then break;
         minret := MiningAround;
         CheckDead;
         if Dead then break;
         if minret = 1 then GotoXY(GetX(self)-3,GetY(self),0,false);
         if GetX(self) < (CaveLimit + 3) then break;
      until minret <> 1;
      addtosystemjournal('Пора на разгрузку');
      GotoRail(Rail_1,r1,false,false);
      CheckDead;
      if not Dead then
      begin
         repeat
            WaitConnection(5000);
            CheckDead;
            if Dead then break;
            addtosystemjournal('Пришли на разгрузку');
            flag1 := DischargeSunduk;
            wait(100);
         until flag1 = true;
         addtosystemjournal('Разгрузка закончена');
      end;
      CheckDead;
      if Dead then
      begin
         GotoRail(Rail_2,r2,true,false);
         GotoRail(Rail_3,r3,true,false);
         addtosystemjournal('Надо ресаться');
         repeat
            WaitConnection(5000);
            flag1 := ResChar;
            wait(1000);
         until flag1 = true;
         GotoRail(Rail_3,r3,false,true);
         GotoRail(Rail_2,r2,false,false);
      end;
   until false;
End.

Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Несколько вопросов относительно сервера:
1. Максимальное количество итемов в куче действительно 65535? Просто на большинстве серверов, где мне приходилось играть это количество ограничено 60к.
2. Можно ли стековать кучки руды разных типов? К примеру, сервер на котором я играл последний раз не поддерживает такую фичу, т.к. кучки руды разных типов дают разное кол-во металла после переплавки.
3. Смысл перетаскивать предметы в уже существующие кучки? Сервер не поддерживает автоматическую стековку однотипных предметов при перетаскивании на контейнер? Или для выгрузки вы используете контейнер, который стелс за контейнер не считает (в таком случае вполне возможны траблы с перетаскиванием)?
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Fess
Posts: 8
Joined: 19.02.2011 3:26

Post by Fess »

шард является старым форест варсом,под который Эдред и писал этот скрипт.Но админ шарда чтото накрутил со сферой,сделал как бы переход на новую сферу и всё посбивалось.
кучки максимально по 65535 , и руда докидывается в кучку пока не станет число 65535 а потом создаётся новая кучка и т.д.
Раннее минёры которые копают не имели доступа к сундуку (у меня)то есть не открывали сундук и не могли кидать именно по кучкам они кидали тупо в сундук а руда там сама раскидывалась ,теперь почему то они тупо стоят даже возле разлоченного сундука и не могут скинуть руду.то есть щас они могут его открывать даже.
Fess
Posts: 8
Joined: 19.02.2011 3:26

Post by Fess »

2 вопрос честно говоря не понял.
стековку однотипного конечно поддерживает.раньше скрипт именно так и работал.кидал просто в сундук и всё.проблем не было
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

какая версия клиента?

и позволяет клиентом выставлять число при перетаскивании больше 60к?
заглянул в клиент 1.26.4 - там есть проверки типа
if ( xxx <= 60000 )
b = xxx - 1;
else
b = 1;
где именно они используются - выяснять лень, но их 4 штуки.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fess
Posts: 8
Joined: 19.02.2011 3:26

Post by Fess »

Клиент v1.0 RC 3
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

клиента, а не стелса
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fess
Posts: 8
Joined: 19.02.2011 3:26

Post by Fess »

Stealth v1.0 RC3
FutureSkill
Posts: 5
Joined: 19.03.2011 16:55

Post by FutureSkill »

Интересная версия клиента. Если что, то под версией клиента подразумевалась версия графического клиента Ultima Online, где бегает персонаж, обычно версия пишется чуть ниже под полями Login и Password при входе в игру. И чаще всего это 2.0.3 или подобие, в Российской части интернета.
Fess
Posts: 8
Joined: 19.02.2011 3:26

Post by Fess »

я думал имеется ввиду версия стелса.да для игры используется клиент 203
Post Reply