не работает скрипт через касание триггера

Novichek

Активный
18 Фев 2020
123
14
Проект
Evo Land
Вообщем пытаюсь реализовать такую муть.
Есть триггер с именем my_trigger_name
Создаю файл duel.lua который лежит в vscripts
вот файл:
Lua:
-- Константа с именем триггера
local DUEL_TRIGGER_NAME = "my_trigger_name"

-- Обработчик события касания игроками триггера
function OnDuelTriggerStartTouch(trigger)
  -- Ищем двух игроков внутри зоны триггера
  local hero1 = nil
  local hero2 = nil
  local entities = Entities:FindAllInSphere(trigger:GetCenter(), trigger:GetBoundingMaxs().x)
  for _, entity in pairs(entities) do
    if entity.GetClassname and entity:GetClassname() == "npc_dota_hero" and entity:IsRealHero() then
      if hero1 == nil then
        hero1 = entity
      else
        hero2 = entity
        break
      end
    end
  end

  -- Если найдены оба игрока, начинаем дуэль
  if hero1 and hero2 then
    -- Сохраняем исходные позиции героев
    local hero1StartPosition = hero1:GetAbsOrigin()
    local hero2StartPosition = hero2:GetAbsOrigin()

    -- Переносим героев на начальные позиции дуэли
    hero1:SetAbsOrigin(Vector(0, 0, 0))
    FindClearSpaceForUnit(hero1, hero1:GetAbsOrigin(), true)
    hero2:SetAbsOrigin(Vector(0, 0, 0))
    FindClearSpaceForUnit(hero2, hero2:GetAbsOrigin(), true)

    -- Меняем команду у одного из героев
    if hero1:GetTeamNumber() == DOTA_TEAM_GOODGUYS then
      hero2:SetTeam(DOTA_TEAM_BADGUYS)
    else
      hero1:SetTeam(DOTA_TEAM_BADGUYS)
    end

    -- Запускаем дуэль
    local duel = Duel(hero1, hero2, hero1StartPosition, hero2StartPosition)
    duel:SetEndCallback(function()
      -- Возвращаем героев на исходные позиции
      hero1:SetAbsOrigin(Vector(128, -2048, 144))
      FindClearSpaceForUnit(hero1, hero1:GetAbsOrigin(), true)
      hero1:SetTeam(DOTA_TEAM_GOODGUYS)
      hero2:SetAbsOrigin(Vector(128, -2048, 144))
      FindClearSpaceForUnit(hero2, hero2:GetAbsOrigin(), true)
      hero2:SetTeam(DOTA_TEAM_GOODGUYS)
    end)
  end
end

-- Находим триггер по имени и привязываем к нему обработчик события
local trigger = Entities:FindByName(nil, DUEL_TRIGGER_NAME)
if trigger then
  trigger:SetContextThink("OnDuelTriggerStartTouch", function() OnDuelTriggerStartTouch(trigger) end, 0.1)
else
  print("[Duel] Failed to find trigger with name " .. DUEL_TRIGGER_NAME)
end
в addon_game_mode я привязываю данный скрипт
Код:
function Precache(context)
  -- Здесь вы можете добавить другие файлы для загрузки, если это необходимо

  -- Загрузка Lua файла для дуэлей
  PrecacheResource("script", "scripts/vscripts/duel.lua", context)
end
проблема в том что в игре ничего не происходит. Данный код должен реализовать такую хрень. Ступает 2 героя их тепает на центр и меняет одному команду( изначально у меня только (DOTA_TEAM_GOODGUYS, 5))
в консоль даже не выводится ни ошибки ни надпись оператора.
в самом триггере я дал имя duel в entiti script и добавил Outputs в котором при касании срабатывает функция "OnDuelTriggerStartTouch"
Оговорка я не заметил отсутствие оператора. Добавил, работает, но игроков не тепает. Может проблема в том что я создаю героя через команду а он не засчитывается. хотя на него оператор тоже реагирует. Ух и муть
...
 
Последнее редактирование:
hero1:GetTeamNumber() получает цифровое значение. 2 - силы света, 3 - силы тьмы. Соответственно должно быть if hero1:GetTeamNumber() == 2 then
 
Реклама: