Редакция : не увидел твой пример 3 когда писал текст. Забей это лучший способ
Не слушай грешников и используй христианскую PURE jass хеш таблицу. Значения замени на свои =>
SaveInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit") , 999)
Чтобы выгрузить значение используй =>
LoadInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit"))
Также можно сохранять и Real и Group и Unit, Str и тд, что позволяет сохранять хештаблица
в 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 каждый раз.
Таких людей очень мало, кто кодит на чистом джассе и разбирается во всем этом. На хгме очень мало вероятно такого встретить , тут людям нравится копрофилия, к сожалению🙁
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
Не знаю на счет гуи, но на жассе так. В 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
По идее можно при касте ставить boolean test на true. сделать вейт на окончание действия и установить boolean test на false .сделать TriggerRegisterTimerEventPeriodic на триггер с периодичностью 0.02 секунды и в нем проверку if test then и там уже делать всю движуху. Вроде так гуишники делают, не шарю особо за это. Лучше всего через ХТ и таймеры делать на чистом джассе
Есть разные версии мемхака, и название функции отвечающую за армор юнита отличаются. Если используешь мемхак анрайза, то вот пример на 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
Та, в редакторе нельзя сохранять, иначе код сломается. Небольшой челлендж для тех кто хочет почекать. А выдавать спелл можно через WFE , learn A000 . А скопировать сам спелл можно только если конвертнуть карту через w3x2lni в Lni либо obj
Вот чисто камхак - forum.onligamez.ru/resources/war-3-camera-zoom.49
Так что было бы желание...
только это такой же как прикреплённый, те же 7,50 КБ, тока надпись другая
а такой же - по 150 , фог и фарз не фикшены, крит 9900+ , всё то же самое
ну спасибо прямо выручил (нет)
В вфе включи Camera Steps или Шаги Камеры и меняй камеру как душе угодно
Ред. SAND
» WarCraft 3 / Как можно хранить значения в юнитах? Аналог SetUnitUserData
SaveInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit") , 999)
LoadInteger(MyHashtable, GetHandleId(unit), StringHash("MyUnit"))
» WarCraft 3 / Статьи про язык JASS
Также замени функции 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) НО это не полностью избавит тебя от утечки, нужно создать звук ОДИН раз и повторно использовать его.
Возможно я что-то упустил.
Ред. SAND
» WarCraft 3 / Пак 3 способностей для Melee карт
» WarCraft 3 / Пак 3 способностей для Melee карт
» WarCraft 3 / Изменение закодированной карты
» IrInA Host Bot / верификация лучшей мапы 2023 года
» WarCraft 3 / Изменение закодированной карты
» WarCraft 3 / Как превратить папку в карту?
» WarCraft 3 / Карте хана?
» WarCraft 3 / Обнуление урона в ивенте UNIT_DAMAGED
Ред. SAND
» WarCraft 3 / SetUnitBaseScale
Ред. SAND
» WarCraft 3 / Отследить нажатие мыши
» WarCraft 3 / Сохранение и перенос локальной структуры
Ред. SAND
» WarCraft 3 / Циклы и wait
» WarCraft 3 / Снижение армора на memory hack
» IrInA Host Bot / Неправильное обнаружение читов!
Ред. SAND
» WarCraft 3 / [JASS] AOE Благодать
» WarCraft 3 / ктото может дать сьлку на хороший камера хак??
» WarCraft 3 / как написать *.mix камерахак? zoom
» WarCraft 3 / Помощь по World Editor
» WarCraft 3 / Помощь по World Editor
» WarCraft 3 / Депротект (знаю заеженная тема)
» WarCraft 3 / Депротект (знаю заеженная тема)
» WarCraft 3 / Добавить триггерно юниту исследование