- 27 Июн 2023
- 6
- 1
Как сделать воскрешение юнита на его первоначальной точке? т.е где был создан юнит.
Сейчас такой код, но он срабатывает 1 раз (воскрешает), далее позиция становится 0,0,0
0004F6F880 [4416.000000 -7040.000000 256.000000]
0004EDE620 [0.000000 0.000000 0.000000]
Сейчас такой код, но он срабатывает 1 раз (воскрешает), далее позиция становится 0,0,0
0004F6F880 [4416.000000 -7040.000000 256.000000]
0004EDE620 [0.000000 0.000000 0.000000]
Код:
-- Глобальная таблица для отслеживания точек создания юнитов
spawnLocations = {}
LinkLuaModifier("modifier_revive_creeps", "ability/neutral/revive_creeps.lua", LUA_MODIFIER_MOTION_NONE)
revive_creeps = class({})
function revive_creeps:GetIntrinsicModifierName()
return "modifier_revive_creeps"
end
modifier_revive_creeps = class({
IsHidden = function(self) return true end,
DeclareFunctions = function(self) return {
MODIFIER_EVENT_ON_DEATH
} end,
})
function modifier_revive_creeps:OnCreated(kv)
-- Получаем уникальный идентификатор юнита
local unit_id = self:GetParent():entindex()
-- Сохраняем первоначальную точку создания юнита в глобальной таблице, если она еще не сохранена
if not spawnLocations[unit_id] then
spawnLocations[unit_id] = self:GetParent():GetAbsOrigin()
end
end
function modifier_revive_creeps:OnDeath(data)
local unit = data.unit
if unit == self:GetParent() then
local respawn_duration = self:GetAbility():GetSpecialValueFor("respawn_duration")
local unit_id = self:GetParent():entindex()
local spawn_loc = spawnLocations[unit_id] -- Используем сохраненную точку создания
print(spawn_loc)
local caster_fw = self:GetParent():GetForwardVector()
local unit_name = self:GetParent():GetUnitName() -- Получаем имя юнита
local team = self:GetParent():GetTeam()
Timers:CreateTimer(respawn_duration, function()
local new_unit = CreateUnitByName(unit_name, spawn_loc, true, nil, nil, team)
new_unit:SetForwardVector(caster_fw)
end)
end
end