Advertisement
Godofadmin1337

cloak

Nov 1st, 2017
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.68 KB | None | 0 0
  1.  
  2. --Converted with ttyyuu12345's model to script plugin v4
  3. function sandbox(var,func)
  4. local env = getfenv(func)
  5. local newenv = setmetatable({},{
  6. __index = function(self,k)
  7. if k=="script" then
  8. return var
  9. else
  10. return env[k]
  11. end
  12. end,
  13. })
  14. setfenv(func,newenv)
  15. return func
  16. end
  17. cors = {}
  18. mas = Instance.new("Model",game:GetService("Lighting"))
  19. Tool0 = Instance.new("Tool")
  20. Part1 = Instance.new("Part")
  21. Model2 = Instance.new("Model")
  22. Part3 = Instance.new("Part")
  23. SpecialMesh4 = Instance.new("SpecialMesh")
  24. Motor6D5 = Instance.new("Motor6D")
  25. Motor6D6 = Instance.new("Motor6D")
  26. Sound7 = Instance.new("Sound")
  27. Sound8 = Instance.new("Sound")
  28. Sound9 = Instance.new("Sound")
  29. Sound10 = Instance.new("Sound")
  30. Part11 = Instance.new("Part")
  31. SpecialMesh12 = Instance.new("SpecialMesh")
  32. Part13 = Instance.new("Part")
  33. SpecialMesh14 = Instance.new("SpecialMesh")
  34. Sound15 = Instance.new("Sound")
  35. Sound16 = Instance.new("Sound")
  36. Part17 = Instance.new("Part")
  37. SpecialMesh18 = Instance.new("SpecialMesh")
  38. Weld19 = Instance.new("Weld")
  39. Weld20 = Instance.new("Weld")
  40. LocalScript21 = Instance.new("LocalScript")
  41. Animation22 = Instance.new("Animation")
  42. Tool0.Name = "BatCloak"
  43. Tool0.Parent = mas
  44. Tool0.TextureId = "http://www.roblox.com/asset/?id=94819016"
  45. Tool0.GripPos = Vector3.new(0, 0, 0.200000003)
  46. Tool0.ToolTip = "Double jump to turn into a bat!"
  47. Tool0.CanBeDropped = false
  48. Part1.Name = "Handle"
  49. Part1.Parent = Tool0
  50. Part1.Transparency = 1
  51. Part1.Rotation = Vector3.new(-180, 0, -180)
  52. Part1.CanCollide = false
  53. Part1.FormFactor = Enum.FormFactor.Custom
  54. Part1.Size = Vector3.new(0.200000003, 0.200000003, 0.200000003)
  55. Part1.CFrame = CFrame.new(0, 3.00000072, 0, -1, 0, 0, 0, 1, 0, 0, 0, -1)
  56. Part1.Position = Vector3.new(0, 3.00000072, 0)
  57. Part1.Orientation = Vector3.new(0, 180, 0)
  58. Model2.Name = "Bat"
  59. Model2.Parent = Part1
  60. Part3.Name = "Body"
  61. Part3.Parent = Model2
  62. Part3.Rotation = Vector3.new(-180, 0, -180)
  63. Part3.CanCollide = false
  64. Part3.Locked = true
  65. Part3.FormFactor = Enum.FormFactor.Custom
  66. Part3.Size = Vector3.new(0.519999981, 1.75, 0.610000014)
  67. Part3.CFrame = CFrame.new(0, 3.00000072, 0, -1, 0, 0, 0, 1, 0, 0, 0, -1)
  68. Part3.BottomSurface = Enum.SurfaceType.Smooth
  69. Part3.TopSurface = Enum.SurfaceType.Smooth
  70. Part3.Position = Vector3.new(0, 3.00000072, 0)
  71. Part3.Orientation = Vector3.new(0, 180, 0)
  72. SpecialMesh4.Parent = Part3
  73. SpecialMesh4.MeshId = "http://www.roblox.com/asset/?id=94821092"
  74. SpecialMesh4.TextureId = "http://www.roblox.com/asset/?id=94820224"
  75. SpecialMesh4.MeshType = Enum.MeshType.FileMesh
  76. Motor6D5.Name = "Left Shoulder"
  77. Motor6D5.Parent = Part3
  78. Motor6D5.C0 = CFrame.new(-0.0822467804, 0.312738031, 0.114303589, 1, 0, 0, 0, -4.37113883e-08, -1, 0, 1, -4.37113883e-08)
  79. Motor6D5.C1 = CFrame.new(1.125, 0.349999994, 0, 1, 0, 0, 0, -4.37113883e-08, -1, 0, 1, -4.37113883e-08)
  80. Motor6D5.Part0 = Part3
  81. Motor6D5.Part1 = Part11
  82. Motor6D5.MaxVelocity = 0.5
  83. Motor6D6.Name = "Right Shoulder"
  84. Motor6D6.Parent = Part3
  85. Motor6D6.C0 = CFrame.new(0.0820000172, 0.312998861, 0.109996796, 1, 0, 0, 0, -4.37113883e-08, 1, 0, -1, -4.37113883e-08)
  86. Motor6D6.C1 = CFrame.new(-1.125, 0.349999994, 0, 1, 0, 0, 0, -4.37113883e-08, 1, 0, -1, -4.37113883e-08)
  87. Motor6D6.Part0 = Part3
  88. Motor6D6.Part1 = Part13
  89. Motor6D6.MaxVelocity = 0.5
  90. Sound7.Name = "Squeak1"
  91. Sound7.Parent = Part3
  92. Sound7.SoundId = "http://www.roblox.com/asset/?id=94899284"
  93. Sound7.Volume = 1
  94. Sound8.Name = "Squeak2"
  95. Sound8.Parent = Part3
  96. Sound8.SoundId = "http://www.roblox.com/asset/?id=94888905"
  97. Sound8.Volume = 1
  98. Sound9.Name = "Squeak3"
  99. Sound9.Parent = Part3
  100. Sound9.SoundId = "http://www.roblox.com/asset/?id=94888934"
  101. Sound9.Volume = 1
  102. Sound10.Name = "WindSqueak"
  103. Sound10.Parent = Part3
  104. Sound10.SoundId = "http://www.roblox.com/asset/?id=94889839"
  105. Sound10.Volume = 1
  106. Part11.Name = "Left Wing"
  107. Part11.Parent = Model2
  108. Part11.Rotation = Vector3.new(-180, 0, -180)
  109. Part11.CanCollide = false
  110. Part11.Locked = true
  111. Part11.FormFactor = Enum.FormFactor.Custom
  112. Part11.Size = Vector3.new(2.25, 1.57000005, 0.200000003)
  113. Part11.CFrame = CFrame.new(1.20724678, 2.96273875, -0.114303589, -1, 0, 0, 0, 1, 0, 0, 0, -1)
  114. Part11.BottomSurface = Enum.SurfaceType.Smooth
  115. Part11.TopSurface = Enum.SurfaceType.Smooth
  116. Part11.Position = Vector3.new(1.20724678, 2.96273875, -0.114303589)
  117. Part11.Orientation = Vector3.new(0, 180, 0)
  118. SpecialMesh12.Parent = Part11
  119. SpecialMesh12.MeshId = "http://www.roblox.com/asset/?id=94821113"
  120. SpecialMesh12.TextureId = "http://www.roblox.com/asset/?id=94820224"
  121. SpecialMesh12.MeshType = Enum.MeshType.FileMesh
  122. Part13.Name = "Right Wing"
  123. Part13.Parent = Model2
  124. Part13.Rotation = Vector3.new(-180, 0, -180)
  125. Part13.CanCollide = false
  126. Part13.Locked = true
  127. Part13.FormFactor = Enum.FormFactor.Custom
  128. Part13.Size = Vector3.new(2.25, 1.57000005, 0.200000003)
  129. Part13.CFrame = CFrame.new(-1.20700002, 2.96299958, -0.109996796, -1, 0, 0, 0, 1, 0, 0, 0, -1)
  130. Part13.BottomSurface = Enum.SurfaceType.Smooth
  131. Part13.TopSurface = Enum.SurfaceType.Smooth
  132. Part13.Position = Vector3.new(-1.20700002, 2.96299958, -0.109996796)
  133. Part13.Orientation = Vector3.new(0, 180, 0)
  134. SpecialMesh14.Parent = Part13
  135. SpecialMesh14.MeshId = "http://www.roblox.com/asset/?id=94821133"
  136. SpecialMesh14.TextureId = "http://www.roblox.com/asset/?id=94820224"
  137. SpecialMesh14.MeshType = Enum.MeshType.FileMesh
  138. Sound15.Name = "Base"
  139. Sound15.Parent = Part1
  140. Sound15.SoundId = "http://www.roblox.com/asset/?id=94912586"
  141. Sound15.Volume = 1
  142. Sound16.Name = "WindBreath"
  143. Sound16.Parent = Part1
  144. Sound16.SoundId = "http://www.roblox.com/asset/?id=94888779"
  145. Sound16.Volume = 1
  146. Part17.Name = "Cloak"
  147. Part17.Parent = Part1
  148. Part17.Rotation = Vector3.new(-180, 0, -180)
  149. Part17.CanCollide = false
  150. Part17.Locked = true
  151. Part17.FormFactor = Enum.FormFactor.Custom
  152. Part17.Size = Vector3.new(0.200000003, 0.200000003, 0.200000003)
  153. Part17.CFrame = CFrame.new(1.5, 1.95384955, -2.33785152, -1, 0, 0, 0, 1, 0, 0, 0, -1)
  154. Part17.BottomSurface = Enum.SurfaceType.Smooth
  155. Part17.TopSurface = Enum.SurfaceType.Smooth
  156. Part17.Position = Vector3.new(1.5, 1.95384955, -2.33785152)
  157. Part17.Orientation = Vector3.new(0, 180, 0)
  158. SpecialMesh18.Parent = Part17
  159. SpecialMesh18.MeshId = "http://www.roblox.com/asset/?id=94820260"
  160. SpecialMesh18.Scale = Vector3.new(1.5, 1.5, 1.5)
  161. SpecialMesh18.TextureId = "http://www.roblox.com/asset/?id=94820166"
  162. SpecialMesh18.MeshType = Enum.MeshType.FileMesh
  163. SpecialMesh18.Scale = Vector3.new(1.5, 1.5, 1.5)
  164. Weld19.Name = "HandleToBatBody"
  165. Weld19.Parent = Part1
  166. Weld19.Part0 = Part1
  167. Weld19.Part1 = Part3
  168. Weld20.Name = "HandleToCloak"
  169. Weld20.Parent = Part1
  170. Weld20.C0 = CFrame.new(-1.5, -1.04615116, 2.33785152, 1, 0, 0, 0, 1, 0, 0, 0, 1)
  171. Weld20.Part0 = Part1
  172. Weld20.Part1 = Part17
  173. LocalScript21.Name = "BatCloak"
  174. LocalScript21.Parent = Tool0
  175. table.insert(cors,sandbox(LocalScript21,function()
  176. -----------------
  177. --| Constants |--
  178. -----------------
  179.  
  180. local WALK_SPEED_BUFF = 6
  181. local BAT_MOVE_FACTOR = 1.8
  182. local BAT_TOUCH_DAMAGE = 4
  183. local CLOAK_FLOAT_TIME = 1
  184.  
  185. local ONE_STEP = 1/30
  186. local RBX_GRAVITY = 196.2
  187. local FAR_FAR_AWAY = Vector3.new(5e6, 5e6, 5e6)
  188.  
  189. --------------------
  190. --| WaitForChild |--
  191. --------------------
  192.  
  193. -- Waits for parent.child to exist, then returns it
  194. local function WaitForChild(parent, childName)
  195. assert(parent, "ERROR: WaitForChild: parent is nil")
  196. while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end
  197. return parent[childName]
  198. end
  199.  
  200. -----------------
  201. --| Variables |--
  202. -----------------
  203.  
  204. local DebrisService = Game:GetService('Debris')
  205. local PlayersService = Game:GetService('Players')
  206. local LightingService = Game:GetService('Lighting') --TODO: Replace with data store service when available
  207.  
  208. local Camera = Workspace.CurrentCamera
  209. local MyPlayer = PlayersService.LocalPlayer
  210. local Mouse = MyPlayer:GetMouse()
  211.  
  212. local Tool = script.Parent
  213. local ToolHandle = Tool.Handle
  214.  
  215. local Bat = WaitForChild(ToolHandle, 'Bat')
  216. Bat.Parent = LightingService -- Hide it asap to protect welds and such
  217.  
  218. local BatBody = WaitForChild(Bat, 'Body')
  219. local LeftShoulderJoint = WaitForChild(BatBody, 'Left Shoulder')
  220. local RightShoulderJoint = WaitForChild(BatBody, 'Right Shoulder')
  221.  
  222. local WindSqueakSound = WaitForChild(BatBody, 'WindSqueak')
  223. local SqueakSounds = {}
  224. table.insert(SqueakSounds, WaitForChild(BatBody, 'Squeak1'))
  225. table.insert(SqueakSounds, WaitForChild(BatBody, 'Squeak2'))
  226. table.insert(SqueakSounds, WaitForChild(BatBody, 'Squeak3'))
  227.  
  228. local Cloak = WaitForChild(ToolHandle, 'Cloak')
  229. Cloak.Parent = LightingService -- Hide it asap to protect welds and such
  230.  
  231. local WindBreathSound = WaitForChild(ToolHandle, 'WindBreath')
  232. local BaseSound = WaitForChild(ToolHandle, 'Base')
  233.  
  234. local EquipIdleAnimation = WaitForChild(script, 'StandPerfectlyStill')
  235.  
  236. local MyModel = nil
  237. local MyTorso = nil
  238. local LastSpaceTime = 0
  239.  
  240. local Left = false
  241. local Right = false
  242. local Up = false
  243. local Down = false
  244. local Forward = false
  245. local Backward = false
  246. local TargetPoint = Vector3.new()
  247.  
  248. local Flapping, Waiting, WingsDown = true, false, true
  249. local LastWingAngle = 0
  250.  
  251. local CloakAntigravity = nil
  252. local IdleAnimTrack = nil
  253. local LastRandomSqueakTime = 0
  254. local Equipped = false
  255.  
  256. -------------------------
  257. --| Utility Functions |--
  258. -------------------------
  259.  
  260. -- Returns total mass of instance and all children
  261. local function GetMassRecursive(instance)
  262. local mass = 0
  263. if instance:IsA('BasePart') then
  264. mass = mass + instance:GetMass()
  265. end
  266. for _, child in pairs(instance:GetChildren()) do
  267. if child then
  268. mass = mass + GetMassRecursive(child)
  269. end
  270. end
  271. return mass
  272. end
  273.  
  274. -- Returns true if a is within epsilon of b
  275. local function IsClose(a, b, epsilon)
  276. epsilon = epsilon or 0.01
  277. return (a <= b + epsilon and a >= b - epsilon)
  278. end
  279.  
  280. -- Removes any old creator tags and applies new ones to the specified target
  281. local function ApplyTags(target)
  282. while target:FindFirstChild('creator') do
  283. target.creator:Destroy()
  284. end
  285.  
  286. local creatorTag = Instance.new('ObjectValue')
  287. creatorTag.Value = MyPlayer
  288. creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats
  289.  
  290. local iconTag = Instance.new('StringValue')
  291. iconTag.Value = Tool.TextureId
  292. iconTag.Name = 'icon'
  293.  
  294. iconTag.Parent = creatorTag
  295. creatorTag.Parent = target
  296. DebrisService:AddItem(creatorTag, 1.5)
  297. end
  298.  
  299. -----------------------
  300. --| Other Functions |--
  301. -----------------------
  302.  
  303. local function Transform()
  304. Camera.CameraSubject = BatBody
  305. Camera.CameraType = Enum.CameraType.Follow
  306. BatBody.CFrame = MyTorso.CFrame
  307. BatBody.Velocity = Vector3.new()
  308. Bat.Parent = Workspace
  309. MyModel:MoveTo(FAR_FAR_AWAY)
  310. MyTorso.Anchored = true
  311. TargetPoint = BatBody.Position
  312.  
  313. local smoke = Instance.new('Smoke')
  314. Delay(0.3, function() smoke.Enabled = false end)
  315. DebrisService:AddItem(smoke, 5)
  316. smoke.Parent = BatBody
  317.  
  318. WindSqueakSound:Play()
  319. end
  320.  
  321. local function UnTransform()
  322. Bat.Parent = LightingService
  323. MyModel:MoveTo(BatBody.Position)
  324. MyTorso.Anchored = false
  325. MyTorso.Velocity = Vector3.new()
  326. Camera.CameraSubject = MyModel
  327. Camera.CameraType = Enum.CameraType.Custom
  328.  
  329. local smoke = Instance.new('Smoke', MyTorso)
  330. Delay(0.3, function() smoke.Enabled = false end)
  331. DebrisService:AddItem(smoke, 5)
  332.  
  333. WindBreathSound:Play()
  334. end
  335.  
  336. local function OnBatPartTouched(otherPart)
  337. if otherPart and otherPart.Parent and otherPart.Parent:FindFirstChild('Humanoid') then
  338. local humanoid = otherPart.Parent.Humanoid
  339. ApplyTags(humanoid)
  340. humanoid:TakeDamage(BAT_TOUCH_DAMAGE)
  341. end
  342. end
  343.  
  344. local function Die()
  345. local myHumanoid = MyModel:FindFirstChild('Humanoid')
  346. if myHumanoid and myHumanoid.Health > 0 then
  347. myHumanoid.Health = 0
  348. end
  349. if Bat.Parent == Workspace then
  350. Bat:BreakJoints()
  351. BatBody.Anchored = false
  352. end
  353. DebrisService:AddItem(Bat, 2)
  354. DebrisService:AddItem(Cloak, 2)
  355. end
  356.  
  357. local function OnPlayerRemoving(player)
  358. if player == MyPlayer then
  359. Bat:Destroy()
  360. Cloak:Destroy()
  361. end
  362. end
  363.  
  364. local function OnKey(key, isDown)
  365. key = key:lower()
  366. if key == 'w' or key == '' then
  367. Forward = isDown
  368. elseif key == 's' or key == '' then
  369. Backward = isDown
  370. elseif key == 'a' or key == '' then
  371. Left = isDown
  372. elseif key == 'd' or key == '' then
  373. Right = isDown
  374. elseif key == 'e' then
  375. Up = isDown
  376. elseif key == 'q' then
  377. Down = isDown
  378. elseif key == ' ' and isDown then
  379. if Bat.Parent == Workspace then
  380. UnTransform()
  381. else -- Check for double jump
  382. local now = time()
  383. if now - LastSpaceTime < 0.7 and Equipped then
  384. Transform()
  385. end
  386. LastSpaceTime = now
  387. end
  388. end
  389. end
  390.  
  391. local function OnEquipped()
  392. -- Initialize
  393. MyModel = Tool.Parent
  394. MyTorso = MyModel.Torso
  395. BatBody.Anchored = true
  396.  
  397. -- Put on cloak
  398. Spawn(function() --NOTE: We have to spawn when creating welds during equip or it flips out
  399. Cloak.Parent = MyModel
  400. local weld = Instance.new('Weld', MyTorso)
  401. weld.Name = "CloakWeld"
  402. weld.Part0 = MyTorso
  403. weld.Part1 = Cloak
  404. weld.C1 = CFrame.new(0, 0.545642853, -0.638683319)
  405. end)
  406.  
  407. -- Play idle animation, get buff, connect death
  408. local humanoid = MyModel:FindFirstChild('Humanoid')
  409. if humanoid then
  410. if not IdleAnimTrack then
  411. IdleAnimTrack = humanoid:LoadAnimation(EquipIdleAnimation)
  412. end
  413. IdleAnimTrack:Play()
  414.  
  415. humanoid.WalkSpeed = humanoid.WalkSpeed + WALK_SPEED_BUFF
  416.  
  417. humanoid.Died:connect(Die)
  418. end
  419.  
  420. Equipped = true
  421. end
  422.  
  423. local function OnActivated()
  424. if Bat.Parent ~= Workspace then -- Clicking while cloaked
  425. if not CloakAntigravity then
  426. BaseSound:Play()
  427. CloakAntigravity = Instance.new('BodyForce', MyTorso)
  428. CloakAntigravity.force = Vector3.new(0, GetMassRecursive(MyModel) * RBX_GRAVITY, 0)
  429. Delay(CLOAK_FLOAT_TIME, function()
  430. if CloakAntigravity then
  431. CloakAntigravity:Destroy()
  432. CloakAntigravity = nil
  433. end
  434. end)
  435. end
  436. end
  437. end
  438.  
  439. local function OnUnequipped()
  440. Equipped = false
  441.  
  442. -- Take off cloak
  443. Cloak.Parent = LightingService
  444.  
  445. -- Debuff
  446. local humanoid = MyModel:FindFirstChild('Humanoid')
  447. if humanoid then
  448. humanoid.WalkSpeed = humanoid.WalkSpeed - WALK_SPEED_BUFF
  449. end
  450.  
  451. -- Stop idle animation
  452. if IdleAnimTrack then
  453. IdleAnimTrack:Stop()
  454. end
  455. end
  456.  
  457. --------------------
  458. --| Script Logic |--
  459. --------------------
  460.  
  461. Tool.Equipped:connect(OnEquipped)
  462. Tool.Activated:connect(OnActivated)
  463. Tool.Unequipped:connect(OnUnequipped)
  464. Mouse.KeyDown:connect(function(key) OnKey(key, true) end)
  465. Mouse.KeyUp:connect(function(key) OnKey(key, false) end)
  466. PlayersService.PlayerRemoving:connect(OnPlayerRemoving)
  467. for _, child in pairs(Bat:GetChildren()) do
  468. if child:IsA('BasePart') then
  469. child.Touched:connect(OnBatPartTouched)
  470. end
  471. end
  472.  
  473. while true do
  474. if Bat.Parent == Workspace then
  475. if not BatBody.Parent or not LeftShoulderJoint.Parent or not RightShoulderJoint.Parent then Die() break end
  476.  
  477. -- Update bat angle based on camera angle
  478. local cameraLookVector = Camera.CoordinateFrame.lookVector
  479. BatBody.CFrame = CFrame.new(BatBody.Position, BatBody.Position + cameraLookVector)
  480.  
  481. -- Update bat position based on key input
  482. local forwardVector = BatBody.CFrame.lookVector
  483. local upVector = BatBody.CFrame:vectorToWorldSpace(Vector3.new(0, 1, 0))
  484. local rightVector = forwardVector:Cross(upVector)
  485. local moveVector = Vector3.new()
  486. if Forward then moveVector = moveVector + forwardVector end
  487. if Backward then moveVector = moveVector - forwardVector end
  488. if Left then moveVector = moveVector - rightVector end
  489. if Right then moveVector = moveVector + rightVector end
  490. if Up then moveVector = moveVector + upVector end
  491. if Down then moveVector = moveVector - upVector end
  492. TargetPoint = TargetPoint + (moveVector * BAT_MOVE_FACTOR)
  493. BatBody.CFrame = BatBody.CFrame - BatBody.Position + BatBody.Position:Lerp(TargetPoint, 0.25)
  494.  
  495. if Flapping then -- Update wings
  496. if not Waiting then
  497. local angle = WingsDown and 0.5 or -0.4
  498. LeftShoulderJoint.DesiredAngle = angle
  499. RightShoulderJoint.DesiredAngle = angle
  500. LastWingAngle = angle
  501. Waiting = true
  502. else -- Waiting for wings to reach desired angle
  503. if IsClose(LeftShoulderJoint.CurrentAngle, LastWingAngle) or IsClose(RightShoulderJoint.CurrentAngle, LastWingAngle) then
  504. WingsDown = not WingsDown
  505. Waiting = false
  506. end
  507. end
  508. end
  509.  
  510. -- Play squeak sounds randomly
  511. local now = time()
  512. if now - LastRandomSqueakTime > 1 and math.random() < 0.1 then
  513. local i = math.random(1, #SqueakSounds)
  514. SqueakSounds[i]:Play()
  515. LastRandomSqueakTime = now
  516. end
  517. end
  518. wait(ONE_STEP)
  519. end
  520.  
  521. end))
  522. Animation22.Name = "StandPerfectlyStill"
  523. Animation22.Parent = LocalScript21
  524. Animation22.AnimationId = "http://www.roblox.com/Asset?ID=94853940"
  525. for i,v in pairs(mas:GetChildren()) do
  526. v.Parent = game:GetService("Players").LocalPlayer.Backpack
  527. pcall(function() v:MakeJoints() end)
  528. end
  529. mas:Destroy()
  530. for i,v in pairs(cors) do
  531. spawn(function()
  532. pcall(v)
  533. end)
  534. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement