Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Why can't I access the Player in a module script from this setup?

When a player presses a key, it fires an event. The event runs whatever code is in the modulescript. But I always get the same error - about the Player, no matter how I go about it.

Client:

local key = "z"
local Mouse = game.Players.LocalPlayer:GetMouse()
local Player = game.Players.LocalPlayer
SpellDisableCheck = false
Mouse.KeyDown:Connect(function(Key)
	if Key:lower() == key and SpellDisableCheck == false then
		SpellDisableCheck = true
		game.ReplicatedStorage.Resources.MagicEvents.WaterSlicer:FireServer(Player, script.Damage)
		SpellDisableCheck = false
	end
end)

Module:

local WaterMagic = {}
function WaterMagic.Slicer(Player, damage)
	print("z pressed")
	local Animation = Instance.new("Animation")
	Animation.AnimationId = "http://www.roblox.com/asset/?id=357408908"
	local track = Player.Character.Humanoid:LoadAnimation(Animation)
	track:Play()
	local Torso = Player.Character.Torso
	local rand = {0, 15, -15, 45, -45}
	local Part = game.ReplicatedStorage.Resources.Parts:FindFirstChild("WaterSlicer")
	for i = 1, 10 do
		local b = Part:Clone()
		b.CFrame = Torso.CFrame * CFrame.new(math.random(-3, 3), math.random(0, 3), -3) * CFrame.Angles(180, math.rad(rand[math.random(1, #rand)]), 0)
		local f= Instance.new("StringValue", damage)
		f.Name = "Creator"
		f.Value = Player.Name
		local Damage = Instance.new("IntValue", damage)
		Damage.Name = "Damage"
		Damage.Value = 1 + (game.ReplicatedStorage.Resources.Remotes.Functions.GetPlayerStrength:InvokeServer() / 100)
		damage.Disabled = false
		local v = Instance.new("BodyVelocity", b)
		v.maxForce = Vector3.new(math.huge, math.huge, math.huge)
		v.velocity = Torso.CFrame.lookVector * 125
		b.Anchored = false
		game:GetService("Debris"):AddItem(b, 4)
		b.Parent = workspace
		wait()
	end
	track:Stop()
end


return WaterMagic

The serverscript is basically creating a remotevent which requires the module script, and runs the respective function. Just incase I explained this bad, here is the serverscript.

local EventStore = game.ReplicatedStorage.Resources.MagicEvents
local Modules = game.ServerStorage.Magics
---Water Magic
local Water = require(Modules.Water)
local slicer = Instance.new("RemoteEvent", EventStore)
slicer.Name = "WaterSlicer"
slicer.OnServerEvent:Connect(function(Player, Damage)
	Water.Slicer()
end)

4 comments

1

can we see what the output says?

1

can we see what the output says?

0

What does the error say? At which line in your code is it?

0

Line 6 of the modulescript - 'attempt to index player was nil'

1 answer

You're not passing in the arguments to the ModuleScript. Look at line 8 in the server script. You simply call Water.Slicer() instead of Water.Slicer(Player, damage), which is exactly why the ModuleScript can't find a player object.

This discussion is preserved as it was. New answers, comments, and votes are closed.