I see by your coding style, you are setting up your game to fail in the long run. As an example, I am going to provide you some code which:
1) Could improve your coding style.
2) Create a more secure game.
01 | local PlayerManager = { } do |
02 | PlayerManager.RegisteredPlayers = { } ; |
04 | local Metatable = { __index = Methods } ; |
06 | function Methods:Destroy() |
07 | PlayerManager.RegisteredPlayers [ self.UserId ] = nil ; |
09 | function Methods:IsPlaying() |
10 | return self.Data.IsPlaying; |
12 | function Methods:ToggleIsPlaying() |
13 | self.Data.IsPlaying = not self.Data.IsPlaying; |
14 | return self:IsPlaying(); |
17 | local function RegisterNewPlayer(Player) |
21 | Data.UserId = Player.userId; |
23 | return setmetatable ( { Data = Data } ,Metatable); |
25 | function PlayerManager:Get(Player) |
26 | local RegisteredPlayer = self.RegisteredPlayers [ Player.userId ] ; |
27 | if ( not RegisteredPlayer) then |
28 | RegisteredPlayer = RegisterNewPlayer(Player); |
29 | self.RegisteredPlayers [ Player.userId ] = RegisteredPlayer; |
32 | return RegisteredPlayer; |
37 | game:GetService( "Players" ).PlayerAdded:connect( function (Player) |
38 | NewPlayer = PlayerManager:Get(Player); |
39 | print ( "New player " .. Player.Name .. " has joined the game!" ); |
41 | if (GameEventIsOccuring) then |
42 | NewPlayer:ToggleIsPlaying(); |
45 | game:GetService( "Players" ).PlayerRemoving:connect( function (Player) |
46 | PlayerManager:Get(Player):Destroy(); |
If you have any questions or concerns on what my code does, feel free to