Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Спавн-Деспавн юнитов, задержка


Setras

Рекомендуемые сообщения

По событию EVENT_UNITS_CHANGED юзается функция object.AttachWidget2D.

Проблема в том что в лог срется гигабйтами ошибка

Error: UI::LuaObjectAttachWidget2D: interactive object not found: №№№№№№, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Где вместо №№№№№ - обджект ИД юнита.

Т.е. как я подозреваю сперва приходит событие мол "такие то юниты появились в зоне действия", а через некоторое время (три, пять минут? помним тот злополучный патч с загрузкой окружающих персонажей по 5 минут?) иногда короткое(секунда-две), иногда длинное(лагоград) юниты таки появляются в клиенте, хотя во время юза разных проверок стоящих перед object.AttachWidget2D все они возвращают верные значения.

В общем сталкивался ли кто с такой фигней и есть ли обходные пути решения?

Ссылка на комментарий
Поделиться на другие сайты

.. если проверка на то, что юнит появляется, а не пропадает не помогает..

Тогда только по-русски :) пихать по событию в список, потом по секундному таймеру проверять что юнит существует(unit.isExist) и если появился - создаем ваш виджет и удаляем запись из списка >_<

Ссылка на комментарий
Поделиться на другие сайты

А привести код этого куска, где твой обьект аттачится?

Аттачишь только к тем кто spawned?

Quote:
хотя во время юза разных проверок стоящих перед object.AttachWidget2D все они возвращают верные значения

Те проверка if object.isExist(units.spawned [0 итд] ) then object.AttachWidget2D end проходит?

ЗЫ. Не знаю, как там с аттачами - инфа по юниту приходит нормально, в этом событии уже можно все доступное о нем узнать

ЗЫЫ. Бывает еще юнит на грани досягаемости - спавнится и со следующим событием деспавнится

Ссылка на комментарий
Поделиться на другие сайты

Вот конец той функции:

if params.spawned then

for i, v in params.spawned do

if unit.IsPlayer( v ) then

wtWT[v] = mainForm:CreateWidgetByDesc(wtF:GetWidgetDesc())

object.AttachWidget2D( v, wtWT[v], ATTACHED_OBJECT_POS_UP )

wtWT[v]:Show(true)

end

end

end

Вероятно надо ввести проверку на то не находится ли юнит одновременно и в таблице params.spawned и в таблице params.despawned ... Но я сомневаюсь что дело в этом. Но сейчас лень заниматься этим аддоном, хоть лог и засоряется неимоверно быстро, аддон то работает =\

Ссылка на комментарий
Поделиться на другие сайты

Error: addon Titan: Game::LuaObjectIsFar: InteractiveObject (id=21247) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon Titan: UI::LuaObjectAttachWidget2D: interactive object not found: 21247, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

if unit.IsPlayer( v ) and not object.IsFar( v ) then

-- unit.IsPlayer(21247)? Безбазару, этот юнит плеер!

-- unit.isFar(21247)? Ты че, попутал? Нет такого юнита и не было!

Ссылка на комментарий
Поделиться на другие сайты

LogInfo("Object name is ", object.GetName(v))

Вставил эту хрень перед if unit.IsPlayer( v ) and not object.IsFar( v ) then и что я вижу?

Уже 10 минут лог пестрит разнообразием имен-названий и ни одной ошибки...

Ссылка на комментарий
Поделиться на другие сайты

Наверно ошибок в логе не было потому что их просто не было... Фак мой мозг.....

Ссылка на комментарий
Поделиться на другие сайты

.. я конечно понимаю что событие EVENT_UNITS_CHANGED крутая вещьчь.. но пятка левой ноги упорно подсказывает мне что

Code:
for i, v in params.spawned do
что-то связанное с перебором полученной инфы косячит.. хотя я сам хз

Вобщем по теме - попробуй заюзать EVENT_UNIT_SPAWNED и не париться :) Высылает на каждого нового юнита ивент с unitId >_<

Ссылка на комментарий
Поделиться на другие сайты

Я по params.spawned виджеты создаю, а по params.despawned - уничтожаю.

ИМХО все верно оно перебирает. Но порой конструкция вида

for i, v in params.spawned do

LogInfo("Name ",object.GetName(v)," and Id ",v)

if unit.IsPlayer( v ) and not object.IsFar( v ) then

wtWT[v] = mainForm:CreateWidgetByDesc(wtF:GetWidgetDesc())

object.AttachWidget2D( v, wtWT[v], ATTACHED_OBJECT_POS_UP )

Выдает в лог примерно такое:

Code:
Info: addon AllianceICO: Name Прохор Волков and Id 13098

Info: addon AllianceICO: Name Торговля оружием для Ратоборцев and Id 13092

Info: addon AllianceICO: Name Эрис and Id 13104

Info: addon AllianceICO: Name Пьянь and Id 13166

Info: addon AllianceICO: Name Страж and Id 13222

Info: addon AllianceICO: Name ХХПрестолХХ and Id 13200

Info: addon AllianceICO: Name Стражник Новограда and Id 13216

Info: addon AllianceICO: Name МиссисФауст and Id 13208

Info: addon AllianceICO: Name Фалколн and Id 13276

Info: addon AllianceICO: Name Страж and Id 13264

Info: addon AllianceICO: Name хххИНТЕРххх and Id 13292

Info: addon AllianceICO: Name Торговля аксессуарами для Ратоборцев and Id 13306

Info: addon AllianceICO: Name ХилРусский and Id 13256

Info: addon AllianceICO: Name Стражник Новограда and Id 13270

Info: addon AllianceICO: Name СуперХай and Id 13284

Info: addon AllianceICO: Name ФаустЖрец and Id 13246

Info: addon AllianceICO: Name Торговля бронёй для Ратоборцев and Id 13300

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=10649) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 10649, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=11690) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 11690, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=11932) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 11932, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=12069) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 12069, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=11074) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 11074, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=12696) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 12696, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=10763) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 10763, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=13104) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 13104, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=10812) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 10812, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Error: addon AllianceICO: Game::LuaObjectIsFar: InteractiveObject (id=11682) not found, details: int __cdecl Game::LuaObjectIsFar(struct lua_State *)

Error: addon AllianceICO: UI::LuaObjectAttachWidget2D: interactive object not found: 11682, details: int __cdecl UI::LuaObjectAttachWidget2D(struct lua_State *)

Info: addon AllianceICO: Name Марианна ди Ардер and Id 13574

Info: addon AllianceICO: Name Карачикапица and Id 13536

Info: addon AllianceICO: Name демонщик and Id 13552

Info: addon AllianceICO: Name Мила Мещерская and Id 13568

Info: addon AllianceICO: Name Стражник Новограда and Id 13530

Info: addon AllianceICO: Name Иеро and Id 13544

Info: addon AllianceICO: Name АшварияРай and Id 13560

Info: addon AllianceICO: Name Просекутор and Id 13616

Ссылка на комментарий
Поделиться на другие сайты

Quote:
if unit.IsPlayer( v ) and not object.IsFar( v ) then

1. Чем тебе поможет проверка на удаленность/на плеера обьекта, если обьекта не существует, о чем тебе, собственно, и пишут в логе
Quote:
object not found

2. Так как насчет предварительной проверки на существование? object.isExist. Проходит?
3. Обьекты, ИД которых выдаются в despawned, уже не существуют и с ними вообще ничего нельзя сделать. Ну это так, просто инфа, мало ли
Хотя бывают иногда глюки (начались как раз с той обновы, в которой появилась замедленная прорисовка обьектов): обьект вроде исчез из поля действия, а инфу по нему получать можно
Ссылка на комментарий
Поделиться на другие сайты

Quote:
Т.е. как я подозреваю сперва приходит событие мол "такие то юниты появились в зоне действия", а через некоторое время (три, пять минут? помним тот злополучный патч с загрузкой окружающих персонажей по 5 минут?) иногда короткое(секунда-две), иногда длинное(лагоград) юниты таки появляются в клиенте, хотя во время юза разных проверок стоящих перед object.AttachWidget2D все они возвращают верные значения.

Имхо, EVENT_UNITS_CHANGED и EVENT_UNIT_SPAWNED сообщают о том, что юнит появился в зоне досягаемости (но НЕ видимости!). Но в этот момент, он визуально ЕЩЁ НЕ ВИДЕН, поэтому, аттачить к нему виждет нельзя. Есть два радиуса, имхо - юнит ID "досягаем" на большом радиусе (о чём и сообщают EVENT_UNITS_CHANGED и EVENT_UNIT_SPAWNED), а радиус визуальной видимости юнита гораздо уже. О чём и сообщает object.AttachWidget2D() - "не вижу, к кому аттачить".

Юнит ID - это душа.
"interactive object" - это тело.

То есть, в момент EVENT_UNIT_SPAWNED, юнит уже СУЩЕСТВУЕТ, и по его ID можно получить подробную информацию о нём, НО его "interactive object" ещё не существует. Сам юнит, и его "interactive object" - это разные вещи. "Interactive object" появляется значительно позже, и то, ТОЛЬКО В ТОМ СЛУЧАЕ, если этот юнит попрётся навстречу аватару. А если не попрётся, а остановится, или пробежит мимо, или рванёт обратно, то его "interactive object" (тело) так и не появится.

Я не знаю способа, как определить, находится ли юнит в "зоне видимости". Может, и есть такой способ в API, я этим просто не интересовался.
Ссылка на комментарий
Поделиться на другие сайты

AllianceICO )) а друзей будет выделять?

Если совсем задолбаешься от наших советов - можешь как некоторые зарубежные товарищи выложить свой аддон аттачем, а мы потестим, попробуем решить головоломочку :) И думаю Nikon дело говорит ^^

Ссылка на комментарий
Поделиться на другие сайты

Quote:
3. Обьекты, ИД которых выдаются в despawned, уже не существуют и с ними вообще ничего нельзя сделать.
Да, но по этим ИД можно удалить более неиспользуемые виджеты.

По поводу юнит екзист, юнит фар и т.п. - если юнит существует разве нельзя узнать far он или не far?

И по поводу работы самого аддона - я еще ни разу, никогда не видел чтобы виджет не приаттачился к игроку. Т.е. ошибки сыпятся тоннами, а виджеты к игрокам все равно нормально аттачатся.
Ссылка на комментарий
Поделиться на другие сайты

ЖЕБАЧ! Я нашел КАКОЙ именно кусок кода генерит ошибки!

Вот это ФАНТАСТИКА. Такой фигни я от себя и от луа не ожидал )))

function Retargeted(params)

for k, v in wtWT do

if not object.IsFar( k ) then

object.AttachWidget2D( k, wtWT[k], ATTACHED_OBJECT_POS_UP )

end

end

end

Т.к. даже если виджет БЫЛ уничтожен, запись в таблице wtWT остается(даже если значение nil видимо...)!

Несмотря на то что оно работает для существующих виджетов, для несуществующих оно матерится на отсутствие объекта. И слава богу на это, а не на отсутствие виджета...

P.S. Jebach is a eastern-europe-stylised word that means "oh fuck!". Maybe in Poland or Czech they say so...

Ссылка на комментарий
Поделиться на другие сайты

Тогда такой вопрос идиота, что делает функция DestroyWidget() ??

Ссылка на комментарий
Поделиться на другие сайты

Физически уничтожает виджет. То есть, телепортирует по переданной ей ссылке микроскопическую квантовую чёрную дыру, которая за считанные доли секунды поглощает виджет, и тут же полностью аннигилируется сама.

Но если у тебя остаётся ссылка, то теперь она ссылается на космический вакуум.

P.S. Хотя, учёные уже поняли, что в Ведах написана правда - вакуума не существует. Твоя ссылка ссылается на что-то другое. На какую-нибудь космическую Ктулху, например :)

P.S. Все виджеты, с которыми мы работаем в Lua - это ссылки (на объект userdata), в классическом понимании, как в языке Си.

Ссылка на комментарий
Поделиться на другие сайты

Так вот оно, в чём дело! Да, остаётся. Потому что, удалив виджет, ты забыл уничтожить ссылку на него:

Code:
DestroyWidget( wtWT [X] )

wtWT [X] = nil

Если ты этого не сделал, то ссылка остаётся в таблице. Она ссылается на пустоту, находящуюся где-то за пределами метагалактики.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования