0
13
1 год назад
Отредактирован Borodach
0

» WarCraft 3 / Игнор приказов игрока

Если просто "страх", то можно запаузить юнита, воспроизвести анимацию бега и перемещать триггерно
0
13
1 год назад
Отредактирован Borodach
0

» WarCraft 3 / Много триггерных абилок

Еще как вариант, назвать спелы по названию функции вызова
Соб: кастует спел
Дей: call TriggerExecute(GetSpellTriggerName()) ))
Если пользуешся ГУИ
Дей:
сall TriggerExecute("trg_"+GetSpellTriggerName()+"Action")
может писатся по другому, написал из памяти
3
13
1 год назад
3

» WarCraft 3 / Не добавляются юниты в массив [2 и более] отряда

Возможно, нужно увеличить размер масива. В редакторе переменних
0
13
2 года назад
0

» WarCraft 3 / Эффекты

Схожая "проблема" была, когда в насройках игры эфекты на минимум стояли
0
13
2 года назад
0

» WarCraft 3 / Как сохранить удобно jass код или lua?

Сохраняй разные версии
Например: mymap_0(версия на продакшн).02(законченные системы,скилы).32(сохранения по завершению работы)
Mymap_0_02_23.w3x
Mymap_0_02_24.w3x
0
13
2 года назад
0

» WarCraft 3 / Нюансы улучшения "Берсерк" - как поставить базовый блок юнита?

В РО поставить в требования свой апгрейд и нужний уровень
0
13
2 года назад
0

» WarCraft 3 / Вопрос по триггеру, который добавляет +1 маны

Set mana = get mana + 1
Если тебе текущее значение поменять
0
13
2 года назад
Отредактирован Borodach
0

» WarCraft 3 / Как указать герою покупать предметы с помощью триггеров?

Можно по методу
Герой трал входит в область "магазин"
Если у игрока золота больше стоимости свитка
создать герою предмет свиток
Отнять у игрока золото
0
13
2 года назад
0

» WarCraft 3 / Голда в % за килл крипа в зависимости от кол-ва игроков

Переменная = Нарада за крипа / количество игроков
Установить игроку N количество ресурсов как текущее кол. + переменная
1
13
2 года назад
1

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

Способность "Торнадо", должна замедлять скорость поворота, так как напалм вешает ее, а вот может ли ускорить, надо проверять
0
13
2 года назад
0

» WarCraft 3 / Какой лучший вариант для системы эволюций в карте?

Еще есть способность "Тёмный", можно попробовать с ней. С ней знаю только один баг, когда способность меняет одинаковый тип юнитов, она сумирует их здоровье
0
13
2 года назад
0

» WarCraft 3 / Как сделать так чтобы способность ушла в кд от действия?

Как вариант, ты можешь скрыть способность телепоота, а выдать "берсерк" и отдать приказ его скастовать
2
13
2 года назад
2

» WarCraft 3 / АОЕ хил

Способность "Канал", на любой случай для способности пустышки
1
13
2 года назад
1
1
13
2 года назад
1

» WarCraft 3 / Оптимизация: поредактировал jass триггер, но он начал фаталить.

Проверь переменную перед делением, не равна ли 0
0
13
2 года назад
0

» WarCraft 3 / Анимация во время движения.

jasonrus96, у меня есть простая системка, работает по одному юниту на каждого игрока. Если понадобится, могу после работы скинуть
2
13
2 года назад
2

» WarCraft 3 / Анимация во время движения.

quq_CCCP, сбивает гуишный офсет юнита, потому что он паузит юнита
0
13
2 года назад
0

» WarCraft 3 / Анимация во время движения.

jasonrus96, Одна анимация прервет другую. Для движения можно делать через смещение юнитов по Х, У и воспроизводить анимацию ходьбы, но две анимации не сработают одновременно
0
13
2 года назад
0

» WarCraft 3 / Заклинания на заказ

