Перейти к содержимому

Покрытие сети

Сколько делений сети у телефона и что происходит, когда их нет.

По умолчанию функция выключена. Город, который не просил покрытие, получает тот телефон, который у него всегда был: полные деления везде, ничего не отклоняется, ничего не измеряется:

-- shared/config/signal.lua
Enabled = false, -- turn it on when you want bars that come from where the player is standing

Если включить её и больше ничего не менять, всё равно почти ничего не произойдёт: без вышек и мёртвых зон карта полностью покрыта, а единственное отличие — индикатор сигнала, который наконец говорит правду. Добавьте одну из строк ниже — и он начнёт что-то значить.

Всё решается на сервере, исходя из того, где игрок действительно стоит. Клиент, который сам решает, какой у него сигнал, — это клиент без делений, пока ему звонят, и с четырьмя, пока он звонит сам.


То же, что и режим полёта, потому что это тот же факт с другой стороны: город не может достучаться до этого телефона.

  • Входящие и исходящие звонки отклоняются, и телефон пишет Здесь нет сигнала, а не «недоступен».
  • Сообщения не отправляются, а сообщения, отправленные им, сохраняются.
  • Всё, что город пытался доставить, передаётся в ту же секунду, как деления вернутся, — ничего не теряется, оно ждёт.
  • Сам телефон продолжает работать: камера, заметки, фонарик, фотографии, уже лежащие на нём.

Строка состояния рисует имеющиеся деления, а при нуле пишет Нет сети.


-- shared/config/signal.lua
City = {
Centre = vector3(195.0, -890.0, 30.0), -- Legion Square, near enough
Full = 3000.0, -- full signal within this
None = 9000.0, -- nothing at all past this
},

В городе деления полные, а по пути из него они убывают по одному. Замер на работающем сервере с указанными выше значениями по умолчанию:

ГдеДеления
Legion Square4
Sandy Shores3
Paleto Bay1

Установите City = false, чтобы отключить это и использовать только вышки.

Вышки — для города, где покрытие — это то, на что игроки могут показать пальцем

Заголовок раздела «Вышки — для города, где покрытие — это то, на что игроки могут показать пальцем»
Range = 900.0, -- full signal this close to a mast
Fade = 1400.0, -- and nothing this much further out
Masts = {
vector3(-75.0, -818.0, 326.0), -- the tower on Maze Bank
vector3(2358.0, 2570.0, 46.0), -- the masts above Sandy Shores
},

Когда в этом списке что-то есть, деления определяются ближайшей вышкой, а City игнорируется. Вышка, которую кто-то взорвал, — это район без телефонов, пока её не починят, — именно такая версия стоит того, чтобы её иметь, если ваш город хочет с этим что-то делать.

Dead = {
{ Coords = vector3(895.0, -3245.0, -98.0), Radius = 120.0, Bars = 0 }, -- the labs
{ Coords = vector3(480.0, -1310.0, 29.0), Radius = 40.0, Bars = 1 }, -- the chop shop
},

Дыра важнее того, что говорят вышки, а при пересечении двух побеждает меньшее число: бункер в долине не покрыт лучше оттого, что находится в обеих зонах. Bars = 0 — это полное отсутствие; любое другое число — подвал, где всё же ловится одно деление.

Сфера — потому что у сферы можно найти центр одной командой.


exports.mic_phone:GetSignal(src) --> 0 to Config.Signal.Bars
exports.mic_phone:SetJammed(src, true) --> takes their bars away until you give them back

Оба работают при выключенном покрытии. GetSignal отвечает полным количеством, так что скрипт может читать его, не спрашивая, существует ли функция, — а глушение по-прежнему отнимает у человека деления, потому что ограблению или тюрьме, которым нужно здание без телефонов, не должно требоваться предварительно настраивать всю функцию. Это единственный случай, когда телефон может потерять сигнал при установке по умолчанию, и причина в том, что этого попросил другой ресурс.

Глушение намеренно серверное: state bag, в который клиент мог бы писать, — это state bag, который клиент может очистить. Именно им пользуются ограбление, тюрьма или сюжет — глушат всех в здании и отпускают, когда всё закончилось.

Чтение через bag вообще ничего не стоит:

if (Player(src).state.phoneSignal or 4) == 0 then
-- nobody is calling the police from in here
end
  • Ничто из тайминга не имеет значения, пока не установлено Enabled = true; при выключенной функции не измеряется вообще ничего.
  • Расчёт идёт каждые Config.Signal.Tick секунд, по умолчанию пять. Это проверка расстояния по короткому списку, и точность до секунды никому не нужна.
  • Config.Signal.Tell решает, говорит ли телефон хоть слово, когда деления пропадают и когда возвращаются. Включены оба варианта: потеря сигнала требует объяснения, а возвращение — это момент, когда приходит всё, что ждало.