Определенный герой за силы светы/тьмы

Key

Пользователь
6 Сен 2021
23
0
Добрый день, подскажите пожалуйста, как сделать так, чтобы за силы светы все спавнились, к примеру, за виспа, а за силы тьмы все спавнились за акса?
 

SniperX

Друзья CG
26 Фев 2018
539
100
Проект
Dota 2x4
Добрый день, подскажите пожалуйста, как сделать так, чтобы за силы светы все спавнились, к примеру, за виспа, а за силы тьмы все спавнились за акса?
Всем при старте выдаешь виспа с помощью CDOTABaseGameMode:SetOverrideSelectionEntity(overrideEntity: CDOTA_BaseNPC), при спавне юнита, проверяешь команду, если он за дайр, то меняешь ему героя на акса с помощью CDOTA_PlayerResource:ReplaceHeroWith(playerId: PlayerID, heroClass: string, gold: int, xp: int)
 

Key

Пользователь
6 Сен 2021
23
0
Всем при старте выдаешь виспа с помощью CDOTABaseGameMode:SetOverrideSelectionEntity(overrideEntity: CDOTA_BaseNPC), при спавне юнита, проверяешь команду, если он за дайр, то меняешь ему героя на акса с помощью CDOTA_PlayerResource:ReplaceHeroWith(playerId: PlayerID, heroClass: string, gold: int, xp: int)
Спасибо большое, но я не совсем понимаю что это и куда, можно, пожалуйста, чуть больше разьяснить?
 

Key

Пользователь
6 Сен 2021
23
0
Всем при старте выдаешь виспа с помощью CDOTABaseGameMode:SetOverrideSelectionEntity(overrideEntity: CDOTA_BaseNPC), при спавне юнита, проверяешь команду, если он за дайр, то меняешь ему героя на акса с помощью CDOTA_PlayerResource:ReplaceHeroWith(playerId: PlayerID, heroClass: string, gold: int, xp: int)
Помоги пожалуйста, вообще не понимаю что не так, проблема именно замены героя, хочу чтобы когда игрок выбирает виспа, то ему давалась урса, написано это:
function GameMode:OnNPCSpawned(keys)
print("[BAREBONES] NPC Spawned")
DeepPrintTable(keys)
local npc = EntIndexToHScript(keys.entindex)
local id = npc:GetPlayerOwnerID()


if npc:IsRealHero() and npc.bFirstSpawned == nil then
npc.bFirstSpawned = true
GameMode:OnHeroInGame(npc)
end
if npc:GetUnitName() == "npc_dota_hero_wisp" and npc:GetTeamNumber() == DOTA_TEAM_GOODGUYS then
PlayerResource:ReplaceHeroWith(id, "npc_dota_hero_ursa", 0, 0)
end
if npc:GetUnitName() == "npc_dota_hero_ursa" then
npc:FindAbilityByName("dota_ability_xp_granter"):SetLevel(1)
end
end
в InitGameMode у меня
ListenToGameEvent('npc_spawned', Dynamic_Wrap(GameMode, 'OnNPCSpawned'), self)

Запускаю игру, выбираю силы света, выбираю виспа и спавнит виспом, без ошибок просто так, я уже все перепробовал и по разному писал и ничего, помоги, очень прошу
 

bobi

Активный
24 Июл 2017
99
18
выдавай героя с задержкой
например так (должны быть подключены таймеры от BMD)
Lua:
Timers:CreateTimer(0.1, function()
    if npc:GetUnitName() == "npc_dota_hero_wisp" and npc:GetTeamNumber() == DOTA_TEAM_GOODGUYS then
        PlayerResource:ReplaceHeroWith(id, "npc_dota_hero_ursa", 0, 0)
    end
    return nil
end)
 

Key

Пользователь
6 Сен 2021
23
0
выдавай героя с задержкой
например так (должны быть подключены таймеры от BMD)
Lua:
Timers:CreateTimer(0.1, function()
    if npc:GetUnitName() == "npc_dota_hero_wisp" and npc:GetTeamNumber() == DOTA_TEAM_GOODGUYS then
        PlayerResource:ReplaceHeroWith(id, "npc_dota_hero_ursa", 0, 0)
    end
    return nil
end)
все сработало, но выдало кучу ошибок, с чем может быть связано? я это написал в barebones в function GameMode:OnNPCSpawned
Script Runtime Error: scripts\vscripts\barebones.lua:414: Parameter type mismatch
stack traceback:
[C]: in function 'EntIndexToHScript'
scripts\vscripts\barebones.lua:414: in function <scripts\vscripts\barebones.lua:411>
[C]: in function 'ReplaceHeroWith'
scripts\vscripts\barebones.lua:391: in function <scripts\vscripts\barebones.lua:389>
[C]: in function 'pcall'
scripts\vscripts\timers.lua:104: in function <scripts\vscripts\timers.lua:71>

1631363319881.png
 
Реклама: