Melissa, просто попробовал проатаковать пеха юнитами дальнего боя,в итоге никакой урон возвращен не был (а в 1.30 снаряды от пеха отлетают должным образом).
Бордер, да, в этой абилке много параметров. Смотря еще на каком патче смотреть, ибо на последних баги с ней начали устранять (и пехи стали умирать в 2 раза чаще).
Darkew, там написано locuint в сете, а в кастом коде - udg_locunit (порядок букв). Могу посоветовать еще использовать затенение переменных в данном случае, чтобы использовать локалки под видом глобалок без различных приравниваний из одного в другое.
KalaKoltes, обычная функция TriggerSleepAction работает в циклах. Здесь изобретение велосипеда не нужно, но когда нужно выполнить какое действие через промежуток времени без обрывания потока, то тут понадобятся ухищрения с таймером и передача аргументов в функцию таймера через хэш-таблицу, структуру, TimerExploit или глобалки.
Таймеры запускают привязанную функцию по своему истечению, в этой функции и нужно совершать все действия после ожидания. Да, пробрасывать локальные переменные туда нельзя.
Если это необходимо, то нужно организовать работу с хэш-таблицей или структурой (или глобалками на крайний случай).
Смотря как создаешь. Если так, как раньше было принято ввиду cJass "unit u = null", то ошибка будет, так как он не поддерживается на 1.30 (только vJass). Тогда только старая запись "local unit u = null".
Какой архив, какие изменения? Что под этим имеется ввиду? Нужно конкретнее. Если архив в формате zip, rar, tar и подобные, то вар их не читает. Только если mpq или mix-файлы для своеобразных модов (с 1.30 патча такое не работает, так как там ввели CASC). Также доступен вариант через включенный ключ реестра Allow Local Files, что позволяет считывать файлы из директории установленной игры (файлы для считывания туда уже должны быть распакованы).
В оригинальном PolledWait присутствует TriggerSleepAction, чтобы избежать зависание цикла. В твоем примере цикл постоянно сверяется с таймером и зависает от превышения количества допустимых итераций, как бесконечный. Они в варе недопустимы. Если интереса данная конструкция, то можешь изучить структуру стандартного PolledWait.
Код функции
function PolledWait takes real duration returns nothing
local timer t
local real timeRemaining
if (duration > 0) then
set t = CreateTimer()
call TimerStart(t, duration, false, null)
loop
set timeRemaining = TimerGetRemaining(t)
exitwhen timeRemaining <= 0
// If we have a bit of time left, skip past 10% of the remaining
// duration instead of checking every interval, to minimize the
// polling on long waits.
if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
call TriggerSleepAction(0.1 * timeRemaining)
else
call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
endif
endloop
call DestroyTimer(t)
endif
endfunction
PT153, все равно приходится чем-то жертвовать в данном случае. Все же лучше, когда оно будет невидимым (и не будет палиться), чем сохранит некоторые аспекты. Не движется и выводит юнитов - уже хорошо, вроде)
Agren, в карте для этого было под командой "-add" (если добавлять способности перманентность, то для морфов способность будет сохраняться). Единственным исключением будет "Стальной вихрь", который сбивает эффект невидимости, да и это было бы слишком применять такое заклинание в инвизе, поэтому триггерно все отлично добавляется и убирается (главное, чтобы не удалять способность у юнита, у которого есть предмет; это проверять сначала, иначе юниту придется выкинуть и взять предмет, чтобы обратно одеть инвиз).
Изменив только галочку "Является зданием" его подчинить все равно невозможно. Вар его все равно считает зданием, глядя на другие классификации. Галочка сама влияет на более глубокие манипуляции, такие как то же исключение невидимости. Поэтому для тех, кто хочет сделать некую невидимую фракцию в игре, можете создавать здания по классике, после чего убирать им галочку, что они таковыми являются (все равно игра их будет считать зданиями дальше, главное, чтобы на это указывали другие параметры такого юнита).
Agren, это возможно. Пилить такое - через своеобразную "ауру невидимости". Достаточно выбирать юнитов с баффом от такой ауры, добавлять в группу невидимых боевых единиц при добавлении способности постоянной невидимости, после чего перебирать эту группу таймером, если она не пуста (можно проверять через FirstOfGroup(InvisUnits) != null). Если юнит первый - то создавать такую группу, создавать перебор, если был последний удаляемый - то удалять группу и удалять перебор (но это заморочки оптимизации, можно и без зачисток). Перебор осуществлять можно и через ForGroup, и через копию основной группы. Если бафф исчезает во время перебора - удалять юнита из группы, удалять способность.
Убрав галочку "является зданием" проблема с невидимостью для зданий решается - здание погружается в невидимость и триггерная реализация прозрачности не нужна (а также убирается баг с отображением здания после его разведки однажды).
Naadir, здесь как-то от одного предмета юнит погружается в инвиз. Если герой оденет несколько шапок, то ничего не произойдет - инвиз останется и снимется только после снятия последней шапки.
8gabriel8, для всей кампании - вряд ли, потому что каждая карта обладает своим кодом. Просто копировать код в отдельный пустой триггер в качестве библиотеки или же прописывать в шапку карты переделанные функции с дефайном (главное, переделать все, чтобы и связующие были переделаны). Дефайн ведь не действует на то, что находится в Blizzard.j. Можно проще - импортировать Blizzard.j (свой) в кампанию с убранной строчкой о сложности.
8gabriel8, дефайн нужен для того, чтобы вызывать псевдофункцию для оглашения победы для конкретного игрока. Просто работа будет ровно такая же с GUI, но подразумеваться будет другая функция (без сброса сложности игры).
Можно и без него, но тогда использовать CustomScript (либо чистый код).
Если запускаемая сложность главы отличается от стандартной, то оставить так, как есть, а если нет - то попытаться считать то, что было записано в предыдущей главе (если не записано - сбросить к стандартной).
Вообще, сама функция не запускает уровень с какой-то сложностью. Она просто задает значение глобальной переменной:
Код функции
function SetNextLevelBJ takes string nextLevel returns nothing
if (nextLevel == "") then
set bj_changeLevelMapName = null
else
set bj_changeLevelMapName = nextLevel
endif
endfunction
Если копать глубже, то вся проблема здесь:
Код функций
function CustomVictoryOkBJ takes nothing returns nothing
if bj_isSinglePlayer then
call PauseGame( false )
// Bump the difficulty back up to the default.
call SetGameDifficulty(GetDefaultDifficulty())
endif
if (bj_changeLevelMapName == null) then
call EndGame( bj_changeLevelShowScores )
else
call ChangeLevel( bj_changeLevelMapName, bj_changeLevelShowScores )
endif
endfunction
function CustomVictoryQuitBJ takes nothing returns nothing
if bj_isSinglePlayer then
call PauseGame( false )
// Bump the difficulty back up to the default.
call SetGameDifficulty(GetDefaultDifficulty())
endif
call EndGame( bj_changeLevelShowScores )
endfunction
Если интересно, откуда все это берется, то нужно посмотреть устройство функции CustomVictoryBJ и все вызовы, следующие из нее.
Чтобы править проблему без создания костылей на кэше, то придется переписать близовскую функцию под себя (без сбрасывания сложности), а потом использовать ее вместо оригинальной в своей кампании (удобства ради можно использовать дефайн на cJass).
» Блог Пушистого / Предложения по поводу исследований
» Блог Пушистого / Предложения по поводу исследований
» Блог Пушистого / Предложения по поводу исследований
» Блог Пушистого / Исследование способности "Постоянная невидимость"
» WarCraft 3 / вопрос по изменению высоты
Ред. Пушистый
» WarCraft 3 / Как сделать поворот камеры
» Блог Пушистого / Исследование способности "Постоянная невидимость"
Ред. Пушистый
» WarCraft 3 / Минус локальные?
» WarCraft 3 / TimerGetRemaining
» WarCraft 3 / TimerGetRemaining
» WarCraft 3 / Минус локальные?
» WarCraft 3 / Установка
» WarCraft 3 / TimerGetRemaining
» Блог Пушистого / Исследование способности "Постоянная невидимость"
» WarCraft 3 / Герои войска из кампании.
Ред. Пушистый
» WarCraft 3 / Герои войска из кампании.
Ред. Пушистый
» WarCraft 3 / custom campaign: Как убрать сброс сложности
» WarCraft 3 / Таймеры
» Блог Пушистого / Исследование способности "Постоянная невидимость"
Ред. Пушистый
» Блог Пушистого / Исследование способности "Постоянная невидимость"
Ред. Пушистый
» Блог Пушистого / Исследование способности "Постоянная невидимость"
» Блог Пушистого / Исследование способности "Постоянная невидимость"
» WarCraft 3 / custom campaign: Как убрать сброс сложности
Ред. Пушистый
» WarCraft 3 / custom campaign: Как убрать сброс сложности
Ред. Пушистый
» WarCraft 3 / custom campaign: Как убрать сброс сложности