Advertisement
HK47

sdfsdf

May 13th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.53 KB | None | 0 0
  1. if CLIENT then
  2.     hook.Add("PostDrawOpaqueRenderables", "costume_draw_world_model", function()
  3.         net.Receive("costume_net_send", function()
  4.             net.ReadEntity():SetNWBool("costume_have_hk", true)
  5.         end)
  6.        
  7.         net.Receive("costume_net_sendend", function()
  8.             net.ReadEntity():SetNWBool("costume_have_hk", false)
  9.             LocalPlayer():SetNWBool("costume_add_worldmodel", false)
  10.         end)
  11.    
  12.         if not LocalPlayer():GetNWBool("costume_have_hk") then return end
  13.         //if LocalPlayer():GetNWBool("costume_add_worldmodel") then return end
  14.    
  15.         local WElements = {
  16.             ["m+"] = { type = "Model", model = "models/props_combine/combine_booth_short01a.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(1.557, 1.5, -5.901), angle = Angle(-80, 180, 0), size = Vector(0.019, 0.012, 0.019), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
  17.             ["m"] = { type = "Model", model = "models/props_combine/breenlight.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(18.181, 1.5, -7.792), angle = Angle(80, 0, 0), size = Vector(0.5, 0.5, 0.5), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
  18.             ["m++++++"] = { type = "Model", model = "models/props_combine/combine_emitter01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(10.909, 2, -6.753), angle = Angle(10, 180, -90), size = Vector(0.172, 0.172, 0.172), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
  19.             ["m++++"] = { type = "Model", model = "models/props_combine/combine_lock01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(3.635, 3, -3.636), angle = Angle(100, -180, 0), size = Vector(0.17, 0.17, 0.17), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
  20.             ["m++"] = { type = "Model", model = "models/Items/battery.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.675, 1.5, -7.401), angle = Angle(-100, 0, 0), size = Vector(0.237, 0.237, 0.82), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
  21.             ["m+++"] = { type = "Model", model = "models/props_combine/tprotato1.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(-1, 1.5, -4), angle = Angle(180, 0, 0), size = Vector(0.17, 0.17, 0.17), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
  22.         }
  23.        
  24.         WElements = tableFullCopy(WElements)
  25.         CreateModels(WElements)
  26.  
  27.         local wRenderOrder = nil
  28.         local bone_ent
  29.    
  30.         if !WElements then return end
  31.        
  32.         if (!wRenderOrder) then
  33.  
  34.             wRenderOrder = {}
  35.  
  36.             for k, v in pairs(WElements) do
  37.                 if (v.type == "Model") then
  38.                     table.insert(wRenderOrder, 1, k)
  39.                 elseif (v.type == "Sprite") then
  40.                     table.insert(wRenderOrder, k)
  41.                 end
  42.             end
  43.  
  44.         end
  45.        
  46.         bone_ent = LocalPlayer()
  47.        
  48.         for k, name in pairs(wRenderOrder) do
  49.             local v = WElements[name]
  50.             if !v then wRenderOrder = nil break end
  51.            
  52.             local pos, ang
  53.            
  54.             if v.bone then
  55.                 pos, ang = GetBoneOrientation(WElements, v, bone_ent)
  56.             else
  57.                 pos, ang = GetBoneOrientation(WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand")
  58.             end
  59.            
  60.             if !pos then continue end
  61.            
  62.             local model = v.modelEnt
  63.             local sprite = v.spriteMaterial
  64.            
  65.             if (v.type == "Model" and IsValid(model)) then
  66.                 model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
  67.                 ang:RotateAroundAxis(ang:Up(), v.angle.y)
  68.                 ang:RotateAroundAxis(ang:Right(), v.angle.p)
  69.                 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
  70.  
  71.                 model:SetAngles(ang)
  72.                 local matrix = Matrix()
  73.                 matrix:Scale(v.size)
  74.                 model:EnableMatrix( "RenderMultiply", matrix )
  75.                
  76.                 if (v.material == "") then
  77.                     model:SetMaterial("")
  78.                 elseif (model:GetMaterial() != v.material) then
  79.                     model:SetMaterial( v.material )
  80.                 end
  81.                
  82.                 if (v.skin and v.skin != model:GetSkin()) then
  83.                     model:SetSkin(v.skin)
  84.                 end
  85.                
  86.                 if (v.bodygroup) then
  87.                     for k, v in pairs( v.bodygroup ) do
  88.                         if (model:GetBodygroup(k) != v) then
  89.                             model:SetBodygroup(k, v)
  90.                         end
  91.                     end
  92.                 end
  93.                
  94.                 if (v.surpresslightning) then
  95.                     render.SuppressEngineLighting(true)
  96.                 end
  97.                
  98.                 render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
  99.                 render.SetBlend(v.color.a/255)
  100.                 model:DrawModel()
  101.                 render.SetBlend(1)
  102.                 render.SetColorModulation(1, 1, 1)
  103.                
  104.                 if (v.surpresslightning) then
  105.                     render.SuppressEngineLighting(false)
  106.                 end
  107.             elseif (v.type == "Sprite" and sprite) then
  108.                 local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
  109.                 render.SetMaterial(sprite)
  110.                 render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
  111.             end
  112.         end
  113.        
  114.         //LocalPlayer():SetNWBool("costume_add_worldmodel", true)
  115.     end)
  116.    
  117.     function GetBoneOrientation( basetab, tab, ent, bone_override )
  118.         local bone, pos, ang
  119.         if (tab.rel and tab.rel != "") then
  120.             local v = basetab[tab.rel]
  121.            
  122.             if (!v) then return end
  123.            
  124.             pos, ang = GetBoneOrientation( basetab, v, ent )
  125.            
  126.             if (!pos) then return end
  127.            
  128.             pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
  129.             ang:RotateAroundAxis(ang:Up(), v.angle.y)
  130.             ang:RotateAroundAxis(ang:Right(), v.angle.p)
  131.             ang:RotateAroundAxis(ang:Forward(), v.angle.r)
  132.         else
  133.             bone = ent:LookupBone(bone_override or tab.bone)
  134.  
  135.             if (!bone) then return end
  136.            
  137.             pos, ang = Vector(0,0,0), Angle(0,0,0)
  138.             local m = ent:GetBoneMatrix(bone)
  139.             if (m) then
  140.                 pos, ang = m:GetTranslation(), m:GetAngles()
  141.             end
  142.            
  143.             /*if (IsValid(self.Owner) and LocalPlayer():IsPlayer() and
  144.                 ent == self.Owner:GetViewModel() and self.ViewModelFlip) then
  145.                 ang.r = -ang.r // Fixes mirrored models
  146.             end*/
  147.         end
  148.        
  149.         return pos, ang
  150.     end
  151.    
  152.     function CreateModels(tab)
  153.         if !tab then return end
  154.  
  155.         for k, v in pairs(tab) do
  156.             if (v.type == "Model" and v.model and v.model != "" and (!IsValid(v.modelEnt) or v.createdModel != v.model) and
  157.                 string.find(v.model, ".mdl") and file.Exists (v.model, "GAME")) then
  158.        
  159.                 v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
  160.                 if (IsValid(v.modelEnt)) then
  161.                     v.modelEnt:SetPos(LocalPlayer():GetPos())
  162.                     v.modelEnt:SetAngles(LocalPlayer():GetAngles())
  163.                     v.modelEnt:SetParent(LocalPlayer())
  164.                     v.modelEnt:SetNoDraw(true)
  165.                     v.createdModel = v.model
  166.                 else
  167.                     v.modelEnt = nil
  168.                 end
  169.             elseif (v.type == "Sprite" and v.sprite and v.sprite != "" and (!v.spriteMaterial or v.createdSprite != v.sprite)
  170.                 and file.Exists ("materials/"..v.sprite..".vmt", "GAME")) then
  171.                
  172.                 local name = v.sprite.."-"
  173.                 local params = { ["$basetexture"] = v.sprite }
  174.                
  175.                 local tocheck = { "nocull", "additive", "vertexalpha", "vertexcolor", "ignorez" }
  176.                 for i, j in pairs( tocheck ) do
  177.                     if (v[j]) then
  178.                         params["$"..j] = 1
  179.                         name = name.."1"
  180.                     else
  181.                         name = name.."0"
  182.                     end
  183.                 end
  184.  
  185.                 v.createdSprite = v.sprite
  186.                 v.spriteMaterial = CreateMaterial(name,"UnlitGeneric",params)
  187.             end
  188.         end
  189.     end
  190.  
  191.     function tableFullCopy( tab )
  192.         if (!tab) then return nil end
  193.        
  194.         local res = {}
  195.        
  196.         for k, v in pairs( tab ) do
  197.             if (type(v) == "table") then
  198.                 res[k] = table.FullCopy(v) // recursion ho!
  199.             elseif (type(v) == "Vector") then
  200.                 res[k] = Vector(v.x, v.y, v.z)
  201.             elseif (type(v) == "Angle") then
  202.                 res[k] = Angle(v.p, v.y, v.r)
  203.             else
  204.                 res[k] = v
  205.             end
  206.         end
  207.        
  208.         return res
  209.     end
  210. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement