- 18 Фев 2020
- 123
- 14
- Проект
- Evo Land
несколько дней мучаюсь вопросом: А как правильно юзать
PrecacheUnitByNameSync
или
PrecacheUnitByNameAsync
Мне нужно для игрока заприкешит героя с шмотками (что бы не прикешит всю папку в начале игры к примеру
PrecacheResource("model_folder", "models/items/drow", context))
но я не понимаю что куда и зачем. Могу передать имя героя и id игрока, без проблем но что еще нужно?
вот пример моего кода где я пытаюсь это настроить
сама моделька героя ест но вот шмоток на ней нет...
PrecacheUnitByNameSync
или
PrecacheUnitByNameAsync
Мне нужно для игрока заприкешит героя с шмотками (что бы не прикешит всю папку в начале игры к примеру
PrecacheResource("model_folder", "models/items/drow", context))
но я не понимаю что куда и зачем. Могу передать имя героя и id игрока, без проблем но что еще нужно?
вот пример моего кода где я пытаюсь это настроить
Lua:
function AddHeroPickAbilities(keys)
local caster = keys.caster
local heroName = "npc_dota_hero_drow_ranger"
local playerID = caster:GetPlayerID() -- Получаем ID игрока
if caster:GetUnitName() ~= heroName then
local ismodifier_auto_pick_up = 0
if caster:HasModifier( "modifier_auto_pick_up" ) then
ismodifier_auto_pick_up = 1
end
local items = {}
for i = DOTA_ITEM_SLOT_1, DOTA_ITEM_SLOT_9 do
local item = caster:GetItemInSlot(i)
if item then
local itemName = item:GetName()
local charges = item:GetCurrentCharges()
table.insert(items, {slot = i, name = itemName, charges = charges})
end
end
for i = DOTA_STASH_SLOT_1, DOTA_STASH_SLOT_6 do
local item = caster:GetItemInSlot(i)
if item then
local itemName = item:GetName()
local charges = item:GetCurrentCharges()
table.insert(items, {slot = i, name = itemName, charges = charges})
end
end
do
local item = caster:GetItemInSlot(DOTA_ITEM_NEUTRAL_SLOT)
if item then
local itemName = item:GetName()
local charges = item:GetCurrentCharges()
table.insert(items, {slot = DOTA_ITEM_NEUTRAL_SLOT, name = itemName, charges = charges})
end
end
local currentGold = caster:GetGold()
local previousHeroLevel = caster:GetLevel()
PrecacheUnitByNameAsync(heroName, function()
local hero = PlayerResource:ReplaceHeroWith(caster:GetPlayerID(), heroName, currentGold, 0)
end, playerID)
UTIL_Remove(caster)
if ismodifier_auto_pick_up == 1 then
hero:AddNewModifier(hero, nil, "modifier_auto_pick_up", {})
end
for _, itemData in pairs(items) do
local item = CreateItem(itemData.name, hero, hero)
if itemData.charges then
item:SetCurrentCharges(itemData.charges)
end
if itemData.slot >= DOTA_STASH_SLOT_1 and itemData.slot <= DOTA_STASH_SLOT_6 then
hero:AddItem(item)
end
end
Timers:CreateTimer(0.3, function()
local soundName = "echo_slam_arcana1"
EmitSoundOn(soundName, caster)
local particle = ParticleManager:CreateParticle("particles/econ/items/earthshaker/earthshaker_arcana/earthshaker_arcana_echoslam_start.vpcf", PATTACH_CUSTOMORIGIN, hero)
ParticleManager:SetParticleControl(particle, 0, hero:GetAbsOrigin())
ParticleManager:SetParticleControl(particle, 3, hero:GetAbsOrigin())
ParticleManager:ReleaseParticleIndex(particle)
end)
end
end