13

» WarCraft 3 / Радиус атаки

Super cool, Добавил с правками на случайного юнита, спасибо rsfghd
В коде есть комментарии для обучения Jass-у, как все устроено.
Загруженные файлы
13

» WarCraft 3 / Радиус атаки

Принятый ответ
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
Результат для 1 башни
Результат для группы башен
13

» WarCraft 3 / Радиус атаки

Super cool, тогда перебирай юнитов в радиусе 1000 и сравнивай дистанцию, поставь условие если расстояние между точками выбранного юнита и самой башни > 500, использовать цепную молнию.
но это лучше делать на Jass-е.
13

» WarCraft 3 / Радиус атаки

Увеличить дальность атаки башни до 1000(В Редакторе Объектов рядом с уроном Атаки) либо уменьшить радиус способности до 500 в триггерах
13

» WarCraft 3 / Как удалить анимацию у модели?

Принятый ответ
Открываем модель через Mdlvis
  1. Заходим во вкладку Модули -> Редактор Анимации -> Анимки
  2. Выбираем нужную анимацию и удаляем
  3. Сохраняем модель
Инструкция по стрелочкам
Загруженные файлы
13

» WarCraft 3 / Как дать приказ юниту на которого применили способность?

Принятый ответ
Вычислить 2 юнита при касте
GetTriggerUnit() это юнит каста
GetSpellTargetUnit() или в ГУИ как на скрине это юнит на которого кастует юнит
2 юнита нашли.
а дальше делаем с ними что угодно
Загруженные файлы
13

» WarCraft 3 / Редактор модлелей.

Принятый ответ
Через что делаете модель? В Mdlvis-e в редакторе анимации нужно смотреть как привязаны меши к кости, возможно неправильно связаны меши(точки на модели).
13

» WarCraft 3 / Боты в Warcraft 3

Что такое вх?
можно при старте отнимать ресурсы и т.д., все делается триггерно.
вот пример на гуи
Загруженные файлы
13

» WarCraft 3 / Как использовать boolean variable в Хэш таблице.

Также как и другие переменные, все что в ХТ находится, нужно для хранения данных.
13

» WarCraft 3 / Как поставить гарпию на ноги?

  1. Вытащить модель и сделать самим анимацию ходьбы.
  2. Если вы имеете ввиду про анимации, когда юнит стоит и проигрывает разные анимации, это анимации Stand, Stand-2, Stand-3 и т.д, удаляете лишние Stand-ы и оставляете нужную анимацию
Через MPQ программы вытаскиваете или через ретеру. Работу с анимациями можно выполнить через Mdlvis
13

» WarCraft 3 / Пеон Шиноби Хокаге

Пафос, тело было взято за основу модели райкаге, волосы и повязка наруто, а это конверт с игры, которую делает эта компания, тобишь в авторстве указал оригинал модели скелета и материала. пеон от близардов, тут можно добавить, я лишь модифицировал из кусков этих моделей, тобишь автор модификации
13

» WarCraft 3 / Как отловить стан?

Target unit of ability being cast это юнит на которого применяется способность, логичнее подумай, что она применяется, только при событии если юнит применяет или приводит способность в действие в цель.У тебя в событии стоит таймер, если хочешь сделать пассивную способность, заноси юнита сначала в группу и делай перебор группы в этом триггере через EnumUnit.
13

» WarCraft 3 / Получение "ссылки" на рабочего, который построил здание (GUI)

igor_razor, можно тогда как пример костылить через джасс.
В шапке триггеров: создаем Хэштаблицу если нет и создаем ключ в globals.
Затем создаем два триггера.
Первый
сохраняем здание в ХТ на хэндл игрока( почему здание, а не работника, потому что событие завершение строительства происходит быстрее завершения каста способности)
Второй
чекаем юнита и выгружаем здание.
карту пример и видео прилагаю.
13

» WarCraft 3 / Получение "ссылки" на рабочего, который построил здание (GUI)

Принятый ответ
Используй событие юнит завершает применение способности. Через это можно отловить триггерного юнита.
Загруженные файлы
13

» WarCraft 3 / Триггеры на хп ниже определенного уровня

Значит у тебя от фиксированного значения идет проверка, сделай динамичную проверку, т.е по таймеру устанавливай эти 70%, а потом чекай. Тогда % хп будет считать от текущего максимального хп.
13

» WarCraft 3 / Нужно дерево талантов

Solar3584, если нужно срочно, есть как альтернатива на трекейблях, xgm.guru/p/blog-rsfghd/Trekeybli-3nU , но что бы сделать как кнопку в интерфейсе это только на мемхаке, южапи или рефе уже надо изучать фреймы. Еще как альтернатива DGUI xgm.guru/p/wc3/dynamic-graphic-user-interface
13