Надо поправить функцию onDamage на:
function onDamage takes nothing returns nothing
    local spellBleeding spb
    local unit source = GetEventDamageSource()
	local unit target = GetTriggerUnit()
    
        if GetUnitAbilityLevel(source, SOURCE_BLEEDING_BUFF_ID) > 0 and isTypeTarget(target) then
			set spb = spellBleeding.create()
            call spb.addBleeding(source,target,GetEventDamage())
        endif
    
    set source = null
	set target = null
endfunction
3
13
2 года назад
Отредактирован rsfghd
3

» WarCraft 3 / Заклинания на заказ

Название: Кровавая баня
Метод: GUI/Jass/cJass/vJass
MUI: Обязательно
Цель: Другой юнит
Количество уровней: 1
Описание: В течение 10 сек, ваши атаки и способности вызывают у цели кровотечение, наносящее 40% дополнительного урона в течение 6 сек.
Технические характеристики: Нужны параметры для указания от каких способностей наносить урон.
Код
library SpellBleeding
//-----------------------     OPTION     ------------------------------------------
globals
    private real DURATION                                   = 6.0 // длительность кровотечения
    private real DAMAGE_AMOUNT                              = 0.40 // нанесенный урон за всю длительность, в %
    
    private constant integer SOURCE_BLEEDING_BUFF_ID        = 'BHds' // ид баффа под которым будет наносится урон кровотечением
    private constant integer TARGET_BLEEDING_ABILITY_ID     = 'Aasl' // ид способности у цели под кровотечением. Для создания эффекта на цели
    private constant integer SPELL_FOR_BLEEDING_IMMUNE      = 0 // ид способности которая добавит иммунитет к кровотечению
    private constant attacktype ATTACK_TYPE                 = ATTACK_TYPE_NORMAL // тип аттаки
    private constant damagetype DAMAGE_TYPE                 = DAMAGE_TYPE_NORMAL // тип урона
    private constant real TIME_FREQUENCY                       = 1.0 // частота срабативания кровотечения
endglobals

// функция фильтр для целей

private function isTypeTarget takes unit target returns boolean
    return GetWidgetLife(target) > 0 and not IsUnitType(target, UNIT_TYPE_MECHANICAL)
endfunction
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
globals
    private trigger damageEvent = CreateTrigger()
    private timer tickBleeding = CreateTimer()
endglobals

private struct spellBleeding
    static spellBleeding array spB
    static integer stash = 0
    real getDamage
    unit getSource
    unit getTarget
    real remainingTime
    
        private method clone takes spellBleeding dest returns nothing
            set getDamage = dest.getDamage
            set getSource = dest.getSource
            set getTarget = dest.getTarget
            set remainingTime = dest.remainingTime
        endmethod
    
        static method checkRemainingTime takes nothing returns nothing
            local integer i = 1
            local real bleedDamage = 0.
                loop
                    exitwhen i > stash
                        if spB[i].remainingTime <= 0.0 or GetWidgetLife(spB[i].getTarget) <= 0.0 then 
                            call UnitRemoveAbility(spB[i].getTarget, TARGET_BLEEDING_ABILITY_ID)
                            call spB[i].clone(spB[stash])
                            call spB[stash].destroy()
                            set stash = stash - 1
                        else
                            set bleedDamage = spB[i].getDamage / DURATION * DAMAGE_AMOUNT * TIME_FREQUENCY
                            if isTypeTarget(spB[i].getTarget) and GetUnitAbilityLevel(spB[i].getTarget, SPELL_FOR_BLEEDING_IMMUNE) < 1 then
                                call DisableTrigger(damageEvent)
                                call UnitDamageTarget(spB[i].getSource, spB[i].getTarget, bleedDamage, true, true, ATTACK_TYPE, DAMAGE_TYPE, WEAPON_TYPE_WHOKNOWS)
                                call EnableTrigger(damageEvent)
                            endif
                            set spB[i].remainingTime = spB[i].remainingTime - TIME_FREQUENCY
                        endif
                    set i = i + 1
                endloop
            
        endmethod
        
        method addBleeding takes unit source, unit target, real damage returns nothing
            set stash = stash + 1
            set spB[stash] = this
            set getSource = source
            set getTarget = target
            set getDamage = damage
            set remainingTime = 6.0
            
            if GetUnitAbilityLevel(getTarget, TARGET_BLEEDING_ABILITY_ID) <= 0 then
                call UnitAddAbility(getTarget, TARGET_BLEEDING_ABILITY_ID)
            endif
        endmethod
endstruct

function everyTickBleeding takes nothing returns nothing
    call spellBleeding.checkRemainingTime()
endfunction

function onDamage takes nothing returns nothing
    local spellBleeding spb
    local unit source = GetEventDamageSource()
	local unit target = GetTriggerUnit()
    
        if GetUnitAbilityLevel(source, SOURCE_BLEEDING_BUFF_ID) > 0 and isTypeTarget(target) then
			set spb = spellBleeding.create()
            call spb.addBleeding(source,target,GetEventDamage())
        endif
    
    set source = null
	set target = null
endfunction
//===========================================================================
function Trig_Bleeding_Actions takes nothing returns nothing
    call TriggerRegisterUnitEvent(damageEvent, GetTriggerUnit(), EVENT_UNIT_DAMAGED )
endfunction

function InitTrig_Bleeding takes nothing returns nothing
    local group g = CreateGroup()
    local unit e
    set gg_trg_Bleeding = CreateTrigger()
    
    call TriggerRegisterEnterRectSimple(gg_trg_Bleeding, GetPlayableMapRect())
    call TriggerAddAction( gg_trg_Bleeding, function Trig_Bleeding_Actions)
    call TriggerAddAction(damageEvent, function onDamage)
    
    call GroupEnumUnitsInRange(g, 0., 0., 99999., null)
        loop
            set e = FirstOfGroup(g)
            exitwhen e == null
                call TriggerRegisterUnitEvent(damageEvent, e, EVENT_UNIT_DAMAGED )
                call GroupRemoveUnit(g,e)
        endloop
        
        call GroupClear(g)
        call DestroyGroup(g)
        call TimerStart(tickBleeding, TIME_FREQUENCY, true, function everyTickBleeding)
    set g = null
    set e = null
endfunction

endlibrary
Загруженные файлы
5
13
2 года назад
5

» WarCraft 3 / Дополнительные ресурсы

Komkozavr, Используй переменные у которых тип - целочислинные
Триггер на завершение тренировки юнита с условием что юнит "Автодобыча"
Увеличиваеш переменую на 1ед.
Создаешь переменные для каждого ресурса
В триггере с периодическим срабативанием
Ресурс = Ресурс + (Количество с автодобычи * кол "Автодобычи")
СОздать таблицу лидеров и подставить туда свои переменные
3
13
2 года назад
3

» WarCraft 3 / Заклинания на заказ

Название: Cyclop Grab and Throw
Метод: GUI/Jass
MUI: Да
Цель: Нет
Количество уровней: 1
Описание: Циклоп хватает цель и бросает в случайную точку вокруг себя (от 600 до 1200 дальности) нанося цели урон при столкновении в размере 80% от текущего здоровья и замедляет на 25%. (Если перед целью есть клиф нужно его ударить об клиф и замедлить на 50% при ударе)
Если метод на Jass , хотелось бы возможность настроить переменные на GUI при нужном мне действии , в карте есть некоторые юниты на которых не должна работать данная способность
Настройки вверху триггера. Если понадобится ГУИ,вместо значения после присваивания дописать udg_название переменной
Загруженные файлы
0
13
3 года назад
0

» WarCraft 3 / Триггерное применение способности "Разведать"

У Тралла есть способность, она вроде как то же делает...
0
13
3 года назад
0

» Программирование / 1-но событие для функций или несколько событий для каж.функции?

Есть еще способ, функция call ExecuteFunc( конвертация имени способности в строку). А все способности назвать по вызываемой функции.
Плюс - удобно, просто
Минусы - вроде как, немного медленей. С другими минусами не знаком
2
13
3 года назад
2