nazarpunk, я уверен, алгоритм можно оптимизировать. Осталось узнать, как там для каждого нового таймера передать аргумент в функцию. Вроде в стандартном джассе этого нет. vjass и другие инструменты и библиотеки я не рассматриваю для этой наработки.
Valentine, еще смущает, что ты используешь конкретные переменные на конкретного юнита. Мб из-за сейва они сбиваются. Делай способки в целом на применение от любого юнита. Попробуй тестануть у себя такой вариант, вместо 1 события сделай 2-рое событие как на скрине:
LastUchiha, а так я сделал работу с массивом как и описывал ниже. Там еще есть пару моментов, как тот-же фильтр, туда нельзя передать напрямую индекс, по которому ему надо проверять. Для этого используем глобальную переменную LastI.
LastUchiha, ну вот, у тебя тут была самая главная проблема, что есть таймер для каждого каста свой, и после каждого исхода таймера надо находить, какой там таймер закончился. С помощью цикла проходимся по ним, находим и выполняем действия с данными под индексом данного таймера.
При касте создаем таймер, группу и тд записываем в массив. Когда абилка закончила свое действие - удаляем таймер, группу и тд, а массив смещаем, чтобы не было пустых элементов.
Можно теперь юзать способку хоть 10 юнитов, хоть 100, пока движок варика не помрет от каста стольких абилок сразу :D
TowLaptev, я сам ИИ не разрабатывал, но попробуй почитать эту статейку, мб она поможет тебе правильно отредактировать ИИ.
Я думаю, что тебе надо открыть стандартный ИИ и разобрать, как он работает, найти эти условия с одним вторым третьим героем... Надо покопаться в файлах и найти эти ИИ.
Мб переписать этот ИИ, ибо видимо там заложено условие, что дальше развитие должно пойти после найма 2 героя. А так, как ты ограничил найм внешне, он не может это сделать и стопорится, бесконечно ждет второго героя.
мммм, а в чем проблема?)
Сделаем абилку, которая будет хилять юнита (кастующего) каждую секунду на 10 хп а противника (цель) уменьшать хп на 10 в секунду в течении 5 секунд.
Ну как вариант:
Создаем массивы всех данных, что использует твоя способка, к примеру Heroes, Targets, Times
Создаем переменную, означающую количество активных способок ACount
Далее 2 варианта сохранения и удаления данных из массива. А именно, когда абилка завершила свое действие, надо удалить ее данные из массива. Что делаем с остальными абилками идущими после этого индекса? Если ничего, то остается пустое место в середине массива, куда сможем записать новую абилку. Либо лучше сместить все данные после текущей абилки влево, закрыв пустое место и уменьшив счетчик ACount.
Тут как раз таки главная проблема в том, как ты будешь ориентироваться и находить данные этой способки в течении всего жизненного цикла ее, чтобы не потерять связь между этими данными.
Как один из вариантов, будем сдвигать все данные влево при уничтожении абилки. Использую псевдокод чтобы был понятен смысл и мне лень вспоминать какие там функции в варике и как они выглядят.
При касте способки сохраняем все данные в массив под индексом ACount + 1:
Далее будет какой-то глобальный таймер или событие "каждую секунду" запускающий триггер:
цикл для i от 1 до ACount делаем
Если Heroes[i] жив и Target[i] жив то
устанавливаем хп Target[i] на Target[i] - 10.
устанавливаем хп Heroes[i] на Heroes[i] + 10.
устанавливаем время Times[i] = Times[i] - 1
Иначе
Times[i] = 0
Далее надо сместить (удалить) все способки, что закончили свое действие. В этом же триггере:
free = -1 // индекс свободной ячейки
цикл для i от 1 до ACount делаем
если Times[i] == 0 то
если free < 0 то
free = i
иначе
если free > 0 то
Heroes[free] = Heroes[i]
Targets[free] = Targets[i]
Times[free] = Times[i]
free = free + 1
конец цикла
Если free > 0 то
ACount = free - 1
Если тебе нужно будет в какой-то момент получить данные способки, просто ищем этого юнита в массиве Heroes[] и далее используй тот-же индекс для получения остальных данных из других массивов. Усе.
Можно еще добавить про "правильное" очищение ссылок переменных но это уже вопрос оптимизации.
И да, хэштаблицу проще использовать, чем параллельные массивы данных. Но я постарался ответить именно на твой вопрос с примером, как можно было бы сделать и оно будет работать.
Какой ты хочешь ответ на вопрос "У меня не работает, что делать?". Ну сделай так, чтобы работало :D
Поисследуй, что именно у тебя ломается после загрузки. Не все же способки ломаются а некоторые?
А еще лучше, если ты выложишь карту с указанными способками, чтобы могли посмотреть код, потестить, найти причину. Можно даже вынести способки на отдельную пустую карту если не хочешь палить свою карту.
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
Ред. konvan5
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
» WarCraft 3 / Сбрасываются триггерные способности
» WarCraft 3 / Сбрасываются триггерные способности
Это же реф верно?
» Аниме / Хентай игра Adventurer Trainer [PastryIRL] - 100% прохождения
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
Ред. konvan5
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
При касте создаем таймер, группу и тд записываем в массив. Когда абилка закончила свое действие - удаляем таймер, группу и тд, а массив смещаем, чтобы не было пустых элементов.
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
» WarCraft 3 / Как обойти проблему, что ИИ в сражении стопорится в развитии, если ограничить подготовку героев до 1
Я думаю, что тебе надо открыть стандартный ИИ и разобрать, как он работает, найти эти условия с одним вторым третьим героем... Надо покопаться в файлах и найти эти ИИ.
Ред. konvan5
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
Ну и скинь сюда эту карту с такой абилкой.
» WarCraft 3 / Как обойти проблему, что ИИ в сражении стопорится в развитии, если ограничить подготовку героев до 1
Ред. konvan5
» WarCraft 3 / Как сделать MUI через глобалки? - [Jass]
Сделаем абилку, которая будет хилять юнита (кастующего) каждую секунду на 10 хп а противника (цель) уменьшать хп на 10 в секунду в течении 5 секунд.
Ну как вариант:
Тут как раз таки главная проблема в том, как ты будешь ориентироваться и находить данные этой способки в течении всего жизненного цикла ее, чтобы не потерять связь между этими данными.
Как один из вариантов, будем сдвигать все данные влево при уничтожении абилки.
Использую псевдокод чтобы был понятен смысл и мне лень вспоминать какие там функции в варике и как они выглядят.
» WarCraft 3 / Декорации лагеря гноллов
» WarCraft 3 / Прерывание внутри триггера
Ред. konvan5
» WarCraft 3 / Batle for Quel'Thalas
А также:
Попробуй защитить солнечный колодец, или воскресить в нём лича Кел'Тузада, или возродить империю Амани.
» WarCraft 3 / Прерывание внутри триггера
» Аниме / Хентай игра Adventurer Trainer [PastryIRL] - 100% прохождения
Ред. konvan5
» WarCraft 3 / Пак моделей из игр на движке Gold Source.
» Гильдия «Черамор» / Стальная эпоха | 7 Days To Die (s02-e13)
» WarCraft 3 / Сбрасываются триггерные способности
» WarCraft 3 / Сбрасываются триггерные способности
Поисследуй, что именно у тебя ломается после загрузки. Не все же способки ломаются а некоторые?
А еще лучше, если ты выложишь карту с указанными способками, чтобы могли посмотреть код, потестить, найти причину. Можно даже вынести способки на отдельную пустую карту если не хочешь палить свою карту.
» WarCraft 3 / Главное меню "Горящий McDonald's в Лос-Анджелесе"
» Гильдия «Черамор» / Выход в бетон | 7 Days To Die (s02-e09)