|
function IsDlcOwned(dlc) |
|
return Platform.developer or IsSteamAvailable() and SteamIsDlcAvailable(dlc.steam_dlc_id) |
|
end |
|
|
|
function GetPCSaveFolder() |
|
local path = "saves:/" |
|
if IsSteamAvailable() then |
|
path = string.format("saves:/%s/", tostring(SteamGetUserId64())) |
|
end |
|
local ok, err = io.createpath(path) |
|
if not ok then |
|
print("Failed to create save path", err) |
|
end |
|
return path |
|
end |
|
|
|
function GetSteamLobbyVisibility(visible) |
|
visible = visible or netGameInfo.visible_to |
|
if not visible or visible == "friends" or visible == "public" then |
|
return "friendsonly" |
|
else |
|
return "invisible" |
|
end |
|
end |
|
|
|
function OnMsg.NetGameJoined() |
|
CreateRealTimeThread( function() |
|
if netGameInfo.steam_lobby then |
|
local err = AsyncSteamJoinLobby( tonumber(netGameInfo.steam_lobby) ) |
|
if err then |
|
DebugPrint("AsyncSteamJoinLobby failed: " .. err) |
|
end |
|
else |
|
local err, lobby = AsyncSteamCreateLobby( GetSteamLobbyVisibility(), netGameInfo.max_players or 4 ) |
|
if err then |
|
DebugPrint("AsyncSteamCreateLobby failed: " .. err) |
|
return |
|
end |
|
SteamSetLobbyData(tonumber(lobby), "game_address", tostring(netGameAddress)) |
|
NetChangeGameInfo( { steam_lobby = tonumber(lobby) } ) |
|
end |
|
end) |
|
end |
|
|
|
function OnMsg.NetGameLeft() |
|
if netGameInfo.steam_lobby then |
|
SteamLeaveLobby( tonumber(netGameInfo.steam_lobby) ) |
|
end |
|
end |
|
|
|
function OnMsg.NetGameInfo(info) |
|
if info.visible_to ~= nil then |
|
CreateRealTimeThread(function() |
|
if netInGame and netGameInfo.steam_lobby then |
|
SteamSetLobbyType(netGameInfo.steam_lobby, GetSteamLobbyVisibility(info.visible_to)) |
|
end |
|
end) |
|
end |
|
end |
|
|
|
function OnSteamEnterLobby(lobby) |
|
end |
|
|
|
function ProcessSteamInvite(lobby) |
|
CreateRealTimeThread( function() |
|
local lobbyNumber = tonumber(lobby) |
|
local err = AsyncSteamJoinLobby( lobbyNumber ) |
|
if err then |
|
DebugPrint("AsyncSteamJoinLobby failed: " .. err) |
|
return |
|
end |
|
local game_address = tonumber(SteamGetLobbyData(lobbyNumber, "game_address")) |
|
if game_address == 0 then |
|
DebugPrint("invalid game address for lobby") |
|
return |
|
end |
|
local err = NetSteamGameInviteAccepted(game_address, lobbyNumber) |
|
if err then |
|
DebugPrint(err) |
|
return |
|
end |
|
end ) |
|
end |
|
|
|
OnSteamGameLobbyJoinRequest = ProcessSteamInvite |
|
|
|
function OnMsg.StartAcceptingInvites() |
|
local lobby = GetAppCmdLine():match("%+connect_lobby%s+(%d+)") |
|
if lobby then |
|
ProcessSteamInvite(lobby) |
|
end |
|
end |
|
|
|
function NetSteamGameInviteAccepted(game_address, lobby) |
|
print("Steam Invitation accepted for ", game_address, lobby) |
|
return "Need to override NetSteamGameInviteAccepted for current game" |
|
end |
|
|
|
function OnMsg.BugReportStart(print_func) |
|
local steam_beta, steam_branch = SteamGetCurrentBetaName() |
|
if (steam_branch or "") ~= "" then |
|
print_func("Steam Branch:", steam_branch) |
|
end |
|
end |
|
|
|
if Platform.steam and IsSteamAvailable() then |
|
_InternalFilterUserTexts = function(unfilteredTs) |
|
local filteredTs = {} |
|
local errors = {} |
|
for _, T in ipairs(unfilteredTs) do |
|
local res = SteamFilterText(T._user_text_type or "", T._steam_id or "0", TDevModeGetEnglishText(T, "deep", "no_assert") or "") |
|
if res == nil then |
|
table.insert(errors, { error = "Unknown Steam Error", user_text = T}) |
|
end |
|
filteredTs[T] = res |
|
end |
|
if next(errors) == nil then errors =false end |
|
return errors, filteredTs |
|
end |
|
end |