Advertisement
coderboy

Compact Serilizer

Oct 29th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.26 KB | None | 0 0
  1. local varc = {}
  2.  
  3. function round(num, places)
  4. local x = num * (10*places)
  5. local r = math.floor(x)
  6. local z = r / (10*places)
  7. return z
  8. end
  9.  
  10. function varc.decode(var)
  11. local vartype = typeof(var):lower()
  12. local result = {
  13. type=vartype,
  14. value=var
  15. }
  16. if (vartype==("vector2"):lower()) then
  17. result.value = {
  18. X=var.X,
  19. Y=var.Y,
  20. }
  21. elseif (vartype==("vector3"):lower()) then
  22. result.value = {
  23. X=var.X,
  24. Y=var.Y,
  25. Z=var.Z,
  26. }
  27. if result.value["X"]==nil then
  28. result.value["X"]=0
  29. end
  30. if result.value["Y"]==nil then
  31. result.value["Y"]=0
  32. end
  33. if result.value["Z"]==nil then
  34. result.value["Z"]=0
  35. end
  36.  
  37. elseif (vartype==("cframe"):lower()) then
  38. local x,y,z,R00,R01,R02,R10,R11,R12,R20,R21,R22 = var:GetComponents()
  39. result.value = {
  40. x=x,
  41. y=y,
  42. z=z,
  43. R00=R00,
  44. R01=R01,
  45. R02=R02,
  46. R10=R10,
  47. R11=R11,
  48. R12=R12,
  49. R20=R20,
  50. R21=R21,
  51. R22=R22,
  52. }
  53. elseif (vartype==("enumitem"):lower()) then
  54. result.value = var.Name
  55. elseif (vartype==("instance"):lower()) then
  56. print("ADD OBJECT TO STACK")
  57. elseif (vartype==("faces"):lower()) then
  58. result.value={
  59. top=var.Top,
  60. bottom=var.Bottom,
  61. left=var.Left,
  62. right=var.Right,
  63. front=var.Front,
  64. back=var.Back
  65. }
  66. elseif (vartype==("color3"):lower()) then
  67.  
  68. result.value={
  69. r=var.r,
  70. g=var.g,
  71. b=var.b
  72. }
  73. elseif (vartype==("brickcolor"):lower()) then
  74. result.value = {
  75. r=var.r,
  76. g=var.g,
  77. b=var.b
  78. }
  79. elseif (vartype==("UDim2"):lower()) then
  80. result.value = {
  81. X={
  82. offset=var.X.Offset,
  83. scale=var.X.Scale,
  84. },
  85. Y={
  86. offset=var.Y.Offset,
  87. scale=var.Y.Scale
  88. },
  89. }
  90. end
  91.  
  92.  
  93. return result
  94. end
  95.  
  96. --//------------------------//--
  97.  
  98. function varc.encode(what)
  99. local vartype = what.type:lower()
  100. local result = what.value
  101. if (vartype=="string" or vartype=="number" or vartype=="boolean") then
  102. -- Nothing needs done
  103. elseif (vartype=="vector2") then
  104. result = Vector2.new(result.X, result.Y)
  105. elseif (vartype=="vector3") then
  106. result=Vector3.new(result.X,result.Y,result.Z)
  107. elseif (vartype=="cframe") then
  108. result=CFrame.new(result.x,result.y,result.z,result.R00,result.R01,result.R02,result.R10,result.R11,result.R12,result.R20,result.R21,result.R22)
  109. elseif (vartype=="enumitem") then
  110. --// Do I do anything?
  111. elseif (vartype=="instance") then
  112. result = nil --// for now
  113. elseif (vartype=="faces") then
  114. result = Faces.new(result.top, result.bottom, result.left, result.right, result.front, result.back)
  115. elseif (vartype=="color3") then
  116. result = Color3.new(result.r, result.g, result.b)
  117. elseif vartype=="brickcolor" then
  118. result=BrickColor.new(Color3.fromRGB(result.r, result.g, result.b))
  119. elseif vartype=="udim2" then
  120. result=UDim2.new(result.X.scale, result.X.offset, result.Y.scale, result.Y.offset)
  121. end
  122.  
  123. return result
  124. end
  125.  
  126. function attrib(obj, attribs, name)
  127. attribs[name]=nil
  128. pcall(function()
  129. attribs[name] = varc(obj[name])
  130. end)
  131. end
  132.  
  133. local props={}
  134. props[""]=function(object,attribs)
  135. attrib(object, attribs, "")
  136. end
  137. props["all"] = function(object, attribs)
  138. attrib(object, attribs, "Name")
  139. attrib(object, attribs, "ClassName")
  140. attrib(object, attribs, "Archivable")
  141. attribs["type"]="Instance"
  142. attribs["doBuild"]=true
  143. end
  144. props["Part"]=function(object, attribs)
  145. local function SI(name)
  146. attrib(object, attribs, name .. "ParamA")
  147. attrib(object, attribs, name .. "ParamB")
  148. attrib(object, attribs, name .. "SurfaceInput")
  149. end
  150.  
  151. attrib(object, attribs, "Size")
  152. --attrib(object, attribs, "BrickColor")
  153. attrib(object, attribs, "Color")
  154. attrib(object, attribs, "Material")
  155. attrib(object, attribs, "Reflectance")
  156. attrib(object, attribs, "Transparency")
  157. attrib(object, attribs, "Orientation")
  158. --attrib(object, attribs, "Position")
  159. attrib(object, attribs, "CFrame")
  160. attrib(object, attribs, "RotVelocity")
  161. attrib(object, attribs, "Velocity")
  162. attrib(object, attribs, "Anchored")
  163. attrib(object, attribs, "CanCollide")
  164. attrib(object, attribs, "CollisionGroupId")
  165. attrib(object, attribs, "Locked")
  166. --attrib(object, attribs, "ResizeableFaces")
  167. --attrib(object, attribs, "ResizeIncrement")
  168. attrib(object, attribs, "CustomPhysicalProperties")
  169. if (object["CustomPhysicalProperties"]) then
  170. attribs["CustomPhysicalProperties"]["Density"] = object["CustomPhysicalProperties"]["Density"]
  171. attribs["CustomPhysicalProperties"]["Friction"] = object["CustomPhysicalProperties"]["Friction"]
  172. attribs["CustomPhysicalProperties"]["Elasticity"] = object["CustomPhysicalProperties"]["Elasticity"]
  173. attribs["CustomPhysicalProperties"]["FrictionWeight"] = object["CustomPhysicalProperties"]["FrictionWeight"]
  174. attribs["CustomPhysicalProperties"]["ElasticityWeight"] = object["CustomPhysicalProperties"]["ElasticityWeight"]
  175. end
  176. if (object.ClassName ~= "VehicleSeat" and object.ClassName ~= "Seat" and object.ClassName ~= "MeshPart" and object.ClassName ~= "WedgePart") then
  177. attrib(object, attribs, "Shape")
  178. end
  179.  
  180. SI("Back")
  181. SI("Bottom")
  182. SI("Front")
  183. SI("Left")
  184. SI("Right")
  185. SI("Top")
  186.  
  187. attrib(object, attribs, "BackSurface")
  188. attrib(object, attribs, "BottomSurface")
  189. attrib(object, attribs, "FrontSurface")
  190. attrib(object, attribs, "LeftSurface")
  191. attrib(object, attribs, "RightSurface")
  192. attrib(object, attribs, "TopSurface")
  193. --script.Parent.Todo.Part.CustomPhysicalProperties.Density
  194. end
  195. props["WedgePart"]=function(object,attribs)
  196. props.Part(object, attribs)
  197. end
  198. props["Truss"]=function(object,attribs)
  199. props.Part(object, attribs)
  200. attrib(object, attribs, "Style")
  201. end
  202. props["CornerWedge"]=function(object,attribs)
  203. props.Part(object, attribs)
  204. attrib(object, attribs, "")
  205. end
  206. props["Camera"]=function(object, attribs)
  207. attrib(object, attribs, "FieldOfView")
  208. attrib(object, attribs, "HeadLocked")
  209. attrib(object, attribs, "HeadScale")
  210. --attrib(object, attribs, "NearPlaneZ")
  211. --attrib(object, attribs, "ViewportSize")
  212. attrib(object, attribs, "CameraSubject")
  213. attrib(object, attribs, "CameraSubject")
  214. attrib(object, attribs, "CameraType")
  215. end
  216. props["Sound"]=function(object,attribs)
  217. attrib(object, attribs, "EmitterSize")
  218. attrib(object, attribs, "IsLoaded")
  219. attrib(object, attribs, "IsPaused")
  220. attrib(object, attribs, "IsPlaying")
  221. attrib(object, attribs, "Looped")
  222. attrib(object, attribs, "MaxDistance")
  223. attrib(object, attribs, "PlaybackLoudness")
  224. attrib(object, attribs, "PlaybackSpeed")
  225. attrib(object, attribs, "RollOffMode")
  226. end
  227. props["BodyColors"]=function(object,attribs)
  228. local function of(name)
  229. attrib(object, attribs, (name .. "Color"))
  230. attrib(object, attribs, (name .. "Color3"))
  231. end
  232. of("Head")
  233. of("LeftArm")
  234. of("LeftLeg")
  235. of("RightArm")
  236. of("RightLeg")
  237. of("Torso")
  238. end
  239. props["Shirt"]=function(object,attribs)
  240. attrib(object, attribs, "ShirtTemplate")
  241. end
  242. props["Pants"]=function(object,attribs)
  243. attrib(object, attribs, "PantsTemplate")
  244. end
  245. props["MeshPart"]=function(object,attribs)
  246. props.Part(object, attribs)
  247. attrib(object, attribs, "MeshId")
  248. end
  249. props["ShirtGraphic"]=function(object,attribs)
  250. attrib(object, attribs, "Graphic")
  251. end
  252. props["Accessory"]=function(object,attribs)
  253. attrib(object, attribs, "AttachmentForward")
  254. attrib(object, attribs, "AttachmentPos")
  255. attrib(object, attribs, "AttachmentRight")
  256. attrib(object, attribs, "AttachmentUp")
  257. end
  258. props["AlignOrientation"]=function(object,attribs)
  259. attrib(object, attribs, "Color")
  260. attrib(object, attribs, "Visible")
  261. attrib(object, attribs, "Enabled")
  262. attrib(object, attribs, "MaxAngularVelocity")
  263. attrib(object, attribs, "MaxTorque")
  264. attrib(object, attribs, "Responsiveness")
  265. attrib(object, attribs, "PrimaryAxisOnly")
  266. attrib(object, attribs, "ReactionTorqueEnabled")
  267. attrib(object, attribs, "RigidityEnabled")
  268. attrib(object, attribs, "Attachment0")
  269. attrib(object, attribs, "Attachment1")
  270. end
  271. props["AlignPosition"]=function(object,attribs)
  272. attrib(object, attribs, "Color")
  273. attrib(object, attribs, "Visible")
  274. attrib(object, attribs, "Enabled")
  275. attrib(object, attribs, "MaxForce")
  276. attrib(object, attribs, "MaxVelocity")
  277. attrib(object, attribs, "Responsiveness")
  278. attrib(object, attribs, "ApplyAtCenterOfMass")
  279. attrib(object, attribs, "ReactionForceEnabled")
  280. attrib(object, attribs, "RigidityEnabled")
  281. attrib(object, attribs, "Attachment0")
  282. attrib(object, attribs, "Attachment1")
  283. end
  284. props["BallSocketConstraint"]=function(object,attribs)
  285. attrib(object, attribs, "Color")
  286. attrib(object, attribs, "Radius")
  287. attrib(object, attribs, "Visible")
  288. attrib(object, attribs, "Enabled")
  289. attrib(object, attribs, "LimitsEnabled")
  290. if (object.LimitsEnabled) then
  291. attrib(object, attribs, "Restitution")
  292. attrib(object, attribs, "TwistLimitsEnabled")
  293. if (object.TwistLimitsEnabled) then
  294. attrib(object, attribs, "TwistLowerAngle")
  295. attrib(object, attribs, "TwistUpperAngle")
  296. end
  297. attrib(object, attribs, "UpperAngle")
  298. end
  299. attrib(object, attribs, "Attachment0")
  300. attrib(object, attribs, "Attachment1")
  301. end
  302. props["Beam"]=function(object,attribs)
  303. attrib(object, attribs, "Color")
  304. attrib(object, attribs, "Enabled")
  305. attrib(object, attribs, "LightEmission")
  306. attrib(object, attribs, "LightInfluence")
  307. attrib(object, attribs, "Texture")
  308. attrib(object, attribs, "TextureLength")
  309. attrib(object, attribs, "TextureMode")
  310. attrib(object, attribs, "TextureSpeed")
  311. attrib(object, attribs, "Transparency")
  312. attrib(object, attribs, "ZOffset")
  313. attrib(object, attribs, "Attachment0")
  314. attrib(object, attribs, "Attachment1")
  315. attrib(object, attribs, "CurveSize0")
  316. attrib(object, attribs, "CurveSize1")
  317. attrib(object, attribs, "FaceCamera")
  318. attrib(object, attribs, "Segments")
  319. attrib(object, attribs, "Width0")
  320. attrib(object, attribs, "Width1")
  321. end
  322. props["BoolValue"]=function(object,attribs)
  323. attrib(object, attribs, "Value")
  324. end
  325. props["BrickColorValue"]=function(object,attribs)
  326. attrib(object, attribs, "Value")
  327. end
  328. props["CFrameValue"]=function(object,attribs)
  329. attrib(object, attribs, "Value")
  330. end
  331. props["ClickDetector"]=function(object,attribs)
  332. attrib(object, attribs, "MaxActivationDistance")
  333. attrib(object, attribs, "CursorIcon")
  334. end
  335. props["Color3Value"]=function(object,attribs)
  336. attrib(object, attribs, "Value")
  337. end
  338. props["CylindricalConstraint"]=function(object,attribs)
  339. attrib(object, attribs, "Color")
  340. attrib(object, attribs, "RotationAxisVisible")
  341. attrib(object, attribs, "Size")
  342. attrib(object, attribs, "Visible")
  343. attrib(object, attribs, "Enabled")
  344. attrib(object, attribs, "AngularActuatorType")
  345. attrib(object, attribs, "AngularLimitsEnabled")
  346. attrib(object, attribs, "InclinationAngle")
  347. attrib(object, attribs, "ActuatorType")
  348. attrib(object, attribs, "LimitsEnabled")
  349. if (object.LimitsEnabled) then
  350. attrib(object, attribs, "LowerLimit")
  351. attrib(object, attribs, "Restitution")
  352. attrib(object, attribs, "UpperLimit")
  353. end
  354. attrib(object, attribs, "AngularLimitsEnabled")
  355. if (object.LimitsEnabled) then
  356. attrib(object, attribs, "LowerAngle")
  357. attrib(object, attribs, "AngularRestitution")
  358. attrib(object, attribs, "UpperAngle")
  359. end
  360. attrib(object, attribs, "Attachment0")
  361. attrib(object, attribs, "Attachment1")
  362. end
  363. props["Explosion"]=function(object,attribs)
  364. attrib(object, attribs, "BlastPressure")
  365. attrib(object, attribs, "BlastRadius")
  366. attrib(object, attribs, "DestroyJointRadiusPercent")
  367. attrib(object, attribs, "ExplosionType")
  368. attrib(object, attribs, "Position")
  369. attrib(object, attribs, "Visible")
  370. end
  371. props["CharacterMesh"]=function(object,attribs)
  372. attrib(object, attribs, "BaseTextureId")
  373. attrib(object, attribs, "BodyPart")
  374. attrib(object, attribs, "MeshId")
  375. attrib(object, attribs, "OverlayTextureId")
  376. end
  377. props["Animation"]=function(object,attribs)
  378. attrib(object, attribs, "AnimationId")
  379. end
  380. props["Selection"]=function(object,attribs)
  381. attrib(object, attribs, "Color3")
  382. attrib(object, attribs, "Transparency")
  383. attrib(object, attribs, "Adornee")
  384. attrib(object, attribs, "Visible")
  385. end
  386. props["SelectionSphere"]=function(object,attribs)
  387. props.Selection(object,attribs)
  388. attrib(object, attribs, "SurfaceColor3")
  389. attrib(object, attribs, "SurfaceTransparency")
  390. end
  391. props["SelectionBox"]=function(object,attribs)
  392. props.SelectionSphere(object,attribs)
  393. attrib(object, attribs, "LineThickness")
  394. end
  395. props["SurfaceSelection"]=function(object,attribs)
  396. props.Selection(object,attribs)
  397. attrib(object, attribs, "TargetSurface")
  398. end
  399. props["Weld"]=function(object,attribs)
  400. attrib(object, attribs, "Part0")
  401. attrib(object, attribs, "Part1")
  402. end
  403. props["Snap"]=function(object,attribs)
  404. props.Weld(object,attribs)
  405. end
  406. props["ArcHandles"]=function(object,attribs)
  407. attrib(object, attribs, "Color3")
  408. attrib(object, attribs, "Transparency")
  409. attrib(object, attribs, "Adornee")
  410. attrib(object, attribs, "Axes")
  411. attrib(object, attribs, "Visible")
  412. end
  413. props["GUIObject"]=function(object,attribs)
  414. attrib(object, attribs, "Active")
  415. attrib(object, attribs, "AnchorPoint")
  416. attrib(object, attribs, "BackgroundColor3")
  417. attrib(object, attribs, "BackgroundTransparency")
  418. attrib(object, attribs, "BorderColor3")
  419. attrib(object, attribs, "BorderSizePixel")
  420. attrib(object, attribs, "LayoutOrder")
  421. attrib(object, attribs, "Position")
  422. attrib(object, attribs, "Rotation")
  423. attrib(object, attribs, "Selectable")
  424. attrib(object, attribs, "Size")
  425. attrib(object, attribs, "SizeConstraint")
  426. attrib(object, attribs, "Visible")
  427. attrib(object, attribs, "ZIndex")
  428. attrib(object, attribs, "ClipsDescendants")
  429. attrib(object, attribs, "NextSelectionDown")
  430. attrib(object, attribs, "NextSelectionLeft")
  431. attrib(object, attribs, "NextSelectionRight")
  432. attrib(object, attribs, "NextSelectionUp")
  433. attrib(object, attribs, "AutoLocalize")
  434. attrib(object, attribs, "RootLocalizationTable")
  435. end
  436. props["TextContainerUI"]=function(object,attribs)
  437. props.GUIObject(object, attribs)
  438. attrib(object, attribs, "Font")
  439. attrib(object, attribs, "Text")
  440. attrib(object, attribs, "TextColor3")
  441. attrib(object, attribs, "TextScaled")
  442. attrib(object, attribs, "TextSize")
  443. attrib(object, attribs, "TextStrokeColor3")
  444. attrib(object, attribs, "TextStrokeTransparency")
  445. attrib(object, attribs, "TextTransparency")
  446. attrib(object, attribs, "TextTruncate")
  447. attrib(object, attribs, "TextWrapped")
  448. attrib(object, attribs, "TextXAlignment")
  449. attrib(object, attribs, "TextYAlignment")
  450. end
  451. props["ImageContainerUI"]=function(object,attribs)
  452. props.GUIObject(object, attribs)
  453. attrib(object, attribs, "Image")
  454. attrib(object, attribs, "ImageColor3")
  455. attrib(object, attribs, "ImageRectOffset")
  456. attrib(object, attribs, "ImageRectSize")
  457. attrib(object, attribs, "ImageTransparency")
  458. attrib(object, attribs, "ScaleType")
  459. end
  460. props["TextLabel"]=function(object,attribs)
  461. props.TextContainerUI(object, attribs)
  462. end
  463. props["ImageLabel"]=function(object,attribs)
  464. props.ImageContainerUI(object,attribs)
  465. end
  466. props["TextButton"]=function(object,attribs)
  467. props.TextContainerUI(object, attribs)
  468. attrib(object, attribs, "Modal")
  469. end
  470. props["TextBox"]=function(object,attribs)
  471. props.TextContainerUI(object, attribs)
  472. attrib(object, attribs, "MultiLine")
  473. attrib(object, attribs, "ClearTextOnFocus")
  474. attrib(object, attribs, "ShowNativeInput")
  475. attrib(object, attribs, "SelectionImageObject")
  476. end
  477. props["ImageButton"]=function(object,attribs)
  478. props.ImageContainerUI(object,attribs)
  479. attrib(object, attribs, "SelectionImageObject")
  480. attrib(object, attribs, "Modal")
  481. attrib(object, attribs, "PressedImage")
  482. attrib(object, attribs, "SliceCenter")
  483. attrib(object, attribs, "TileSize")
  484. end
  485. props["ScrollingFrame"]=function(object,attribs)
  486. props.GUIObject(object, attribs)
  487. attrib(object, attribs, "BottomImage")
  488. attrib(object, attribs, "CanvasPosition")
  489. attrib(object, attribs, "ElasticBehavior")
  490. attrib(object, attribs, "HorizontalScrollBarInset")
  491. attrib(object, attribs, "MidImage")
  492. attrib(object, attribs, "ScrollBarImageColor3")
  493. attrib(object, attribs, "ScrollBarImageTransparency")
  494. attrib(object, attribs, "ScrollBarThickness")
  495. attrib(object, attribs, "ScrollingDirection")
  496. attrib(object, attribs, "ScrollingEnabled")
  497. attrib(object, attribs, "TopImage")
  498. attrib(object, attribs, "VerticalScrollBarInset")
  499. attrib(object, attribs, "VerticalScrollBarPosition")
  500. end
  501. props["Frame"]=function(object,attribs)
  502. props.GUIObject(object, attribs)
  503. end
  504. props["SurfaceGui"]=function(object,attribs)
  505. attrib(object, attribs, "ZOffset")
  506. attrib(object, attribs, "Active")
  507. attrib(object, attribs, "Adornee")
  508. attrib(object, attribs, "AlwaysOnTop")
  509. attrib(object, attribs, "CanvasSize")
  510. attrib(object, attribs, "Enabled")
  511. attrib(object, attribs, "Face")
  512. attrib(object, attribs, "LightInfluence")
  513. attrib(object, attribs, "ResetOnSpawn")
  514. attrib(object, attribs, "ToolPunchThroughDistance")
  515. attrib(object, attribs, "ZIndexBehavior")
  516. attrib(object, attribs, "ClipsDescendants")
  517. end
  518. props["ScreenGui"]=function(object,attribs)
  519. attrib(object, attribs, "DisplayOrder")
  520. attrib(object, attribs, "Enabled")
  521. attrib(object, attribs, "IgnoreGuiInset")
  522. attrib(object, attribs, "ResetOnSpawn")
  523. attrib(object, attribs, "ZIndexBehavior")
  524. end
  525. props["BillboardGui"]=function(object,attribs)
  526. attrib(object, attribs, "Active")
  527. attrib(object, attribs, "Adornee")
  528. attrib(object, attribs, "AlwaysOnTop")
  529. attrib(object, attribs, "Enabled")
  530. attrib(object, attribs, "ExtentsOffset")
  531. attrib(object, attribs, "ExtentsOffsetWorldSpace")
  532. attrib(object, attribs, "LightInfluence")
  533. attrib(object, attribs, "MaxDistance")
  534. attrib(object, attribs, "PlayerToHideFrom")
  535. attrib(object, attribs, "ResetOnSpawn")
  536. attrib(object, attribs, "Size")
  537. attrib(object, attribs, "SizeOffset")
  538. attrib(object, attribs, "StudsOffset")
  539. attrib(object, attribs, "StudsOffsetWorldSpace")
  540. attrib(object, attribs, "ZIndexBehavior")
  541. attrib(object, attribs, "ClipsDescendants")
  542. end
  543. props["Handles"]=function(object,attribs)
  544. attrib(object, attribs, "Color3")
  545. attrib(object, attribs, "Style")
  546. attrib(object, attribs, "Transparency")
  547. attrib(object, attribs, "Adornee")
  548. attrib(object, attribs, "Faces")
  549. attrib(object, attribs, "Visible")
  550. end
  551. props["Model"]=function(object,attribs)
  552. attrib(object, attribs, "PrimaryPart")
  553. end
  554. props["Script"]=function(object,attribs)
  555. attrib(object, attribs, "LinkedSource")
  556. attrib(object, attribs, "Source")
  557. --attribs["Source"]=varDecode("no")
  558. attrib(object, attribs, "Disabled")
  559. end
  560. props["ModuleScript"]=function(object,attribs)
  561. attrib(object, attribs, "LinkedSource")
  562. attrib(object, attribs, "Source")
  563. --attribs["Source"]=varDecode("no")
  564. end
  565. props["LocalScript"]=function(object,attribs)
  566. props.Script(object,attribs)
  567. end
  568. props["Texture"]=function(object,attribs)
  569. attrib(object, attribs, "Color3")
  570. attrib(object, attribs, "StudsPerTileU")
  571. attrib(object, attribs, "StudsPerTileV")
  572. attrib(object, attribs, "Texture")
  573. attrib(object, attribs, "Transparency")
  574. attrib(object, attribs, "Face")
  575. end
  576. props["RenderingTest"]=function(object,attribs)
  577. attrib(object, attribs, "ComparisonDiffThreshold")
  578. attrib(object, attribs, "ComparisonMethod")
  579. attrib(object, attribs, "ComparisonPsnrThreshold")
  580. attrib(object, attribs, "Description")
  581. attrib(object, attribs, "FieldOfView")
  582. attrib(object, attribs, "Orientation")
  583. attrib(object, attribs, "Position")
  584. attrib(object, attribs, "QualityLevel")
  585. attrib(object, attribs, "ShouldSkip")
  586. attrib(object, attribs, "Ticket")
  587. end
  588. props["Decal"]=function(object,attribs)
  589. attrib(object, attribs, "Color3")
  590. attrib(object, attribs, "Texture")
  591. attrib(object, attribs, "Transparency")
  592. attrib(object, attribs, "Face")
  593. end
  594. props["WeldConstraint"]=function(object,attribs)
  595. attrib(object, attribs, "Enabled")
  596. attrib(object, attribs, "Part0")
  597. attrib(object, attribs, "Part1")
  598. end
  599. props["VehicleSeat"]=function(object,attribs)
  600. props.Part(object,attribs)
  601. attrib(object, attribs, "Disabled")
  602. attrib(object, attribs, "HeadsUpDisplay")
  603. attrib(object, attribs, "MaxSpeed")
  604. attrib(object, attribs, "Steer")
  605. attrib(object, attribs, "SteerFloat")
  606. attrib(object, attribs, "Throttle")
  607. attrib(object, attribs, "ThrottleFloat")
  608. attrib(object, attribs, "Torque")
  609. attrib(object, attribs, "TurnSpeed")
  610. end
  611. props["VectorForce"]=function(object,attribs)
  612. attrib(object, attribs, "Color")
  613. attrib(object, attribs, "Visible")
  614. attrib(object, attribs, "Enabled")
  615. attrib(object, attribs, "ApplyAtCenterOfMass")
  616. attrib(object, attribs, "Force")
  617. attrib(object, attribs, "RelativeTo")
  618. attrib(object, attribs, "Attachment0")
  619. end
  620. props["Vector3Value"]=function(object,attribs)
  621. attrib(object, attribs, "Value")
  622. end
  623. props["Trails"]=function(object,attribs)
  624. attrib(object, attribs, "Color")
  625. attrib(object, attribs, "FaceCamera")
  626. attrib(object, attribs, "LightEmission")
  627. attrib(object, attribs, "LightInfluence")
  628. attrib(object, attribs, "Texture")
  629. attrib(object, attribs, "TextureLength")
  630. attrib(object, attribs, "TextureMode")
  631. attrib(object, attribs, "Transparency")
  632. attrib(object, attribs, "Attachment0")
  633. attrib(object, attribs, "Attachment1")
  634. attrib(object, attribs, "Enabled")
  635. attrib(object, attribs, "Lifetime")
  636. attrib(object, attribs, "MaxLength")
  637. attrib(object, attribs, "MinLength")
  638. attrib(object, attribs, "WidthScale")
  639. end
  640. props["Torque"]=function(object,attribs)
  641. attrib(object, attribs, "Color")
  642. attrib(object, attribs, "Visible")
  643. attrib(object, attribs, "Enabled")
  644. attrib(object, attribs, "RelativeTo")
  645. attrib(object, attribs, "Torque")
  646. attrib(object, attribs, "Attachment0")
  647. end
  648. props["Tool"]=function(object,attribs)
  649. attrib(object, attribs, "GripForward")
  650. attrib(object, attribs, "GripPos")
  651. attrib(object, attribs, "GripRight")
  652. attrib(object, attribs, "GripUp")
  653. attrib(object, attribs, "ToolTip")
  654. attrib(object, attribs, "TextureId")
  655. attrib(object, attribs, "CanBeDropped")
  656. attrib(object, attribs, "ManualActivationOnly")
  657. attrib(object, attribs, "RequiresHandle")
  658. attrib(object, attribs, "Enabled")
  659. end
  660. props["StringValue"]=function(object,attribs)
  661. attrib(object, attribs, "Value")
  662. end
  663. props["SpringConstraint"]=function(object,attribs)
  664. attrib(object, attribs, "Coils")
  665. attrib(object, attribs, "Color")
  666. attrib(object, attribs, "Radius")
  667. attrib(object, attribs, "Thickness")
  668. attrib(object, attribs, "Visible")
  669. attrib(object, attribs, "Enabled")
  670. attrib(object, attribs, "Damping")
  671. attrib(object, attribs, "FreeLength")
  672. attrib(object, attribs, "LimitsEnabled")
  673. attrib(object, attribs, "MaxForce")
  674. attrib(object, attribs, "Stiffness")
  675. attrib(object, attribs, "Attachment0")
  676. attrib(object, attribs, "Attachment1")
  677. end
  678. props["SpawnLocation"]=function(object,attribs)
  679. props.Part(object,attribs)
  680. attrib(object, attribs, "AllowTeamChangeOnTouch")
  681. attrib(object, attribs, "Neutral")
  682. attrib(object, attribs, "TeamColor")
  683. attrib(object, attribs, "Duration")
  684. end
  685. props["Seat"]=function(object,attribs)
  686. props.Part(object,attribs)
  687. attrib(object, attribs, "Disabled")
  688. end
  689. props["RopeConstraint"]=function(object,attribs)
  690. attrib(object, attribs, "Color")
  691. attrib(object, attribs, "Thickness")
  692. attrib(object, attribs, "Visible")
  693. attrib(object, attribs, "Enabled")
  694. attrib(object, attribs, "Length")
  695. attrib(object, attribs, "Restitution")
  696. attrib(object, attribs, "Attachment0")
  697. attrib(object, attribs, "Attachment1")
  698. end
  699. props["RodConstraint"]=function(object,attribs)
  700. attrib(object, attribs, "Color")
  701. attrib(object, attribs, "Thickness")
  702. attrib(object, attribs, "Visible")
  703. attrib(object, attribs, "Enabled")
  704. attrib(object, attribs, "Length")
  705. attrib(object, attribs, "Attachment0")
  706. attrib(object, attribs, "Attachment1")
  707. end
  708. props["RayValue"]=function(object,attribs)
  709. attrib(object, attribs, "Value")
  710. end
  711. props["PrismaticConstraint"]=function(object,attribs)
  712. attrib(object, attribs, "Color")
  713. attrib(object, attribs, "Size")
  714. attrib(object, attribs, "Visible")
  715. attrib(object, attribs, "Enabled")
  716. attrib(object, attribs, "ActuatorType")
  717. attrib(object, attribs, "MotorMaxAcceleration")
  718. attrib(object, attribs, "MotorMaxForce")
  719. attrib(object, attribs, "Velocity")
  720. attrib(object, attribs, "LowerLimit")
  721. attrib(object, attribs, "Restitution")
  722. attrib(object, attribs, "UpperLimit")
  723. attrib(object, attribs, "LimitsEnabled")
  724. attrib(object, attribs, "Attachment0")
  725. attrib(object, attribs, "Attachment1")
  726. end
  727. props["ObjectValue"]=function(object,attribs)
  728. attrib(object, attribs, "Value")
  729. end
  730. props["Numbervalue"]=function(object,attribs)
  731. attrib(object, attribs, "Value")
  732. end
  733. props["LocalizationTable"]=function(object,attribs)
  734. attrib(object, attribs, "SourceLocaleId")
  735. end
  736. props["LineForce"]=function(object,attribs)
  737. attrib(object, attribs, "Color")
  738. attrib(object, attribs, "Visible")
  739. attrib(object, attribs, "Enabled")
  740. attrib(object, attribs, "ApplyAtCenterOfMass")
  741. attrib(object, attribs, "InverseSquareLaw")
  742. attrib(object, attribs, "Magnitude")
  743. attrib(object, attribs, "ReactionForceEnabled")
  744. attrib(object, attribs, "Attachment0")
  745. attrib(object, attribs, "Attachment1")
  746. end
  747. props["IntValue"]=function(object,attribs)
  748. attrib(object, attribs, "Value")
  749. end
  750. props["Humanoid"]=function(object,attribs)
  751. attrib(object, attribs, "CameraOffset")
  752. attrib(object, attribs, "DisplayDistanceType")
  753. attrib(object, attribs, "HealthDisplayDistance")
  754. attrib(object, attribs, "NameDisplayDistance")
  755. attrib(object, attribs, "NameOcclusion")
  756. attrib(object, attribs, "RigType")
  757. attrib(object, attribs, "RootPart")
  758. attrib(object, attribs, "AutoJumpEnabled")
  759. attrib(object, attribs, "AutoRotate")
  760. attrib(object, attribs, "Jump")
  761. attrib(object, attribs, "PlatformStand")
  762. attrib(object, attribs, "Sit")
  763. attrib(object, attribs, "TargetPoint")
  764. attrib(object, attribs, "WalkToPart")
  765. attrib(object, attribs, "WalkToPoint")
  766. attrib(object, attribs, "AutomaticScalingEnabled")
  767. attrib(object, attribs, "Health")
  768. attrib(object, attribs, "HipHeight")
  769. attrib(object, attribs, "JumpPower")
  770. attrib(object, attribs, "MaxHealth")
  771. attrib(object, attribs, "MaxSlopeAngle")
  772. attrib(object, attribs, "WalkSpeed")
  773. end
  774. props["HingeConstraint"]=function(object,attribs)
  775. attrib(object, attribs, "Color")
  776. attrib(object, attribs, "Radius")
  777. attrib(object, attribs, "Visible")
  778. attrib(object, attribs, "Enabled")
  779. attrib(object, attribs, "ActuatorType")
  780. attrib(object, attribs, "AngularVelocity")
  781. attrib(object, attribs, "MotorMaxAcceleration")
  782. attrib(object, attribs, "MotorMaxTorque")
  783. attrib(object, attribs, "LimitsEnabled")
  784. attrib(object, attribs, "LowerAngle")
  785. attrib(object, attribs, "Restitution")
  786. attrib(object, attribs, "UpperAngle")
  787. attrib(object, attribs, "Attachment0")
  788. attrib(object, attribs, "Attachment1")
  789. end
  790. props["Sky"]=function(object,attribs)
  791. attrib(object, attribs, "CelestialBodiesShown")
  792. attrib(object, attribs, "MoonAngularSize")
  793. attrib(object, attribs, "MoonTextureId")
  794. attrib(object, attribs, "SkyboxBk")
  795. attrib(object, attribs, "SkyboxDn")
  796. attrib(object, attribs, "SkyboxFt")
  797. attrib(object, attribs, "SkyboxLf")
  798. attrib(object, attribs, "SkyboxRt")
  799. attrib(object, attribs, "SkyboxUp")
  800. attrib(object, attribs, "StarCount")
  801. attrib(object, attribs, "SunAngularSize")
  802. attrib(object, attribs, "SunTextureId")
  803.  
  804. end
  805. props["Team"]=function(object,attribs)
  806. attrib(object, attribs, "AutoAssignable")
  807. attrib(object, attribs, "TeamColor")
  808. end
  809. props["BloomEffect"]=function(object,attribs)
  810. attrib(object, attribs, "Enabled")
  811. attrib(object, attribs, "Intensity")
  812. attrib(object, attribs, "Size")
  813. attrib(object, attribs, "Threshold")
  814. end
  815. props["BlurEffect"]=function(object,attribs)
  816. attrib(object, attribs, "Enabled")
  817. attrib(object, attribs, "Size")
  818. end
  819. props["ColorCorrection"]=function(object,attribs)
  820. attrib(object, attribs, "Brightness")
  821. attrib(object, attribs, "Contrast")
  822. attrib(object, attribs, "Enabled")
  823. attrib(object, attribs, "Saturation")
  824. attrib(object, attribs, "TintColor")
  825. end
  826. props["SunRays"]=function(object,attribs)
  827. attrib(object, attribs, "Enabled")
  828. attrib(object, attribs, "Intensity")
  829. attrib(object, attribs, "Spread")
  830. end
  831. props["ChrousSoundEffect"]=function(object,attribs)
  832. attrib(object, attribs, "Depth")
  833. attrib(object, attribs, "Enabled")
  834. attrib(object, attribs, "Mix")
  835. attrib(object, attribs, "Priority")
  836. attrib(object, attribs, "Rate")
  837. end
  838. props["CompressorSoundEffect"]=function(object,attribs)
  839. attrib(object, attribs, "Attack")
  840. attrib(object, attribs, "Enabled")
  841. attrib(object, attribs, "GainMakeup")
  842. attrib(object, attribs, "Priority")
  843. attrib(object, attribs, "Ratio")
  844. attrib(object, attribs, "Release")
  845. attrib(object, attribs, "SideChain")
  846. attrib(object, attribs, "Threshold")
  847. end
  848. props["DistortionSoundEffect"]=function(object,attribs)
  849. attrib(object, attribs, "Enabled")
  850. attrib(object, attribs, "Level")
  851. attrib(object, attribs, "Priority")
  852. end
  853. props["EchoSoundEffect"]=function(object,attribs)
  854. attrib(object, attribs, "Delay")
  855. attrib(object, attribs, "DryLevel")
  856. attrib(object, attribs, "Enabled")
  857. attrib(object, attribs, "Feedback")
  858. attrib(object, attribs, "Priority")
  859. attrib(object, attribs, "WetLevel")
  860. end
  861. props["EqualizerSoundEffect"]=function(object,attribs)
  862. attrib(object, attribs, "Enabled")
  863. attrib(object, attribs, "HighGain")
  864. attrib(object, attribs, "LowGain")
  865. attrib(object, attribs, "MidGain")
  866. attrib(object, attribs, "Priority")
  867. end
  868. props["FlangeSoundEffect"]=function(object,attribs)
  869. attrib(object, attribs, "Depth")
  870. attrib(object, attribs, "Enabled")
  871. attrib(object, attribs, "Mix")
  872. attrib(object, attribs, "Priority")
  873. attrib(object, attribs, "Rate")
  874. end
  875. props["PitchShiftSoundEffect"]=function(object,attribs)
  876. attrib(object, attribs, "Enabled")
  877. attrib(object, attribs, "Octave")
  878. attrib(object, attribs, "Priority")
  879. end
  880. props["ReverbSoundEffect"]=function(object,attribs)
  881. attrib(object, attribs, "DecayTime")
  882. attrib(object, attribs, "Density")
  883. attrib(object, attribs, "Diffusion")
  884. attrib(object, attribs, "DryLevel")
  885. attrib(object, attribs, "Enabled")
  886. attrib(object, attribs, "Priority")
  887. attrib(object, attribs, "WetLevel")
  888. end
  889. props["SoundGroup"]=function(object,attribs)
  890. attrib(object, attribs, "Volume")
  891. end
  892. props["TremoloSoundEffect"]=function(object,attribs)
  893. attrib(object, attribs, "Depth")
  894. attrib(object, attribs, "Duty")
  895. attrib(object, attribs, "Enabled")
  896. attrib(object, attribs, "Frequency")
  897. attrib(object, attribs, "Priority")
  898. end
  899. props["Fire"]=function(object,attribs)
  900. attrib(object, attribs, "Color")
  901. attrib(object, attribs, "Enabled")
  902. attrib(object, attribs, "Heat")
  903. attrib(object, attribs, "SecondaryColor")
  904. attrib(object, attribs, "Size")
  905. end
  906. props["ParticleEmitter"]=function(object,attribs)
  907. attrib(object, attribs, "Color")
  908. attrib(object, attribs, "LightEmission")
  909. attrib(object, attribs, "LightInfluence")
  910. attrib(object, attribs, "Size")
  911. attrib(object, attribs, "Texture")
  912. attrib(object, attribs, "Transparency")
  913. attrib(object, attribs, "ZOffset")
  914. attrib(object, attribs, "Acceleration")
  915. attrib(object, attribs, "Drag")
  916. attrib(object, attribs, "LockedToPart")
  917. attrib(object, attribs, "VelocityInheritance")
  918. attrib(object, attribs, "EmissionDirection")
  919. attrib(object, attribs, "Enabled")
  920. attrib(object, attribs, "Lifetime")
  921. attrib(object, attribs, "Rate")
  922. attrib(object, attribs, "Rotation")
  923. attrib(object, attribs, "RotSpeed")
  924. attrib(object, attribs, "Speed")
  925. attrib(object, attribs, "SpreadAngle")
  926. end
  927. props["PointLight"]=function(object,attribs)
  928. attrib(object, attribs, "Brightness")
  929. attrib(object, attribs, "Color")
  930. attrib(object, attribs, "Enabled")
  931. attrib(object, attribs, "Range")
  932. attrib(object, attribs, "Shadows")
  933. end
  934. props["Smoke"]=function(object,attribs)
  935. attrib(object, attribs, "Color")
  936. attrib(object, attribs, "Enabled")
  937. attrib(object, attribs, "Opacity")
  938. attrib(object, attribs, "RiseVelocity")
  939. attrib(object, attribs, "Size")
  940. end
  941. props["Sparkles"]=function(object,attribs)
  942. attrib(object, attribs, "Enabled")
  943. attrib(object, attribs, "SparkleColor")
  944. end
  945. props["SpotLight"]=function(object,attribs)
  946. attrib(object, attribs, "Angle")
  947. attrib(object, attribs, "Brightness")
  948. attrib(object, attribs, "Color")
  949. attrib(object, attribs, "Enabled")
  950. attrib(object, attribs, "Face")
  951. attrib(object, attribs, "Range")
  952. attrib(object, attribs, "Shadows")
  953. end
  954. props["SurfaceLight"]=function(object,attribs)
  955. attrib(object, attribs, "Angle")
  956. attrib(object, attribs, "Brightness")
  957. attrib(object, attribs, "Color")
  958. attrib(object, attribs, "Enabled")
  959. attrib(object, attribs, "Face")
  960. attrib(object, attribs, "Range")
  961. attrib(object, attribs, "Shadows")
  962. end
  963. props["BodyAngularVelocity"]=function(object,attribs)
  964. attrib(object, attribs, "AngularVelocity")
  965. attrib(object, attribs, "MaxTorque")
  966. attrib(object, attribs, "P")
  967. end
  968. props["BodyForce"]=function(object,attribs)
  969. attrib(object, attribs, "Force")
  970. end
  971. props["BodyGyro"]=function(object,attribs)
  972. attrib(object, attribs, "D")
  973. attrib(object, attribs, "MaxTorque")
  974. attrib(object, attribs, "P")
  975. end
  976. props["BodyPosition"]=function(object,attribs)
  977. attrib(object, attribs, "D")
  978. attrib(object, attribs, "MaxForce")
  979. attrib(object, attribs, "P")
  980. attrib(object, attribs, "Position")
  981. end
  982. props["BodyThrust"]=function(object,attribs)
  983. attrib(object, attribs, "Force")
  984. attrib(object, attribs, "Location")
  985. end
  986. props["BodyVelocity"]=function(object,attribs)
  987. attrib(object, attribs, "MaxForce")
  988. attrib(object, attribs, "P")
  989. attrib(object, attribs, "Velocity")
  990. end
  991. props["RocketPropulsion"]=function(object,attribs)
  992. attrib(object, attribs, "CartoonFactor")
  993. attrib(object, attribs, "Target")
  994. attrib(object, attribs, "TargetOffset")
  995. attrib(object, attribs, "TargetRadius")
  996. attrib(object, attribs, "MaxSpeed")
  997. attrib(object, attribs, "MaxThrust")
  998. attrib(object, attribs, "ThrustD")
  999. attrib(object, attribs, "ThrustP")
  1000. attrib(object, attribs, "MaxTorque")
  1001. attrib(object, attribs, "TurnD")
  1002. attrib(object, attribs, "TurnP")
  1003. end
  1004. props["Dialog"]=function(object,attribs)
  1005. attrib(object, attribs, "BehaviorType")
  1006. attrib(object, attribs, "ConversationDistance")
  1007. attrib(object, attribs, "GoodbyeChoiceActive")
  1008. attrib(object, attribs, "GoodbyeDialog")
  1009. attrib(object, attribs, "InitialPrompt")
  1010. attrib(object, attribs, "InUse")
  1011. attrib(object, attribs, "Purpose")
  1012. attrib(object, attribs, "Tone")
  1013. attrib(object, attribs, "TriggerDistance")
  1014. attrib(object, attribs, "TriggerOffset")
  1015. end
  1016. props["DialogChoice"]=function(object,attribs)
  1017. attrib(object, attribs, "GoodbyeChoiceActive")
  1018. attrib(object, attribs, "GoodbyeDialog")
  1019. attrib(object, attribs, "ResponseDialog")
  1020. attrib(object, attribs, "UserDialog")
  1021. end
  1022. props["Folder"]=function(object,attribs)
  1023. attrib(object, attribs, "Name")
  1024. end
  1025. props["Model"]=function(object,attribs)
  1026. attrib(object, attribs, "Name")
  1027. end
  1028.  
  1029. -- TEMPLATE
  1030. props[""]=function(object,attribs)
  1031. attrib(object, attribs, "")
  1032. attrib(object, attribs, "")
  1033. attrib(object, attribs, "")
  1034. attrib(object, attribs, "")
  1035. attrib(object, attribs, "")
  1036. attrib(object, attribs, "")
  1037. attrib(object, attribs, "")
  1038. attrib(object, attribs, "")
  1039. attrib(object, attribs, "")
  1040. attrib(object, attribs, "")
  1041. attrib(object, attribs, "")
  1042. end
  1043.  
  1044. local HttpService = game:GetService("HttpService")
  1045.  
  1046. function JSONEncode(list)
  1047. return HttpService:JSONEncode(list)
  1048. end
  1049. function JSONDecode(str)
  1050. return HttpService:JSONDecode(str)
  1051. end
  1052.  
  1053. local OD = {}
  1054. function OD.deconstruct(what, inclusive, recrusive, deleteAfterIndexing)
  1055. local result = {}
  1056. local function burrow(target)
  1057. local children = {}
  1058. local set = target:GetChildren()
  1059. for _,v in pairs(set) do
  1060. local attribs = {}
  1061. pcall(function()
  1062. props.all(v, attribs)
  1063. if (props[v.ClassName]~=nil) then
  1064. props[v.ClassName](v, attribs)
  1065. elseif (props[v.ClassName:lower()]~=nil) then
  1066. props[v.ClassName:lower()](v, attribs)
  1067. end
  1068. end)
  1069. pcall(function()
  1070. attribs["children"]=burrow(v)
  1071. end)
  1072. table.insert(children, attribs)
  1073. if (deleteAfterIndexing) then
  1074. pcall(function()
  1075. v:Destroy()
  1076. end)
  1077. end
  1078. wait()
  1079. end
  1080. return children
  1081. end
  1082. local attribs = {}
  1083. if (inclusive) then
  1084. pcall(function()
  1085. props.all(what, attribs)
  1086. end)
  1087. if (props[what.ClassName]~=nil) then
  1088. pcall(function()
  1089. props[what.ClassName](what, attribs)
  1090. end)
  1091. end
  1092. if (recrusive) then
  1093. pcall(function()
  1094. attribs.children = burrow(what)
  1095. end)
  1096. else
  1097. attribs.children={}
  1098. end
  1099. else
  1100. if (recrusive) then
  1101. pcall(function()
  1102. attribs=burrow(what)
  1103. end)
  1104. else
  1105. error("Invalid setup")
  1106. end
  1107. end
  1108. table.insert(result, attribs)
  1109. local enr = JSONEncode(result)
  1110. return enr
  1111. end
  1112. function OD.constructJSON(input, parent)
  1113. local list = JSONDecode(input)
  1114. local function make(what, parent)
  1115. local obj
  1116. if (what.ClassName.value == "TouchTransmitter") then
  1117. obj = Instance.new("Folder")
  1118. else
  1119. obj = Instance.new(what.ClassName.value, parent)
  1120. end
  1121. pcall(function() obj.Anchored=true end)
  1122. if (obj==nil) then
  1123. obj = Instance.new("Model", parent)
  1124. end
  1125. for name,value in pairs(what) do
  1126. if (typeof(value)=="table") then
  1127. print(name .. " --> " .. JSONEncode(value))
  1128. else
  1129. print(name .. " --> " .. tostring(value))
  1130. end
  1131. if (name=="ClassName" or name=="doBuild" or name=="type" or name=="children") then
  1132. else
  1133. obj[name]=varc.encode(value)
  1134. end
  1135. end
  1136. if (what["children"]~=nil) then
  1137. for i,v in pairs(what["children"]) do
  1138. make(v, obj)
  1139. end
  1140. end
  1141. wait()
  1142. end
  1143. for i,v in pairs(list) do
  1144. make(v, parent)
  1145. end
  1146. end
  1147.  
  1148. return OD
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement