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 файл
7

» WarCraft 3 / Как можно хранить значения в юнитах? Аналог SetUnitUserData

Редакция : не увидел твой пример 3 когда писал текст. Забей это лучший способ
Не слушай грешников и используй христианскую PURE jass хеш таблицу. Значения замени на свои =>
SaveInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit") , 999)
Чтобы выгрузить значение используй =>
LoadInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit"))
Также можно сохранять и Real и Group и Unit, Str и тд, что позволяет сохранять хештаблица
7

» WarCraft 3 / Статьи про язык JASS

в globals замени music bgMusic на sound bgMusic
Также замени функции CreateMusic и PlayMusic на CreateSound и StartSound . Также нужно заменить set bgMusic = CreateMusic(blablabla) на set bgMusic = CreateSound(song, false, false, true, 12700, 12700, "")
Там где ты устанавливаешь название музыки нужно дописать формат твоего музыкального файла : к примеру .mp3
В InitTriggers допиши в конце функции set t = null, иначе будет утечка.
TriggerRegisterTimerEventSingle замени на TriggerRegisterTimerEvent(t, 1.0, true), если нужно чтобы музыка изменялась каждую секунду
Если не надо то TriggerRegisterTimerEvent(t, 1.0, false)
Еще тебе нужно добавить call KillSoundWhenDone(bgMusic) НО это не полностью избавит тебя от утечки, нужно создать звук ОДИН раз и повторно использовать его.
Возможно я что-то упустил.
P.S. чатбот генерит плохой код, настоятельно рекомендую им не пользоваться. Тут можно было использовать таймеры, а также не создавать Sound каждый раз.
7

» WarCraft 3 / Пак 3 способностей для Melee карт

Опять говно вджасс 🤢
А как по твоему глобалки объявлять?
берешь и добавляешь , но зачем тебе глобалки? Они нужны только для хештаблиц и глобальных групп в некоторых спеллах . Например для этого
Загруженные файлы
7

» IrInA Host Bot / верификация лучшей мапы 2023 года

ps там есть шелл который срабатывает , если у человека нет патча. Кидает на гайд на ютубе, все безопасно
7

» WarCraft 3 / Изменение закодированной карты

Таких людей очень мало, кто кодит на чистом джассе и разбирается во всем этом. На хгме очень мало вероятно такого встретить , тут людям нравится копрофилия, к сожалению🙁