constant native IsUnitInRange takes unit whichUnit, unit otherUnit, real distance returns boolean
constant native IsUnitInRangeXY takes unit whichUnit, real x, real y, real distance returns boolean
constant native IsUnitInRangeLoc takes unit whichUnit, location whichLocation, real distance returns boolean
Юнит игрока X !=12 заходит в область, срабатывает триггер, но условие возвращает Ложь, и действие скипается. Пока юнит игрока X остаётся в области, туда заходит юнит игрока 12, срабатывает триггер, условие возвращает Правда, срабатывает действие: берутся ВСЕ юниты из области (в том числе и юнит игрока Х), и им отдаётся приказ двигаться. Diaboliko все верно написал, нужно изменить действие с Отряда на Боевую Единицу.
Но,ведь когда я создавал свою версию доты,все работало нормально.
Видел на сайте наработку с молниями на JASS, поищи, крайне неплоха. А вот и она.
А ещё можно это сделать с помощью Finger Of Death, поставив там длительность графики на 99999., задержку графики и урон на 0., спел дать даммику, приказать даммику 1 раз скастовать молнию на указанного юнита, а потом попросту двигать даммика.
У каждого юнита есть поле Projectile Impact - Z и Projectile Launch - Z, узнать их через стандартные функции никак нельзя в JASS. Потому молнии придётся оставлять "на полу" или "в воздухе" (если прописать в координате z молнии высоту полёта юнита). GetLocationZ тоже не поможет.
Потому с даммиком всё будет "красиво". Конец молнии будет уже прикреплён Projectile Impact - Z цели. Каждый раз, когда двигаешь даммика в позицию кастера, ставишь ему
где const есть Projectile Launch - Z кастера из РО. Сам дамми должен быть летающим без ограничений в высоте полёта, а его поля, Cast Backswing, Cast Point и Projectile Launch - Z должны быть равны 0.
Таким образом если всё делать верно, то в случае с дамми ничего в воздухе висеть не будет. Синхронизировать позицию дамми можно каждые 50 мс (0.05 с), и я думаю это проще, чем синхронизировать 6 координат молнии (тут всего 3).
quq_CCCP, Отвечая на твой вопрос. Хотелось сделать функцию с периодом примерно в 0.25 секунд и счётчиком реального значения. При достижении реального определённого значения, период должен поменяться на более высокое значение функции подсчёта были не нужны. Исходя из положения придётся написать 2 похожих триггера, которые различаются несколькими действиями.
Используй таймеры. Они лучше, так как их легче удалить и настроить.
PT153, (old) - старые версии файлов, которые пришлось заменить. Чуда не получилось(
Это лучше спросить у разрабов JNPG:R, может регистрацию новых плагинов нужно делать как-то в .exe файле, либо отредактировать поля в реестре. Я, когда юзал WEX, удалил WurstScript (он в редакторе не отображался), так как не использовал его, потому подумал, что можно просто вставить папку и всё заработает. :) tesh вообще лучше новый скачать отсюда. JassHelper вроде везде одинаковый, последнюю версию можно взять тут.
pro100master, я знаю что 1 с = 1000 мс, и именно по этому у моего таймера период в 50 мс, но я вообще не понимаю, как это относится к моему вопросу. Вопрос о том, какая реализация быстрее.
VinerX, дело было не в утечках. У меня очень часто срабатывал триггер с событием "Юнит Атакован" с лютым циклом внутри. Это вызывало лаги. Я связал с каждым юнитом (что может быть атакован) 1 таймер, который запускается на 0,25 - 0,5 с при срабатиывнии триггера, и пока он не истечёт, у этого юнита не будет срабатывать триггер с событием "Юнит Атакован" (проверка в условии триггера).
Другой человек решил такую проблему по-другому - просто выключал триггер на n секунд.
А ещё лучше не использовать событие "Юнит Атакован".
Зайди в папку WEX, где есть папки tesh, jasshelper и пр. и скопируй туда папку AcidHelperиз сборки JNPG. Вдруг получится. А ещё приложи скриншот папки WEX, забыл, как там оно всё выглядит.
Быстрее cooldownEndNew или cooldownEndNewX?
method cooldownEndNew takes nothing returns nothing
local integer a = 0
local Minion m = caster
call SetImagePosition(range_image, GetUnitX(m.minion), GetUnitY(m.minion), 0.)
set Data = data
set Owner = m.owner
set Armor = armor
call GroupEnumUnitsInRange(Group, GetUnitX(m.minion), GetUnitY(m.minion), abildata.range, function thistype.filter)
endmethod
method cooldownEndNewX takes nothing returns nothing
local integer a = 0
local Minion m = caster
local real x = GetUnitX(m.minion)
local real y = GetUnitY(m.minion)
call SetImagePosition(range_image, x, y, 0.)
set Data = data
set Owner = m.owner
set Armor = armor
call GroupEnumUnitsInRange(Group, x, y, abildata.range, function thistype.filter)
endmethod
Быстрее filter или filterX?
static method filter takes nothing returns boolean
local Minion m = GetUnitUserData(GetFilterUnit())
if IsUnitType(GetFilterUnit(), MinionClass) and IsUnitType(m.minion, UNIT_TYPE_GROUND) and m.out_of_spawn then
call BuffAirSupport.start(m, Data, Owner, Armor)
endif
return false
endmethod
static method filterX takes nothing returns boolean
local Minion m = GetUnitUserData(GetFilterUnit())
if IsUnitType(GetFilterUnit(), MinionClass) and IsUnitType(GetFilterUnit(), UNIT_TYPE_GROUND) and m.out_of_spawn then
call BuffAirSupport.start(m, Data, Owner, Armor)
endif
return false
endmethod
Важно помнить, что inject ПЕРЕЗАПИСЫВАЕТ оригинальную функцию.
Но вот у меня через inject не работает.
Потому нужно открыть карту с помощью MPQ Editor, открыть war3map.j, найти функцию config, глянуть, что написано в SetMapName(),
call SetMapName("TRIGSTR_###")
нажать ПКМ по war3map.wts, выбрать Edit (Редактировать), открыть файл с помощью блокнота, найти там String ###, изменить содержание, сохранить и подтвердить обновление файла в архиве.
Проверил, второй способ сработал.
Карта во многом будет лагать от Юнит Атакован, сам через это проходил. После того как я каждому юниту дал таймер, который запускается при срабатывании Юнит Атакован на 0.25 секунд. В самом действии же идёт проверка, что если таймер не истёк, то скипнуть все остальные действия.
"исправлена ошибка при большом количестве объектов в Редакторе объектов WordEditor"
нихрена. Как раз из-за того, что стала появляться подобная ошибка, был перескачан этот вариант вместо 4.9 - там то же самое ровно на том же месте при попытке оптимизации.
А в чём будет разница?
Ещё в CreateImage есть параметры размера, позиции и начала по z, они на что-то влияют?
native CreateImage takes string file, real sizeX, real sizeY, real sizeZ, real posX, real posY, real posZ, real originX, real originY, real originZ, integer imageType returns image
Я ещё где-то видел описание всех ImageType, да вот забыл где. Тут парочка есть, но не все.
А вот если вытащить файл MPQ Editorом, то текстура отображается.
Открыл вытащенный файл Model Editorом, ничего не менял, нажал Save, закрыл, открыл снова, текстура перестала отображаться. xD
По порядку:
В триггере с инициализацией создаешь действие: Игрок - make Ю2 недоступно for training by игрок.
Создаешь триггер: юнит завершает исследование (твой аналог берсерка) - заблокировать Ю1 (как в пункте 1), а Ю2 - разблокировать.
Создаешь способность на основе Безумие (Sbsk), указываешь в графе "новый тип войск" Ю2, даешь эту способность Ю1.
Вроде все
1-й пункт можно сделать в Scenario -> Techtree propeties.
2-й пункт можно сделать в самом улучшении (смотри как сделано оригинальное улучшение).
Всё остальное по делу.
Стандартные глобалки, как ты видишь, дают значение в ячейки 0 и 1, на остальные забивают. Сам сталкивался с "багом" стандартного массива групп: создаются только группы в ячейке 0 и 1, остальные null.
local integer i=0
set i=0
Первой строки достаточно.
Дефолтное значение у хендлов и, по-моему, у строк null, у логических false, у действительных чисел 0., у целых чисел 0. Это распространяется на массивы и хештаблицы, на единичные переменные это не действует.
Бандиты, ну раз мы тут собрались, как триггерно дать доп силу атаки или хары? )) Сделаю значит на основе абилок которые блочатся и через них дам нужную мне силу атаки.
Ну или подскажите какие пассивки еще дают доп силу атаки. Знаю что техника даёт, но вот только она тож не блочится.
Есть такая способность в Special -> Items -> Item Permanent Damage Gain (AIaa), она даёт постоянный бонус к атаке. Она не блокируется (что очевидно).
» WarCraft 3 / Убивать вне радиуса области относительно юнита - триггерно
Есть вот что:
» WarCraft 3 / Юниты входящие в область идут,хотя не должны
Diaboliko все верно написал, нужно изменить действие с Отряда на Боевую Единицу.
Ред. PT153
» WarCraft 3 / Можно ли прикрепить эффект молнии к юниту?
А вот и она.
» WarCraft 3 / Удаление событий из триггера.
Ред. PT153
» WarCraft 3 / Удаление событий из триггера.
Ред. PT153
» WarCraft 3 / Добавление способности через native
» WarCraft 3 / Поддержка cJass
tesh вообще лучше новый скачать отсюда. JassHelper вроде везде одинаковый, последнюю версию можно взять тут.
Ред. PT153
» WarCraft 3 / Вопрос про иконки.
» WarCraft 3 / Сравнение кода по производительности
Ред. PT153
» WarCraft 3 / Сравнение кода по производительности
И вообще-то не микросекунд, а 50 миллисекунд.
» WarCraft 3 / Оптимизация карты (N1)
Другой человек решил такую проблему по-другому - просто выключал триггер на n секунд.
А ещё лучше не использовать событие "Юнит Атакован".
Ред. PT153
» WarCraft 3 / Поддержка cJass
А ещё приложи скриншот папки WEX, забыл, как там оно всё выглядит.
Ред. PT153
» WarCraft 3 / Сравнение кода по производительности
Точнее этот метод вызывается функцией, который связан с таймером с периодом в 0,05 с.
Ред. PT153
» WarCraft 3 / Сравнение кода по производительности
Ред. PT153
» WarCraft 3 / Название карты в варкрафте из огромного кол-ва символов
Потому нужно открыть карту с помощью MPQ Editor, открыть war3map.j, найти функцию config, глянуть, что написано в SetMapName(),
Проверил, второй способ сработал.
» WarCraft 3 / Оптимизация карты (N1)
» WarCraft 3 / Wc3 Map Optimizer 5.0 Rus
Ред. PT153
» WarCraft 3 / SetImageConstantHeight
» WarCraft 3 / SetImageConstantHeight
Ещё в CreateImage есть параметры размера, позиции и начала по z, они на что-то влияют?
Тут парочка есть, но не все.
Ред. PT153
» WarCraft 3 / Баги Model Editor
Открыл вытащенный файл Model Editorом, ничего не менял, нажал Save, закрыл, открыл снова, текстура перестала отображаться. xD
» WarCraft 3 / Своё улучшение "Берсерк" в РО. (как у орды)
2-й пункт можно сделать в самом улучшении (смотри как сделано оригинальное улучшение).
Всё остальное по делу.
Ред. PT153
» WarCraft 3 / Дефолтное значение массива
» WarCraft 3 / Не блокируется способность + не реагирует на зависимости.
» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4
Ред. PT153
» WarCraft 3 / Мгновенный разворот 126а загадка