Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local boneList = {
- "ValveBiped.Bip01_Pelvis",
- "ValveBiped.Bip01_Spine",
- "ValveBiped.Bip01_Spine1",
- "ValveBiped.Bip01_Spine2",
- "ValveBiped.Bip01_Spine4",
- "ValveBiped.Bip01_Neck1",
- "ValveBiped.Bip01_Head1",
- "ValveBiped.Bip01_R_Clavicle",
- "ValveBiped.Bip01_R_UpperArm",
- "ValveBiped.Bip01_R_Forearm",
- "ValveBiped.Bip01_R_Hand",
- "ValveBiped.Bip01_L_Clavicle",
- "ValveBiped.Bip01_L_UpperArm",
- "ValveBiped.Bip01_L_Forearm",
- "ValveBiped.Bip01_L_Hand",
- "ValveBiped.Bip01_R_Thigh",
- "ValveBiped.Bip01_R_Calf",
- "ValveBiped.Bip01_R_Foot",
- "ValveBiped.Bip01_R_Toe0",
- "ValveBiped.Bip01_L_Thigh",
- "ValveBiped.Bip01_L_Calf",
- "ValveBiped.Bip01_L_Foot",
- "ValveBiped.Bip01_L_Toe0"
- }
- FemaleModel = Model("models/player/Humans/Group01/Female_01.mdl")
- FemaleIdle = "LineIdle01"
- MaleModel = Model("models/player/Humans/Group01/male_07.mdl")
- MaleIdle = "LineIdle01"
- local VectorOffset = Vector(0,0,0)
- local AngleOffset = Angle(0,0,0)
- local sliders
- local gender = "Male"
- local parentBone = "ValveBiped.Bip01_Pelvis"
- local ArmorCam = Vector(0,0,0)
- local selectedIndex = -1
- offsets = {
- Male = {},
- Female = {}
- }
- local function Pressed(s)
- sliders:OnIndexSelected(s.Index)
- end
- local function RemoveInstance(ind)
- sliders.instanceList:Clear()
- offsets[gender][ind].VisualModel:Remove()
- table.remove(offsets[gender],ind)
- for index,model in pairs(offsets[gender]) do
- local instButt = sliders.instanceList:AddItem("Model "..index)
- instButt.Model = model
- instButt.Index = index
- instButt.DoClick = function() Pressed(instButt) end
- end
- end
- local function ClearItems()
- sliders.instanceList:Clear()
- for i,v in pairs(offsets[gender]) do
- if ValidEntity(v.VisualModel) then v.VisualModel:Remove() end
- end
- end
- local bufrTable
- function CopyItems()
- local t = {}
- for i,v in ipairs(offsets[gender]) do
- PrintTable(v)
- local ang = Angle(v.AngleOffset.pitch,v.AngleOffset.yaw,v.AngleOffset.roll)
- print(ang,v.AngleOffset.pitch,v.AngleOffset.yaw,v.AngleOffset.roll)
- local vec = Vector(v.VectorOffset.x,v.VectorOffset.y,v.VectorOffset.z)
- local t2 = {ParentBone = v.ParentBone,VectorOffset = vec,AngleOffset = ang,Model = v.Model,Scale = v.Scale}
- table.insert(t,t2)
- end
- bufrTable = t
- print("Buffered Table")
- PrintTable(t)
- end
- function PasteItems()
- offsets[gender] = bufrTable
- sliders.instanceList:Clear()
- for i,v in pairs(offsets[gender]) do
- local mdlPath = v.Model
- local mdl = ClientsideModel(mdlPath,RENDERGROUP_OPAQUE)
- offsets[gender][i].VisualModel = mdl
- local id = i
- local instButt = sliders.instanceList:AddItem("Instance "..id)
- instButt.Model = mdl
- instButt.Index = id
- instButt.DoClick = function() Pressed(instButt) end
- end
- bufrTable = nil
- end
- local function UpdateDoll()
- for i,Value in pairs(offsets[gender]) do
- local CachedBoneID = g_Doll:LookupBone(Value.ParentBone)
- if CachedBoneID != -1 && ValidEntity(Value.VisualModel) then
- local matrix = g_Doll:GetBoneMatrix(CachedBoneID)
- local vOff = Value.VectorOffset or Vector(0,0,0)
- local aOff = Value.AngleOffset or Angle(0,0,0)
- matrix:Rotate(aOff)
- matrix:Translate(vOff)
- Value.VisualModel:SetPos(matrix:GetTranslation())
- Value.VisualModel:SetAngles(matrix:GetAngle())
- if Value.Scale then
- Value.VisualModel:SetModelScale(Vector(Value.Scale or 1,Value.Scale or 1,Value.Scale or 1))
- end
- Value.VisualModel:DrawModel()
- end
- end
- end
- function ArmorEditorOn()
- if ValidPanel(sliders) then
- sliders:Remove()
- end
- sliders = vgui.Create("ArmorInfo")
- hook.Add("CalcView","ArmorEditor",ArmorEditorView)
- hook.Add("CreateMove","StopMovement",function(cmd) cmd:SetSideMove(0) cmd:SetUpMove(0) cmd:SetForwardMove(0) end)
- g_Doll = ClientsideModel(string.gsub(MaleModel,"/Humans/","/"),RENDERGROUP_OPAQUE)
- g_Doll:SetPos(LocalPlayer():GetPos()+LocalPlayer():GetRight()*60)
- ArmorCam = g_Doll:GetPos()+g_Doll:GetForward()*100
- hook.Add("PreDrawOpaqueRenderables","UpdateDoll",UpdateDoll)
- gui.EnableScreenClicker(true)
- offsets = {
- Male = {},
- Female = {}
- }
- end
- concommand.Add("makearmor",ArmorEditorOn)
- function ArmorEditorOff()
- sliders:Remove()
- hook.Remove("CalcView","ArmorEditor")
- hook.Remove("Think","UpdateDoll")
- hook.Remove("CreateMove","StopMovement")
- g_Doll:Remove()
- ClearItems()
- end
- concommand.Add("stoparmor",ArmorEditorOn)
- function ArmorEditorView(pl,origin,angles,fov)
- local amt = 200*FrameTime()
- if input.IsKeyDown(KEY_LSHIFT) then
- amt = 1000*FrameTime()
- elseif input.IsKeyDown(KEY_LCONTROL) then
- amt = 20*FrameTime()
- end
- if input.IsKeyDown(KEY_W) then
- ArmorCam = ArmorCam+LocalPlayer():GetAimVector()*amt
- end
- if input.IsKeyDown(KEY_S) then
- ArmorCam = ArmorCam+LocalPlayer():GetAimVector()*-amt
- end
- if input.IsKeyDown(KEY_A) then
- ArmorCam = ArmorCam+LocalPlayer():GetRight()*-amt
- end
- if input.IsKeyDown(KEY_D) then
- ArmorCam = ArmorCam+LocalPlayer():GetRight()*amt
- end
- local t = {}
- t.origin = ArmorCam
- t.angles = angles
- return t
- end
- local SLIDERS = {}
- function SLIDERS:Init()
- self:SetTitle("Armor Editor")
- self:SetSize(200,ScrH())
- self.Form = vgui.Create("DForm",self)
- self.Form:SetWide(190)
- self.Form:SetPos(5,25)
- self.Form:SetName("Armor Editor!")
- self.itemList = self.Form:ComboBox("Visual Models")
- self.itemList:SetMultiple(false)
- self.itemList:SetTall(100)
- for i,v in pairs(items.GetAll()) do
- if v.EquipAt then
- local box = self.itemList:AddItem(v.Name)
- box.DoClick = function() self:SetItem(v.ArmorPos) end
- end
- end
- self.bones = self.Form:MultiChoice("Parent Bone")
- self.bones:SetEditable(false)
- self.bones:SetText(parentBone)
- self.bones.OnSelect = function(s,i,val,d) self:SetParentBone(val) end
- for i,v in pairs(boneList) do
- self.bones:AddChoice(v)
- end
- self.gender = self.Form:MultiChoice("Gender")
- self.gender:SetEditable(false)
- self.gender:SetText(gender)
- self.gender.OnSelect = function(s,i,val,d) self:SetGender(val) end
- self.gender:AddChoice("Male")
- self.gender:AddChoice("Female")
- self.instanceList = self.Form:ComboBox("Item")
- self.instanceList:SetMultiple(false)
- self.instanceList:SetTall(100)
- self.AddInstance = self.Form:Button("Add Visual Model")
- self.AddInstance.DoClick = function()
- Derma_StringRequest( "Add Visual Model",
- "Paste a Model Path",
- "",
- function( strTextOut ) AddVisualInstance(strTextOut) end,
- function( strTextOut ) end,
- "Add",
- "Cancel" )
- end
- self.RemoveInstance = self.Form:Button("Remove Selected Model")
- self.RemoveInstance.DoClick = function() RemoveInstance(selectedIndex) end
- self.MU = self.Form:NumSlider("Translate UP", nil, -100, 100, 0 )
- self.MU.OnValueChanged = function(s,v) self:OnSliderChanged("MU",v) end
- self.MU.Label:SetTextColor(Color(0,0,255,255))
- self.MU:SetDecimals(1)
- self.MR = self.Form:NumSlider("Translate RIGHT", nil, -100, 100, 0 )
- self.MR.OnValueChanged = function(s,v) self:OnSliderChanged("MR",v) end
- self.MR.Label:SetTextColor(Color(255,0,0,255))
- self.MR:SetDecimals(1)
- self.MF = self.Form:NumSlider("Translate FORWARD", nil, -100, 100, 0 )
- self.MF.OnValueChanged = function(s,v) self:OnSliderChanged("MF",v) end
- self.MF.Label:SetTextColor(Color(0,255,0,255))
- self.MF:SetDecimals(1)
- self.RU = self.Form:NumSlider("Rotate UP", nil, -360, 360, 0 )
- self.RU.OnValueChanged = function(s,v) self:OnSliderChanged("RU",v) end
- self.RU.Label:SetTextColor(Color(0,0,255,255))
- self.RU:SetDecimals(1)
- self.RR = self.Form:NumSlider("Rotate RIGHT", nil, -360, 360, 0 )
- self.RR.OnValueChanged = function(s,v) self:OnSliderChanged("RR",v) end
- self.RR.Label:SetTextColor(Color(255,0,0,255))
- self.RR:SetDecimals(1)
- self.RF = self.Form:NumSlider("Rotate FORWARD", nil, -360, 360, 0 )
- self.RF.OnValueChanged = function(s,v) self:OnSliderChanged("RF",v) end
- self.RF.Label:SetTextColor(Color(0,255,0,255))
- self.RF:SetDecimals(1)
- self.Scale = self.Form:NumSlider("Model Scale", nil, 0.1, 4, 0 )
- self.Scale.OnValueChanged = function(s,v) self:OnSliderChanged("Scale",v) end
- self.Scale.Label:SetTextColor(Color(0,255,0,255))
- self.Scale:SetDecimals(1)
- self.dump = self.Form:Button("Dump Code to Clipboard!")
- self.dump.DoClick = function() self:Dump() end
- end
- local noChange = false
- function SLIDERS:OnSliderChanged(moveType,value)
- if !offsets[gender][selectedIndex] then return end
- if moveType == "MU" then
- VectorOffset.z = value
- elseif moveType == "MR" then
- VectorOffset.x = value
- elseif moveType == "MF" then
- VectorOffset.y = value
- elseif moveType == "RF" then
- AngleOffset.roll = value
- elseif moveType == "RU" then
- AngleOffset.yaw = value
- elseif moveType == "RR" then
- AngleOffset.pitch = value
- elseif moveType == "Scale" then
- offsets[gender][selectedIndex].Scale = value
- end
- if noChange then return end
- offsets[gender][selectedIndex].VectorOffset = Vector(VectorOffset.x,VectorOffset.y,VectorOffset.z)
- offsets[gender][selectedIndex].AngleOffset = Angle(AngleOffset.pitch,AngleOffset.yaw,AngleOffset.roll)
- end
- function SLIDERS:Close()
- ArmorEditorOff()
- end
- function SLIDERS:SetItem(equipmentPos)
- ClearItems()
- if equipmentPos then
- offsets = table.Copy(equipmentPos)
- end
- end
- function SLIDERS:SetGender(g)
- CopyItems()
- ClearItems()
- gender = g
- g_Doll:SetModel(string.gsub(_G[gender.."Model"],"/Humans/","/"))
- PasteItems()
- end
- function SLIDERS:SetParentBone(b)
- if !offsets[gender][selectedIndex] then return end
- print(b)
- parentBone = b
- offsets[gender][selectedIndex].ParentBone = parentBone
- end
- function SLIDERS:Dump()
- local str = "ITEM.ArmorPos = {\r\n"
- str = str .. "\tMale = {\r\n"
- local num = 1
- for instIndex,instData in pairs(offsets.Male) do
- local x,y,z = 0,0,0
- local pitch,yaw,roll = 0,0,0
- local scale = 1
- local comma = ","
- if num >= table.Count(offsets.Male) then comma = "" end
- if instData.VectorOffset then
- x,y,z = instData.VectorOffset.x,instData.VectorOffset.y,instData.VectorOffset.z
- end
- if instData.AngleOffset then
- pitch,yaw,roll = instData.AngleOffset.pitch,instData.AngleOffset.yaw,instData.AngleOffset.roll
- end
- if instData.Scale then
- scale = instData.Scale
- end
- str = str .."{ParentBone = \""..instData.ParentBone.."\",VectorOffset = Vector("..x..","..y..","..z.."),AngleOffset = Angle("..pitch..","..yaw..","..roll.."),Scale = Vector("..scale..","..scale..","..scale.."), Model = \""..instData.Model.."\"}"..comma
- num = num + 1
- end
- str = str .. "\t},\r\n"
- str = str .. "\tFemale = {\r\n"
- local num = 1
- for instIndex,instData in pairs(offsets.Female) do
- local x,y,z = 0,0,0
- local pitch,yaw,roll = 0,0,0
- local scale = 1
- local comma = ","
- if num >= table.Count(offsets.Female) then comma = "" end
- if instData.VectorOffset then
- x,y,z = instData.VectorOffset.x,instData.VectorOffset.y,instData.VectorOffset.z
- end
- if instData.AngleOffset then
- pitch,yaw,roll = instData.AngleOffset.pitch,instData.AngleOffset.yaw,instData.AngleOffset.roll
- end
- if instData.Scale then
- scale = instData.Scale
- end
- str = str .."{ParentBone = \""..instData.ParentBone.."\",VectorOffset = Vector("..x..","..y..","..z.."),AngleOffset = Angle("..pitch..","..yaw..","..roll.."),Scale = Vector("..scale..","..scale..","..scale.."),Model = \""..instData.Model.."\"}"..comma
- num = num + 1
- end
- str = str .. "\t}\r\n"
- str = str .."}"
- SetClipboardText(str)
- end
- function SLIDERS:OnIndexSelected(index)
- selectedIndex = index
- noChange = true
- self.MU:SetValue(offsets[gender][index].VectorOffset.z)
- self.MR:SetValue(offsets[gender][index].VectorOffset.x)
- self.MF:SetValue(offsets[gender][index].VectorOffset.y)
- self.RU:SetValue(offsets[gender][index].AngleOffset.yaw)
- self.RR:SetValue(offsets[gender][index].AngleOffset.pitch)
- self.Scale:SetValue(offsets[gender][index].Scale or 1)
- noChange = false
- self.RF:SetValue(offsets[gender][index].AngleOffset.roll)
- self.bones.TextEntry:SetValue(offsets[gender][index].ParentBone)
- end
- vgui.Register("ArmorInfo",SLIDERS,"DFrame")
- function AddVisualInstance(mdlPath)
- --if !util.IsValidModel(mdlPath) then ErrorNoHalt("Model Not Valid") return end
- local mdl = ClientsideModel(mdlPath,RENDERGROUP_OPAQUE)
- local t = {ParentBone = parentBone,VectorOffset = Vector(0,0,0),AngleOffset = Angle(0,0,0),Model = mdlPath,VisualModel = mdl}
- local id = table.insert(offsets[gender],t)
- local instButt = sliders.instanceList:AddItem("Model "..id)
- instButt.Model = mdl
- instButt.Index = id
- instButt.DoClick = function() Pressed(instButt) end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement