How are you suppose to use the various string functions to create admin commands?
How do you figure out which player/value is being referred to in a piece of text?
Any helpful sources?
How are you suppose to use the various string functions to create admin commands?
How do you figure out which player/value is being referred to in a piece of text?
Any helpful sources?
This is probably the best resource to start with:
https://www.robloxdev.com/api-reference/event/Player/Chatted
I recommend working with the Lua chat system over any other method of listening to chat messages, as it provides a pretty nice interface for affecting both the game and the output chat messages.
https://www.robloxdev.com/articles/Lua-Chat-System
You can create Command Functions that will swallow messages that meet a command format, and execute code on the server. The link above has a nice example for how these work. In my game I create a table of command functions that I then register with ChatService in a loop.
You can also create Filter Functions that can affect the appearance and content of a chat message (ie. message color, text). I have a decent example of a Filter Function here: https://www.roblox.com/library/653695817/Color-Chat-and-Admin-List
Is there a source of how to use string patterns?
String patterns in Lua are yikes, but here are some resources I’ve used.
https://www.lua.org/pil/20.2.html
https://www.fhug.org.uk/wiki/wiki/doku.php?id=plugins:understanding_lua_patterns
Why do you need complex patterns?
I need a way to split up a command string
for example
"set ninja900500 level 500"
I need to split that up into 4 parts
I use this code for one of my commands. Doesn’t need to be complicated.
(%S+) matches a word, and (.+) matches anything from that point onwards.
local a,b,playerName,property,value = string.find(message, "/cmd (%S+) (%S+) (.+)")
If you want to have simple admin commands you can match out the command itself and then match out the arguments and do something like this
if funcs[cmd] then
ran,returns = pcall(funcs[cmd],sender,unpack(args))
end
and an example command could be
funcs.kill = function(sender,target)
if isList(target) then
local targets = listify(target)
for _,playername in next,targets do
killByName(playername)
end
else
killByName(target)
end
end
Tutorial I made a while ago. Might be helpful