DotA_DR
offline
Опыт:
103Активность: |
Цитата:
это по ходу отдельный баг связаный с вызовом TriggerSleepAction в тригере который был удалён DotA_DR добавил: Ха-Ха Toadcop всё что ты тут написал неверно (интерес имеет только баг с TriggerSleepAction), в твоей системе были баги, потому что, вопреки всеобщему мнению, вар сам освобождает память умерших юнитов, раз память освободилась значит этот хендл тоже освободиться(если нет ссылок) и может быть занят другим юнитом. Пример простой (переделать пример Sergey'я): Код:
если вызвать этот код с периодом например 30 хендл итема будет переиспользован |
|
30.08.2006, 17:04 | #41
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
мы это знаем, и давно
адэд
К сожалению это бага, и как бы то её использовать достаточно сложно. |
30.08.2006, 21:14 | #42
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
DotA_DR я в принципе нехрена не понял что ты написал =) ну меньше с тем это не здвинуло мир =)
Цитата:
|
|
31.08.2006, 15:14 | #43
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DotA_DR
offline
Опыт:
103Активность: |
Цитата:
обнуляют что бы сохранить верное кол-во ссылок на объект. и пример показывает совсем не это, а то что предмет удалился из вара без вызова RemoveItem. |
|
31.08.2006, 15:36 | #44
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Это может и освобождает хэндл, так как шмотка должна была умереть, а вещи удаляются корректно при использовании особенно. |
31.08.2006, 15:48 | #45
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
я об этом тоже думал... хотя хендл мне кажетьса не освобождаетьса... |
31.08.2006, 15:50 | #46
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DotA_DR
offline
Опыт:
103Активность: |
Пример можно переделать, что бы умирал юнит. только в константах надо уменьшить время разложения костей например до 2 сек тогда хендл который использовался умершим юнитом будет переиспользован |
31.08.2006, 16:17 | #47
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
юниты не удаляюися автоматом...
DioD добавил: Если есть вопросы или есть что спросить создавай новую тему, мы будем только рады. |
31.08.2006, 16:22 | #48
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DotA_DR
offline
Опыт:
103Активность: |
DioD
ты перед тем как утверждать что-то, хотя бы проверил... DotA_DR добавил: мне нечего спрашивать, мне была интерестна эта тема, но она себя исчерпала |
31.08.2006, 16:45 | #49
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
DotA_DR
Цитата:
Цитата:
|
||
04.09.2006, 15:41 | #50
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
DotA_DR прав...
Буду краток =) После того как юнит умер (был убит...) то юнит будет сам удалён из игры после того как будут проиграны все нужные анимации такие как "death" -> "decay flesh" -> "decay / bone" именно в этом порядке после того как эти анимации были проиграны war3 САМ ! удаляет юнитов из игры и если к этому юниту нету ссылок то и освободитьса в стек ! т.е. удаления юнитов НЕ НУЖНО ! но если одна из выше пере численых анимаций выше отсутствувает то war3 пропрыгивает их до доступной а если ВООБЩЕ нету то юнит будет еще существовать только на "время смерти" которое настраиваетьса в редакторе объектов/юнитов. и после истечения этого времени вар сам его удалит ! это кстати не всегда хорошо т.к. иногда юнит удаляетьса за быстро и происходят глюки ! особенно модели (именно модели !) в которых нету анимаций разложения они удаляютьса буквально за несколько секунд ! т.е. всё зависит от модели + настроек в игровых константах + настроики "времени смерти" в редакторе объектов/юнитов ! т.е. если у нас есть модель грифона (и остальных летающих юнитов) которые НЕ имеют анимации разложения только анимация смерти то они удалятьса сразу после истечения времмени смерти ! что надо делать елементарно прийдётьса изменить время смерти в редакторе объектов на секунд 20 (или сколько надо...) и визуального еффекта это не будет имееть (конечно если у юнита нету анимации разложения иначе юнит будет 20 сек. находитьса в анимации смерти т.е. в конечной стадии этой анимации) только этот юнит будет удалён из игры через 20 секунд. (это иногда ОЧЕНЬ важно !) это же касаетьса предметов просто там нету времени смерти так что всё зависит от модели ! или это время смерти есть но оно констаное. но это не очень важно =) т.к. возраждения предметов нету. еще про разрушаемые (Destructables) одним словом они НЕ УДАЛЯЮТЬСА ! ну в принципе логично простейший пример это когда дерево срубывают то после него остаётьса пень а пень это конец анимации "death" т.е. вар замараживает на последней метки анимации анимацию =). после анимаций "decay..." тоже вроде (на 100% не уверен... уверен на 90% =) т.к. тестировал ) разрушаемые не удаляютьса ! т.е. впринципе это логично и не так уж страшно. так что то что создаетьса динамически надо удалять (имееитьса ввиду разрушаемые !). ну вроде бы всё :) код пример для юнитов : Код:
|
08.09.2006, 19:06 | #51
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
ну здесь всё просто =) на факте... хотя и не совсем =/
я даже незнаю как это всё высказать. "удалять триггер в самом себе апасна или тогда когда он еще не завершилса." это типо почти и есть весь смысл хотя здесь расматривались иные фичи =) вся бида этой фигня заключаетьса в том что нескока объектов имеют ОДИН И ТОТЖЕ хендл и черз множество объектов ты будеш ссылатьса всегда на одного т.е. своего рода те объекты будут просто ссылками. Триггер евенты "правят" хендлы в таком случие а точней если у объекта нету уникального хендла (как это определяетьса я незнаю...) то ему каждый раз при срабатываение триггера присваиваетьса новый (но неозначает что уникальный) хендл.
а вообщем всё просто. я бы нашол камне где то такой же давности с кампов... но мне лень... =) где я писал что "статик > динамик" а он типо неаа... и т.п. а сейчас сами ихние "тру кодеры" всё больше и больше юзают статичных объектов и конструкций. что я тока могу сказать... Т_Т |
09.09.2008, 22:15 | #52
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
кста сергей писал пару недель назад что это не так) когда я пытался обьяснить что это как раз так) про удаление тригера в его же потоке и потом абузе хендлов... ммм, ихмо с этим как то лучше не связываться) из этого фичу ну не сделать... Цитата:
то что они ТТ это факт) а вообще я не совсем понял о чем ты) ща первый пост гляну) ADOLF добавил: Цитата:
ну мы щас и игроках и что там еще не говорим) ну да но это тока в случае если ремовить тригер и слипать акшин (насколько я понимаю) или! гхм, я писал об этом) если обьект ремувнуть) Цитата:
сцв лажа) ну да щас таук никто и неделает я надеюсь) Цитата:
рофл) хотя вообще на него имхо мона забить в 99% случаев... ну это уже другая история... Цитата:
мне неповезло=/ Цитата:
дык кондишины хешируюццо, ну понятно ты писал это много лет назад) сам же мне потом обьяснял как оно робить) [+] замечание от NETRAT: оффтопег
Отредактировано NETRAT, 10.09.2008 в 13:33. |
|||||||
10.09.2008, 11:14 | #53
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
Цитата:
кстати в этом есть лол... с 2у летний длительностью xD т.е. я 2 года пыталса пофиксить баг с камерой и всё таки нашол способ пофиксить его ! xD Цитата:
в этом кстат ключевой момент почему я нелюблю и нехочю писать статьи они пишутьса на определёном уровне знаний и в определёный "момент" устаривают и стают неактуальными... =) ну впринцыпе от этого некуда не детьса... Toadcop добавил: ах блин самое важное... в игровых услових это баг случаетьса КУДА ЧАЩЕ и без триггер слип екшена =) вроде сам факт удаления триггера корёжит там что то (возможно и не тока триггера). это тоже практически доказано. но симулировать в искуственых условиях удалось тока эту фигню с вейтом. [+] замечание от NETRAT: оффтопег
|
|||
10.09.2008, 13:32 | #54
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
здесь баг был вроде в удалении триггера после вэйта я хз кто не знает про то, что надо кэш очищать и т.д. |
10.09.2008, 14:05 | #55
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
ну с одной стороны да с другой все рано или поздно устаревает и т.д. ты понял короче Цитата:
тока при дестройТригере? хм... Цитата:
хз) Цитата:
в смысле? |
||||
10.09.2008, 16:06 | #56
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
причём кеш ?
я сейчас напишу "ядро идеи" которые же написано и в самом первом топеге =)
грубо говоря есть 2 пути. хотя с своими большими условиями.
"Вар не коректно проверяет или текущих хендл/индекс был уже помещён в этот стек" тем самым "особым способом" можно его туда поместить. и мы получим баг о котором идёт здесь речь.
всё остальное фигня и личная интерпритация других людей. напр Сергей вообще об фигне начал потом писать которая логически очевидная и вовсем не являетьса проблемой как таковое =)
про сам баг...
он случалса (вплоть до не давно) в Доте и в других картах как напр AotZ (Advent of the Zenith) и многих других. т.. уберать с объектов ссылки незная точно что ты пишеш и как твои алгоритмы работают могут привести к подобным косякам. но конечно вам может и повезти и подобной проблемы у вас не появитьса. кеш здесь был упомянут лиш из за того что он не даёт ссылки на объект как это делаетьса напр глобальный или локальный массив / переменная.
вот и почти всё =)
"это баг системы выделения хендлов объектам" это очень приметивный баг который ОЧЕНЬ просто правитьса лиш проверкой на существование такого хендла в этом стеке... (что организовываетьса напр пометкой в спец хеш таблице на индекс этого хендла.) ну короче я подобные алгоритмы писал кучю раз и да если сделать не правильный алгоритм "уничтожения хендла" то может быть вот такая вот фигня.
а во кстати вспомнил... я даже придумал логическое объеснение (почти) этому в случие близз.
там действие было таковым...
удалялса объект
уничтожалса тригг вызывалось Х раз действиет TriggerSleepAction(0) фичя в том что слип екшен являетьса своего рода концом потока. и вар в конце тикущего выполнимого потока (напр) помещает все освободивщиешся хендлы в стек. (это доказываетьса тем что если уничтожить объект и сразу создать новый то ты получих не хендл уничтоженого а иной а если это же делать но тока в интервале 0.001 сек (непр) то будет всегда одинаковый хендл ну или использовать триггер слип екшен =)) дык вот фичя в том что каждый раз когда ты ставиш слип екшен то этот хендл помещаетьса в стек.
я вполне уверен что есть иные способы достичь этого же не используюя слип екшен. |
11.09.2008, 12:56 | #57
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
2, точнее 3) для этого и (ну может это фонарем вышло) короче структы в вЖасс ака паралельные массивы решают это
Цитата:
кста ти да, надо глянуть как освобождаются хендлы в одном потоке (создать, позрить хендл, удалить, обнулить, и создать в том же потоке) ды ппц, ты об этом же и написал Цитата:
ну хз, по идее надо вынудить движок "поместить свобод хендлы в стек" ADOLF добавил: я скажу более, если нам надо аттачить что то на хендл обьекта, удаление которого мы не контралируем - к примеру юнита нам достаточно пусть даже через кешь аттачить на него ид структуры, а членом этой структуры сделать самого юнита, это гарантирует то, что хендл не будет удален и потом через юнитТип мы сможем даже найти структуру и ремувнуть ее |
||
11.09.2008, 13:52 | #58
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sebra
offline
Опыт:
5,603Активность: |
Цитата:
Насколько я смог перевести это на русский, ты имеешь в виду, что хэндл может быть освобождён только при обязательном условии отсутствия на него ссылок. Думаю, другим обязательным условием освобождения хэндла является удаление объекта (принудительное или движком). Вы согласны, или считаете, возможен путь освобождения хэндла без удаления объекта? |
|
11.09.2008, 18:15 | #59
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
Цитата:
|
|
11.09.2008, 20:19 | #60
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|