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

Траблы с созданием первого макроса!

тут можно задать вопрос по скриптингу
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Траблы с созданием первого макроса!

Post by Warrior »

Суть заключается в том что я на инжекте довольно сносно могу написать нужные мне макросы, но вот так получилось что машинка слабенькая и не тянет много окон УО поэтому приходится искать альтернативу в лице "стелса"! Так вот я привык писать макросы с проверкой которая удовлетворит любые лаги (сижу на модеме)! Иногда взять с пола ткань это меньше секунды а иногда так лаганет что и в 5 секунд не вложишься, поэтому я всегда делаю интересную проверку вот так все выглядит на инжекте:

Code: Select all

if UO.Count ("0x1BDD") < 1 and UO.Count ("0x1BD7")< 1 then
tmp=UO.Count("0x1BDD")
i=0
UO.findtype (0x1BDD, -1, sunduk)
UO.Exec ("grab 10 finditem")
while tmp==UO.Count("0x1BDD") and i < 100
i=i+1
wait (500)
wend
wait (1500)
endif
в частности в этой части макроса идет проверка на наличие в бекпаке досок или же логов, если ненайдено ни одного лога и доски тогда с сундука берется 10 логов и цыкл вайл ждет появления логов в бекпаке, пока логи не появятся цыкл будет удерживать макрос на месте и тем самым проверять наличие логов каждые пол секунды! ну и что бы избавится от случайного глюка с невозможностью захвата логов с сундука я продублировал все с помощью переменной I которая внутри удерживающего цыкла постоянно плюсуется и тем самым можно выставить какой самый большой лаг по времени она будет ждать а потом переброску логов просто проигнорирует!
ТАк вот суть моего вопроса в следующем, кто сможет перевести этот фрагмент под стелс? а то сколько я не пробовал у меня возникает одна и таже проблема, подряд запускаю тры раза макрос и трижды он выдает по разному результат :( то он находит в бекпаке логи хотя их там нету, то он ненаходит логи в бекпаке хотя они там есть, в общем запустив пять раз один и тот же макрос у меня получается вечно другой результат хотя код макроса неменяю :( Если несложно помогите! Пробовал использовать Stealth_v0.95Full
на старых версиях непробовал! [/code]
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

давно с этой фигнёй мучаюсь :)
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Warrior, в этом скрипте похожее уже реализовано. Смотри, разберайся. Будут вопросы - поможем.
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

ParadoX wrote:давно с этой фигнёй мучаюсь :)
С этой фигней это какой?
не с тем ли что стелс постоянно выдает разные данные по поиску вещей при одном и том же исходном коде макроса? :)

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

Code: Select all

until (Now > stime + (1.0/1440)) or (c >= 0) or (FindType(FeathersType,backpack) <> 0); 
вот в этой строчке все понятно, проверка по времени, проверка по журналу и проверка по наличию ресурсов (мне понравилась манера автора писать код) но вот почему разнца во времени указана не просто в милисекундах а вот такой формулой: 1.0/1440
кто знает подскажите? в чем фишка такой записи времени? тут что более наглядно должно отображатся время?
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Warrior wrote:

Code: Select all

until (Now > stime + (1.0/1440)) or (c >= 0) or (FindType(FeathersType,backpack) <> 0); 
вот в этой строчке все понятно, проверка по времени, проверка по журналу и проверка по наличию ресурсов (мне понравилась манера автора писать код) но вот почему разнца во времени указана не просто в милисекундах а вот такой формулой: 1.0/1440
кто знает подскажите? в чем фишка такой записи времени? тут что более наглядно должно отображатся время?
Единица времени - сутки.
Поэтому, если тебе надо получить минуты, то это будет 1 / (60 * 24).
А так как TDateTime - это формат с плавающей точкой, то тебе надо еще компилятору обьяснить, что ты хочешь получить вещественное число а не целое.
Поэтому вместо 1 / .... мы пишем 1.0 / ...
Это такая особенность компилятора.
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

Miralex wrote:
Warrior wrote:

Code: Select all

until (Now > stime + (1.0/1440)) or (c >= 0) or (FindType(FeathersType,backpack) <> 0); 
вот в этой строчке все понятно, проверка по времени, проверка по журналу и проверка по наличию ресурсов (мне понравилась манера автора писать код) но вот почему разнца во времени указана не просто в милисекундах а вот такой формулой: 1.0/1440
кто знает подскажите? в чем фишка такой записи времени? тут что более наглядно должно отображатся время?
Единица времени - сутки.
Поэтому, если тебе надо получить минуты, то это будет 1 / (60 * 24).
А так как TDateTime - это формат с плавающей точкой, то тебе надо еще компилятору обьяснить, что ты хочешь получить вещественное число а не целое.
Поэтому вместо 1 / .... мы пишем 1.0 / ...
Это такая особенность компилятора.
Тоесть ты хочешь сказать что если я захочу не минуты а секунды тогда мне надо будет вместо 1440 там поставить 86400 ?
и если мне надо будет не 1-у секунду а например 30 тогда мне надо будет формулу записать вот так: 30.0/86400
я правильно все понял? или что то перепутал? потому что это серьезная фигня! Недумал что тут все так запущено :) в инжекте за номинальную единицу берется милисекунда точно так же и в ИЗИУО ! думал и тут так! но видать ошибся!

п.с. Суть незабыл! А регистр кода имеет значение? или пофигу?

