Advertisement
SlappyDappyCrappy

roblox ghosty

Jun 23rd, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local Player = game.Players.LocalPlayer
  2. local Mouse = Player:GetMouse()
  3. repeat wait() until Player.Character
  4. local Character = Player.Character
  5.  
  6. local scriptId = "GhostScriptID-9211"
  7. script.Name = scriptId
  8. script.Parent = Player.PlayerScripts
  9.  
  10. local GhostObject
  11. local SwordObject
  12.  
  13. -- | Functions
  14.  
  15. -- General
  16.  
  17. local General = {}
  18.  
  19. function General.LoopClosure(parent, func)
  20. for _,v in pairs(parent:GetChildren()) do
  21. func(v)
  22. end
  23. end
  24.  
  25. function General.IsMainBodyPart(part)
  26. if part:IsA("Part") and part.Name ~= "HumanoidRootPart" and part.Name ~= "Head" then
  27. return true
  28. else
  29. return false
  30. end
  31. end
  32.  
  33. function General.TweenTransparency(model, start, finish)
  34. local value = start
  35.  
  36. if start < finish then
  37. repeat
  38. value = value + 0.1
  39. General.LoopClosure(model, function(v)
  40. if General.IsMainBodyPart(v) then
  41. v.Transparency = value
  42. end
  43. end)
  44. wait()
  45. until value >= finish
  46. else
  47. repeat
  48. value = value - 0.1
  49. General.LoopClosure(model, function(v)
  50. if General.IsMainBodyPart(v) then
  51. v.Transparency = value
  52. end
  53. end)
  54. wait()
  55. until value <= finish
  56. end
  57. end
  58.  
  59. function General.TweenSize(part, start, finish, increment, waitTime)
  60. local value = start
  61.  
  62. if start < finish then
  63. repeat
  64. value = value + increment
  65. part.Size = part.Size + Vector3.new(increment, increment, increment)
  66. wait(waitTime)
  67. until value >= finish
  68. else
  69. repeat
  70. value = value - increment
  71. part.Size = part.Size - Vector3.new(increment, increment, increment)
  72. wait(waitTime)
  73. until value <= finish
  74. end
  75. end
  76.  
  77. function General.TweenSizeCo(part, start, finish, increment, waitTime, tweenFunction, finishedFunction)
  78. coroutine.resume(coroutine.create(function()
  79. local value = start
  80.  
  81. if start < finish then
  82. repeat
  83. if part == nil then break end
  84. value = value + increment
  85. part.Size = part.Size + Vector3.new(increment, increment, increment)
  86.  
  87. if tweenFunction ~= nil then tweenFunction() end
  88.  
  89. wait(waitTime)
  90. until value >= finish
  91. else
  92. repeat
  93. if part == nil then break end
  94.  
  95. value = value - increment
  96. part.Size = part.Size - Vector3.new(increment, increment, increment)
  97.  
  98. if tweenFunction ~= nil then tweenFunction() end
  99.  
  100. wait(waitTime)
  101. until value <= finish
  102. end
  103.  
  104. if finishedFunction ~= nil then
  105. finishedFunction()
  106. end
  107. end))
  108. end
  109.  
  110. function General.IsCharacter(part)
  111. if part == nil then return end
  112. if part:FindFirstChild("Humanoid") or part.Parent:FindFirstChild("Humanoid") or part.Parent.Parent:FindFirstChild("Humanoid") then
  113. return true
  114. else
  115. return false
  116. end
  117. end
  118.  
  119. function General.GetCharacter(part)
  120. if part == nil then return end
  121. if part.Parent:FindFirstChild("Humanoid") then
  122. return part.Parent
  123. elseif part.Parent.Parent:FindFirstChild("Humanoid") then
  124. return part.Parent.Parent
  125. end
  126. end
  127.  
  128. function General.GetPlayer(part)
  129. local character = General.GetCharacter(part)
  130.  
  131. if character ~= nil then
  132. local player = game.Players:GetPlayerFromCharacter(character)
  133. if player ~= nil then
  134. return player
  135. end
  136. end
  137. end
  138.  
  139. function General.Weld(part1, part2)
  140. local weld = Instance.new("Weld", part1)
  141. weld.Part0 = part1
  142. weld.Part1 = part2
  143. return weld
  144. end
  145.  
  146. -- Animations
  147.  
  148. -- RIGHT ARM ANGLES | C0 ( +FORWARD/-BACK, +TILT LEFT/-TILT RIGHT, +OUT/-IN ) | C1 INVERSE
  149.  
  150. local Animation = {}
  151. Animation.rigged = false
  152.  
  153. function Animation.RigCharacter(character)
  154.  
  155. local rightArmWeld
  156.  
  157. if not character.Torso:FindFirstChild("RightArmWeld") then
  158. rightArmWeld = General.Weld(character.Torso, character["Right Arm"])
  159. rightArmWeld.Name = "RightArmWeld"
  160. rightArmWeld.C1 = rightArmWeld.C1 * CFrame.new(-1.5, 0, 0)
  161. else
  162. rightArmWeld = character.Torso.RightArmWeld
  163. end
  164.  
  165. Animation.Root = character.HumanoidRootPart:WaitForChild("RootJoint")
  166. Animation.RootRoot = {Animation.Root.C0, Animation.Root.C1} -- the name......
  167. Animation.RightArm = rightArmWeld
  168. Animation.RightArmRoot = {rightArmWeld.C0, rightArmWeld.C1}
  169.  
  170. Animation.rigged = true
  171. end
  172.  
  173. function Animation.Reset()
  174. if not Animation.rigged then return end
  175.  
  176. Animation.Root.C0 = Animation.RootRoot[1]
  177. Animation.Root.C1 = Animation.RootRoot[2]
  178. Animation.RightArm.C0 = Animation.RightArmRoot[1]
  179. Animation.RightArm.C1 = Animation.RightArmRoot[2]
  180. end
  181.  
  182. function Animation.Destroy()
  183. Animation.RightArm:Destroy()
  184. Animation.rigged = false
  185. end
  186.  
  187. -- | Classes
  188.  
  189. -- Custom tool class
  190.  
  191. local Toolv2 = {}
  192.  
  193. Toolv2.create = function()
  194. local instance = {}
  195. instance.enabled = true
  196. instance.active = false
  197. instance.initialized = false
  198.  
  199. instance.postInit = function()
  200. -- override
  201. end
  202.  
  203. instance.init = function(player, char, mouse)
  204. instance.Player = player
  205. instance.Character = char
  206. instance.Mouse = mouse
  207. instance.initialized = true
  208. instance.postInit()
  209. end
  210.  
  211. instance.isReady = function()
  212. if instance.initialized and not instance.active and instance.enabled then
  213. return true
  214. else
  215. return false
  216. end
  217. end
  218.  
  219. return instance
  220. end
  221.  
  222. -- Ghostwalker tool class
  223.  
  224. local Sword = {}
  225.  
  226. Sword.create = function()
  227. local instance = Toolv2.create()
  228.  
  229. instance.postInit = function()
  230. Animation.RigCharacter(instance.Character)
  231. instance.idleStance()
  232. instance.createSword()
  233. instance.lastAttack = game:GetService("RunService").Stepped:wait()
  234. instance.combo = 1
  235. instance.defaultSpeed = 20
  236. instance.night = false
  237.  
  238. instance.Character.Humanoid.WalkSpeed = instance.defaultSpeed
  239. instance.updateSouls(0)
  240.  
  241. instance.Character.Humanoid.Died:connect(function()
  242. instance.enabled = false
  243. end)
  244.  
  245. instance.Mouse.Button1Down:connect(function()
  246. if not instance.isReady() then return end
  247.  
  248. if instance.minion ~= nil then
  249. if instance.minion:FindFirstChild("Humanoid") and Mouse.Hit ~= nil then
  250. instance.minion.Humanoid:MoveTo(Mouse.Hit.p)
  251. end
  252. return
  253. end
  254.  
  255. local t = game:GetService("RunService").Stepped:wait()
  256.  
  257. if t - instance.lastAttack < .5 and instance.combo == 1 then
  258. instance.sliceOut()
  259. instance.combo = 2
  260. elseif t - instance.lastAttack < .5 and instance.combo == 2 then
  261. instance.lunge()
  262. else
  263. instance.sliceInit()
  264. instance.combo = 1
  265. end
  266. end)
  267.  
  268. instance.Mouse.KeyDown:connect(function(key)
  269. if not instance.isReady() then return end
  270.  
  271. key:lower()
  272.  
  273. if key == 'f' then
  274. instance.soulFire()
  275. elseif key == 'e' then
  276. instance.soulControl()
  277. elseif key == 'q' then
  278. instance.soulJail()
  279. elseif key == 'g' then
  280. if instance.night == false then
  281. instance.soulNight()
  282. elseif instance.night == true and Mouse.Hit ~= nil then
  283. instance.genericBlast(Mouse.Hit)
  284. end
  285. elseif key == 't' then
  286. instance.sheathe()
  287. end
  288. end)
  289. end
  290.  
  291. instance.updateSouls = function(amount)
  292. instance.souls = amount
  293. instance.Character.Humanoid.MaxHealth = (instance.souls * 100) + 250
  294. instance.Character.Humanoid.Health = instance.Character.Humanoid.MaxHealth
  295. instance.swordFire.Size = instance.souls
  296. end
  297.  
  298. instance.hitFunction = function(hit, damage)
  299. local char = General.GetCharacter(hit)
  300.  
  301. if char ~= nil and char ~= instance.Character and char.Humanoid.Health > 0 then
  302. if damage == nil then
  303. char.Humanoid.Health = char.Humanoid.Health - ((instance.souls * 10) + 10)
  304. else
  305. char.Humanoid.Health = char.Humanoid.Health - (damage)
  306. end
  307.  
  308. if char.Humanoid.Health <= 0 then
  309. General.TweenTransparency(char, 0, 1)
  310. instance.updateSouls(instance.souls + 1)
  311. end
  312. end
  313. end
  314.  
  315. instance.idleStance = function()
  316. Animation.Reset()
  317. Animation.Root.C1 = Animation.Root.C1 * CFrame.Angles(0, 0, -0.5)
  318. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(1.5, 0.3, 0.3)
  319. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(-0.2, -0.75, -0.2)
  320.  
  321. if instance.swordWeld ~= nil then
  322. instance.swordWeld.C0 = instance.swordWeldRoot[1]
  323. instance.swordWeld.C1 = instance.swordWeldRoot[2]
  324. end
  325. end
  326.  
  327. instance.spellStance = function()
  328. instance.idleStance()
  329.  
  330. for i = 1,10 do
  331. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(-0.2, 0, 0)
  332. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(0, -0.07, 0.05)
  333. instance.createSwordTrail()
  334. wait()
  335. end
  336. end
  337.  
  338. instance.updateAttack = function()
  339. instance.lastAttack = game:GetService("RunService").Stepped:wait()
  340. end
  341.  
  342. instance.createSword = function()
  343. local part = Instance.new("Part", instance.Character)
  344. part.CanCollide = false
  345. part.Transparency = 0.8
  346. part.BrickColor = BrickColor.new("White")
  347. part.Size = Vector3.new(1, 0.8, 4)
  348. part.Material = "Neon"
  349.  
  350. part.Touched:connect(function(hit)
  351. instance.hitFunction(hit, nil)
  352. end)
  353.  
  354. local mesh = Instance.new("SpecialMesh", part)
  355. mesh.MeshType = "FileMesh"
  356. mesh.MeshId = "http://www.roblox.com/asset/?id=12221720"
  357.  
  358. local weld = General.Weld(instance.Character["Right Arm"], part)
  359. weld.C1 = weld.C1 * CFrame.Angles(3.16, 0, 1.6)
  360. weld.C1 = weld.C1 * CFrame.new(0, 1, 1.5)
  361.  
  362. local slashSound = Instance.new("Sound", part)
  363. slashSound.SoundId = "rbxasset://sounds/swordslash.wav"
  364. slashSound.Volume = 0.7
  365.  
  366. instance.sword = part
  367. instance.swordWeld = weld
  368. instance.swordWeldRoot = {weld.C0, weld.C1}
  369. instance.slash = slashSound
  370. instance.swordFire = instance.fireEffect(part, 1, nil)
  371. instance.swordFire.Heat = 1
  372. end
  373.  
  374. instance.createSwordTrail = function()
  375. local part = Instance.new("Part", instance.Character)
  376. part.CanCollide = false
  377. part.Anchored = true
  378. part.Size = Vector3.new(1.3, 0.2, 4)
  379. part.Transparency = 0.9
  380. part.BrickColor = BrickColor.new("White")
  381. part.TopSurface = 0
  382. part.BottomSurface = 0
  383. part.CFrame = instance.sword.CFrame
  384.  
  385. instance.debris(part, 0.2)
  386. end
  387.  
  388. instance.sliceInit = function()
  389. instance.active = true
  390. instance.idleStance()
  391.  
  392. instance.slash:Play()
  393.  
  394. for i = 1,6 do
  395. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(-0.26, 0, 0)
  396. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(0, 0, 0.14)
  397. instance.createSwordTrail()
  398. wait()
  399. end
  400.  
  401. wait(0.2)
  402.  
  403. instance.updateAttack()
  404. instance.idleStance()
  405. instance.active = false
  406. end
  407.  
  408. instance.sliceOut = function()
  409. instance.active = true
  410. instance.idleStance()
  411.  
  412. for i = 1,5 do
  413. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(0, 0.2, 0)
  414. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(-0.14, 0, 0.2)
  415. instance.createSwordTrail()
  416. wait()
  417. end
  418.  
  419. instance.slash:Play()
  420.  
  421. for i = 1,5 do
  422. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(-0.4, 0, 0)
  423. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(0, -0.15, 0.15)
  424. instance.createSwordTrail()
  425. wait()
  426. end
  427.  
  428. wait(0.3)
  429.  
  430. instance.updateAttack()
  431. instance.idleStance()
  432. instance.active = false
  433. end
  434.  
  435. instance.lunge = function()
  436. instance.active = true
  437. instance.idleStance()
  438.  
  439. for i = 1,5 do
  440. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(-0.4, 0, 0)
  441. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(0, -0.15, 0.1)
  442. instance.createSwordTrail()
  443. wait()
  444. end
  445.  
  446. instance.Character.Humanoid.WalkSpeed = 0
  447.  
  448. wait(0.5)
  449.  
  450. instance.swordWeld.C1 = instance.swordWeld.C1 * CFrame.Angles(1.6,0,0)
  451. instance.swordWeld.C1 = instance.swordWeld.C1 * CFrame.new(0, 0.8, 1)
  452.  
  453. instance.positionForce(instance.Character.Torso, (instance.Character.HumanoidRootPart.CFrame * CFrame.new(0, 1, -30)).p, 1.3)
  454. instance.slash:Play()
  455.  
  456. for i = 1,4 do -- added .2 due to 1 less frame
  457. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.Angles(0.5, 0, 0)
  458. Animation.RightArm.C0 = Animation.RightArm.C0 * CFrame.new(0, 0.17, -0.14)
  459. wait()
  460. end
  461.  
  462. wait(0.4)
  463.  
  464. instance.genericBlast(instance.sword.CFrame)
  465.  
  466. wait(0.6)
  467.  
  468. instance.Character.Humanoid.WalkSpeed = instance.defaultSpeed
  469.  
  470. --instance.updateAttack()
  471. instance.idleStance()
  472. instance.active = false
  473. end
  474.  
  475. instance.startSpell = function(requirement)
  476. if instance.souls < requirement then
  477. return false
  478. else
  479. instance.updateSouls(instance.souls - requirement)
  480. end
  481.  
  482. instance.active = true
  483. instance.Character.Humanoid.WalkSpeed = 0
  484. instance.spellStance()
  485.  
  486. return true
  487. end
  488.  
  489. instance.endSpell = function()
  490. instance.Character.Humanoid.WalkSpeed = instance.defaultSpeed
  491. instance.idleStance()
  492. instance.active = false
  493. end
  494.  
  495. instance.genericBlast = function(cf)
  496. local sound = Instance.new("Sound")
  497. sound.SoundId = "rbxasset://sounds\\HalloweenGhost.wav"
  498. sound.Parent = instance.sword
  499. sound:Play()
  500.  
  501. local spell = instance.spellEffect()
  502. spell.CFrame = cf
  503. spell.Touched:connect(function(hit)
  504. instance.hitFunction(hit, 10)
  505. end)
  506.  
  507. General.TweenSizeCo(spell, spell.Size.X, 24, 1, 0.025, function()
  508. if spell ~= nil then
  509. spell.Transparency = spell.Transparency + 0.025
  510. spell.CFrame = cf
  511. end
  512. end,
  513. function()
  514. if spell ~= nil then
  515. spell:Destroy()
  516. end
  517. end) -- First function fires every time the part size is changed / while part size is tweening. Second function fires once the tweening process is complete.
  518. end
  519.  
  520. instance.soulFire = function()
  521. if not instance.startSpell(1) then return end
  522.  
  523. local sound = Instance.new("Sound")
  524. sound.SoundId = "rbxasset://sounds\\HalloweenGhost.wav"
  525. sound.Parent = instance.sword
  526. sound:Play()
  527.  
  528. local spell = instance.spellEffect()
  529. spell.CFrame = instance.Character.Torso.CFrame
  530. spell.Touched:connect(function(hit)
  531. instance.hitFunction(hit, 100)
  532. end)
  533.  
  534. for i = 1, 20 do
  535. spell.Size = spell.Size + Vector3.new(3, 3, 3)
  536. spell.Transparency = spell.Transparency + 0.025
  537. spell.CFrame = instance.Character.Torso.CFrame
  538. wait()
  539. end
  540.  
  541. spell:Destroy()
  542.  
  543. wait(0.3)
  544.  
  545. instance.endSpell()
  546. end
  547.  
  548. instance.soulControl = function()
  549. if not instance.startSpell(1) then return end
  550.  
  551. local sound = Instance.new("Sound")
  552. sound.SoundId = "rbxasset://sounds\\HalloweenGhost.wav"
  553. sound.Parent = instance.sword
  554. sound:Play()
  555.  
  556. if instance.minion ~= nil then
  557. instance.minion = nil
  558. instance.minionConnection:disconnect()
  559. else
  560. local char = General.GetCharacter(instance.Mouse.Target)
  561. if char ~= nil and char:FindFirstChild("Torso") then
  562. instance.minion = char
  563. instance.minionConnection = char.Torso.Touched:connect(function(hit)
  564. instance.hitFunction(hit, 100)
  565. end)
  566. instance.fireEffect(char.Torso, 4, nil)
  567. end
  568. end
  569.  
  570. wait(0.3)
  571.  
  572. instance.endSpell()
  573. end
  574.  
  575. instance.soulJail = function()
  576. if not instance.startSpell(3) then return end
  577.  
  578. local sound = Instance.new("Sound")
  579. sound.SoundId = "rbxasset://sounds\\HalloweenGhost.wav"
  580. sound.Parent = instance.sword
  581. sound:Play()
  582.  
  583. local char = General.GetCharacter(instance.Mouse.Target)
  584. if char ~= nil and char:FindFirstChild("Torso") then
  585. char.Torso.Anchored = true
  586. char.Humanoid.WalkSpeed = 0
  587.  
  588. local spell = instance.spellEffect()
  589. spell.Size = Vector3.new(12, 12, 12)
  590. spell.CFrame = char.Torso.CFrame
  591.  
  592. instance.debris(spell, 30)
  593. end
  594.  
  595. wait(0.5)
  596.  
  597. instance.endSpell()
  598. end
  599.  
  600. instance.soulNight = function()
  601. if not instance.startSpell(5) then return end
  602.  
  603. instance.night = true
  604.  
  605. local sound = Instance.new("Sound")
  606. sound.SoundId = "rbxasset://sounds\\HalloweenGhost.wav"
  607. sound.Parent = instance.sword
  608. sound:Play()
  609.  
  610. local timeOfDay = 12
  611.  
  612. for i = 1, 12 do
  613. game.Lighting.TimeOfDay = tostring(timeOfDay)
  614. timeOfDay = timeOfDay + 1
  615. wait(0.1)
  616. end
  617.  
  618. instance.fireEffect(instance.Character.Torso, 5, 10)
  619.  
  620. wait(0.5)
  621.  
  622. instance.endSpell()
  623. instance.Character.Humanoid.WalkSpeed = 30
  624. instance.defaultSpeed = 30
  625.  
  626. coroutine.resume(coroutine.create(function()
  627. wait(10)
  628.  
  629. instance.defaultSpeed = 20
  630.  
  631. if instance.isReady() then
  632. instance.Character.Humanoid.WalkSpeed = instance.defaultSpeed
  633. end
  634.  
  635. for i = 1, 12 do
  636. game.Lighting.TimeOfDay = tostring(timeOfDay)
  637. timeOfDay = timeOfDay + 1
  638. wait(0.1)
  639. end
  640.  
  641. instance.night = false
  642. end))
  643. end
  644.  
  645. instance.sheathe = function()
  646. instance.enabled = false
  647. instance.sword:Destroy()
  648. Animation.Reset()
  649. --Animation.Destroy()
  650.  
  651. GhostObject.enabled = true
  652. end
  653.  
  654. instance.positionForce = function(parent, position, decay)
  655. local bp = Instance.new("BodyPosition", parent)
  656. bp.Position = position
  657.  
  658. instance.debris(bp, decay)
  659. end
  660.  
  661. instance.fireEffect = function(part, size, decay)
  662. local fire = Instance.new("Fire", part)
  663. fire.Color = Color3.new(85/255, 255/255, 255/255)
  664. fire.Size = size
  665.  
  666. if decay ~= nil then
  667. instance.debris(fire, decay)
  668. end
  669.  
  670. return fire
  671. end
  672.  
  673. instance.spellEffect = function()
  674. local spell = Instance.new("Part", workspace)
  675. spell.Shape = "Ball"
  676. spell.CanCollide = false
  677. spell.Anchored = true
  678. spell.BrickColor = BrickColor.new("White")
  679. spell.TopSurface = 0
  680. spell.BottomSurface = 0
  681. spell.Size = Vector3.new(5,5,5)
  682. spell.Transparency = 0.5
  683. spell.Material = "Neon"
  684.  
  685. return spell
  686. end
  687.  
  688. instance.debris = function(item, decay)
  689. game:GetService("Debris"):AddItem(item, decay)
  690. end
  691.  
  692. return instance
  693. end
  694.  
  695. -- Ghost tool class
  696.  
  697. local Ghost = {}
  698.  
  699. Ghost.create = function()
  700. local instance = Toolv2.create()
  701. instance.visible = false
  702. instance.hasBody = false
  703.  
  704. instance.postInit = function()
  705. if instance.Character:FindFirstChild("Body Colors") then
  706. instance.Character["Body Colors"]:Destroy()
  707. end
  708. end
  709.  
  710. instance.ghostify = function(char)
  711. instance.Player.Backpack:ClearAllChildren()
  712.  
  713. General.LoopClosure(char, function(v)
  714. if v:IsA("Accessory") or v:IsA("Shirt") or v:IsA("ShirtGraphic") or v:IsA("Pants") or v:IsA("CharacterMesh") or v.Name == "Body Colors" then
  715. v:Destroy()
  716. end
  717.  
  718. if v.Name == "Head" then -- Remove Face
  719. v:ClearAllChildren()
  720. end
  721.  
  722. if not General.IsMainBodyPart(v) and v:IsA("Part") then
  723. v.Transparency = 1
  724. end
  725. end)
  726.  
  727. General.LoopClosure(char, function(v)
  728. if v:IsA("Part") then -- Need to re-loop due to body colors object resetting body colors
  729. v.BrickColor = BrickColor.new("White")
  730. v.Material = "Neon"
  731. end
  732. end)
  733.  
  734. General.TweenTransparency(char, 0, 1)
  735. end
  736.  
  737. instance.clone = function(char)
  738. if not General.IsCharacter(char) then
  739. return
  740. end
  741.  
  742. instance.ghostify(instance.Character)
  743.  
  744. General.LoopClosure(char, function(v)
  745. if v:IsA("Part") then
  746. local correspondant = instance.Character:FindFirstChild(v.Name)
  747. if correspondant ~= nil then
  748. correspondant.BrickColor = v.BrickColor
  749. correspondant.Transparency = v.Transparency
  750. correspondant.Material = v.Material
  751. end
  752. elseif v:IsA("Accessory") or v:IsA("ShirtGraphic") or v:IsA("Shirt") or v:IsA("Pants") or v:IsA("CharacterMesh") then
  753. v.Parent = instance.Character
  754. end
  755.  
  756. if v.Name == "Head" then
  757. for _,x in pairs(v:GetChildren()) do
  758. x.Parent = instance.Character.Head
  759. end
  760. end
  761. end)
  762. end
  763.  
  764. instance.appear = function()
  765. if instance.hasBody then return end
  766.  
  767. instance.active = true
  768.  
  769. if instance.visible then
  770. General.TweenTransparency(instance.Character, 0.8, 1)
  771. instance.visible = false
  772. else
  773. General.TweenTransparency(instance.Character, 1, 0.8)
  774. instance.visible = true
  775. end
  776.  
  777. instance.active = false
  778. end
  779.  
  780. instance.teleport = function()
  781. if instance.hasBody then
  782. return
  783. end
  784.  
  785. local hit = instance.Mouse.Target
  786.  
  787. if hit ~= nil and General.IsCharacter(hit) then
  788. local myPosition = instance.Character.Torso.Position
  789. instance.Character:MoveTo(hit.Position)
  790. General.GetCharacter(hit):MoveTo(myPosition)
  791. else
  792. instance.Character:MoveTo(instance.Mouse.Hit.p)
  793. end
  794. end
  795.  
  796. instance.possess = function()
  797. instance.active = true
  798.  
  799. local char = General.GetCharacter(instance.Mouse.Target)
  800.  
  801. if char ~= nil and char:FindFirstChild("Torso") then
  802. instance.clone(char)
  803. instance.Character:MoveTo(char.Torso.Position)
  804.  
  805. General.TweenTransparency(char, 0, 1)
  806. General.LoopClosure(char, function(v)
  807. if v:IsA("Part") then
  808. v:Destroy()
  809. end
  810. end)
  811.  
  812. SwordObject = Sword.create()
  813. SwordObject.init(instance.Player, instance.Character, instance.Mouse)
  814.  
  815. instance.hasBody = true
  816. instance.enabled = false
  817. end
  818.  
  819. instance.active = false
  820. end
  821.  
  822. instance.leaveBody = function()
  823. instance.active = true
  824. instance.ghostify(instance.Character)
  825. instance.hasBody = false
  826. instance.active = false
  827. end
  828.  
  829. instance.steal = function()
  830. local enemyPlayer = General.GetPlayer(instance.Mouse.Target)
  831.  
  832. if enemyPlayer ~= nil then
  833. local stealFunction = function(v)
  834. if v:IsA("Script") or v:IsA("LocalScript") or v:IsA("Tool") or v:IsA("Hopperbin") then
  835. v:Clone().Parent = instance.Player.Backpack
  836. end
  837. end
  838.  
  839. General.LoopClosure(enemyPlayer.Backpack, stealFunction)
  840. General.LoopClosure(enemyPlayer.StarterGear, stealFunction)
  841. end
  842. end
  843.  
  844. instance.postInit = function()
  845. instance.Mouse.KeyDown:connect(function(key)
  846. key:lower()
  847.  
  848. if not instance.isReady() then return end
  849.  
  850. if key == 'q' then
  851. instance.appear()
  852. elseif key == 'e' then
  853. instance.teleport()
  854. elseif key == 'f' then
  855. instance.possess()
  856. elseif key == 'g' then
  857. instance.leaveBody()
  858. elseif key == 'c' then
  859. instance.steal()
  860. elseif key == 'p' then
  861. local cleanseFunction = function(v)
  862. if v.Name ~= scriptId then
  863. v:Destroy()
  864. end
  865. end
  866. General.LoopClosure(instance.Player.StarterGear, cleanseFunction)
  867. General.LoopClosure(instance.Player.Backpack, cleanseFunction)
  868. end
  869. end)
  870. end
  871.  
  872. return instance
  873. end
  874.  
  875. -- Events
  876.  
  877. Player.CharacterAdded:connect(function()
  878. Character = Player.Character
  879.  
  880. GhostObject = Ghost.create()
  881. GhostObject.init(Player, Character, Mouse)
  882. wait(1)
  883. GhostObject.ghostify(Player.Character)
  884.  
  885. --SwordObject = Sword.create()
  886. --SwordObject.init(Player, Character, Mouse)
  887. end)
  888.  
  889. Player.Character:BreakJoints()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement