- 31 Май 2019
- 405
- 58
Я пытаюсь сделать так, чтобы герой бег(прыгал) на цель, а не в последнюю точку где он находился
Добавьте к коду решение.
За это огромное спасибо!
Код:
"beat_jigulevskogo"
{
"BaseClass" "ability_datadriven"
"AbilityTextureName" "ability_name"
"MaxLevel" "3"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityCooldown" "8.0"
"AbilityManaCost" "100"
"AbilityCastRange" "1500 2000 2500"
"AbilityCastPoint" "0.3"
"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_FLAIL"
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"speed_traveling" "1500"
}
"02"
{
"var_type" "FIELD_INTEGER"
"radius" "1200"
}
"03"
{
"var_type" "FIELD_INTEGER"
"bonus_attack_speed" "120 200 280"
}
"04"
{
"var_type" "FIELD_INTEGER"
"bonus_movement_speed" "100 200 300"
}
"05"
{
"var_type" "FIELD_INTEGER"
"bonus_damage" "120 200 280"
}
}
"OnSpellStart"
{
"ApplyModifier"
{
"ModifierName" "modifier_beat"
"Target" "CASTER"
"Duration" "15"
}
"ApplyModifier"
{
"ModifierName" "modifier_motion"
"Target" "TARGET"
"Duration" "%duration"
}
}
"Modifiers"
{
"modifier_beat"
{
"Passive" "0"
"IsHidden" "1"
"IsDebuff" "0"
"Properties"
{
"MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT" "%bonus_attack_speed"
"MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE" "%bonus_movement_speed"
"MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE" "%bonus_damage"
}
}
"modifier_motion"
{
"Passive" "0"
"IsHidden" "1"
"IsDebuff" "0"
"OnCreated"
{
"RunScript"
{
"ScriptFile" "ability/beat_jigulevskogo.lua"
"Function" "ExtraData"
}
"ApplyMotionController"
{
"ScriptFile" "ability/beat_jigulevskogo.lua"
"HorizontalControlFunction" "HorizontalJump"
"VerticalControlFunction" "VerticalJump"
"Caster" "TARGET"
"Target" "CASTER"
}
}
"OnDestroy"
{
"Damage"
{
"Target" "TARGET"
"Type" "DAMAGE_TYPE_MAGICAL"
"Damage" "200"
}
}
}
}
}
Код:
function ExtraData( keys )
local caster = keys.caster
local ability = keys.ability
caster:Stop()
local distance = ( keys.target:GetAbsOrigin() - caster:GetAbsOrigin() ):Length2D()
local direction = ( keys.target:GetAbsOrigin() - caster:GetAbsOrigin() ):Normalized()
ability.traveled_distance = 0
ability.speed_traveling = 1800 * 1/30
ability.distance_traveling = distance
ability.direction_traveling = direction
ability.z = 0
ability.move = keys.target:GetOrigin()
end
function HorizontalJump( keys )
local caster = keys.target
local ability = keys.ability
local original_position = caster:GetAbsOrigin()
if ability.traveled_distance < ability.distance_traveling then
caster:SetAbsOrigin(original_position + ability.direction_traveling * ability.speed_traveling)
ability.traveled_distance = ability.traveled_distance + ability.speed_traveling
else
caster:InterruptMotionControllers(true)
caster:RemoveModifierByName("modifier_motion")
end
if caster:IsStunned() or caster:IsHexed() or caster:IsOutOfGame() or caster:IsRooted() then
caster:InterruptMotionControllers(true)
end
end
function VerticalJump( keys )
local caster = keys.target
local ability = keys.ability
if ability.traveled_distance < ability.distance_traveling / 2 then
ability.z = ability.z + ability.speed_traveling / 2
caster:SetAbsOrigin(GetGroundPosition(caster:GetAbsOrigin(), caster) + Vector(0,0,ability.z))
else
ability.z = ability.z - ability.speed_traveling / 2
caster:SetAbsOrigin(GetGroundPosition(caster:GetAbsOrigin(), caster) + Vector(0,0,ability.z))
end
end
За это огромное спасибо!
Последнее редактирование: