МартаА конкретно, - как с самого начала отключить гарнизон для всех, кроме второго игрока?
Добрый вечер. Функция SetObjectEnabled не принимает ничего третьим параметром, то есть сказать какому игроку заблокировать нельзя. Объект можно либо включить, либо выключить. Касаемо вашего скрипта, могу предложить следующее:
-- Делаем одноклеточный регион, на 1 клетку перед гарнизоном
Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER,"GARRISON_REG","GarrisonCheck")
-- Делаем массив "Запрещенных" игроков
GARRISON_BANNED_PLAYERS = {
2,
-- При необходимости дописываем сюда нужных.
-- Если вам нужно дописать в скрипте то пишем в нужном месте GARRISON_BANNED_PLAYERS[length(GARRISON_BANNED_PLAYERS)] = "Номер игрока которого блочим"
}
-- Если потребуется убрать из массива игрока, то пишет вот такую функцию(Всё уже есть в библиотеке от RedHeavenHero, лучше велосипеды не писать)
-- Нижеописанная функция удаляет из массива крайне топорно, но вам подойдёт.
-- В месте где нужно удалить пишете GARRISON_BANNED_PLAYERS = arrayShiftByValue(GARRISON_BANNED_PLAYERS,"Номер игрока на удаление")
-- вам вернётся массив уже без указанного игрока, а точнее с nil вместо номера
function arrayShiftByValue(array,value)
for index,element in array do
if(element == value) then
array[index] = nil
end
end
return array
end
function GarrisonCheck(heroname)
local player = GetObjectOwner(heroname)
if(contains(GARRISON_BANNED_PLAYERS,player) == not nil) then
SetObjectEnabled("GARRISON_NAME",nil)
else
SetObjectEnabled("GARRISON_NAME",not nil)
end
end
В простонародье это именуется костылём, но он должен работать без нареканий. При подходе мы просто проверяем игрока и блокируем гарнизон, если это игрок, которому запрещено, а если это не игрок которому запрещено, то снимаем блокировку.