Ulysses
General => Developers Corner => Topic started by: Storm on January 16, 2014, 03:00:25 AM
-
Would it even be possible with ULX to write a script so you could set a message by STEAM ID that would display to a player next time he joins the server? For example, you see in the logs that a player has been breaking rule X, so you leave a message for him about rule X and the next time he joins, he gets the notification.
-
Let me try to understand this my way. You have "Mr. Player", he has the Steam ID "STEAM_0:0:87654321".
He has left the server, what you want to do is to something like: "!message STEAM_0:0:87654321 'Hey, you broke rule #1'" that will display the next time he joins the server?
-
Yes exactly! Or even setting it from RCON would be fine.
-
I made a ULX command that should work. I haven't used "PData" with strings before, but you can try and check the file I've attached.
Keep in mind it's untested, I'm in class and unable to test it atm. Just install it into addons/ulx/lua/ulx/modules/sh/ and it should load as any other ULX addon.
Here's the 'raw' code:
function ulx.setmessage( calling_ply, steamid, msg )
steamid = string.upper( steamid ) -- Steam ID needs to be uppercase.
if not ULib.isValidSteamID( steamid ) then -- *cough cough* Copied from user.lua in ULX.
ULib.tsayError( calling_ply, "Invalid steamid.", true )
return false
else
util.SetPData( steamid, "ULXSetMessage", msg )
ulx.fancyLogAdmin( calling_ply, true, "#A set a message to print for #s when the player joins.", steamid )
end
end
local setmessage = ulx.command( "Utility", "ulx setmessage", ulx.setmessage, "!setmessage" )
setmessage:addParam{ type=ULib.cmds.StringArg, hint="Player Steam ID" }
setmessage:addParam{ type=ULib.cmds.StringArg, hint="Message to print for the player" }
setmessage:defaultAccess( ULib.ACCESS_ADMIN )
setmessage:help( "Set's a message to a certain Steam ID that will print when they join." )
function SetMessagePrint( ply )
if ply:GetPData( "ULXSetMessage", 0 ) ~= 0 then -- If "ULXSetMessage" is not set to "0" (0 is default).
ply:ChatPrint( ply:GetPData( "ULXSetMessage" ) )
ply:RemovePData( "ULXSetMessage" ) -- Makes sure to remove the message after it's printed. Will only print once.
end
end
hook.Add( "PlayerInitialSpawn", "SetMessagePrint", SetMessagePrint )
Edit: Forgot to tell you something, usage: "ulx setmessage STEAM_0:0:00000000 "You broke the rules!!!!!""
Also added chat usage: "!setmessage STEAM_ID "Message""
Updated the file as well (attachment)
-
Good timing, I am currently making a whole server mail addon that I will probably post here, and you can do exactly what you need with it.
-
Good timing, I am currently making a whole server mail addon that I will probably post here, and you can do exactly what you need with it.
Server mail? You mean emailing through the server almost like a form?
-
Hmm. I put it in the folder you said to but I an getting this error when I use the ulx setmessage, etc command:
17:10:07 [ERROR] addons/ulib/lua/ulib/shared/commands.lua:890: attempt to index field 'type' (a nil value)
1. __fn - addons/ulib/lua/ulib/shared/commands.lua:890
2. unknown - addons/ulib/lua/ulib/shared/commands.lua:1296
3. unknown - lua/includes/modules/concommand.lua:69
[ERROR] addons/ulib/lua/ulib/shared/commands.lua:890: attempt to index field 'type' (a nil value)
1. __fn - addons/ulib/lua/ulib/shared/commands.lua:890
2. unknown - addons/ulib/lua/ulib/shared/commands.lua:1296
3. unknown - lua/includes/modules/concommand.lua:69
-
Server mail? You mean emailing through the server almost like a form?
Yeah pretty much. Send messages to online and offline players, etc. Will post soon, it's almost finished.
-
Hmm. I put it in the folder you said to but I an getting this error when I use the ulx setmessage, etc command:
17:10:07 [ERROR] addons/ulib/lua/ulib/shared/commands.lua:890: attempt to index field 'type' (a nil value)
1. __fn - addons/ulib/lua/ulib/shared/commands.lua:890
2. unknown - addons/ulib/lua/ulib/shared/commands.lua:1296
3. unknown - lua/includes/modules/concommand.lua:69
[ERROR] addons/ulib/lua/ulib/shared/commands.lua:890: attempt to index field 'type' (a nil value)
1. __fn - addons/ulib/lua/ulib/shared/commands.lua:890
2. unknown - addons/ulib/lua/ulib/shared/commands.lua:1296
3. unknown - lua/includes/modules/concommand.lua:69
Hmmm... not sure what could be causing this. If someone else doesn't help you, I'll test it/attempt to fix it tomorrow after school (on my phone atm).
Yeah pretty much. Send messages to online and offline players, etc. Will post soon, it's almost finished.
I didn't know that was even possible. Sounds awesome
-
Alright, I fixed the first error, it was a mistake on my end. I've edited the code for that error to not show.
However, I'm having an issue with util.SetPData (http://wiki.garrysmod.com/page/util/SetPData). I don't know if it's my server, or if it's something else, but apparently that is "a nil value". So for any "GLua professionals", please help me.
-
Alright, I fixed the first error, it was a mistake on my end. I've edited the code for that error to not show.
However, I'm having an issue with util.SetPData (http://wiki.garrysmod.com/page/util/SetPData). I don't know if it's my server, or if it's something else, but apparently that is "a nil value". So for any "GLua professionals", please help me.
What is the problem exactly?
-
What is the problem exactly?
It doesn't save the data at all and errors me out.
I tried making a simple test script where the Steam ID and message were already fixed (static), it still errored me out.
The code is pretty much what I put above.
The error:
attempt to call field 'SetPData' (a nil value)
-
Are you calling module() in the file where you're using SetPData?
-
Are you calling module() in the file where you're using SetPData?
I didn't know that was necessary.
-
No, it's not. I was just trying to get an idea of what may be wrong.
-
Well. Let's just say it like this. This code:
function ulx.setmessage( calling_ply, steamid, msg )
steamid = string.upper( steamid ) -- Steam ID needs to be uppercase.
if not ULib.isValidSteamID( steamid ) then
ULib.tsayError( calling_ply, "Invalid steamid.", true )
return false
else
util.SetPData( steamid, "ULXSetMessage", msg )
ulx.fancyLogAdmin( calling_ply, true, "#A set a message to print for #s when the player joins.", steamid )
end
end
local setmessage = ulx.command( "Utility", "ulx setmessage", ulx.setmessage, "!setmessage" )
setmessage:addParam{ type=ULib.cmds.StringArg, hint="Player Steam ID" }
setmessage:addParam{ type=ULib.cmds.StringArg, hint="Message to print for the player" }
setmessage:defaultAccess( ULib.ACCESS_ADMIN )
setmessage:help( "Set's a message to a certain Steam ID that will print when they join." )
function SetMessagePrint( ply )
if ply:GetPData( "ULXSetMessage", 0 ) ~= 0 then -- If "ULXSetMessage" is not set to "0" (0 is default).
ply:ChatPrint( ply:GetPData( "ULXSetMessage" ) )
ply:RemovePData( "ULXSetMessage" ) -- Makes sure to remove the message after it's printed. Will only print once.
end
end
hook.Add( "PlayerInitialSpawn", "SetMessagePrint", SetMessagePrint )
Is what I use, nothing else. And it gives me an error. I have absolutely no idea what could be wrong, honestly.