Title: ULib Readme

*ULib v1.2 (released 11/13/06)*

ULib is a developer library for GMod (<http://gmod.garry.tv/>).

ULib provides such features as universal physics, AI utilities, user access lists, databases, and much, much more!

Visit our homepage at <http://ulyssesmod.net/>.

You can talk to us on our forums at <http://forums.ulyssesmod.net/> or in IRC at irc.gamesurge.net in #ulysses.

Group: Author

ULib is brought to you by..

* Brett "Megiddo" Smith - Contact: <megiddo@meg-tech.com>
* Spbogie - Contact: <spbogie@gmail.com>

Group: Requirements

ULib requires a working copy of gmod9, and that's it!

Group: Installation

To install ULib, simply extract the files from the archive to you gmod9 folder.
When you've done this, you should have a file structure like this--
<gmod9>/lua/ULib/init.lua
<gmod9>/lua/ULib/misc.lua
<gmod9>/materials/ULib/menu.vtf
etc..

Please note that installation is the same on dedicated servers, but the ULib addon (which offers client execute)
will *only* work on dedicated servers.

Group: Usage

Server admins do not "use" ULib, they simply enjoy the benefits it has to offer. 
After installing ULib correctly, scripts that take advantage of ULib will take care of the rest. 
Rest easy!

Group: Changelog
v1.2 - *(11/13/06)*
	* [FIX] getUsers not acting as documented on no users found.
	* [FIX] sendRectAndAnimate
	* [FIX] Minor security issue.
	* [FIX] Voting errors
	* [FIX] UCL now loads players who are currently connected (in case of late load)
	* [FIX] Say command callbacks are a lot harder to break now.
	* [CHANGE] UCL now puts less priority on listen server access, meaning you can override the default easier.
	* [CHANGE] Better notification system for errors. You can't miss them!
	* [ADD] GET_SUBCONCOMMAND
	* [ADD] Dynamic command access system.
	* [ADD] Logging system.
	* [ADD] New menu.
	* [ADD] ULib.addTimer - Nearly unbreakable timed functions with robust error checking.
	* [ADD] A plugin that allows you to get date/time and use client execute.
	* [ADD] Timestamp functions
	* [FIX] Well, lots more fixes, you can see them in the docs.

v1.1 - *(09/12/06)*
	* [ADD] Access callbacks - Calls when someone gets access
	* [ADD] isStringTrue - Returns boolean for strings like "on"/"off"
	* [ADD] Lists, stacks, and queues
	* [ADD] Tool mode hooks and utility functions
	* [ADD] DEFAULT_UCL_FILE define, for easy changing.
	* [ADD] Compat.lua, adds some ULX v1 compatibility.
	* [ADD] ULib concommand functions can now handle access. Sorry I put this off.
	* [CHANGE] Improved generateEntName
	* [CHANGE] UCL now uses steam logins instead of steamid's for security checks. This should provide more consistent results.
	* [CHANGE] You can specify a userid to getUser and getUsers so users may target themselves.
	* [FIX] addOutput params
	* [FIX] getSteamLogin can now handle bots
	* [FIX] ULib.log

v1.01 - *(07/28/06)*
	* [FIX] Console say problem.
	* [FIX] Menu access problem.

v1 - *(07/23/06)*
	* [ADD] Menu System
	* [ADD] ULib.db, a database that saves every 30 seconds
	* [ADD] ULib.db.uptime, a timer which keeps server uptime across server crashes
	* [ADD] recipRelationship, a relationship helper function.
	* [ADD] addRelationship
	* [ADD] vecCopy
	* [ADD] vecEqual
	* [ADD] ACCESS_NONE for UCL.
	* [CHANGE] mainUcl to ULib.mainUcl
	* [CHANGE] ULib.ULIB_VERSION to ULib.VERSION
	* [CHANGE] Standardized the error messages a bit
	* [CHANGE] Improved ULib.CONCOMMAND
	* [CHANGE] callOnDelete now calls callback faster (0.01 seconds from delete), this should make sure think functions don't mistakenly assume it exists.
	* [FIX] splitArgs can now handle empty strings
	* [FIX] ADD_SUBCONCOMMAND now works correctly
	* [FIX] serialize can now handle funky key strings
	* [FIX] execFile now handles lua commands properly
	* [REMOVE] ULib.commandToFnName
	* Lots more, all revisions are noted throughout the documentation.

v0.9 - *(06/24/06)* Initial version

Group: Developers

To all developers, I sincerely hope you enjoy what ULib has to offer!
If you have any suggestions, comments, or complaints, please tell us at <http://forums.ulyssesmod.net/>.

If you want an overview of what's in ULib, please visit the documentation at <http://ulyssesmod.net/docs/>

All ULib's functions are kept in the table "ULib" to prevent conflicts. If there's an error, functions return nil and the error message.

Revisions are kept in the function/variable documentation. If you don't see revisions listed, it hasn't changed since v0.9

If you're going to use ULib in a script, we recommend using the following code--
: assert( _file.Exists( "lua/ULib/init.lua" ), "<Insert script name> needs ULib to run!" )
: _OpenScript( "ULib/init.lua" )
: assert( ULib.VERSION >= 1, "<Insert script name> requires ULib version 1 or higher to run!" ) -- Insert what version you want in place of 1

Some important quirks developers should know about --
* forcedownload. I couldn't generate anything 100% perfect for forcedownload, but I finally coded a system that will restart the server when a new file is added, and keeps 
data in the .res files until there's a mapchange and they're not added. This makes removal somewhat delayed, but I don't think it should be a problem.
* execfile. This function calls lua commands with a userid of 0. Make note of this if the command should be able to be called from a config file. This also makes execfile
ideal to set things that should ONLY be set from a file.

Group: Credits

Thanks to Matt "/2 MAN" Keen for his help with various aspects of ULib, and for allowing me to bounce ideas off him.
Thanks to JamminR, who is always there to offer help and advice to those who need it.

Group: License

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. 
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to 
Creative Commons
543 Howard Street
5th Floor
San Francisco, California 94105
USA
