X = X + dist * cos( rad )
Y = Y + dist * sin( rad )
Dist - расстояние на которое вы хотите сместить даммика, rad - угол в радианах. Чтобы сместить дамика влево или вправо от героя, добавьте к его углу поворота 90 градусов, ну или вычтите их. Как перевести градусы в радианы думаю вы знаете.
Zeix, Совершенно не верно, хендл юнита != адресс в памяти, хендл всего лишь ссылка на обьект в таблице объектов.
GetHandleId() - ни имеет никакого отношения к мемхаку, мемхак основан на ретурнбаге типа code и array, code в свою очередь никак не связан с handle.
Обнулять за вас локалки кто будет? Zeix, И где тут мемхак? Не вижу что то применение мемхака в данном коде, вот к примеру тут используется мемхак, а у вас нет.
А зачем нужен этот таймер? Разве нельзя сразу же удалить триггер?
Может случится баг коллизии хендлов триггеров, официально его никто не фиксил с момента появления варкравта.
Можешь создать триггер с уже существующим событием и условием\действием.
Фрог явно все это просил сделать векса (или кого то еще умного), не от хорошей жизни.
Clamp, совсем легко для ForGroup(), просто глобалки. А вот для триггеров и таймеров все не так уж и просто, хештаблица или структура.
Структуры не всегда годятся, плодить овер 100500 тоже не торт, хт - много лишней писанины.
Diaboliko, все по тому же принципу что если бы ты выполнил функцию через call, таймер может быть периодическим, аргумент не теряется пока не вызвать таймер с другой функцией. Одновременно можно пихать в 1 функцию с разными значениями разным таймерам и все будет работать.
Этот код позволяет сравнительно просто передать аргумент в функцию таймера, чтобы не трахать себе мозг хештаблицами и структурами там, где это особо не надо. Так же это снижает кол-во писанины в разы.
Аргумент функции по сути локалка, так что пробуйте, мб пригодится.
Пока я писал ИИ меня осинило, как же надоедать вызывать всякие отсроченные дейсвтия, вроде приказал кастануть абилку и ждешь, докастует или нет, аттачить к таймеру каждый раз юнита.... гемор, при этом подобных задач куча, а просто как в гуях - указал юнита и запустил таймер, все...
PT153, в гуях? Ок, делай...
Нет если серьезно можно все делать на одном таймере и триггере, но как бы тут гуи ясельного уровня, поэтому надо попроще...
Daniil18, в этой наработке вам ненужно ломать себе голову, скопировали папку из тестовой карты и все работает. Там авто инииализация, таймером.
Чтобы не убить маин после оптимизаторов.
Есть такое соыбытие - время настало, ну или переодически проверяешь игровое время, больше 6.00 и меньше 17.59 , условие значение в целочисленной переменной меньше 1, дейсвтие - CustomDefeat вроде называется эта функция в гуи, кароче установить поражение игроку 12 и выпнуть его из игры.
Требование предмета, правда тогда не смогут купить все. Иначе при покупке возвращать бабки и писать - "вам нет 18 лет, похмельное зелье не продадим" к примеру...
Для начала создай триггер, с событием время истекло, периодический, никаких условий в него не ставь, изначально триггер должен быть отключен.
Создай новую переменную типа "отряд" (название по вкусу). В действиях триггера, вносишь действие для каждого юнита в группе, сделать действие - нанести урон юниту GetEnumUnit(), сколько урона и какого типа по вкусу.
Потом делаешь второй триггер, у него событие время изменилось, ну и действия включить или выключить первый триггер.
Третий триггер, событие - юнит игрока умирает. Условие юнит находится в группе юнитов (та переменная что ты создал в первом триггере)
Действие - удалить юнита из группы.
Третий триггер - событие юнит выходит из области, условие - юнит принадлежит игроку 12, действие добавить юнита в группу (переменную из первого триггера)
Ну и еще для входа обратно, думаю догадаешься.
Причем тут гуи если он спрашивает как сделать? Если он просит готовый код - это плохая затея,пусть сам разбирается, скинет сюда что у него не получается, хоть сам чуть чуть научится..
PT153, увы да, но зачем подгружать все? Если и половины в игре не будет?
При пике подгружайте все данные этого героя.
Тем более сделать через preloader скрипт ничего не стоит автоматически, все сделает для вас движок.
Имея файла задаете исходя из id героя (или даммика который продается в таверне), так не понадобится делать базу данных...
Очень просто, брать всех юнитов на карте подходящих под условие - жив, принадлежит 12 игроку, не здание (ну те кто недолжен терять хп).
Проверять принадлежат ли их текущие координаты некой зоне где хп не снимается, если не принадлежат то наносить урон, так каждую секунду.
Или при выходе из безопасной зоны, юнит добавляется в глобальную группу юнитов, которую перебирает таймер каждую секунду и наносит урон каждому юниту. При входе в безопасную зону, юнит удаляется из этой группы, при смерти тоже удаляй юнита из группы.
При респауне (если это герой), респаунь его в безопасной зоне.
Включать и выключть таймер будешь в зависимости от наступления времени суток.
PT153, ну у меня тоже дофига, правда я разделил добавление таймером - можно уперется в лимит операций.
Можно схитрить, сделать по pld скрипту для каждого героя, а в таверне продавать пустышки - при выборе героя, вызываем pld скрипт, после подгрузки - секунды 3, создаем героя для игрока.
ScopteRectuS, нет, это просто ничего не дает - constant служебный оператор для интерпретатора, он не оказывает никакого влияния на работу функции, нужен этот оператор только чтобы защитить себя от ошибок в коде - не дать сменить значение переменной.
constant function name... юзали для того чтобы показать где настраивать значения, поиск в коде по слову constant вполне удобный.
conatant не стирают оптимизаторы, сразу видно какая переменная или функция отвечает за настройки, допусти строки которая выводится на экран.
» WarCraft 3 / Передаем аргументы в фунции callback'ов
» WarCraft 3 / Координаты xy
Y = Y + dist * sin( rad )
Dist - расстояние на которое вы хотите сместить даммика, rad - угол в радианах. Чтобы сместить дамика влево или вправо от героя, добавьте к его углу поворота 90 градусов, ну или вычтите их. Как перевести градусы в радианы думаю вы знаете.
» WarCraft 3 / Утечка или не утечка.
» WarCraft 3 / Утечка или не утечка.
» WarCraft 3 / Утечка или не утечка.
GetHandleId() - ни имеет никакого отношения к мемхаку, мемхак основан на ретурнбаге типа code и array, code в свою очередь никак не связан с handle.
» WarCraft 3 / Утечка или не утечка.
Zeix, И где тут мемхак? Не вижу что то применение мемхака в данном коде, вот к примеру тут используется мемхак, а у вас нет.
» WarCraft 3 / Venomus Gale
Можешь создать триггер с уже существующим событием и условием\действием.
Фрог явно все это просил сделать векса (или кого то еще умного), не от хорошей жизни.
» WarCraft 3 / Передаем аргументы в фунции callback'ов
Структуры не всегда годятся, плодить овер 100500 тоже не торт, хт - много лишней писанины.
» WarCraft 3 / Передаем аргументы в фунции callback'ов
Этот код позволяет сравнительно просто передать аргумент в функцию таймера, чтобы не трахать себе мозг хештаблицами и структурами там, где это особо не надо. Так же это снижает кол-во писанины в разы.
Аргумент функции по сути локалка, так что пробуйте, мб пригодится.
Пока я писал ИИ меня осинило, как же надоедать вызывать всякие отсроченные дейсвтия, вроде приказал кастануть абилку и ждешь, докастует или нет, аттачить к таймеру каждый раз юнита.... гемор, при этом подобных задач куча, а просто как в гуях - указал юнита и запустил таймер, все...
» WarCraft 3 / Герою отнимается здоровье днем.
Нет если серьезно можно все делать на одном таймере и триггере, но как бы тут гуи ясельного уровня, поэтому надо попроще...
» WarCraft 3 / Хак на память Warcraft3
Чтобы не убить маин после оптимизаторов.
» WarCraft 3 / Хак на память Warcraft3
» WarCraft 3 / Герою отнимается здоровье днем.
» WarCraft 3 / Продажа предметов
» WarCraft 3 / Герою отнимается здоровье днем.
Создай новую переменную типа "отряд" (название по вкусу). В действиях триггера, вносишь действие для каждого юнита в группе, сделать действие - нанести урон юниту GetEnumUnit(), сколько урона и какого типа по вкусу.
Потом делаешь второй триггер, у него событие время изменилось, ну и действия включить или выключить первый триггер.
Третий триггер, событие - юнит игрока умирает. Условие юнит находится в группе юнитов (та переменная что ты создал в первом триггере)
Действие - удалить юнита из группы.
Третий триггер - событие юнит выходит из области, условие - юнит принадлежит игроку 12, действие добавить юнита в группу (переменную из первого триггера)
Ну и еще для входа обратно, думаю догадаешься.
» WarCraft 3 / Герою отнимается здоровье днем.
» WarCraft 3 / Герою отнимается здоровье днем.
» WarCraft 3 / Герою отнимается здоровье днем.
» WarCraft 3 / PreloadAbility( integer )
При пике подгружайте все данные этого героя.
Тем более сделать через preloader скрипт ничего не стоит автоматически, все сделает для вас движок.
Имея файла задаете исходя из id героя (или даммика который продается в таверне), так не понадобится делать базу данных...
» WarCraft 3 / Герою отнимается здоровье днем.
Проверять принадлежат ли их текущие координаты некой зоне где хп не снимается, если не принадлежат то наносить урон, так каждую секунду.
Или при выходе из безопасной зоны, юнит добавляется в глобальную группу юнитов, которую перебирает таймер каждую секунду и наносит урон каждому юниту. При входе в безопасную зону, юнит удаляется из этой группы, при смерти тоже удаляй юнита из группы.
При респауне (если это герой), респаунь его в безопасной зоне.
Включать и выключть таймер будешь в зависимости от наступления времени суток.
» WarCraft 3 / PreloadAbility( integer )
Но важно чтобы юнита видели игроки - иначе модели и звуки с иконками и текстом не подгрузятся...
» WarCraft 3 / PreloadAbility( integer )
Можно схитрить, сделать по pld скрипту для каждого героя, а в таверне продавать пустышки - при выборе героя, вызываем pld скрипт, после подгрузки - секунды 3, создаем героя для игрока.
» WarCraft 3 / constant function
constant function name... юзали для того чтобы показать где настраивать значения, поиск в коде по слову constant вполне удобный.
conatant не стирают оптимизаторы, сразу видно какая переменная или функция отвечает за настройки, допусти строки которая выводится на экран.