Решено Не работает скрипт

Slaimhh1337

Пользователь
11 Мар 2023
17
1
Проект
dota 2 but new item
Код:

local ancientKilled = false -- Флаг, указывающий, были ли уже убиты герои Силы Света
local darknessHeroesRespawned = false -- Флаг, указывающий, были ли уже возрождены герои Силы Тьмы

function OnThink()
local ancient = Entities:FindByName(nil, "npc_dota_badguys_fort") -- Находим сущность Древнего
local ancientHealth = ancient:GetHealth() -- Получаем текущее здоровье Древнего

if ancientHealth <= 5000 then -- Проверяем, осталось ли у Древнего меньше 5000 здоровья
if not ancientKilled then -- Если герои Силы Света еще не были убиты
local radiantHeroes = HeroList:GetAllHeroes() -- Получаем список всех героев Силы Света
for _, hero in pairs(radiantHeroes) do -- Проходимся по каждому герою Силы Света
if hero:GetTeamNumber() == DOTA_TEAM_GOODGUYS then -- Проверяем, что герой принадлежит Силе Света
hero:ForceKill(false) -- Убиваем героя Силы Света
end
end

ancientKilled = true -- Устанавливаем флаг, указывающий, что герои Силы Света были убиты
end

if not darknessHeroesRespawned then -- Если герои Силы Тьмы еще не были возрождены
local darknessHeroes = HeroList:GetAllHeroes() -- Получаем список всех героев Силы Тьмы
for _, hero in pairs(darknessHeroes) do -- Проходимся по каждому герою Силы Тьмы
if hero:GetTeamNumber() == DOTA_TEAM_BADGUYS then -- Проверяем, что герой принадлежит Силе Тьмы
hero:RespawnHero(false, false) -- Возрождаем героя Силы Тьмы
end
end

darknessHeroesRespawned = true -- Устанавливаем флаг, указывающий, что герои Силы Тьмы были возрождены
end
end
end

все правильно вроде сделал но когда у трона сил тьмы меньше 5000 хп ничего не происходит
 
Если я правильно понимаю, ты не установил периодичность вызова функции OnThink. Попробуй добавить return 1 перед завершением функции.
 
голый тик.. использовать в игре такое себе...
Через таймер игровой лучше
Lua:
function CAddonTemplateGameMode:InitGameMode()
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(self, 'OnGameRulesStateChange'), self) -- Поиск по правилам игры
GameRules:GetGameModeEntity():SetThink( "OnThink", self, 1 )  -- каждый тик
end
Lua:
function CAddonTemplateGameMode:OnThink()
    if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
        -- Твой код тут    
        end
    end
    return 1
end
 
Последнее редактирование:
голый тик.. использовать в игре такое себе...
Через таймер игровой лучше
Lua:
function CAddonTemplateGameMode:InitGameMode()
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(self, 'OnGameRulesStateChange'), self) -- Поиск по правилам игры
GameRules:GetGameModeEntity():SetThink( "OnThink", self, 1 )  -- каждый тик
end
Lua:
function CAddonTemplateGameMode:OnThink()
    if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
        -- Твой код тут   
        end
    end
    return 1
end
я в луа ничего не понимаю я этот код с помощью костылей скопировал откуда то.
можешь пожалуйста обьяснить что это и куда это вставлять?
 
я в луа ничего не понимаю я этот код с помощью костылей скопировал откуда то.
можешь пожалуйста обьяснить что это и куда это вставлять?
Lua:
local ancientKilled = false -- Флаг, указывающий, были ли уже убиты герои Силы Света
local darknessHeroesRespawned = false -- Флаг, указывающий, были ли уже возрождены герои Силы Тьмы

function OnThink()
    local ancient = Entities:FindByName(nil, "npc_dota_badguys_fort") -- Находим сущность Древнего
    local ancientHealth = ancient:GetHealth() -- Получаем текущее здоровье Древнего

    if ancientHealth <= 5000 then -- Проверяем, осталось ли у Древнего меньше 5000 здоровья
        if not ancientKilled then -- Если герои Силы Света еще не были убиты
            local radiantHeroes = HeroList:GetAllHeroes() -- Получаем список всех героев Силы Света
            for _, hero in pairs(radiantHeroes) do -- Проходимся по каждому герою Силы Света
                if hero:GetTeamNumber() == DOTA_TEAM_GOODGUYS then -- Проверяем, что герой принадлежит Силе Света
                    hero:ForceKill(false) -- Убиваем героя Силы Света
                end
            end

            ancientKilled = true -- Устанавливаем флаг, указывающий, что герои Силы Света были убиты
        end

        if not darknessHeroesRespawned then -- Если герои Силы Тьмы еще не были возрождены
            local darknessHeroes = HeroList:GetAllHeroes() -- Получаем список всех героев Силы Тьмы
            for _, hero in pairs(darknessHeroes) do -- Проходимся по каждому герою Силы Тьмы
                if hero:GetTeamNumber() == DOTA_TEAM_BADGUYS then -- Проверяем, что герой принадлежит Силе Тьмы
                    hero:RespawnHero(false, false) -- Возрождаем героя Силы Тьмы
                end
            end

            darknessHeroesRespawned = true -- Устанавливаем флаг, указывающий, что герои Силы Тьмы были возрождены
        end
    end
end

-- Вызов функции OnThink() каждую секунду
function Think()
    OnThink()
    return 1 -- Возвращаем 1, чтобы функция вызывалась каждую секунду
end

-- Инициализация игрового режима
function Activate()
    GameRules:GetGameModeEntity():SetThink("Think", self, "GlobalThink", 1)
end

Это все там где у тебя есть function Activate()
 
Реклама: