Mafia II подгружает помещения у их дверей, как GTA загружает IPL: заправки, закусочная Джо и другие, бары («Одинокая звезда», «Хилл оф Тара», бар Иллии, бар Фредди), магазины одежды и оружия, мастерская Гарри, магазин Джузеппе, парикмахерские, свалка Бруски, автосалон, квартиры Вито и Джо, особняк Фальконе и другие — 49 мест и 355 дверей.
В MafiaM они по умолчанию свободные: все двери открываются как обычно, и никто ими не управляет — нет продавцов за прилавком, меню магазинов и касс, которые можно ограбить. Используйте их в своём моде как хотите: свой магазин (со своим меню), полицейский участок, дом.
world.setInteriors("free") -- по умолчанию
world.setInteriors("closed") -- всё закрыто
world.setInteriors("game") -- как в одиночной игре: продавцы, покупки, ограбления
Или в m2o_server.ini: [world] interiors=free.
Как запереть дверь
Дверь находят по месту. Клиент знает двери вокруг игрока, сервер запирает дверь для всех:
-- клиент: дверь перед игроком
local x, y, z = player.getPosition()
local dx, dy, dz, locked = world.getNearestDoor(x, y, z, 2)
if dx then events.emitServer("toggleDoor", dx, dy, dz, not locked) end
-- сервер
events.onClient("toggleDoor", function(player, x, y, z, lock)
if ownsHouseAt(player, x, y, z) then world.setDoorLocked(x, y, z, lock) end
end)
Переходы
Некоторые помещения игры не соединены с улицей: у их двери игра затемняет экран и переносит вас. world.addPassage делает это для любых двух мест — дверь в помещение, лифт, автосалон за городом:
world.addPassage{ from = {x, y, z}, to = {x, y, z, heading}, text = "Бар Фредди" } -- [E] у двери
world.addPassage{ from = {x, y, z}, to = {x, y, z, heading}, key = false } -- просто войти
events.on("playerPassage", function(player, id) ... end) -- кто прошёл
Запертую дверь нельзя открыть и выбить. world.resetDoor(x, y, z) возвращает её режиму помещений; замки ресурса снимаются, когда он останавливается.