Как наиболее правильно (без багов) реализовать эффект страха, при котором вражеский герой замедляется и начинает идти в противоположную сторону, не имея возможности отдавать приказы?

Принятый ответ

Для вас это слишком сложно, много триггерной работы. Потребуется мемхак.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
6
6 лет назад
0
Если на триггерах, ооо... То нужно будет, в зависимости от углового расстояния жертвы и кастера высчитывать, в какую точку побежит враг. Это забавное занятие.
0
26
6 лет назад
0
А как должен срабатывать страх? Потому что пока всё представляется так: сделать руну морфа с флагом Непрерываемый, при определённом событии и условии давать приказ идти в обратные координаты, через какое-то время давать руну морфа без флага Непрерываемый. Но при каком событии и условии это должно происходить непонятно, как и время страха.
0
17
6 лет назад
Отредактирован Absolute
0
Как вариант, можно передавать "испуганых" юнитов нейтрально пассиву, за тем триггером приказывать им двигаться в случайную точку в собственном радиусе и прилепить эффект страха. Конечно не идеально, но как более простая альтернатива сойдет.
0
20
6 лет назад
0
Хз я делал без мемхака
создавал триггер отлавливающий приказы и отдающий вместо них приказ убегать с сохранением координат куда убегать (которые при этом менялись каждую секунду чтобы бег был в панике)
только нужно еще чтобы триггер не зацикливал себя
только та арена вроде запротекчена
2
32
6 лет назад
2
biridius, Без багов? Серьезно? Давайте поговорим об этом когда вы расскажите как заблокировали кнопки Hold и Stop.
0
20
6 лет назад
0
quq_CCCP постил хорошую статью про руны. Но по сравнению с мемхаком это все дичь. Руны позволяют достичь желаемого эффекта, но ценой пропажи всех абилок у юнита на "время действия" морфа. По крайней мере я этого решить не смог (просто перешел на мемхак и делал все одной строчкой(а потом еще сто строк чтобы усложнить усложненное ибо фич много не бывает и, самое главное, в конце забить потому что слишком наворотил и слажна)). Но нужно ли это вам? Новые фичи - нереально круто, но без контента им грош-цена
0
15
6 лет назад
0
Насчёт бега в нужную сторону всё просто, меня интересует конкретно невозможность юнита отдать приказ. В Доте же как-то и без мемхака был реализован дуэль Легионки, провокация Акса. Отдавать приказ каждые 0.01 сек и каждый раз, когда игрок их отдаёт? Можно ли будет это обойти?
2
29
6 лет назад
2
JackFastGame,
У меня так сделано.
function FearRun takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local integer i = LoadInteger(udg_AssassinHash,id,1)
local integer N = LoadInteger(udg_AssassinHash,id,2)
local integer k = 1
local real r
local unit u
set i = i - 1
call SaveInteger(udg_AssassinHash,id,1,i)
if i > 0 then
if ModuloInteger(i,8) == 0 then
loop
exitwhen k > N
set u = LoadUnitHandle(udg_AssassinHash,id,30+k)
if GetUnitCurrentOrder(u) != 851986 then
set r = LoadReal(udg_AssassinHash,id,30+k)
call IssuePointOrder(u,"move",GetUnitX(u)+300.*Cos(r),GetUnitY(u)+300.*Sin(r))
endif
set k = k+1
endloop
endif
set k = 1
loop
exitwhen k > N
set u = LoadUnitHandle(udg_AssassinHash,id,30+k)
if IsUnitAlly(u,GetLocalPlayer()) and GetPlayerState(GetLocalPlayer(),PLAYER_STATE_OBSERVER) == 0 then
call SelectUnit(u,false)
endif
set k = k+1
endloop
else
set k = 1
loop
exitwhen k > N
set u = LoadUnitHandle(udg_AssassinHash,id,30+k)
if GetLocalPlayer() == GetOwningPlayer(u) then
call ClearSelection()
call SelectUnit(u,true)
endif
set k = k+1
endloop
call FlushChildHashtable(udg_AssassinHash,id)
call DestroyTimer(t)
endif
set t = null
set u = null
endfunction
function Fear takes nothing returns nothing
local unit c = GetSpellAbilityUnit()
local unit d = GetSpellTargetUnit()
local unit u
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local timer t = CreateTimer()
local integer i = 0
local integer id = GetHandleId(t)
call GroupEnumUnitsInRange(udg_G,x,y,250,null)
loop
set u = FirstOfGroup(udg_G)
if IsTarget(u,c) and IsUnitType(u,UNIT_TYPE_HERO) then
if IsUnitAlly(u,GetLocalPlayer()) and GetPlayerState(GetLocalPlayer(),PLAYER_STATE_OBSERVER) == 0 then
call SelectUnit(u,false)
endif
set i = i + 1
call SaveUnitHandle(udg_AssassinHash,id,30+i,u)
call SaveReal(udg_AssassinHash,id,30+i,ABU(u,c))
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
call GroupClear(udg_G)
call SaveInteger(udg_AssassinHash,id,2,i)
call SaveInteger(udg_AssassinHash,id,1,60+16*GetUnitAbilityLevel(c,'A0B0'))
call TimerStart(t,0.03,true,function FearRun)
set u = null
set c = null
set d = null
endfunction
set t = CreateTrigger()
set i = 0
loop
exitwhen i > 12
call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
set i = i + 1
endloop
call TriggerAddCondition(t,Condition( function FearCon) )
call TriggerAddAction(t,function Fear)
0
32
6 лет назад
0
16GB, как я понял, отдавать приказ движения если не оглушен каждый 0,03 сек и снимать выделение?
0
23
6 лет назад
0
давно все знают как игнорить приказы... Ловите приказ паузите потом отдаете приказ стоп и убираете паузу так герой не будет прерывать анимацию
0
21
6 лет назад
0
16GB, просто ради интереса
почему у тебя везде хэштейбл назван AssassinHash
откуда-то под таким именем взял с первого раза образец что ли?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.