FindItem() - даёшь функцию!

Requests of new features and reports on bugs needs to be fixed

Moderators: Murderator+, Murderator

Как вам идея?

Отлично - давно пора!
7
58%
Данунах, и так неплохо..
1
8%
Эмм, а я и непонял, о чём тут речь..
4
33%
 
Total votes: 12

Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

FindItem() - даёшь функцию!

Post by Destruction »

Появилась хорошая идея - сделай функцию FindItem(), мы её вызываем, а она возвращает поочерёдно все найденные предметы последним FindType().

Зачем? А чтобы не игнорить - в скриптах на варку, просто незаменимая вещь!

Это лёгкий вариант, грамотный вариант - сделать, чтобы FindType() возвращал идентификатор поиска, который задавать функции FindItem(), чтобы та брала результаты нужного поиска.

Создание такой функции (по второму варианту) решит все проблемы совместного использования функций поиска вещей, а главное - это никак не отразиться на уже существующих скриптах.

PS: Впринципе, можно продолжать извращаться - но мне надоело, хотя я с ультимой и завязал.
Last edited by Destruction on 2006-04-15 22:54:21, edited 1 time in total.
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Кул... :)
8) 8) 8)
Меня услышали :)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Der wrote:Кул... :)
8) 8) 8)
Меня услышали :)

Хз, твоего топика в этом разделе не видел и тем более предложений, как решить данную проблему.

PS: Я недавно постил несколько функций для создания псевдо-массивов. Я думаю те функции + глобальные переменные = скриптовое решение проблемы. Ща попробую.
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Destruction wrote:Хз, твоего топика в этом разделе не видел и тем более предложений, как решить данную проблему.


Ну да, сорри, не на этом форуме постил :oops: :oops: :oops:

ВОт она: http://pinject.darkuo.ru/forum/viewtopic.php?t=9
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Destruction wrote:PS: Я недавно постил несколько функций для создания псевдо-массивов. Я думаю те функции + глобальные переменные = скриптовое решение проблемы. Ща попробую.


Это ты про тему "глобальных" массивов?

Пока что возникла только одна мысль: а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Der wrote:а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?


Дык голова скриптописателю нужна не только чтобы в нее есть.
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Edred wrote:
Der wrote:а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?


Дык голова скриптописателю нужна не только чтобы в нее есть.

Верно мыслишь, я не глупенький - создам еще один массив, в который буду писать идентификаторы :-)
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Edred wrote:
Der wrote:а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?


Дык голова скриптописателю нужна не только чтобы в нее есть.


Во, точняк... :) ...а я только про шапку думал :) тогда да, всё будит окк...
Кстати, вопрос у меня есть: а почему бы не сделать так чтобы массивы можно было до сабов определять а то неудобно как-то...
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Ну так делайте кто мешает?;)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Grin wrote:Ну так делайте кто мешает?;)

Так понимаешь - игнорить всё равно придёться.

Надо кое, что проверить.

Проверил. Игнорить придёться, и если вдруг в одно время будет вызвано сразу два поиска - то выдет дребедень. Шанс низкий - но есть.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

и дураку ясно что нужно игнорить;)
функция поиска останавлимвается на первом совпадении а анадо что бы было продолжение ;)
выход: калечить инжект;)
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Destruction wrote:Проверил. Игнорить придёться, и если вдруг в одно время будет вызвано сразу два поиска - то выдет дребедень. Шанс низкий - но есть.


Лучшеб шанс был нулевой, т.к. геммор связанный с использованием промежуточных перменных несравним с тем геммором который будет есль случится дребедень :(
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Der wrote:
Destruction wrote:Проверил. Игнорить придёться, и если вдруг в одно время будет вызвано сразу два поиска - то выдет дребедень. Шанс низкий - но есть.


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

Поверь, шана достаточно мал, что я врубил хоумсфер и отлаживаю скрипт. 8)
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

шанс мал?;)) Да стой скоростью с которой файндтайп обрабатывает всего 50 элементов%)
Шанс пересечься 0 если функция вызывается в одном потоке или хотябы последовательно... сделать синхронизацию как нех делать%)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Grin wrote:шанс мал?;)) Да стой скоростью с которой файндтайп обрабатывает всего 50 элементов%)
Шанс пересечься 0 если функция вызывается в одном потоке или хотябы последовательно... сделать синхронизацию как нех делать%)

Да мы и так синхронизируем -)

я уже FindType() написал, остались мелочи :-)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Собственно то, что получилось:

Описание:
number FindType(string)
Передаётся один параметр - в нём всё указываем, кроме findtype (как при обычном uo.exec('findtype')).
Возвращает идентификатор произведённого поиска.

number FindCount(number)
Передаём один параметр - идентификатор нужного поиска.
Получаем количество найденных элементов.

string FindItem(number,number)
Передаём два параметра: 1 - номер найденного предмета, 2 - идентификатор поиска.
Получаем ID найденного предмета.

1. В начало скрипта пишем такое:

Code: Select all

var first_mem = 100000 ; стартовое число, для хранения результатов поиска.


2. Выполняем такой скрипт:

Code: Select all

Sub main()
uo.setEasyUO(first_mem,"0")
endsub

Если во время выполнения скрипта Injection сообщил об отсутствии директории EasyUO в реестре - создайте директорию и выполните скрипт еще раз.

3. Если Вы хотите, чтобы результаты поисков были доступны в дальнейшем - пропустите этот пункт.
Переименуйте функцию из п.2 в "autostart" и включите галочку "Autostart" в закладке Injection Main, в таком случае информация о поиске после перезапуска Injection будет перезаписываться.

Больше для использования скриптов ничего не надо, сами скрипты:

Code: Select all

Sub FindCount(tar)
return strlen(uo.getEasyUO(tar))/10
endsub

Sub FindItem(num,tar)
return MID(uo.getEasyUO(tar),num*10,10)
endsub

Sub FindType(find)
while uo.getEasyUO(first_mem-1) == "1"
wait(10)
wend
uo.setEasyUO(first_mem-1,"1")
var i, tmp=""
uo.exec("findtype "+find)
if uo.findcount() then
repeat
tmp = tmp + uo.getSerial("finditem")
uo.ignore("finditem")
uo.exec("findtype "+find)
until not uo.findcount()
for i=0 to strlen(tmp)/10-1
uo.ignore(MID(tmp,i*10,10),"off")
next
i = val(uo.getEasyUO(first_mem))+first_mem+1
uo.setEasyUO(i,tmp)
uo.setEasyUO(first_mem,str(val(uo.getEasyUO(first_mem))+1))
return i
else
return false
endif
uo.setEasyUO(first_mem-1,"0")
endsub


Пример, с использованием этих скриптов:

Code: Select all

sub main()
var i
var s = FindType("'-1' '-1' 'backpack'")
if FindCount(s) then
for i=0 to FindCount(s)-1
uo.textprint(FindItem(i,s))
next
endif
endsub

Скрипт найдёт все вещи в бекпеке и запишет информацию в текстовое окно.

PS: Для тех, кто любит чистить реестр, путь в реестре: HKEY_CURRENT_USER\Software\EasyUO
Last edited by Destruction on 2006-04-26 10:23:51, edited 3 times in total.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

"Убей свой реестр" :twisted:
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Grin wrote:"Убей свой реестр" :twisted:

Гыгы, шустро ты успел.

В скрипте ошибка была - я её правил, а реестр - очень важно, хранение результатов пока силой не убьют. Это будет многим полезно.
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Der wrote:Кстати, вопрос у меня есть: а почему бы не сделать так чтобы массивы можно было до сабов определять а то неудобно как-то...


Я думаю, тебе может помочь вот такая "фича" (кстати, я в своих скриптах это использую активно):

DIM массив[размер], массив[размер]...

- задание массива. Обращение к элементам: имя_массива[номер_элемента]. Нельзя писать имя_массива1 = имя_массива2 для присвоения содержимого одного массива другому.
Обращение к отдельным буквам в строке - так же, как к эл-там массива:
переменная[номер_буквы]. Номер - от 0, в случае выхода за конец строки - ошибка.

Замечания по поводу массивов
Массивы можно передавать в качестве параметров функциям. При этом передается САМ массив, а не его копия!!! Т.е. все действия внутри функции над элементами массива будут производиться над первоначальным массивом. Возвращать массивы из функций НЕЛЬЗЯ!!!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Destruction wrote:а реестр - очень важно, хранение результатов пока силой не убьют. Это будет многим полезно.


Как-нить сделай чистку реестра подходящей утилей (только не нортоном), потом дефрагментируй его - и, увидев насколько у тебя быстрее начнут работать винды, ты быстренько отучишься забивать реестр всякой дрянью...
Post Reply