32

» WarCraft 3 / Не срабатывает триггер на получение урона

   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
    
32

» WarCraft 3 / как отключить защиту одиночной игры в рпг мапах типа TBW?

dankoval, Чувак чтобы ломануть чужую карту нужны маленько мозги, много больше чем требуется для игры в эту карту.
Для начала нужно выучить устройство карты варкравта и язык JASS, тока потом идти ломать карты и спрашивать на форуме а как же реализована защита... Тебе если даже на видео показать, ты похлопаешь глазами и не поворотишь это даже с 100той попытки.
32

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

Что мешает отслеживать урон триггерно и хилить юнита если нужно заблокировать часть урона, или наносить еще немного урона.
32

» WarCraft 3 / Не срабатывает триггер на получение урона

Yonsen, Ну кто так делает? Выкини свой триггер в утиль... Какой вейт, это никогда не будет работать!
При касте создавай событие для отдельного триггера, где проверяй что цель получила урон от того кто кастанул стрелу и имеет бафф способности этой стреллы, если все сходится удаляй бафф и наноси урон.
Чтобы не добавлять по 100 событий на одного юнита заноси его в группу - уже попавшиеся, так же ставь метку на юнита на котором уже есть событие с помощью хеш таблицы или custo, value что на них пока срабатывать триггерну ненужно.
Могу скинуть пример как делается по нормальному детект автокастов и снарядов дефолтных способностей.
32

» WarCraft 3 / Триггер, для хождения юнитов аля дота.

А дальше то шо? Свою доту? (не стоит, таких дотамастеров 100500)
Мб для начала нужно подучить редактор, а потом делать доту ( в доте очень мало достойных наработок, а методы исполнения многих сравнительно оригинальных способностей оставляют желать лучшего )
32

» WarCraft 3 / Помогите со способностью

Принятый ответ
Нужна особая анимация, смотри внимательно анимации гулей и мясников, там вроде spell channel, у волков нету такой анимации, так что либо кастом проигрывай анимацию атаки либо делай свою модель волка с нужными анимациями, на основе стандартной.
32

» WarCraft 3 / Как сделать так, чтобы нейтральные персонажи бродили по городу?

Добавь им способность Бродяий (нейтральный) или торнадо (перемещение).
А если хочится чтобы они ходили и искали, то нужен псевдо ИИ.
Вот пример ИИ который ищет и преследует противников + применяет способности.
Загруженные файлы
32

» WarCraft 3 / Триггерно выучить скилы герою.

Принятый ответ
Там же есть проверка уровень героя равен == целое число, в чем проблема?
Посмотри ИИ скрипты, там есть доступный пример с комментариями как бот выучивает скиллы.
32

» WarCraft 3 / Помогите вспомнить, где мог видеть эффект

LeikyS:
Nikson12:
LeikyS, там звездопад же вроде был
Я помню что она стреляла в небо. Мне кажется там был кастомный звездопад, что-то похожее на дождь стрел. Но точно утверждать не могу. Слишком давно я проходил варик.
У жрицы луны это такая чаннел анимация, не связаная со скиллом.
32

» WarCraft 3 / Хак на память Warcraft3

Daniil18:
Drynwhyl, все сделал, но как саму проверку на конкретную клавишу сделать. Как узнать интегер этой кнопки?
я опять ретард, только спросил тут же нашел выход. Хочу сделать шутанчик с управлениями кнопками, тут надо будет париться с локал плеерами от десинков?
Увы да, если ты будешь играть не в сингл плеер.
32

» WarCraft 3 / Как поменять эффект области у способности?

Верно, это тупо изображение с настроенной прозрачностью, им делают всякие эффекты на земле в варкравте, лежат по пути replaceable textures/splats
32

» WarCraft 3 / Как поменять эффект области у способности?

Steal nerves:
У абилки есть этот параметр, но он ничего не меняет. А вот раса юнита меняет, там 4 разных рисунка (нежить, альянс, орда, ночные эльфы). А остальные параметры (демоны, живые и прочее) имеет рисунок альянса.
нельзя ли сделать больше рисунков? и какой путь рисунок имеет?
Никто так и не нашел участок когда который отвечает за прицелы и как их можно изменить у абилок, так что только сменить существующие, это вроде уберсплаты...
32

» WarCraft 3 / Хак на память Warcraft3

ClotPh, в твоем коде нету вейта на пару сек, синхроеизация вещь не мгновенная и порой занимает очень много времени, все зависит от пинга.
32

» WarCraft 3 / Как изменить скорость боя герою

Есть системы модификации параметров юнитов, увы только jass.
Поиск в помощь.
32

» WarCraft 3 / Хак на память Warcraft3

DracoL1ch,
Для них это самый доступный движок. В их картах может быть мини игра с использованием стрельбы от первого лица, которая не является "шурупом" карты...
32

» WarCraft 3 / Sleight of Fist - второй скилл Эмбера из доты

Принятый ответ
Очень геморойно, но суть там проста - перемещение плавным перемещением к юниту и атака его, если это крип то герою вручают абилку снижающую урон, а если не крип то абилку повышающую силу атаки (способность боевых когтей), ну собственно и все. Но вот в гуях низя использовать нормально таймеры да и будут утечки с группой и локейшинами, если делать по проще.
Да еще у этой способности в доте есть существенный баг, если атаковать кого и сразу же применить способность - то герой не атакует первого врага в области действия способности, ибо его атака еще не перезарядилась а боносу скорости будет работать только на следующую.
Увы вылечить это можно мемхаком (на гуи исключен) или вторым(дамми) героем, который бы атаковал врагов вместо оригинала.
Можешь попробовать найти jass версии на хайве, вроде скиллы эмбер спирита уже делали.
32

» WarCraft 3 / Ребята, как отследить неуязвимого юнита?

DemonoiD:
quq_CCCP, по количеству здоровья. По типу юнита. Таких условий возможны сотни. Или ты не знал, что можно сортировать предметы по ПРОЧНОСТИ?
Можно но но в данном случаи ненужно, темболее есть "особые" виды неуязвимостей.
32

» WarCraft 3 / Ребята, как отследить неуязвимого юнита?

DemonoiD:
А ещё можно забирать у моба неуязвимость, когда она не нужна и выдавать назад, когда хочется, чтобы ничего не проверять.
Слишком тупо, да и как ты отличишь магазины от остальных зданий? Будешь базу данных писать?
Extremator:
А ещё есть проверка через выдачу абилки (нет, не выдача инвула).
Есть специфические неуязвимости, которые не юзают абилку 'Avul', чаще всего это неуязы от дефольных способностей, вроде иллюзии мастера клинка, ульта панды пивовара и так далее - там нету никаких абилок инвула, но юнит не получает урона и все!
32

» WarCraft 3 / Ребята, как отследить неуязвимого юнита?

Danil30, вот держи типа правильный образец проверки:
library IsUnitInvulnerableCheck initializer Init

globals
    unit DummyAttacker
    trigger gg_trg_Damage_Blocker
    group gg_grp_CheckedGroup
    hashtable GameData = InitHashtable( )
    boolean IsInvul = false
endglobals

function Trig_Damage_Blocker_Conditions takes nothing returns boolean
    return GetEventDamage() > 0.00 and GetEventDamageSource( ) == DummyAttacker
endfunction

function Timer_Heal_Unit_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    local integer id = GetHandleId(t)
    local unit Damaged = LoadUnitHandle( GameData, id, 0 )
    
    call UnitRemoveAbility( Damaged, 'AMHP' )
    call SetUnitState( Damaged, UNIT_STATE_LIFE, LoadReal( GameData, id, 1 ) )
    call SetUnitState( Damaged, UNIT_STATE_MANA, LoadReal( GameData, id, 2 ) )
   
    call DestroyTimer(t)
    call FlushChildHashtable( GameData, id )
    
    set Damaged = null
    set t = null
endfunction 

function Trig_Damage_Blocker_Actions takes nothing returns nothing
    local unit Damaged = GetTriggerUnit( )
    local timer t = CreateTimer()
    local integer id = GetHandleId( t )

    call SaveUnitHandle( GameData, id, 0, Damaged )
    call SaveReal( GameData, id, 1, GetUnitState( Damaged, UNIT_STATE_LIFE ) )
    call SaveReal( GameData, id, 2, GetUnitState( Damaged, UNIT_STATE_MANA ) )
    
    call TimerStart( t, 0.00, false, function Timer_Heal_Unit_Expires )
    
    call UnitAddAbility( Damaged, 'AMHP' )
    call SetUnitState( Damaged, UNIT_STATE_LIFE, GetUnitState( Damaged, UNIT_STATE_MAX_LIFE ) )
    
    set IsInvul = true
    
    set Damaged = null
    set t = null
endfunction


function IsUnitInvul takes unit enemy returns boolean
    local real hp = GetUnitState( enemy, UNIT_STATE_LIFE )
    local real mp = GetUnitState( enemy, UNIT_STATE_MANA )
    
	set IsInvul = false

    if hp < 0.405 or GetUnitTypeId(enemy) < 1 then
        return true
    elseif GetUnitAbilityLevel( enemy, 'Avul' ) > 0 then
        return true
    endif
        
    if not IsUnitInGroup( enemy, gg_grp_CheckedGroup ) then
        call TriggerRegisterUnitEvent( gg_trg_Damage_Blocker, enemy, EVENT_UNIT_DAMAGED )
        call GroupAddUnit( gg_grp_CheckedGroup, enemy )
    endif

    call EnableTrigger( gg_trg_Damage_Blocker )
    call UnitDamageTarget( DummyAttacker, enemy, 100.00, false, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN, WEAPON_TYPE_WHOKNOWS )
    call DisableTrigger( gg_trg_Damage_Blocker )
    
    return IsInvul
endfunction 

private function Init takes nothing returns nothing
    set DummyAttacker = CreateUnit( Player(12), 'hpea', 0.00,0.00, 270.00 )
    
    call SetUnitPathing( DummyAttacker, true )
    call PauseUnit( DummyAttacker, true )
    call SetUnitInvulnerable( DummyAttacker, true )
    call ShowUnit( DummyAttacker, false )
    
    
    set gg_grp_CheckedGroup = CreateGroup( )
    set gg_trg_Damage_Blocker = CreateTrigger( )

    call TriggerAddCondition( gg_trg_Damage_Blocker, Condition( function Trig_Damage_Blocker_Conditions ) )
    call TriggerAddAction( gg_trg_Damage_Blocker, function Trig_Damage_Blocker_Actions )
    call DisableTrigger( gg_trg_Damage_Blocker )
endfunction

endlibrary
Со всеми защитами, чтобы не прибить юнита...
Таким же способом можно проверять магические резисты и прочее.
32

» WarCraft 3 / Ребята, как отследить неуязвимого юнита?

Danil30:
quq_CCCP:
Проверкой на неуязвимость есть 2 версии проверки, одна требует мемхак а друга нет.
Там проверка на то что дамми юнит сможет нанести урон юниту или нет, если не сможет - юнит неуязвим.
А как сделать проверку, что дамми не сможет нанести урон?
Ну как как, элементарно.
Нанести урон и посмотреть осталось ли у уюнита столько же здоровья и маны или нет? Если нет то уюнит уязвим, иначе неуязвим.
Чтобы не прибить юнита уроном, добавляем ему хп, а даммика заносим в глобальную переменную и во всех триггерах реагирующих на урон делаем проверку что источник урона не является этим самым даммиком, чтобы исключить срабатывания триггеров на эти проверки.
32

» WarCraft 3 / Ребята, как отследить неуязвимого юнита?

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

» WarCraft 3 / Как изменить урон способности "Проглотить" (Кодой)?

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