diff --git a/.gitignore b/.gitignore index 52906c2..8efd66f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ *.iml .env* node_modules/ +web/client/bin +web/client/obj diff --git a/files/bin/steam_api64.dll b/files/bin/steam_api64.dll new file mode 100644 index 0000000..ce20eea Binary files /dev/null and b/files/bin/steam_api64.dll differ diff --git a/web/bin/dz b/web/bin/dz index de66a8b..b22d77d 100755 --- a/web/bin/dz +++ b/web/bin/dz @@ -70,6 +70,9 @@ installxml(){ xmlstarlet ed -L -r "events" -v "eventposdef" /tmp/x fi fi + # Some mod authors ship invalid XML files. This fixes comments before the declaration. + xmlstarlet ed -d '//comment()' /tmp/x > /tmp/y && mv /tmp/y /tmp/x + # Check for the required root node and add it if it's missing if ! grep -q '<'${CHECK}'>' /tmp/x then echo " - has no root node <${CHECK}>. fixing..." diff --git a/web/bin/start.sh b/web/bin/start.sh index a5d6ade..87ae78b 100755 --- a/web/bin/start.sh +++ b/web/bin/start.sh @@ -8,6 +8,7 @@ then alias ls='ls --color' export PS1="${debian_chroot:+($debian_chroot)}\u@dz-web:\w\$ " unset DEVELOPMENT +export PATH=${PATH}:/usr/local/dotnet EOF fi diff --git a/web/client/Program.cs b/web/client/Program.cs new file mode 100644 index 0000000..c5e88b9 --- /dev/null +++ b/web/client/Program.cs @@ -0,0 +1,111 @@ +using System; +using System.Threading; +using Steamworks; + +namespace SteamworksNET_StandaloneTest { + class Program { + static CallResult m_NumberOfCurrentPlayers; + static CallResult m_callResultFindLeaderboard; + static Callback m_PersonaStateChange; + static Callback m_UserStatsReceived; + + static void InitializeCallbacks() { + m_NumberOfCurrentPlayers = CallResult.Create(OnNumberOfCurrentPlayers); + m_callResultFindLeaderboard = CallResult.Create(OnFindLeaderboard); + m_PersonaStateChange = Callback.Create(OnPersonaStateChange); + m_UserStatsReceived = Callback.Create( + (pCallback) => { + Console.WriteLine("[" + UserStatsReceived_t.k_iCallback + " - UserStatsReceived] - " + pCallback.m_eResult + " -- " + pCallback.m_nGameID + " -- " + pCallback.m_steamIDUser); + }); + } + + static void Main(string[] args) { + try { + if (!SteamAPI.Init()) { + Console.WriteLine("SteamAPI.Init() failed!"); + return; + } + } + catch (DllNotFoundException e) { // We check this here as it will be the first instance of it. + Console.WriteLine(e); + return; + } + + if (!Packsize.Test()) { + Console.WriteLine("You're using the wrong Steamworks.NET Assembly for this platform!"); + return; + } + + if (!DllCheck.Test()) { + Console.WriteLine("You're using the wrong dlls for this platform!"); + return; + } + + InitializeCallbacks(); // We do this after SteamAPI.Init() has occurred + + + Console.WriteLine("Requesting Current Stats - " + SteamUserStats.RequestCurrentStats()); + + Console.WriteLine("CurrentGameLanguage: " + SteamApps.GetCurrentGameLanguage()); + Console.WriteLine("PersonaName: " + SteamFriends.GetPersonaName()); + + { + string folder; + uint length = SteamApps.GetAppInstallDir(SteamUtils.GetAppID(), out folder, 260); + Console.WriteLine("AppInstallDir: " + length + " " + folder); + } + + + m_NumberOfCurrentPlayers.Set(SteamUserStats.GetNumberOfCurrentPlayers()); + Console.WriteLine("Requesting Number of Current Players"); + + { + SteamAPICall_t hSteamAPICall = SteamUserStats.FindLeaderboard("Quickest Win"); + m_callResultFindLeaderboard.Set(hSteamAPICall); + Console.WriteLine("Requesting Leaderboard"); + } + + while (true) { + // Must be called from the primary thread. + SteamAPI.RunCallbacks(); + + if (Console.KeyAvailable) { + ConsoleKeyInfo info = Console.ReadKey(true); + + if (info.Key == ConsoleKey.Escape) { + break; + } + else if (info.Key == ConsoleKey.Spacebar) { + SteamUserStats.RequestCurrentStats(); + Console.WriteLine("Requesting Current Stats"); + } + else if (info.Key == ConsoleKey.D1) { + SteamAPICall_t hSteamAPICall = SteamUserStats.FindLeaderboard("Quickest Win"); + m_callResultFindLeaderboard.Set(hSteamAPICall); + Console.WriteLine("FindLeaderboard() - " + hSteamAPICall); + } + else if (info.Key == ConsoleKey.D2) { + SteamAPICall_t hSteamAPICall = SteamUserStats.GetNumberOfCurrentPlayers(); + m_NumberOfCurrentPlayers.Set(hSteamAPICall); + Console.WriteLine("GetNumberOfCurrentPlayers() - " + hSteamAPICall); + } + } + + Thread.Sleep(50); + } + SteamAPI.Shutdown(); + } + + static void OnNumberOfCurrentPlayers(NumberOfCurrentPlayers_t pCallback, bool bIOFailure) { + Console.WriteLine("[" + NumberOfCurrentPlayers_t.k_iCallback + " - NumberOfCurrentPlayers] - " + pCallback.m_bSuccess + " -- " + pCallback.m_cPlayers); + } + + static void OnFindLeaderboard(LeaderboardFindResult_t pCallback, bool bIOFailure) { + Console.WriteLine("[" + LeaderboardFindResult_t.k_iCallback + " - LeaderboardFindResult] - " + pCallback.m_bLeaderboardFound + " -- " + pCallback.m_hSteamLeaderboard); + } + + static void OnPersonaStateChange(PersonaStateChange_t pCallback) { + Console.WriteLine("[" + PersonaStateChange_t.k_iCallback + " - PersonaStateChange] - " + pCallback.m_ulSteamID + " -- " + pCallback.m_nChangeFlags); + } + } +} \ No newline at end of file diff --git a/web/client/README.md b/web/client/README.md new file mode 100644 index 0000000..7e73aa6 --- /dev/null +++ b/web/client/README.md @@ -0,0 +1,3 @@ +# Steamworks client + +WIP \ No newline at end of file diff --git a/web/client/proj.csproj b/web/client/proj.csproj new file mode 100644 index 0000000..3d5558e --- /dev/null +++ b/web/client/proj.csproj @@ -0,0 +1,16 @@ + + + + + \usr\local\steamworks.net\OSX-Linux-x64\Steamworks.NET.dll + + + + + Exe + net8.0 + enable + enable + + + diff --git a/web/client/steam_appid.txt b/web/client/steam_appid.txt new file mode 100644 index 0000000..f3a3466 --- /dev/null +++ b/web/client/steam_appid.txt @@ -0,0 +1 @@ +223350