- 18 Фев 2020
- 123
- 14
- Проект
- Evo Land
Вообщем пытаюсь реализовать такую муть.
Есть триггер с именем my_trigger_name
Создаю файл duel.lua который лежит в vscripts
вот файл:
в addon_game_mode я привязываю данный скрипт
проблема в том что в игре ничего не происходит. Данный код должен реализовать такую хрень. Ступает 2 героя их тепает на центр и меняет одному команду( изначально у меня только (DOTA_TEAM_GOODGUYS, 5))
в консоль даже не выводится ни ошибки ни надпись оператора.
в самом триггере я дал имя duel в entiti script и добавил Outputs в котором при касании срабатывает функция "OnDuelTriggerStartTouch"
Оговорка я не заметил отсутствие оператора. Добавил, работает, но игроков не тепает. Может проблема в том что я создаю героя через команду а он не засчитывается. хотя на него оператор тоже реагирует. Ух и муть
...
Есть триггер с именем 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
Код:
function Precache(context)
-- Здесь вы можете добавить другие файлы для загрузки, если это необходимо
-- Загрузка Lua файла для дуэлей
PrecacheResource("script", "scripts/vscripts/duel.lua", context)
end
в консоль даже не выводится ни ошибки ни надпись оператора.
в самом триггере я дал имя duel в entiti script и добавил Outputs в котором при касании срабатывает функция "OnDuelTriggerStartTouch"
Оговорка я не заметил отсутствие оператора. Добавил, работает, но игроков не тепает. Может проблема в том что я создаю героя через команду а он не засчитывается. хотя на него оператор тоже реагирует. Ух и муть
...
Последнее редактирование: