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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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
откуда-то под таким именем взял с первого раза образец что ли?
0
32
6 лет назад
0
Увы даже в доте можно абузить стоп и холд чтобы не бить легионку или акса, от этого было мало толку т.к акс крутился только чаще а легион бил быстрее, но тут то достаточно просто законтрить стопом такой скилл, ибо управлять не можешь - но и бежать не будешь.
0
20
6 лет назад
0
от этого было мало толку т.к акс крутился только чаще а легион бил быстрее
Вообще-то ивент юнит атакован срабатывает намного позже начала замаха. Если быстро кликать - вообще не будет проков
0
32
6 лет назад
0
Diaboliko, у фрога все было иначе, да и там ловили приказ стоп и отдавали приказ атаковать снова, что поражало срабатывание пассивок слишком часто.
0
20
6 лет назад
0
quq_CCCP:
Diaboliko, у фрога все было иначе, да и там ловили приказ стоп и отдавали приказ атаковать снова, что поражало срабатывание пассивок слишком часто.
Так говоришь, будто я в доту не играл :) Я уверен, что прав
0
21
6 лет назад
0
quq_CCCP, ну на дуэли легионку не бить не так уж и выгодно
акс - да, но у него основная сила агра в том, что это дизейбл по области, если речь о норм командной игре
так что небольшая проблема
кто бы из вас ни был прав
дизейбл-то не предотвратить
///////
кстати если кому интересно у меня была попытка сделать нечто типа альтернативного фиара
суть в том что направление движения заменяется на случайное
т. е. теоретически условный баратрум под таким дебаффом может кренделя выписывать и танцевать вместо того чтобы бежать к нужной цели
на деле это не вполне идеально получилось, т. к. цель приказа-то у дебаффнутого остаётся прежней и он стремится идти именно в свою точку, т. е. постепенное движение все равно идет куда надо, просто цель может жестоко скользить :D
зато весело, когда под таким дебаффом блинкается кто-то на то же расстояние, но совершенно в другую сторону
в общем идея все равно мне нравится
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.