п.с.с. Ну и совсем напоследок что бы уточнить для себя! Представим себе ситуацию когда я в блокноте открыл сам макрос и правлю код макроса и после каждого изменения сохраняю, а в это время переключаюсь на стелс и запускаю макрос. Так вот меня интересует этот макрос будет нормально работать со всеми изменениями ? или же мне каждый раз надо будет заново открывать макрос? и вообще ненадо ли делать какой то предварительной процедуры компиляции перед тем как запускать макрос? а то я сто то совсем запутался с этой прогой! :(
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Тоесть ты хочешь сказать что если я захочу не минуты а секунды тогда мне надо будет вместо 1440 там поставить 86400 ?
и если мне надо будет не 1-у секунду а например 30 тогда мне надо будет формулу записать вот так: 30.0/86400
я правильно все понял? или что то перепутал?
Да, но а зачем тебе TDateTime для 30 сек? используй просто wait(30000); Есть еще Timer ...
А регистр кода имеет значение?
Нет, за исключением поиска строк в журнале. Там регистр имеет значение.
Так вот меня интересует этот макрос будет нормально работать со всеми изменениями?
Да. Нет необходимости при изменении скрипта каждый раз грузить его заново. Достаточно просто нажать "старт".
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

Ну все! Я дошел до последней точки отчаяния!
Я уже все перепробовал, менял макрос как только возможно и всеравно он не рнаботает! вот последняя модификация

Code: Select all

program scroll;
var i :integer;
begin
findtype ($175D, backpack);
if (FindFullQuantity < 1) then 
	begin
	i :=0;
	Grab(FindType($175D, ground), 10);
	while (i<100) and (findquantity < 1) do
		begin
		wait (500);
		i := i + 1;
		findtype ($175D, backpack);
		end;
	end;
wait(2000);
end;
end.
подскажите что тут нетак и почему он непашет?
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Пробуй так:

Code: Select all

program scroll; 
var i :integer; 
begin 
findtype ($175D, backpack); 
if (FindFullQuantity < 1) then 
   begin 
   i :=0; 
   Grab(FindType($175D, ground), 10); 
   findtype ($175D, backpack);
   while (i<100) and (FindFullQuantity < 1) do 
      begin 
      wait (500); 
      i := i + 1; 
      findtype ($175D, backpack); 
      end; 
   end; 
wait(2000); 
end; 
end.

Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

ну я вообще разочаровался! буду сидеть и ждать другой версии, с этой версией стелса я дружить отказиваюсь!
мало того что все вышеуказанное незаработало так я уже даже упросченный макрос типа:

Code: Select all

program scroll; 
begin 
   Grab(FindType($175D, ground), 10); 
end.
и то немогу запустить больше раза :(
первый раз запустил и оно грабнуло 10 тканей! а повторный запуск макроса ничего не дал :(
только после реконекта клиента я запустил макрос и опять оно грабнуло 10 ткани! в общейм я никак немогу понять принцып действия данной проги!

п.с. Пока посижу и посмотрю разговоры на форуме, может кто скажет в чем тут грабли и я смогу всетаки пользоватся этой прогой, а то задумка крутая а вот реализация почему то храмает :( может конечно у меня что то неполучается но вот что именно я пока немогу выяснить!

п.с.с. 2Miralex код макроса что ты дал тоже несработал! Да и по сути он отличался от моего только тем что проверка на появление ткани проверялась другой командой, но это никак не повлияло на то что вообще даже и не пытался взять ткань с пола :(
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Похоже, что у тебя FindType не видит вещи, потому что она не попадает в диапазон FindDistance и FindVertical.
Сравни свои координаты и координаты вещи.

Также возможен варинт, что твой шард например не позволяет переносить вещи, если "заняты" руки.


P.S. чудес не бывает :-)
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

Miralex wrote:Похоже, что у тебя FindType не видит вещи, потому что она не попадает в диапазон FindDistance и FindVertical.
Сравни свои координаты и координаты вещи.

Также возможен варинт, что твой шард например не позволяет переносить вещи, если "заняты" руки.


P.S. чудес не бывает :-)
Ну что же! судя по ответам на мои вопросы я так понимаю что меня утт приняли за начинающего ультимиста который в своей жизни ничем кроме лупа не пользовался, поэтому придется развеять такое мнение :)
во первых в описании команд написано что:
FindDistance : Integer; - Радиус поиска обьектов на земле. (по умолчанию = 2)
FindVertical : Integer; - Диапазон разброса по вертикали. (по умолчанию = 6)
поэтому я ложил вещи там что бы они лежали в пределах досягаемости чара, а в частности прямо под ногами!
вот координаты моего чара (координаты взяты с данных стелса)
Х=730 Y=858 Z=7
а вот данные о вещи лежащей под ногами (данные опять же взяты с проги стелс из раздела ВОРЛД)
ID:0x4001E589
Type: 0x175D
Quantity: 1020
Х=730 Y=858 Z=7
тоесть как видно все должно быть в пределах досягаемости!

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

п.с. Я даже именял макрос таким образом что в начале макроса дописывал
FindDistance:=2
FindVertical:=6
типа для дублирования если вдруг эти данные по умолчанию изменены !
Какие будут дальнейшие предложения по поиску ошибки ? А то я уже даже и незнаю куда ломится и где ковырять ! Может есть какие то глючи связанные с вердатами? или там может с ОС которая стоит на машине? у меня ХР Номе СП2 и вердата с Андера, хотя даже и незнаю причем тут вердата к стелсу :)
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Давай чара (нового или этого) с "этой" ситуацией и я проверю.
Пиши в приват.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

может проблема в том что у твоего чара под ногами больше одной кучи итема искомого типа? если да, то тут грех на стелс обижаться )
естественно он не будет находить файндтупом одну и ту же кучу, а из за этого глюки, просто нада модернизировать скрипт, а других проблем я в этом макросе не вижу
Warrior
Neophyte
Neophyte
Posts: 10
Joined: 05.12.2005 0:47

Post by Warrior »

Alex wrote:может проблема в том что у твоего чара под ногами больше одной кучи итема искомого типа? если да, то тут грех на стелс обижаться )
естественно он не будет находить файндтупом одну и ту же кучу, а из за этого глюки, просто нада модернизировать скрипт, а других проблем я в этом макросе не вижу
Как я уже писал макросы пишу не первый день :)
И мой любимый домик для макросов это пустой домик в котором стоит всего один сундук в котором и лежат все русурсы! Вот инжект у меня с этого "чудо" сундука все и вытаскивает что надо! А поскольку стелс неможет шарить по сундукам я под ноги кинул одну стопку ткани для проверки (в предыдущей месаге я написал даже количество ткани в этой стопке 1020) и больше на полу этого домика ничего вообще нету! Так что вариант с нахождением иной стопки с тканью просто отпадает!
Post Reply