28

» WarCraft 3 / Не меняется анимация старфолла

хз, у меня всё меняется, вероятно ты не то настроил

Редактор Объектов -> Заклинания -> Ночные Эльфы -> Заклинание -> Звездопад (цель)
Ctrl + D -> Ctrl + F -> AEsd

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

» WarCraft 3 / Манекен для битья

ну я её нашёл на вк3мапс, так что хз чья в действительности модель, пишут Grey Knight


а, ну если нашёл, то ок
Загруженные файлы
28

» WarCraft 3 / Трёхмерное движение

ArhiMEN, ну тогда хз, с этой штукой мне половина хгм канала пытались помочь, но формулу мне по итогу скинул N1ghtSiren
function PolarProjectionXYZ(x, y, z, dist, GroundAngle, FacingAngle)
    --FacingAngle - 0-360 -- yaw
    --GroundAngle - 0-180 -- pitch
    local x1 = x + dist*SinBJ(GroundAngle)*CosBJ(FacingAngle)
    local y1 = y + dist*SinBJ(GroundAngle)*SinBJ(FacingAngle)
    local z1 = z + dist*CosBJ(GroundAngle)
    --
    return x1,y1,z1
end
надеюсь не составит труда на джасс перенести

ну и сама карта, смотреть там правда нечего, я был абсолютным дауном и клепал недоспеллы на то время (собственно ничего и не изменилось), но мб этот вонючий огрызок как-то сможет помочь
код
library spelllib initializer SpiritMissile
    globals
        hashtable H = InitHashtable( )
    endglobals
    
    private struct SpiritMissileInfo
        unit u
        unit u1
        unit u2
        real x
        real y
        real speed
        real offsetz
        real a
        real a1
        real dmg
        real radius
        real dist
        real az
        real azs
        integer AttackType
        integer DamageType
        boolean tf
        boolexpr b
    endstruct
    
    private function SpiritMissileMove takes nothing returns nothing
        local timer t = GetExpiredTimer()
        local SpiritMissileInfo A = LoadInteger(H,GetHandleId(t),0)
        local real d = 0
        set A.x = (A.x+A.speed*Cos(A.a)) + A.offsetz*Sin(A.az)*Cos(A.a-A.a1)
        set A.y = (A.y+A.speed*Sin(A.a)) + A.offsetz*Sin(A.az)*Sin(A.a-A.a1)
        
        set A.dist = A.dist-A.speed
        
        call SetUnitX( A.u1, A.x )
        call SetUnitY( A.u1, A.y )
        call SetUnitFlyHeight(A.u1,GetUnitFlyHeight(A.u1) + A.offsetz*Cos(A.az),0)
        /*set bj_lastCreatedUnit = A.u
        call GroupEnumUnitsInRange(TempG,A.x,A.y,A.radius,A.b)
        if A.tf then
            call SetItemPositionEx(TempIt,A.x,A.y)
            set d = DBC(GetItemX(TempIt),GetItemY(TempIt),A.x,A.y)
        endif*/
        if A.dist <= 0 or d > 10 then
            
            //call KillUnit(A.u1)
            call FlushChildHashtable(H,GetHandleId(t))
            call PauseTimer(t)
            call DestroyTimer(t)
            call A.destroy()
            set A.u = null
            set A.u1 = null
            set A.u2 = null
            set A.a = 0.
            set A.a1 = 0.
            set A.speed = 0.
            set A.offsetz = 0.
            set A.dmg = 0.
            set A.dist = 0.
            set A.radius = 0.
            set A.az = 0.
            set A.azs = 0.
            set A.b = null
            set A.AttackType = 0
            set A.DamageType = 0
        else
            set A.az = A.az+(A.azs*bj_DEGTORAD)
            if A.u2 != null then
                set A.a = Atan2(GetUnitY(A.u2)-A.y,GetUnitX(A.u2)-A.x)
            endif
        endif
        
        set t = null
    endfunction
    
    function SpiritMissile takes nothing returns nothing
        local timer t = CreateTimer()
        local SpiritMissileInfo A = SpiritMissileInfo.create()
        
        set A.u = gg_unit_hfoo_0000
        set A.a = 0.00
        set A.a1 = 45.00 * bj_DEGTORAD
        set A.u1 = gg_unit_hfoo_0000
        set A.x = GetUnitX(A.u1)
        set A.y = GetUnitY(A.u1)
        set A.speed = 3
        set A.offsetz = 20
        set A.dmg = 0
        set A.dist = 999
        set A.radius = 100
        set A.az = 0.
        set A.azs = 6
        set A.b = null
        set A.AttackType = 0
        set A.DamageType = 0
        
        if false then
            set A.u2 = GetTriggerUnit()
        endif
        set A.tf = false
        
        call UnitAddAbility(A.u1,'Arav')
        call SetUnitFlyHeight(A.u1,50,0)
        call SetUnitPathing(A.u1,false)
        call SaveInteger(H,GetHandleId(t),0,A)
        call TimerStart(t,0.01,true,function SpiritMissileMove)
        
        set t = null
    endfunction
endlibrary

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

» WarCraft 3 / Трёхмерное движение

чёт не понятно, что конкретно ты хочешь, вращение юнита по yaw pitch roll или вращение вокруг его оси?
Загруженные файлы
28

» WarCraft 3 / Что не так?

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

» WarCraft 3 / Что не так?

так ты зациклил триггер, каков результат ожидался?
юнит получил урон - нанести юниту урон - юнит снова получил урон - юниту снова наносить урон, и так бесконечно

вот чутка отредаченный мной русификатор, тут вместо скобочек источник повреждения
Загруженные файлы
28

» WarCraft 3 / Проверка типа юнитов

вот собственно за 5 мин системка

нужно пояснять принцип работы или очевидно?

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

можешь такую конструкцию использовать, мб удобнее будет
28

» WarCraft 3 / Проверка типа юнитов

тю, не понимаю в чём проблема, самый топорный вариант выбрать всех юнитов на карте при условии и выдать золотишко
28

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

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

» WarCraft 3 / Как ограничить плавающий текст

native R2I takes real r returns integer
на гуях это конвертирование реального в целочисленное
Загруженные файлы
28

» WarCraft 3 / Выбор расы в кругу и быстрое строительство зданий в зоне

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

примерно так оно и выглядит, это набросок, в игре не тестил

только удаление юнита переместить на самый низ нужно, дабы избежать всяких казусов, пускай и удаляется юнит не сразу, а с какой-то задержкой

мб и владелец юнита триггера нужно переделать на владелец проданного юнита
Загруженные файлы
28

» WarCraft 3 / SetUnitVertexColor

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

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

» WarCraft 3 / Точка приложения эффекта

ArhiMEN, ну как бы вот

надеюсь теперь проблем не должно возникнуть)

угол в градусах, а не радианах, хотя в мх есть функции для радиан, так что уже без разницы
Загруженные файлы
28

» WarCraft 3 / Точка приложения эффекта

ArhiMEN, в смысле.. я в крусадере модель вертел как мне угодно, которая фиолетовый/красный след оставляла от взмахов меча/косы мордреда, то же самое и с этими когтями
28

» WarCraft 3 / Вращение вокруг своей оси

Bergi_Bear, ну если он гуишник то вышесказанное нами ему вообще не поможет
Fullega, на гуи нет толковых функций для работы с координатами, но вульфер уже делал видео с вращением юнитов, прошу к ознакомлению)