Created
September 12, 2019 15:21
-
-
Save Germoviet/f56403888d269e381331f69fe17c4bdd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if RequiredScript == "lib/managers/platformmanager" then | |
core:module("PlatformManager") | |
local set_rich_presence_original = WinPlatformManager.set_rich_presence | |
function WinPlatformManager:set_rich_presence(name, ...) | |
set_rich_presence_original(self, name or self._current_rich_presence, ...) | |
if SystemInfo:distribution() == Idstring("STEAM") then | |
-- Default config | |
local display = "#raw_status" --"#DisplayMe" | |
local group_key = "" | |
local group_count = "" | |
local game_state = "menu" | |
local game_mode = "" | |
local game_heist = "" | |
local game_heistday = "" | |
local game_difficulty = "" | |
if self._current_rich_presence ~= "Idle" then | |
if Global.game_settings.permission == "private" and not Global.game_settings.single_player then | |
game_state = "private" | |
else | |
-- Handle Steam RP Grouping | |
if not Global.game_settings.single_player and managers.network.matchmake.lobby_handler ~= nil then | |
group_key = managers.network.matchmake.lobby_handler:id() | |
local session = managers.network:session() | |
group_count = tostring(session and #session:all_peers() or 1) | |
end | |
-- Determine game state | |
if _G.game_state_machine and (_G.game_state_machine:current_state_name() == "menu_main" or _G.game_state_machine:current_state_name() == "ingame_lobby_menu") then | |
game_state = "lobby" | |
elseif self._current_rich_presence == "SPEnd" or self._current_rich_presence == "MPEnd" then | |
game_state = "payday" | |
else | |
game_state = "playing" | |
end | |
-- Popululate gamemode, heist and difficulty | |
if managers.crime_spree and managers.crime_spree:is_active() then -- Crime Spree | |
game_mode = "crime_spree" | |
game_heist = self:get_current_level_id() | |
local spree_lvl = managers.crime_spree:server_spree_level() | |
game_difficulty = spree_lvl and managers.money:add_decimal_marks_to_string(tostring(spree_lvl)) or "(N/A)" | |
elseif managers.skirmish and managers.skirmish:is_skirmish() then -- Holdout | |
game_mode = "skirmish" | |
game_heist = self:get_current_level_id() | |
game_difficulty = string.format("%i/%i", managers.skirmish:current_wave_number() or 1, tweak_data and #tweak_data.skirmish.ransom_amounts or 9) | |
elseif managers.job:has_active_job() then -- Heists | |
game_heist = self:get_current_job_id() | |
if #(managers.job:current_job_chain_data() or {}) > 1 then | |
game_mode = "heist_chain" | |
game_heistday = tostring(managers.job:current_stage() or "") | |
else | |
game_mode = "heist" | |
end | |
game_difficulty = tweak_data and tweak_data:index_to_difficulty(managers.job:current_difficulty_stars() + 2) or Global.game_settings.difficulty or "easy" | |
else | |
-- Overwrite game state if nothing is selected | |
game_state = "lobby_no_job" | |
end | |
end | |
end | |
-- Send our data to Steam | |
Steam:set_rich_presence("steam_display", display) -- Currently not usable, only Overkill can setup required localized strings here... | |
Steam:set_rich_presence("steam_player_group", group_key) | |
Steam:set_rich_presence("steam_player_group_size", group_count) | |
Steam:set_rich_presence("game:state", game_state) | |
Steam:set_rich_presence("game:mode", game_mode) | |
Steam:set_rich_presence("game:heist", game_heist) | |
Steam:set_rich_presence("game:heist_day", game_heistday) | |
Steam:set_rich_presence("game:difficulty", game_difficulty) | |
Steam:set_rich_presence("status", self:build_status_string(display, game_state, game_mode, game_heist, game_heistday, game_difficulty)) | |
end | |
end | |
local suffixList = { | |
"_prof$", | |
"_day$", | |
"_night$", | |
"_wrapper$", | |
"^skm_" | |
} | |
local ignoreSuffix = { | |
["election_day"] = true | |
} | |
function WinPlatformManager:get_current_job_id() | |
local job_id = managers.job:current_job_id() | |
if job_id and not ignoreSuffix[job_id] then | |
for _, suffix in ipairs(suffixList) do | |
job_id = job_id:gsub(suffix, "") | |
end | |
end | |
return job_id or "UNKNOWN" | |
end | |
function WinPlatformManager:get_current_level_id() | |
local level_id = Global.game_settings.level_id | |
if level_id and not ignoreSuffix[level_id] then | |
for _, suffix in ipairs(suffixList) do | |
level_id = level_id:gsub(suffix, "") | |
end | |
end | |
return level_id or self:get_current_job_id() | |
end | |
function WinPlatformManager:build_status_string(display, state, mode, heist, day, difficulty) | |
local tokens = { | |
["#raw_status"] = "{#State_%game:state%}", | |
-- Game states | |
["#State_menu"] = "At the main menu", | |
["#State_private"] = "In a private lobby", | |
["#State_lobby_no_job"] = "In a lobby", | |
["#State_lobby"] = "Lobby: {#Mode_%game:mode%}", | |
["#State_playing"] = "Playing: {#Mode_%game:mode%}", | |
["#State_payday"] = "Payday: {#Mode_%game:mode%}", | |
-- Game modes | |
["#Mode_crime_spree"] = "[CS] {#Level_%game:heist%} (Lvl. %game:difficulty%)", | |
["#Mode_skirmish"] = "[HO] {#Level_%game:heist%} (Wave %game:difficulty%)", | |
["#Mode_heist"] = "{#Job_%game:heist%} ({#Difficulty_%game:difficulty%})", | |
["#Mode_heist_chain"] = "{#Job_%game:heist%}, Day %game:heist_day% ({#Difficulty_%game:difficulty%})", | |
-- Difficulties | |
["#Difficulty_easy"] = "EASY", | |
["#Difficulty_normal"] = "NORMAL", | |
["#Difficulty_hard"] = "HARD", | |
["#Difficulty_overkill"] = "VERY HARD", | |
["#Difficulty_overkill_145"] = "OVERKILL", | |
["#Difficulty_easy_wish"] = "MAYHAM", | |
["#Difficulty_overkill_290"] = "DEATHWISH", | |
["#Difficulty_sm_wish"] = "DEATH SENTENCE", | |
["#Job_short"] = "The Basics", -- Tutorials | |
["#Job_short1"] = "Flash Drive - Stealth", | |
["#Level_short1_stage1"] = "Stealth - Flash Drive", | |
["#Level_short1_stage2"] = "Stealth - Erasing History", | |
["#Job_short2"] = "Get The Coke - Loud", | |
["#Level_short2_stage1"] = "Loud - Get The Coke", | |
["#Level_short2_stage2b"] = "Loud - Plan B", | |
["#Job_chill"] = "Safe House", -- Safe House | |
["#Level_chill"] = "Safe House", | |
["#Job_chill_combat"] = "Safe House Raid", | |
["#Level_chill_combat"] = "Safe House Raid", | |
["#Job_safehouse"] = "The Safe House", | |
["#Level_safehouse"] = "The Safe House", | |
["#Job_haunted"] = "Safe House Nightmare", | |
["#Level_haunted"] = "Safe House Nightmare", | |
["#Job_branchbank"] = "Bank Heist: Random", -- Bank Heist | |
["#Job_branchbank_gold"] = "Bank Heist: Gold", | |
["#Job_branchbank_deposit"] = "Bank Heist: Deposit", | |
["#Job_branchbank_cash"] = "Bank Heist: Cash", | |
["#Level_branchbank"] = "Bank Heist", | |
["#Job_arm"] = "Transport Heists", -- Transport Heists | |
["#Job_arm_und"] = "Transport: Underpass", | |
["#Level_arm_und"] = "Transport: Underpass", | |
["#Job_arm_hcm"] = "Transport: Downtown", | |
["#Level_arm_hcm"] = "Transport: Downtown", | |
["#Job_arm_cro"] = "Transport: Crossroads", | |
["#Level_arm_cro"] = "Transport: Crossroads", | |
["#Job_arm_for"] = "Transport: Train Heist", | |
["#Level_arm_for"] = "Transport: Train Heist", | |
["#Job_arm_fac"] = "Transport: Harbor", | |
["#Level_arm_fac"] = "Transport: Harbor", | |
["#Job_arm_par"] = "Transport: Park", | |
["#Level_arm_par"] = "Transport: Park", | |
["#Job_watchdogs"] = "Watchdogs", -- Watchdogs | |
["#Level_watchdogs_1"] = "Truck Load", | |
["#Level_watchdogs_2"] = "Boat Load", | |
["#Job_watchdogs_stage2"] = "Boat Load", | |
["#Level_watchdogs_stage2"] = "Boat Load", | |
["#Job_election_day"] = "Election Day", -- Election day | |
["#Level_election_day_1"] = "Right Track", | |
["#Level_election_day_2"] = "Swing Vote", | |
["#Level_election_day_3"] = "Breaking Ballot", | |
["#Job_alex"] = "Rats", -- Rats | |
["#Level_alex_1"] = "Cook Off", | |
["#Level_alex_2"] = "Code for Meth", | |
["#Level_alex_3"] = "Bus Stop", | |
["#Job_framing_frame"] = "Framing Frame", -- Framing Frame | |
["#Level_framing_frame_1"] = "Art Gallery", | |
["#Level_framing_frame_2"] = "Train Trade", | |
["#Level_framing_frame_3"] = "Framing", | |
["#Job_firestarter"] = "Firestarter", -- Firestarter | |
["#Level_firestarter_1"] = "Airport", | |
["#Level_firestarter_2"] = "FBI Server", | |
["#Level_firestarter_3"] = "Trustee Bank", | |
["#Job_welcome_to_the_jungle"] = "Big Oil", -- Big Oil | |
["#Level_welcome_to_the_jungle_1"] = "Club House", | |
["#Level_welcome_to_the_jungle_2"] = "Engine Problem", | |
["#Job_hox"] = "Hoxton Breakout", -- Hoxton Breakout | |
["#Level_hox_1"] = "The Breakout", | |
["#Level_hox_2"] = "The Search", | |
["#Job_mia"] = "Hotline Miami", -- Hotline Miami | |
["#Level_mia_1"] = "Hotline Miami", | |
["#Level_mia_2"] = "Four Floors", | |
["#Job_peta"] = "Goat Simulator", -- Goat Simulator | |
["#Level_peta"] = "This was not the deal", | |
["#Level_peta2"] = "Dirty work", | |
["#Job_hox_3"] = "Hoxton Revenge", | |
["#Level_hox_3"] = "The Revenge", | |
["#Job_mus"] = "The Diamond", | |
["#Level_mus"] = "The Diamond", | |
["#Job_run"] = "Heat Street", | |
["#Level_run"] = "Heat Street", | |
["#Job_red2"] = "First World Bank", | |
["#Level_red2"] = "First World Bank", | |
["#Job_born"] = "The Biker Heist", | |
["#Level_born"] = "Lion's Den", | |
["#Level_chew"] = "Interception", | |
["#Job_rvd"] = "Reservoir Dogs Heist", | |
["#Level_rvd2"] = "Garnet Group Boutique", | |
["#Level_rvd1"] = "Highland Mortuary", | |
["#Job_nightclub"] = "Nightclub", | |
["#Level_nightclub"] = "Nightclub", | |
["#Job_brb"] = "Brooklyn Bank", | |
["#Level_brb"] = "Brooklyn Bank", | |
["#Job_flat"] = "Panic Room", | |
["#Level_flat"] = "Panic Room", | |
["#Job_cage"] = "Car Shop", | |
["#Level_cage"] = "Car Shop", | |
["#Job_pbr2"] = "Birth of Sky", | |
["#Level_pbr2"] = "Birth of Sky", | |
["#Job_rat"] = "Cook Off", | |
["#Level_rat"] = "Cook Off", | |
["#Job_ukrainian_job"] = "Ukrainian Job", | |
["#Level_ukrainian_job"] = "Ukrainian Job", | |
["#Job_gallery"] = "Art Gallery", | |
["#Level_gallery"] = "Art Gallery", | |
["#Job_glace"] = "Green Bridge", | |
["#Level_glace"] = "Green Bridge", | |
["#Job_sah"] = "Shacklethorne Auction", | |
["#Level_sah"] = "Shacklethorne Auction", | |
["#Job_roberts"] = "GO Bank", | |
["#Level_roberts"] = "GO Bank", | |
["#Job_tag"] = "Breakin' Feds", | |
["#Level_tag"] = "Breakin' Feds", | |
["#Job_dark"] = "Murky Station", | |
["#Level_dark"] = "Murky Station", | |
["#Level_wwh"] = "Alaskan Deal", | |
["#Job_wwh"] = "Alaskan Deal", | |
["#Job_friend"] = "Scarface Mansion", | |
["#Level_friend"] = "Scarface Mansion", | |
["#Job_man"] = "Undercover", | |
["#Level_man"] = "Undercover", | |
["#Job_des"] = "Henry's Rock", | |
["#Level_des"] = "Henry's Rock", | |
["#Job_help"] = "Prison Nightmare", | |
["#Level_help"] = "Prison Nightmare", | |
["#Job_big"] = "The Big Bank", | |
["#Level_big"] = "The Big Bank", | |
["#Job_cane"] = "Santa's Workshop", | |
["#Level_cane"] = "Santa's Workshop", | |
["#Job_spa"] = "Brooklyn 10-10", | |
["#Level_spa"] = "Brooklyn 10-10", | |
["#Job_jewelry_store"] = "Jewelry Store", | |
["#Level_jewelry_store"] = "Jewelry Store", | |
["#Job_jolly"] = "Aftershock", | |
["#Level_jolly"] = "Aftershock", | |
["#Job_family"] = "Diamond Store", | |
["#Level_family"] = "Diamond Store", | |
["#Job_arena"] = "The Alesso Heist", | |
["#Level_arena"] = "The Alesso Heist", | |
["#Job_pines"] = "White Xmas", | |
["#Level_pines"] = "White Xmas", | |
["#Job_kenaz"] = "Golden Grin Casino", | |
["#Level_kenaz"] = "Golden Grin Casino", | |
["#Job_shoutout_raid"] = "Meltdown", | |
["#Level_shoutout_raid"] = "Meltdown", | |
["#Job_mad"] = "Boiling Point", | |
["#Level_mad"] = "Boiling Point", | |
["#Job_moon"] = "Stealing Xmas", | |
["#Level_moon"] = "Stealing Xmas", | |
["#Job_fish"] = "The Yacht Heist", | |
["#Level_fish"] = "The Yacht Heist", | |
["#Job_pal"] = "Counterfeit", | |
["#Level_pal"] = "Counterfeit", | |
["#Job_dinner"] = "Slaughterhouse", | |
["#Level_dinner"] = "Slaughterhouse", | |
["#Job_pbr"] = "Beneath the Mountain", | |
["#Level_pbr"] = "Beneath the Mountain", | |
["#Job_crojob1"] = "The Bomb: Dockyard", | |
["#Level_crojob2"] = "The Bomb: Dockyard", | |
["#Job_four_stores"] = "Four Stores", | |
["#Level_four_stores"] = "Four Stores", | |
["#Job_crojob"] = "The Bomb: Forest", | |
["#Job_crojob2"] = "The Bomb: Forest", | |
["#Level_crojob3"] = "The Bomb: Forest", | |
["#Job_kosugi"] = "Shadow Raid", | |
["#Level_kosugi"] = "Shadow Raid", | |
["#Job_hvh"] = "Cursed Kill Room", | |
["#Level_hvh"] = "Cursed Kill Room", | |
["#Job_nail"] = "Lab Rats", | |
["#Level_nail"] = "Lab Rats", | |
["#Job_dah"] = "Diamond Heist", | |
["#Level_dah"] = "Diamond Heist", | |
["#Job_mallcrasher"] = "Mallcrasher", | |
["#Level_mallcrasher"] = "Mallcrasher", | |
["#Job_bph"] = "Hell's Island", | |
["#Level_bph"] = "Hell's Island", | |
["#Job_nmh"] = "No Mercy", | |
["#Level_nmh"] = "No Mercy Hospital", | |
["#Job_vit"] = "The White House", | |
["#Level_vit"] = "The White House", | |
} | |
local data = { | |
["game:state"] = state, | |
["game:mode"] = mode, | |
["game:heist"] = heist, | |
["game:heist_day"] = day, | |
["game:difficulty"] = difficulty, | |
} | |
local s = string.format("{%s}", display or "#raw_status") | |
local function populate_data(s, tokens, data, count) | |
count = count or 1 | |
if count > 100 then WolfHUD:print_log("Infinite loop in RP update!", "error"); return s end | |
if s:gmatch("%%(.+)%%") then | |
for k, v in pairs(data or {}) do | |
s = s:gsub("%%" .. k .. "%%", v) | |
end | |
end | |
if s:gmatch("{(.+)}") then | |
for k, v in pairs(tokens or {}) do | |
local key = string.format("{%s}", k) | |
if s:find(key) then | |
s = s:gsub(key, populate_data(v, tokens, data, count + 1)) | |
end | |
end | |
end | |
return s | |
end | |
s = populate_data(s, tokens, data) | |
log(string.format("Steam RP updated: %s", s)) | |
return s | |
end | |
elseif RequiredScript == "lib/managers/skirmishmanager" then | |
local update_matchmake_attributes_original = SkirmishManager.update_matchmake_attributes | |
function SkirmishManager:update_matchmake_attributes(...) | |
update_matchmake_attributes_original(self, ...) | |
if Global.game_settings.permission ~= "private" then | |
--local game_difficulty = string.format("%i/%i", self:current_wave_number() or 1, tweak_data and #tweak_data.skirmish.ransom_amounts or 9) | |
--Steam:set_rich_presence("game:difficulty", game_difficulty) | |
if managers.platform then | |
managers.platform:set_rich_presence() | |
end | |
end | |
end | |
end | |
if Hooks then -- Basegame doesn't update RP on peer count changes... | |
Hooks:Add("BaseNetworkSessionOnPeerEnteredLobby", "BaseNetworkSessionOnPeerEnteredLobby_WolfHUD_RP", function(session, peer, peer_id) | |
local session = managers.network:session() | |
if session and Global.game_settings.permission ~= "private" then | |
local group_count = tostring(session and #session:all_peers() or 1) | |
Steam:set_rich_presence("steam_player_group_size", group_count) | |
end | |
end) | |
Hooks:Add("BaseNetworkSessionOnPeerRemoved", "BaseNetworkSessionOnPeerRemoved_WolfHUD_RP", function(session, peer, peer_id, reason) | |
local session = managers.network:session() | |
if session and Global.game_settings.permission ~= "private" then | |
local group_count = tostring(session and #session:all_peers() or 1) | |
Steam:set_rich_presence("steam_player_group_size", group_count) | |
end | |
end) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment