Здравствуйте, начинаю изучение memory hack. Подскажите, как сделать снижение зеленой брони у юнита при определенном событии?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
10
10 месяцев назад
0
Ищи функцию SetUnitArmorGreen или как-то так.
0
6
10 месяцев назад
0
Есть разные версии мемхака, и название функции отвечающую за армор юнита отличаются. Если используешь мемхак анрайза, то вот пример на JASS .Событие - EVENT_PLAYER_UNIT_SPELL_EFFECT. 2 примера, с таймером и без , выбери что тебе нужно
globals
    hashtable H = InitHashtable() // вместо этой хештаблицы можешь использовать любую другую.
endglobals    


function MinusArmour_Init_Condition takes nothing returns boolean
    return GetSpellAbilityId() == 'AB0B' //замени на свой равкод абилки
endfunction    

function MinusArmour_Act takes nothing returns nothing
    local integer h = GetHandleId(GetExpiredTimer())
    // если используешь последнюю версию мемхака анрайза то :
    call AddUnitArmour(LoadUnitHandle(H, h, 0), 8)
    call FlushChildHashtable(H, h)
    call PauseTimer(GetExpiredTimer())
    call DestroyTimer(GetExpiredTimer())
endfunction    

function MinusArmourTimer takes nothing returns nothing
    local timer t = CreateTimer()
    local real period = 5 // тут указываешь через сколько секунд ты хочешь вернуть армор

    call AddUnitArmour(GetSpellTargetUnit(), -8) 
    call SaveAgentHandle(H, GetHandleId(t), 0, GetSpellTargetUnit())
    call TimerStart(t, period , false , function MinusArmour_Act)
    set t = null
endfunction  

function MinusArmour takes nothing returns nothing
    // если используешь последнюю версию мемхака анрайза то :
    call AddUnitArmour(GetSpellTargetUnit(), -8) // чтобы снизить армор пишем значение с минусом

    // если хочешь сделать возврат армора через определенное время, удаляем эту функцию и в TriggerAddAction функции MinusArmour_Init вставляем MinusArmourTimer

endfunction    

function MinusArmour_Init takes nothing returns nothing
    local trigger t = CreateTrigger()
	local integer index = 0

	loop
		call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
		set index = index + 1
		exitwhen index == bj_MAX_PLAYER_SLOTS
	endloop

	call TriggerAddCondition(t, Condition(function MinusArmour_Init_Condition))
	call TriggerAddAction(t, function MinusArmour) // Если не нужен таймер с возвратом армора
	//call TriggerAddAction(t, function MinusArmourTimer) // Если нужен таймер с возвратом армора
    set t = null
endfunction    

function main takes nothing returns nothing // НЕ ДОБАВЛЯТЬ ЭТУ ФУНКЦИЮ, ОНА И ТАК ЕСТЬ В КАРТЕ ПО УМОЛЧАНИЮ
    call ExecuteFunc("MinusArmour_Init")      // НЕОБХОДИМО ИНИЦИАЛИЗИРОВАТЬ ЭТУ ФУНКЦИЮ
endfunction    
Чтобы оставить комментарий, пожалуйста, войдите на сайт.