Page 1 of 1

Перефразирование

Posted: 2007-12-02 20:52:31
by Denton
В моем скрипте при продолжительной работе вылезает какая-то странная ошибка:

Если в макросе используется строка uo.usetype("xxxxxxxx") то через какое-то время мне пишет в игровом окне, не останавливая скрипт строчки из встроенного помощника по синтаксису "Usage: usetype type/lasttarget/lastobject [color]". Думал я как это исправить. Перефразировал эту строку на uo.exec("usetype xxxxxxx") - ошибка пропала.

НО!

Теперь тоже самое появляется с UO.Waittargettile('1341', str(i), str(j), str(mz)). Через некоторое время при выполнении этой строки в скрипте на мининг появляются такие надписи: "Usage: waittargettile [lasttile]/[tilenum [x] [y] [z]]".

Как мне перефразировать эту команду?

При использовании uo.exec("waittargettile 1341 [str(i)] [str(j)] [str(mz)]") использует тайл под персонажем и не воспринимает строковые параметры.

Posted: 2007-12-03 01:59:21
by Grin
во фантазер то... и как люди такой синтаксис придумывают...

Posted: 2007-12-03 10:50:50
by Destruction
Grin wrote:во фантазер то... и как люди такой синтаксис придумывают...

Они не понимают, что брекеты означают необязательный аргумент.

Posted: 2007-12-03 23:17:24
by Denton
про необязательный элемент я понимаю, но как мне в макросе на копание руды "перефразировать" uo.waittargettile когда координаты x, y и z берутся из вычислений внутри самого макроса.
Как осуществить обкапывание вокруг персонажа без использования этой формулировки uo.waittargettile()

Вот кусок кода:

Code: Select all

while not uo.Dead()

mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()

for i = mx-1 to mx+1
for j = my-1 to my+1

UO.Print("Копаем в координатах: "+str(mx-i)+" "+str(my-j))

while not UO.InJournal("Здесь больше нет руды") and not UO.InJournal("Слишком далеко") and not UO.InJournal("Вы не можете добывать здесь")

    uo.DeleteJournal()
    if uo.waiting() then
        uo.canceltarget()
    endif
    UO.Waittargettile('1341', str(i), str(j), str(mz))
    UO.exec("useobject shovel")

    while not UO.InJournal("Здесь больше нет руды") and not UO.InJournal("Вы поранились киркой") and not UO.InJournal("Слишком далеко") and not UO.InJournal("Вы не можете добывать здесь")
    wend

wend

Posted: 2007-12-05 22:30:59
by Denton
Ребята, ну может случайно кто-то сталкивался с проблемой когда вдруг резко инжект прекращает "понимать" синтаксис какой-либо команды?

И просто пишет строчки из своего хелпа как "должна на самом деле быть написана какая-нибудь команда".

Posted: 2007-12-06 00:26:03
by Grin
пример приведи чего ты пишешь...

Posted: 2007-12-06 12:03:47
by Denton

Code: Select all

while not uo.Dead()

mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
UO.DeleteJournal()

for i = mx-1 to mx+1
for j = my-1 to my+1

UO.Print("Копаем в координатах: "+str(mx-i)+" "+str(my-j))

while not UO.InJournal("Здесь больше нет руды") and not UO.InJournal("Слишком далеко") and not UO.InJournal("Вы не можете добывать здесь")

    uo.DeleteJournal()
    if uo.waiting() then
        uo.canceltarget()
    endif
    UO.Waittargettile('1341', str(i), str(j), str(mz))
    UO.exec("useobject shovel")

    while not UO.InJournal("Здесь больше нет руды") and not UO.InJournal("Вы поранились киркой") and not UO.InJournal("Слишком далеко") and not UO.InJournal("Вы не можете добывать здесь")
    wend

wend


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

Персонаж использует кирку (объект shovel) дальше соответственно команда uo.waittargettile должна указывать координаты, в которые должен быть направлен прицел, там где копать. А вместо этого появляется сообщение "Usage: waittargettile [lasttile]\[tilenum [x] [y] [z]]".
Если просто в окошке клиента ввести команду ,waittargettile (без координат) то как раз и появится это сообщение.
Вывод - почему-то скрипт на каком-то моменте не видит UO.Waittargettile('1341', str(i), str(j), str(mz)) а начинает вести себя как при вводе пустого uo.waittargettile()

Абсолютно идентичная картина наблюдалась и с uo.useobject('shovel').
Тоже через минут 5-10 после работы макроса он переставал видеть то, что находится в круглых скобках.
Методом тыка пришел к "глупому" решению перефразировать uo.useobject('shovel') на uo.exec("useobject shovel") и пока что проблема с киркой ушла.

Posted: 2007-12-06 21:31:13
by Destruction
Вроде верно всё.. и неверно с другой стороны.

Попробуйте распечатать значения, который передаёте в waittargettile, заодно проверите их на корректность, и вызвать команду из отдельного скрипта.

Posted: 2007-12-06 21:47:34
by Denton
10 минут работают верно, потом слетает... не думаю что проблема в переменных, т.б. что если не ставить проверку антимакроса (которая затрагивает только ожидание гампа) то скрипт часами работает корректно.

Posted: 2007-12-06 21:51:41
by Grin
Так и будешь "врятлить"?
Сказали - проверяй...

Posted: 2007-12-06 22:48:26
by Denton
Можно узнать что значит эта строка?

Code: Select all

if not uo.LastGump('replyed') then 

Posted: 2007-12-06 22:51:39
by Grin
Если возмешь в руки словарь и переведешь дословно, то получишь ответ

Posted: 2007-12-06 22:54:40
by Denton
Я перевод понял, но в скриптинге это условие значит:
"Если последний гамп не является ответной реакцией на какое-то действие"?

Posted: 2007-12-06 23:03:46
by Denton
Вставил задержки в антимакрос и чудо, уже полчаса без сбоев :) все так бывает просто (надеюсь)