Ищу обучающие ресурсы скриптингу на Yoko Injection !
Маршал (73319389)14 летИнквизитор
Inquisitor
Сообщений: 1693
Рег. 19.06.2010
22 января 2017 09:31
Сообщение #21
Передать можно через глобальную переменную, пример:
; запись в глобальную переменную 'Count' строки со значением '20'
sub test1()
  UO.SetGlobal('Count', '20')
end sub

; внешняя передача параметра в макрос
sub test2(Name, Value)
  UO.SetGlobal(Name, str(Value))
end sub

вызов:
  ,exec test2#'Count'#20

; извлечение значения из глобальной переменной
sub test3()
var Count = val(UO.GetGlobal('Count'))
  UO.Print('значение глобальной переменной = ' + UO.GetGlobal('Count'))
  UO.Print('значение числовой переменной =  ' + str(Count))
end sub
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
22 января 2017 10:35
Сообщение #22
Спасибо !
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
23 января 2017 09:40
Сообщение #23
Как принудительно указать нужный предмет для крафта. У меня почему то ищет по первому совпадению части строки и не ждет полного.
В этом случае почему то крафтит lesser potion...

UO.WaitMenu('What','Mana Refresh Potion')
Маршал (73319389)14 летИнквизитор
Inquisitor
Сообщений: 1693
Рег. 19.06.2010
23 января 2017 10:19
Сообщение #24
В названии можно указать кол-во предметов, требуемое для изготовления. Пример можешь посмотреть ТУТ
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
23 января 2017 11:22
Сообщение #25
Нашел твой пример
UO.WaitMenu('Blacksmithing', 'Weapon', 'Weapon', 'Fencing', 'Fencing', 'Spear (32')
, но совершенно не могу понять синтаксис. На мой предмет нужно 12 логов и 4 nails. Пробую по разному:

UO.WaitMenu('Carpentry','Furniture','Furniture', 'Chairs', 'Chairs', 'Chair(12'))
UO.WaitMenu('Carpentry','Furniture','Furniture', 'Chairs', 'Chairs', 'Chair(12)')


И множество других вариантов. Код парсится, но ничего не происходит.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
23 января 2017 12:10
Сообщение #26
Engelos,
Уже несколько раз возникал вопрос :)
Цифрами можно указывать позицию.

UO.WaitMenu('What','(3)')


ps
Spear (32 <--- это начало название из меню.
Spear (32 iron ingot) например. Следовательно закрывающая скобка не нужна.

'Spear (32'
Маршал (73319389)14 летИнквизитор
Inquisitor
Сообщений: 1693
Рег. 19.06.2010
23 января 2017 13:08
Сообщение #27
Mirage,
Указывать позицию не лучший вариант, при наличии и кол-ва разных ресов позиция будет меняться.
Цитата: Engelos
Нашел твой пример

sub Spear()
  return CraftOrder("'Blacksmithing' 'Weapon' 'Weapon' 'Fencing' 'Fencing'", "Spear", 0x0F62, 0x1BEF, 32)
end sub

Sub CraftOrder(Menu, Name, Type, Res, CountRes)
  . . . .
  Blacksmithing(Menu + " '" + Name + ' (' + Str(CountRes) + "'", Res, CountRes) then
  . . . .
end sub

Sub Blacksmithing(Menu, Res, CountRes)
  . . . .
  UO.Exec('waitmenu ' + Menu)
  . . . .
end sub

В конечном итоге в макрос Blacksmithing попадет строка "'Blacksmithing' 'Weapon' 'Weapon' 'Fencing' 'Fencing' 'Spear (32'" и будет установлена ловушка на крафт меню UO.Exec("waitmenu 'Blacksmithing' 'Weapon' 'Weapon' 'Fencing' 'Fencing' 'Spear (32'"), внешний вызов WaitMenu использую для того чтобы вытянуть все параметры в одну строку.
Маршал (73319389)14 летИнквизитор
Inquisitor
Сообщений: 1693
Рег. 19.06.2010
23 января 2017 13:25
Сообщение #28
Цитата: Engelos
UO.WaitMenu('Carpentry','Furniture','Furniture', 'Chairs', 'Chairs', 'Chair(12'))
UO.WaitMenu('Carpentry','Furniture','Furniture', 'Chairs', 'Chairs', 'Chair(12)')


И множество других вариантов. Код парсится, но ничего не происходит.

Лишние скобки и забыл пробел, так правильно:
UO.WaitMenu('Carpentry', 'Furniture', 'Furniture', 'Chairs', 'Chairs', 'Chair (12')
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
23 января 2017 13:33
Сообщение #29
Zombie,
для тинкера алхимии и боукрафта ресов можно взять загодя побольше, а кузнеца и портного я особо не сдаю по этому мне не страшно если меню соскочит. Тем более при крафте 15-25 предметов можно и последить и терминатнуть если что. Если бы крафты были по овер 100500 при наличии 65000*10^10 ресурсов тут бы да - требовалось более продуманно строить менюшки. Я где то тут уже выкладывал своё крафт меню:
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
30 января 2017 12:04
Сообщение #30
Есть ли какая нибудь команда принудительной остановки работы скрипта ?
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
30 января 2017 12:50
Сообщение #31
Странно, почему то в хелпе не нашел хотя думал что есть.

uo.exec("Terminate all")

sub Terminate_2(); завершит только указанные скрипты
uo.Exec('terminate Lumberjacking')
uo.Exec('terminate Reconnect')
end sub


sub Terminate_all(); завершит все работающие скрипты.
uo.Exec('terminate all')
end sub


