local trackyServerId = "315407" local trackyServerKey = "939c355d26eea61883b77eb4393fd2d3" local endpoints = { ["vote"] = "https://trackyserver.com/server/%d", ["status"] = "https://api.trackyserver.com/vote/?action=status&key=%s&steamid=%s", ["claim"] = "https://api.trackyserver.com/vote/?action=claim&key=%s&steamid=%s" } -- Load current player vote count from file local voteCache = LoadResourceFile(GetCurrentResourceName(), "votes.json") if (not voteCache) then voteCache = {} else voteCache = json.decode(voteCache) end -- If user doesn't have the convars set. Tell them if trackyServerId == -1 then print("Please set the convar \"serverVoter:serverId\" to your server ID from https://trackyserver.com") end if trackyServerKey == "nil" then print("Please set the convar \"serverVoter:serverKey\" to your server key from https://trackyserver.com") end --[[ Register commands players can use ]]-- RegisterCommand("vote", function(src, args, raw) -- Send them the URL to vote --TriggerClientEvent("serverVote:showSubtitle", src, "vote", string.format(endpoints["vote"], trackyServerId), 10000) print("^1Please vote at: https://www.trackyserver.com/server/315407 & link is also found in \nthe F1 Menu!") end, false) RegisterCommand("checkvote", function(src, args, raw) -- TODO: Check steam identifier with the trackyserver API local source = src local steamIdOrig, steamIdentifier for k,v in pairs(GetPlayerIdentifiers(source)) do if (string.starts(v, "steam:")) then steamIdentifier = tonumber(string.sub(v, 7), 16) steamIdOrig = v end end if (steamIdentifier == nil) then --TriggerClientEvent("serverVote:showSubtitle", source, "steam_not_found", nil) print("^1Your steam can't be found!") return end print("Checking if " .. steamIdentifier .. " has voted") local statusUrl = string.format(endpoints["status"], trackyServerKey, steamIdentifier) PerformHttpRequest(statusUrl, function(statusCode, responseText, _) --local source = source --local steamIdentifier = steamIdentifier if (statusCode ~= 200) then print("Error getting status: " .. statusCode .. " : " .. tostring(responseText)) return end print("src = " .. tostring(source)) if (responseText == "0") then print("not voted") -- Not yet voted --TriggerClientEvent("serverVote:showSubtitle", source, "vote_not_found", string.format(endpoints["vote"], trackyServerId)) print("^1You have not voted. Go to https://trackyserver.com/sserver/315407") elseif (responseText == "1") then print("claiming") -- Voted, not claimed -- Claim it PerformHttpRequest(string.format(endpoints["claim"], trackyServerKey, steamIdentifier), function(statusCode, responseText, _) if (statusCode ~= 200) then print("Error claiming vote") return end if (responseText == "0") then --TriggerClientEvent("serverVote:showSubtitle", source, "vote_not_found", string.format(endpoints["vote"], trackyServerId)) print("^1You have not voted. Go to https://trackyserver.com/sserver/315407") elseif (responseText == "1") then -- Just claimed it... Yey time for a reward claimedVote(source, steamIdOrig) elseif (responseText == "2") then -- already claimed. shouldn't get this because of the checks above but, just in case --TriggerClientEvent("serverVote:showSubtitle", source, "vote_already_claimed") print("^1Your vote has already been claimed!") end end, "GET", "", {}) elseif (responseText == "2") then print("already claimed") -- Have voted, and claimed --TriggerClientEvent("serverVote:showSubtitle", source, "vote_already_claimed") print("^1Your vote has already been claimed!") end end, "GET", "", {}) end, false) -- Utility functions function claimedVote(playerId, steamId) if (voteCache[steamId]) then voteCache[steamId] = voteCache[steamId] + 1 else voteCache[steamId] = 1 end -- Save the updated data to file SaveResourceFile(GetCurrentResourceName(), "votes.json", json.encode(voteCache, {indent = true})) local amountOfVotes = voteCache[steamId] local playerName = GetPlayerName(playerId) print("Current vote " .. amountOfVotes) if Config.Rewards["@"] and type(Config.Rewards["@"] == "table") then for k,v in ipairs(Config.Rewards["@"]) do local command = v command = string.gsub(command, "{playername}", playerName) command = string.gsub(command, "{playerid}", playerId) ExecuteCommand(command) end end if Config.Rewards[tostring(amountOfVotes)] then for k,v in ipairs(Config.Rewards[tostring(amountOfVotes)]) do local command = v command = string.gsub(command, "{playername}", playerName) command = string.gsub(command, "{playerid}", playerId) ExecuteCommand(command) end end end -- Nicked from http://lua-users.org/wiki/StringRecipes function string.starts(String,Start) return string.sub(String,1,string.len(Start))==Start end