Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.56 KB | None | 0 0
  1. local boneList = {
  2. "ValveBiped.Bip01_Pelvis",
  3. "ValveBiped.Bip01_Spine",
  4. "ValveBiped.Bip01_Spine1",
  5. "ValveBiped.Bip01_Spine2",
  6. "ValveBiped.Bip01_Spine4",
  7. "ValveBiped.Bip01_Neck1",
  8. "ValveBiped.Bip01_Head1",
  9. "ValveBiped.Bip01_R_Clavicle",
  10. "ValveBiped.Bip01_R_UpperArm",
  11. "ValveBiped.Bip01_R_Forearm",
  12. "ValveBiped.Bip01_R_Hand",
  13. "ValveBiped.Bip01_L_Clavicle",
  14. "ValveBiped.Bip01_L_UpperArm",
  15. "ValveBiped.Bip01_L_Forearm",
  16. "ValveBiped.Bip01_L_Hand",
  17. "ValveBiped.Bip01_R_Thigh",
  18. "ValveBiped.Bip01_R_Calf",
  19. "ValveBiped.Bip01_R_Foot",
  20. "ValveBiped.Bip01_R_Toe0",
  21. "ValveBiped.Bip01_L_Thigh",
  22. "ValveBiped.Bip01_L_Calf",
  23. "ValveBiped.Bip01_L_Foot",
  24. "ValveBiped.Bip01_L_Toe0"
  25. }
  26.  
  27. FemaleModel = Model("models/player/Humans/Group01/Female_01.mdl")
  28. FemaleIdle = "LineIdle01"
  29. MaleModel = Model("models/player/Humans/Group01/male_07.mdl")
  30. MaleIdle = "LineIdle01"
  31.  
  32. local VectorOffset = Vector(0,0,0)
  33. local AngleOffset = Angle(0,0,0)
  34.  
  35. local sliders
  36. local gender = "Male"
  37. local parentBone = "ValveBiped.Bip01_Pelvis"
  38. local ArmorCam = Vector(0,0,0)
  39. local selectedIndex = -1
  40. offsets = {
  41. Male = {},
  42. Female = {}
  43. }
  44.  
  45.  
  46. local function Pressed(s)
  47.  
  48. sliders:OnIndexSelected(s.Index)
  49.  
  50. end
  51.  
  52. local function RemoveInstance(ind)
  53.  
  54. sliders.instanceList:Clear()
  55. offsets[gender][ind].VisualModel:Remove()
  56. table.remove(offsets[gender],ind)
  57. for index,model in pairs(offsets[gender]) do
  58. local instButt = sliders.instanceList:AddItem("Model "..index)
  59. instButt.Model = model
  60. instButt.Index = index
  61. instButt.DoClick = function() Pressed(instButt) end
  62. end
  63. end
  64.  
  65. local function ClearItems()
  66.  
  67. sliders.instanceList:Clear()
  68. for i,v in pairs(offsets[gender]) do
  69. if ValidEntity(v.VisualModel) then v.VisualModel:Remove() end
  70. end
  71.  
  72. end
  73.  
  74. local bufrTable
  75. function CopyItems()
  76. local t = {}
  77.  
  78.  
  79. for i,v in ipairs(offsets[gender]) do
  80. PrintTable(v)
  81. local ang = Angle(v.AngleOffset.pitch,v.AngleOffset.yaw,v.AngleOffset.roll)
  82. print(ang,v.AngleOffset.pitch,v.AngleOffset.yaw,v.AngleOffset.roll)
  83. local vec = Vector(v.VectorOffset.x,v.VectorOffset.y,v.VectorOffset.z)
  84. local t2 = {ParentBone = v.ParentBone,VectorOffset = vec,AngleOffset = ang,Model = v.Model,Scale = v.Scale}
  85. table.insert(t,t2)
  86. end
  87. bufrTable = t
  88. print("Buffered Table")
  89. PrintTable(t)
  90. end
  91. function PasteItems()
  92. offsets[gender] = bufrTable
  93. sliders.instanceList:Clear()
  94. for i,v in pairs(offsets[gender]) do
  95. local mdlPath = v.Model
  96. local mdl = ClientsideModel(mdlPath,RENDERGROUP_OPAQUE)
  97.  
  98. offsets[gender][i].VisualModel = mdl
  99. local id = i
  100.  
  101. local instButt = sliders.instanceList:AddItem("Instance "..id)
  102. instButt.Model = mdl
  103. instButt.Index = id
  104. instButt.DoClick = function() Pressed(instButt) end
  105. end
  106. bufrTable = nil
  107. end
  108.  
  109.  
  110.  
  111. local function UpdateDoll()
  112.  
  113.  
  114. for i,Value in pairs(offsets[gender]) do
  115. local CachedBoneID = g_Doll:LookupBone(Value.ParentBone)
  116. if CachedBoneID != -1 && ValidEntity(Value.VisualModel) then
  117. local matrix = g_Doll:GetBoneMatrix(CachedBoneID)
  118.  
  119.  
  120. local vOff = Value.VectorOffset or Vector(0,0,0)
  121. local aOff = Value.AngleOffset or Angle(0,0,0)
  122. matrix:Rotate(aOff)
  123. matrix:Translate(vOff)
  124.  
  125. Value.VisualModel:SetPos(matrix:GetTranslation())
  126. Value.VisualModel:SetAngles(matrix:GetAngle())
  127. if Value.Scale then
  128. Value.VisualModel:SetModelScale(Vector(Value.Scale or 1,Value.Scale or 1,Value.Scale or 1))
  129. end
  130. Value.VisualModel:DrawModel()
  131. end
  132. end
  133. end
  134.  
  135. function ArmorEditorOn()
  136.  
  137. if ValidPanel(sliders) then
  138. sliders:Remove()
  139. end
  140.  
  141. sliders = vgui.Create("ArmorInfo")
  142. hook.Add("CalcView","ArmorEditor",ArmorEditorView)
  143. hook.Add("CreateMove","StopMovement",function(cmd) cmd:SetSideMove(0) cmd:SetUpMove(0) cmd:SetForwardMove(0) end)
  144. g_Doll = ClientsideModel(string.gsub(MaleModel,"/Humans/","/"),RENDERGROUP_OPAQUE)
  145. g_Doll:SetPos(LocalPlayer():GetPos()+LocalPlayer():GetRight()*60)
  146. ArmorCam = g_Doll:GetPos()+g_Doll:GetForward()*100
  147. hook.Add("PreDrawOpaqueRenderables","UpdateDoll",UpdateDoll)
  148. gui.EnableScreenClicker(true)
  149. offsets = {
  150. Male = {},
  151. Female = {}
  152. }
  153. end
  154. concommand.Add("makearmor",ArmorEditorOn)
  155.  
  156. function ArmorEditorOff()
  157.  
  158. sliders:Remove()
  159.  
  160. hook.Remove("CalcView","ArmorEditor")
  161. hook.Remove("Think","UpdateDoll")
  162. hook.Remove("CreateMove","StopMovement")
  163. g_Doll:Remove()
  164. ClearItems()
  165. end
  166. concommand.Add("stoparmor",ArmorEditorOn)
  167.  
  168. function ArmorEditorView(pl,origin,angles,fov)
  169.  
  170. local amt = 200*FrameTime()
  171. if input.IsKeyDown(KEY_LSHIFT) then
  172. amt = 1000*FrameTime()
  173. elseif input.IsKeyDown(KEY_LCONTROL) then
  174. amt = 20*FrameTime()
  175. end
  176.  
  177. if input.IsKeyDown(KEY_W) then
  178. ArmorCam = ArmorCam+LocalPlayer():GetAimVector()*amt
  179. end
  180. if input.IsKeyDown(KEY_S) then
  181. ArmorCam = ArmorCam+LocalPlayer():GetAimVector()*-amt
  182. end
  183. if input.IsKeyDown(KEY_A) then
  184. ArmorCam = ArmorCam+LocalPlayer():GetRight()*-amt
  185. end
  186. if input.IsKeyDown(KEY_D) then
  187. ArmorCam = ArmorCam+LocalPlayer():GetRight()*amt
  188. end
  189.  
  190. local t = {}
  191. t.origin = ArmorCam
  192. t.angles = angles
  193.  
  194. return t
  195.  
  196. end
  197. local SLIDERS = {}
  198. function SLIDERS:Init()
  199. self:SetTitle("Armor Editor")
  200. self:SetSize(200,ScrH())
  201. self.Form = vgui.Create("DForm",self)
  202. self.Form:SetWide(190)
  203. self.Form:SetPos(5,25)
  204. self.Form:SetName("Armor Editor!")
  205.  
  206. self.itemList = self.Form:ComboBox("Visual Models")
  207. self.itemList:SetMultiple(false)
  208. self.itemList:SetTall(100)
  209. for i,v in pairs(items.GetAll()) do
  210. if v.EquipAt then
  211. local box = self.itemList:AddItem(v.Name)
  212. box.DoClick = function() self:SetItem(v.ArmorPos) end
  213. end
  214. end
  215.  
  216.  
  217. self.bones = self.Form:MultiChoice("Parent Bone")
  218. self.bones:SetEditable(false)
  219. self.bones:SetText(parentBone)
  220. self.bones.OnSelect = function(s,i,val,d) self:SetParentBone(val) end
  221.  
  222. for i,v in pairs(boneList) do
  223. self.bones:AddChoice(v)
  224. end
  225.  
  226. self.gender = self.Form:MultiChoice("Gender")
  227. self.gender:SetEditable(false)
  228. self.gender:SetText(gender)
  229. self.gender.OnSelect = function(s,i,val,d) self:SetGender(val) end
  230. self.gender:AddChoice("Male")
  231. self.gender:AddChoice("Female")
  232.  
  233. self.instanceList = self.Form:ComboBox("Item")
  234. self.instanceList:SetMultiple(false)
  235. self.instanceList:SetTall(100)
  236.  
  237. self.AddInstance = self.Form:Button("Add Visual Model")
  238. self.AddInstance.DoClick = function()
  239.  
  240. Derma_StringRequest( "Add Visual Model",
  241. "Paste a Model Path",
  242. "",
  243. function( strTextOut ) AddVisualInstance(strTextOut) end,
  244. function( strTextOut ) end,
  245. "Add",
  246. "Cancel" )
  247. end
  248.  
  249. self.RemoveInstance = self.Form:Button("Remove Selected Model")
  250. self.RemoveInstance.DoClick = function() RemoveInstance(selectedIndex) end
  251.  
  252. self.MU = self.Form:NumSlider("Translate UP", nil, -100, 100, 0 )
  253. self.MU.OnValueChanged = function(s,v) self:OnSliderChanged("MU",v) end
  254. self.MU.Label:SetTextColor(Color(0,0,255,255))
  255. self.MU:SetDecimals(1)
  256.  
  257. self.MR = self.Form:NumSlider("Translate RIGHT", nil, -100, 100, 0 )
  258. self.MR.OnValueChanged = function(s,v) self:OnSliderChanged("MR",v) end
  259. self.MR.Label:SetTextColor(Color(255,0,0,255))
  260. self.MR:SetDecimals(1)
  261.  
  262. self.MF = self.Form:NumSlider("Translate FORWARD", nil, -100, 100, 0 )
  263. self.MF.OnValueChanged = function(s,v) self:OnSliderChanged("MF",v) end
  264. self.MF.Label:SetTextColor(Color(0,255,0,255))
  265. self.MF:SetDecimals(1)
  266.  
  267. self.RU = self.Form:NumSlider("Rotate UP", nil, -360, 360, 0 )
  268. self.RU.OnValueChanged = function(s,v) self:OnSliderChanged("RU",v) end
  269. self.RU.Label:SetTextColor(Color(0,0,255,255))
  270. self.RU:SetDecimals(1)
  271.  
  272. self.RR = self.Form:NumSlider("Rotate RIGHT", nil, -360, 360, 0 )
  273. self.RR.OnValueChanged = function(s,v) self:OnSliderChanged("RR",v) end
  274. self.RR.Label:SetTextColor(Color(255,0,0,255))
  275. self.RR:SetDecimals(1)
  276.  
  277. self.RF = self.Form:NumSlider("Rotate FORWARD", nil, -360, 360, 0 )
  278. self.RF.OnValueChanged = function(s,v) self:OnSliderChanged("RF",v) end
  279. self.RF.Label:SetTextColor(Color(0,255,0,255))
  280. self.RF:SetDecimals(1)
  281.  
  282. self.Scale = self.Form:NumSlider("Model Scale", nil, 0.1, 4, 0 )
  283. self.Scale.OnValueChanged = function(s,v) self:OnSliderChanged("Scale",v) end
  284. self.Scale.Label:SetTextColor(Color(0,255,0,255))
  285. self.Scale:SetDecimals(1)
  286.  
  287. self.dump = self.Form:Button("Dump Code to Clipboard!")
  288. self.dump.DoClick = function() self:Dump() end
  289.  
  290.  
  291. end
  292. local noChange = false
  293. function SLIDERS:OnSliderChanged(moveType,value)
  294. if !offsets[gender][selectedIndex] then return end
  295. if moveType == "MU" then
  296. VectorOffset.z = value
  297. elseif moveType == "MR" then
  298. VectorOffset.x = value
  299. elseif moveType == "MF" then
  300. VectorOffset.y = value
  301. elseif moveType == "RF" then
  302. AngleOffset.roll = value
  303. elseif moveType == "RU" then
  304. AngleOffset.yaw = value
  305. elseif moveType == "RR" then
  306. AngleOffset.pitch = value
  307. elseif moveType == "Scale" then
  308. offsets[gender][selectedIndex].Scale = value
  309. end
  310. if noChange then return end
  311.  
  312. offsets[gender][selectedIndex].VectorOffset = Vector(VectorOffset.x,VectorOffset.y,VectorOffset.z)
  313. offsets[gender][selectedIndex].AngleOffset = Angle(AngleOffset.pitch,AngleOffset.yaw,AngleOffset.roll)
  314.  
  315.  
  316. end
  317. function SLIDERS:Close()
  318. ArmorEditorOff()
  319. end
  320. function SLIDERS:SetItem(equipmentPos)
  321. ClearItems()
  322.  
  323. if equipmentPos then
  324.  
  325. offsets = table.Copy(equipmentPos)
  326. end
  327.  
  328.  
  329. end
  330. function SLIDERS:SetGender(g)
  331. CopyItems()
  332. ClearItems()
  333.  
  334. gender = g
  335. g_Doll:SetModel(string.gsub(_G[gender.."Model"],"/Humans/","/"))
  336. PasteItems()
  337. end
  338.  
  339. function SLIDERS:SetParentBone(b)
  340. if !offsets[gender][selectedIndex] then return end
  341. print(b)
  342. parentBone = b
  343. offsets[gender][selectedIndex].ParentBone = parentBone
  344. end
  345.  
  346.  
  347. function SLIDERS:Dump()
  348.  
  349. local str = "ITEM.ArmorPos = {\r\n"
  350. str = str .. "\tMale = {\r\n"
  351.  
  352.  
  353. local num = 1
  354. for instIndex,instData in pairs(offsets.Male) do
  355.  
  356. local x,y,z = 0,0,0
  357. local pitch,yaw,roll = 0,0,0
  358. local scale = 1
  359. local comma = ","
  360. if num >= table.Count(offsets.Male) then comma = "" end
  361. if instData.VectorOffset then
  362. x,y,z = instData.VectorOffset.x,instData.VectorOffset.y,instData.VectorOffset.z
  363. end
  364. if instData.AngleOffset then
  365. pitch,yaw,roll = instData.AngleOffset.pitch,instData.AngleOffset.yaw,instData.AngleOffset.roll
  366. end
  367. if instData.Scale then
  368. scale = instData.Scale
  369. end
  370. str = str .."{ParentBone = \""..instData.ParentBone.."\",VectorOffset = Vector("..x..","..y..","..z.."),AngleOffset = Angle("..pitch..","..yaw..","..roll.."),Scale = Vector("..scale..","..scale..","..scale.."), Model = \""..instData.Model.."\"}"..comma
  371. num = num + 1
  372. end
  373. str = str .. "\t},\r\n"
  374. str = str .. "\tFemale = {\r\n"
  375. local num = 1
  376. for instIndex,instData in pairs(offsets.Female) do
  377.  
  378. local x,y,z = 0,0,0
  379. local pitch,yaw,roll = 0,0,0
  380. local scale = 1
  381. local comma = ","
  382. if num >= table.Count(offsets.Female) then comma = "" end
  383. if instData.VectorOffset then
  384. x,y,z = instData.VectorOffset.x,instData.VectorOffset.y,instData.VectorOffset.z
  385. end
  386. if instData.AngleOffset then
  387. pitch,yaw,roll = instData.AngleOffset.pitch,instData.AngleOffset.yaw,instData.AngleOffset.roll
  388. end
  389. if instData.Scale then
  390. scale = instData.Scale
  391. end
  392. str = str .."{ParentBone = \""..instData.ParentBone.."\",VectorOffset = Vector("..x..","..y..","..z.."),AngleOffset = Angle("..pitch..","..yaw..","..roll.."),Scale = Vector("..scale..","..scale..","..scale.."),Model = \""..instData.Model.."\"}"..comma
  393. num = num + 1
  394. end
  395.  
  396.  
  397. str = str .. "\t}\r\n"
  398. str = str .."}"
  399. SetClipboardText(str)
  400. end
  401. function SLIDERS:OnIndexSelected(index)
  402.  
  403. selectedIndex = index
  404. noChange = true
  405. self.MU:SetValue(offsets[gender][index].VectorOffset.z)
  406. self.MR:SetValue(offsets[gender][index].VectorOffset.x)
  407. self.MF:SetValue(offsets[gender][index].VectorOffset.y)
  408. self.RU:SetValue(offsets[gender][index].AngleOffset.yaw)
  409. self.RR:SetValue(offsets[gender][index].AngleOffset.pitch)
  410. self.Scale:SetValue(offsets[gender][index].Scale or 1)
  411. noChange = false
  412. self.RF:SetValue(offsets[gender][index].AngleOffset.roll)
  413. self.bones.TextEntry:SetValue(offsets[gender][index].ParentBone)
  414.  
  415. end
  416. vgui.Register("ArmorInfo",SLIDERS,"DFrame")
  417.  
  418.  
  419.  
  420.  
  421. function AddVisualInstance(mdlPath)
  422. --if !util.IsValidModel(mdlPath) then ErrorNoHalt("Model Not Valid") return end
  423.  
  424. local mdl = ClientsideModel(mdlPath,RENDERGROUP_OPAQUE)
  425.  
  426. local t = {ParentBone = parentBone,VectorOffset = Vector(0,0,0),AngleOffset = Angle(0,0,0),Model = mdlPath,VisualModel = mdl}
  427. local id = table.insert(offsets[gender],t)
  428.  
  429. local instButt = sliders.instanceList:AddItem("Model "..id)
  430. instButt.Model = mdl
  431.  
  432.  
  433.  
  434. instButt.Index = id
  435. instButt.DoClick = function() Pressed(instButt) end
  436. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement