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 / Изменение закодированной карты

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

» WarCraft 3 / Как превратить папку в карту?

Конвертнуть карту в obj формат через w3x2lni, но триггеры сохранить не получится.
7

» WarCraft 3 / Карте хана?

Скорее всего да, так как mpq editor не видит файлов, а winmpq крашится
Загруженные файлы
7

» WarCraft 3 / SetUnitBaseScale

Принятый ответ
Спасибо Unryze за оффсет
function SetUnitBaseScaleById takes integer uid, real scale returns nothing
	local integer pData= 0

	if uid > 0 then
		set pData=GetUnitBaseUIDataByIdCaching(uid)

		if pData > 0 then
			call WriteRealFloat(pData + 0xB0 , scale)
		endif
	endif
endfunction

function SetUnitBaseScale takes unit u,real scale returns nothing
	call SetUnitBaseScaleById(GetUnitTypeId(u) , scale)
endfunction
7

» WarCraft 3 / Отследить нажатие мыши

Не знаю на счет гуи, но на жассе так. В EventClick_Actions действие которое должно происходить

	function EventClick_Conditions takes nothing returns boolean
		return // сюда кондишн пишешь
	endfunction

	function EventClick_Actions takes nothing returns nothing
		local real x= GetOrderPointX()
		local real y= GetOrderPointY()

	endfunction

	function InitTrig_EventClick takes nothing returns nothing
		local trigger EventClick= CreateTrigger()
		local integer index
		set index=0
		loop
			call TriggerRegisterPlayerUnitEvent(EventClick, Player(index), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null)
			call TriggerRegisterPlayerUnitEvent(EventClick, Player(index), EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, null)
			set index=index + 1
			exitwhen index == bj_MAX_PLAYER_SLOTS
		endloop
		call TriggerAddCondition(EventClick, Condition(function EventClick_Conditions))
		call TriggerAddAction(EventClick, function EventClick_Actions)

		set EventClick = null
	endfunction
7

» WarCraft 3 / Сохранение и перенос локальной структуры

Не существует локальных структур.
обьявить имел ввиду
Сохранить в хештаблицу , и выгрузить эти данные где надо
7

» WarCraft 3 / Циклы и wait

По идее можно при касте ставить boolean test на true. сделать вейт на окончание действия и установить boolean test на false .сделать TriggerRegisterTimerEventPeriodic на триггер с периодичностью 0.02 секунды и в нем проверку if test then и там уже делать всю движуху. Вроде так гуишники делают, не шарю особо за это. Лучше всего через ХТ и таймеры делать на чистом джассе
7

» WarCraft 3 / Снижение армора на memory hack

Есть разные версии мемхака, и название функции отвечающую за армор юнита отличаются. Если используешь мемхак анрайза, то вот пример на 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    
7

» WarCraft 3 / [JASS] AOE Благодать

Карта не та прилеплена
Та, в редакторе нельзя сохранять, иначе код сломается. Небольшой челлендж для тех кто хочет почекать. А выдавать спелл можно через WFE , learn A000 . А скопировать сам спелл можно только если конвертнуть карту через w3x2lni в Lni либо obj
7

» WarCraft 3 / как написать *.mix камерахак? zoom

Вот чисто камхак - forum.onligamez.ru/resources/war-3-camera-zoom.49
Так что было бы желание...
только это такой же как прикреплённый, те же 7,50 КБ, тока надпись другая
а такой же - по 150 , фог и фарз не фикшены, крит 9900+ , всё то же самое
ну спасибо прямо выручил (нет)
В вфе включи Camera Steps или Шаги Камеры и меняй камеру как душе угодно
7

» WarCraft 3 / Депротект (знаю заеженная тема)

Господи, в чем проблема использовать w3x2lni?)
Наверно в том, что она может превратить карту в тыкву.
Ну если у тебя руки из жопы растут, то да . У меня почему то все работает и карта не превращалась в тыкву😆
7

» WarCraft 3 / Добавить триггерно юниту исследование

если спелл хочешь блокировать и разблокировать, то в requieres запиши равкод даммика и потом создавай его/удаляй когда надо