FindItem() - даёшь функцию!
Moderators: Murderator+, Murderator
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
FindItem() - даёшь функцию!
Появилась хорошая идея - сделай функцию FindItem(), мы её вызываем, а она возвращает поочерёдно все найденные предметы последним FindType().
Зачем? А чтобы не игнорить - в скриптах на варку, просто незаменимая вещь!
Это лёгкий вариант, грамотный вариант - сделать, чтобы FindType() возвращал идентификатор поиска, который задавать функции FindItem(), чтобы та брала результаты нужного поиска.
Создание такой функции (по второму варианту) решит все проблемы совместного использования функций поиска вещей, а главное - это никак не отразиться на уже существующих скриптах.
PS: Впринципе, можно продолжать извращаться - но мне надоело, хотя я с ультимой и завязал.
Зачем? А чтобы не игнорить - в скриптах на варку, просто незаменимая вещь!
Это лёгкий вариант, грамотный вариант - сделать, чтобы FindType() возвращал идентификатор поиска, который задавать функции FindItem(), чтобы та брала результаты нужного поиска.
Создание такой функции (по второму варианту) решит все проблемы совместного использования функций поиска вещей, а главное - это никак не отразиться на уже существующих скриптах.
PS: Впринципе, можно продолжать извращаться - но мне надоело, хотя я с ультимой и завязал.
Last edited by Destruction on 2006-04-15 22:54:21, edited 1 time in total.
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
-
- Expert!
- Posts: 1032
- Joined: 2006-02-25 21:48:38
Destruction wrote:Хз, твоего топика в этом разделе не видел и тем более предложений, как решить данную проблему.
Ну да, сорри, не на этом форуме постил



ВОт она: http://pinject.darkuo.ru/forum/viewtopic.php?t=9
-
- Expert!
- Posts: 1032
- Joined: 2006-02-25 21:48:38
Destruction wrote:PS: Я недавно постил несколько функций для создания псевдо-массивов. Я думаю те функции + глобальные переменные = скриптовое решение проблемы. Ща попробую.
Это ты про тему "глобальных" массивов?
Пока что возникла только одна мысль: а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Edred wrote:Der wrote:а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?
Дык голова скриптописателю нужна не только чтобы в нее есть.
Верно мыслишь, я не глупенький - создам еще один массив, в который буду писать идентификаторы

-
- Expert!
- Posts: 1032
- Joined: 2006-02-25 21:48:38
Edred wrote:Der wrote:а что если одновременно будут запущены 2 скрипта... не получится ли так, что они будут конфликтовать и пытатся писать в одиндаковые глоб. переменные?
Дык голова скриптописателю нужна не только чтобы в нее есть.
Во, точняк...


Кстати, вопрос у меня есть: а почему бы не сделать так чтобы массивы можно было до сабов определять а то неудобно как-то...
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
-
- Expert!
- Posts: 1032
- Joined: 2006-02-25 21:48:38
Destruction wrote:Проверил. Игнорить придёться, и если вдруг в одно время будет вызвано сразу два поиска - то выдет дребедень. Шанс низкий - но есть.
Лучшеб шанс был нулевой, т.к. геммор связанный с использованием промежуточных перменных несравним с тем геммором который будет есль случится дребедень

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

-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Собственно то, что получилось:
Описание:
number FindType(string)
Передаётся один параметр - в нём всё указываем, кроме findtype (как при обычном uo.exec('findtype')).
Возвращает идентификатор произведённого поиска.
number FindCount(number)
Передаём один параметр - идентификатор нужного поиска.
Получаем количество найденных элементов.
string FindItem(number,number)
Передаём два параметра: 1 - номер найденного предмета, 2 - идентификатор поиска.
Получаем ID найденного предмета.
1. В начало скрипта пишем такое:
2. Выполняем такой скрипт:
Если во время выполнения скрипта Injection сообщил об отсутствии директории EasyUO в реестре - создайте директорию и выполните скрипт еще раз.
3. Если Вы хотите, чтобы результаты поисков были доступны в дальнейшем - пропустите этот пункт.
Переименуйте функцию из п.2 в "autostart" и включите галочку "Autostart" в закладке Injection Main, в таком случае информация о поиске после перезапуска Injection будет перезаписываться.
Больше для использования скриптов ничего не надо, сами скрипты:
Пример, с использованием этих скриптов:
Скрипт найдёт все вещи в бекпеке и запишет информацию в текстовое окно.
PS: Для тех, кто любит чистить реестр, путь в реестре: HKEY_CURRENT_USER\Software\EasyUO
Описание:
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.
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Der wrote:Кстати, вопрос у меня есть: а почему бы не сделать так чтобы массивы можно было до сабов определять а то неудобно как-то...
Я думаю, тебе может помочь вот такая "фича" (кстати, я в своих скриптах это использую активно):
DIM массив[размер], массив[размер]...
- задание массива. Обращение к элементам: имя_массива[номер_элемента]. Нельзя писать имя_массива1 = имя_массива2 для присвоения содержимого одного массива другому.
Обращение к отдельным буквам в строке - так же, как к эл-там массива:
переменная[номер_буквы]. Номер - от 0, в случае выхода за конец строки - ошибка.
Замечания по поводу массивов
Массивы можно передавать в качестве параметров функциям. При этом передается САМ массив, а не его копия!!! Т.е. все действия внутри функции над элементами массива будут производиться над первоначальным массивом. Возвращать массивы из функций НЕЛЬЗЯ!!!
Destruction wrote:а реестр - очень важно, хранение результатов пока силой не убьют. Это будет многим полезно.
Как-нить сделай чистку реестра подходящей утилей (только не нортоном), потом дефрагментируй его - и, увидев насколько у тебя быстрее начнут работать винды, ты быстренько отучишься забивать реестр всякой дрянью...