7

» WarCraft 3 / Подскажите абилку на сопротивлении магии без иконки. World Editor

На ванниле суют абилку в спеллбук и прячут спеллбук через SetPlayerAbilityAvailable. Если не хочешь так делать, можно через мемхак HideAbilityButton
7

» WarCraft 3 / Как перенести карту с 1.26 на 1.28?

Максим Малышев, у анрайза на гитхабе есть ластовый мемхак, ставь его
Он подойдёт под 1.24 ,1.26, 1.27 , 1.28 патчи
7

» WarCraft 3 / Как сделать что-бы герой спавнился и вставал на клавишу F2? World Editor

Создаёшь нового героя при первом касте спелла, который меняет героев, прячешь того кто на F1 :
call ShowUnit(u1, false)
call PauseUnit(u1, true)
call SetUnitInvulnerable(u1, true)
Затем если надо переключить на героя F1:
call ShowUnit(u1, true)
call PauseUnit(u1, false)
call SetUnitInvulnerable(u1, false)
call ShowUnit(u2, false)
call PauseUnit(u2, true)
call SetUnitInvulnerable(u2, true)
Офк сюда ещё нужно функции на копирование предметов и лвла и хп при переключении.

Но самый лучший способ,тк ты на мемхаке , это просто менять модель юниту и менять ему абилки. Глянь как я это в нле делаю. Пример: Наруто кьюбичакрамод [T]
7

» WarCraft 3 / Проблема с ACac

quq_CCCP, Скорее всего из за этого, буду отказываться от аур пожалуй.
7

» WarCraft 3 / Можно ли передать локалки другим функциям без takes

Все те кто пишут , что хт медленные, зачастую говноеды (вджасс сджасс зинк) , которые обмазываются струрами и тысячами глобальных массивов
7

» WarCraft 3 / Как вкатиться в WarCraft III и не привлечь внимание санитаров

Ни слова про чистый, христианский джасс. Какая то пропаганда ЛГБТ*
*Экстремисткая организация, запрещенная в РФ
7

» WarCraft 3 / Devistating Blow ( Фатальный удар )

Принятый ответ
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 , не ебу как это на гуи делается, удачи😀
7

» WarCraft 3 / Система атаки не рабоатет

Хил делается через SetUnitState , а не через UnitDamageTarget
call SetUnitState( u , UNIT_STATE_LIFE, GetUnitState( u, UNIT_STATE_LIFE ) + heal)
7

» WarCraft 3 / как создавать юнитов с уникальным HandleId ?

Если не хочешь чистить полностью родительский ключ, можно использовать функцию RemoveSavedHandle, при смерти юнита. Тут нужно хотя бы узнать что именно ты делаешь с юнитами, чтобы точно подсказать как лучше тебе поступить. Например, после конца способности, ты обязан чистить хештаблицу через FlushChildHashtable, тк эти данные тебе больше не нужны.
7

» WarCraft 3 / Аналог Smoke of deceit из dota2

SAND, не видно, но автоатакой бить можно - но смысл смоуков чтобы варды не палили и все.
подскажи плиз каким методом модель и иконку сделать прозрачной для врагов.
7

» WarCraft 3 / Аналог Smoke of deceit из dota2

Да как и в доте 1, ептить. Просто инвиз, иконку на миникарте делаем прозрачной, как и саму модель юнита для врагов, поэтому даже на вардах юнитов то не видно.
я вроде чекал 6.83d , там сентри палили смоки
7

» WarCraft 3 / Опасен ли мемхак?

Ну и кринж, если микрочелик долбаеб он и так поймает вирус из торрентов или порносайтов, а на мемхаке в ру комьюнити максимум что делали - это карты с запуском порнухи без вирусни. Если настолько боишься поймать вирус в war3 , то просто не играй в рандомные карты). Ты же не будешь скачивать хентай фнаф на пк? Так не играй в подозрительные карты. А насчет вредоносности, то навредить можно и БЕЗ мемхака. В хелхалте вообще vbs скрипт запускается при запуске карты, а что в нем находится знает только создатель карты 😀
7

» WarCraft 3 / Всем привет. Как найти путь до модели *mdx ?

Я правильно понял, что я могу прописать вообще любой путь и модель подгрузиться?
скачай War3ModelEditor. Там можно чекнуть путь до текстур открыв mdx файл