Ищу обучающие ресурсы скриптингу на Yoko Injection ! |
Ищу обучающие ресурсы скриптингу на Yoko Injection ! |
2 февраля 2017 10:24
Сообщение #41
|
|
Engelos, Используй в качестве чеклага это: if UO.ReceiveObjectName('backpack', 20000) then ; ответ от сервера получен else ; не дождались ответа end if Описание команд инжекта скачать Injection.chm |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
2 февраля 2017 10:29
Сообщение #42
|
Может забить? ;) |
|
|
|
2 февраля 2017 10:31
Сообщение #43
|
|
Цитата: Engelos В турториале этого нету, нашел несколько вариантов в гугле с обьяснениями, но не тем не менее не понял как его использовать. Перед каждым действием пихать что ли эту проверку ? Лучше скинь пример, где ты хочешь использовать чеклаг, в большинстве случаев можно обойтись и без него. |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
2 февраля 2017 13:37
Сообщение #44
|
Кода еще нет, на данный момент набрасываю псевдо код паралельно пытаясь разобраться, как заскриптить ту или иную идею. Скрипт на скупку определнных регов. В паке есть 1 руна к банку и сумка с рунами к вендорам. Начинаем от банка. sub Test() Создаем массив с ID нужных нам вендоров. while (true) - бесконченый цикл, повторяется через определнный срок (10 минут примерно, еще не тестил сколько нужно). функция 1 - checkRegs(n) (внутри через if проверят реги на рекол, если меньше n - добираем из банка командой grab) Далее цикл While (условие выхода - пустой finditem) находим любую руну из сумки функция 2 - рекол по этой руне, там же проверка зарядов, в случае необходимости марк функция 3 - используем гамп, и в цикле перебираем id всех вендоров из нашего списка. Вначале каждой итерации очищаем журнал. Если журнал выдает "You can't see the target" то wait (50), если нет то юзаем ,buy buylist, ждем и делаем break. функция 4 - проверка на вес и на реги. Если больше условного или регов меньше n - испльзуем 5 функцию (рекол к банку, полная выгрузка и загрузка части регов не реколл) Возможно стоит обьденить с первой функций, не суть. Игнорим найденную руну. wend В итоге если по время работы скрипта, особенно при переборе вендоров произойдет сейв будет сбой. П.С. Где в этом турториале искать checklag ? Я октрываю колонку "Все по алфавиту" и делаю поиск по нужной мне фразе или ее части. Такого там нет. Что я делаю не так ? |
|
|
|
2 февраля 2017 15:30
Сообщение #45
|
|
Engelos, Массив ID вендоров не нужен, достаточно создать массив с рунами по вендорам. В последних версиях инжекта появилась возможность создавать динамические массивы, пример: dim Runes[1] . . . if UO.FindType(0x1F14, -1, Container) <> '' then Runes = SetArrayLength(Runes, UO.FindCount()) for Index = 0 to UO.FindCount() - 1 Runes[Index] = UO.FindItem(Index) next end if . . . Алгоритм скупщика: - открываем банк Sub OpenBank() UO.Msg('Bank Guards') return UO.WaitingForJournalText(Now(), SaveDelay, 'Bank Box') end sub - открываем контейнер в банке Sub OpenBox(Container) UO.UseObject(Container) return UO.ReceiveObjectName(Container, SaveDelay) end sub тут два примера гарантированного открытия, 1й проверяет приход сообщеня в журнал, 2й проверяет приход имени от объекта, в данном случае контейнера (аналог чеклага) - выгружаем скупленные предметы - добираем реагенты - если массив рун пуст, то записываем в него ИД рун по вендорам пример в самом верху поста - извлекаем нужную руну из массива RuneVendor = Runes[Index], увеличиваем индекс массива рун Index = Index + 1 - реколимся по найденной руне (завершение рекола можно отследить по изменению координат X,Y персонажа) - делаем скупку по байлисту UO.Say(',buy ' + BuyList), ждем некоторое время - рекол к банку - переход к пункту 1 + ну естественно должны быть различные проверки на ману, реги, наличие рун, зарядов на рунах и прочее... Цитата: Engelos П.С. Где в этом турториале искать checklag ? Чеклаг это самописный макрос, алгоритм такой, тыкает по бакпаку и ждет прихода сообщения в журнал, в последних версиях инжекта появилась команда ReceiveObjectName, вот ее и используй в качестве чеклага. |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
5 февраля 2017 09:48
Сообщение #46
|
Спасибо. Посредний пост очень помог, скрипт работает, осталось отладить некоторые детали. Есть пара вопросов. На данный момент имею достаточно примитивный, на рабочий блок покупки. Проблема лишь в одном дефекте, если реги скупаются успешно - то он реколиться сразу, если же нет - то он ждет SaveLag время и только потом летит. Я подозреваю, что все дело в источнике сообщения для журнала. Ибо фразу 'Here you are' говорит сам вендор, а вот 'No items bought.' выдает в журнал сам инжект. Как это можно пофиксить ? Sub Buy() uo.deletejournal() uo.waitgump(3) UO.Say(',buy ' + BuyList) return UO.WaitingForJournalText(Now(), SaveLag, 'Here you are|No items bought.') end sub И второй вопрос, даже скорее уточнение. Приведу условных пример для ястности. Sub Test() var runeType = 0x1F14 var MandrakeRegType = 0x0F86 UO.findtype(runeType, -1, -1) RuneBank = finditem UO.findtype(MandrakeRegType, -1, -1) UO.Cast('Recall', RuneBank) end sub Я пологал, что в этом примере переменная RuneBank является по сути ссылкой на обьект, но после того как код отрабоает я попытаюсь портнуться на Mandrake Root реагент, а не на руну. Как это получается ? Ведь если RuneBank это указать на обьект, то переменная не должна меняться, если я делаю еще один поиск findtype. В общем в коде эту проблему я обошел ,просто хочеться понять принцип работы. Спасибо еще раз ! |
|
|
|
5 февраля 2017 10:43
Сообщение #47
|
|
Engelos, Вместо SaveLag поставь задержку в 3000, этого будет достаточно, если в этот момент будет сейв, то скрипт уйдет в ожидание рекола и после завершение сейва продолжится. В инжекте нет указателей. В данном случае в RuneBank попадает ИД руны, строка вида '0x12345678' |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
5 февраля 2017 11:04
Сообщение #48
|
Спасибо, про задержу понял, а вот по второму вопросу - не совсем. Еще раз приведу обновленный пример. Sub Test() var runeType = 0x1F14 var MandrakeRegType = 0x0F86 UO.findtype(runeType, -1, -1) RuneBank = finditem UO.Cast('Recall', RuneBank); Первый каст UO.findtype(MandrakeRegType, -1, -1) UO.Cast('Recall', RuneBank); Второй каст end sub В первом реколе все хорошо - мы летим на руну. Во втором же, я почему то пытаюсь лететь на MandrakeRoot регаент. finditem указывает на mandrake, но, я то реколюсь по переменной RuneBank, которой уже присвоил id руны. |
|
|
|
5 февраля 2017 11:29
Сообщение #49
|
|
Engelos, Работать вообще не должно, здесь ошибка: RuneBank = finditem правильно: RuneBank = UO.GetSerial('finditem') можно так: RuneBank = UO.FindType(0x1F14, -1, 'backpack') |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
12 февраля 2017 16:18
Сообщение #50
|
Как увеличить шрифт в редакторе кода самого инжекта ? |
|
|
|
12 февраля 2017 17:43
Сообщение #51
|
|
Используй редактор Notepad++, файл раскраски под инжект лежит в архиве с автолоадом. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
12 февраля 2017 18:29
Сообщение #52
|
Понапокупали себе 4K. Теперь мучаются |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
19 февраля 2017 17:34
Сообщение #53
|
Как из одного макроса запустить другой, паралельный (что бы выполннялись не по очереди, а одновременно). На данный момент я пользуюсь формулой UO.Say(',exec ДРУГОЙ МАКРОС'). Есть ли более адекватный способ ? |
|
|
|
19 февраля 2017 18:06
Сообщение #54
|
|
Engelos, UO.Exec('ДРУГОЙ МАКРОС') |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
19 февраля 2017 22:12
Сообщение #55
|
if UO.Weight > (UO.STR * 3.6) then UO.CharPrint('self', 0x0026, '[Tracking]:WEIGHTLIMIT!') UO.Exec('terminate Start') PlusGlob() TeleportHome() MoveInBank() wait (5000) UO.Exec('Start') end if Не работает. Пишет нет такой команнды как Старт. Start - это название того, с чего мой скрипт начинается. Если пользуюсь uo.say(',exec Start') - то работает. |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
19 февраля 2017 23:38
Сообщение #56
|
Попробуй вместо UO.Exec('Start') использовать или Start() либо UO.Exec('exec Start') |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
20 февраля 2017 01:54
Сообщение #57
|
Если я напишу Start(), то я из текущей функции прыгну в первую и не завершу эту. В данном примере оно годится, ибо вызов стоит в конце, но в других не подойдет. Второй вариант тоже не работает :( Я бы пользовался вариантом через uo.say(',exec Method') и не жаловался, но оно может глюкнуть если случайно нажать любую клавишу на кливиатуре. Ибо оно выведет эту клавишу + ,exec Method, получиться что то вроде d,exec Method и ошибка ) |
|
|
|
20 февраля 2017 02:03
Сообщение #58
|
|
Цитата: Engelos Если пользуюсь uo.say(',exec Start') - то работает. Цитата: Mirage UO.Exec('exec Start') |
|
|
|
Сообщений: 305 Рег. 19.12.2016 |
20 февраля 2017 03:22
Сообщение #59
|
UO.Exec('exec Start') - действительно получилось. Писал без кавычек, когда пробовал тот же вариант от Миража, вот жеж... Спасибо ! |
|
|
|
Сообщений: 3319 Рег. 19.11.2013 |
20 февраля 2017 08:39
Сообщение #60
|
Зачем параллельно запущенные функции держать если достаточно после удачной попытки добычи простую проверку на if вес вставить? Можно запихнуть вот такую штуку подрихтовав под себя: Sub CheckAll() UO.Set('quiet','1') if UO.WarMode() then UO.WarMode(false) wait(100) end if uo.waitmenu('Tracking', 'Players') if uo.WaitingForMenu(250,1,0,'Tracking','Tracking') then uo.charprint('self', printcolour, 'ЧЕЛОВЕК') Gong(1) RuneRecall(Rune) endif if UO.InJournal('is attacking you') then Enemy = UO.JournalSerial(UO.InJournal("is attacking you")-1) DeleteJournal('is attacking you') uo.charprint('self', printcolour, 'Атака!') Gong(2) if UO.Count(Invis_T,Invis_C) then uo.Usetype( Invis_T,Invis_C ) endif wait(delay2) if UO.Count(weapon ) then uo.Usetype( weapon ) endif wait(delay2) if UO.Count(weapon ) then uo.Usetype( shield ) endif wait(delay2) UO.Attack( Enemy ) LastTimer=UO.Timer() repeat wait( delay2 ) until uo.dead() or uo.GetX(Enemy)==0 || UO.Timer()>LastTimer+delay3 uo.Warmode(0) wait(delay2) end if If UO.Life < Uo.Str/2 then UO.Msg('.bandageself') wait( 2000 ) endif If UO.Weight > MaxVes Then UO.Set('quiet','0') uo.charprint('self', printcolour, 'Перегруз!') RuneRecall(Rune) endif if UO.WarMode() then UO.WarMode(false) wait(100) end if end sub А еще 15 инжа умеет не только вырубать скрипты но и ставить их на паузу - если решишь все таки параллельными потоками пользоваться. Можно продолжать "с места разрыва". И Ваапще. Я свой почти готовый скрипт выкладывал в общаг (туда только ходилку или леталку дописать надо, да пару функций обновить под новый инжект). И с ходилками/леталками делал паре ребят. Зомбик показывай свой кароче |
|
|
|
Сейчас: 23 ноября 2024 13:42 |