• Display motd when player types a word
    4 replies, posted
I use the motd_menu addon and recently the !motd command no longer displays the motd menu. Here's the code i have in sv_motd.lua: [CODE]AddCSLuaFile("autorun/client/motd.lua") function MOTDMenuPopup(ply) ply:ConCommand("showmotdmenu") end hook.Add("PlayerInitialSpawn", "MOTDMenuPopup", MOTDMenuPopup) function ChatMOTDMenuPopup(ply, text) local prefixs = {"!rules", "/rules", "!motd", "/motd"} local command = string.Explode(" ", text)[1] for _, v in pairs(prefixs) do if string.lower(command) == v then ply:ConCommand("showmotdmenu") end end end hook.Add("PlayerSay", "ChatMOTD", ChatMOTDMenuPopup)[/CODE] Any idea why it stopped working and how to fix it? Thanks in advance.
I've done a lot with chat-commands, but I've found the best way to deal with them is to redirect them directly to concommands. so ! is said publicly, and / is done privately. Ways to detect commands being entered: [lua] local _bSlash = string.sub( text, 1, 1 ) == "/";; local _bExclaim = string.sub( text, 1, 1 ) == "!"; local _bSlash = string.StartWith( text, "/" ); local _bExclaim = string.StartWith( text, "!" );[/lua] And what I use now: [lua] // // Do /commands privately, !commands publicly // local _bSlash = string.StartWith( text, "/" ); local _bExclaim = string.StartWith( text, "!" ); if ( _bSlash || _bExclaim ) then Player:ConCommand( string.sub( text, 2 ) ); if ( !_bExclaim ) then return ""; end end[/lua] The beauty of using ConCommand is that spaces are already interpreted as breaks, so each new word is a new argument for the function. You can add motd by simply doing: [lua]concommand.Add( "motd", function( ply, cmd, args ) // Open it end );[/lua] If you want to hide the concommands a little better, simple add salt / pepper ( a string before and/or after the string.sub( text, 2 ) in the ConCommand line, then add the same to each new concommand you add )
What about say commands though? The console command is working fine, its the say commands that broke.
I pasted the code; if you add that to GM:PlayerSay or simply hook it, it's all that needs to be done. Remember, PlayerSay is SERVER-side. [lua]hook.Add( "PlayerSay", "Acecool:ChatToConCommands", function( Player, text, private ) // // Do /commands privately, !commands publicly // local _bSlash = string.StartWith( text, "/" ); local _bExclaim = string.StartWith( text, "!" ); if ( _bSlash || _bExclaim ) then Player:ConCommand( string.sub( text, 2 ) ); if ( !_bExclaim ) then return ""; end end end );[/lua] Just by putting that into the server autorun it'll forward ! and / commands to concommands. Example: if I were to type "!motd", it would try executing that concommand and everyone would see; if I were to type "/motd" it would try executing the same concommand, but it's suppressed; no one sees the text.
Ah cool, thanks!
Sorry, you need to Log In to post a reply to this thread.