26

» WarCraft 3 / Извлечь защиту юнита с бонусами

rsfghd:
Если бы с самого фундамента сделал одну абилку с 9999 лвлами на защиту, то можно было бы просто отлавливать её уровень. Естественно придётся уменьшать/увеличивать лвл абилки при получении итемов, баффов и другой ерунды
build:
И ловим фризы
Не надо делать такие абилки. Проще сделать 10-15 абилок по одному уровню и собрать ИС работающую со всем этим.
26

» WarCraft 3 / Стаки аур

Принятый ответ
Берёшь флейту, смотришь какая в ней абилка, ищешь эту абилку.
Ставишь этой абилке 2 уровня, или 6, как в примере выше (если надо 6 стаков).
И на каждом уровне выставляешь свой бонус.
Делаешь триггер на подбор предмета, проверки добавляешь, считаешь сколько в инвентаре флейт, и если их больше 1 - выставляешь уровень абилки-ауры у юнита на число равно количеству флейт.
При потере предмета делаешь то же самое, но с задержкой (можно 1 сек).
Самому юниту ничего давать не нужно, можно переключать уровни абилок в предметах напрямую по ссылке на юнита.
26

» WarCraft 3 / поза лучниц

У них есть анимация когда они встают на выпрямленные ноги.
Тут либо замедлить анимацию, либо заморозить, но надо выловить момент.
Но у них нет анимаций на прямых ногах.
26

» WarCraft 3 / Разрушитель чар

Принятый ответ
тэг добавить - defend

Есть такая штука как тэг анимации (Animation Tag).
Её можно добавлять юнитам для того что бы они использовали другие сеты анимаций.
Есть функция "дабавить/отнять тэг анимации юниту", там указывается кому, какую (строкой), и дать или отнять.
Таким образом можно триггерно переключать модельки друидов, горного короля, берсерков, охотника на демонов, и т.д. (alternate)
Так же можно заставить рабочих отображать на себе мешок золота или вязанку дров, т.к. она тоже является альтернативной анимацией (gold, lumber).
Так же есть возможность добавить анимацию плавания (если она есть у модели).
Ещё можно заставить юнита пребывать в анимации ready (стойка во время атаки).
26

» WarCraft 3 / Модификатор видимости

Обращение к группе игроков происходит через заранее созданную группу потому что число игроков не меняется в течение игры. Это значит что всех их можно сразу загрузить в одну группу игроков (force). А вот отряд юнитов (group) не может работать так же, потому что юниты постоянно создаются и уничтожаются в ходе игры. Для этого добрый дядя предоставил GUI-функцию, которая позволяет отлавливать (группировать) юнитов в указанном месте (в области, в радиусе от точки, у игрока, по типу и т.д.). Он оказался не глуп и, зная что группы будут создаваться снова и снова, добавил механизм который будет эти группы удалять автоматически. Но это оказалось нужным не всегда, и был прикручен механизм, который по умолчанию не удаляет группы и его можно при необходимости заставить это делать (удалять).
26

» WarCraft 3 / Количество триггеров в очереди

Ну по идеи оно должно добавлять исполнение экшена после текущего (экшера или функции).
Но я никогда этим не пользовался, и буквально на днях опять обратил на это внимание.
Хотя возможно это очередная функция которая попросту не работает, или работает не так.
Надо протестировать...
26

» WarCraft 3 / Переменная не хочет нормально устанавливаться 1 раз

Проблема не в вейте, а в том что у тебя небыло проверки на бафф в должном месте (наличие бонуса сета), и поэтому его выдавало несколько раз.
А вообще - в момент срабатывания события "юнит теряет предмет" фактически предмет всё ещё находится в инвентаре юнита, поэтому и добавляется вэйт в таких триггерах.
26

» WarCraft 3 / Как сделать систему поломки предметов?

TechnoViking:
Я просто плохо знаю редактор, чел.
Я тоже, но получше чем термодинамику.
Или тебе поэтапно рассказать как нужно давать юниту абилку, записывать его в переменную, записывать время в переменную, запускать таймер и ловить момент когда время закончится?
26

» WarCraft 3 / Как сделать систему поломки предметов?

Когти + индексация
Всё, что тут сложного?
Хочешь что бы бафф отображался - даёшь ещё ауру на самого себя
Готово. И эту абилку ничем не задиспелить (если не сделать триггер отдельный).
26

» WarCraft 3 / Загруз по по поводу переменной

SсRealm:
Поясню. Способки даются герою рандомно и мне нужно их систематизировать, то есть игрок будет получать способности в рандомном порядке и мне нужно понять какая из них получена только что чтобы управлять ими в дальнейшем
Звучит так, как-будто у тебя там имеется массив из абилок и ты выбираешь одну конкретную по номеру. Например
set passAbility[1] = Доспехи Веры
set passAbility[2] = Аура Смерти
set passAbility[3] = Змеиная Ловкость
а дальше ты получаешь число N, например - 2, и с ним работаешь
Действие - Выдать юниту абилку passAbility[N]
Т.е. ты тут можешь сразу работать с числом N что б получить саму абилку
Либо отдельно сделать запись "последняя выданная абилка" (отдельная переменная)
Действие - Выдать юниту абилку passAbility[N]
set lastAddAbility = passAbility[N]
Я бы тогда вообще сделал отдельную функцию выдачи абилки, если она часто используется в таком виде и/или где-то ещё.
function UnitAddAbilityToLast takes unit u, integer i returns
	call UnitAddAbility(u,i) // native func.
	set bj_LastAddAbility = i // global val.
endfunction
Действие - call UnitAddAbilityToLast( твой_юнит, passAbility[N] )

SсRealm:
Короче я нашел ужасное упущение варика. Странно, что все на свете можно записать в переменную, но только не только что приобретенную способность.
Есть такой объект как Абилка, но действий с ним либо нет, либо их всего несколько, т.к. все действия с абилками происходят через обращение к её равкоду. Работает это примерно как с предметами в инвентаре героя:
Ты ссылаешься на удаление предмета определённого типа (число) у юнита, при это запускается цикл который проверяет все слоты инвентаря у указанного юнита, и каждый предмет (объект) в каждом слоте проверяет по его ID (как число), и как только он совпадает с искомым - тебе возвращается ссылка на этот предмет (как объект). После чего происходит удаление конкретного предмета, если ты его пытался получить по ID (число). А вот если ты будешь ссылаться на "предмет которым манипулировали", тогда ты получишь конкретно сам предмет (объект).

Вот с абилками, примерно, так же и получается.
Ты посылаешь в функцию ID абилки, и дальше игра сама ищет эту абилку у юнита (какой там механизм - хз, но результат схожий). Функция "использованная абилка" для события каста, так же возвращает тебе всего лишь ID абилки (число), а не её саму как объект.
Мб это и правильнее, т.к. для удаления конкретной абилки (объекта) у юнита тогда бы пришлось иметь в записи саму абилку (объект). А это довольно сильно усложнило бы на первых этапах понимание сути вещей в среде редактора (повышение уровня вхождения).

constant native GetSpellAbilityId takes nothing returns integer
constant native GetSpellAbility takes nothing returns ability
Вот обычно когда идёт триггерная проверка на то какой скилл был использован - проверяется его ID (число), т.е. используется первая фунция и возвращается номер, с которым ты сравниваешь свой номер (эти номера имеют вид 'A002').
Нативки
native GetUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native DecUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native IncUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
native SetUnitAbilityLevel takes unit whichUnit, integer abilcode, integer level returns integer
native UnitAddAbility takes unit whichUnit, integer abilityId returns boolean
native UnitRemoveAbility takes unit whichUnit, integer abilityId returns boolean
native UnitMakeAbilityPermanent takes unit whichUnit, boolean permanent, integer abilityId returns boolean
native SetPlayerAbilityAvailable takes player whichPlayer, integer abilid, boolean avail returns nothing
Каждая из этих функций использует, как сам видишь, именно ID абилок (число).
Хотя для записи/выгрузки абилки из хэш таблицы используется ссылка как раз на саму абилку (объект)
native SaveAbilityHandle takes hashtable table, integer parentKey, integer childKey, ability whichAbility returns boolean
native LoadAbilityHandle takes hashtable table, integer parentKey, integer childKey returns ability
26

» WarCraft 3 / Загруз по по поводу переменной

Т.е. тебе надо выдавать юнита абилку с возможностью получить "последнюю выданную способность", так что ли?
26

» WarCraft 3 / Иконки на заказ

Хоффман, а вот это видел? - www.hiveworkshop.com/resources/btnicegiant.52026
Чем-то смахивает на твою модельку ))

Оо, я тебе даже больше скажу - они одинаково называются.

А вот кстати и сама моделька от того же автора - www.hiveworkshop.com/threads/ice-giant.62043
Так что всё есть в одном комплекте, надо просто проверять ))
26

» WarCraft 3 / Как забыть улучшение

Qulore:
То есть на 1.26a никак не получится?
В требовании надо будет поставить юнита.
Временно создаёшь его игроку, для разблокировки.

Либо замена одной абилки (выкл-версия) на другую (вкл-версия).

А на поздних патчах можно просто блокировать саму абилку.
Так что я хз что они тебе тут залечивают.
26

» WarCraft 3 / Увеличение дистанции атаки

Принятый ответ
По дефолту это улучшение.
Герой игрока качает абилку - триггерно это отлавливается и повышается уровень улучшения для этого игрока. А само улучшение это аналог длинноствольных мушкетов. Оно должно быть у твоего героя в разделе улучшений, что бы оно на него работало.
Событие - Боевая единица повышает уровень способности
Условие - сравнение способностей героев - изученная способность = твоя_абилка
Действия - Игрок - Установить уровень улучшения (мушкеты) для игрока (владелец юнита-инициатора) на уровень (уровень изученной способности).
26

» WarCraft 3 / Спец.эффект на "Демоническую силу"

В момент прокачки этой абилки на 1й уровень выдай герою абилку-пустышку с аттачем (прикреплённым спецэффектом). Да, триггерно.
Триггеры начинаются с малого.
Сегодня ты просто даёшь ещё одну абилку при прокачке другой.
А завтра уже пытаешься уйти от какой-то базовой механики игры...
26

» WarCraft 3 / Таймер вместо вейт

SсRealm, ты меня не понял. Я прошу тебя сформулировать конкретную ситуацию, когда тебе нужна такая 20-ти секундная отсрочка. Тот вэйт что я тебе дал, точно так же косячит как и обычный, просто в другом месте. У него погрешность от 0.075 до 0.125 (чаще всего всё же выдаёт 0.100), которую надо либо вычитать из стартового времени, либо допускать как побочную (т.е. внутри можно сделать set s = s - .1 , но это всё равно не поможет если время меньше 0.1 сек).
Лучше всего - юзать таймеры. Как их юзать - тут надо уже понимать чуть больше, чем просто то как из запускать и реагировать на них.
26

» WarCraft 3 / Таймер вместо вейт

И ты продолжаешь спрашивать?
- Вот тебе красный.
- Это красный?
- У него цвет как у красного.
- Ну так это красный?
26

» WarCraft 3 / Таймер вместо вейт

ScopteRectuS:
Extremator, разве функция, которую ты скинул не есть стандартный гуишный вейт?
Кэп?
26

» WarCraft 3 / Таймер вместо вейт

SсRealm:
функция не работает
Он же тебе пишет, что функция с этим названием не объявлена.
Т.е. ты не занёс её в шапку или в другое место, где она должна объявляться раньше чем упоминается.
Я тебе в сообщении выше пример прилепил.
26

» WarCraft 3 / Таймер вместо вейт

МрачныйВорон:
а я про что говорю?) что вэйт немного медлителен.
Ты бы ещё запятые расставлял в нужных местах )

SсRealm:
У меня call WAIT_EX( 20. ) не работает(
Мб ты не так сделал. Вот здесь работает.
К тому моменту когда ты найдёшь в чём реальный косяк такого вэйта, тебе уже не нужен будет вэйт.
Загруженные файлы
26

» WarCraft 3 / Таймер вместо вейт

МрачныйВорон:
а вэйт в 0.00 сек заметно дольше кажется 1 сек ушла у него.
Данная информация совершенно не соответсвует действительности.
У меня бывают момент когда мне надо заставить триггер прождать МГНОВЕНИЕ, что бы не сбить что-то, и вот вэйт в 0.00 не помогает, т.к. срабатывает мгновенно, т.е. слишком быстро.
SсRealm:
А вот этот код нельзя на custom script записать, а то я е пойму как мне выйти на этот таймер?
Можно, обычно туда его и кидают.
Мб я по памяти не совсем правильно что-то написал, надо проверить самому.
26

» WarCraft 3 / Таймер вместо вейт

SсRealm:
То есть я пишу этот код и вейты больше не глючат?
Нет)) это так не работает.
Если ты хотя бы немного понимаешь как работает Jass, то просто используй это вместо вэйта.
Вот так. В данном случае 10. это 10 секунд.

SсRealm:
но если вейты так глючны, то почему бы просто не сделать отчет на локалках или глобалках?
Ответ на твой вопрос - таймер.
Хочешь записывай его в локалку, а потом ищи что и с кем делать (на это надо записать).
Хочешь записывай его в глобалку, а потом ... точно так же ищи что и с кем делать.
Загруженные файлы