22

» WarCraft 3 / 2 книги заклинаний у одного воина

8gabriel8, расмешил ты (Доставка ресурсов, Канал, Спеллбук) вот эти абилки имеют приказы в ро
22

» WarCraft 3 / Не появляется юнит

вы точно правильно в ро настроили (Примеры орков заменяет тролей юнитов)
22

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

есть на основе способность "Укрытся за шитом" через приказ ловит при смерти, при разложение, при воскрешение.
пример кода с моего карты
/**
    * Событие с юнитам
    ***/
    
    private function InitStatus takes nothing returns nothing
        local unit u = GetTriggerUnit()
        local integer i = GetUnitIndex(u)
        
        if not(i == 0) then
            if IsUnitType(u, UNIT_TYPE_DEAD) then
                if xe_deadIDs[i] then
                    set xe_deadIDs[i] = false // удаляем труп
                    call RemoveUnit(u)
                else
                    set xe_deadIDs[i] = true // умер но осталось труп
                endif
            endif
            // и другие проверки на воскрешение...
        endif
        
        set u = null
    endfunction
    
    private function InitEnter takes nothing returns nothing
        local integer i = GetUnitIndex(GetFilterUnit())
        
        if i == 0 then
            set i = CreateUnitIndex(GetFilterUnit())
            set xe_deadIDs[i] = IsUnitType(GetFilterUnit(), UNIT_TYPE_DEAD)
            call UnitAddAbility(GetFilterUnit(), ABILITY_ID) 
            call UnitMakeAbilityPermanent(GetFilterUnit(), true, ABILITY_ID)
        endif
    endfunction

    private function FilterOrder takes nothing returns boolean
        return GetIssuedOrderId() == 852056
    endfunction
    
    private function FilterUnit takes nothing returns boolean
        local integer handleID = GetHandleId(GetFilterUnit())
        local integer typeID = GetUnitTypeId(GetFilterUnit())
        
        if GetUnitOption(typeID, AUTO_DISABLE_INDEX) == 1 or GetUnitOption(handleID, AUTO_DISABLE_INDEX) == 1 then
            return false
        endif

        return GetUnitOption(0, AUTO_DISABLE_INDEX) == 0
    endfunction
    
    private function Init takes nothing returns nothing
        local region r = CreateRegion()
        local rect w = GetWorldBounds()
        local group g = CreateGroup()
        local integer n = 0
        
        loop
            exitwhen n == bj_MAX_PLAYER_SLOTS
            call SetPlayerAbilityAvailable(Player(n), ABILITY_ID, false)
            call TriggerRegisterPlayerUnitEvent(tStatus, Player(n), EVENT_PLAYER_UNIT_ISSUED_ORDER, function FilterUnit)
            call GroupEnumUnitsOfPlayer(g, Player(n), And(function FilterUnit, function InitEnter))
            set n = n + 1
        endloop
        
        call RegionAddRect(r, w)
        call TriggerRegisterEnterRegion(tEnter, r, And(function FilterUnit, function InitEnter))
        call TriggerAddCondition(tStatus, And(function FilterOrder, function InitStatus))
        
        call GroupClear(g)
        call DestroyGroup(g)
        call RemoveRect(w)
        set g = null
        set w = null
    endfunction
22

» WarCraft 3 / Приватность предмета

зачем пустышку омг.
Ловите приказ на итем цель если являет предмет и проверяем если игрок равен 0 то он свободен после чего устанавливает игрока 1
а если занят то приказ остановить и оповестить что это не ваш.
не надо изврашать пустышками
22

» WarCraft 3 / Приватность предмета

узай SetDataItem если его не занят либо в базу заносит хендл и игрока а может и юнита. Невижу сложного!
22

» WarCraft 3 / Выпадение предметов после смерти

разложение вы можете взять у способность шит у альянса. Он ловит события приказа при смерти и при разложение удаление. Из него я ловлю воскрешение и полностью удаление разложение.
22

» WarCraft 3 / Смерть в лаве

NazarPunk, каждый тик берем из юнита точка и смешаем на 4 точки в массиве от 0 до 3, потом проходим проверку что это точка являеет левее или нет и так по очереди и устанвливае какой юнит вошел в сторону лав.
22

» WarCraft 3 / Смерть в лаве

NazarPunk, если игрок вошел в лаву то переодически снимаем хп тем дольше в лаве тем усиливает урон. То есть если игрок вошел для него создаем масссив с 0 времени и так растет, тем больше времени тем больше урон.
что можно выжить если он по ошибку вошел и сразу вышел это снимут половину хп =)
то есть за 1 сек в лаве равен 100% урон
22

» WarCraft 3 / Смерть в лаве

делай не моментальный смерть а снять опредеелное количество хп тогда красиво теряет и умирает.
22

» WarCraft 3 / Патч 1.31, скоро?

1.31 выйдет ближе к выпуска рефорджа так что угомонись и оценим как выйдет!
22

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

Нужен модель выглидит как точь в точь "{script}" и врашает по кругу как предмет. Спасибо!
цвет жельтый!
22

» WarCraft 3 / Правильно ли проверка строки if()

и как реализовать так а то всю ночь намучал парсер ок. терь и проверку if =)
сначало я переношу текст где есть проверка и && как строка в случаем если встретим || то переносим строка проверку иначе результат получен.
function andValue(string str) -> boolean {
        цикл на проверки && и ==
        return false;
    }
    
    function onInit() {
        ParserCondition.create("if", function(string str) -> boolean { // if
            integer step = 0, n = 0, l = StringLength(str);
            string s = "", e = "", v = "";
            boolean bValue = false, bResult = false;
            
            while(n < l) {
                s = SubString(str, n, n + 1);
                e = SubString(str, n + 1, n + 2);
                
                if(step > 0 && s == " ") {
                
                } else if(step == 0) {
                    if (s == "|" && e == "|" && !bValue) {
                        bResult = true;
                        bValue = andValue(v);
                        v = "";
                    } else {
                        v = v + s;
                    }
                }
                
                n = n + 1;
            }
            
            if(bResult) {
                bValue = andValue(v);
            }
            
            return bValue;
        });
    }
22

» WarCraft 3 / Порядок инициализации

Принятый ответ
да библиотеку по ней и вызываеш uses <Название библиотек> и они знают какой порядок идти и инициализирует
library TestOwn initializer Init uses TestPre
	function Init // будет сработать после инит TestPre
endlibreary
library TestPre
endlibreary