А конкретно, - как с самого начала отключить гарнизон для всех, кроме второго игрока?
-- Делаем одноклеточный регион, на 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В простонародье это именуется костылём, но он должен работать без нареканий. При подходе мы просто проверяем игрока и блокируем гарнизон, если это игрок, которому запрещено, а если это не игрок которому запрещено, то снимаем блокировку.
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!
Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.