Borodach #1 - 2 days ago 0
Голосов: 0

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

Переменная = Нарада за крипа / количество игроков
Установить игроку N количество ресурсов как текущее кол. + переменная
Borodach #2 - 4 weeks ago 1
Голосов: 1

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

Способность "Торнадо", должна замедлять скорость поворота, так как напалм вешает ее, а вот может ли ускорить, надо проверять
Borodach #3 - 1 month ago 0
Голосов: 0

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

Еще есть способность "Тёмный", можно попробовать с ней. С ней знаю только один баг, когда способность меняет одинаковый тип юнитов, она сумирует их здоровье
Borodach #4 - 2 months ago 0
Голосов: 0

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

Как вариант, ты можешь скрыть способность телепоота, а выдать "берсерк" и отдать приказ его скастовать
Borodach #5 - 2 months ago 2
Голосов: 2

» WarCraft 3 / АОЕ хил

Способность "Канал", на любой случай для способности пустышки
Borodach #6 - 3 months ago 1
Голосов: 1
Borodach #7 - 3 months ago 1
Голосов: 1

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

Проверь переменную перед делением, не равна ли 0
Borodach #8 - 3 months ago 0
Голосов: 0

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

jasonrus96, у меня есть простая системка, работает по одному юниту на каждого игрока. Если понадобится, могу после работы скинуть
Borodach #9 - 3 months ago 2
Голосов: 2

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

quq_CCCP, сбивает гуишный офсет юнита, потому что он паузит юнита
Borodach #10 - 3 months ago 0
Голосов: 0

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

jasonrus96, Одна анимация прервет другую. Для движения можно делать через смещение юнитов по Х, У и воспроизводить анимацию ходьбы, но две анимации не сработают одновременно
Borodach #11 - 3 months ago 0
Голосов: 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
Borodach #12 - 3 months ago (изм. ) 3
Голосов: 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
Uploaded files
Borodach #13 - 3 months ago 5
Голосов: 5

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

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

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

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

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

У Тралла есть способность, она вроде как то же делает...
Borodach #16 - 6 months ago 0
Голосов: 0

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

Есть еще способ, функция call ExecuteFunc( конвертация имени способности в строку). А все способности назвать по вызываемой функции.
Плюс - удобно, просто
Минусы - вроде как, немного медленей. С другими минусами не знаком
Borodach #17 - 7 months ago 2
Голосов: 2
Borodach #18 - 8 months ago 2
Голосов: 2

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

KaneThaumaturge, в мемхаке unryze, есть готовые функции для UI. Только разобратся с некоторими сложнее будет. Но можно создавать свои фреймы с "блекджеком и шлюхами".
Borodach #19 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Memory hack API v1.4

ELITE, У меня без AdicParser работает...
Borodach #20 - 8 months ago 0
Голосов: 0
Borodach #21 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Не срабатывает событие на изменение real var. Игнор строки кода.

NatriY, Если выводит число 11 у тебя, то тут все работает. Нужен код того как ты событие регистрируешь...
Borodach #22 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Не срабатывает событие на изменение real var. Игнор строки кода.

NatriY, Вставь код в функцию UpDown_Act() после udg_ToMove = 1
Если выводит TRUE 1, тогда ошибка в регистрации события и вызова функции для этого триггера
	if udg_W then 
        call BJDebugMsg("TRUE "+R2S(udg_ToMove))
	else
		call BJDebugMsg("FALSE "+R2S(udg_ToMove))
    endif
Borodach #23 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Не срабатывает событие на изменение real var. Игнор строки кода.

NatriY, Выводи лог на экран значений udg_S, udg_W и udg_ToMove, когда нажал и когда отпустил клавишу. Возможно причина в них
Borodach #24 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Не срабатывает событие на изменение real var. Игнор строки кода.

А в событие TriggerRegisterVariableEvent, в самом начале вывод строки не срабатывает?
Borodach #25 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Странное поведение функции

Не уверен что понял...
Выводи имя убившего и его уровень, также имя умершего и его уровень. Есть вероятность, что у них разница в уровнях больше 7, в пользу того кто убил
Borodach #26 - 8 months ago 0
Голосов: 0

» WarCraft 3 / Странное поведение функции

Выведи имена и их уровни в строчку, возможно там сбой происходит
Borodach #27 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Подсветка функций в TESH

PT153, прекрасно, мне так и нужно для JNGP.
Borodach #28 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Подсветка функций в TESH

PT153, скачаю нужный, только чтоб на версию 1.26 ставился. И если такая функция есть, то какие манипуляции нужны?
Borodach #29 - 9 months ago 0
Голосов: 0
Borodach #30 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Использование TESH стало возможным в Reforged

WorldEditorTESH открывается, но подсветка не работает. Путь прописал к оригинальному WorldEditor-у. Меню TESH в редакторе триггеров нет. Может еще какие настройки надо добавить?
Borodach #31 - 9 months ago (изм. ) 2
Голосов: 2

» WarCraft 3 / Чем заменить CreateNUnitsAtLoc

SсRealm, CreateUnitAtLoc(), вместо х,у задаешь точку

Просто сама точка - это и есть х,у. Одной переменной и действием обнуления больше
Borodach #32 - 9 months ago 3
Голосов: 3

» WarCraft 3 / Отмена способности

SсRealm, Вот пример с "Берсом" и "Жаром преисподни"
Uploaded files
Borodach #33 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Отмена способности

Сделать на основе "берсерк", "стремительность" или "огненый плащ"
Borodach #34 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Папка => w3x

Bergi_Bear, а если работать через "папку" на 1.26, есть возможность через ctrl+click просмотреть свою функцию?
Borodach #35 - 9 months ago 2
Голосов: 2

» WarCraft 3 / Нативка SetUnitTimeScale

rsfghd, если ты на юните тестишь, то у него установленна обратная анимация. Сначала ее проигривает, пока не дойдет до места анимации которая вперед производится... На низких скоростях они встретятся в конце проигрования.
Borodach #36 - 9 months ago 2
Голосов: 2

» WarCraft 3 / Нативка SetUnitTimeScale

rsfghd:
проверил, от скорости атаки не зависит
Как я понимаю, там при проигровании анимации атаки и ходьбы, уже стоят значения. Которые меняются на время проигривания, а после возвращаются в установленное.
От 0.02 до 0.05 время ~25сек. получилось
От 0.05 до 0.09 время ~12сек. получилось
От 0.1 до 0.08 время ~8сек. получилось
Дальее уже сложнее замерять
Borodach #37 - 9 months ago (изм. ) 0
Голосов: 0

» WarCraft 3 / Воскрешение в форме друида

SсRealm, Когда то я делал так: при касте записал в переменную, ждал время превращения, после присваивал глобалке юнита из переменной каста. Вроде так было...
Borodach #38 - 9 months ago 1
Голосов: 1

» WarCraft 3 / Нативка SetUnitTimeScale

Я подозреваю что это в процентах указывается. Если базовая скорость анимации = 1 сек., то с 0.2, скорость должна быть 0.2 сек. А с 5ед. анимация за 5 сек. должна проигратся
Borodach #39 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Обнуление массива отрядов

Venommm, Не, не параноя. Если нужно чекать всю карту и работать с большим количеством объектов, то такой вариант как у меня плохой. Она для обработки нужной групи, а не всех на карте.
Borodach #40 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Воскрешение в форме друида

Морф считается другой БЕ, ссилка shakal[1] пустая будет. При входе на карту юнита с типом морфа, перезаписывай переменную.
Borodach #41 - 9 months ago 0
Голосов: 0

» WarCraft 3 / Обнуление массива отрядов

Есть у меня наработка, правда сделал удобной для ГУИ.
Она создавалась для триггерных аур, но и с групами работает
Uploaded files
Borodach #42 - 9 months ago (изм. ) 0
Голосов: 0

» WarCraft 3 / Сломался редактор

PT153, Что странно, раньше работало без галочек. Началось, как мне кажется, когда во второй раз проверкой запустил тестовую карту рендера, а открывается совсем другая карта
Borodach #43 - 9 months ago (изм. ) 0
Голосов: 0

» WarCraft 3 / Сломался редактор

map_maiker, любой выключеный триггер, там неважно какой код, этот же код работает если его вставить во включенный триггер.

Эта ошибка.

Также карта не запускается с отключенным дебаг модом. Подключен рендер едж(в самой карте не используется).
Uploaded files
Borodach #44 - 9 months ago 1
Голосов: 1

» WarCraft 3 / MUI ли этот триггер?

А как мне без других игроков проверить? Мне проще у знатоков спросить, нежели кого-то звать
Выбрать всех юинтов и триггером отдать юниту приказ кастовать способность. Вот и проверка MUI
Borodach #45 - 10 months ago 0
Голосов: 0

» WarCraft 3 / Функция проверки спелла в Lua

Fly123, Есть костыльный вариант. Но на нем нужно,
1 - отказаться от маг.защит, и пилить свою маг защиту
2 - описание урона способностей надо писать ручками
Если такое устраивает, карта прилагается
Uploaded files
Borodach #46 - 10 months ago 2
Голосов: 2

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

function Trig_IsUnitSelected_Conditions takes nothing returns boolean
	if(not(IsUnitSelected(imbaUnit, GetTriggerPlayer())==true))then
		return false
	endif
		return true
endfunction

function Trig_IsUnitSelected_Actions takes nothing returns nothing
	call ClearSelectionForPlayer(GetTriggerPlayer())
	//здесь будут какие-то действия с игроком, который выбрал юнита
	//но как понять какой именно игрок кликнул на юнита?
endfunction
Borodach #47 - 10 months ago 0
Голосов: 0

» WarCraft 3 / Ошибка синтаксиса языка

Что значит на структуре? Это как? (где?)
Как то так, какой предмет и какой у него вес ты задаешь в начале, а дальше происходит магия.
Попробовал подробно описать
Uploaded files
Borodach #48 - 10 months ago 4
Голосов: 4

» WarCraft 3 / Утекают ли не обнулённые переменные типа handle

Obelick, Возможно, что из-за количества "трупов" начинает лагать. Измени KillUnit на RemoveUnit и проверь

И set u = null можно в конце обнулять, в цыкле она перезаписывается
Borodach #49 - 10 months ago 0
Голосов: 0

» WarCraft 3 / Помощь в реализации формулы

PT153, я к примеру приводил, если в функцию на х будет передаваться значение 0.
Идея такая. Есть предметы уровня 1...n, и способности имеющие уровней 1...n(требубт мин уровень предмета).
При получении предмета, дается способность и уровень не может быть выше уровня предмета. Циклом от 0 до уровня предмета. В цыкле надо получить шанс установить уровень способности. Чем выше уровень предмета тем выше шанс получить способность равную уровню предмета.
Если предмет 8 уровня, то шанс 1ур. способности = 20 и все больше растет к 8 уровню. На 8 ур. шанс будет равен 100

Спасибо, дома проверю.
Borodach #50 - 10 months ago 0
Голосов: 0

» WarCraft 3 / Помощь в реализации формулы

PT153, в функции в вопросе у-х, то есть х=0 будет 4-0=4, 5 иттераций из 5, до значения в 100. Если х=1 то 4-1=3, осталось 4 иттерации из 5 до значения 100.
Убывает в зависимости от того, сколько шагов от 0 к последнему. Или растет если шаг приближается к 0

В принципе диаграму можно построить с возрастанием. Изобразил первое что пришло в голову