From 60c7a152722af51fcd2aaa56a1065000210047db Mon Sep 17 00:00:00 2001 From: Fesiug Date: Fri, 27 Sep 2024 16:11:29 -0400 Subject: [PATCH] Rich presence when using some modules https://github.com/YuRaNnNzZZ/gmcl_steamrichpresencer/ https://github.com/fluffy-servers/gmod-discord-rpc/ --- .../benny/gamemode/richpresence_test.lua | 177 ++++++++++++++++++ gamemodes/benny/gamemode/shared.lua | 5 + 2 files changed, 182 insertions(+) create mode 100644 gamemodes/benny/gamemode/richpresence_test.lua diff --git a/gamemodes/benny/gamemode/richpresence_test.lua b/gamemodes/benny/gamemode/richpresence_test.lua new file mode 100644 index 0000000..41eeb6d --- /dev/null +++ b/gamemodes/benny/gamemode/richpresence_test.lua @@ -0,0 +1,177 @@ + +if SERVER then return end + +if util.IsBinaryModuleInstalled("gdiscord") then + require("gdiscord") + local RPC_AppID = "1287531216630976603" + function DiscordUpdate() + local rpc_data = {} + + rpc_data["buttonPrimaryLabel"] = "Join Server" + rpc_data["buttonPrimaryUrl"] = "steam://open/friends"-- .. "108.5.3.134:27015" + rpc_data["buttonSecondaryLabel"] = "Join Server" + rpc_data["buttonSecondaryUrl"] = "steam://open/friends"-- .. "108.5.3.134:27015" + rpc_data["partySize"] = player.GetCount() + rpc_data["partyMax"] = game.MaxPlayers() + rpc_data["largeImageKey"] = "benny_1"--"map_b-mp_6t" + rpc_data["largeImageText"] = "The Six Team Map" + --rpc_data["smallImageKey"] = "doof2" + --rpc_data["smallImageText"] = "Domination" + + local NewTime = os.time() - math.floor(CurTime()) + + local modedata = BennyGame:GetModeData() + local modename = modedata and l8( modedata.name ) or "(unknown)" + + local details = modename .. " on " .. BennyGame:GetMapName() + local title = "" + if BennyGame:GetState() == BG_STATE_ACTIVE then + rpc_data["startTimestamp"] = NewTime + BennyGame:GetRoundStartedAt() + rpc_data["endTimestamp"] = NewTime + BennyGame:GetRoundStartedAt() + BennyGame:GetTimeLimit() + + local myteam = LocalPlayer():Team() + local myteamscore = BennyGame:GetScoreForTeam( myteam ) + + if BennyGame.RTeamID[ myteam ] then + -- In play + local BiggestScore = 0 + + for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do + if RealTeamID == myteam then continue end + BiggestScore = math.max( BiggestScore, BennyGame:GetScoreForTeam( RealTeamID ) ) + end + + if myteamscore > BiggestScore then + details = details .. " ▪ Winning" + elseif myteamscore == BiggestScore then + details = details .. " ▪ Tied" + else + details = details .. " ▪ Losing" + end + else + details = details .. " ▪ Spectating" + end + + local first = true + if BennyGame.RTeamID[ myteam ] then + details = details .. " ▪ " .. myteamscore + first = false + else + details = details .. " ▪ " + end + + for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do + if RealTeamID == myteam then continue end + details = details .. (first and "" or "-") .. BennyGame:GetScoreForTeam( RealTeamID ) -- placeholder, i need a thing + first = false + end + + elseif BennyGame:GetState() == BG_STATE_PRE then + rpc_data["startTimestamp"] = NewTime + BennyGame:GetPregameStartedAt() + rpc_data["endTimestamp"] = NewTime + BennyGame:GetPregameStartedAt() + BennyGame:GetPregameTime() + + title = "Pregame" + elseif BennyGame:GetState() == BG_STATE_POST then + rpc_data["startTimestamp"] = NewTime + BennyGame:GetRoundFinishedAt() + rpc_data["endTimestamp"] = NewTime + BennyGame:GetRoundFinishedAt() + BennyGame:GetPostgameTime() + + title = "Postgame" + elseif BennyGame:GetState() == BG_STATE_WAITINGFORPLAYERS then + rpc_data["startTimestamp"] = nil--NewTime + BennyGame:GetRoundFinishedAt() + BennyGame:GetPostgameTime() + rpc_data["endTimestamp"] = nil + + title = "Waiting for Players" + end + + rpc_data["details"] = details + rpc_data["state"] = title + + DiscordUpdateRPC(rpc_data) + end + hook.Add("Think", "RPresence_Think_Discord", function() + if !RPC_Initialized then + DiscordRPCInitialize(RPC_AppID) + DiscordUpdate() + RPC_Initialized = true + RPC_NextUpdate = RealTime() + 1 + end + if RPC_NextUpdate <= RealTime() then + DiscordUpdate() + RPC_NextUpdate = RealTime() + 1 + end + end) +else + print("A module is missing: gdiscord") +end + +if util.IsBinaryModuleInstalled("steamrichpresencer") then + require("steamrichpresencer") + function SteamUpdate() + local title = "Your Name Is Benny" + --title = " ▪ Domination on SixT" + --title = " ▪ Winning" + --title = " ▪ 999-10" + + local modedata = BennyGame:GetModeData() + local modename = modedata and l8( modedata.name ) or "(unknown)" + + title = title .. " ▪ " .. modename .. " on " .. BennyGame:GetMapName() + if BennyGame:GetState() == BG_STATE_ACTIVE then + local myteam = LocalPlayer():Team() + local myteamscore = BennyGame:GetScoreForTeam( myteam ) + + if BennyGame.RTeamID[ myteam ] then + -- In play + local BiggestScore = 0 + + for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do + if RealTeamID == myteam then continue end + BiggestScore = math.max( BiggestScore, BennyGame:GetScoreForTeam( RealTeamID ) ) + end + + if myteamscore > BiggestScore then + title = title .. " ▪ Winning" + elseif myteamscore == BiggestScore then + title = title .. " ▪ Tied" + else + title = title .. " ▪ Losing" + end + else + title = title .. " ▪ Spectating" + end + + local first = true + if BennyGame.RTeamID[ myteam ] then + title = title .. " ▪ " .. myteamscore + first = false + else + title = title .. " ▪ " + end + + for TeamID, RealTeamID in ipairs( BennyGame.TeamsInPlay ) do + if RealTeamID == myteam then continue end + title = title .. (first and "" or "-") .. BennyGame:GetScoreForTeam( RealTeamID ) -- placeholder, i need a thing + first = false + end + + elseif BennyGame:GetState() == BG_STATE_PRE then + title = title .. " ▪ Pregame" + elseif BennyGame:GetState() == BG_STATE_POST then + title = title .. " ▪ Postgame" + elseif BennyGame:GetState() == BG_STATE_WAITINGFORPLAYERS then + title = title .. " ▪ Waiting for Players" + end + + steamworks.SetRichPresence("generic", title) + steamworks.SetRichPresence("steam_player_group", tostring(BennyGame:GetUUID()) ) + steamworks.SetRichPresence("steam_player_group_size", tostring(#player.GetHumans()) ) + end + hook.Add("Think", "RPresence_Think_Steam", function() + if (Steam_NextUpdate or 0) <= RealTime() then + SteamUpdate() + Steam_NextUpdate = RealTime() + 1 + end + end) +else + print("A module is missing: steamrichpresencer") +end \ No newline at end of file diff --git a/gamemodes/benny/gamemode/shared.lua b/gamemodes/benny/gamemode/shared.lua index 3ca948e..c1c8575 100644 --- a/gamemodes/benny/gamemode/shared.lua +++ b/gamemodes/benny/gamemode/shared.lua @@ -66,6 +66,11 @@ IN("teams.lua") AC("pausemenu.lua") IN("pausemenu.lua") +AC("richpresence_test.lua") +if CLIENT then +IN("richpresence_test.lua") +end + AC("debugmenu.lua") IN("debugmenu.lua")