From 11c4a73414c3bf83c0fd337fd239b7ed359fb5a9 Mon Sep 17 00:00:00 2001 From: JetBoom Date: Fri, 19 Dec 2014 08:08:12 -0500 Subject: [PATCH] First noxapi implementation. No functionality yet. This is a test to see if the cache feature is working and the API calls are within reasonable amounts. --- .../zombiesurvival/gamemode/noxapi/client.lua | 2 +- .../zombiesurvival/gamemode/noxapi/server.lua | 71 +++++++++++++++---- .../zombiesurvival/gamemode/noxapi/shared.lua | 2 +- 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/gamemodes/zombiesurvival/gamemode/noxapi/client.lua b/gamemodes/zombiesurvival/gamemode/noxapi/client.lua index 8b13789..e95cb5d 100644 --- a/gamemodes/zombiesurvival/gamemode/noxapi/client.lua +++ b/gamemodes/zombiesurvival/gamemode/noxapi/client.lua @@ -1 +1 @@ - +-- nothing diff --git a/gamemodes/zombiesurvival/gamemode/noxapi/server.lua b/gamemodes/zombiesurvival/gamemode/noxapi/server.lua index c628ca2..476cf6a 100644 --- a/gamemodes/zombiesurvival/gamemode/noxapi/server.lua +++ b/gamemodes/zombiesurvival/gamemode/noxapi/server.lua @@ -1,13 +1,13 @@ --- TODO: Make requests buffer for 3 seconds or so using ?steamids=a,b,c,d --- TODO: _SUPPORTER_ needs to be networked - -local SUPPORTER_MESSAGE = "JetBoom says \"thank you for supporting my gamemodes!\" to you." +local SUPPORTER_MESSAGE = "JetBoom says: thank you for supporting my gamemodes!" local CACHE = { MaxSize = 128, + BufferTime = 6, Cache = {} } +local Buffer = {} + function CACHE:Set(steamid, memberlevel, nolookup) if nolookup then table.insert(self.Cache, {steamid, memberlevel}) @@ -67,27 +67,69 @@ function CACHE:Load() end end ---[[hook.Add("PlayerInitialSpawn", "noxapi", function(pl) - if NDB then return end +function CACHE:BufferRequest() + local IDS = {} + for i=1, math.min(10, #Buffer) do + IDS[#IDS + 1] = {Buffer[1][1], Buffer[1][2]} + table.remove(Buffer, 1) + end + local SIDS = {} + for k, v in pairs(IDS) do + SIDS[k] = v[1] + end + + http.Fetch("http://www.noxiousnet.com/api/player/memberlevel?steamids="..table.concat(SIDS, ","), function(body, len, headers, code) + local levels = string.Explode(",", body) + if #levels == #SIDS then + for k, v in pairs(levels) do + local steamid = IDS[k][1] + + local pl = IDS[k][2] + if pl and pl:IsValid() then + pl:SetDTBool(15, true) + pl:PrintMessage(HUD_PRINTTALK, SUPPORTER_MESSAGE) + end + + CACHE:Set(steamid, level) + end + end + end) + + if #Buffer > 0 then + CACHE:WaitForBuffer() + end +end + +function CACHE:WaitForBuffer() + if not timer.Exists("noxapibuffer") then + timer.Create("noxapibuffer", CACHE.BufferTime, 1, CACHE.BufferRequest) + end +end + +hook.Add("PlayerInitialSpawn", "noxapi", function(pl) + if NDB or pl:IsBot() then return end local steamid = pl:SteamID() local memberlevel = CACHE:Get(steamid) if memberlevel then if level == 1 or level == 2 then - pl._SUPPORTER_ = true - pl:PrintMessage(HUD_PRINTCONSOLE, SUPPORTER_MESSAGE) + pl:SetDTBool(15, true) + pl:PrintMessage(HUD_PRINTTALK, SUPPORTER_MESSAGE) end else http.Fetch("http://www.noxiousnet.com/api/player/memberlevel?steamid="..steamid, function(body, len, headers, code) local level = tonumber(body) or 0 if level == 1 or level == 2 then - pl._SUPPORTER_ = true - pl:PrintMessage(HUD_PRINTCONSOLE, SUPPORTER_MESSAGE) + pl:SetDTBool(15, true) + pl:PrintMessage(HUD_PRINTTALK, SUPPORTER_MESSAGE) end CACHE:Set(steamid, level) end) + + table.insert(Buffer, {steamid, pl}) + CACHE:WaitForBuffer() end end) @@ -106,7 +148,8 @@ hook.Add("ShutDown", "noxapi", function() end) concommand.Add("noxapi_forcerefresh", function(sender, command, arguments) - if NDB or sender._ForcedNoxAPILookup or sender._SUPPORTER_ then return end + if sender._ForcedNoxAPILookup or sender:IsNoxSupporter() then return end + sender._ForcedNoxAPILookup = true local steamid = sender:SteamID() @@ -117,10 +160,10 @@ concommand.Add("noxapi_forcerefresh", function(sender, command, arguments) local level = tonumber(body) or 0 if level == 1 or level == 2 then - pl._SUPPORTER_ = true - pl:PrintMessage(HUD_PRINTCONSOLE, SUPPORTER_MESSAGE) + pl:SetDTBool(15, true) + pl:PrintMessage(HUD_PRINTTALK, SUPPORTER_MESSAGE) end CACHE:Set(steamid, level) end) -end)]] +end) diff --git a/gamemodes/zombiesurvival/gamemode/noxapi/shared.lua b/gamemodes/zombiesurvival/gamemode/noxapi/shared.lua index 271700c..49e172f 100644 --- a/gamemodes/zombiesurvival/gamemode/noxapi/shared.lua +++ b/gamemodes/zombiesurvival/gamemode/noxapi/shared.lua @@ -7,5 +7,5 @@ function meta:IsNoxSupporter() return memberlevel == MEMBER_GOLD or memberlevel == MEMBER_DIAMOND end - return self._SUPPORTER_ + return self:GetDTBool(15) end