Добавлен rsfghd,
опубликован
Дисклеймер!
Я полный нуб/лох/помойка в джассе (называйте как хотите), ничего толком не знаю и короче юзай систему на свой страх и риск. По возможности буду стараться оптимизировать это говно
Предложения по улучшению пишите в комменты
Я полный нуб/лох/помойка в джассе (называйте как хотите), ничего толком не знаю и короче юзай систему на свой страх и риск. По возможности буду стараться оптимизировать это говно
Предложения по улучшению пишите в комменты
типичная триггерная система стана, позволяет использовать один стан на всю карту
настолько каловая система стана, что игроки будут оглушены в реальной жизни и не смогут в это говно вообще играть, психанут и разобьют монитор, поэтому лучше вообще ничего не юзать и пойти пить чай
настолько каловая система стана, что игроки будут оглушены в реальной жизни и не смогут в это говно вообще играть, психанут и разобьют монитор, поэтому лучше вообще ничего не юзать и пойти пить чай
код
library StunSystemLib
globals
private constant hashtable H = InitHashtable( )
private constant timer TempTimer = CreateTimer( )
private constant group TempGroup = CreateGroup( )
private constant key StunKey
private unit TempUnit
endglobals
native UnitAlive takes unit id returns boolean
function GetUnitStunTime takes unit u returns real
return LoadReal( H, GetHandleId( u ), StunKey )
endfunction
function SetUnitStunTime takes unit u, real time returns nothing
call SaveReal( H, GetHandleId( u ), StunKey, time )
endfunction
private function CheckStunTime_1 takes nothing returns nothing
local unit u = GetEnumUnit( )
local real r = LoadReal( H, GetHandleId( u ), StunKey ) - 0.01
if r <= 0.00 or not UnitAlive( u ) then
call UnitRemoveAbility( u, 'BPSE' ) // дебафф стану
call RemoveSavedReal( H, GetHandleId( u ), StunKey )
call GroupRemoveUnit( TempGroup, u )
else
call SaveReal( H, GetHandleId( u ), StunKey, r )
endif
set u = null
endfunction
private function CheckStunTime takes nothing returns nothing
call ForGroup( TempGroup, function CheckStunTime_1 )
if FirstOfGroup( TempGroup ) == null then
call PauseTimer( TempTimer )
endif
endfunction
function StunUnit takes unit u, real time returns nothing
call IssueTargetOrder( TempUnit, "thunderbolt", u ) // приказ
if FirstOfGroup( TempGroup ) == null then
call TimerStart( TempTimer, 0.01, true, function CheckStunTime )
endif
if time > LoadReal( H, GetHandleId( u ), StunKey ) then
call SaveReal( H, GetHandleId( u ), StunKey, time )
call GroupAddUnit( TempGroup, u )
endif
endfunction
//===========================================================================
function InitTrig_StunSystem takes nothing returns nothing
//set gg_trg_StunSystem = CreateTrigger( )
set TempUnit = CreateUnit( Player( PLAYER_NEUTRAL_PASSIVE ), 'u000', 0.00, 0.00, 0.00 ) // дамі
endfunction
endlibrary
прикладываю так же карту с демонстрацией помойного кастомного стана на таких же помойных говноабилках
если лень смотреть, то распишу на словах
с кастомным станом можно сделать продолжительность оглушения например от какой-нибудь арвтгграптсч
кхм, характеристики героя, за 100 ед силы +0.10 секунд к стану, от какого-то времени можно взять зависимость, можно сделать, что если происходит серия станов, ослаблять последующие на 20%, через время снимать бафф к устойчивости станов, чтобы не стоять в контроле всю жизнь, в общем много идей, но лучшая, это чтобы я застрелился
самому молотку бурь нужнопоставить длительность максимального возможного стана в карте выставить нулевое значение продолжительности стана
чтобы использовать, достаточно прописать в кастомскрипте StunUnit( какой юнит, время ), помимо этого есть функция GetUnitStunTime( какой юнит ), возвращающая значение оставшегося стана
с кастомным станом можно сделать продолжительность оглушения например от какой-нибудь арвтгграптсч
кхм, характеристики героя, за 100 ед силы +0.10 секунд к стану, от какого-то времени можно взять зависимость, можно сделать, что если происходит серия станов, ослаблять последующие на 20%, через время снимать бафф к устойчивости станов, чтобы не стоять в контроле всю жизнь, в общем много идей, но лучшая, это чтобы я застрелился
самому молотку бурь нужно
чтобы использовать, достаточно прописать в кастомскрипте StunUnit( какой юнит, время ), помимо этого есть функция GetUnitStunTime( какой юнит ), возвращающая значение оставшегося стана
upd
добавил в код функцию изменения продолжительности текущего стана SetUnitStunTime, первый аргумент юнит, второй - время (не проверял работоспособность)
updd
исправил пару багов с примерами
добавил в код функцию изменения продолжительности текущего стана SetUnitStunTime, первый аргумент юнит, второй - время (не проверял работоспособность)
updd
исправил пару багов с примерами
upd 13.09.2022 оптимизировал стан даммиком, теперь понял как использовать одного даммика для одновременного стана нескольких целей, игрока указывать больше не нужно, даммик принадлежит нейтралу который и так видит всю карту
upd 05.10.2022
забыл добавить последнюю функцию в код выше, поправил
забыл добавить последнюю функцию в код выше, поправил
upd 14.10.2022
максимальное время возможного стана не нужно указывать молотку, достаточно вписать нулевое значение, поправлен пример
максимальное время возможного стана не нужно указывать молотку, достаточно вписать нулевое значение, поправлен пример
upd 15.10.2022
добавил дисклеймер
добавил дисклеймер
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
возможно только кастомное снятие придётся делать, чтобы вместе со снятием обнулять время
думал просто в периодик закинуть, но это не то, а при получении урона всё равно нужна нулевая задержка на отключение триггера, пока даммик застанит, чтобы не снимать стан сразу при его получении, что тоже нехорошо
Отредактирован rsfghd
nazarpunk:
как видишь, ключ уже есть, но если до этого работа с юнитами не была через ключи вджасса, то лучше само собой вместо key подставить integer и вписать своё число, короче это больше в силу возможностей импортирующего человека зависит, банальные знания джасса в принципе, хотя тем, кому оно бы пригодилось, джасс вероятно не знают
nazarpunk:
nazarpunk:
SetUnitFlyHeight, если выставить третий аргумент на 0.00, тоже ведь изменит свою высоту мгновенно? ты уверен что знаешь механику?
nazarpunk:
я должен как-то предугадывать название у человека?
nazarpunk:
nazarpunk:
nazarpunk:
а дальше чушь пошла, чтобы использовать конкретно мою хэштаблицу как глобальную, нужно как минимум 2 ресурса моих закинуть, чтобы был реальный профит, и тем не менее, человек может закидывать много других ресурсов от разных авторов где хэштаблицы с разными названиями, но выполняют одну и ту же функцию, например, привязка к таймеру данных, автозамена тут необходима, если не хочешь плодить хэштаблицы
nazarpunk:
если бы ты даже вышеупомянутую мелочь назвал, что так можно, было бы намного больше пользы чем от всего остального, ибо ты назвал бы прямое упрощение и открыл новую механику для меня
а не очевидные вещи вроде этого:
nazarpunk:
nazarpunk:
сама функция стана работает само собой