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

Недавно начал разбиратся, нужен хелп

тут можно задать вопрос по скриптингу
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Недавно начал разбиратся, нужен хелп

Post by Sfairat »

Вот простенький скрипт на дюп на жратве :)
Вроди все правильно...

Проблема:
Не складывает хавчик в сундук и пончики или че там, которые не стокуются в треш, т.е чето с мувитемом, подсказывали поставить вместо $ffff - $ffffffff неканает...

Code: Select all

program FOOD;
const
DestChest=$40067ff2;
TrashBarel=$4005f4ad;
var
a:array[1..9] of cardinal;
i:integer;

procedure MF;
begin
   for i:=1 to 9 do
      if count(a[i])>0 then begin
         Moveitem(FindType(a[i],$ffff),0,DestChest,0,0,0);
         wait(800);
      end;
end;
  
procedure MT;
begin
   while Count($09eb)>0 do
      for i:=1 to Count($09eb) do begin
         Moveitem(FindType($09eb,$ffff),0,TrashBarel,0,0,0);
         wait(600);
      end;
end;

begin;
a[1]:=$09c9;
a[2]:=$09f2;
a[3]:=$09c0;
a[4]:=$09b7;
a[5]:=$09d1;
a[6]:=$09d0;
a[7]:=$097d;
a[8]:=$097b;
a[9]:=$09d2;
while true do begin
   repeat
      Cast('Create Food');
      wait(400)
   Until weight>300;
   MF;
   MT;
end;
end.
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Блин извиняйте не в тот раздел... :?
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

да, есть такая трабла, девелоперы в процессе вроде как.
Стелс не то чтобы совсем не перемещает, просто он не знает переместил итем или нет.

пробуй что-нить типа
while not MoveItem(findItem,......) do FindType(MyItem,....);
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Так что самое интересное у знакомого все работало!!! :shock:
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

А так что еще интересно в другом скрипте с точно такой же структурой все пашет

Code: Select all

Procedure razgruzz;
begin
//addtosystemjournal('ra-zz');
while count(ore)>0 do begin
   //addtosystemjournal(inttostr(count(ore)));
   MoveItem(FindType(Ore,$ffff),0,Sunduk,0,0,0);
   wait(600);
end;
for i:=1 to 6 do if count(b[i])>0 then begin
   MoveItem(FindType(b[i],$ffff),0,Sunduk,0,0,0);
   wait(600);
end;
wait(1000);
end;
MAKAPEBu4
Neophyte
Neophyte
Posts: 23
Joined: 16.12.2006 19:19

Post by MAKAPEBu4 »

Code: Select all

function Ground: Cardinal; // указатель на землю - используется в поиске и пр. 
От себя: он равен 0xFFFFFFFF

Code: Select all

function Count(ObjType: Word): Integer; // количество обьектов по типу в бакпаке 

Code: Select all

procedure MF; 
begin 
   for i:=1 to 9 do 
      if count(a[i])>0 then begin 
         Moveitem(FindType(a[i],$ffff),0,DestChest,0,0,0); 
         wait(800); 
      end; 
