32

» WarCraft 3 / Не работает понижение уровня исследования

Terracon, ну вас в поиске забанили? Вот ссылка
Наработки этого типа очень распространены, учитесь гуглить сударь.
32

» WarCraft 3 / Магазин из Юнита.

WarCraftus,
Карта путей здания и прочие параметры настраивайте по вкусу, там все поля подписаны на русском языке, меняйте и смотрите что будет.
32

» WarCraft 3 / Блокираторы пути (расширенные возможности)

Maniac_91, не может же быть 1x1 один фиг нет такого юнита, да и сетка кратна 4 насколько я помню. При рассчете пути используется система приближенного расчета размеров юнитов, т.е юнит всегда будет 4-8-16 ну и так далее.
32

» WarCraft 3 / Не работает понижение уровня исследования

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

» WarCraft 3 / Как заставить ИИ строить нестардартный объект вроде ратуши

Принятый ответ
Написать свой ии, ты опупел со скриншотом? Совсем чтоли попоошай?
Так чисто для справки - р редакторе ии можно только описывать что и когда строить и когда нападать, а когда занимать новую базу, карта монолит в помощь.
32

» WarCraft 3 / По поводу AI - World Editor

Принятый ответ
Ну смотря что вы считаете ИИ, тактику или микро контроль? Экономика и тактика описана в ai скриптах, там обычный jass а микро и применение абилок в движке игры, это ни скопировать - только воссоздать на jass основываясь на данных о поведении ИИ.
32

» WarCraft 3 / Запуск перезарядки способности (не мемхак)

Кстати с помощью рун и виндвалка делал типа критов, доп урон на 1 удар, прикольно получалось.
32

» WarCraft 3 / Timer expired условия

Не последний который закончился, а тот что запустил поток триггера или таймера. GetExpiredTimer (), в кастом скрипте используй.
32

» WarCraft 3 / Запуск перезарядки способности (не мемхак)

Перерождение и мемхак онли, других путей нет. Перерождение еще запускается смертью, но там сбивается все.
32

» WarCraft 3 / Timer expired условия

В гуях вроде можно, ну на JASS переходи, и все это дерьмо не потребуется.
GetEexpiredTimer() ищи в гуях, или кастом скриптом юзай.
32

» WarCraft 3 / Событие ПРИВОДИТ СПОСОБНОСТЬ В ДЕЙСТВИЕ

Автокасты вроде ядовитых стрел отлавливаются только детектом урона по цели + проверка дебаффа, примеры есть в опен доте. Если знакомы с Jass то проблем не будет вовсе.
32

» WarCraft 3 / Два события в триггер

Просите какая то ерунда, вы пытаетесь сделать стандартный снаряд?
Есть метод проще, да еще одно но, при касте негативной абилки - сначала 0.00 урона в цель, потом после попадания 0.00 урона + дебафф если он есть. Проверили бы все обьекты, да и откуда GetTriggeringTrigger() в потоке вызванном таймером?
Я юзаю примерно следующий код:
Dummy Missile
scope DummyMissile

    function AddTimedAnimation takes nothing returns nothing
        local timer t = GetExpiredTimer( )
        call SetUnitAnimation( LoadUnitHandle( gg_htb_HashData, GetHandleId(t), 0  ), "spell" )
        call FlushChildHashtable( gg_htb_HashData, GetHandleId(t) )
        call DestroyTimer(t)
        
        set t = null
    endfunction


    struct DMD
        trigger trg
        triggercondition trc
        triggeraction tra
        triggeraction extra
        unit cast
        unit targ
        unit ex
        integer id
        timer trix
        boolean del
            
        method FlushData takes nothing returns nothing
            call DisableTrigger( .trg )
            call TriggerRemoveCondition( .trg, .trc )
            call TriggerRemoveAction( .trg, .tra )
            call TriggerRemoveAction( .trg, .extra )
            call TriggerClearActions( .trg )
            call TriggerClearConditions( .trg )
            call RemoveDataBX( .trg )
            call RemoveDataBX( .trix )
            call DestroyTrigger( .trg )
            call DestroyTimer( .trix )

            set this.trg = null
            set this.trc = null
            set this.tra = null
            set this.extra = null
            set this.cast = null
            set this.targ = null
            set this.ex = null
            set this.trix = null
            set this.id = 0
            set this.del = false
        endmethod
    endstruct

    function IsTargetHasBuff takes nothing returns boolean
        local DMD st = GetDataBX( GetTriggeringTrigger( ) )
        set bj_lastEventId = GetTriggerEventId( )
        
        if bj_lastEventId == EVENT_WIDGET_DEATH then
            call TriggerRemoveAction( st.trg, st.tra )
            return true
        endif
        
        if bj_lastEventId == EVENT_UNIT_DAMAGED then
            if  GetEventDamageSource( ) == DummyAttacker then
                return false
            elseif GetEventDamage( ) == 0.00 and GetEventDamageSource( ) == st.cast  and GetUnitAbilityLevel( st.targ, 'BNss' ) > 0  then
                call TriggerRemoveAction( st.trg, st.tra )
                return true
            endif
        endif
    
        return GetEventDamage( ) == 0.00 and GetUnitAbilityLevel( st.targ, st.id ) > 0 and GetEventDamageSource( ) == st.cast 
    endfunction

    function Destroy_DMD takes nothing returns nothing
        local DMD st = GetDataBX( GetExpiredTimer( ) )
        call st.FlushData( )
        call st.destroy( )
    endfunction
    
    function RemoveDMDBuff takes nothing returns nothing
        local DMD st = GetDataBX( GetTriggeringTrigger( ) )
        if st.del then
            call UnitRemoveAbility( st.targ, st.id )
        endif
        call PauseTimer( st.trix )
        call DisableTrigger( st.trg )
        call TimerStart( st.trix, 10.00, false, function Destroy_DMD )
        return
    endfunction
    
    function DummyMissile takes unit target, unit caster, integer buffid, real time, boolean del, code actions returns nothing
        local DMD st = DMD.create( )
        set st.cast = caster
        set st.targ = target
        set st.id = buffid
        set st.del = del
        set st.trix = CreateTimer( )
        set st.trg = CreateTrigger( )
        set st.trc = TriggerAddCondition( st.trg, Condition( function IsTargetHasBuff ) )
        set st.tra = TriggerAddAction( st.trg, actions )
        set st.extra = TriggerAddAction( st.trg, function RemoveDMDBuff )
        call TriggerRegisterUnitEvent( st.trg, target, EVENT_UNIT_DAMAGED )
        //call TriggerRegisterUnitEvent( st.trg, target, EVENT_UNIT_SPELL_EFFECT)
        call TriggerRegisterDeathEvent( st.trg, target )
        call TimerStart( st.trix, time, false, function Destroy_DMD )
        call SetDataBX( st.trg, st )
        call SetDataBX( st.trix, st )
    endfunction
    
    function Timer_DummyMovement_Expires takes nothing returns nothing
        local TriggerData dd = GetDataBX( GetExpiredTimer( ) )
        
        set dd.time = dd.time + 1
        
        if not IsUnitDead( dd.attacker ) then
            call SetUnitX( dd.dummy, GetUnitX( dd.attacker ) )
            call SetUnitY( dd.dummy, GetUnitY( dd.attacker ) )
        endif
        
        if dd.time > 64 then
            call PauseTimer( dd.trix )
            call RemoveDataBX( dd.trix )
            call DestroyTimer(  dd.trix)
        endif
        
    endfunction 
    
    function DummyMissileEx_Check_Buff_Codnditions takes nothing returns boolean
        local TriggerData st = GetDataBX( GetTriggeringTrigger( ) )
        set bj_lastEventId = GetTriggerEventId( )
        
        if bj_lastEventId == EVENT_WIDGET_DEATH or bj_lastEventId == EVENT_GAME_TIMER_EXPIRED then
            call TriggerRemoveAction( st.trg, st.tra )
            return true
        endif
        
        if bj_lastEventId == EVENT_UNIT_DAMAGED then
            if  GetEventDamageSource( ) != st.dummy then
                return false
            elseif GetEventDamage( ) == 0.00 and GetEventDamageSource( ) == st.dummy  and GetUnitAbilityLevel( st.attacked, 'BNss' ) > 0  then
                call TriggerRemoveAction( st.trg, st.tra )
                return true
            endif
        endif
        
        return GetEventDamage( ) >= 0.00 and GetUnitAbilityLevel( st.attacked, st.id ) > 0 and GetEventDamageSource( ) == st.dummy 
        return false
    endfunction
    
    function DummyMissileEx_ExtraActions takes nothing returns nothing
        local TriggerData st = GetDataBX( GetTriggeringTrigger( ) )
        
        call DisableTrigger( st.trg )
        
        if st.trix != null then
            call PauseTimer(st.trix)
            call RemoveDataBX( st.trix )
            call DestroyTimer(st.trix)
        endif
        
        if not IsUnitDead( st.attacked ) then
            if GetUnitAbilityLevel( st.attacked, st.id ) > 0 then
                call UnitRemoveAbility( st.attacked, st.id )
            endif
        endif
    
        call RemoveUnit( st.dummy )
    
        call st.RemoveTrigger()
        call st.destroy()
    endfunction
    
    function DummyMissileEx takes unit target, unit caster, boolean spell, integer missileid, integer order, integer buffid, code actions returns boolean
        local TriggerData st = TriggerData.create()
        local timer t
        local boolean b = false
        
        if spell then
            set t= CreateTimer( )
            call SaveUnitHandle( gg_htb_HashData, GetHandleId(t),0, caster )
            call TimerStart( t, 0.10, false, function AddTimedAnimation )
            set t = null
        endif
        
        set st.attacker = caster
        set st.attacked = target
        set st.id = buffid
        set st.pl = GetOwningPlayer( st.attacker )
        set TempAX = GetUnitX( st.attacker )
        set TempAY = GetUnitY( st.attacker )
        set st.dummy = CreateUnit( st.pl, 'hatk',TempAX,TempAY,GetUnitFacing(st.attacked))
        set st.trg = CreateTrigger( )
        set st.trc = TriggerAddCondition( st.trg, Condition( function DummyMissileEx_Check_Buff_Codnditions  ) )
        set st.tra = TriggerAddAction( st.trg, actions )
        set st.extra = TriggerAddAction( st.trg, function DummyMissileEx_ExtraActions )
        set st.trix = CreateTimer() 
         
        call SetUnitPathing(st.dummy, false)
        call SetUnitX(st.dummy,TempAX)
        call SetUnitY(st.dummy,TempAY)
        call UnitApplyTimedLife(st.dummy, 'BTLF', 10.00 )
        call UnitAddAbility( st.dummy, missileid )
        
        call UnitShareVision( st.attacked, st.pl, true )
        set b = IssueTargetOrderById( st.dummy, order, st.attacked )  // incenerate arrow
        call UnitShareVision( st.attacked, st.pl, false )
        
        call TriggerRegisterDeathEvent( st.trg, st.attacked )
        call TriggerRegisterUnitEvent( st.trg, st.attacked, EVENT_UNIT_DAMAGED )
        call TriggerRegisterTimerEvent( st.trg, 10.00, false )
        
        call SetDataBX( st.trg, st )
        
        if b then
            call SetDataBX( st.trix, st )
            set st.time = 1
            call TimerStart( st.trix, 0.03125, true, function Timer_DummyMovement_Expires )
        endif
    
        return b
    endfunction

endscope
Первый вариант - когда юнит сам кастует спелл, второй когда спелл кастует даммик.
32

» WarCraft 3 / "Люди" испорчущие тебе рейтинг просто так...

Что? Кого? Когда?
Какой рейтинг, где, кто тебе его испортил? Чувак если ты будешь продолжать в том же духе то рейтинг тебе буду портить уже я.
32

» WarCraft 3 / Как сменить модель выпадающего предмета?

Все это - свойство модели, анимации, кручения, свечения, все сделано моделью, сам предмет - неподвижный виджет.
32

» WarCraft 3 / Какую версию jasshelper лучше использовать?

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