I'm looking for as many ways as possible to improve my chat commands, making it efficient and easy to use. I would really appreciate if someone could suggest better methods I could apply to my current code. Thanks!
Code:
local plrService = game:GetService("Players")
local plrsPermitted = require(game.ServerStorage.PlayerNamesPermitted)
local ValidCmds = require(game.ServerStorage.ValidCommands)
local WarnEvent = game.ReplicatedStorage.ToWarn
function CheckPlayersPermisson(PlayerToCheck,ModuleToSearch)
local PlayerVar
for _, permittedPlayer in pairs(ModuleToSearch) do
if PlayerToCheck.Name == permittedPlayer then
PlayerVar = PlayerToCheck
end
end
if PlayerVar ~= nil then
return true
else
return false
end
end
function SearchForClosestMatch(String, CurrentTableOfPlayers)
for _, plr in pairs(CurrentTableOfPlayers) do
if string.match(plr.Name, "^"..String) then
return plr
else
return nil
end
end
end
function CheckCmd(CmdString, ModuleToSearch)
for _, validCmd in pairs(ModuleToSearch) do
if CmdString == validCmd then
return true
end
end
end
plrService.PlayerAdded:Connect(function(Player)
local WarnsValue = Instance.new("NumberValue")
WarnsValue.Value = 0
WarnsValue.Parent = Player
WarnsValue.Name = "Warns"
local Allowed = false
if CheckPlayersPermisson(Player, plrsPermitted) then
Allowed = true
end
Player.Chatted:Connect(function(StringMsg)
if Allowed then
local BrokenUpMessage = StringMsg:split(" ") --Table
local Cmd = BrokenUpMessage[1]
if CheckCmd(Cmd, ValidCmds) then
if Cmd == ValidCmds[1] then
local TargPlrAbrv = BrokenUpMessage[2]
if SearchForClosestMatch(TargPlrAbrv, plrService:GetPlayers()) ~= nil then
local FoundPlr = SearchForClosestMatch(TargPlrAbrv,plrService:GetPlayers())
local Reason = StringMsg:split(TargPlrAbrv)[2]
FoundPlr:Kick(Reason)
else
warn("Didn't Find Player")
end
end
end
if CheckCmd(Cmd, ValidCmds) then
if Cmd == ValidCmds[2] then
local TargetedPlrString = BrokenUpMessage[2]
local ActualPlayer = SearchForClosestMatch(TargetedPlrString, plrService:GetPlayers())
local WarnValInTarPlr =SearchForClosestMatch(TargetedPlrString, plrService:GetPlayers()):FindFirstChild("Warns")
if WarnValInTarPlr then
WarnEvent:FireClient(ActualPlayer)
WarnValInTarPlr.Value += 1
if WarnValInTarPlr.Value == 3 then
WarnValInTarPlr.Parent:Kick("Max Warns")
end
end
end
end
end
end)
end)
P.S. Sorry for the big ask, I'm just looking for ways to become a better Scripter.
