Заказчик: Гогонаш Способность: Аура вампиризма для дальников Выполнено: Да
Описание
Сделал через готовую систему отлова урона. Скопируй все нестандартные абилки и баф, в триггере системе отлова урона укажи равкоды 2х абилок, в триггере вампиризма укажи равкод бафа от ауры.
Super cool, Jass это встроенный язык программирования варкрафта, т.е код что на GUI - пользовательский интерфейс, только в виде кода. GUI ограничен, на нем могут вылезти утечки. Из-за чего могут быть лаги в картах.
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
Конвертируем в текст
udg_Tower - твоя башня, триггер рассчитан на 1 башню если нужно на несколько, используй другой код и заноси каждую башню в группу
Тогда нужно создать группу для башен, т.е GroupTowers.
Создаем GUI переменную
Код для 1 башни
scope LightningAutoCast
globals
private unit filterUnit //Юнит для перебора
private group GroupEnumG = CreateGroup() //Группа для перебора юнитов
//udg_Tower = Башня
endglobals
native UnitAlive takes unit id returns boolean //Нативка на жив ли юнит
function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real //Дистанция между координатами
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction
function AOE_Lightning_Filter takes nothing returns boolean //Фильтр функция
local real x = GetUnitX(udg_Tower) //Координата Х башни
local real y = GetUnitY(udg_Tower) //Координата Y башни
local real x1
local real y1
set filterUnit = GetFilterUnit()
set x1 = GetUnitX(filterUnit) //Координата X фильтр юнита
set y1 = GetUnitY(filterUnit) //Координата Y фильтр юнита
return IsUnitEnemy(filterUnit, GetOwningPlayer(udg_Tower)) and filterUnit != udg_Tower and not IsUnitType(filterUnit, UNIT_TYPE_STRUCTURE) and DistanceBetweenXY( x, y, x1, y1) > 500
//Условия: Юнит враг Игроку Башни и Юнит не равен самой Башни и Юнит не является зданием и Дистанция между координатами юнита и башни > 500
endfunction
function AOE_Lightning_Actions takes nothing returns nothing
local real radius = 1000 // Радиус
local real x = GetUnitX(udg_Tower) //Координата Х башни
local real y = GetUnitY(udg_Tower) //Координата Y башни
local unit uf // Юнит для перебора в цикле
call GroupEnumUnitsInRange(GroupEnumG, x, y, radius, function AOE_Lightning_Filter) // Пикаем юнитов в радиусе от координат башни и перебираем в функции фильтре
loop
set uf = FirstOfGroup(GroupEnumG) // GroupPickRandomUnit(GroupEnumG) -- Если нужен случайный юнит в радиусе, удаляем FirstOfGroup(GroupEnumG) и ставим эту функцию
exitwhen uf == null
if UnitAlive(uf) then
call IssueTargetOrder(udg_Tower, "chainlightning", uf) //Кастуем молнию на юнита
endif
call GroupRemoveUnit( GroupEnumG, uf) //Удаляем юнита из группы
set uf = null //Обнуляем переменную
endloop
call GroupClear(GroupEnumG) //Очищаем группу
endfunction
function InitTrig_LightningAutoCast takes nothing returns nothing
call TimerStart( CreateTimer(), 0.03, true, function AOE_Lightning_Actions) //Создаем периодический таймер
endfunction
endscope
Код для несколько башень
scope LightningAutoCastGroup
globals
private unit filterUnit //Юнит для перебора
private group GroupEnumG = CreateGroup() //Группа для перебора юнитов
//udg_Tower = Башня
endglobals
native UnitAlive takes unit id returns boolean //Нативка на жив ли юнит
function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real //Дистанция между координатами
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction
function AOE_Lightning_Filter takes nothing returns boolean //Фильтр функция
local real x = GetUnitX(GetEnumUnit()) //Координата Х башни
local real y = GetUnitY(GetEnumUnit()) //Координата Y башни
local real x1
local real y1
set filterUnit = GetFilterUnit()
set x1 = GetUnitX(filterUnit) //Координата X фильтр юнита
set y1 = GetUnitY(filterUnit) //Координата Y фильтр юнита
return IsUnitEnemy(filterUnit, GetOwningPlayer(GetEnumUnit())) and filterUnit != GetEnumUnit() and not IsUnitType(filterUnit, UNIT_TYPE_STRUCTURE) and DistanceBetweenXY( x, y, x1, y1) > 500
//Условия: Юнит враг Игроку Башни и Юнит не равен самой Башни и Юнит не является зданием и Дистанция между координатами юнита и башни > 500
endfunction
function AOE_Lightning_Actions takes nothing returns nothing
local real radius = 1000 // Радиус
local real x = GetUnitX(GetEnumUnit()) //Координата Х башни
local real y = GetUnitY(GetEnumUnit()) //Координата Y башни
local unit uf // Юнит для перебора в цикле
call GroupEnumUnitsInRange(GroupEnumG, x, y, radius, function AOE_Lightning_Filter) // Пикаем юнитов в радиусе от координат башни и перебираем в функции фильтре
loop
set uf = GroupPickRandomUnit(GroupEnumG) // GroupPickRandomUnit(GroupEnumG) -- Если нужен случайный юнит в радиусе, удаляем FirstOfGroup(GroupEnumG) и ставим эту функцию
exitwhen uf == null
if UnitAlive(uf) then
call IssueTargetOrder(GetEnumUnit(), "chainlightning", uf) //Кастуем молнию на юнита
endif
call GroupRemoveUnit( GroupEnumG, uf) //Удаляем юнита из группы
set uf = null //Обнуляем переменную
endloop
call GroupClear(GroupEnumG) //Очищаем группу
endfunction
function AOE_Lightning_Actions_GroupTower takes nothing returns nothing
call ForGroup( udg_GroupTowers, function AOE_Lightning_Actions)
endfunction
function InitTrig_LightningAutoCastGroup takes nothing returns nothing
call TimerStart( CreateTimer(), 0.03, true, function AOE_Lightning_Actions_GroupTower) //Создаем периодический таймер
endfunction
endscope
Super cool, тогда перебирай юнитов в радиусе 1000 и сравнивай дистанцию, поставь условие если расстояние между точками выбранного юнита и самой башни > 500, использовать цепную молнию.
но это лучше делать на Jass-е.
Вычислить 2 юнита при касте
GetTriggerUnit() это юнит каста
GetSpellTargetUnit() или в ГУИ как на скрине это юнит на которого кастует юнит
2 юнита нашли.
а дальше делаем с ними что угодно
Через что делаете модель? В Mdlvis-e в редакторе анимации нужно смотреть как привязаны меши к кости, возможно неправильно связаны меши(точки на модели).
Если вы имеете ввиду про анимации, когда юнит стоит и проигрывает разные анимации, это анимации Stand, Stand-2, Stand-3 и т.д, удаляете лишние Stand-ы и оставляете нужную анимацию
Через MPQ программы вытаскиваете или через ретеру. Работу с анимациями можно выполнить через Mdlvis
Пафос, тело было взято за основу модели райкаге, волосы и повязка наруто, а это конверт с игры, которую делает эта компания, тобишь в авторстве указал оригинал модели скелета и материала. пеон от близардов, тут можно добавить, я лишь модифицировал из кусков этих моделей, тобишь автор модификации
Target unit of ability being cast это юнит на которого применяется способность, логичнее подумай, что она применяется, только при событии если юнит применяет или приводит способность в действие в цель.У тебя в событии стоит таймер, если хочешь сделать пассивную способность, заноси юнита сначала в группу и делай перебор группы в этом триггере через EnumUnit.
igor_razor, можно тогда как пример костылить через джасс.
В шапке триггеров: создаем Хэштаблицу если нет и создаем ключ в globals.
Затем создаем два триггера.
Первый
сохраняем здание в ХТ на хэндл игрока( почему здание, а не работника, потому что событие завершение строительства происходит быстрее завершения каста способности)
Второй
чекаем юнита и выгружаем здание.
карту пример и видео прилагаю.
Значит у тебя от фиксированного значения идет проверка, сделай динамичную проверку, т.е по таймеру устанавливай эти 70%, а потом чекай. Тогда % хп будет считать от текущего максимального хп.
Отредактирован SoulRazor
» WarCraft 3 / Дополнительные эффекты для shockwave/carrion swarm
» WarCraft 3 / Заклинания на заказ
Отредактирован SoulRazor
» WarCraft 3 / Заклинания на заказ
» WarCraft 3 / Заклинания на заказ
Отредактирован SoulRazor
» WarCraft 3 / Заклинания на заказ
Заклинание готово!
Способность: Живительная волна
Выполнено: Да
» WarCraft 3 / Заклинания на заказ
Способность: Аура вампиризма для дальников
Выполнено: Да
» WarCraft 3 / Пирокластическое уничтожение
Отредактирован SoulRazor
» WarCraft 3 / Радиус атаки
В коде есть комментарии для обучения Jass-у, как все устроено.
Отредактирован SoulRazor
» WarCraft 3 / Радиус атаки
подробнее про Jass Тут
Ну и конечно нужен JNGP, если на 1.26 патче или рефорджет. Скачать можно тут
Создаем триггер и конвертируем его в текст. Затем копируем и вставляем код.
Тогда нужно создать группу для башен, т.е GroupTowers.
» WarCraft 3 / Радиус атаки
но это лучше делать на Jass-е.
» WarCraft 3 / Радиус атаки
» WarCraft 3 / Как удалить анимацию у модели?
Отредактирован SoulRazor
» WarCraft 3 / Как дать приказ юниту на которого применили способность?
GetTriggerUnit() это юнит каста
GetSpellTargetUnit() или в ГУИ как на скрине это юнит на которого кастует юнит
2 юнита нашли.
а дальше делаем с ними что угодно
» WarCraft 3 / Редактор модлелей.
» WarCraft 3 / Боты в Warcraft 3
можно при старте отнимать ресурсы и т.д., все делается триггерно.
вот пример на гуи
» WarCraft 3 / Как использовать boolean variable в Хэш таблице.
Отредактирован SoulRazor
» WarCraft 3 / Как поставить гарпию на ноги?
» WarCraft 3 / Пеон Шиноби Хокаге
» WarCraft 3 / Пеон Шиноби Хокаге
Отредактирован SoulRazor
» WarCraft 3 / Как отловить стан?
» WarCraft 3 / Получение "ссылки" на рабочего, который построил здание (GUI)
В шапке триггеров: создаем Хэштаблицу если нет и создаем ключ в globals.
Первый
Второй
карту пример и видео прилагаю.
» WarCraft 3 / Получение "ссылки" на рабочего, который построил здание (GUI)
» WarCraft 3 / Триггеры на хп ниже определенного уровня
» WarCraft 3 / Нужно дерево талантов
Отредактирован SoulRazor
» WarCraft 3 / Не могу понять что не так в коде триггера.
что бы нужный герой мог копировать спелы, добавь его в группу.