end; 
Не пойму, почему ты проверяеш кол-во вещей в паке "count(a)>0", а потом ищеш их на полу "FindType(a,$ffff)" это если я правильно понял. Исходя из того что тебе "рекомендовали поменять $ffff на $ffffffff"
А проблема, заключается в том что вещи не стакаются в одну кучку в "TrashBarel" ?
Если имеено в этом, то потому что на севере так сделали. Это не стелс.
Если именно "не складывает", то опять таки. Ты ищеш ее на полу или еще где, а перед этим проверяеш наличие в паке. Полагаю она в паке лежит? Тогда нада использовать backpack вместо $ffff. Лично я замечал что у меня стелс не находил некоторые вещи в паке.
Если что-то нето расказал, то я не виноват, сам так поставил вопрос (:
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Запустить щас негде, я правильно понял?

Code: Select all

procedure MF;
begin
   for i:=1 to 9 do
      if count(a[i])>0 then begin
        UseObject(DestChest);
        wait(2000);
         Moveitem(FindType(a[i],Backpack),0,DestChest,0,0,0);
         wait(800);
      end;
end;

Да скрипт не скидывает жрачку в сундук из бекпака, а то печенюшки которые не стокуются в треш
Last edited by Sfairat on 22.10.2009 9:30, edited 1 time in total.
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Ну и сразу же задам вопрос еще...
Вот кусок скрипта он как видите копает тупо по 7 раз

Code: Select all

procedure kopp;
begin
//addtosystemjournal('Ko-pp');
for i:=1 to 8 do begin
  addtosystemjournal('Копаем '+inttostr(i)+'й раз');
    if count(kr)=0 then begin
      Break;
      addtosystemjournal('Кирок не осталось, конец текущей итерации');
   end;
     WaitTargetXYZ(GetX(self),Gety(self)-1,GetZ(self));
     UseObject(FindType(Kr,$ffff));
     Wait(2000);  
end;
end;
Хотел сделать проверку через вес

Code: Select all

procedure kopp;
begin
if  weight<450  Then begin
   Break;
     addtosystemjournal('Перегруз!');
end;                                                  
   if count(kr)=0 then begin
      Break;
      addtosystemjournal('Кирок не осталось, конец текущей итерации');
   end;
     WaitTargetXYZ(GetX(self),Gety(self)-1,GetZ(self));
     UseObject(FindType(Kr,$ffff));
     Wait(2000);  
end;
end;

Правильно?
Надо еще как то в начале про вес прописывать?
Как сделать чтобы он выводил сообщение в адтосистемжурнал о текущем весе, а лучше и о количестве попыток?
и вот честно не доходит. в строчке

if weight<450 Then begin
Break;
addtosystemjournal('Перегруз!');
end;

если вес больше 450 он остановится и напишет перегруз, ну а дальше он как поймет че ему делать?
MAKAPEBu4
Neophyte
Neophyte
Posts: 23
Joined: 16.12.2006 19:19

Post by MAKAPEBu4 »

Sfairat wrote:Запустить щас негде, я правильно понял?

Code: Select all

procedure MF;
begin
   for i:=1 to 9 do
      if count(a[i])>0 then begin
        UseObject(DestChest);
        wait(2000);
         Moveitem(FindType(a[i],Backpack),0,DestChest,0,0,0);
         wait(800);
      end;
end;

Да скрипт не скидывает жрачку в сундук из бекпака, а то печенюшки которые не стокуются в треш
Понял правильно. Если не получится, возможно, это проблема стелса...
Что бы стакать что-то, что не хочет стакатся когда бросаеш его в сундучек, нада бросать его не в сундучек, а на ту вещь которую хочеш соединить. В твоем случае, если я все правильно понял, нужно бросать не в "TrashBarel", а на пиченьку которая находится в "TrashBarel".
Где-то так:

Code: Select all

Moveitem(FindType($09eb,$ffff),0,FindType($09eb,TrashBarel),0,0,0);
Не забудь открыть TrashBarel.
MAKAPEBu4
Neophyte
Neophyte
Posts: 23
Joined: 16.12.2006 19:19

Post by MAKAPEBu4 »

Sfairat wrote:Ну и сразу же задам вопрос еще...
Вот кусок скрипта он как видите копает тупо по 7 раз
.....
если вес больше 450 он остановится и напишет перегруз, ну а дальше он как поймет че ему делать?
Копает он 8 раз.
Переделал ты не правильно, первый вариант писал который раз сейчас копает. А ты убрал эту надпись и цикл в целом, на break у тебя будет ошибка т.к. нет цикла.
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

MAKAPEBu4 wrote: Копает он 8 раз.
Переделал ты не правильно, первый вариант писал который раз сейчас копает. А ты убрал эту надпись и цикл в целом, на break у тебя будет ошибка т.к. нет цикла.

Ы ну 8 это я потом поставил

Со жратвой... т.е я ваше правильно написал? пиченьки не стакуются в принцыпе, ну блин ну как армор :) остальное само по себе в паке в стопке

А вот по минингу че то не понял, можете подправить как надо, чтоб хоть я понял шо делать...или как то по простому объясните :roll:


