Будет сообщение о детекте смерти с отображением случайного из {1, 2, 3} числа.
Если способность на кд, то сообщения о детекте смерти не будет, и, что логично, Рыцарь не будет воскрешён.
Если 1, то Рыцарь будет воскрешён своей способностью. Способность уйдёт в кд.
Если же не 1, то Рыцарь умрёт.
Чтобы воскресить Рыцаря, не используя его способность, напишите в чат '.
Если будут вопросы по этой наработке, пишите.
Сделал для одного юнита на гуи, со структурами или хештаблицей можно такое же сделать для нескольких юнитов на карте.
Самого задолбал этот варимпортет, особенно, когда с одной карты на другое всё переносишь
Вот как я делаю импорт в своей карте.
В карте есть триггер. Он обычно выключен.
Вот его содержимое. Тут записана команда на импорт файлов из папки zMapImport.
Путь к папке zMapImport прописан в jasshelper.conf.
Сама папка zMapImport содержит в себе вот что.
В некоторых папках тоже есть папки.
А теперь сам процесс импорта:
Включаем триггер Import. Можно делать не триггером, а через Extensions -> Import Directory.
Сохранем карту.
Закрывем карту.
Теперь всё содержимое папки zMapImport есть в карте с сохранением своего расположения относительно zMapImport и отображается в Import Manager.
Уже после пункта 2 всё содержимое папки zMapImport есть в карте, но оно не отображается в Import Manager и будет удалено, если вы выключите триггер Import и сохраните карту опять. Аналогично и со способом через Extensions -> Import Directory.
Делаем на диске папку, в которой будут файлы для импорта с необходимым расположением относительно друг друга. Если нужно добавить файл, кидаем его в эту папку по нужному пути, выполняем действия 1-3. Если нужно обновить файл, обновляем его в этой папке, выполняем действия 1-3. Если нужно всё перенести в другую карту, делаем в ней триггер (или через Extensions -> Import Directory), выполняем действия 1-3.
Графика - Анимация: обратный ход броска
Графика - Анимация: точка броска
Combat - Attack x - Animation Backswing Point (Real)
The amount of time it takes a unit/building/hero to go through half the physical movement necessary to attack something. If the unit/building/hero has no animations for attacking, the time set in this field still applies, but there will be no viewed physical movement. This field combines additively with "Combat - Attack x - Animation Damage Point" to form the total time taken to physically attack a target.
Combat - Attack x - Animation Damage Point (Real)
The amount of time it takes a unit/building/hero to go through half the physical movement necessary to attack something. If the unit/building/hero has no animations for attacking, the time set in this field still applies, but there will be no viewed physical movement. This field combines additively with "Combat - Attack x - Animation Backswing Point" to form the total time taken to physically attack a target.
Как я понял, это работает так: приказ атаковать -> проходит время из "Графика - Анимация: точка броска" -> снаряд бросается -> проходит время из "Графика - Анимация: обратный ход броска" -> юнит готов к следующему приказу.
А может и нет, я не работал с этой способностью.
Но существа, вызванные способность гидры, являются, как ни странно, вызванными, то есть они не оставляют трупов (при смерти характерный эффект смерти призванного существа) и получают бонусный урон от диспела.
кстати можно по идее так мины какие-нибудь спавнить и делать рендж сплеши при атаках или стазис ловушки и еще до фига... кул идея короче!
Полностью поддерживаю, но у юнита, что заспавнится уже из умершего даммика, будет таймер жизни, и он будет считаться суммоном.
Потому если нужен вечный выделяемый юнит, нужно сделать даммика без модели с равкодом Х, способность на основе 'Apts' с длительностью 0.01 и триггер с событием Enters map и условием на сравнение равкода и действием "Создать нужного юнита".
Сделал так, чтобы катапульта при атаке спавнила скелетов, которых можно выделить и управлять.
function check takes nothing returns boolean
local unit u = GetFilterUnit()
local player p = GetOwningPlayer(caster)
local real coneAngle = TransferDegrees(bj_RADTODEG * Atan2(GetUnitY(u) - GetUnitY(caster), GetUnitX(u) - GetUnitX(caster)))
local real sector = 30
local boolean answer = u != caster and IsUnitEnemy(u, p) and IsUnitVisible(u, p) and IsUnitAliveBJ(u) and GetUnitFacing(caster) - coneAngle <= sector and GetUnitFacing(caster) - coneAngle >= sector - sector*2
set u = null
set p = null // игрока можно не обнулять, их всё же очень конечное количество.
return answer
endfunction
На кол-во handles это никак не повлияло.
Потому что никто из твоих FilterUnit() не был убран из игры. Без обнуления после удаления юнита хэндл бы остался, а с обнулением, был бы освобождён для нового использования.
У них стандартное время смерти 5 секунд, смотри игровые константы.
Поставь в игровых константах Decay Time - Effects время меньше, но не очень маленькое, а то анимация смерти эффекта проигрываться не будет.
Чтобы не плодить переменные эффекта, сделай такие функции:
function CreateEffectPoint takes string s, real x, real y returns nothing
call DestroyEffect(AddSpecialEffect(s, x, y))
endfunction
function CreateEffectTarget takes string s, widget w, string att returns nothing
call DestroyEffect(AddSpecialEffectTarget(s, w, att))
endfunction
Во время сохранения при включённой оптимизации кода и выключенном режиме дебага эти 2 функции будут "раскрыты", и в конечном коде будут только DestroyEffect(AddSpecialEffectTarget(...)). У Inline оптимизации есть некоторые требования для передаваемых параметров, потому функции не в некоторых случаях не будут "раскрыты".
Можно использовать способность "Ловчий" для увеличения дальности, но тогда герой не может передвигаться. Ещё можно сделать герою даммики с разной дальностью, которые и будут атаковать. То есть если предмет есть - даммик один, предмет выкинул, даммик другой. Ещё можно использовать морфы.
У труповозок нежити есть способноть, которая создаёт облако в точке попадания. Воспользуйся ею, её равкод 'Apts'. В поле "Длительность" ставится длительность созданного юнита. Но созданный этой способностью юнит неуязвим и не может быть выделен.
Прикрепил карту с катапульной, которая спавнит скелетов при атаке.
Поэкспериментировал немного.
Юнит, призванный этой способностью, не вызывает события спавна, но вызывает событие "Входит в область". Ему также можно давать приказы триггерно. Хм, так можно даммики делать.
Про обработку иконок (точнее создание рамок) это я сказал кстати, так я использую Button Manager для рамок, а BLP Lab только для оптимизации и конвертации.
Вот у меня вопрос в чём истинная цель создание ещё одного MPQ правщика, если есть другие. Вы хотите добиться умного импорта, которого нет у других правщиков. Али просто вы делаете его как хобби?
Как я уже говорил, весь функционал, которого не хватало Fakovу, есть в Grimex, Fakov просто о нём не знал. Я всё импортирую в 2 клика - включаю триггер, где 1 строка с импортом и сохраняю карту. Но карту нужно закрыть и открыть снова, а это большой минус для карт, загрузка которых требует продолжительного времени.
Я не хочу сказать, что Fakov занимается ерундой. Его утилита как раз подойдёт для громоздких карт. Ну а также, я надеюсь, эта утилита станет альтернативой Grimex, что хорошо. Grimex помимо импорта, может сразу сделать нужное обрамление иконки и много чего ещё. Я тут в комментариях кидал мануал Grimex на английском.
А можно изначально дать способность всем нужным юнитам в Редакторе Объектов, но заблокировать её нейтрально-враждебному игроку. Как только нужные условия будут выполнены, разблокировать способность.
Можно использовать утилиту Fakova, а можно, как я уже писал, использовать встроенный в JNPG Grimex, чем я и пользуюсь. Мануал Grimex прикрепил к своему предыдущему сообщению. Grimex также можно использовать из меню Extensions.
Также нужно помнить, что InitTechTree вызывается передInitBlizzard, то есть ваши настройки игроков, сделанные с помощью Scenario -> Techtree\Abilities\Upgrades Properties будут применены раньше, чем запрет Парового такнка и Берсеркера.
Потому, чтобы разблокировать Берсеркера и заблокировать Охотника за головами, можно сделать улучшение на Берсеркера сразу исследованным в Scenario -> Upgrades Properties, а Охотника за головами заблокировать в Scenario -> Techtree Properties.
function InitSummonableCaps takes nothing returns nothing
local integer index
set index = 0
loop
// upgraded units
// Note: Only do this if the corresponding upgrade is not yet researched
// Barrage - Siege Engines
if (not GetPlayerTechResearched(Player(index), 'Rhrt', true)) then
call SetPlayerTechMaxAllowed(Player(index), 'hrtt', 0)
endif
// Berserker Upgrade - Troll Berserkers
if (not GetPlayerTechResearched(Player(index), 'Robk', true)) then
call SetPlayerTechMaxAllowed(Player(index), 'otbk', 0)
endif
// max skeletons per player
call SetPlayerTechMaxAllowed(Player(index), 'uske', bj_MAX_SKELETONS)
set index = index + 1
exitwhen index == bj_MAX_PLAYERS
endloop
endfunction
Это функция, которая запускается из InitBlizzard, которая в свою очередь запускается из функции main. Она блокирует Берсеркера, Паровой танк и устанавливает лимит на скелетов.
Чтобы убрать Охотника за головами из казармы, но сделать доступным Берсеркера, нужно заблокировать у каждого игрока Охотника за головами и разблокировать Берсеркера.
Это функция, которая запускается из InitBlizzard, которая в свою очередь запускается из функции main.
Я это к тому, что если в карте нет //! inject main, то эта функция вызывается.
Ред. PT153
» WarCraft 3 / Воскрешение с шанцем
Вот карта, где есть воскрешение с шансом.
Сделал для одного юнита на гуи, со структурами или хештаблицей можно такое же сделать для нескольких юнитов на карте.
Ред. PT153
» Fa_losophy / FaMPQ
В карте есть триггер. Он обычно выключен.
А теперь сам процесс импорта:
Теперь всё содержимое папки zMapImport есть в карте с сохранением своего расположения относительно zMapImport и отображается в Import Manager.
Ред. PT153
» WarCraft 3 / Замедлить скорость анимации атаки
» WarCraft 3 / Кампания-противостояние 2
» WarCraft 3 / Скелеты из атаки
» WarCraft 3 / SharpCraft XGM Addon
Ред. PT153
» WarCraft 3 / Скелеты из атаки
Но существа, вызванные способность гидры, являются, как ни странно, вызванными, то есть они не оставляют трупов (при смерти характерный эффект смерти призванного существа) и получают бонусный урон от диспела.
Ред. PT153
» WarCraft 3 / Скелеты из атаки
Потому если нужен вечный выделяемый юнит, нужно сделать даммика без модели с равкодом Х, способность на основе 'Apts' с длительностью 0.01 и триггер с событием Enters map и условием на сравнение равкода и действием "Создать нужного юнита".
Ред. PT153
» WarCraft 3 / Jass утечка, спецэффект
У Inline оптимизации есть некоторые требования для передаваемых параметров, потому функции не в некоторых случаях не будут "раскрыты".
» WarCraft 3 / Jass утечка, спецэффект
» WarCraft 3 / Jass утечка, спецэффект
KingMaximax:
Ред. PT153
» WarCraft 3 / Jass утечка, спецэффект
» WarCraft 3 / Дальность атаки через предмет, триггер или способность
» WarCraft 3 / Скелеты из атаки
Ред. PT153
» WarCraft 3 / Скелеты из атаки
Юнит, призванный этой способностью, не вызывает события спавна, но вызывает событие "Входит в область". Ему также можно давать приказы триггерно.
Хм, так можно даммики делать.
Ред. PT153
» WarCraft 3 / Отобрать контроль над юнитами
» WarCraft 3 / Проблемы с постройкой зданий
» Fa_losophy / FaMPQ
» Fa_losophy / FaMPQ
Grimex помимо импорта, может сразу сделать нужное обрамление иконки и много чего ещё. Я тут в комментариях кидал мануал Grimex на английском.
» WarCraft 3 / Усиление нейтрально враждебных
» WarCraft 3 / Добавление файлов в карту через mpq-редактор не действует.
» WarCraft 3 / Добавление файлов в карту через mpq-редактор не действует.
Ред. PT153
» WarCraft 3 / Сделать берсерка доступным
Ред. PT153
» WarCraft 3 / Сделать берсерка доступным
Потому, чтобы разблокировать Берсеркера и заблокировать Охотника за головами, можно сделать улучшение на Берсеркера сразу исследованным в Scenario -> Upgrades Properties, а Охотника за головами заблокировать в Scenario -> Techtree Properties.
» WarCraft 3 / Сделать берсерка доступным
Чтобы убрать Охотника за головами из казармы, но сделать доступным Берсеркера, нужно заблокировать у каждого игрока Охотника за головами и разблокировать Берсеркера.