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)
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.