ЗЫ ну я понял что я фор ваше убрал и он один раз проверит вес и сделает и как бэ догадываюсь, что нужно сделать типа for i:= и тут как бы переменное число которое будет при проверке на вес, а проверка на вес будет приравнивать
if weight<450 Then i:=2
addtosystemjournal('Перегруз!');
end <----------- тут надо точку с запятой?
else отсылка к программе реколке к дому
end;

.....че то не соображу...


ЗЫЫ Т.е как бы хочется типа:
Проверяем на вес, прошли значит И=2 нет отсылка к другой программе
for i:=1 to i:=(присовенно при фи значение и т.е 2) do begin

Хм щас попробую через Ваил
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Так проканает?

Code: Select all

procedure kopp;
begin
while weight < 450 do            //Если вес меньше 450, работать. Надо weight где как то прописывать? 
begin
   if count(kr)=0 then            //Проверяет если лопаты по типу прописанному в начале, если = 0 то....
    begin
      Break;
      addtosystemjournal('Кирок не осталось, конец текущей итерации');
    end;
     WaitTargetXYZ(GetX(self),Gety(self)-1,GetZ(self));
     UseObject(FindType(Kr,$ffff));
     Wait(2000);  
 end;
end;
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Sfairat wrote:

Code: Select all

begin
      Break;<===Вот эта команда прекращает работу поцедуры!!!
И все что стоит дальше никогда не выполнится.
      addtosystemjournal('Кирок не осталось, конец текущей итерации');

end;
=========

Code: Select all

procedure kopp;
const
WorldSaveTime=65000;
begin
while true do begin
	if count(kr)=0 then begin
		addtosystemjournal('Кирок не осталось, конец текущей итерации');
		Break;
	end;
	WaitTargetXYZ(GetX(self),Gety(self)-1,GetZ(self));
	UseObject(FindType(Kr,backpack));
	if not WaitJournalLine(now,'no ore|too far|in rock|You cannot|no line|reach|You loosen|OOPS|in your pack.|Cancelled',WorldSaveTime+2000) then begin
		//timeout on wait answer from server
		//any action...
	end else begin 
		case FoundedParamID of
			0:begin { no ore }
				//any action...
			end;
			1:begin { too far }
				//any action...
			end;
			2:...
			3:
			4:
			...
			8:begin { in your pack. }
			// че-то выкапали проверяем вес
				if (weight>MyMaxWeight) then GoUnload;
				
			end;  
			  
		end;
	end;  
	  
 end;
end;
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Ага балшое пасиб но необходимость отпала :) ибо если он будет копать постоянно то так до респавна руды может зависнуть, аточек еще 49шт. :lol: и еще вопросик,

Code: Select all

Procedure razgruzz;
begin
addtosystemjournal('Разгрузка');
while count(ore)>0 do begin
   //addtosystemjournal(inttostr(count(ore)));
   MoveItem(FindType(Ore,$ffff),0,Sunduk,0,0,0);
   wait(1000);
   CheckSave; 
end;
for i:=1 to 6 do if count(b[i])>0 then begin
   MoveItem(FindType(b[i],$ffff),0,Sunduk,0,0,0);
   wait(1000);
   CheckSave; 
end;
wait(2000);
CheckSave;
end;

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

Возможно написать так?

Code: Select all

Procedure razgruzz;
begin
  addtosystemjournal('Разгрузка');
  UseObject(Sunduk);
  if LastContainer = Sunduk then
  begin
  addtosystemjournal('Есть сундук, выгружаем');
    while count(ore)>0 do 
    begin
    //addtosystemjournal(inttostr(count(ore)));
    MoveItem(FindType(Ore,$ffff),0,Sunduk,0,0,0);
    wait(1000);
    CheckSave; 
    end;
     for i:=1 to 6 do if count(b[i])>0 then begin
     MoveItem(FindType(b[i],$ffff),0,Sunduk,0,0,0);
     wait(1000);
     CheckSave; 
     end;
  end;
wait(2000);
CheckSave;
end;

Так вроди работает, но есть сомнения по поводу ластконтейнера, а не будет ли он помнить ластконтейнер с предыдущего цикла?
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Code: Select all

Procedure razgruzz;
begin
if GetDistance(Sunduk) > 2 then exit; //проверка на расстояние до сундука
addtosystemjournal('Разгрузка');
.....
Post Reply