Files
Dota-Zombie-Invasion/scripts/vscripts/equipment/api.lua
T
achmad 72b73c4dd6 feat: replace CreateHTTPRequest with CreateHTTPRequestScriptVM
Allows the game client to make HTTP API calls from a listen server
(local lobby) instead of requiring a Steam dedicated server.
CreateHTTPRequestScriptVM has the exact same API signature but works
in both dedicated server and listen server contexts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 17:36:08 +07:00

94 lines
2.9 KiB
Lua

local ____lualib = require("lualib_bundle")
local __TS__ArrayIsArray = ____lualib.__TS__ArrayIsArray
local ____exports = {}
local ____api_helper = require("api_helper")
local encodeApiBody = ____api_helper.encodeApiBody
local setApiHeaders = ____api_helper.setApiHeaders
local ____server_config = require("server_config")
local SERVER_CONFIG = ____server_config.SERVER_CONFIG
local function decodeBody(self, body, fallback)
do
local ____try, ____hasReturned, ____returnValue = pcall(function()
local parsed = {json.decode(body)}
if __TS__ArrayIsArray(parsed) and #parsed > 0 then
return true, parsed[1]
end
if parsed and type(parsed) == "table" then
return true, parsed
end
end)
if ____try and ____hasReturned then
return ____returnValue
end
end
return fallback
end
function ____exports.getSteamIdForApi(self, playerId)
local steamId = PlayerResource:GetSteamAccountID(playerId)
if not steamId or steamId <= 0 then
return nil
end
return steamId
end
function ____exports.loadEquipmentStateFromApi(self, playerId, onDone)
local steamId = ____exports.getSteamIdForApi(nil, playerId)
if not steamId then
onDone(nil, nil)
return
end
local req = CreateHTTPRequestScriptVM(
"GET",
((SERVER_CONFIG.API_URL .. "/player/") .. tostring(steamId)) .. "/equipment"
)
setApiHeaders(nil, req)
req:Send(function(res)
if res.StatusCode >= 200 and res.StatusCode < 300 then
local parsed = decodeBody(
nil,
tostring(res.Body or ""),
{}
)
if parsed.equipment then
onDone(nil, parsed.equipment)
else
onDone(nil, parsed)
end
return
end
onDone(nil, nil)
end)
end
function ____exports.saveEquipmentStateToApi(self, playerId, state)
local steamId = ____exports.getSteamIdForApi(nil, playerId)
if not steamId then
return
end
local req = CreateHTTPRequestScriptVM(
"PUT",
((SERVER_CONFIG.API_URL .. "/player/") .. tostring(steamId)) .. "/equipment"
)
setApiHeaders(nil, req)
req:SetHTTPRequestRawPostBody(
"application/json",
encodeApiBody(nil, {equipment = state})
)
req:Send(function() return nil end)
end
function ____exports.postEquipmentDropToApi(self, playerId, item)
local steamId = ____exports.getSteamIdForApi(nil, playerId)
if not steamId then
return
end
local req = CreateHTTPRequestScriptVM(
"POST",
((SERVER_CONFIG.API_URL .. "/player/") .. tostring(steamId)) .. "/equipment/drop"
)
setApiHeaders(nil, req)
req:SetHTTPRequestRawPostBody(
"application/json",
encodeApiBody(nil, {item = item})
)
req:Send(function() return nil end)
end
return ____exports