local ____lualib = require("lualib_bundle") local __TS__Class = ____lualib.__TS__Class local __TS__New = ____lualib.__TS__New local __TS__ArrayIsArray = ____lualib.__TS__ArrayIsArray local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys local ____exports = {} local ____server_config = require("server_config") local SERVER_CONFIG = ____server_config.SERVER_CONFIG local ____api_helper = require("api_helper") local setApiHeaders = ____api_helper.setApiHeaders ____exports.LeaderboardServer = __TS__Class() local LeaderboardServer = ____exports.LeaderboardServer LeaderboardServer.name = "LeaderboardServer" LeaderboardServer.____file_path = "scripts/vscripts/leaderboard_server.lua" function LeaderboardServer.prototype.____constructor(self) self.serverUrl = SERVER_CONFIG.API_URL self:setupEventListeners() end function LeaderboardServer.getInstance(self) if not ____exports.LeaderboardServer.instance then ____exports.LeaderboardServer.instance = __TS__New(____exports.LeaderboardServer) end return ____exports.LeaderboardServer.instance end function LeaderboardServer.prototype.setupEventListeners(self) CustomGameEventManager:RegisterListener( "request_leaderboard", function(source, event) local playerId = event.PlayerID local limit = event.limit or 20 local offset = event.offset or 0 local rawBoard = event.board ~= nil and event.board ~= nil and tostring(event.board) or "rating" local board = string.lower(rawBoard) if board ~= "rating" and board ~= "wealth" and board ~= "impossible" then board = "rating" end self:loadLeaderboardFromServer(playerId, limit, offset, board) end ) end function LeaderboardServer.prototype.loadLeaderboardFromServer(self, playerId, limit, offset, board) local request = CreateHTTPRequestScriptVM( "GET", (((((self.serverUrl .. "/leaderboard?limit=") .. tostring(limit)) .. "&offset=") .. tostring(offset)) .. "&board=") .. board ) setApiHeaders(nil, request) request:Send(function(result) do local function ____catch(____error) local player = PlayerResource:GetPlayer(playerId) if player then CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Data processing error"}) end end local ____try, ____hasReturned, ____returnValue = pcall(function() local player = PlayerResource:GetPlayer(playerId) if not player then return true end if result.StatusCode == 0 then CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Server unavailable"}) return true end if result.StatusCode >= 200 and result.StatusCode < 300 then do local function ____catch(decodeError) CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "JSON parsing error"}) end local ____try, ____hasReturned = pcall(function() local responseData = {json.decode(result.Body)} local data = nil if __TS__ArrayIsArray(responseData) and #responseData > 0 then data = responseData[1] elseif responseData and type(responseData) == "table" then data = responseData end if data then if data.leaderboard ~= nil and data.leaderboard ~= nil then local leaderboard = data.leaderboard local leaderboardLength = 0 if __TS__ArrayIsArray(leaderboard) then leaderboardLength = #leaderboard or 0 elseif type(leaderboard) == "table" then local keys = __TS__ObjectKeys(leaderboard) leaderboardLength = keys ~= nil and keys ~= nil and #keys or 0 end local total = data.total or leaderboardLength CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {success = true, leaderboard = leaderboard, total = total, board = data.board or board}) elseif __TS__ArrayIsArray(data) then CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {success = true, leaderboard = data, total = #data, board = board}) else CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Data decode error: leaderboard not found"}) end else CustomGameEventManager:Send_ServerToPlayer(player, "leaderboard_data", {error = "Ошибка декодирования данных: данные пусты"}) end end) if not ____try then ____catch(____hasReturned) end end else CustomGameEventManager:Send_ServerToPlayer( player, "leaderboard_data", {error = "Server error: " .. tostring(result.StatusCode)} ) end end) if not ____try then ____hasReturned, ____returnValue = ____catch(____hasReturned) end if ____hasReturned then return ____returnValue end end end) end return ____exports