Here is how gag and mute currently work:
1. When a player is gagged/muted, a variable is set on their player object telling ULX that they are gagged/muted.
2. When they try and talk they are not allowed to.
Note: Variable flags are not saved across session so essentially a player will become unmuted/gagged if the server changes map or restarts.
Here is how gagging/muting would HAVE to work for it to work with timers:
1. When a player is gagged/muted, a variable is set on their player object telling ULX that they are gagged/muted.
2. an entry is created in an SQL file or text file storing the end time of the gag/mute as well as any other information that would need to be tracked.
3. When the server changed maps or restarted ULX would have to look for and load in all related data for mutes/gags.
4. ULX would then have to go through and prune any gags/mutes that have expired since the last time it checked.
5. When a player joins the server ULX will then check to see if they are gagged/muted and apply the flag if necessary
6. When a gag/mute expires ULX will need to remove the entry from the database or file
7. If a player tried to talk ULX will check to see if they have the gag/mute flag and allow or not allow them accordingly.
Any time you start writing entries like this to files/databases you are creating the possibility for error and failure which just causes more problems than its worth.
Having a ban time makes sense.. and we've already had lots of issues with it alone.. (just search the support forum for bans)
The way I see it, if someone is doing something that deserves to be gagged/muted AT ALL (be especially for more than a single server session) then they should probably just get banned, but that's just my philosophy.