» WarCraft 3 / Не могу понять что не так в коде триггера.

Принятый ответ
Вот для примера сделал, с комментарием для каждой функции
что бы нужный герой мог копировать спелы, добавь его в группу.
Загруженные файлы
13

» WarCraft 3 / слияния

sssuplex, опиши по подробнее что за слияния башен? (как работает эта система) это из двух башен сделать одну?
13

» WarCraft 3 / как добавить больше рельефа травь в уже созданой карте?

Принятый ответ
Вкладка "Дополнительно" потом "Изменить тип ландшафта"
после этого выбираешь нужные в списке и добавляешь или заменяешь на ненужный.
если работаешь на 1.26 с JNGP, можно увеличить количество тайлов до 16 вроде
Загруженные файлы
13

» WarCraft 3 / Naruto Bleach War v0.3a (Dota Mod)

Карта нуждается в тотальном апдейте, потому что карта реально из 2010 годов со старыми моделями, а иконки дефолт, также как и ландшафт. Варкрафт стилистика не вписывается в Аниме карты. Плохая идея впихивать еще предметы из Доты. Лучше снабдить магазины предметами только из мира Наруто и Блич. Также отмечу Наруто МОБА или АОС, популярный жанр, лучше включать какую то изюминку что бы отличалась от других карт, особенно будет сложно переплюнуть Naruto Legend или Naruto Ninpo. Последняя даже с фреймами на рефе. И так запасаемся чипсами и колой и вернемся в 2010 год в компьютерные клубы)
По балансу:
Мадара: Шаринган чисто пассива дефолтный стан + крит(можно было поменять на активацию с затратой маны как Сусано), Сусано Мадары пишет что расходуется чакра, но на деле ничего не расходуется.
Сакура: 2 дефолтных скила(Катсуя и Хил), в призыве Катсуи создает маленькую копию Катсуи, можно было бы сделать большую с последующим уровнем разделения, а теперь про ультимейт Okasho, к сожалению не могу написать про нее, т.к самый большой минус ее в том, что она юзается только на героев(которых нет), КРИНЖ.
Шикамару: KageKubiShibari, герой продолжает кастовать абилку, даже когда его действие закончилось. 2 скил дефолт, просто командная аура на урон. 3 и 4 скил больше зашли. Ульта браво. понравилось. Нет Аганим улучшения, конечно минус.
Обито: все норм, ульта вызывает ошибку с группами.
Наруто: Хотелось бы видеть абилки у Гамабунты
Кисаме: Самехада дает орб эффект
Нагато: Демон Хеад хотелось бы видеть хил с красочными эффектами, а не дефолт пассивой с хилом вокруг, шинра тенсей эффект маловат, а действие аое большое, что не соответствует этому.
Саске: Описание Огненного шара неправильно, огненный шар летит не в сторону врага, а в сторону каста должно быть, Анимации при касте кривые, Саске когда юзает чидори просто столбником летит, должна быть анимация. Не увидел шарингана у Саске, что странно. У Саске нет других версий Сусано, сразу идет финальное Сусано в 10хв(на финал битвы Наруто и Саске), когда у Мадары вообще только 1 версия Сусано.
Итог: Карта из 2010 годов, ланд дефолт, модели устарели, кстати заметил что нет озвучки абилок, а это тоже большой минус, ведь через озвучку передается атмосфера аниме, эффекты бы по современнее и более красочнее, побольше бы скилов также, 4-5 скила маловато. про предметы уже сказали. В целом для карты 2010 года 3 из 5, для карты 2023 года 0 из 5, в это сейчас будет скучно играть на фоне Naruto Legend. Нет ИИ, что тоже плохо, если сделать нормальных ботов оценка может увеличится на 2 очка даже, т.к в той же НЛ они слабые или их нет(в новых версиях). А в целом совет лучше делать по РПГ или ворлд рпг( да их предостаточно, но это все же лучше чем Дота Наруто). Но Спасибо автору за карту, хотя бы за воскрешение исчезающих вид карт по Наруто. Других героев по Блич не успел затестить, т.к мое время в компьютерном клубе подошло к концу. Автору удачи и успехов если будешь делать новую карту по Наруто, с удовольствием взгляну на новые работы.
13

» WarCraft 3 / Анимации для плавания

Nneshan, возможно там также как и на жасс, условие в разделе целочисленных, забыл приложить карту
Загруженные файлы
13

» WarCraft 3 / Анимации для плавания

Принятый ответ
Nneshan, даешь тип "плывущий", если хочешь что бы он по земле не ходил.
потом делаешь триггер проверку.
В этом случае на землю он не зайдет. На мелководье будет бежать. На глубоководье плыть.
гуи версия и жасс, но лучше тут воспользоваться жассом
Загруженные файлы