Еще есть вариант поставить на паузу скрипт.
Маршал (60157892)14 летИнквизитор
Inquisitor
Сообщений: 6208
Рег. 27.11.2009
30 января 2017 16:58
Сообщение #32
Цитата: Mirage
для тинкера алхимии и боукрафта ресов можно взять загодя побольше, а кузнеца и портного я особо не сдаю по этому мне не страшно если меню соскочит. Тем более при крафте 15-25 предметов можно и последить и терминатнуть если что. Если бы крафты были по овер 100500 при наличии 65000*10^10 ресурсов тут бы да - требовалось более продуманно строить менюшки. Я где то тут уже выкладывал своё крафт меню


Не в этом дело.
Позиция может смещаться, вот стою я в амз или нет. Уже позиция скроллов смещается, т.к. некоторые в амз пропадают из крафта.

Есть у меня в паке только логи - это будет одно меню крафта тинкера и карпы, а если еще и инги будут лежать, там уже совсем другой набор предметов будет.

Конечно, когда делаешь для себя, знаешь алгоритм и принцип работы своего скрипта, то можно обойтись и пилотом с кликами по координатам.)
А чтобы дать кому-нибудь в пользование, приходится учитывать больше возможных ситуаций, либо объяснять особенности своих скриптов, типа в амз не стоим, если крафтим тинкер из ингов, логи из пака выкладываем и т.п.)
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
31 января 2017 10:01
Сообщение #33
Пытаюсь разобраться с запукой стрел и регов. Сразу же возникла проблема. Какой командой это делается ? Сделал бай лист на закупку 50 стрел (ttt) и даю команду: ,buy ttt. Он ничего не покупает, просто открывает менюшку вендора с двумя строчками сдать скролы и посмотреть товар. Хорошо, прописываю вручную гамп и повторяю команду. На выходе получаю надпись от инжекта "1 types of items bought", а от игры You are buying too fast и ничего не покупается. Пробовал всунуть команду set buydelay, но ничего не изменилось. Как с этим работать ?
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
31 января 2017 10:28
Сообщение #34
Что то нахимичил ! Задержки лишние, но уже начало работать. Единственное пришлось галочку inverse buylist убрать.

sub Cooking()
  
UO.Set('buydelay', 600)
wait (100)  
UO.WaitGump(3)
wait (1000)
UO.Buy('ttt')

  
end sub
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
31 января 2017 13:48
Сообщение #35
инвертировать надо было на 14 версии. На 15 починили эту штуку так что галка на последнем инжекте не нужна.
байделей лучше больше поставить. Я бы даже около 3000 выставил.
первый wait не нужен а второй можно 100 поставить.
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
1 февраля 2017 15:51
Сообщение #36
Есть где то описание (хотя бы краткое) основных команд и возможностей инжекта ?

Вот к примеру кусочек чужого кода, он возвращает количество зарядов на руне. Но как он работает, какие аргументы принимает ? Я нагуглил, что Val возвращает числа из строки. Что тогда леает right ? Обрезает часть строки на которую следует делать проверку ?
return Val(Right(UO.GetFoundedText(), Len(UO.GetFoundedText()) - Pos(UO.GetFoundedText(), '(')))


П.С. На данный момент два вопроса, простой и не очень. Пытаюсь что то придумать, что бы скрипт не глючил из за волд сейва.

1) Как поставить скрипт на паузу, и можно ли это сделать из паралельного потока. Идея следующая. С частотой в 0.3 секунды в паралельном скрипте считываю журнал на наличие обьявления сейва, если нахожу - ставлю паузу, через 30 секунд востанавливаю. Не знаю, как тут работает пауза, и подходит ли такой вариант, но хочу попробовать.
2) Есть ли какой то другой, более адекватный способ обезвреживания world save ?
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
1 февраля 2017 17:23
Сообщение #37
Самый простой способ вставить проверку в чеклаг через if сообщение сейва ждать 10-15 секунд и все.
Val str right это языковые операторы. язык очень близок к визуал бейсику. Можно по нему конечно книжку прочитать но имхо значительно проще будет тупо зашариться по форуму и поискать примеры применения непонятностей. То что ты привел в строке проверки конды это осовременненый вариант на основе новых команд.
ПРимерно как было с грабом и мувеитемом. Мувеитем это тот же граб по суте своей но еще с несколькими добавлениями. Кому с чем проще тот тем и пользуется.
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
1 февраля 2017 18:01
Сообщение #38
Эм, что за checklag и как им пользоваться ?

П.С. Стелз клиент используется только для скриптинга ? Или на нем и играть можно полноценно ? Там вроде под него большой турториал есть, может действительно попробовать.
Лейтенант (4548828)11 лет
Dragonstalker
Сообщений: 3319
Рег. 19.11.2013
1 февраля 2017 20:14
Сообщение #39
Играть и на голом клиенте можно :)
Другое дело что ты хочешь от игры и сколько ты этому хотению готов уделять времени сил и денег.
Чеклаг вспомогательная процедура проверки лага (что удивительно, правда? ) более подробно угадай где написано? ;)
Старший Лейтенант (6677478)7 лет
Dragonstalker
Сообщений: 305
Рег. 19.12.2016
2 февраля 2017 02:37
Сообщение #40
В турториале этого нету, нашел несколько вариантов в гугле с обьяснениями, но не тем не менее не понял как его использовать. Перед каждым действием пихать что ли эту проверку ?
Последние посетители (0):

 
Сейчас: 23 ноября 2024 13:53