28

» WarCraft 3 / Триггерный урон на ровне с атакой

Гуванч, а, понял. Я не страдал такими проблемами ибо все скиллы делаю на джассе и это даёт мне возможность полностью контролировать всё что происходит касательно урона. В твоём случае, если делать триггерные аналоги не подходит, нужно использовать мемхак. Он позволяет понять с руки урон или нет, а так же тип урона
28

» WarCraft 3 / Триггерный урон на ровне с атакой

Нужно зарегистрировать на всех юнитов на карте событие "получает урон", а в другом триггере, где юнит получил урон - делать действия. Если ты имел ввиду именно после замаха, когда вылетает снаряд - то тут только костылить с таймингом либо воспользоваться мемхаком)
Ах да, ну можно и свою собственную атаку сделать)

Вот тут я пытался сделать собственную атаку, сейчас конечно мог бы сделать получше и немного по-другому, с очень классной либой, но что-то не интересует)
28

» WarCraft 3 / Триггерная волна силы

Триггерные волны силы делали миллион раз и на джассе, и на вджассе, и на сджассе, и на зинке, и на луа, и даже на гуи дружище)

Я могу сделать то что ты хочешь, чтобы ты мог просто задать значения, вопрос только какой вариант выше тебе подойдёт?) (кроме луа конечно)
28

» WarCraft 3 / Ошибки при запуске WE и нерабочий JASS

Принятый ответ
Так тебе вджасс нужен)


Вджасс это дополнение к обычному джассу, у себя ты можешь видеть строки объявления библиотеки, продвинутые комментарии и статические константные переменные

28

» WarCraft 3 / Эффект выстрела остаётся

Вроде в игровых константах можно настроить время смерти эффектов. Так же можно посмотреть на длительность анимации смерти у эффекта
28

» WarCraft 3 / Двигать юнита(ов) к юниту?

Nikolay36, я сказал практически)
всё что тебе нужно по факту это угол с координатами и насколько сдвинуть юнита, знать математику и думать тут вообще не надо, нужно лишь знать принцип работы)

у меня у самого знания шестиклассника

раскрыть
library mylib initializer InitTrig_fd
globals
    constant hashtable H = InitHashtable()
    private group TempG
    private group TempG1 = CreateGroup()
    private real TempX
    private real TempY
endglobals

native UnitAlive takes unit id returns boolean

private function DBC takes real x, real y, real x1, real y1 returns real
   return SquareRoot((x-x1)*(x-x1)+(y-y1)*(y-y1)) 
endfunction

private function mycond takes nothing returns boolean
    set bj_lastReplacedUnit = GetFilterUnit()
    return UnitAlive(bj_lastReplacedUnit) and IsUnitEnemy(bj_lastReplacedUnit,GetOwningPlayer(bj_lastCreatedUnit))
endfunction

private function move1 takes nothing returns nothing
    local unit u = GetEnumUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local real a = Atan2(TempY-y,TempX-x)
    
    set x = x+20.*Cos(a)
    set y = y+20.*Sin(a)
    call SetUnitX(u,x)
    call SetUnitY(u,y)
    if DBC(TempX,TempY,x,y) <= 100. then
        call SetUnitPosition(u,x,y)
        call UnitDamageTarget(bj_lastCreatedUnit,u,100.,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
        call GroupRemoveUnit(TempG,u)
    endif
    
    set u = null
endfunction

private function move takes nothing returns nothing
    local timer t = GetExpiredTimer()
    set TempG = LoadGroupHandle(H,GetHandleId(t),1)
    set bj_lastCreatedUnit = LoadUnitHandle(H,GetHandleId(t),0)
    
    set TempX = GetUnitX(bj_lastCreatedUnit)
    set TempY = GetUnitY(bj_lastCreatedUnit)
    call ForGroup(TempG,function move1)
    
    if FirstOfGroup(TempG) == null then
        call DestroyGroup(TempG)
        call FlushChildHashtable(H,GetHandleId(t))
        call PauseTimer(t)
        call DestroyTimer(t)
    endif
    
    set t = null
    set TempG = null
    set bj_lastCreatedUnit = null
endfunction

private function Trig_fd_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local boolexpr b = Condition(function mycond)
    set TempG = CreateGroup()
    set bj_lastCreatedUnit = GetTriggerUnit()
    
    call GroupEnumUnitsInRange(TempG,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,b)
    call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
    call SaveGroupHandle(H,GetHandleId(t),1,TempG)
    call TimerStart(t,.02,true,function move)
    
    set b = null
    set t = null
    set TempG = null
    set bj_lastCreatedUnit = null
endfunction

//===========================================================================
private function cancel takes nothing returns nothing
    local timer t = GetExpiredTimer()
    call IssueImmediateOrder(LoadUnitHandle(H,GetHandleId(t),0),"stop")
    call FlushChildHashtable(H,GetHandleId(t))
    call DestroyTimer(t)
    set t = null
    
    call BJDebugMsg("Рядом никого нет")
endfunction

private function Trig_fd_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'A000' then
        call Trig_fd_Actions()
    endif
    return false
endfunction
private function Trig_fd_Conditions1 takes nothing returns boolean
    local timer t
    if GetSpellAbilityId() == 'A000' then
        set bj_lastCreatedUnit = GetTriggerUnit()
        call GroupEnumUnitsInRange(TempG1,GetUnitX(bj_lastCreatedUnit),GetUnitY(bj_lastCreatedUnit),1000.,Condition(function mycond))
        if FirstOfGroup(TempG1) == null then
            set t = CreateTimer()
            call SaveUnitHandle(H,GetHandleId(t),0,bj_lastCreatedUnit)
            call TimerStart(t,0.,false,function cancel)
            set t = null
        else
            call GroupClear(TempG1)
        endif
        set bj_lastCreatedUnit = null
    endif
    return false
endfunction
private function InitTrig_fd takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    set gg_trg_fd = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(gg_trg_fd, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_CAST, null)
        set i = i+1
        exitwhen i == 16
    endloop
    call TriggerAddCondition( gg_trg_fd, Condition( function Trig_fd_Conditions ) )
    call TriggerAddCondition( t, Condition( function Trig_fd_Conditions1 ) )
    set t = null
endfunction
endlibrary
Загруженные файлы
28

» WarCraft 3 / Двигать юнита(ов) к юниту?

Nikolay36, )
Но тут уже дело не в математике, на самом деле она даже практически не нужна тут))

Могу сделать этот спелл чуть позже, если никто не преуспеет
28

» WarCraft 3 / Двигать юнита(ов) к юниту?

quq_CCCP, может он вообще хочет узнать принцип работы группы юнитов на джассе? Типо как создать, добавлять, перебирать
28

» WarCraft 3 / Двигать юнита(ов) к юниту?

Nikolay36, тю лол, в чем проблема закинуть всех юнитов в группу и проделать те же действия?)
28

» WarCraft 3 / Путь эффекта невидимости

PT153, меня тоже заинтересовало где он нашел такой путь, мне казалось это обычная прозрачность)
28

» WarCraft 3 / Двигать юнита(ов) к юниту?

Принятый ответ
Так движение юнита без приказа это и есть перемещение)
Такое можно и на гуи спокойно сделать

Загруженные файлы
28

» Блог Keparis9 / Ввод в блог Keparis9

Komkozavr, не, ланд очень трудоёмкая и кропотливая работа, позабрасывал такие крутые идеи из-за лени делать ланд, карты ведь не маленькие и те же деревья нужно аккуратно и разумно тыкать, ведь это игровое поле
28

» WarCraft 3 / Полезная информация

WakeUpSamurai, в триггерах раздел "спецэффекты" -> отметка на миникарте
Загруженные файлы
28

» WarCraft 3 / Полезная информация

WakeUpSamurai, у способности в разрешенных целях убери галочку что они не действуют на героев
28

» WarCraft 3 / Предмет меняющий здоровье на ману. проблема самоубийства им

mistwood, арифметикой)
Если отнять 200 от текущего здоровья меньше 1, то 200 отнять текущее здоровье и от текущего здоровья отнять полученный результат-1
28

» WarCraft 3 / Предмет меняющий здоровье на ману. проблема самоубийства им

Делать дофига уровней этой абилки и устанавливать уровень на максимальную разницу в здоровье если не ниже 1

А, это не постоянный предмет? Тогда сорян, и вправду можно спокойно триггерно сделать, протупил))
28

» WarCraft 3 / Как сделать фильтр для разных игроков?

Принятый ответ
Через гетлокал плеер

На гуи такой функции нет, поэтому используй кастом скрипт
установить TempPlayer = игрок владелец юнита/триггера/т.д.
if GetLocalPlayer() == udg_TempPlayer then
Ввод/затемнение и т.п.
endif

раскрыть
Загруженные файлы
28

» WarCraft 3 / Бездействие самолётов как в генералах

Pasha115, контроль над процессом полностью принадлежит тебе, меняй что хочешь и как хочешь. Максимум что я изменил бы там, чтобы они в рандомную сторону начали кружиться, а не только по часовой, а если ответить на вопрос, то да, добавь туда тип юнита который кружится на месте
28

» WarCraft 3 / Бездействие самолётов как в генералах

ssbbssc:
Советую послушать Экстрематора, человек тут не первый год.
Резюмируя вышесказанное - легче найти\создать модель с такой анимацией stand
Мне интересно как вход и выход из такой анимки выглядел бы)

+ тени пришлось бы наверно убрать, они же кружиться не будут в такой анимации)
28

» WarCraft 3 / Бездействие самолётов как в генералах

Принятый ответ
Тю ребят, ну вы шо, на приколе?)

Я же сказал, посмотрите как у москитов сделано, они кружатся

Загруженные файлы
28

» Блог Keparis9 / Ввод в блог Keparis9

Да, у меня было такое, что я жалел об удаленных картах. У меня средние познания редактора (даже ниже среднего), но я не могу выпустить ни одну карту из-за слишком высокой планки идеала и огромных масштаб работ. Я обожаю делать спеллы, но ненавижу возиться с ландом, и из-за отсутствия ланда не могу ничего сделать по карте толком