Просто есть пару типов неуязвимости, и внезапно неуязвимость не спасает от гибели. Я делал кастомный посох спасения в своей карте, и представляете, юниты дохнут от яда будучи неуязвимыми.
Ну и по стандартной механике, юнит неуязвим не сразу, а как улетит в место назначения.
Taurenus, базовые вещи вроде синтаксиса языка объяснять подробно, на пальцах - зашквар. Должен прочитать и сам пробовать, там четко и ясно указано, что как и почему. Потом уже думать об алгоритмах и прочем.
Делать за тебя - толку, чемту ты научишся? Это не мы плохие и жадные, просто вас уже очень много, нубья (уж простите меня), которые карты делают тям\ляп а потом лагает, багает, вылетает... Ты не захочешь - никто не захочет, базовая инфа есть, начинай по немногу, я вот изумляюсь вашему упорству сделать супер-пупер спел, зачем?
Делайте все по минимуму и самые простые вещи, разбирайтесь, переходите к более сложным.
Для начала создай дамми юнита и прикажи ему кинуть некоторый спелл. Покажи код тут.
Extremator, смотрел реализацию в дотке фрога? Там и 1 в 1 анимация подобрана, и стан сделан как у оригинала, чтобы работало на невидимок и линку не активировало.
Там довольно сложная система, если хочется без багов, ибо стандартные шипы неруба - делают врагов неуязвимыми, поэтому в доте кроме доисторических версий сделан кастомный аналог, причем довольно умело - могу вытащить.
Ну есть триггерное действие - установить максимум юнитов доступных для покупки, подготвки. При покупке героя, устанавливается лимит на 0, и для игрока герой пропадает в таверне.
Если героев много и у них полно нестандартных способностей, имеет смысл продавать в таверне дамми юнитов или преметы, т.к их создание не требует таких ресурсов как создание героя, а данные героя потом подргужать постепенно и создать героя кодом с задержкой, это поможет избавится от лагов при выборе героя (инвокера в доте вспомните).
Баг заключается что при вручении\удалении спеллбука происходит пересчет всех абилок, на фрейм они удаляются и добавляются снова, но из за бага абилки на здоровье удаляются дважды (точнее движок снимает бонус хп дважды, считая что абилка удаленная у юнита еще и удалилась у спелбука, т.е удалено 2 абилки) таким образом, у юнита становится максимум хп в 0 ед. и он умирает.
Yury13, Ну так ты проверять что в массиве не пустое место, не обязательно удалять юнита из массива, достаточно создать юнита и поместить его в группу, потом при выборе нового юнита из массива, проверить нет ли такого ид в группе юнитов, если есть, то искать снова, и так далее, ну и навсякий случай счетчик, если раз 10 не получилось, то создать конкретного.
Это работает локально лишь у тебя, когда этот файл в папке с варом. По хорошему нужно либо в игровых константах искать, либо юзать сторонний софт который умеет изменять хоткеии на лету.
Ельнур, а зачем тебе вовсе все это надо, если даже жасс сложно, мб гуи, простенькие дамми касты и все такое. конфетные войны, замок скиби - годные карты сделанные на гуи. Будет пахать на всех версиях в придачу.
ScorpioT1000, я чето больше доверяю людям которые сейчас работают, а не тогда, когда еще писали что ХТ супер медленные и там про таймер експлоит что топ, на деле оказалось что нет. Пруфы кстати приводили, и старые методики вроде посмотреть какой способ лагает меньше в игре, тот и быстрее - тоже оказались не корректными.
prog, про луа будем говорить когда будет разбор полетов на английском хотя-бы, что они и как сделали. Кто их знает, но про то что у них там не та реализайция и тормазнутее в разы - я уже слышал, сам на эту тему спорить не буду, поживем - увидим.
Почему ссыллки на старые темы все упали? На форуме ничего уже не почитать?
prog, В том то и дело, что сделали по минимуму, точнее просто свой интерпретатор по апи языка, на одну и ту же вирутальную машину. Но пока слухи, и перевод с китайского сленга -не читаем после гугл переводчика, позже если на хайве всплывет то уже и будем говорить что они сделали. Ссылку где обсирали луа китаезы и разбирали код игры дестабилизированный есть у анрайза.
prog, Бред, драколич и анрайз доказали обратное, у них одно адресное пространство, вовсе эти обьекты в вируальной машине практически не отличаются, ибо там можно создавать и удалять переменные на лету, поэтому нет никакой разницы. Чтение значения напрямую быстрее чем через переменную, речь идет о интерпретируемых языках а не о компилируемых.
Ну либо вариант описанный выше prog,, либо сделать 2 способности, с одиаковым описанием но вторая не активна (что то требует) и менять их местами с помощью кода, удалять одну и вручать другую. Чтобы сохранялся кулдаун и прочие параметры - можно использовать способность "Aneg' - техника, меняя её уровни свапать ей 2 абилки, но работает она лишь у героев (у не героев фаталит при вручении).
Стас Орлов, мда, Тебе бы как следует статьи почитать на эту тему, ниче ты не понимаешь, даже как твоя способность должна работать.
Для начала нужен триггер с событием - юнит приводит способность в действие, ну и условие как ты правильно заметил что это нужная способность.
Далее в действиях этого триггера уже и нужно делать то, что тебя нужно от спелла.
У одного триггера может быть бесчисленное количество разных событий, условий и действий.
Ты хочешь щит на блок урона, это считай кастомный бафф. (все баффы способностей и есть внутри игровые триггеры, но описаны внутри движка), т.к ни одна из стандартных способностей тебя не устраивает - твоя задача на языке JASS описать кастомный бафф который тебя устроит.
Что нам нужно, ну во первых нам нужно узнать когда юнит получил урон, верно? создаем новый триггер и записываем на него через хт юнита, вешаем на триггер событие что юнит получил урон, далее нам нужно узнать что способность.
Так же не мешает узнать случаи альтернативного завершения способности, яркий пример - юнит умер, щит рассеили.
Ну и соответствующие действия.
Тут много тонкостей по которые лучше почитать в статьях.
У твоего триггера события нету, у тебя же нет отдельной ситсмы как у меня в карте которая следит за всеми юнитами на карте и когда они кастуют спеллы ищет в бд фунцию спелла и вызвает её. Так что все ручками, дебаг сообщения так же не мешает сделать.
У тебя ошибка, фукнкцию которую ты хочешь вызвать должна находится выше места вызова.
Unholy_Shield_End должна быть описана выше чем Sosdanie_Shita_Act1
Ну и вовсе, тебе нужен не хендл ид юнита а таймера,ибо сохранять ты данные должен на таймер а не на юнита, когда таймер истечет и вызовет функцию, внутри этой функции у тебя будет работать функция GetExpiredTimer() - которая вернет тот таймер, который запустил эту функцию, это единственный обьект связывающий твой триггер и функцию Unholy_Shield_End, и разумеется GetTriggerUnit() - не будет работать в потоке таймера, т.к это функция реакция на событие триггера. Ты походу копипастишь код совершенно не вникая в принципы его работы.
Структуры куда ведется запись данных чтобы передавать их между потоками таймера \ триггеров.
Ну пока не морочь голову конкретными функциями и стилистикой написания кода, твоя задача понять базовый алгоритм.
Что сперва ты ждешь пока юнит применит скилл, ты записываешь в хештаблицу этого юнита, все нужные данные, а так же создаешь для него отдельный триггер, которому ставишь события, что юнит умер, юнит получает урон, время вышло, ну добавляешь триггеру условия, действия, где производишь манипуляции с юнитом в зависмости от события, на которое сработал триггер.
При уроне выше 0 и от нужных тебе юнитов, вручаешь юниту способность на 100500 хп (в моем случае я сделал способность с ро кодом 'Amhp' на 150000 хп), записываешь в хештаблицу кол-во здоровья перед ударом, и запускаешь таймер на 0.00 секунд, как он кончится, удаляешь способность и разумеется устанавливаешь хп - сколько было.
В коде это хорошо видно. На всякие там фишечки и визуалки не обращай внимания тебе еще рано.
Возможны и другие реализации когда один триггер обслуживает сразу множество юнитов, к примеру отвечает за каку-нибудь пассивку на атаку вроде крита или баша (кастомного), у крипов коих десятки. Да такие варианты лучше, но они гораздо сложнее, и я не советую начинающим рассматривать их.
» WarCraft 3 / Механика посоха спасения
» WarCraft 3 / Отследить нажатие кнопки "Строительство"
» WarCraft 3 / Помогите с Jass (novic)
Делать за тебя - толку, чемту ты научишся? Это не мы плохие и жадные, просто вас уже очень много, нубья (уж простите меня), которые карты делают тям\ляп а потом лагает, багает, вылетает... Ты не захочешь - никто не захочет, базовая инфа есть, начинай по немногу, я вот изумляюсь вашему упорству сделать супер-пупер спел, зачем?
Делайте все по минимуму и самые простые вещи, разбирайтесь, переходите к более сложным.
» WarCraft 3 / Помогите с Jass (novic)
» WarCraft 3 / Помогите с Jass (novic)
» WarCraft 3 / Помогите с Jass (novic)
» WarCraft 3 / Ульт тайдхантера из доты
» WarCraft 3 / Ульт тайдхантера из доты
» WarCraft 3 / Таверна и Герои в ней
Если героев много и у них полно нестандартных способностей, имеет смысл продавать в таверне дамми юнитов или преметы, т.к их создание не требует таких ресурсов как создание героя, а данные героя потом подргужать постепенно и создать героя кодом с задержкой, это поможет избавится от лагов при выборе героя (инвокера в доте вспомните).
» WarCraft 3 / Юнит умирает при срабатывании триггера
» WarCraft 3 / Создание юнитов
» WarCraft 3 / Редактирование приказов
» WarCraft 3 / Анимация при создании юнита
» WarCraft 3 / Hash в луа
» WarCraft 3 / Запрет на использование способности при условии
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / конверт ордер defend в луа
В гуях укажи эту абилку, а потом конвертни в код скопируй рокод абилки.
» WarCraft 3 / конверт ордер defend в луа
» WarCraft 3 / Запрет на использование способности при условии
» WarCraft 3 / таймер
Для начала нужен триггер с событием - юнит приводит способность в действие, ну и условие как ты правильно заметил что это нужная способность.
Далее в действиях этого триггера уже и нужно делать то, что тебя нужно от спелла.
У одного триггера может быть бесчисленное количество разных событий, условий и действий.
Ты хочешь щит на блок урона, это считай кастомный бафф. (все баффы способностей и есть внутри игровые триггеры, но описаны внутри движка), т.к ни одна из стандартных способностей тебя не устраивает - твоя задача на языке JASS описать кастомный бафф который тебя устроит.
Что нам нужно, ну во первых нам нужно узнать когда юнит получил урон, верно? создаем новый триггер и записываем на него через хт юнита, вешаем на триггер событие что юнит получил урон, далее нам нужно узнать что способность.
Ну и соответствующие действия.
Тут много тонкостей по которые лучше почитать в статьях.
» WarCraft 3 / таймер
» WarCraft 3 / таймер
Unholy_Shield_End должна быть описана выше чем Sosdanie_Shita_Act1
» WarCraft 3 / команда на входящий урон
Что сперва ты ждешь пока юнит применит скилл, ты записываешь в хештаблицу этого юнита, все нужные данные, а так же создаешь для него отдельный триггер, которому ставишь события, что юнит умер, юнит получает урон, время вышло, ну добавляешь триггеру условия, действия, где производишь манипуляции с юнитом в зависмости от события, на которое сработал триггер.
При уроне выше 0 и от нужных тебе юнитов, вручаешь юниту способность на 100500 хп (в моем случае я сделал способность с ро кодом 'Amhp' на 150000 хп), записываешь в хештаблицу кол-во здоровья перед ударом, и запускаешь таймер на 0.00 секунд, как он кончится, удаляешь способность и разумеется устанавливаешь хп - сколько было.
Возможны и другие реализации когда один триггер обслуживает сразу множество юнитов, к примеру отвечает за каку-нибудь пассивку на атаку вроде крита или баша (кастомного), у крипов коих десятки. Да такие варианты лучше, но они гораздо сложнее, и я не советую начинающим рассматривать их.
» WarCraft 3 / команда на входящий урон