Skip to content

Alexell/metrostroi_dispatcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Metrostroi Dispatcher

Версия: 4.1

Разработчики: Alexell и Agent Smith

Metrostroi Dispatcher

Описание:

Диспетчерский функционал и расписания для машинистов Metrostroi.

Команды:

  • !dmenu (или в консоль disp_menu) - вызывает меню диспетчера, доступна игрокам с правом ulx disp, а также любому игроку, которого назначили на пост ДСЦП или ДЦХ
  • !disp - занять пост ДЦХ (также есть в меню)
  • !undisp - освободить пост ДЦХ (также есть в меню)
  • !sget - получить автоматическое расписание
  • !sclear - очистить имеющееся расписание
  • !sauto - вкл/выкл автоматическую перевыдачу расписания после оборота
  • !spass - проехать любой запрещающий сигнал без регистрации нарушения в Metadmin с возможностью открыть ПС и перевести стрелки по маршруту

Возможности меню диспетчера:

  • открывать и закрывать маршруты
  • проехать запрещающий сигнал без регистрации нарушения в Metadmin
  • занять пост ДЦХ, освободить или назначить на пост ДЦХ другого игрока
  • установить интервал движения
  • назначить на пост ДСЦП или снять с поста
  • наблюдать за всеми интервалами в одном месте
  • выдавать расписание игрокам с указанием выдержек и комментария
  • в один клик телепортироваться к пультам на блок-постах
  • администраторы могут также добавлять блок-посты на картах, где они не заполнены (на вкладке "Блок-посты" будет соответствующая кнопка)

Особенности аддона:

  • панели ДЦХ, ДСЦП и расписания скрываются с экрана на клиенте при наличии в руке камеры или консольной командой disp_showpanel 0
  • панели ДЦХ, ДСЦП и расписания не скрываются, когда ДЦХ на посту
  • панель расписания отображается только, если игрок сядет на место машиниста, помощника или любое другое место в кабине
  • панель интервалов отображается на месте панели расписания, в один момент времени можно включить только одну из них
  • если на посту есть ДЦХ, автоматическое раписание получить не получится
  • расписание автоматически перевыдается после оборота, если эта опция включена у игрока
  • блок-посты заполнены только на картах, где есть пульты: gm_metro_mosldl_v1, gm_mus_neoorange_e, gm_metro_jar_imagine_line_v4, gm_jar_pll_redux_v1, gm_metronvl, gm_metro_virus, gm_metro_nekrasovskaya_line_v5, gm_metro_crossline_r199h, gm_metro_kalinin_v2, gm_mus_loopline_e
  • данные блок-постов сохраняются в garrysmod\data\mdispatcher_controlrooms.txt после первого запуска сервера с этим аддоном
  • администраторы так же могут переименовывать или полностью удалять все блок-посты той или иной карты в файле, чтобы затем заполнить их через меню по своему
  • для работы расписаний, на карте должны присутвовать платформы и Metrostroi.StationConfigurations (с совпадающими ID станций), а также треки и сигнализация
  • для корректного просчета расписаний, от первой до последней станции должен идти единый трек
  • на картах ПЛЛ и НВЛ сделано разделение линий, т.е. станции на второй линии будут иметь немного другую нумерацию, это необходимо для корректной работы расписаний
  • из-за особенностей карты gm_mus_loopline_e, расписания для нее недоступны

Список хуков:

  • MDispatcher.TookPost (ник игрока) - выполняется, когда игрок заступил на пост ДЦХ
  • MDispatcher.FreedPost (ник игрока) - выполняется, когда игрок покинул пост ДЦХ
  • MDispatcher.SetInt (ник игрока, интервал) - выполняется, когда диспетчер изменил интервал
  • MDispatcher.DSCPSet (сообщение) - выполняется при назначении на пост ДСЦП
  • MDispatcher.DSCPUnset (сообщение) - выполняется при снятии с поста ДСЦП
  • MDispatcher.Departure(ply, ontime) - выполняется при отправлении игрока со станции, если ontime = true, то игрок отправился вовремя, в противном случае нет

Хуки можно использовать для вывода событий куда-либо, например на ваш Discord сервер или для других целей.

Примеры использования:

hook.Add("MDispatcher.SetInt","SetInterval",function(ply,int)
	local msg = "Диспетчер "..ply.." установил интервал движения "..int
	-- далее ваш код для отправки msg в Дискорд
end)
hook.Add("MDispatcher.DSCPSet","SetDSCP",function(msg)
	-- далее ваш код для отправки msg в Дискорд
end)
hook.Add("MDispatcher.Departure", "MSSTelemetry.Departure", function(ply, ontime)
    if not IsValid(ply) then return end
    if ontime then
        -- игрок отправился со станции вовремя
    else
        -- игрок отправился с отклонением от графика
    end
end)

При необходимости, вы также можете в ваших скриптах делать условия с использованием глобальной переменной MDispatcher.ActiveDispatcher, которая принимает значение true, если на посту ДЦХ есть игрок или false, если нет.

Необходимые аддоны:

  • Metrostroi
  • ULX
  • ULib