XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Ошибка с кодом
function Trig_HowlOfTerror_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A00Y'
endfunction

function HowlCondition takes nothing returns boolean
return ((IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false) and (IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true) and (IsUnitAliveBJ(GetFilterUnit()) == true) and (IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE) == false))
endfunction

function HowlOfTerror_Damage takes nothing returns nothing
local trigger t = GetTriggeringTrigger()
local unit cs = GetUnit(t,"howl_caster")
local unit u = GetEnumUnit()
local real i = I2R(GetInteger(t,"howl_unit"))
local real r = DistanceBetweenPoints(GetUnitLoc(cs),GetUnitLoc(u))
call UnitDamageTargetBJ( cs, u, 100+(100*i), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call KnockbackUnit(cs,u,710-r,5)
endfunction

function Trig_HowlOfTerror_Actions takes nothing returns nothing
local group g
local trigger t = GetTriggeringTrigger()
local unit cs = GetTriggerUnit()
call SetInteger(t,"howl_level",GetUnitAbilityLevelSwapped('A00Y', cs))
call SetUnit(t,"howl_caster",cs)
set g = GetUnitsInRangeOfLocMatching(710.00, GetUnitLoc(cs), Condition(function HowlCondition))
call ForGroupBJ( g, function HowlOfTerror_Damage )
call PolledWait(.5)
call FastFlush(t)

endfunction
Функция KnockbackUnit:
function KnockbackUnit_moving takes nothing returns nothing
local timer ltt=GetExpiredTimer()
local integer lff=GetHandleId(ltt)
local unit target = LoadUnitHandle(udg_hash_table,lff,StringHash("knockback_target"))
local real angle = LoadReal(udg_hash_table,lff,StringHash("knockback_angle"))
local real speed = LoadReal(udg_hash_table,lff,StringHash("knockback_speed"))
local integer brake = LoadInteger(udg_hash_table,lff,StringHash("knockback_brake"))
	local effect e
	local location luZ

	if brake==1 then
		set speed = speed*0.95
	endif
	if(GetUnitState(target,UNIT_STATE_LIFE)>0)then
		set luZ=GetUnitLoc(target)
		call EnumDestructablesInCircleBJ(150.,luZ,function KillDestructableEnum)
		call AddSpecialEffectLocBJ( GetUnitLoc(target), "Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl" )
		set e = GetLastCreatedEffectBJ()
		call DestroyEffectBJ(e)
		call RemoveLocation(luZ)
		call SetUnitPosition(target,GetUnitX(target)+speed*CosBJ(angle),GetUnitY(target)+speed*SinBJ(angle))
	endif
endfunction

function KnockbackUnit takes unit caster, unit target, real range, real speed returns nothing
local timer ltt=CreateTimer()
local integer lff = GetHandleId(ltt)
local real angle = AngleBetweenPoints(GetUnitLoc(caster), GetUnitLoc(target))
call SetUnitFacingToFaceLocTimed( target, GetUnitLoc(caster), 0 )
call SaveUnitHandle(udg_hash_table,lff,StringHash("knockback_target"),target)
call SaveReal(udg_hash_table,lff,StringHash("knockback_angle"),angle)
call SaveReal(udg_hash_table,lff,StringHash("knockback_speed"),speed)
call SaveInteger(udg_hash_table,lff,StringHash("knockback_brake"),0)
call PauseUnitBJ(true, target)
call TimerStart(ltt,.01,true,function KnockbackUnit_moving)
call PolledWait(((range/speed)*0.75)/100)
call SaveInteger(udg_hash_table,lff,StringHash("knockback_brake"),1)
call PolledWait(((range/speed)*0.30)/100)
call PauseUnitBJ(false, target)
call PauseTimer(ltt)
call PolledWait(1.25)
call FastFlush(ltt)
call DestroyTimer(ltt)
endfunction

Отредактировано ShadoW DaemoN, 19.09.2009 в 12:28.
Старый 19.09.2009, 11:51
Elf_Stratigo

offline
Опыт: 4,699
Активность:
SetInteger - нет описания
Старый 19.09.2009, 12:33
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
функция работает, но поидее должна отталкивать юнитов на 710-расстояние между кастером и целью, вместо этого постоянно всех отталкивает до границы карты
зы что было с тегом code?
Старый 19.09.2009, 12:51
Just Fear
Loading --•••----
offline
Опыт: 2,062
Активность:
Master_chan, оно будет двигать пока юнит не умрет... сделай
if(GetUnitState(target,UNIT_STATE_LIFE)>0)then
На
if(speed > 10)then
тоесть когда скорость уменьшится на до 9 и ниже то оно прекратит движение...
Старый 19.09.2009, 13:55
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Проверка хп сделана для того чтобы не толкать трупы. Функция отталкивает пока таймер не встанет на паузу. Не могу понять почему таймер останавливается некорректно, если запускать функцию больше 1 раза. С 1 юнитом отталкивание работает нормально.

Отредактировано Master_chan, 19.09.2009 в 14:14.
Старый 19.09.2009, 14:09
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 06:05.