Это обобщенная система, какие проблемы могут возникнуть:
У твоих декораций должна быть одна вариация. Ибо мы не сможем узнать, какая там вариация стоит.
Декорации должны быть под одним углом (не должны вращаться), ибо получить угол поворота нам редактор тоже не дает (как минимум триггерно, мб в нативках такое что-то есть)
Тоже самое и про масштаб.
Могут возникнуть проблемы из-за путей, смещения декораций, о чем говорил rsfghd, нужно центрировать целевые точки, чтобы они были кратны 32, как и смещения.
Вот тебе максимально простейшая система копирования декораций из одной области в другую (не идеальная). Главное чтобы ты понял принцип.
Прикрепил карту, можешь скачать и посмотреть.
Суть:
Устанавливаем область откуда копировать и куда копировать. На самом деле нам важны только:
Область откуда копируем, точка центра относительно от которой будем строить композицию, и целевую точку центра, куда поставить декорации.
Далее запускаю триггер копирования.
Триггер копирования просто выделяет весь декор из области и создает такой-же в точке с оффсетом (это смещение декорации от центра области).
По формулам можешь посмотреть и разберешься.
Потом можешь просто менять области и точки, и снова запускать триггер и все скопирует снова. В иницализации я несколько раз его запустил и заспавнил 3 стены так:
ScorpioT1000, она работает слегка криво + по камере. А как я понял, автору нужно, чтобы музыка менялась по событию перемещения героя в области, и не важно куда будет смотреть камера.
Но тоже как еще вариант решения.
Думаю так было бы правильнее, ну или если дата уже прошла, то чтобы писало "Ресурс был запланирован и опубликован 17.04.2024 23:00". Это хоть не сбивает столку даже если наводишься на подсказку.
Учитывая все плюсы и минусы разных подходов, думаю, лучшим путем будет запускать именно музыку (не звук) со случайным оффсетом (кроме первого попадания в локацию, тогда запуск с самого начала), отключая старую музыку с фейдом. Это максимально простой вариант, который не будет мешать пользователю отключать музыку, или каждый раз запускаться с самого начала.
Единственный минус - при переходе из локации в другую и обратно, музыка будет продолжаться не в том месте, как ожидалось (но опять же, если игрок туда-сюда переходит в течении 5 сек и только тогда это будет заметно).
Можно все-же использовать таймер для оффсета для улучшения пользовательского опыта, но который будет сбиваться при заходе в менюшки (профита чуть больше но запары в разы больше).
ssbbssc, так-же nazarpunk уже тебе подсказал, что время, которое ты рандомишь в событии, зарандомится в начале игры и будет одинаковое в течении всей игры. Если хочешь чтобы время было каждый раз разное - запускай задержку через таймер.
Событие - таймер А истек.
Действие - в конце запустить таймер А со временем (случайное число от 0.9 до 4)
ssbbssc, используй не офсет смещение, а полярное смещение, где указываешь радиус (расстояние) 1750 и рандомный угол. Иначе у тебя почти все мобы будут приходить с одной стороны. Да и в целом изначально делай спавн со смещением от точки героя по полярным координатам, и не придется перепроверять, а где та самая точка.
В целом этот функционал очень фоновый, и если система будет отставать из-за пауз в меню, думаю это не сильно повлияет на пользовательский опыт. Ну запуститься музыка не с 50 секунды а с 20 (30 сек в меню посидел). Сильно это на итоговый игровой опыт не повлияет. Главное каждый раз с нуля не будет запускаться - вот такое будет гораздо заметнее, чем продолжение не с той секунды.
rsfghd, тогда через системное время с периодиком на проверку разницы можно обойти эту проблему. Если делать немного грубую систему, не идеальную, но главное будет работать.
Технически это возможно, но придется запариться с системой.
Есть запуск музыки с указанной точки - но проблема в том, что нет проверки, на каком моменте мы стопаем музыку. Мб есть какие-то нативки в коде, но это уже надо копать.
Как вариант - запускать параллельно таймер, который будет отслеживать длительность звука, и который сам будет музыку перезапускать после окончания. И за счет этого таймера можно будет сохранять время остановки в переменную. А потом продолжать с точки, сохраненной прошлый раз в переменную.
Crick12,
тогда периодик твой выбор с сохраннением юнита, пока способка работает. То есть отдаешь приказ, запускается триггер с периодиком. Отдаешь другой приказ - отменив целевой, а значит выключаем триггер с периодиком. Так-же после срабатывания способки в периодике, он сам себя выключает.
В таком случае периодик будет работать только тогда, когда есть нужный приказ. Для контроля в периодике еще можешь проверять приказ, если отменили каким-то образом - выключаешь периодик.
Эээээх еще бы понять, что ты написал... Ты написал полу решение какой-то непонятной задачи без описания задачи. Если хочешь лучший ответ - опиши так, чтобы люди тебя смогли полностью понять, в чем у тебя проблема. В чем изначальная суть задачи, как ты сейчас реализовал (желательно со скрином тригегра/кода) и какая проблема у тебя возникла. Я на все 3 вопроса увидел только половину информации, либо плохо тебя понял.
Но из того что понял, ты в какой-то момент отдаешь приказ действия на цель, но действие произойдет через N секунд, когда юнит добежит, и еще ты можешь отдать такой-же приказ когда он войдет в область, где сделает это действие, и ты не хочешь, чтобы второй раз отдавался такой приказ при входе? Или ты хочешь отследить, когда он начнет делать то самое действие на цель?
Даже если не так понял, может несколько путей дадут тебе идею для решения:
Добавить юнита в события или условия для триггера. Типа юнит был атакован и вставляем условие "ЭТОТ юнит" == "атакующий юнит". То есть будет проверка на конкретного юнита, чтобы отследить начало его действия (события триггера может быть любое, смотря что тебе надо отследить, юз способки, вход в регион и тд, главно привязка к конкретному юниту).
Добавить юнита в группу или переменную, чтобы сохранить его. Далее через события нужного действия можешь проверять, является ли триггерный юнит из этой группы и дальше можешь его обрабатывать, и когда с ним закончишь, удалишь из группы или очистишь переменную.
Схожее с прошлым решением, когда добавляешь юнита в группу и периодиком всех в группе проверяешь, что юниты действуют как тебе надо, либо перебиваешь приказ на нужный.
А и да... А разве при входе в область не проще проверить на нужный приказ, чем проверять периодично (к примеру раз в секунду) у какой-то группы юнитов приказы?
EugeAl, O(n) в программировании обозначает сложность (или время) алгоритма, что в данном случае говорит о выполнении n операций для нахождения. К примеру плохим временм будет O(n*n) для таких поисков (это как цикл в цикле, только зачем так делать для поиска, это вопрос, но кто-то может сделать), или O(2*n). Идеал - это O(1), 1 операция для проверки без циклов.
Ред. konvan5
» WarCraft 3 / Генератор декораций.
Ред. konvan5
» WarCraft 3 / Генератор декораций.
Прикрепил карту, можешь скачать и посмотреть.
Суть:
Устанавливаем область откуда копировать и куда копировать. На самом деле нам важны только:
Область откуда копируем, точка центра относительно от которой будем строить композицию, и целевую точку центра, куда поставить декорации.
Далее запускаю триггер копирования.
По формулам можешь посмотреть и разберешься.
» Администрация XGM / Ифнормация о планировании
Ред. konvan5
» WarCraft 3 / Проигрывание разной музыки в разных локациях
Но тоже как еще вариант решения.
» Администрация XGM / Ифнормация о планировании
» WarCraft 3 / Проигрывание разной музыки в разных локациях
Единственный минус - при переходе из локации в другую и обратно, музыка будет продолжаться не в том месте, как ожидалось (но опять же, если игрок туда-сюда переходит в течении 5 сек и только тогда это будет заметно).
Можно все-же использовать таймер для оффсета для улучшения пользовательского опыта, но который будет сбиваться при заходе в менюшки (профита чуть больше но запары в разы больше).
» WarCraft 3 / Проигрывание разной музыки в разных локациях
С такой системой игроку придется заслушаться композицией насильно XD
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Точка за пределами камеры
Событие - таймер А истек.
Действие - в конце запустить таймер А со временем (случайное число от 0.9 до 4)
Ред. konvan5
» WarCraft 3 / Точка за пределами камеры
» WarCraft 3 / Точка за пределами камеры
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
» WarCraft 3 / Проигрывание разной музыки в разных локациях
Есть запуск музыки с указанной точки - но проблема в том, что нет проверки, на каком моменте мы стопаем музыку. Мб есть какие-то нативки в коде, но это уже надо копать.
Как вариант - запускать параллельно таймер, который будет отслеживать длительность звука, и который сам будет музыку перезапускать после окончания. И за счет этого таймера можно будет сохранять время остановки в переменную. А потом продолжать с точки, сохраненной прошлый раз в переменную.
» WarCraft 3 / Стихийные мечи
» WarCraft 3 / Как правильно использовать boolexpr?
» WarCraft 3 / Как правильно использовать boolexpr?
Ред. konvan5
» WarCraft 3 / Проверка наличия приказа
тогда периодик твой выбор с сохраннением юнита, пока способка работает. То есть отдаешь приказ, запускается триггер с периодиком. Отдаешь другой приказ - отменив целевой, а значит выключаем триггер с периодиком. Так-же после срабатывания способки в периодике, он сам себя выключает.
В таком случае периодик будет работать только тогда, когда есть нужный приказ. Для контроля в периодике еще можешь проверять приказ, если отменили каким-то образом - выключаешь периодик.
Ред. konvan5
» WarCraft 3 / Проверка наличия приказа
Но из того что понял, ты в какой-то момент отдаешь приказ действия на цель, но действие произойдет через N секунд, когда юнит добежит, и еще ты можешь отдать такой-же приказ когда он войдет в область, где сделает это действие, и ты не хочешь, чтобы второй раз отдавался такой приказ при входе? Или ты хочешь отследить, когда он начнет делать то самое действие на цель?
Даже если не так понял, может несколько путей дадут тебе идею для решения:
Можно.
» WarCraft 3 / Шахматы варкрафт 3
Ред. konvan5
» WarCraft 3 / Как правильно использовать boolexpr?