diff --git a/lua/entities/gmod_mus_clock_analog/cl_init.lua b/lua/entities/gmod_mus_clock_analog/cl_init.lua index d8ab24f..01c5e18 100644 --- a/lua/entities/gmod_mus_clock_analog/cl_init.lua +++ b/lua/entities/gmod_mus_clock_analog/cl_init.lua @@ -13,6 +13,7 @@ function ENT:Think() --self.Arrows[i] = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") --self.Arrows[i]:SetModel( model ) self.Arrows[i] = ClientsideModel(model,RENDERGROUP_OPAQUE) + if not IsValid(self.Arrows[i]) then break end self.Arrows[i]:SetPos(self:GetPos()) self.Arrows[i]:SetAngles(self:GetAngles()) self.Arrows[i]:SetParent(self) @@ -23,13 +24,15 @@ function ENT:Think() self:EmitSound("mus/clock_click"..math.random(1,8)..".wav",65,math.random(95,105),0.5) self.OldSec = d.sec self.SecPull = RealTime()+0.05 - self.Arrows[1]:SetPoseParameter("position",(0.5+d.hour/24+d.min/1440)%1) - self.Arrows[2]:SetPoseParameter("position",d.min/60+d.sec/3600) + if IsValid(self.Arrows[1]) then self.Arrows[1]:SetPoseParameter("position",(0.5+d.hour/24+d.min/1440)%1) end + if IsValid(self.Arrows[2]) then self.Arrows[2]:SetPoseParameter("position",d.min/60+d.sec/3600) end end - if RealTime()-self.SecPull > 0 or d.sec < 30 then - self.Arrows[3]:SetPoseParameter("position",d.sec/60) - else - self.Arrows[3]:SetPoseParameter("position",d.sec/60 +(d.sec-15)/60*0.002) + if IsValid(self.Arrows[3]) then + if RealTime()-self.SecPull > 0 or d.sec < 30 then + self.Arrows[3]:SetPoseParameter("position",d.sec/60) + else + self.Arrows[3]:SetPoseParameter("position",d.sec/60 +(d.sec-15)/60*0.002) + end end --[[ diff --git a/lua/entities/gmod_subway_base/cl_init.lua b/lua/entities/gmod_subway_base/cl_init.lua index 3295487..7624a3a 100644 --- a/lua/entities/gmod_subway_base/cl_init.lua +++ b/lua/entities/gmod_subway_base/cl_init.lua @@ -392,6 +392,7 @@ function ENT:SpawnCSEnt(k,override) local model = v.model if v.modelcallback then model = v.modelcallback(self) or v.model end local cent = ClientsideModel(model,RENDERGROUP_OPAQUE) + if not IsValid(cent) then return false end cent.GetBodyColor = function() if not IsValid(self) then return Vector(1) end return self:GetBodyColor() @@ -1346,6 +1347,7 @@ function ENT:Think() for i,v in ipairs(self.LeftDoorPositions) do if self:GetPackedBool("DoorLS"..i) and not IsValid(stucked[i]) then local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + if not IsValid(ent) then break end ent:SetPos(self:LocalToWorld(Vector(v.x,v.y,self:GetStandingArea().z))) ent:SetAngles(self:LocalToWorldAngles(Angle(0,v.y < 0 and -90 or 90,0))) ent:SetSkin(math.floor(ent:SkinCount()*math.random())) @@ -1368,6 +1370,7 @@ function ENT:Think() for i,v in ipairs(self.RightDoorPositions) do if self:GetPackedBool("DoorRS"..i) and not IsValid(stucked[-i]) then local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + if not IsValid(ent) then break end ent:SetPos(self:LocalToWorld(Vector(v.x,v.y,self:GetStandingArea().z))) ent:SetAngles(self:LocalToWorldAngles(Angle(0,v.y < 0 and -90 or 90,0))) ent:SetSkin(math.floor(ent:SkinCount()*math.random())) @@ -1403,6 +1406,7 @@ function ENT:Think() --local ent = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") --ent:SetModel(table.Random(self.PassengerModels)) local ent = ClientsideModel(table.Random(self.PassengerModels),RENDERGROUP_OPAQUE) + if not IsValid(ent) then break end ent:SetPos(self:LocalToWorld(pos)) ent:SetAngles(Angle(0,math.random(0,360),0)) --[[ diff --git a/lua/entities/gmod_track_clock_interval/cl_init.lua b/lua/entities/gmod_track_clock_interval/cl_init.lua index 9531965..3b0f789 100644 --- a/lua/entities/gmod_track_clock_interval/cl_init.lua +++ b/lua/entities/gmod_track_clock_interval/cl_init.lua @@ -30,6 +30,7 @@ function ENT:Think() -- ent:SetPos(self:LocalToWorld(v[1])) --end) self.Digits[k] = ClientsideModel(model, RENDERGROUP_OPAQUE) + if not IsValid(self.Digits[k]) then break end --if ent.Spawned then hook.Remove("MetrostroiBigLag",ent) end --ent.Spawned = true diff --git a/lua/entities/gmod_track_clock_small/cl_init.lua b/lua/entities/gmod_track_clock_small/cl_init.lua index 9408242..8bb81fa 100644 --- a/lua/entities/gmod_track_clock_small/cl_init.lua +++ b/lua/entities/gmod_track_clock_small/cl_init.lua @@ -59,6 +59,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Digits[k] = ClientsideModel(model,RENDERGROUP_OPAQUE) + if not IsValid(self.Digits[k]) then break end self.Digits[k]:SetPos(self:LocalToWorld(v[1])) self.Digits[k]:SetAngles(self:GetAngles()) self.Digits[k]:SetSkin(10) diff --git a/lua/entities/gmod_track_clock_time/cl_init.lua b/lua/entities/gmod_track_clock_time/cl_init.lua index 8f2d4a9..46664da 100644 --- a/lua/entities/gmod_track_clock_time/cl_init.lua +++ b/lua/entities/gmod_track_clock_time/cl_init.lua @@ -31,6 +31,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Digits[k] = ClientsideModel(model,RENDERGROUP_OPAQUE) + if not IsValid(self.Digits[k]) then break end self.Digits[k]:SetPos(self:LocalToWorld(v[1])) self.Digits[k]:SetAngles(self:GetAngles()) self.Digits[k]:SetSkin(10) diff --git a/lua/entities/gmod_track_horlift_signal/cl_init.lua b/lua/entities/gmod_track_horlift_signal/cl_init.lua index 096bf0f..2223ff5 100644 --- a/lua/entities/gmod_track_horlift_signal/cl_init.lua +++ b/lua/entities/gmod_track_horlift_signal/cl_init.lua @@ -124,6 +124,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Models[k] = ClientsideModel(self.ModelNames[v[2]],RENDERGROUP_OPAQUE) + if not IsValid(self.Models[k]) then break end self.Models[k]:SetPos(self:LocalToWorld(v[1])) self.Models[k]:SetAngles(self:LocalToWorldAngles(Angle(v[2]==5 and 90 or 0,0,0))) if k < 3 then diff --git a/lua/entities/gmod_track_mus_elektronika7/cl_init.lua b/lua/entities/gmod_track_mus_elektronika7/cl_init.lua index ba1ca9d..ca4cdff 100644 --- a/lua/entities/gmod_track_mus_elektronika7/cl_init.lua +++ b/lua/entities/gmod_track_mus_elektronika7/cl_init.lua @@ -23,6 +23,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Digits[k] = ClientsideModel("models/mus/ussr_clock_model/num_"..(k == 1 and "no" or "").."zero.mdl",RENDERGROUP_OPAQUE) + if not IsValid(self.Digits[k]) then break end self.Digits[k]:SetPos(self:LocalToWorld(v)) self.Digits[k]:SetAngles(self:GetAngles()) self.Digits[k]:SetSkin(10) diff --git a/lua/entities/gmod_track_platform/cl_init.lua b/lua/entities/gmod_track_platform/cl_init.lua index d979384..d39126d 100644 --- a/lua/entities/gmod_track_platform/cl_init.lua +++ b/lua/entities/gmod_track_platform/cl_init.lua @@ -238,6 +238,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.ClientModels[i] = ClientsideModel(self.Pool[i].model,RENDERGROUP_OPAQUE) + if not IsValid(self.ClientModels[i]) then continue end self.ClientModels[i]:SetPos(self.Pool[i].pos) self.ClientModels[i]:SetAngles(self.Pool[i].ang) self.ClientModels[i]:SetSkin(math.floor(self.ClientModels[i]:SkinCount()*self.Pool[i].skin)) @@ -292,6 +293,7 @@ function ENT:Think() -- --ent.Spawned = true --end) local ent= ClientsideModel(self.Pool[i].model,RENDERGROUP_OPAQUE) + if not IsValid(ent) then break end ent:SetPos(pos) ent:SetSkin(math.floor(ent:SkinCount()*self.Pool[i].skin)) ent:SetModelScale(self.Pool[i].scale,0) diff --git a/lua/entities/gmod_track_pui/cl_init.lua b/lua/entities/gmod_track_pui/cl_init.lua index 25f4e8a..37a64e4 100644 --- a/lua/entities/gmod_track_pui/cl_init.lua +++ b/lua/entities/gmod_track_pui/cl_init.lua @@ -59,6 +59,7 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Digits[k] = ClientsideModel("models/metrostroi/mus_clock/pui_ind_"..v[2]..".mdl",RENDERGROUP_OPAQUE) + if not IsValid(self.Digits[k]) then continue end self.Digits[k]:SetPos(self:LocalToWorld(v[1])) self.Digits[k]:SetAngles(self:GetAngles()) self.Digits[k]:SetSkin(1) @@ -80,11 +81,13 @@ function ENT:Think() -- --ent.Spawned = true --end) self.Digits[0] = ClientsideModel("models/metrostroi/mus_clock/pui_lamp.mdl",RENDERGROUP_OPAQUE) - self.Digits[0]:SetPos(self:GetAttachment(self:LookupAttachment("lamp")).Pos) - self.Digits[0]:SetAngles(self:GetAngles()) - self.Digits[0]:SetParent(self) - self.Digits[0]:SetRenderMode( RENDERMODE_TRANSALPHA ) - self.Digits[0]:SetColor(Color(255,255,255,lamp*255)) + if IsValid(self.Digits[0]) then + self.Digits[0]:SetPos(self:GetAttachment(self:LookupAttachment("lamp")).Pos) + self.Digits[0]:SetAngles(self:GetAngles()) + self.Digits[0]:SetParent(self) + self.Digits[0]:SetRenderMode( RENDERMODE_TRANSALPHA ) + self.Digits[0]:SetColor(Color(255,255,255,lamp*255)) + end elseif IsValid(self.Digits[0]) and lamp > 0 then self.Digits[0]:SetColor(Color(255,255,255,lamp*255)) elseif IsValid(self.Digits[0]) and lamp == 0 then diff --git a/lua/entities/gmod_track_signal/cl_init.lua b/lua/entities/gmod_track_signal/cl_init.lua index fc0d168..7027aad 100644 --- a/lua/entities/gmod_track_signal/cl_init.lua +++ b/lua/entities/gmod_track_signal/cl_init.lua @@ -68,9 +68,13 @@ function ENT:SpawnMainModels(pos,ang,LenseNum,add) else self.Models[1][idx] = ClientsideModel(v,RENDERGROUP_OPAQUE) end - self.Models[1][idx]:SetPos(self:LocalToWorld(pos)) - self.Models[1][idx]:SetAngles(self:LocalToWorldAngles(ang)) - self.Models[1][idx]:SetParent(self) + if IsValid(self.Models[1][idx]) then + self.Models[1][idx]:SetPos(self:LocalToWorld(pos)) + self.Models[1][idx]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[1][idx]:SetParent(self) + else + self.ModelsCreated = false + end end end end @@ -79,9 +83,13 @@ end function ENT:SpawnHeads(ID,model,pos,ang,glass,notM,add) if not IsValid(self.Models[1][ID]) then self.Models[1][ID] = ClientsideModel(model,RENDERGROUP_OPAQUE) - self.Models[1][ID]:SetPos(self:LocalToWorld(pos)) - self.Models[1][ID]:SetAngles(self:LocalToWorldAngles(ang)) - self.Models[1][ID]:SetParent(self) + if IsValid(self.Models[1][ID]) then + self.Models[1][ID]:SetPos(self:LocalToWorld(pos)) + self.Models[1][ID]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[1][ID]:SetParent(self) + else + self.ModelsCreated = false + end end if self.RN and self.RN == self.RouteNumbers.sep then self.RN = self.RN + 1 @@ -92,9 +100,13 @@ function ENT:SpawnHeads(ID,model,pos,ang,glass,notM,add) local rnadd = ((self.RouteNumbers[id] and self.RouteNumbers[id][1] ~= "X") and (self.RouteNumbers[id][3] and not self.RouteNumbers[id][2] and "2" or "") or "5") local LampIndicator = self.TrafficLightModels[self.LightType].LampIndicator self.Models[1][rouid] = ClientsideModel(LampIndicator.model..rnadd..".mdl",RENDERGROUP_OPAQUE) - self.Models[1][rouid]:SetPos(self:LocalToWorld(pos-self.RouteNumberOffset*(self.Left and LampIndicator[1] or LampIndicator[2]))) - self.Models[1][rouid]:SetAngles(self:GetAngles()) - self.Models[1][rouid]:SetParent(self) + if IsValid(self.Models[1][rouid]) then + self.Models[1][rouid]:SetPos(self:LocalToWorld(pos-self.RouteNumberOffset*(self.Left and LampIndicator[1] or LampIndicator[2]))) + self.Models[1][rouid]:SetAngles(self:GetAngles()) + self.Models[1][rouid]:SetParent(self) + else + self.ModelsCreated = false + end if self.RouteNumbers[id] then self.RouteNumbers[id].pos = pos-self.RouteNumberOffset*(self.Left and LampIndicator[1] or LampIndicator[2]) end self.RN = self.RN + 1 end @@ -105,6 +117,7 @@ function ENT:SpawnHeads(ID,model,pos,ang,glass,notM,add) local ID_glassi = ID_glass..i if not IsValid(self.Models[1][ID_glassi]) then --NEWLENSES self.Models[1][ID_glassi] = ClientsideModel(tbl[1],RENDERGROUP_OPAQUE) + if not IsValid(self.Models[1][ID_glassi]) then self.ModelsCreated = false continue end self.Models[1][ID_glassi]:SetPos(self:LocalToWorld(pos+tbl[2]*(add and Vector(-1,1,1) or 1))) self.Models[1][ID_glassi]:SetAngles(self:LocalToWorldAngles(ang)) self.Models[1][ID_glassi]:SetParent(self) @@ -128,13 +141,17 @@ function ENT:SetLight(ID,ID2,pos,ang,skin,State,Change) end elseif IsStateAboveZero then self.Models[3][IDID2] = ClientsideModel(self.TrafficLightModels[self.LightType].LampBase.model,RENDERGROUP_OPAQUE) - self.Models[3][IDID2]:SetPos(self:LocalToWorld(pos)) - self.Models[3][IDID2]:SetAngles(self:LocalToWorldAngles(ang)) - self.Models[3][IDID2]:SetSkin(skin) - self.Models[3][IDID2]:SetParent(self) - self.Models[3][IDID2]:SetRenderMode(RENDERMODE_TRANSCOLOR) - -- self.Models[3][IDID2]:SetColor(Color(255, 255, 255, 0)) - self.Models[3][IDID2]:SetColor(Color(255,255,255,State*255)) + if IsValid(self.Models[3][IDID2]) then + self.Models[3][IDID2]:SetPos(self:LocalToWorld(pos)) + self.Models[3][IDID2]:SetAngles(self:LocalToWorldAngles(ang)) + self.Models[3][IDID2]:SetSkin(skin) + self.Models[3][IDID2]:SetParent(self) + self.Models[3][IDID2]:SetRenderMode(RENDERMODE_TRANSCOLOR) + -- self.Models[3][IDID2]:SetColor(Color(255, 255, 255, 0)) + self.Models[3][IDID2]:SetColor(Color(255,255,255,State*255)) + else + self.ModelsCreated = false + end end end @@ -144,25 +161,33 @@ function ENT:SpawnLetter(i,model,pos,letter,double) local LetMaterialsletter = LetMaterials..letter if double ~= false and not IsValid(self.Models[2][i]) and (self.Double or not self.Left) and (not letter:match("s[1-3]") or letter == "s3" or self.Double and self.Left) then self.Models[2][i] = ClientsideModel(model,RENDERGROUP_OPAQUE) - self.Models[2][i]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) - self.Models[2][i]:SetPos(self:LocalToWorld(self.BasePosition+pos)) - self.Models[2][i]:SetParent(self) - for k,v in pairs(self.Models[2][i]:GetMaterials()) do - if v:find(LetMaterialsStart) then - self.Models[2][i]:SetSubMaterial(k-1,LetMaterialsletter) + if IsValid(self.Models[2][i]) then + self.Models[2][i]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) + self.Models[2][i]:SetPos(self:LocalToWorld(self.BasePosition+pos)) + self.Models[2][i]:SetParent(self) + for k,v in pairs(self.Models[2][i]:GetMaterials()) do + if v:find(LetMaterialsStart) then + self.Models[2][i]:SetSubMaterial(k-1,LetMaterialsletter) + end end + else + self.ModelsCreated = false end end local id = i.."d" if not double and not IsValid(self.Models[2][id]) and (self.Double or self.Left) and (not letter:match("s[1-3]") or letter == "s3" or self.Double and not self.Left) then self.Models[2][id] = ClientsideModel(model,RENDERGROUP_OPAQUE) - self.Models[2][id]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) - self.Models[2][id]:SetPos(self:LocalToWorld((self.BasePosition+pos)*Vector(-1,1,1))) - self.Models[2][id]:SetParent(self) - for k,v in pairs(self.Models[2][id]:GetMaterials()) do - if v:find(LetMaterialsStart) then - self.Models[2][id]:SetSubMaterial(k-1,LetMaterialsletter) + if IsValid(self.Models[2][id]) then + self.Models[2][id]:SetAngles(self:LocalToWorldAngles(Angle(0,180,0))) + self.Models[2][id]:SetPos(self:LocalToWorld((self.BasePosition+pos)*Vector(-1,1,1))) + self.Models[2][id]:SetParent(self) + for k,v in pairs(self.Models[2][id]:GetMaterials()) do + if v:find(LetMaterialsStart) then + self.Models[2][id]:SetSubMaterial(k-1,LetMaterialsletter) + end end + else + self.ModelsCreated = false end end end @@ -173,7 +198,7 @@ end function ENT:RemoveModels(final) if self.Models and self.Models.have then - for _,v in pairs(self.Models) do if type(v) == "table" then for _,v1 in pairs(v) do v1:Remove() end end end + for _,v in pairs(self.Models) do if type(v) == "table" then for _,v1 in pairs(v) do if IsValid(v1) then v1:Remove() end end end end end self.Models = {{},{},{}} self.ModelsCreated = false @@ -247,6 +272,7 @@ function ENT:Think() local TLM = self.TrafficLightModels[self.LightType] if not self.ModelsCreated then + self.ModelsCreated = true local ID = 0 local ID2 = 0 -- Create new clientside models @@ -315,9 +341,13 @@ function ENT:Think() self.Models[1]["rous"] = ClientsideModel(TLM.LampIndicator.model..rnadd..".mdl",RENDERGROUP_OPAQUE) self.RouteNumbers[id].pos = (self.BasePosition+offset+self.LongOffset-TLM.LampIndicator[3]) if self.Left then self.RouteNumbers[id].pos = self.RouteNumbers[id].pos*TLM.LampIndicator[4] end - self.Models[1]["rous"]:SetPos(self:LocalToWorld(self.RouteNumbers[id].pos)) - self.Models[1]["rous"]:SetAngles(self:GetAngles()) - self.Models[1]["rous"]:SetParent(self) + if IsValid(self.Models[1]["rous"]) then + self.Models[1]["rous"]:SetPos(self:LocalToWorld(self.RouteNumbers[id].pos)) + self.Models[1]["rous"]:SetAngles(self:GetAngles()) + self.Models[1]["rous"]:SetParent(self) + else + self.ModelsCreated = false + end end if #self.RouteNumbers > 0 and (#self.RouteNumbers ~= 1 or not self.RouteNumbers.sep) then self.RN = 1 @@ -330,9 +360,13 @@ function ENT:Think() if self.AutostopPresent then if not IsValid(self.Models[1]["autostop"]) then self.Models[1]["autostop"] = ClientsideModel(self.AutostopModel[1],RENDERGROUP_OPAQUE) - self.Models[1]["autostop"]:SetPos(self:LocalToWorld(self.BasePosition+self.AutostopModel[2])) - self.Models[1]["autostop"]:SetAngles(self:GetAngles()) - self.Models[1]["autostop"]:SetParent(self) + if IsValid(self.Models[1]["autostop"]) then + self.Models[1]["autostop"]:SetPos(self:LocalToWorld(self.BasePosition+self.AutostopModel[2])) + self.Models[1]["autostop"]:SetAngles(self:GetAngles()) + self.Models[1]["autostop"]:SetParent(self) + else + self.ModelsCreated = false + end end end self.NamesOffset = Vector(0, 0, 0) @@ -381,9 +415,13 @@ function ENT:Think() local id = self.Arrow self.Models[1]["roua"] = ClientsideModel(TLM.LampIndicator.model.."4.mdl",RENDERGROUP_OPAQUE) self.SpecRouteNumbers.pos = (self.BasePosition+offset+self.LongOffset-TLM.LampIndicator[5])*(self.Left and TLM.LampIndicator[6] or 1) - (self.RouteNumberOffset or Vector(0, 0, 0)) - self.Models[1]["roua"]:SetPos(self:LocalToWorld(self.SpecRouteNumbers.pos)) - self.Models[1]["roua"]:SetAngles(self:LocalToWorldAngles(self.Left and Angle(-90,0,0) or Angle(90,0,0))) - self.Models[1]["roua"]:SetParent(self) + if IsValid(self.Models[1]["roua"]) then + self.Models[1]["roua"]:SetPos(self:LocalToWorld(self.SpecRouteNumbers.pos)) + self.Models[1]["roua"]:SetAngles(self:LocalToWorldAngles(self.Left and Angle(-90,0,0) or Angle(90,0,0))) + self.Models[1]["roua"]:SetParent(self) + else + self.ModelsCreated = false + end end offset = self.RenderOffset[self.LightType]+(OneLense and TLM.name_one or TLM.name)+(OneLense and self.RouteNumberOffset or Vector(0, 0, 0)) if self.LightType == 1 then @@ -421,13 +459,16 @@ function ENT:Think() if not IsValid(self.Models[1][k]) then local v = TLM["m1"] self.Models[1][k] = ClientsideModel(v,RENDERGROUP_OPAQUE) - self.Models[1][k]:SetPos(self:LocalToWorld(self.BasePosition*(self.Left and Vector(-1,1,1) or 1))) - self.Models[1][k]:SetAngles(self:LocalToWorldAngles(self.Left and Angle(-1,1,1) or Angle(1,1,1))) - self.Models[1][k]:SetParent(self) + if IsValid(self.Models[1][k]) then + self.Models[1][k]:SetPos(self:LocalToWorld(self.BasePosition*(self.Left and Vector(-1,1,1) or 1))) + self.Models[1][k]:SetAngles(self:LocalToWorldAngles(self.Left and Angle(-1,1,1) or Angle(1,1,1))) + self.Models[1][k]:SetParent(self) + else + self.ModelsCreated = false + end end end self.Models.have = true - self.ModelsCreated = true else --TODO if self.AutostopPresent then @@ -509,12 +550,16 @@ function ENT:Think() if v[2] then State2 = self:Animate(rou2k,self.Num:find(v[2])and 1 or 0, 0,1, 256) end if not IsValid(self.Models[3][rou1k]) and State1 > 0 then self.Models[3][rou1k] = ClientsideModel(v[3] and LampIndicatorModels_numb_mdl or LampIndicatorModels_lamp_mdl,RENDERGROUP_OPAQUE) - self.Models[3][rou1k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4])) - self.Models[3][rou1k]:SetAngles(self:GetAngles()) - self.Models[3][rou1k]:SetParent(self) - self.Models[3][rou1k]:SetSkin(v[3] and self.OldRouteNumberSetup[5][v[1]] or self.OldRouteNumberSetup[6][v[1]] or tonumber(v[1])-1) - self.Models[3][rou1k]:SetRenderMode(RENDERMODE_TRANSCOLOR) - self.Models[3][rou1k]:SetColor(Color(255, 255, 255, 0)) + if IsValid(self.Models[3][rou1k]) then + self.Models[3][rou1k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4])) + self.Models[3][rou1k]:SetAngles(self:GetAngles()) + self.Models[3][rou1k]:SetParent(self) + self.Models[3][rou1k]:SetSkin(v[3] and self.OldRouteNumberSetup[5][v[1]] or self.OldRouteNumberSetup[6][v[1]] or tonumber(v[1])-1) + self.Models[3][rou1k]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3][rou1k]:SetColor(Color(255, 255, 255, 0)) + else + self.ModelsCreated = false + end end if IsValid(self.Models[3][rou1k]) then if State1 > 0 then @@ -525,12 +570,16 @@ function ENT:Think() end if not IsValid(self.Models[3][rou2k]) and v[3] and v[2] and State2 > 0 then self.Models[3][rou2k] = ClientsideModel(LampIndicatorModels_numb_mdl,RENDERGROUP_OPAQUE) - self.Models[3][rou2k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4] + TLM.RouteNumberOffset2)) - self.Models[3][rou2k]:SetAngles(self:GetAngles()) - self.Models[3][rou2k]:SetParent(self) - self.Models[3][rou2k]:SetSkin(self.OldRouteNumberSetup[5][v[2]] or tonumber(v[2])-1) - self.Models[3][rou2k]:SetRenderMode(RENDERMODE_TRANSCOLOR) - self.Models[3][rou2k]:SetColor(Color(255, 255, 255, 0)) + if IsValid(self.Models[3][rou2k]) then + self.Models[3][rou2k]:SetPos(self:LocalToWorld(v.pos + self.OldRouteNumberSetup[4] + TLM.RouteNumberOffset2)) + self.Models[3][rou2k]:SetAngles(self:GetAngles()) + self.Models[3][rou2k]:SetParent(self) + self.Models[3][rou2k]:SetSkin(self.OldRouteNumberSetup[5][v[2]] or tonumber(v[2])-1) + self.Models[3][rou2k]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3][rou2k]:SetColor(Color(255, 255, 255, 0)) + else + self.ModelsCreated = false + end end if IsValid(self.Models[3][rou2k]) then if State2 > 0 then @@ -546,20 +595,24 @@ function ENT:Think() self.Models[3]["roua"] = ClientsideModel(LampIndicatorModels_lamp_mdl,RENDERGROUP_OPAQUE) self.SpecRouteNumbers.pos = (self.BasePosition+offset-TLM.SpecRouteNumberOffset)-(self.RouteNumberOffset or Vector(0, 0, 0))+TLM.RouteNumberOffset3 if self.Left then self.SpecRouteNumbers.pos = self.SpecRouteNumbers.pos*TLM.SpecRouteNumberOffset2 end - self.Models[3]["roua"]:SetPos(self.Models[1]["roua"]:LocalToWorld(TLM.RouaOffset)) - self.Models[3]["roua"]:SetAngles(self.Models[1]["roua"]:LocalToWorldAngles(Angle(180,0,0))) - self.Models[3]["roua"]:SetParent(self) - if self.Left then - if self.Num[1] == "L" then - self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["R"] or 0) + if IsValid(self.Models[3]["roua"]) then + self.Models[3]["roua"]:SetPos(self.Models[1]["roua"]:LocalToWorld(TLM.RouaOffset)) + self.Models[3]["roua"]:SetAngles(self.Models[1]["roua"]:LocalToWorldAngles(Angle(180,0,0))) + self.Models[3]["roua"]:SetParent(self) + if self.Left then + if self.Num[1] == "L" then + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["R"] or 0) + else + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["L"] or 0) + end else - self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6]["L"] or 0) + self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6][self.Num[1]] or 0) end + self.Models[3]["roua"]:SetRenderMode(RENDERMODE_TRANSCOLOR) + self.Models[3]["roua"]:SetColor(Color(255, 255, 255, 0)) else - self.Models[3]["roua"]:SetSkin(self.OldRouteNumberSetup[6][self.Num[1]] or 0) + self.ModelsCreated = false end - self.Models[3]["roua"]:SetRenderMode(RENDERMODE_TRANSCOLOR) - self.Models[3]["roua"]:SetColor(Color(255, 255, 255, 0)) end if IsValid(self.Models[3]["roua"]) then if State > 0 then diff --git a/lua/entities/gmod_track_signs/cl_init.lua b/lua/entities/gmod_track_signs/cl_init.lua index 9af9037..4f87a58 100644 --- a/lua/entities/gmod_track_signs/cl_init.lua +++ b/lua/entities/gmod_track_signs/cl_init.lua @@ -99,9 +99,11 @@ function ENT:Think() end if self.Left then pos = pos*Vector(1,-1,1) end if self.Left and self.ModelProp.rotate then ang = ang-Angle(0,180,0) end - self.Model:SetParent(self) - self.Model:SetPos(self:LocalToWorld(pos)) - self.Model:SetAngles(self:LocalToWorldAngles(ang)) + if IsValid(self.Model) then + self.Model:SetParent(self) + self.Model:SetPos(self:LocalToWorld(pos)) + self.Model:SetAngles(self:LocalToWorldAngles(ang)) + end end return true end diff --git a/lua/entities/gmod_train_special_box/cl_init.lua b/lua/entities/gmod_train_special_box/cl_init.lua index e859770..798f860 100644 --- a/lua/entities/gmod_train_special_box/cl_init.lua +++ b/lua/entities/gmod_train_special_box/cl_init.lua @@ -7,6 +7,7 @@ end function ENT:SpawnDigit(id,i) local cent = ClientsideModel(Format("models/metrostroi_train/reversor/revers_number0%d.mdl",id),RENDERGROUP_OPAQUE) + if not IsValid(cent) then return end cent:SetParent(self) cent:SetPos(self:LocalToWorld(Vector(-0.65+i*0.3,0.3,4.49+i*0.005))) cent:SetAngles(self:LocalToWorldAngles(Angle(-1,0,0))) @@ -24,7 +25,7 @@ function ENT:Think() if #self.Digits > 0 and self:GetModel()=="models/metrostroi_train/reversor/reversor_collection_box_empty.mdl" then self:OnRemove() end - if self.Code ~= self:GetNW2Int("Code",-1) then + if self.Code ~= self:GetNW2Int("Code",-1) or self:GetNW2Int("Code",-1) > 0 and (not IsValid(self.Digits[0]) or not IsValid(self.Digits[1]) or not IsValid(self.Digits[2])) then self:OnRemove() self.Code = self:GetNW2Int("Code",-1) if self.Code>0 then diff --git a/lua/weapons/gmod_tool/stools/train_spawner.lua b/lua/weapons/gmod_tool/stools/train_spawner.lua index 2ec100a..9a1d16f 100644 --- a/lua/weapons/gmod_tool/stools/train_spawner.lua +++ b/lua/weapons/gmod_tool/stools/train_spawner.lua @@ -102,6 +102,7 @@ end function TOOL:UpdateGhost() local good,canDraw for i,e in ipairs(self.GhostEntities) do + if not IsValid(e) then continue end local t = self.Model[i] local pos,ang if i==1 then @@ -146,19 +147,20 @@ function TOOL:Think() self.GhostEntities = {} if type(self.Model) == "string" then self.GhostEntities[1] = ClientsideModel(self.Model,RENDERGROUP_OPAQUE) - self.GhostEntities[1]:SetModel(self.Model) + if IsValid(self.GhostEntities[1]) then self.GhostEntities[1]:SetModel(self.Model) end else for i,t in pairs(self.Model) do if type(t) == "string" then self.GhostEntities[i] = ClientsideModel(t,RENDERGROUP_OPAQUE) - self.GhostEntities[i]:SetModel(t) + if IsValid(self.GhostEntities[i]) then self.GhostEntities[i]:SetModel(t) end else self.GhostEntities[i] = ClientsideModel(t[1],RENDERGROUP_OPAQUE) - self.GhostEntities[i]:SetModel(t[1]) + if IsValid(self.GhostEntities[i]) then self.GhostEntities[i]:SetModel(t[1]) end end end end for i,e in pairs(self.GhostEntities) do + if not IsValid(e) then continue end e:SetRenderMode(RENDERMODE_TRANSALPHA) e.GetBodyColor = function() return Vector(1,1,1) end e.GetDirtLevel = function() return 0.25 end diff --git a/lua/weapons/train_key/cl_init.lua b/lua/weapons/train_key/cl_init.lua index 4362915..876883a 100644 --- a/lua/weapons/train_key/cl_init.lua +++ b/lua/weapons/train_key/cl_init.lua @@ -322,8 +322,8 @@ function SWEP:CreateModels( tab ) string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") - v.modelEnt:SetModel(v.model) if (IsValid(v.modelEnt)) then + v.modelEnt:SetModel(v.model) v.modelEnt:SetPos(self:GetPos()) v.modelEnt:SetAngles(self:GetAngles()) v.modelEnt:SetParent(self) diff --git a/lua/weapons/train_kv_wrench/cl_init.lua b/lua/weapons/train_kv_wrench/cl_init.lua index 67c0468..54d4faf 100644 --- a/lua/weapons/train_kv_wrench/cl_init.lua +++ b/lua/weapons/train_kv_wrench/cl_init.lua @@ -340,8 +340,8 @@ function SWEP:CreateModels( tab ) string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") - v.modelEnt:SetModel(v.model) if (IsValid(v.modelEnt)) then + v.modelEnt:SetModel(v.model) v.modelEnt:SetPos(self:GetPos()) v.modelEnt:SetAngles(self:GetAngles()) v.modelEnt:SetParent(self) diff --git a/lua/weapons/train_kv_wrench_gold/cl_init.lua b/lua/weapons/train_kv_wrench_gold/cl_init.lua index 61b3485..a744811 100644 --- a/lua/weapons/train_kv_wrench_gold/cl_init.lua +++ b/lua/weapons/train_kv_wrench_gold/cl_init.lua @@ -357,8 +357,8 @@ function SWEP:CreateModels( tab ) string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then v.modelEnt = ents.CreateClientProp("models/metrostroi/81-717/reverser.mdl") - v.modelEnt:SetModel(v.model) if (IsValid(v.modelEnt)) then + v.modelEnt:SetModel(v.model) v.modelEnt:SetPos(self:GetPos()) v.modelEnt:SetAngles(self:GetAngles()) v.modelEnt:SetParent(self)