20

» WarCraft 3 / Если unit == null

NazarPunk, хорошая инфа, но она не помогает, я проверяю каждые секунду в примере и приравниваю к null, все равно всегда возращает false.
Вот пример.
Загруженные файлы
20

» WarCraft 3 / Вопрос по поводу отлова точки

IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) - вернет true если местность непроходима, и false, если местность проходима.
20

» WarCraft 3 / Ошибка, при объявлении библиотеки.

Так ты всю либо кинь.
кат
//=====================================================================================================\\
library MainBar initializer InitSetBar

    native UnitAlive takes unit u returns boolean

    globals
        constant real br_updatePeriod = 0.2 //период обновления баров.
        integer array br_indHP //сохраняет текущий индекс модели хпбара,  чтобы сравнить, изменился ли он.
        integer array br_indMP //сохраняет текущий индекс модели мпбара,  чтобы сравнить, изменился ли он.
        integer array br_abilityHP
        integer array br_abilityMP
        integer br_unitCounter = 0
        effect array br_effHP //записывает хпбар, чтобы его можно было удалить и заменить другим.
        effect array br_effMP //записывает хпбар, чтобы его можно было удалить и заменить другим.
        region br_mapArea = null
        unit array br_unit
        boolean array br_unitIntimer
    endglobals
    
    nothing SetBar( ){ 
        integer i = 1
        integer iend = br_unitCounter
        integer indHP
        integer indMP
        loop{
            exitwhen i > iend
            if (UnitAlive(br_unit[i])) {
                indHP = R2I(GetUnitLifePercent(br_unit[i])/5)
                if (br_indHP[i] != indHP)  {
                    UnitRemoveAbility(br_unit[i], br_abilityHP[br_indHP[i]])
                    UnitAddAbility   (br_unit[i],  br_abilityHP[indHP])
                    br_indHP[i] = indHP
                }
                indMP = R2I(GetUnitManaPercent(br_unit[i])/5)
                if (br_indMP[i] != indMP) and (GetUnitState(br_unit[i], UNIT_STATE_MAX_MANA) > 0) {
                    UnitRemoveAbility(br_unit[i], br_abilityMP[br_indMP[i]])
                    UnitAddAbility   (br_unit[i],  br_abilityMP[indMP])
                    br_indMP[i] = indMP
                }
            }
            i++
        }
    }

    nothing TimerStartEx ( timer whichTimer, real period, boolean isPeriodic, code handlerFunc, integer userData ){ 
        TimerStart(whichTimer, I2R(userData), false, null)
        PauseTimer(whichTimer)
        TimerStart(whichTimer, period, isPeriodic, handlerFunc )
    }
 
    integer TimerGetUserData ( timer whichTimer ){ 
        return R2I(TimerGetRemaining(whichTimer )+0.5)
    }

    nothing ClearIDBar () {
        timer t = GetExpiredTimer()
        integer id = TimerGetUserData(t)
        if UnitAlive(br_unit[id]) == false {
            br_unit[id] = br_unit[br_unitCounter]
            br_effHP[id] = br_effHP[br_unitCounter]
            br_effMP[id] = br_effMP[br_unitCounter]
            br_indHP[id] = br_indHP[br_unitCounter]
            br_indMP[id] = br_indMP[br_unitCounter]
            br_unit[br_unitCounter] = null
            br_effHP[br_unitCounter] = null
            br_effMP[br_unitCounter] = null
            br_indHP[br_unitCounter] = 0
            br_indMP[br_unitCounter] = 0
            br_unitCounter = br_unitCounter - 1
        } else
        br_unitInTimer[id] = false
        DestroyTimer(t)
        t = null
    }
    
    nothing ClearRemoteUnits() {
        integer i = 1
        integer iend = br_unitCounter
        loop{
            exitwhen i > iend
            if (br_unit[i] == null) and (br_unitInTimer[i] == false) {
            BJDebugMsg("null " + I2S(i))
            }
            i++
        }
    }

    nothing ClearBarDeath ( ){ 
        integer i = 1
        integer iend = br_unitCounter
        integer id
        loop {
            exitwhen i > iend
            if br_unit[i] == GetTriggerUnit() {
                DestroyEffect(br_effHP[i])
                DestroyEffect(br_effMP[i])
                id = i
            }
            i++
        }
        timer t = CreateTimer()
        br_unitInTimer[id] = true
        TimerStartEx(t, 88, false, function ClearIDBar, id)
        t = null
    }
    
    nothing InitSetBar(){ 
        EnablePreSelect(false, false) //скрывает полоски здоровья и информацию при наведении на юнита.
        br_abilityHP[0] = 'HP00'
        br_abilityHP[1] = 'HP01'
        br_abilityHP[2] = 'HP02'
        br_abilityHP[3] = 'HP03'
        br_abilityHP[4] = 'HP04'
        br_abilityHP[5] = 'HP05'
        br_abilityHP[6] = 'HP06'
        br_abilityHP[7] = 'HP07'
        br_abilityHP[8] = 'HP08'
        br_abilityHP[9] = 'HP09'
        br_abilityHP[10] = 'HP10'
        br_abilityHP[11] = 'HP10'
        br_abilityHP[12] = 'HP12'
        br_abilityHP[13] = 'HP13'
        br_abilityHP[14] = 'HP14'
        br_abilityHP[15] = 'HP15'
        br_abilityHP[16] = 'HP16'
        br_abilityHP[17] = 'HP17'
        br_abilityHP[18] = 'HP18'
        br_abilityHP[19] = 'HP19'
        br_abilityHP[20] = 'HP20'
        br_abilityMP[0] = 'MP00'
        br_abilityMP[1] = 'MP01'
        br_abilityMP[2] = 'MP02'
        br_abilityMP[3] = 'MP03'
        br_abilityMP[4] = 'MP04'
        br_abilityMP[5] = 'MP05'
        br_abilityMP[6] = 'MP06'
        br_abilityMP[7] = 'MP07'
        br_abilityMP[8] = 'MP08'
        br_abilityMP[9] = 'MP09'
        br_abilityMP[10] = 'MP10'
        br_abilityMP[11] = 'MP11'
        br_abilityMP[12] = 'MP12'
        br_abilityMP[13] = 'MP13'
        br_abilityMP[14] = 'MP14'
        br_abilityMP[15] = 'MP15'
        br_abilityMP[16] = 'MP16'
        br_abilityMP[17] = 'MP17'
        br_abilityMP[18] = 'MP18'
        br_abilityMP[19] = 'MP19'
        br_abilityMP[20] = 'MP20'
        integer i = 0
        integer iend = 20
        unit u = CreateUnit( Player(0), 'hfoo' , 0, 0, 0)
        loop {
            exitwhen i > iend
            UnitAddAbility(u, br_abilityHP[i])
            UnitAddAbility(u, br_abilityMP[i])
            i++
        }
        KillUnit(u)
        RemoveUnit(u)
        u = null
        TimerStart(CreateTimer(), br_updatePeriod, true, function SetBar )
        TimerStart(CreateTimer(), 30, true, function ClearRemoteUnits)
        trigger trg_br_ClearIDBarDeath = CreateTrigger( )
        TriggerRegisterAnyUnitEventBJ( trg_br_ClearIDBarDeath, EVENT_PLAYER_UNIT_DEATH )
        TriggerAddAction( trg_br_ClearIDBarDeath, function ClearBarDeath )
    } 
 
endlibrary
 //=====================================================================================================\\
Ошибка была в том, что при удалении блока else, удалил только скобки, а else оставил.
20

» WarCraft II: The Rebirth / Новости проекта (13.04.19) Рабочая система нефти

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

» WarCraft 3 / Телепортируется здание

8gabriel8, если это "захват" здания, то уничтожения никакого и не должно быть, я думаю.
8gabriel8, можно добавить новую переменную и считать "захваченные" здания.
20

» WarCraft 3 / Телепортируется здание

Hogger16level, Hate~~ все правильно сказал, лови урон, давай неуязвимость, меняй владельца. Лучший способ.
20

» WarCraft 3 / Телепортируется здание

Hogger16level, стандартная ориентация зданий = 270.0
Не знаю как это могло исправить.
CreateUnit(GetOwningPlayer(GetKillingUnit()), 'hhou', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), bj_UNIT_FACING)
Не думаю, что в этом проблема, даже так все работает без изменений.
20

» WarCraft 3 / Телепортируется здание

Hogger16level, Делал такое же 2 года назад, у меня все нормально работало, странно.
Осторожно, далее плохой пример:
Вот, в той же точке становится, не знаю почему так.
Загруженные файлы
20

» WarCraft 3 / Нужна модель? - Вам сюда!

Rusvermilion, не проще увеличить дальность способности, или триггерно отодвигать его?
20

» WarCraft 3 / Нужна модель? - Вам сюда!

Можете помочь, вроде не сложно. В архиве лежат модельки полосок маны и хп, нужно убрать у них "прозрачность", и все. Прикладываю карту, где можно загрузить и посмотреть их отображение.
Архив
Карта
Также, было бы хорошо, если бы сделали вторую версию этих полосок, но тимколорные.
UPD: Также можно сделать их чуть повыше, на 10-15 точек по оси Z.
С меня как всегда ни...., могу комменты полайкать
Загруженные файлы
20

» WarCraft 3 / Сохранение приказов v2.0

Steal nerves, можно было бы такое сделать, но я делаю без мемхака, т.к хочу безболезненно адаптировать карту и под новую версию.
20

» WarCraft 3 / Отследить разложения юнита.

8gabriel8, приеду проверю, но мне подходит вариант quq_CCCP. Просто нужно очищать его из переменной массива, которая содержит всех юнитов на карте. ТК есть цикл на проверку всех юнита, чтоб не делал лишних действий.
8gabriel8, кстати, без разницы мне, будут ли создаваться при воскрешении новые юниты или нет, т к для новых юнитов счетчик обновится, а старых уберу из переменных. Хотя, мне почему-то кажется, что это будут те же юниты, а не новые.
20

» WarCraft 3 / Красивые хп/мана бары

Jack-of-shadow, кстати, можешь поправить модельки, там хпбар_20 не заполнен полностью.