Well, I'm making a game and I'm currently working on the basic attacks, but I have a bit of a problem
wait(2)
function tagHumanoid(humanoid, player, name)
local creator_tag = Instance.new("ObjectValue")
creator_tag.Value = player
creator_tag.Name = name
creator_tag.Parent = humanoid
end
function untagHumanoid(humanoid,name)
if humanoid ~= nil then
local tag = humanoid:findFirstChild(name)
if tag ~= nil then
tag:Destroy()
end
end
end
local function onKeyDown( key )
if string.lower(key) == "x" then
print("R")
print("E")
print("S")
print("E")
print("T")
wait(1)
firing = false
firstances = 0
end
end
canfire = true
hitsound = script.HitSound
print("Setting variables")
local bin = script.Parent
local user
local player = game.Players.LocalPlayer
local torso = player.Character.Torso
local character = player.Character
local mouse = player:GetMouse()
local rays = character.Rays
firing = 0
firstances = 0
mouse.KeyDown:connect(onKeyDown)
function redfir()
if firstances > 0 then firstances = firstances - 1
end
end
function castray(object)
local start = object.Position
local lookAt = Vector3.new((object.CFrame.lookVector.X*4),0,(object.CFrame.lookVector.Z*4))
local ray = Ray.new(start, (lookAt))
hit, position = workspace:FindPartOnRay(ray,character)
end
print("Set them, setting functions")
function attack() -- problem is here, two "Instances" of this function start up on the Down value being changed, which causes two basic attacks to fire each time it loops, this is the problem
wait()
firstances = firstances + 1
delay(0.15, function() firstances = firstances - 1 end)
if firing == false and firstances < 2 then
firing = true
wait()
while bin.Down.Value == true and firstances <= 1 and firing == true do
print("Attacking!")
firstances = firstances + 1 print("Increasing")
delay(0.5, function() firstances = firstances - 1 end)
for i =1,3 do
castray(rays[i])
if hit then break end
--draw the debug rays for visualization
local distance = (position - torso.CFrame.p).magnitude
local rayPart = Instance.new("Part", user)
rayPart.Name = "RayPart"
rayPart.BrickColor = BrickColor.new("Bright red")
rayPart.Transparency = 0.5
rayPart.Anchored = true
rayPart.CanCollide = false
rayPart.TopSurface = Enum.SurfaceType.Smooth
rayPart.BottomSurface = Enum.SurfaceType.Smooth
rayPart.formFactor = Enum.FormFactor.Custom
rayPart.Size = Vector3.new(0.2, 0.2, distance)
rayPart.CFrame = CFrame.new(position, torso.CFrame.p) * CFrame.new(0, 0, -distance/2)
rayPart.Parent = workspace
--add it to debris so it disappears after 0.1 seconds
game.Debris:AddItem(rayPart, 0.05)
end
torso["Right Shoulder"].MaxVelocity = 10000
torso["Right Shoulder"].DesiredAngle = 3.2
hitsound:Play()
--if firstances > 0 then delay(1, function() firstances = firstances - 1 end)
if hit then
print(hit.Name)
local human = hit.Parent:FindFirstChild("Humanoid")
if human then
tagHumanoid(human, player,"Killer")
human:TakeDamage(150)
print("Nothin' hit")
end
wait(1)
torso["Right Shoulder"].MaxVelocity = 0.1
torso["Right Shoulder"].DesiredAngle = 0
untagHumanoid(human,"Killer")
end
end
end
firing = false
end
bin.Down.Changed:connect(attack)
print("Done")
while true do
wait(0.1)
print (firstances, firing)
end
That's the code, it goes along with a few other things, including another local script which handles the mouse and changes the "Down" value to achieve this. It creates two loops of the attack loop , which is my problem.
