Page 1 of 1
uo.getname?
Posted: 2008-02-11 21:46:31
by korzh
На мой взгляд одна из самых кривых функций в инжекте, но бывает очень необходимой.
Вот почему
или
работает нормально.
А
Code: Select all
id=uo.getserial(uo.TradeOpponent())
name=uo.getname(id)
или
через жопу?
Была конечно идея получать имя путем клика + дергать последнюю строку журнала, но это работает через то же место.
Как другими способами узнать имя объекта например для uo.TradeOpponent() ?

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 пустое. Раз пустое - имени нету. Все естественно.
Блин я утрирую, до этого поиск и все как надо )))
Просто если сделать:
То все работает )))
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 работает абсолютно корректно, просто надо знать правила, по которым она работает...

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

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

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

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

Тремя?... Дай угадаю:
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-меняспособами

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