|
7 | 7 | ---------------------------------------------------------------------
|
8 | 8 |
|
9 | 9 | executeSQLCreateTable("ircmutes","player TEXT, serial TEXT, reason TEXT, admin TEXT, mute TEXT, duration TEXT")
|
| 10 | +local mutes = {} |
10 | 11 |
|
11 | 12 | ------------------------------------
|
12 | 13 | -- Utility
|
@@ -88,42 +89,66 @@ _setPlayerMuted = setPlayerMuted
|
88 | 89 | function setPlayerMuted (player,muted,reason,admin,time)
|
89 | 90 | if muted then
|
90 | 91 | executeSQLInsert("ircmutes","'"..tostring(getPlayerName(player)).."','"..tostring(getPlayerSerial(player)).."','"..tostring(reason).."','"..tostring(admin).."','"..tostring(getRealTime().timestamp*1000).."','"..tostring(time).."'")
|
| 92 | + mutes[player] = setTimer(setPlayerMuted,time,1,player,false) |
91 | 93 | else
|
92 | 94 | executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(player)).."'")
|
| 95 | + if mutes[player] then |
| 96 | + mutes[player] = nil |
| 97 | + end |
93 | 98 | end
|
94 | 99 | return _setPlayerMuted(player,muted)
|
95 | 100 | end
|
96 | 101 |
|
97 | 102 | addEventHandler("onPlayerUnmute",root,
|
98 | 103 | function ()
|
99 |
| - executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(player)).."'") |
| 104 | + executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'") |
| 105 | + if mutes[source] then |
| 106 | + mutes[source] = nil |
| 107 | + end |
100 | 108 | end
|
101 | 109 | )
|
102 | 110 |
|
103 |
| -setTimer(function () |
104 |
| - local results = executeSQLSelect("ircmutes","serial,mute,duration") |
105 |
| - if type(results) == "table" then |
106 |
| - for i,result in ipairs (results) do |
107 |
| - local mutetime = tonumber(result["mute"]) |
108 |
| - local duration = tonumber(result["duration"]) |
109 |
| - if mutetime and duration and (mutetime+duration) < (getRealTime().timestamp)*1000 then |
110 |
| - for i,player in ipairs (getElementsByType("player")) do |
111 |
| - if getPlayerSerial(player) == result["serial"] then |
112 |
| - _setPlayerMuted(player,false) |
113 |
| - outputChatBox("* "..getPlayerName(player).." has been unmuted",root,255,0,0) |
114 |
| - end |
115 |
| - end |
116 |
| - executeSQLDelete("ircmutes","serial = '"..tostring(result["serial"]).."'") |
| 111 | +addEventHandler("onPlayerJoin",root, |
| 112 | + function () |
| 113 | + local result = executeSQLSelect("ircmutes","serial,reason,mute,duration","serial = '"..getPlayerSerial(source).."'") |
| 114 | + if result and result[1] then |
| 115 | + local time = (tonumber(result[1]["mute"])+tonumber(result[1]["duration"]))-(getRealTime().timestamp*1000) |
| 116 | + if time < 50 then |
| 117 | + executeSQLDelete("ircmutes","serial = '"..tostring(getPlayerSerial(source)).."'") |
| 118 | + else |
| 119 | + _setPlayerMuted(source,true) |
| 120 | + mutes[source] = setTimer(setPlayerMuted,time,1,source,false) |
117 | 121 | end
|
118 | 122 | end
|
119 | 123 | end
|
120 |
| -end,5000,0) |
| 124 | +) |
121 | 125 |
|
122 |
| -addEventHandler("onPlayerJoin",root, |
| 126 | +addEventHandler("onPlayerQuit",root, |
123 | 127 | function ()
|
124 |
| - local result = executeSQLSelect("ircmutes","serial,reason","serial = '"..getPlayerSerial(source).."'") |
125 |
| - if result and result[1] then |
126 |
| - _setPlayerMuted(source,true) |
| 128 | + if mutes[source] then |
| 129 | + killTimer(mutes[source]) |
| 130 | + mutes[source] = nil |
| 131 | + end |
| 132 | + end |
| 133 | +) |
| 134 | + |
| 135 | +addEventHandler("onResourceStart",resourceRoot, |
| 136 | + function () |
| 137 | + local results = executeSQLSelect("ircmutes","serial,mute,duration") |
| 138 | + if type(results) == "table" then |
| 139 | + for i,result in ipairs (results) do |
| 140 | + local mutetime = tonumber(result["mute"]) |
| 141 | + local duration = tonumber(result["duration"]) |
| 142 | + if mutetime and duration and (mutetime+duration) < (getRealTime().timestamp)*1000 then |
| 143 | + for i,player in ipairs (getElementsByType("player")) do |
| 144 | + if getPlayerSerial(player) == result["serial"] then |
| 145 | + _setPlayerMuted(player,false) |
| 146 | + outputChatBox("* "..getPlayerName(player).." has been unmuted",root,255,0,0) |
| 147 | + end |
| 148 | + end |
| 149 | + executeSQLDelete("ircmutes","serial = '"..tostring(result["serial"]).."'") |
| 150 | + end |
| 151 | + end |
127 | 152 | end
|
128 | 153 | end
|
129 | 154 | )
|
|
0 commit comments