Создаёшь нового героя при первом касте спелла, который меняет героев, прячешь того кто на F1 :
call ShowUnit(u1, false)
call PauseUnit(u1, true)
call SetUnitInvulnerable(u1, true)
Затем если надо переключить на героя F1:
Офк сюда ещё нужно функции на копирование предметов и лвла и хп при переключении.
Но самый лучший способ,тк ты на мемхаке , это просто менять модель юниту и менять ему абилки. Глянь как я это в нле делаю. Пример: Наруто кьюбичакрамод [T]
function CriticalStike_CD takes nothing returns nothing
local integer h = GetHandleId(GetExpiredTimer())
call RemoveSavedBoolean(H, GetHandleId(LoadUnitHandle(H, h, 'srcU')), 'csCD') // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call FlushChildHashtable(H, h) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endfunction
function CriticalStike takes unit source, unit target, real dmg returns nothing
local timer t = CreateTimer()
call SaveBoolean(H, GetHandleId(source), 'csCD', true) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call SaveAgentHandle(H, GetHandleId(t), 'srcU', source) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call DestroyEffect(AddSpecialEffect("Damnation Orange.mdx", GetUnitX(target), GetUnitY(target)))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", GetUnitX(target), GetUnitY(target))) // тут с эффектами отрегулируешь сам, впадлу вчитываться в ту помойку что ты кинул
call DestroyEffect(AddSpecialEffectTarget("Damnation Orange.mdx", target, "chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", target, "chest"))
call UnitDamageTarget(source , target, 40 * GetUnitAbilityLevel(source, 'Aimp') , true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call UnitDamageTarget(source , target, 0.06 * GetUnitState(target, UNIT_STATE_MAX_LIFE) , true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call TimerStart(t, 5, false, function CriticalStike_CD) // тут вместо 5 ставишь свое кд
set t = null
endfunction
вот код самого спелла, просто проверяешь if not LoadBoolean(H, GetHandleId(source), 'csCD') then и тд в своей системе урона и вызываешь функцию.
Вот твой спелл с готовой системой урона на чистом джассе.
globals
hashtable H = InitHashtable()
rect SysRect = null
unit uTemp = null
group gTemp = CreateGroup()
endglobals
function CriticalStike_CD takes nothing returns nothing
local integer h = GetHandleId(GetExpiredTimer())
call RemoveSavedBoolean(H, GetHandleId(LoadUnitHandle(H, h, 'srcU')), 'csCD') // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call FlushChildHashtable(H, h) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call PauseTimer(GetExpiredTimer())
call DestroyTimer(GetExpiredTimer())
endfunction
function CriticalStike takes unit source, unit target, real dmg returns nothing
local timer t = CreateTimer()
call SaveBoolean(H, GetHandleId(source), 'csCD', true) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call SaveAgentHandle(H, GetHandleId(t), 'srcU', source) // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call DestroyEffect(AddSpecialEffect("Damnation Orange.mdx", GetUnitX(target), GetUnitY(target)))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", GetUnitX(target), GetUnitY(target))) // тут с эффектами отрегулируешь сам, впадлу вчитываться в ту помойку что ты кинул
call DestroyEffect(AddSpecialEffectTarget("Damnation Orange.mdx", target, "chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Volcano\\VolcanoDeath.mdl", target, "chest"))
call UnitDamageTarget(source , target, 40 * GetUnitAbilityLevel(source, 'Aimp') , true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call UnitDamageTarget(source , target, 0.06 * GetUnitState(target, UNIT_STATE_MAX_LIFE) , true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call TimerStart(t, 5, false, function CriticalStike_CD) // тут вместо 5 ставишь свое кд
set t = null
endfunction
function UnitEvent takes trigger trig, playerunitevent whichEvent, code act returns trigger
local integer index = 0
loop
call TriggerRegisterPlayerUnitEvent( trig, Player( index ), whichEvent, null )
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
if act != null then
call TriggerAddAction( trig, act )
endif
return trig
endfunction
function Rect_Enter_Event takes trigger trig, real minX, real minY, real maxX, real maxY, code act returns trigger
local region rectRegion = CreateRegion( )
call SetRect( SysRect, minX, minY, maxX, maxY )
call RegionAddRect( rectRegion, SysRect )
call TriggerRegisterEnterRegion( trig, rectRegion, null )
if act != null then
call TriggerAddAction( trig, act )
endif
set rectRegion = null
return trig
endfunction
function Damaged_Handler takes unit source, unit target, real dmg returns nothing
if not LoadBoolean(H, GetHandleId(source), 'csCD') and GetUnitAbilityLevel(source, 'Aimt') > 0 and not IsUnitType(target, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(target, GetOwningPlayer(source)) and GetUnitState(target, UNIT_STATE_LIFE) > 0 then // вместо H ставишь свою хештаблицу, в гуи помоему будет udg_H , если создавать хт с названием H
call CriticalStike(source, target, dmg)
endif
endfunction
function Damaged_Event takes nothing returns nothing
local real DMG = GetEventDamage( )
if DMG > 0 then
call DisableTrigger( GetTriggeringTrigger( ) )
call Damaged_Handler( GetEventDamageSource( ), GetTriggerUnit( ), DMG )
call EnableTrigger( GetTriggeringTrigger( ) )
endif
endfunction
function LoadTrig takes integer trig returns trigger
if LoadTriggerHandle( H, 'glob', trig ) == null then
call SaveTriggerHandle( H, 'glob', trig, CreateTrigger( ) )
endif
return LoadTriggerHandle( H, 'glob', trig)
endfunction
function Init_Unit_Damaged takes unit target returns nothing
if not IsUnitInGroup(target, LoadGroupHandle(H, 'glob', 'dmgG')) and GetUnitAbilityLevel( target, 'Aloc' ) <= 0 then
call GroupAddUnit(LoadGroupHandle(H, 'glob', 'dmgG'), target )
call TriggerRegisterUnitEvent(LoadTrig('dmgT'), target, EVENT_UNIT_DAMAGED )
endif
endfunction
function Attacked_Handler takes unit source, unit target returns nothing
call Init_Unit_Damaged( target )
endfunction
function Attacked_Event takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger( ) )
call Attacked_Handler( GetAttacker( ), GetTriggerUnit( ) )
call EnableTrigger( GetTriggeringTrigger( ) )
endfunction
function Unit_Enters_Handler takes unit entering returns nothing
call Init_Unit_Damaged( entering )
endfunction
function Unit_Enters_Event takes nothing returns nothing
call Unit_Enters_Handler( GetEnteringUnit( ) )
endfunction
function InitDamageSystem takes nothing returns nothing
local real minX = GetRectMinX( GetWorldBounds( ) )
local real maxX = GetRectMaxX( GetWorldBounds( ) )
local real minY = GetRectMinY( GetWorldBounds( ) )
local real maxY = GetRectMaxY( GetWorldBounds( ) )
set SysRect = Rect( 0, 0, 0, 0 )
call TriggerAddAction( LoadTrig('dmgT'), function Damaged_Event )
call SaveGroupHandle( H, 'glob', 'dmgG', CreateGroup( ) )
call UnitEvent( CreateTrigger( ), EVENT_PLAYER_UNIT_ATTACKED, function Attacked_Event )
call Rect_Enter_Event( CreateTrigger( ), minX, minY, maxX, maxY, function Unit_Enters_Event )
call GroupEnumUnitsInRect(gTemp, GetWorldBounds( ), null )
loop
set uTemp = FirstOfGroup(gTemp)
exitwhen uTemp == null
call Init_Unit_Damaged(uTemp)
call GroupRemoveUnit(gTemp, uTemp)
endloop
endfunction
function main takes nothing returns nothing
call ExecuteFunc("InitDamageSystem")
endfunction
Тебе нужно будет скопировать себе глобалки и инициализировать InitDamageSystem , не ебу как это на гуи делается, удачи😀
Если не хочешь чистить полностью родительский ключ, можно использовать функцию RemoveSavedHandle, при смерти юнита. Тут нужно хотя бы узнать что именно ты делаешь с юнитами, чтобы точно подсказать как лучше тебе поступить. Например, после конца способности, ты обязан чистить хештаблицу через FlushChildHashtable, тк эти данные тебе больше не нужны.
Да как и в доте 1, ептить. Просто инвиз, иконку на миникарте делаем прозрачной, как и саму модель юнита для врагов, поэтому даже на вардах юнитов то не видно.
Ну и кринж, если микрочелик долбаеб он и так поймает вирус из торрентов или порносайтов, а на мемхаке в ру комьюнити максимум что делали - это карты с запуском порнухи без вирусни. Если настолько боишься поймать вирус в war3 , то просто не играй в рандомные карты). Ты же не будешь скачивать хентай фнаф на пк? Так не играй в подозрительные карты. А насчет вредоносности, то навредить можно и БЕЗ мемхака. В хелхалте вообще vbs скрипт запускается при запуске карты, а что в нем находится знает только создатель карты 😀
» WarCraft 3 / Подскажите абилку на сопротивлении магии без иконки. World Editor
» WarCraft 3 / Подскажите абилку на сопротивлении магии без иконки. World Editor
» WarCraft 3 / Как сделать что-бы герой спавнился и вставал на клавишу F2? World Editor
» WarCraft 3 / Ограничение анимаций у модели
Ред. SAND
» WarCraft 3 / Как перенести карту с 1.26 на 1.28?
» WarCraft 3 / Как сделать что-бы герой спавнился и вставал на клавишу F2? World Editor
call ShowUnit(u1, false)
call PauseUnit(u1, true)
call SetUnitInvulnerable(u1, true)
Затем если надо переключить на героя F1:
call PauseUnit(u1, false)
call SetUnitInvulnerable(u1, false)
call ShowUnit(u2, false)
call PauseUnit(u2, true)
call SetUnitInvulnerable(u2, true)
Но самый лучший способ,тк ты на мемхаке , это просто менять модель юниту и менять ему абилки. Глянь как я это в нле делаю. Пример: Наруто кьюбичакрамод [T]
» WarCraft 3 / Юнит получает урон
» WarCraft 3 / Как управлять своей молнией каждому юниту отдельно, а не всем одной
» WarCraft 3 / [MemHack] Загрузка .mix файла с модельками прямо в игре
» WarCraft 3 / Проблема с ACac
» WarCraft 3 / Проблема с ACac
» WarCraft 3 / Проблема с ACac
» WarCraft 3 / Можно ли передать локалки другим функциям без takes
» WarCraft 3 / Shinobi Rumble v0.7fix2
Ред. SAND
» WarCraft 3 / Как вкатиться в WarCraft III и не привлечь внимание санитаров
» WarCraft 3 / Devistating Blow ( Фатальный удар )
» WarCraft 3 / Система атаки не рабоатет
call SetUnitState( u , UNIT_STATE_LIFE, GetUnitState( u, UNIT_STATE_LIFE ) + heal)
» WarCraft 3 / как создавать юнитов с уникальным HandleId ?
» WarCraft 3 / Интерфейс Новой доты от Драголича
» WarCraft 3 / Аналог Smoke of deceit из dota2
» WarCraft 3 / Аналог Smoke of deceit из dota2
» WarCraft 3 / Аналог Smoke of deceit из dota2
» WarCraft 3 / Опасен ли мемхак?
» WarCraft 3 / Всем привет. Как найти путь до модели *mdx ?