-- Copyright (c) Anatoly Raev, 2024. All right reserved
--
-- Unauthorized copying of any file in this repository, via any medium is strictly prohibited.
-- All rights reserved by the Civil Code of the Russian Federation, Chapter 70.
-- Proprietary and confidential.
-- ------------
-- Авторские права принадлежат Раеву Анатолию Анатольевичу.
--
-- Копирование любого файла, через любой носитель абсолютно запрещено.
-- Все авторские права защищены на основании ГК РФ Глава 70.
-- Автор оставляет за собой право на защиту своих авторских прав согласно законам Российской Федерации.

MEL.DefineRecipe("base_scroll_event", "gmod_subway_base")
-- господин <вставить текст> (думаю что это будет перз). да, говнокод. да, сделано на коленке. почему так?
--[[
я работаю над этим проектом уже полгода. метрострой экстеншс изначально должен был быть выпуском уже готового контента команды
маяковского и метропака. и все полгода работы на этим проектом я задаюсь вопросом: что курил Глеб, когда писал это?
даже не так. ПОЧЕМУ СУКА ТАК? типо, это же базовые вещи, которые пишут в книгах в стиле "чистый код" (условного Робина Мартина аххах)
почти каждый кусок кода в метрострое написан так, будто это писал индусский первоклассник в надежде заработать хоть немного денег,
чтобы прокормить свою семью из 12 человек. почти каждый кусок этого кода написан так, будто у человека, который писал этот код,
диагностированная долготекущая депрессия. это буквально неуважение как самого себя, так и людей, которые это читают

и я ещё не говорю про модели. знаете, почему экст начал делать свои кабины, свои маски и все такое?
да потому-что ебанный дефолтный номер такое дырявое говнище, что элементарно урезав лишние полигоны можно срезать полигонаж почти на 20%!!!


так, вообще обратно почему все так:
я не имею никакого желания рефакторить это. когда я начинаю трогать код мс, у меня появляется странное желание взять огнемет и сжечь всё к хуям. (так произошло с языками, кстати)
а что самое страшное, в проекте где есть такой говнокод ты себе иногда говоришь фразу "ой да похуй, в мс говнокод, поэтому в эксте тоже можно говнокодить".
именно поэтому этот скролл так заговнокодечен. я заебался трогать код мс. меня тянет от него блевать. понятно?

а ещё я жду всякие высеры по типу "экст лагает!!!!! говнокод!!! не буду ставить на сервер!!!" и хочу сразу на них ответить: ок.
экст в метрострое (как бы это по чсвшному не звучало) - буквально лучик июльского солнца. буквально выходные после длинной недели. буквально баночка пива вечером пятницы.
поэтому на твоем месте не добавлять экст на свой сервер - странно. ты скорее всего потерял свою эксклюзивность - и это хорошо.
теперь вместо хуевых (ну ладно, не буду обижать, средних) моделей у тебя буквально "оооо субтрансы".
но ты можешь быть не согласен - знаю. но вот твои игроки проголосуют посещаемостью - к моему счастью, игроки будут искать сервера с экстом, а не без него. и это логично

так что не говнись и не высирайся - задай себе вопрос "а что сделал я для коммьюнити"? выпустил один хиленький аддон с панелькой (илья, не в обиду)? или вообще ничего не сделал?
]]
function RECIPE:Init()
    util.AddNetworkString("metrostroi-cabin-button-scroll")
end

function RECIPE:Inject(ent, entclass)
    net.Receive("metrostroi-cabin-button-scroll", function(len, ply)
        local train = net.ReadEntity()
        local button = net.ReadString()
        local event_delta = net.ReadInt(6)
        local seat = ply:GetVehicle()
        local outside = net.ReadBool()
        if outside then
            if not IsValid(train) then return end
            if outside and (train.CPPICanPickup and not train:CPPICanPickup(ply)) then return end
            if not outside and ply ~= train.DriverSeat.lastDriver then return end
            if not outside and train.DriverSeat.lastDriverTime and CurTime() - train.DriverSeat.lastDriverTime > 1 then return end
        else
            if not IsValid(train) then return end
            if seat ~= train.DriverSeat and seat ~= train.InstructorsSeat and (train.CPPICanPhysgun and not train:CPPICanPhysgun(ply)) and not button:find("Door") then return end
        end

        train:OnButtonScroll(button, event_delta, ply)
    end)
end
