Page 1 of 1

uo.getname?

Posted: 2008-02-11 21:46:31
by korzh
На мой взгляд одна из самых кривых функций в инжекте, но бывает очень необходимой.

Вот почему

Code: Select all

uo.getname('self')

или

Code: Select all

uo.getname('0x000000')

работает нормально.

А

Code: Select all

id=uo.getserial(uo.TradeOpponent())
name=uo.getname(id)


или

Code: Select all

uo.GetName('laststatus')

через жопу?

Была конечно идея получать имя путем клика + дергать последнюю строку журнала, но это работает через то же место.

Как другими способами узнать имя объекта например для uo.TradeOpponent() ? :roll:

Posted: 2008-02-11 22:58:11
by Destruction
uo.TradeName()

PS: Никогда не испытывал проблем с uo.getName(), просто вы пользуете видимо неправильно.

Posted: 2008-02-11 23:16:41
by Kynep
Destruction wrote:uo.TradeName()

PS: Никогда не испытывал проблем с uo.getName(), просто вы пользуете видимо неправильно.


Есть такой косяк. Почему то когда делаешь:

Code: Select all

VAR name, ser
ser = UO.GetSerial('finditem')
name = UO.GetName(ser)

UO.PrintText(name)

ни чего не выдает. странно правда?

Posted: 2008-02-11 23:18:33
by Edred
Kynep wrote:

Code: Select all

VAR name, ser
ser = UO.GetSerial('finditem')
name = UO.GetName(ser)

UO.PrintText(name)


Чего же тут странного? Раз поиск не делался, значит и finditem пустое. Раз пустое - имени нету. Все естественно. Это во-первых.

Во-вторых. Инжекту просто негде взять имя чего-либо если клиент это имя не получал от шарда. Поэтому чтобы получить имя - нужно перед этим кликнуть по объекту / чару / НПС. Об этом, вообще-то, я еще во втором или третьем уроке скриптинга писал. Странно, что-то на этом форуме приписками "эксперт" разбрасываются направо-налево... Вон у Грина до сих пор "junior expert", а тут эксперт, который не знает элементарных вещей.

Posted: 2008-02-11 23:21:40
by Kynep
Edred wrote:
Kynep wrote:

Code: Select all

VAR name, ser
ser = UO.GetSerial('finditem')
name = UO.GetName(ser)

UO.PrintText(name)


Чего же тут странного? Раз поиск не делался, значит и finditem пустое. Раз пустое - имени нету. Все естественно.

Блин я утрирую, до этого поиск и все как надо )))
Просто если сделать:

Code: Select all

UO.PrintText(UO.GetName(ser))

То все работает )))

Posted: 2008-02-11 23:22:27
by Edred
Я уже дописал свой пост, читай выше.

Posted: 2008-02-11 23:25:06
by Kynep
Edred wrote:Я уже дописал свой пост, читай выше.


Уже прочитал. Я в курсе.

Posted: 2008-02-11 23:39:13
by Kynep
Edred wrote:Я уже дописал свой пост, читай выше.


Просто даже если без клика сделать:

Code: Select all

name = UO.GetName('finditem')
UO.PrintText(name)

и

Code: Select all

UO.PrintText(UO.GetName('finditem'))


то в первом случае мы получим 0 а во втором имя. Вам не кажеться это странным?

Posted: 2008-02-11 23:41:16
by Grin

Code: Select all

UO.PrintText(UO.GetName('finditem'))

name = UO.GetName('finditem')
UO.PrintText(name)


А теперь сделай в обратном порядке;)) на предмете чье имя ты еще 100% не знаешь;)

Posted: 2008-02-12 00:04:37
by Kynep
Grin wrote:

Code: Select all

UO.PrintText(UO.GetName('finditem'))

name = UO.GetName('finditem')
UO.PrintText(name)


А теперь сделай в обратном порядке;)) на предмете чье имя ты еще 100% не знаешь;)


Интерестная концепция ))) Я пробовал свои техники, указанные выше на элемах, при их появлении имя попадает в журнал в любом случае, даже без клика. Но вот в представленных мной прмерах получается косяк )))

Posted: 2008-02-12 00:07:02
by Grin
как же все сложно
всем спокойной...

Posted: 2008-02-12 00:10:27
by Kynep
Grin wrote:как же все сложно


В смысле? На что Вы намекаете?

Posted: 2008-02-12 00:48:09
by Edred
Kynep wrote:Просто даже если без клика сделать:

Code: Select all

name = UO.GetName('finditem')
UO.PrintText(name)

и

Code: Select all

UO.PrintText(UO.GetName('finditem'))


то в первом случае мы получим 0 а во втором имя. Вам не кажеться это странным?


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

Code: Select all

name = UO.GetName('finditem')
UO.PrintText(name)
UO.PrintText(UO.GetName('finditem'))


Любуешься абсолютно одинаковым результатом. А именно - 0.

После чего запускаешь скрипт, где у тебя:

Code: Select all

Click('finditem')
wait(1000)
Checklag()
name = UO.GetName('finditem')
UO.PrintText(name)
UO.PrintText(UO.GetName('finditem'))


И опять любуешься одинаковым результатом. А именно - именем объекта. Что и требовалось доказать.

И, наконец, по поводу элема. Не ты ли буквально пару дней назад интересовался, по какому сообщению лучше ловить момент появления элема? Мне кажется, да. Если это так - то все понятно. Как я уже писал, у вас на шарде элемы выкапываются сначала в пак, а потом выпадают под ноги. Так как клиент УО "знает" по именам все объекты, которые находятся у чара в паке (было бы странно, если бы не знал), то абсолютно естественно, что чар (и инжект) знает имя элема без всякого клика на него.

Posted: 2008-02-12 01:11:41
by Destruction
Вейт не нужен.

Насколько я помню из спецификации TCP-протокола, пакетики ходят строго по-порядку.. Ну может быть плохо помню.

Code: Select all

Sub my.getName( object )
    If uo.getName( object ) == "" Then
        uo.click( object )
        checklag()
    EndIf
    return uo.getName( object )
endsub

Posted: 2008-02-12 01:13:45
by Edred
По фиг. Это всего лишь пример того, что функция GetName работает абсолютно корректно, просто надо знать правила, по которым она работает... 8)

Posted: 2008-02-12 01:17:05
by Destruction
Edred wrote:По фиг. Это всего лишь пример того, что функция GetName работает абсолютно корректно, просто надо знать правила, по которым она работает... 8)

Я ещё в самом начале топика не видел смысла объяснять - увидев объёмы тексту понял - был прав на 100%. В любом случае - есть логика в использовании uo.TradeName().

Вообще - судя по тому, что у него не определяется имя игрока - не стоит галочка "Show names of approaching players" или как её там, а инжект увидев трейд-окошко - не записывает для айдишника имя (блин, хз как правильно сказать, но суть какая-то такая), что не есть гут.. Если вдруг Yoko вернётся - надо будет ему сказать :)

Posted: 2008-02-12 02:03:35
by korzh
Всем спасибо, у меня все получалиось, причем 3-меняспособами 8)

Posted: 2008-02-12 02:47:54
by Destruction
korzh wrote:Всем спасибо, у меня все получалиось, причем 3-меняспособами 8)

Тремя?... Дай угадаю:
1. Поставить галочку в настройка UO - "Show names of approaching players".
2. Делать клац перед использованием uo.getName()
3. Использовать uo.TradeName()

Верно?)

Posted: 2008-02-12 04:03:58
by korzh
Destruction wrote:
korzh wrote:Всем спасибо, у меня все получалиось, причем 3-меняспособами 8)

Тремя?... Дай угадаю:
1. Поставить галочку в настройка UO - "Show names of approaching players".
2. Делать клац перед использованием uo.getName()
3. Использовать uo.TradeName()

Верно?)


Да, кроме первого.
1. uo.getserial(uo.TradeOpponent())...