Im editing a finished gun template for my game. I am trying to make the damage of the weapon equal to the leaderboard stat strength.
But i keep getting the error W001 Unknown Global "player" And also, they gun doesnt shoot or work at all when testing in studio. But it works when BaseDamage is set to a number.
This is most of the weapon code (its too long to post):
------------------------------------------Gun info ToolName="Pistol" ClipSize=20 ReloadTime=2 Firerate=1 MinSpread=0.002 MaxSpread=0.05 SpreadRate=0.02 BaseDamage=player.leaderstats.strength.Value*player.leaderstats.rebirths.Value--PROBLEM rays=0 automatic=false burst=false shot=false --Shotgun BarrlePos=Vector3.new(0,0,0) Cursors={"rbxasset://textures\\GunCursor.png"} ReloadCursor="rbxasset://textures\\GunWaitCursor.png" barrel_1 = script.Parent:findFirstChild("barrelpos1") or script.Parent.Handle barrel_2 = script.Parent:findFirstChild("barrelpos2") or script.Parent.Handle double = false --Double Wielded doublemode = 1 -- 1 is alternating, 2 is both if not game.Lighting:findFirstChild("BulletTexture") then p = Instance.new("Part") p.Parent = game.Lighting p.Name = "BulletTexture" p.CanCollide = false p.formFactor = "Custom" p.Size = Vector3.new(1,0.1,1) p.Transparency = 1 g = Instance.new("SpecialMesh") g.Parent = p end ------------------------------------- Tool = script.Parent p = Instance.new("Part") p.Parent = game.Lighting p.Name = "BulletTexture" p.CanCollide = false p.formFactor = "Custom" p.Size = Vector3.new(1,0.1,1) p.Transparency = 1 g = Instance.new("SpecialMesh") g.Parent = p GuiEffect = "Sine" --[[Sine slows down as it nears, Bounce overshoots then eases back, Linear is smooth constant movement, and others which amplify the magnitude of the effects (EX: Quad slows down later than Sine, Elastic overshoots goal a few times.)]] ------------------------------------- local a = Instance.new("ScreenGui") local Ammo = Instance.new("TextLabel",a) Ammo.Name = "Ammo" Ammo.Position = UDim2.new(.25,0,01,0) Ammo.Size = UDim2.new(.01,0,-.3,0) Ammo.BackgroundTransparency = 1 Ammo.FontSize = Enum.FontSize.Size18 ------------------------------------- equiped=false dw = false sp=script.Parent RayLength=1000 Spread=.15 enabled=true reloading=false down=false r=game:service("RunService") last=0 last2=0 last3=0 last4=0 last5=0 last6=0 UseDouble = false Bullet=Instance.new("Part") Bullet.Name="Bullet" Bullet.BrickColor=BrickColor.new("White") Bullet.Anchored=true Bullet.CanCollide=false Bullet.Locked=true Bullet.Size=Vector3.new(1,1,1) Bullet.Transparency=0.5 Bullet.formFactor=0 Bullet.TopSurface=0 Bullet.BottomSurface=0 mesh=Instance.new("SpecialMesh") mesh.Parent=Bullet mesh.MeshType="Brick" mesh.Name="Mesh" mesh.Scale=Vector3.new(.15,.15,1) function check() sp.Name=ToolName.."" end function computeDirection(vec) return vec.unit end -----------------------------------------------------Raycasting functions function raycursive(start,dir,ignore) -- bad pun lol newdir = (start+dir)-start local hit,pos = workspace:findPartOnRay(Ray.new(start,newdir.unit*999.999),ignore) if hit and rays <= 5 then if (hit.CanCollide==false and (hit.Parent.Name~="" and hit.Name ~= "Left Arm" and hit.Name ~= "Left Leg" and hit.Name ~= "Right Arm" and hit.Name ~= "Right Leg")) then rays = rays + 1 return raycursive(pos,dir,hit) else rays = 0 return hit,pos end else return hit,pos end end ------------------------------------- function tagHumanoid(humanoid) local plr=game.Players:playerFromCharacter(sp.Parent) if plr~=nil then local tag=Instance.new("ObjectValue") tag.Value=plr tag.Name="creator" tag.Parent=humanoid delay(2,function() if tag~=nil then tag.Parent=nil end end) end end function reload(mouse) reloading=true mouse.Icon=ReloadCursor local bulletshow = game.Players.LocalPlayer.PlayerGui:findFirstChild("BulletShow") if bulletshow then btload = (ClipSize-sp.Ammo.Value)/ClipSize btloadtime = btload*ReloadTime bulletshow.Ammo.Text = ""..script.Parent.Ammo.Value.." / "..ClipSize.." " end while sp.Ammo.Value<ClipSize and reloading and enabled do wait(ReloadTime/ClipSize) if reloading then sp.Ammo.Value=sp.Ammo.Value+1 check() else break end end check() mouse.Icon=Cursors[1] reloading=false bulletshow.Ammo.Text = ""..script.Parent.Ammo.Value.." / "..ClipSize.." " end
This is the code i have in ServerScriptStorage that sets the leaderboard stats:
local datastore = game:GetService("DataStoreService") local data1 = datastore:GetDataStore("mystrengthdata") local data2 = datastore:GetDataStore("myrebirthsdata") game.Players.PlayerAdded:connect(function(player) local leaderstats = Instance.new("Folder",player) leaderstats.Name = "leaderstats" local rebirths = Instance.new("IntValue", leaderstats) rebirths.Name = "rebirths" local strength = Instance.new("IntValue", leaderstats) strength.Name = "strength" local rebirthcost = Instance.new("IntValue", leaderstats) rebirthcost.Name = "rebirthcost" local points = Instance.new("IntValue", leaderstats) points.Name = "points" strength.Value = data1:GetAsync(player.UserId) or 1 data1:SetAsync(player.UserId, strength.Value) rebirths.Value = data2:GetAsync(player.UserId) or 1 data2:SetAsync(player.UserId, rebirths.Value) game.Players.PlayerRemoving:connect(function() data1:SetAsync(player.UserId, strength.Value) data2:SetAsync(player.UserId, rebirths.Value) end) end)
I would be thankful for any help!