Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How would I make a new String be chosen every time from a Table?

Asked by 4 years ago

So basically I'm trying to get it so that you won't be morphed into the same thing again, I have no idea how to go about doing this!? I want a new thing chosen from a table every time not the same one?

Table

local ListOfMorphs = {


    "Bacon", 
    "Jary",
    "John", 

}

return ListOfMorphs

MorphOnHit

local function onLeftDown(mousePos)
            local knife = getKnife()
            knife.CFrame = CFrame.new(Handle.Position, mousePos)
            knife.Velocity = knife.CFrame.lookVector * AttackSpeed * AttackPower
            local damage = AttackDamage * AttackPower
            local touched


            touched = knife.Touched:connect(function(hit)

                if hit:IsDescendantOf(Tool.Parent) then return end
                if contains(Knives, hit) then return end

                if hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
                    knife.Trail.Enabled = false
                    local human = hit.Parent.Humanoid

                        local player = game:GetService('Players'):GetPlayerFromCharacter(hit.Parent)

                        local Choice = math.random(1,#TableOfPlayers)

                        local modelC = TableOfPlayers[Choice]

                        local model = game.ReplicatedStorage.Morphs:FindFirstChild(modelC)

                        print(modelC)

                        if hit.Parent.Name ~= model then

                        Morph(player, model)

                        knife.Transparency = 1

                        elseif hit.Parent.Name == model then

                        tagHuman(human)
                        human:TakeDamage(damage)
                        knife.Hit:Play()

                        knife.Transparency = 1


                    end


                end

                knife.Projectile:Destroy()

                local w = Instance.new("Weld")
                w.Part0 = hit
                w.Part1 = knife
                w.C0 = hit.CFrame:toObjectSpace(knife.CFrame)
                w.Parent = w.Part0

                touched:disconnect()




            end)
0
I’m lost, you never even require the list, or select something?? Ziffixture 6913 — 4y
0
I only pasted some parts of the script Jomeliter 55 — 4y

1 answer

Log in to vote
0
Answered by 4 years ago

Full Script

local ListOfNames = require(game.ReplicatedStorage.Modules.ListOfNamesM1)

        local Tool = script.Parent
        local Remote = Tool:WaitForChild("Remote")
        local Handle = Tool:WaitForChild("Handle")

        local Conf = script.Parent.Conf

        local BrokenEggMesh = "http://www.roblox.com/asset/?id=1529081"

        local FriendlyFire = false

        local CanThrow = true

        local AttackPower = 1
        local AttackDamage = Conf.Damage.Value
        local HeadShot = Conf.Headshot.Value
        local AtackRechargeTime = 2
        local AttackRecharge = 1/AtackRechargeTime
        local AttackSpeed = 256

        local Equipped = false
        local Heartbeat = game:GetService("RunService").Heartbeat

        local Knives = {}

        --returns the wielding player of this tool
        local function getPlayer()
            local char = Tool.Parent
            return game:GetService("Players"):GetPlayerFromCharacter(char)
        end

        --helpfully checks a table for a specific value
        local function contains(t, v)
            for _, val in pairs(t) do
                if val == v then
                    return true
                end
            end
            return false
        end

        --tags a human for the ROBLOX KO system
        local function tagHuman(human)
            local tag = Instance.new("ObjectValue")
            tag.Value = getPlayer()
            tag.Name = "creator"
            tag.Parent = human
            game:GetService("Debris"):AddItem(tag)
        end

        --used by checkTeams
        local function sameTeam(otherHuman)
            local player = getPlayer()
            local otherPlayer = game:GetService("Players"):GetPlayerFromCharacter(otherHuman.Parent)
            if player and otherPlayer then
                return player.TeamColor == otherPlayer.TeamColor
            end
            return false
        end

        --use this to determine if you want this human to be harmed or not, returns boolean
        local function checkTeams(otherHuman)
            return not (sameTeam(otherHuman) and not FriendlyFire)
        end

        local function Morph(player, model)
            local Char = model:Clone()
            local Pos = player.Character:GetPrimaryPartCFrame()
            local Schar = game.StarterPlayer:FindFirstChild("StarterCharacter")
            game:GetService("StarterPlayer")
            player.Character:Destroy()
            player.Character = Char
            Char.Parent = workspace
            Char:SetPrimaryPartCFrame(Pos)
        end

        local function getKnife()
            local knife = Handle:clone()
            knife.Trail.Enabled = true
            knife.Transparency = 0
            knife.Hit.Pitch = math.random(90, 110)/100

            local lift = Instance.new("BodyForce")
            lift.force = Vector3.new(0, 196.2, 0) * knife:GetMass() * 0.8
            lift.Parent = knife

            local proj = Tool.Projectile:Clone()
            proj.Disabled = false
            proj.Parent = knife

            return knife
        end

        local TableOfPlayers = {

            "Bacon", 
            "Jary",
            "John",

        }

        local function equippedLoop()
            while Equipped do
                local dt = Heartbeat:wait()

                if AttackPower < 1 then
                    AttackPower = AttackPower + dt * AttackRecharge
                    if AttackPower > 1 then
                        AttackPower = 1
                    end 
                end

                Handle.Transparency = 1 - AttackPower
            end
        end

        local function onLeftDown(mousePos)
            local knife = getKnife()
            knife.CFrame = CFrame.new(Handle.Position, mousePos)
            knife.Velocity = knife.CFrame.lookVector * AttackSpeed * AttackPower
            local damage = AttackDamage * AttackPower
            local touched


            touched = knife.Touched:connect(function(hit)

                if hit:IsDescendantOf(Tool.Parent) then return end
                if contains(Knives, hit) then return end

                if hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
                    knife.Trail.Enabled = false
                    local human = hit.Parent.Humanoid

                        local player = game:GetService('Players'):GetPlayerFromCharacter(hit.Parent)

                        local Choice = math.random(1,#TableOfPlayers)

                        local modelC = TableOfPlayers[Choice]

                        local model = game.ReplicatedStorage.Morphs:FindFirstChild(modelC)

                        print(modelC)

                        if hit.Parent.Name ~= model then

                        Morph(player, model)

                        knife.Transparency = 1

                        elseif hit.Parent.Name == model then

                        tagHuman(human)
                        human:TakeDamage(damage)
                        knife.Hit:Play()

                        knife.Transparency = 1


                    end


                end

                knife.Projectile:Destroy()

                local w = Instance.new("Weld")
                w.Part0 = hit
                w.Part1 = knife
                w.C0 = hit.CFrame:toObjectSpace(knife.CFrame)
                w.Parent = w.Part0

                touched:disconnect()




            end)
            table.insert(Knives, knife)
            knife.Parent = workspace

            game:GetService("Debris"):AddItem(knife, 3.5)
            delay(1, function()
                knife.Transparency = 1
            end)

            Remote:FireClient(getPlayer(), "PlayAnimation", "Throw")    

            Handle.Throw.Pitch = 0.8 + 0.4 * AttackPower
            Handle.Throw:Play()

            AttackPower = 0

        end

        local function onRemote(player, func, ...)
            if player ~= getPlayer() then return end

            if func == "LeftDown" and CanThrow == true then
                CanThrow = false
                onLeftDown(...)
                wait(1)
                CanThrow = true
            end
        end

        local function onEquip()
            Equipped = true
            equippedLoop()
        end

        local function onUnequip()
            Equipped = false
        end


        Remote.OnServerEvent:connect(onRemote)
        Tool.Equipped:connect(onEquip)
        Tool.Unequipped:connect(onUnequip)


Ad

Answer this question