собсно вопрос: каким способом можно реализовать такую систему - допустим на юнита использовано заклинание "невидимость", ему при этом дается способность "змеиная ловкость". нужно чтобы через 30 секунд "змеиная ловкость" удалилась из способностей данного юнита (грубо говоря нужно чтобы способность давалась юниту на время,а по истечении опр времени удалялась, при этом на карте у каждого игрока может быть по несколько таких юнитов, короч МУИ). сам пробовал через пики группы юнитов, но очень загружает игру, через массивы таймеров не допер как сделать, если кто знает подскажите как либо покажите на примере, буду благодарен :)
Вопрос остается открытым, ведь если бафф будет сдиспелен способность остается... хотел подредактировать вариант триггера Dragonear(см. картинку xgm.guru/files/100/146859/primer.jpg ) но не знаю нужной функции в джассе :)

Принятый ответ

Я бы на вашем месте использовал "Custom Script", то есть вставил локальные переменные на языке jass. Вышло бы приблизительно так:
Вот рабочий триггер. Никаких глобальных переменных. Работает со множествами игроков и юнитов. Не тормозит карту.
В условиях: (Ability being cast) равно "Здесь поставь способность которая применяется на юнита"
Описываю действия:
  1. Создаем локальную переменную юнита
  2. Даем юниту на которого применяется способность "Невидимость", способность "Змеиная ловкость"
  3. В локальную переменную юнита вписываем юнита на которого применена способность
  4. Ждем тридцать секунд, то есть столько времени, сколько у юнита будет доп. способность "Змеиная ловкость"
  5. По истечении времени забираем у юнита доп. способность "Змеиная ловкость"
В пятой строке 'AEev' - это код способности "Змеиная ловкость"
Если что-то не понятно - обращайся.
Напоминаю - триггер полностью играбельный!
К комментарию добавляю карту с рабочим триггером:
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
23
9 лет назад
Отредактирован Obelick
1
Создаешь 2 переменных: таймер(массив) и целочисленную(NUM, будем ее так называть)
При каждом касте невидимости делаешь NUM +1 и запускаешь таймер(NUM)
А, я не так тебя понял)
Вот короче, долго объяснять.
Загруженные файлы
2
11
9 лет назад
Отредактирован Dragonear
2
Я бы на вашем месте использовал "Custom Script", то есть вставил локальные переменные на языке jass. Вышло бы приблизительно так:
Вот рабочий триггер. Никаких глобальных переменных. Работает со множествами игроков и юнитов. Не тормозит карту.
В условиях: (Ability being cast) равно "Здесь поставь способность которая применяется на юнита"
Описываю действия:
  1. Создаем локальную переменную юнита
  2. Даем юниту на которого применяется способность "Невидимость", способность "Змеиная ловкость"
  3. В локальную переменную юнита вписываем юнита на которого применена способность
  4. Ждем тридцать секунд, то есть столько времени, сколько у юнита будет доп. способность "Змеиная ловкость"
  5. По истечении времени забираем у юнита доп. способность "Змеиная ловкость"
В пятой строке 'AEev' - это код способности "Змеиная ловкость"
Если что-то не понятно - обращайся.
Напоминаю - триггер полностью играбельный!
К комментарию добавляю карту с рабочим триггером:
Загруженные файлы
Принятый ответ
0
5
9 лет назад
0
хм, спасибо ребят,буду дома обязательно все проверю
0
11
9 лет назад
0
Не за что)
2
5
9 лет назад
2
спасибо все триггеры рабочие, но у Dragonear реально проще и лучше ) Спасибо
5
24
9 лет назад
Отредактирован prog
5
Castwork, проще то проще, но есть проблема... Нет сброса таймера - если на юнита два раза подряд скастовать способность, дающую дополнительную способность, то дополнительная способность пропадет после истечения первого таймера, а не второго.
Dragonear, да хоть до смерти заминусуйся, а описанная проблема сама никуда не денется.
1
15
9 лет назад
1
А если невидимость прерывается, уклонение же останется. Поэтому вариант с вейтом не очень.
0
24
9 лет назад
Отредактирован prog
0
По хорошему нужна система расширенных кастом данных (через параллельные массивы или через хештаблицу или через любое другое извращение), позволяющая привязать к юниту таймер и дополнительную информацию вроде того, какие дополнительные способности этому юниту выданы.
При обнаружении применения способности выдаем юниту дополнительную и запускаем таймер с небольшим периодом, который проверяет юнита и при необходимости удаляет дополнительную способность.
Я, кстати, делал такое и без привязки таймера к каждому юниту - через группу, которую перебирал пару раз в секунду. Естественно, в группу добавлялись только юниты, для которых была нужна проверка. работало шустро на очень старом железе. Правда дополнительные данные всеравно хранились в хештаблице - без них больше одной такой способности запаришься делать.
0
5
9 лет назад
0
Я, кстати, делал такое и без привязки таймера к каждому юниту - через группу, которую перебирал пару раз в секунду. Естественно, в группу добавлялись только юниты, для которых была нужна проверка. работало шустро на очень старом железе. Правда дополнительные данные всеравно хранились в хештаблице - без них больше одной такой способности запаришься делать.
prog, когда очень много юнитов возникают лаги. я проверял, именно из-за этого триггера, к сожалению :(
0
24
9 лет назад
Отредактирован prog
0
Castwork, просто много юнитов или много юнитов под воздействием особых способностей? Какие проверки делаются для каждого юнита в группе?
И главное, как реализован таймер? Через периодическое событие в ГУИ или через нормальный таймер в JASS?
Последний вопрос вызван тем, что у меня бывало так, что периодическое событие вызывало дикие лаги само по себе - без какой-либо начинки внутри, одним фактом своего присутствия. кажется, именно тогда я и начал всерьез учить jass ибо достало
0
5
9 лет назад
Отредактирован Castwork
0
prog, много юнитов под воздействием абилки и триггера.
таймер через периодическое событие ГУЙ
кажется тоже пора взяться за джасс :(
0
24
9 лет назад
Отредактирован prog
0
Castwork, кстати, если юнитов слишком много, их можно разделять в несколько групп на разных таймерах - помогает. Но у меня до этого дошло когда задействованных юнитов было несколько сотен и нужны были довольно тяжелые проверки с кучей математики.
Но учить jass это маст хев если нужно что-то, срабатывающее чаще чем раз в несколько секунд.
0
5
9 лет назад
0
prog, никак руки не доходят да и подходящего "учебника" не находил)
prog, а что на счет xgm.guru/files/100/146859/primer.jpg ? можно как-нибудь перегнать цикл с условием в джасс? тогда бы в теории все получилось)
0
24
9 лет назад
Отредактирован prog
0
Castwork, нужна возможность перегнать данные о юните внутрь таймера:
По хорошему нужна система расширенных кастом данных (через параллельные массивы или через хештаблицу или через любое другое извращение), позволяющая привязать к юниту таймер и дополнительную информацию вроде того, какие дополнительные способности этому юниту выданы.
Но на практике с большой вероятностью хватит простого перебора группы по одному таймеру т.к. таймер на jass работает куда шустрее периодических событий.

никак руки не доходят да и подходящего "учебника" не находил)
0
23
9 лет назад
0
Чего вы паритесь?) Какие расширения данных?) Проблема решается просто проверкой дебафа, если действует невидимость и удалением уклонения при самом касте.
0
11
9 лет назад
0
Плохо, что не очень хорошо разбираюсь в триггерах. Мои триггеры, обычно быстрые, но не всегда надежные) Что-бы сделать надежный триггер надо много проверять. А этот. Я думаю что вместо способности как-то надо наложить бафф. типа сделать невидимого пассивного юнита на карте, и при использовании заклинания, он перемещается в точку с юнитом и накладывает на него бафф. Никаких способностей. Но думаю, этот вариант ненадежен.
Как жаль, что мне еще долго учить эти триггеры
0
24
9 лет назад
0
Dragonear, увы, не все в варе можно сделать бафами. Сама по себе идея дамми-каста вполне надежна при грамотной реализации и часто используется, но в данном конкретном случае недостаточно просто наложить эффект - нужно еще отследить условия для снятия этого эффекта. И вот тут начинаются проблемы, связанные с ограниченностью движка. Решить их почти всегда можно, но достигается это либо ценой упрощения игровой механики либо ценой написания сложной системы на jass.
P.S. лучше бы второй старкрафт осваивали сразу. А еще лучше - на полноценные языки программирования и существующие движки, благо многие крупные движки в последнее время перешли на бесплатное распространение с оплатой в случае коммерческого использования, не говоря уже о тех, которые изначально полностью бесплатные и с открытым кодом.
2
28
9 лет назад
2
привязать к юниту таймер
лучше использовать 1 таймер а у юнита просто хранить время и при каждом тике таймера перебирать всех юнитов и уменьшать у каждого из них время
ибо при наличие 20 юнитов получается 20 таймеров и получаются лаги
а если таймер 1 то лагов нету(надо только учитывать что на 1 таймер поместится лишь 200 юнитов из за лимита потока)
Этот комментарий удален
0
24
9 лет назад
0
nvc123:
Если бы ты внимательно читал, то мог бы заметить, что во-первых простого уменьшения времени недостаточно - нужны еще дополнительные проверки на особые случаи, во-вторых использование одного таймера уже обсуждалось и в-третьих у автора пока нет знаний в области работы с jass, а гуишное периодическое событие у него вызывает лаги при большом кол-ве юнитов.
0
11
9 лет назад
0
можно создать массив юнитов и таймеров. Каждый номер переменной из массива таймера равен номеру юнита из массива юнитов. Чтобы проверять заклинание дебаффа можно сделать цикл на каждую секунду проверку каждого юнита, если на него наложена способлность "змеиная ловкость".
немного криво пояснил свой вариант
не уверен что этот вариант хороший
0
24
9 лет назад
0
Dragonear, называется параллельные массивы, но для привязки они сами по себе не годятся т.к. таймер в момент срабатывания знает только себя и придется по массиву пройтись линейным поиском чтобы найти номер таймера в массиве, а потом по этому таймеру найти юнита. Вот для расширения кастом данных самое то - вешаем в Custom Data юнита номер его ячейки в массиве и любой, кто знает юнита, может моментально получить доступ ко всем дополнительным кастом данным этого юнита.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.