Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local OmnitrixFunctions = {}
- -- // Services
- local RepStorage = game:GetService("ReplicatedStorage")
- local SS = game:GetService("ServerStorage")
- -- // Modules
- local OmnitrixData = require(RepStorage.Modules.OmnitrixData)
- -- // Constants
- -- // Instance Variables
- local AnimFolder = RepStorage:WaitForChild("Animations").Omnitrix
- -- // Other Variables
- local PlaceNewChar = CFrame.new(0, -2, 0)
- local DeTransforming = false
- local function ChangeStats(char, Alien)
- local Index = OmnitrixData.AlienData[Alien.Name]
- char:WaitForChild("Humanoid").WalkSpeed = Index["WalkSpeed"]
- char:SetAttribute("WalkSpeed", Index["WalkSpeed"])
- char:SetAttribute("RunSpeed", Index["RunSpeed"])
- char:SetAttribute("MeleeDamage", (char:GetAttribute("MeleeDamage") * Index["CombatMultiplier"]))
- char:SetAttribute("OmnitrixStatus", "Transformed")
- char:SetAttribute("CurrentAlien", Alien.Name)
- end
- local function TurnDial(char, Max, Min, Direction)
- local function SetAtt(Maths)
- local SetAtt = char:SetAttribute("SelectedAlien", Maths)
- end
- if Direction == "Right" then
- if (char:GetAttribute("SelectedAlien") + 1) < Max then
- SetAtt(char:GetAttribute("SelectedAlien") + 1)
- else
- SetAtt(1)
- end
- elseif Direction == "Left" then
- if (char:GetAttribute("SelectedAlien") - 1) > Min then
- SetAtt(char:GetAttribute("SelectedAlien") - 1)
- else
- SetAtt(10)
- end
- end
- end
- function OmnitrixFunctions.Activate(char, humrp)
- char = char or error("No character exists")
- if char:GetAttribute("OmnitrixStatus") == "Transformed" then return end
- if char:GetAttribute("OmnitrixStatus") == "Down" then
- local ActivateSound = humrp:WaitForChild("OmnitrixDialUp")
- ActivateSound:Play()
- task.wait(.5)
- char:SetAttribute("SelectedAlien", 1)
- char:SetAttribute("OmnitrixStatus", "Up")
- print("Alien selected is "..OmnitrixData.Aliens[char:GetAttribute("SelectedAlien")])
- elseif char:GetAttribute("OmnitrixStatus") == "Up" then
- char:SetAttribute("SelectedAlien", nil)
- char:SetAttribute("OmnitrixStatus", "Down")
- humrp:WaitForChild("Tick"):Play()
- print("Omnitrix down.")
- end
- end
- function OmnitrixFunctions.Turn(char, humrp, Direction)
- char = char or error("No character exists")
- if char:GetAttribute("OmnitrixStatus") == "Transformed" or char:GetAttribute("OmnitrixStatus") == "Down" then return end
- local LastAlien = 10
- local FirstAlien = 1
- TurnDial(char, LastAlien, FirstAlien, Direction)
- humrp:WaitForChild("OmnitrixSwitch"..math.random(1, 2)):Play()
- print("From turning "..Direction.." you are now on "..OmnitrixData.Aliens[char:GetAttribute("SelectedAlien")])
- end
- function OmnitrixFunctions.Transform(char, humrp)
- local plr = game.Players:GetPlayerFromCharacter(char) or error("No player exists for this Character.")
- if char:GetAttribute("OmnitrixStatus") == "Transformed" or char:GetAttribute("OmnitrixStatus") == "Recharging" then return end
- if char then
- local TransformAnim = char:WaitForChild("Humanoid").Animator:LoadAnimation(AnimFolder:WaitForChild("Transform"))
- TransformAnim:Play()
- local AlienFolder = SS:WaitForChild("Assets").Models.AlienModels
- local Alien = AlienFolder:WaitForChild(OmnitrixData.Aliens[char:GetAttribute("SelectedAlien")]):Clone()
- if Alien then
- Alien.HumanoidRootPart.Anchored = false
- Alien:WaitForChild("HumanoidRootPart").CFrame = humrp.CFrame * PlaceNewChar
- else
- error("No alien available for this integer value.")
- end
- if char:GetAttribute("OmnitrixStatus") == "Down" then
- char:SetAttribute("SelectedAlien", (math.random(1, #AlienFolder:GetChildren())))
- end
- task.wait(.5)
- char.Archivable = true
- local CharClone = char:Clone()
- CharClone.Parent = plr
- if char:GetAttribute("OmnitrixStatus") == "Down" then
- char:SetAttribute("SelectedAlien", (math.random(1, #AlienFolder:GetChildren())))
- end
- for _,Guts in pairs(char:GetChildren()) do
- if Guts:IsA("Script") or Guts:IsA("LocalScript") or Guts:IsA("Folder") or Guts:IsA("Humanoid") then
- Guts:Clone().Parent = Alien
- elseif Guts:IsA("BasePart") and Guts.Name == "HumanoidRootPart" then
- for _,RootAssets in pairs(Guts:GetChildren()) do
- RootAssets:Clone().Parent = Alien.HumanoidRootPart
- end
- end
- end
- plr.Character = Alien
- Alien.Parent = workspace:WaitForChild("LivingThings")
- char:Destroy()
- char = plr.Character
- humrp = char:WaitForChild("HumanoidRootPart")
- humrp:WaitForChild("OmnitrixTransform"):Play()
- humrp:WaitForChild("OmnitrixTransformEffect"):Emit(35)
- ChangeStats(char, Alien)
- print("You are now ".. Alien.Name..".")
- for i = 1, 600 do
- task.wait(1)
- if DeTransforming then break end
- if i == 600 then OmnitrixFunctions:UnTransform(char) end
- end
- else
- print("No Character exists.")
- end
- end
- function OmnitrixFunctions.DeTransform(char)
- local plr = game.Players:GetPlayerFromCharacter(char) or error("No Player exists for this Character.")
- local humrp = char:WaitForChild("HumanoidRootPart") or error("No HumanoidRootPart exists for this character.")
- if DeTransforming or char:GetAttribute("OmnitrixStatus") ~= "Transformed" then return end
- DeTransforming = true
- local OrigChar = plr:WaitForChild(plr.Name)
- if OrigChar then
- local DeTransform = humrp:WaitForChild("OmnitrixDeTransform")
- DeTransform:Play()
- task.wait(3.5)
- OrigChar:WaitForChild("HumanoidRootPart").CFrame = humrp.CFrame * PlaceNewChar
- char:WaitForChild("Humanoid").Parent = OrigChar
- plr.Character = OrigChar
- OrigChar.Parent = workspace:WaitForChild("LivingThings")
- char:Destroy()
- char = plr.Character
- humrp = char:WaitForChild("HumanoidRootPart")
- humrp:WaitForChild("OmnitrixDeTransformEffect"):Emit(35)
- humrp:WaitForChild("OmnitrixTransform"):Play()
- char:SetAttribute("OmnitrixState", "Down")
- char:SetAttribute("CurrentAlien", "Base")
- DeTransforming = false
- else
- print("No Character of this name exists in the Player.")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement