Гипат.org

Все остальное - Вопрос по скриптам.

Vasya - 23 января 2002, 20:55
Может кто-нибудь сказать, как получить объект персонажа (не своего, конечно) в мультиплейере? Я думаю, это не стоит разглашать, поэтому, наверное, лучше отправлять приватные сообщения. Я буду регулярно проверять инвентарь.
sun - 23 января 2002, 22:26
Можно афишировать, в этом… нет никакого секрета.
Есть команда getLeader() это своего, но тебе это не надо. Тогда можно включить фильтр с Ai: filter Ai 1 и посмотреть ID персонажа, а затем вызвать команду получить объект с идентификатором. Эти команды описаны в инете, в частности на сайте «Нечесная игра» . Есть и другие способы, если известно внутреннее имя нужного персонажа (Его можно посмотреть в мобах) то получит объект с именем.

[ 23 января 2002: Изменил: sun ]


Vasya - 24 января 2002, 13:17
sun

Не всё так просто.

Сайт Чейза я изучил, но это ничего не дало. По идентификатору, который отображается в консоли, почему-то нельзя получить объект персонажа. При написании команды #GetObjectID(GetLeader()) неизменно получаем 1e+009, тогда как после команды filter ai 1 видно, что у меня идентификатор 1000000013, но ни один, ни другой идентификатор не дают правильного объекта, когда применяешь к ним GetObject. Этот объект (мой перс) получается только по GetLeader() или же по GetUnitOfPlayer(0,0). При этом GetUnitOfPlayer(0,1(2,3,4 и т.д.)) (большИе числа не проверял) тоже не даёт второго игрока.

Число GetObjectID(GetLeader()) обладает ещё одним интересным свойством: оно не изменяется при применении к нему арифметических функций.

[ 24 января 2002: Изменил: Vasya ]


sun - 24 января 2002, 17:17
Странно и запутанно... Напиши полностью строку, что ты вводишь в консоли и какой объект на карте (на какой карте?) ты хочешь получить?
Vasya - 24 января 2002, 23:01
sun

Я хочу получить объект - персонаж другого игрока в сетевой игре.

Идентификатор этого персонажа получить просто: пишем "filter ai 1" и смотрим в консоль. Допустим, он получился 1000000015. Пишем, например, "#GetX(GetObject(1000000015))" - и всегда получаем 0, то есть по идентификатору правильный объект не получается.

Та же ситуация и с объектом - моим персонажем. По его идентификатору нельзя получить объект.


Другой непонятный момент: пишем "#GetObjectID(GetLeader())". Результат "1e+009" не соответствует идентификатору, выводимому по команде "filter ai 1".

Далее, попытка написать "#GetX(GetObject(1e+009))" приводит к ошибке, а если пишем "#GetX(GetObject(1000000000))", то результат, как обычно, 0.


Ещё проверка: пишем "#Add(GetObjectID(GetLeader()),5")", получаем "1e+009", а не 1000000005. Что же это за число на самом деле?
sun - 25 января 2002, 13:22
"Далее, попытка написать "#GetX(GetObject(1e+009))" приводит к ошибке, "
вообще-то вот так можно сложить с id :
#add(GetObjectID(getLeader()),-1000000000)
Я посмотрю в чем дело. возможно проблема с форматом или преобразовнием...
Vasya - 25 января 2002, 13:44
Да, здесь, похоже, происходит какое-то хитрое округление с шагом в 64, то есть, в результате применения функции Add можно получить из числа 1000000013, кратные 64. Происходит это примерно так: #Add(1000000013,-1000000032) даёт 0, а #Add(1000000013,-1000000033) даёт -64.

Забыл упомянуть, что на большем расстоянии от нуля шаг округления увеличивается.

[ 25 января 2002: Изменил: Vasya ]


Vasya - 25 января 2002, 20:10
sun

А разве я могу перенести тему в другое место? Я же не Избранный, не Великие Силы и даже не Великий Маг.

Nivea

Я создал тему здесь, потому что хотел спросить не только людей, допущенных в закрытую часть форума. Но, как видно, либо все меня игнорируют, либо действительно никто, кроме sun'a ничего не знает. (Конечно, ещё есть вариант, что кто-то знает, но не признаётся в этом. images/smiles/icon_wink.gif )
sun - 25 января 2002, 20:29
Щас появится какой-нибудь "Великий...", попросим его - он перенесёт...
images/smiles/converted/voldar04.gif
Psi-factor - 25 января 2002, 22:29
Вася а ты пробовал? Может можно. Ты же вроде как автор темы. Проверь.
yanch - 25 января 2002, 23:18
цитата
Цитата:
BansheeDarkF16

ХА! Эту мессагу надо будет удалить, т.к она совсем не по теме. Но это название меня убило. images/smiles/icon_smile.gif мож еще f18hornet обозвать? images/smiles/icon_biggrin.gif
sun - 26 января 2002, 01:12
Что-то эта проблема больно на ошибку смахивает…. images/smiles/icon_smile.gif
Во время игры максимальные значения, которые использует функции GetObject это семизначные числа, а с десятизначными числами проблема. Да и при сложении двух чисел то же что-то не то.
В ПЗ есть функция преобразования внутреннего имени в код идентификатора объекта.
Функция не сложная. Например, если дать внутренне имя новому объекту из одной буквы, то код ID будет соответствовать значению числа буквы в таблицы ANSI. Маленькие буквы преобразуются в верхний регистр. Например, если создать монстра у выхода из поселка с внутренним именем «D», то код у этого монстра будет 1000000068: @AddUnitToServer("D","BansheeDarkF16","Vasya",20,133,0).
Вообще-то к именам функций в ПЗ у меня тоже есть вопросы. Если задуматься о предназначении функции: AddUnitToServer, то функция должна была бы называться AddPersToServer… images/smiles/icon_smile.gif .
К сожалению, использовать функцию GetObject можно только для объектов созданных в mob`ах. Но проблему можно решить другим способом. Для этого существует функция: GetObjectById. Вводить значение код ID объекта нужно в кавычках, например, чтобы получить значение координаты «Х» Зака в сингле нужно ввести такую строку:
#GetX(GetObjectById( "1000011214" )).

Vasya, перенеси эту тему из Флейма в более серьезную, например: Все остальное.
images/smiles/converted/re_16.gif
Nivea - 26 января 2002, 01:53
цитата:

.... Я думаю, это не стоит разглашать, поэтому, наверное, лучше отправлять приватные сообщения. Я буду регулярно проверять инвентарь.


Разве у нас нет места в разделе для разработчиков?
Ничего не понимаю... images/smiles/converted/re_16.gif
Часовой пояс: GMT +4:00
Форумы Поселка созданы на базе phpBB2 2.0.4 © phpBB Group