local Category = "PERPX Server Vehicles" local V = { -- Required information Name = "EvoCity Tow Truck", Class = "prop_vehicle_jeep", Category = Category, -- Optional information Author = "SentryGunMan", Information = "vroom vroom", Model = "models/sentry/aerial.mdl", KeyValues = { vehiclescript = "scripts/vehicles/sentry/flatbed.txt" } } list.Set("Vehicles", "aerial_sgm", V) -- ========================= -- Aerial 1 (Flatbed Towtruck Bed) -- ========================= if not Aerial1AddProps_List then Aerial1AddProps_List = {} end hook.Add("PlayerSpawnedVehicle", "FlatBedTow", function(ply, vehicle) if vehicle:GetModel() == "models/sentry/flatbed.mdl" then -- Create the actual prop local prop1 = ents.Create("ent_towtruck_bed") if not IsValid(prop1) then return end -- prop1:SetModel("models/sentry/flatbed_bed.mdl") prop1:SetPos(vehicle:LocalToWorld(Vector(0, 0, 0))) prop1:SetAngles(vehicle:LocalToWorldAngles(Angle(0, 0, 0))) prop1:SetParent(vehicle) prop1:SetOwner(ply) prop1:Spawn() prop1:SetNoDraw(false) prop1:DrawShadow(true) prop1:Fire("DisableCollision") table.insert(Aerial1AddProps_List, {vehicle, prop1}) -- Ensure that things are removed vehicle:CallOnRemove("RemoveProps", function(veh, attachedProp) if IsValid(attachedProp) then attachedProp:Remove() end end, prop1) prop1:CallOnRemove("RemoveParent", function(attachedProp, veh) if IsValid(veh) then veh:Remove() end end, vehicle) end end) -- Yes, freemmaann did code this hook.Add("Think", "Aerial1SyncChanges", function() if Aerial1AddProps_List and (not Aerial1SyncChanges_Timer or CurTime() >= Aerial1SyncChanges_Timer) then for k, v in pairs(Aerial1AddProps_List) do local base = v[1] local prop = v[2] if IsValid(prop) and IsValid(base) then prop:SetMaterial(base:GetMaterial()) prop:SetColor(base:GetColor()) prop:SetSkin(base:GetSkin()) local bgroupstring = "0" for k2, bg in pairs(base:GetBodyGroups()) do bgroupstring = bgroupstring .. base:GetBodygroup(k2) end prop:SetBodyGroups(bgroupstring) else Aerial1AddProps_List[k] = nil end end Aerial1SyncChanges_Timer = CurTime() + 0.5 end end) -- ========================= -- Aerial 2 -- ========================= if not Aerial2AddProps_List then Aerial2AddProps_List = {} end hook.Add("PlayerSpawnedVehicle", "Aerial2AddProps", function(ply, vehicle) if vehicle:GetModel() == "models/sentry/aerial.mdl" then local prop1 = ents.Create("prop_dynamic_ornament") if not IsValid(prop1) then return end prop1:SetModel("models/sentry/aerial3.mdl") prop1:SetPos(vehicle:LocalToWorld(Vector(0, 0, 0))) prop1:SetAngles(vehicle:LocalToWorldAngles(Angle(0, 0, 0))) prop1:SetParent(vehicle) prop1:SetOwner(ply) prop1:Spawn() prop1:SetNoDraw(false) prop1:DrawShadow(true) prop1:Fire("DisableCollision") table.insert(Aerial2AddProps_List, {vehicle, prop1}) vehicle:CallOnRemove("RemoveProps_Aerial2", function(veh, attachedProp) if IsValid(attachedProp) then attachedProp:Remove() end end, prop1) prop1:CallOnRemove("RemoveParent_Aerial2", function(attachedProp, veh) if IsValid(veh) then veh:Remove() end end, vehicle) end end) -- Yes, freemmaann did code this hook.Add("Think", "Aerial2SyncChanges", function() if Aerial2AddProps_List and (not Aerial2SyncChanges_Timer or CurTime() >= Aerial2SyncChanges_Timer) then for k, v in pairs(Aerial2AddProps_List) do local base = v[1] local prop = v[2] if IsValid(prop) and IsValid(base) then prop:SetMaterial(base:GetMaterial()) prop:SetColor(base:GetColor()) prop:SetSkin(base:GetSkin()) local bgroupstring = "0" for k2, bg in pairs(base:GetBodyGroups()) do bgroupstring = bgroupstring .. base:GetBodygroup(k2) end prop:SetBodyGroups(bgroupstring) else Aerial2AddProps_List[k] = nil end end Aerial2SyncChanges_Timer = CurTime() + 0.5 end end) -- ========================= -- Aerial 3 -- ========================= if not Aerial3AddProps_List then Aerial3AddProps_List = {} end hook.Add("PlayerSpawnedVehicle", "Aerial3AddProps", function(ply, vehicle) if vehicle:GetModel() == "models/sentry/aerial.mdl" then local prop1 = ents.Create("prop_dynamic_ornament") if not IsValid(prop1) then return end prop1:SetModel("models/sentry/aerial4.mdl") prop1:SetPos(vehicle:LocalToWorld(Vector(0, 0, 0))) prop1:SetAngles(vehicle:LocalToWorldAngles(Angle(0, 0, 0))) prop1:SetParent(vehicle) prop1:SetOwner(ply) prop1:Spawn() prop1:SetNoDraw(false) prop1:DrawShadow(true) prop1:Fire("DisableCollision") table.insert(Aerial3AddProps_List, {vehicle, prop1}) vehicle:CallOnRemove("RemoveProps_Aerial3", function(veh, attachedProp) if IsValid(attachedProp) then attachedProp:Remove() end end, prop1) prop1:CallOnRemove("RemoveParent_Aerial3", function(attachedProp, veh) if IsValid(veh) then veh:Remove() end end, vehicle) end end) -- Yes, freemmaann did code this hook.Add("Think", "Aerial3SyncChanges", function() if Aerial3AddProps_List and (not Aerial3SyncChanges_Timer or CurTime() >= Aerial3SyncChanges_Timer) then for k, v in pairs(Aerial3AddProps_List) do local base = v[1] local prop = v[2] if IsValid(prop) and IsValid(base) then prop:SetMaterial(base:GetMaterial()) prop:SetColor(base:GetColor()) prop:SetSkin(base:GetSkin()) local bgroupstring = "0" for k2, bg in pairs(base:GetBodyGroups()) do bgroupstring = bgroupstring .. base:GetBodygroup(k2) end prop:SetBodyGroups(bgroupstring) else Aerial3AddProps_List[k] = nil end end Aerial3SyncChanges_Timer = CurTime() + 0.5 end end) -- ========================= -- Aerial 4 (Ladder) -- ========================= if not Aerial4AddProps_List then Aerial4AddProps_List = {} end hook.Add("PlayerSpawnedVehicle", "Aerial4AddProps", function(ply, vehicle) if vehicle:GetModel() == "models/sentry/aerial.mdl" then local prop1 = ents.Create("prop_dynamic_ornament") if not IsValid(prop1) then return end prop1:SetModel("models/sentry/aerial_ladder.mdl") prop1:SetPos(vehicle:LocalToWorld(Vector(0, 0, 0))) prop1:SetAngles(vehicle:LocalToWorldAngles(Angle(0, 0, 0))) prop1:SetParent(vehicle) prop1:SetOwner(ply) prop1:Spawn() prop1:SetNoDraw(false) prop1:DrawShadow(true) prop1:Fire("DisableCollision") table.insert(Aerial4AddProps_List, {vehicle, prop1}) vehicle:CallOnRemove("RemoveProps_Aerial4", function(veh, attachedProp) if IsValid(attachedProp) then attachedProp:Remove() end end, prop1) prop1:CallOnRemove("RemoveParent_Aerial4", function(attachedProp, veh) if IsValid(veh) then veh:Remove() end end, vehicle) end end) -- Yes, freemmaann did code this hook.Add("Think", "Aerial4SyncChanges", function() if Aerial4AddProps_List and (not Aerial4SyncChanges_Timer or CurTime() >= Aerial4SyncChanges_Timer) then for k, v in pairs(Aerial4AddProps_List) do local base = v[1] local prop = v[2] if IsValid(prop) and IsValid(base) then prop:SetMaterial(base:GetMaterial()) prop:SetColor(base:GetColor()) prop:SetSkin(base:GetSkin()) local bgroupstring = "0" for k2, bg in pairs(base:GetBodyGroups()) do bgroupstring = bgroupstring .. base:GetBodygroup(k2) end prop:SetBodyGroups(bgroupstring) else Aerial4AddProps_List[k] = nil end end Aerial4SyncChanges_Timer = CurTime() + 0.5 end end)