XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Elisar

offline
Опыт: 2,031
Активность:
Воскрешение деревьев
Итак,задача скорее всего наипростейшая но т.к. опыта у меня маловато требуется помощь.

что бы никого не мучать объясню)
событие триггера - это смерть destructable в регионе "trees";
далее идет проверка та ли это destructable - тоесть дерево ли;
действия:
записывает в локалки координаты только что умершего дерева, а так же само дерево, как destructable, что бы потом удалить;
ждем 5 сек(это тестовый режим)
далее булиновской переменной назначается 1 и удаляется дерево от которого остался лишь пенек(булин тут для того что бы он повторно не включал триггер по событию destructable-умер из-за Remove)
и под конец действие создает новое дерево по ранее записанным координатам.

все хорошо и корректно работает)за исключением того что созданные триггерно деревья не попадают под событие(destructable в регионе "trees" - умирает),тоесть если их убить уже новые не появятся..почему и как профиксить?
это и есть вопрос с которым я сюда пишу прошу помочь.
Старый 09.02.2008, 16:39
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Попробуй отлавливать событие смерти любого дерева, а потом вручную проверять координаты. Собитие смерти в регионе видимо срабатывает только, если деревья были созданы до создания региона...
Старый 09.02.2008, 17:34
Elisar

offline
Опыт: 2,031
Активность:
exploder, спс за совет,но он не работает..
посмотри в эвентах в триггер эдиторе там на destrutable есть только 2 типа событий,1 из них на конкретуную destructable(из переменной, либо указать на карте),а другой это destractable в регионе..
в первом случае это ж сколько переменных надо на все деревья..думаю его стоит использовать на всяческие ворота и т.п. главное что бы не много их было.
а второй случай я и задействовал..хотя не знаю может в jass есть другое событие?очень на это найдеюсь...

Elisar добавил:
хотя я щас подумал вариант пересоздания региона на тех же местах после создания нового дерева но он какой то не рациональный вроде бы;(
Старый 09.02.2008, 17:56
S

offline
Опыт: 43,833
Активность:
Как вариант - ведь все деструктаблы записываются например как 0001-0002-0003? Тогда мона на джассе - в событии создавать цикл, в котором будут перечисляться все деревья, НО - для этого вначале придется создавать сначала деревья а потом весь остальной декор.
Старый 09.02.2008, 18:04
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Как вариант, при смерти дерева регионе добовлять его в массив и каждые Х секунд (периодический таймер) проверять каждое дерево в массиве мертво/немертво, если мертво то ремувить и создавать новое. Но тут возникает "шероховатость" - все деревья убитые за интервал Х, будут восстанавливаться одновременно...

Отредактировано exploder, 09.02.2008 в 18:13.
Старый 09.02.2008, 18:07
Elisar

offline
Опыт: 2,031
Активность:
Sasha,ну дело в том что карта уже сделана=)просто раньше вопрос спелла кипера призыв деревьев никого не волновал т.к. были более крупные недочеты, а щас вроде все устаканилось вот и решил сделать..да и будет ли такой вариант универсален?ведь новосозданные декоры будут идти уже с следующим порядковым номером)и цикл не будет подходить к ним,а желательно сделать триггер универсальным

Elisar добавил:
exploder,да и кроме этой шероховатости(которая в принципе особо не мешает) получается что будет массив достаточно емкий и цикл большой думаю это обеспечит тормоза раз в "периодик" эвент тайм...вообщем щас попробую реализовать этот вариант=)

Отредактировано Elisar, 09.02.2008 в 18:25.
Старый 09.02.2008, 18:17
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Elisar, ну например в той же доте деревья ресаются раз в 15 минут (а может уже и раньше)...

exploder добавил:
Elisar, кстати деревья можно не создавать заново:
Код:
native DestructableRestoreLife (destructable d, real life, boolean birth) returns nothing


exploder добавил:
Тогда проблема отпадает сама собой)

exploder добавил:
Поправь исходный триггер - убери вейт и сделай не пересоздание деревьев, а резурект уже существующих.
Старый 09.02.2008, 18:29
Elisar

offline
Опыт: 2,031
Активность:
exploder,а все спс)разобрался))stupid.gif над было внимательней смотреть)позже выложу рабочий код если кому вдруг надо.

Elisar добавил:


вот и итог..единственное неудобство что в 1 регионе он считает до 64 декоров,тоесть взять "entire map" нельзя и нужно делать N количество регионов на все деревья на карте и соответственно N количество событий в триггере=)
Старый 09.02.2008, 18:50
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Еще недостаток, пока триггер "ждет", он не будет обрабатывать последующие смерти деревьев, так что тут нужно запускать таймер.
Старый 09.02.2008, 18:54
Elisar

offline
Опыт: 2,031
Активность:
будет)ну покрайней мере при смерти одновременно 4х деревьев он всех их и восстанавливает...щас попробую сделать вейт больше кулдауна)

Elisar добавил:
да все работает)тестил...

Elisar добавил:
осталось что б кто нибудь подсказал в плане оптимизации..вдруг что не так)
Старый 09.02.2008, 19:06
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
да все работает)тестил...

Да да, все должно работать, я просто не обратил внимания, что я использовал глобалку для хранения дерева)

exploder добавил:
Цитата:
осталось что б кто нибудь подсказал в плане оптимизации..вдруг что не так)

Добавь в конце триггера
Код:
set de = null
Старый 09.02.2008, 19:10
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Собитие смерти в регионе видимо срабатывает только, если деревья были созданы до создания региона...

насколько мне помниться срабатывает на определенное количество декораций в регионе (кажеться 64) т.е. как вариант попробовать просто дробить регионы... ну это если делать по событию просто смерти деструба в ректе. хотя точно непомню)
Старый 10.02.2008, 11:52
Elisar

offline
Опыт: 2,031
Активность:
ADOLF,неа)в том и дело)пытался по разному даже пересчитывал деревья...думал может это те что новые создаются и выходят за предел 64 нифига))новосозданные не попадают под событие..
Старый 11.02.2008, 18:43
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
ADOLF ага
Elisar я как-то по-левому сделал, у меня тупо раз в н секунд воскрешаются все деревья
без проблем зато со всякими регионами и т д
Старый 11.02.2008, 18:54
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
ппц ааа сколько бреда, Resurrect destructable если не надо создавать новый совершенно тип декораций..
Иначе можно написать системку с динамическими триггерами

Отредактировано FellGuard, 11.02.2008 в 19:14.
Старый 11.02.2008, 19:08
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
а теперь поведай друг что ты имел ввиду?)
Старый 11.02.2008, 19:11
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
то и имел, recreate destructable есть зло по определению, use DestructableRestoreLife
Старый 11.02.2008, 19:13
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
а написано что-то другое несколькими постами выше, например у меня или у exploder, Elisar
Старый 11.02.2008, 19:15
Elisar

offline
Опыт: 2,031
Активность:
FellGuard,))не,прост я сначала не досмотрел по списку до действия ресурект)а так бы и писать не пришлось...
Garret,ну представь кипер вызывает своих "духов леса" а убитый лес через секунду восстанавливается т.к. триггер пришел в действие^_^вероятность не большая но есть,и умножается еще на количество применений способностей...вообщем меня полностью устраивает мой вариант :р


да что б не создавать новую темку...подскажите кто нибудь а заметно ли будет грузить комп массив integer с [2200] макс индексом?:D...это просто из формулы (x*11y) - в пределах x=1-10 а y=1-20 по этой формуле не будет ни 1 совпадения итоговых чисел зато максимальное будет 2200...если Y увеличить эти 2200 тож будут увеличиваться..

кстати буду рад если кто подскажет более гуманную формулу для тех же результатов(на поле Х=1-10 и Y=1-20 не должно быть повторов чисел при неизвестных переменных...тоесть чисто формулы)
===================================================================
пардон=)повторы чисел есть...ищу др формулу=(
===================================================================
а вот и она:

((x*21)+(y+21)) - варовская версия собсна)массив булинов получается размером 250-300...оперировать формулой возможно прибавля/вычитая N к/из x либо y)

Отредактировано Elisar, 16.02.2008 в 01:20.
Старый 15.02.2008, 01:17
YellowStar
poon
offline
Опыт: 15,144
Активность:
Лучше простой вейт не использовать. Выбор за гейм тайм ;)
Старый 22.02.2008, 14:31
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 07:07.