From 6a44064f255c4d5422b016d0dad90c60219ce675 Mon Sep 17 00:00:00 2001 From: Michael Fabain Dirks Date: Sun, 8 May 2016 22:46:41 +0200 Subject: [PATCH] Update --- .gitignore | 2 +- BlitzSteam.cpp | 64 +- BlitzSteam.h | 52 +- BlitzSteam.vcxproj | 10 +- BlitzSteam.vcxproj.filters | 24 +- BlitzSteam.vcxproj.user | 6 +- BlitzSteamInternal.h | 60 +- Helpers/BlitzPointer.cpp | 52 + Helpers/BlitzPointer.h | 68 +- Helpers/Helper.cpp | 148 +- Helpers/Helper.h | 40 +- Resources/BlitzSteam.LICENSE | 1348 ++++++++--------- Resources/BlitzSteam.LICENSE.lesser | 330 ++-- Resources/BlitzSteam.bb | 13 +- Resources/BlitzSteam.ipf | 43 +- Resources/BlitzSteamUtility.bb | 1254 +++++++-------- Resources/Decls/BlitzSteam.decls | 43 +- Resources/Decls/BlitzSteam_Callback.decls | 33 + Resources/Decls/BlitzSteam_Double.decls | 82 +- Resources/Decls/BlitzSteam_Memory.decls | 66 +- .../Decls/BlitzSteam_SteamGameServer.decls | 154 +- .../BlitzSteam_SteamGameServerStats.decls | 70 +- .../Decls/BlitzSteam_SteamHTMLSurface.decls | 110 +- Resources/Decls/BlitzSteam_SteamHTTP.decls | 106 +- .../Decls/BlitzSteam_SteamInventory.decls | 116 +- .../Decls/BlitzSteam_SteamMatchmaking.decls | 40 +- .../BlitzSteam_SteamMatchmakingServers.decls | 63 +- .../BlitzSteam_SteamMatchmakingTypes.decls | 78 + Resources/Decls/BlitzSteam_SteamMusic.decls | 42 +- .../Decls/BlitzSteam_SteamMusicRemote.decls | 42 +- .../Decls/BlitzSteam_SteamNetworking.decls | 62 +- .../Decls/BlitzSteam_SteamRemoteStorage.decls | 42 +- .../Decls/BlitzSteam_SteamScreenshots.decls | 42 +- Resources/Decls/BlitzSteam_SteamUGC.decls | 44 +- .../BlitzSteam_SteamUnifiedMessages.decls | 40 +- Resources/Decls/BlitzSteam_SteamUser.decls | 96 +- .../Decls/BlitzSteam_SteamUserStats.decls | 152 +- Resources/Decls/BlitzSteam_SteamUtils.decls | 42 +- Resources/Decls/BlitzSteam_SteamVideo.decls | 40 +- Resources/Examples/SteamAPI_Example.bb | 130 +- Resources/Examples/SteamAppList_Example.bb | 254 ++-- Resources/Examples/SteamApps_Example.bb | 356 ++--- Resources/Examples/SteamController_Example.bb | 134 +- .../Examples/SteamHTMLSurface_Example.bb | 775 +++++----- .../SteamMatchmakingServers_Example.bb | 88 ++ Types/BlitzCallback.cpp | 530 +++---- Types/BlitzCallback.h | 190 +-- Types/CSteamID.cpp | 339 +++-- Types/CSteamID.h | 356 ++--- Types/Double.cpp | 245 +-- Types/Double.h | 102 +- Types/Long.cpp | 335 ++-- Types/Long.h | 124 +- Types/Memory.cpp | 154 +- Types/Memory.h | 84 +- Types/SteamMatchmakingTypes.cpp | 271 ++++ Types/SteamMatchmakingTypes.h | 137 ++ Types/SteamTypes.cpp | 17 + Types/SteamTypes.h | 19 + Wrapper/Steam.cpp | 196 +-- Wrapper/SteamAppList.cpp | 100 +- Wrapper/SteamApps.cpp | 292 ++-- Wrapper/SteamClient.cpp | 294 ++-- Wrapper/SteamController.cpp | 252 +-- Wrapper/SteamFriends.cpp | 850 +++++------ Wrapper/SteamGameServer.cpp | 740 ++++----- Wrapper/SteamGameServerStats.cpp | 162 +- Wrapper/SteamHTMLSurface.cpp | 416 ++--- Wrapper/SteamHTTP.cpp | 376 ++--- Wrapper/SteamMatchmaking.cpp | 590 ++++---- Wrapper/SteamMatchmakingServers.cpp | 213 ++- Wrapper/SteamMusic.cpp | 46 +- Wrapper/SteamMusicRemote.cpp | 46 +- Wrapper/SteamNetworking.cpp | 196 +-- Wrapper/SteamRemoteStorage.cpp | 46 +- Wrapper/SteamScreenshots.cpp | 46 +- Wrapper/SteamUGC.cpp | 56 +- Wrapper/SteamUnifiedMessages.cpp | 46 +- Wrapper/SteamUser.cpp | 428 +++--- Wrapper/SteamUserStats.cpp | 614 ++++---- Wrapper/SteamUtils.cpp | 54 +- Wrapper/SteamVideo.cpp | 46 +- 82 files changed, 8391 insertions(+), 7473 deletions(-) create mode 100644 Helpers/BlitzPointer.cpp create mode 100644 Resources/Decls/BlitzSteam_Callback.decls create mode 100644 Resources/Decls/BlitzSteam_SteamMatchmakingTypes.decls create mode 100644 Resources/Examples/SteamMatchmakingServers_Example.bb create mode 100644 Types/SteamMatchmakingTypes.cpp create mode 100644 Types/SteamMatchmakingTypes.h create mode 100644 Types/SteamTypes.cpp create mode 100644 Types/SteamTypes.h diff --git a/.gitignore b/.gitignore index bbb3dcd..16b17fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/SteamworksSDK/* +/SteamworksSDK/* diff --git a/BlitzSteam.cpp b/BlitzSteam.cpp index 8bd1048..e3e4236 100644 --- a/BlitzSteam.cpp +++ b/BlitzSteam.cpp @@ -1,33 +1,33 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -#include -uint32_t WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - break; - case DLL_PROCESS_DETACH: - break; - case DLL_THREAD_ATTACH: - break; - case DLL_THREAD_DETACH: - break; - } - - return true; +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +#include +uint32_t WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + break; + case DLL_PROCESS_DETACH: + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + break; + } + + return true; } \ No newline at end of file diff --git a/BlitzSteam.h b/BlitzSteam.h index 9d23f43..372d7ac 100644 --- a/BlitzSteam.h +++ b/BlitzSteam.h @@ -1,26 +1,26 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteamInternal.h" - -// Our Stuff -#include "Helpers/BlitzPointer.h" -#include "Types/BlitzCallback.h" -#include "Types/CSteamID.h" -#include "Types/Double.h" -#include "Types/Long.h" -#include "Types/Memory.h" +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" + +// Our Stuff +#include "Helpers/BlitzPointer.h" +#include "Types/BlitzCallback.h" +#include "Types/CSteamID.h" +#include "Types/Double.h" +#include "Types/Long.h" +#include "Types/Memory.h" diff --git a/BlitzSteam.vcxproj b/BlitzSteam.vcxproj index f58ee5f..e5ed5a4 100644 --- a/BlitzSteam.vcxproj +++ b/BlitzSteam.vcxproj @@ -59,7 +59,7 @@ MultiThreaded false $(ProjectDir);%(AdditionalIncludeDirectories) - ProgramDatabase + EditAndContinue false EnableFastChecks 4Bytes @@ -156,12 +156,15 @@ + + + @@ -195,15 +198,17 @@ + + - + @@ -221,6 +226,7 @@ + diff --git a/BlitzSteam.vcxproj.filters b/BlitzSteam.vcxproj.filters index fd88909..473a802 100644 --- a/BlitzSteam.vcxproj.filters +++ b/BlitzSteam.vcxproj.filters @@ -128,6 +128,15 @@ Source Files\Types + + Source Files\Types + + + Source Files\Types + + + Source Files\Helpers + @@ -157,6 +166,12 @@ Header Files + + Header Files\Types + + + Header Files\Types + @@ -200,9 +215,6 @@ Resource Files\Decls - - Resource Files\Decls - Resource Files\Decls @@ -293,6 +305,12 @@ Resource Files + + Resource Files\Decls + + + Resource Files\Decls + diff --git a/BlitzSteam.vcxproj.user b/BlitzSteam.vcxproj.user index ef5ff2a..2a22e69 100644 --- a/BlitzSteam.vcxproj.user +++ b/BlitzSteam.vcxproj.user @@ -1,4 +1,4 @@ - - - + + + \ No newline at end of file diff --git a/BlitzSteamInternal.h b/BlitzSteamInternal.h index 9b2196a..06b3a55 100644 --- a/BlitzSteamInternal.h +++ b/BlitzSteamInternal.h @@ -1,31 +1,31 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once - -// Macros -//#define DLL_FUNCTION(type) extern "C" type __stdcall -#define DLL(type) extern "C" __declspec(dllexport) type __stdcall - -// C/C++ Includes -#include -#include -#include -#include - -// Steam -#include "SteamworksSDK/public/steam/steam_api.h" +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once + +// Macros +//#define DLL_FUNCTION(type) extern "C" type __stdcall +#define DLL(type) extern "C" __declspec(dllexport) type __stdcall + +// C/C++ Includes +#include +#include +#include +#include + +// Steam +#include "SteamworksSDK/public/steam/steam_api.h" #include "SteamworksSDK/public/steam/steam_gameserver.h" \ No newline at end of file diff --git a/Helpers/BlitzPointer.cpp b/Helpers/BlitzPointer.cpp new file mode 100644 index 0000000..31f523b --- /dev/null +++ b/Helpers/BlitzPointer.cpp @@ -0,0 +1,52 @@ +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzPointer.h" + +DLL(intptr_t) BS_BlitzPointer_GetReturnAddress() { + intptr_t BasePointer, ReturnAddress; + + __asm { //ASM. Do touch if suicidal. + mov BasePointer, ebp; // Store current BasePointer + } + + // Blitz uses X86 Call-Near (E8) instructions to call its own functions. + // We can simply deduce the Return Address like this because of that. + //-- Parent_EBP = *EBP + //-- Parent_RP = Parent_EBP + 16 + ReturnAddress = *(intptr_t*)((*(intptr_t*)BasePointer) + 16); + + return ReturnAddress; +} + +DLL(intptr_t) BS_BlitzPointer_GetFunctionPointer() { + intptr_t BasePointer, ReturnAddress, FunctionPointer; + + __asm { //ASM. Do touch if suicidal. + mov BasePointer, ebp; // Store current BasePointer + } + + // Blitz uses X86 Call-Near (E8) instructions to call its own functions. + // We can simply deduce the Return Address like this because of that. + //-- Parent_EBP = *EBP + //-- Parent_RP = Parent_EBP + 16 + ReturnAddress = *(intptr_t*)((*(intptr_t*)BasePointer) + 16); + + // And since it's a Call-Near, the call is offset to the return address. + FunctionPointer = ReturnAddress + *(intptr_t*)(ReturnAddress - 4); + + return FunctionPointer; +} diff --git a/Helpers/BlitzPointer.h b/Helpers/BlitzPointer.h index 1618ddc..83d9928 100644 --- a/Helpers/BlitzPointer.h +++ b/Helpers/BlitzPointer.h @@ -1,32 +1,36 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once - -// Types of Blitz Functions. -typedef int32_t(__stdcall *BP_BlitzFunction0_t)(); -typedef int32_t(__stdcall *BP_BlitzFunction1_t)(int32_t); -typedef int32_t(__stdcall *BP_BlitzFunction2_t)(int32_t, int32_t); -typedef int32_t(__stdcall *BP_BlitzFunction3_t)(int32_t, int32_t, int32_t); -typedef int32_t(__stdcall *BP_BlitzFunction4_t)(int32_t, int32_t, int32_t, int32_t); -typedef int32_t(__stdcall *BP_BlitzFunction5_t)(int32_t, int32_t, int32_t, int32_t, int32_t); - -#define BP_CallFunction0(ptr) (reinterpret_cast(ptr))() -#define BP_CallFunction1(ptr, p1) (reinterpret_cast(ptr))(p1) -#define BP_CallFunction2(ptr, p1, p2) (reinterpret_cast(ptr))(p1, p2) -#define BP_CallFunction3(ptr, p1, p2, p3) (reinterpret_cast(ptr))(p1, p2, p3) -#define BP_CallFunction4(ptr, p1, p2, p3, p4) (reinterpret_cast(ptr))(p1, p2, p3, p4) -#define BP_CallFunction5(ptr, p1, p2, p3, p4, p5) (reinterpret_cast(ptr))(p1, p2, p3, p4, p5) \ No newline at end of file +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" + +DLL(intptr_t) BS_BlitzPointer_GetReturnAddress(); +DLL(intptr_t) BS_BlitzPointer_GetFunctionPointer(); + +// Types of Blitz Functions. +typedef int32_t(__stdcall *BP_BlitzFunction0_t)(); +typedef int32_t(__stdcall *BP_BlitzFunction1_t)(int32_t); +typedef int32_t(__stdcall *BP_BlitzFunction2_t)(int32_t, int32_t); +typedef int32_t(__stdcall *BP_BlitzFunction3_t)(int32_t, int32_t, int32_t); +typedef int32_t(__stdcall *BP_BlitzFunction4_t)(int32_t, int32_t, int32_t, int32_t); +typedef int32_t(__stdcall *BP_BlitzFunction5_t)(int32_t, int32_t, int32_t, int32_t, int32_t); + +#define BP_CallFunction0(ptr) (ptr)() +#define BP_CallFunction1(ptr, p1) (ptr)(p1) +#define BP_CallFunction2(ptr, p1, p2) (ptr)(p1, p2) +#define BP_CallFunction3(ptr, p1, p2, p3) (ptr)(p1, p2, p3) +#define BP_CallFunction4(ptr, p1, p2, p3, p4) (ptr)(p1, p2, p3, p4) +#define BP_CallFunction5(ptr, p1, p2, p3, p4, p5) (ptr)(p1, p2, p3, p4, p5) \ No newline at end of file diff --git a/Helpers/Helper.cpp b/Helpers/Helper.cpp index ff8e691..5a8b45c 100644 --- a/Helpers/Helper.cpp +++ b/Helpers/Helper.cpp @@ -1,90 +1,60 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "Helper.h" - -DLL(const char*) BS_Helper_FormatUnixTime(uint32_t unTime, const char* pchFormat) { - char* output = new char[strlen(pchFormat) * 4]; - time_t t = unTime; - struct tm *tm = localtime(&t); - strftime(output, sizeof(output), pchFormat, tm); - delete tm; - return output; -} - -DLL(void) BS_Helper_CopyMemoryIntMangle(void* pSource, void* pDest, int32_t iMangling, - uint32_t iSourceW, uint32_t iSourceH, uint32_t iDestW, uint32_t iDestH, - uint32_t iAreaX, uint32_t iAreaY, uint32_t iAreaW, uint32_t iAreaH) { - int8_t iMangleByte0 = static_cast((iMangling & 0xFF)); - int8_t iMangleByte1 = static_cast((iMangling & 0xFF00) >> 8); - int8_t iMangleByte2 = static_cast((iMangling & 0xFF0000) >> 16); - int8_t iMangleByte3 = static_cast((iMangling & 0xFF000000) >> 24); - - if (pSource > pDest) { - // Start at beginning - for (uint32_t iY = iAreaY; iY < (iAreaY + iAreaH); iY++) { - // Only do this once per loop - for (uint32_t iX = iAreaX; iX < (iAreaX + iAreaW); iX++) { - // Could technically optimize the following into single instructions, but this is fast enough for now. - uint32_t* pSourceOff = reinterpret_cast(pSource) + ((iSourceW * iY) + iX); - uint32_t* pDestOff = reinterpret_cast(pDest) + ((iDestW * iY) + iX); - - // Allow Mangling using just a single integer and checking on the fly if it's positive or negative to branch out to the correct shift. - *pDestOff = - (iMangleByte0 > 0 ? - (*pSourceOff & 0xFF) >> iMangleByte0 : - (*pSourceOff & 0xFF) << -iMangleByte0) - + (iMangleByte1 > 0 ? - (*pSourceOff & 0xFF00) >> iMangleByte1 : - (*pSourceOff & 0xFF00) << -iMangleByte1) - + (iMangleByte2 > 0 ? - (*pSourceOff & 0xFF0000) >> iMangleByte2 : - (*pSourceOff & 0xFF0000) << -iMangleByte2) - + (iMangleByte3 > 0 ? - (*pSourceOff & 0xFF000000) >> iMangleByte3 : - (*pSourceOff & 0xFF000000) << -iMangleByte3); - } - } - } else { - //ToDo, mirror the above. Instead of adding we subtract. - //// Start at end - - //for (uint32_t iY = y + h; iY >= y; iY--) { - // pSourceOff = reinterpret_cast(pSource) + ((tw * iY) + x); - // pDestOff = reinterpret_cast(pDest) + ((tw * iY) + x); - - // for (uint32_t iX = x + w; iX >= x; iX--) { - // *pDestOff = - // (iMangleByte0 > 0 ? - // (*pSourceOff & 0xFF) >> iMangleByte0 : - // (*pSourceOff & 0xFF) << -iMangleByte0) - // + (iMangleByte1 > 0 ? - // (*pSourceOff & 0xFF00) >> iMangleByte1 : - // (*pSourceOff & 0xFF00) << -iMangleByte1) - // + (iMangleByte2 > 0 ? - // (*pSourceOff & 0xFF0000) >> iMangleByte2 : - // (*pSourceOff & 0xFF0000) << -iMangleByte2) - // + (iMangleByte3 > 0 ? - // (*pSourceOff & 0xFF000000) >> iMangleByte3 : - // (*pSourceOff & 0xFF000000) << -iMangleByte3); - - // // Above is some mangling magic i learned in some source code. Allows you to define a byte bit shift using a single integer. - // pSourceOff -= 1; - // pDestOff -= 1; - // } - //} - } +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "Helper.h" + +DLL(const char*) BS_Helper_FormatUnixTime(uint32_t unTime, const char* pchFormat) { + char* output = new char[strlen(pchFormat) * 4]; + time_t t = unTime; + struct tm *tm = localtime(&t); + strftime(output, sizeof(output), pchFormat, tm); + delete tm; + return output; +} + +DLL(void) BS_Helper_CopyMemoryIntMangle(void* pSource, void* pDest, int32_t iMangling, + uint32_t iSourceW, uint32_t iSourceH, uint32_t iDestW, uint32_t iDestH, + uint32_t iAreaX, uint32_t iAreaY, uint32_t iAreaW, uint32_t iAreaH) { + int8_t iMangleByte0 = static_cast((iMangling & 0xFF)); + int8_t iMangleByte1 = static_cast((iMangling & 0xFF00) >> 8); + int8_t iMangleByte2 = static_cast((iMangling & 0xFF0000) >> 16); + int8_t iMangleByte3 = static_cast((iMangling & 0xFF000000) >> 24); + + // Start at beginning + for (uint32_t iY = iAreaY; iY < (iAreaY + iAreaH); iY++) { + // Only do this once per loop + for (uint32_t iX = iAreaX; iX < (iAreaX + iAreaW); iX++) { + // Could technically optimize the following into single instructions, but this is fast enough for now. + uint32_t* pSourceOff = reinterpret_cast(pSource) + ((iSourceW * iY) + iX); + uint32_t* pDestOff = reinterpret_cast(pDest) + ((iDestW * iY) + iX); + + // Allow Mangling using just a single integer and checking on the fly if it's positive or negative to branch out to the correct shift. + *pDestOff = + (iMangleByte0 > 0 ? + (*pSourceOff & 0xFF) >> iMangleByte0 : + (*pSourceOff & 0xFF) << -iMangleByte0) + + (iMangleByte1 > 0 ? + (*pSourceOff & 0xFF00) >> iMangleByte1 : + (*pSourceOff & 0xFF00) << -iMangleByte1) + + (iMangleByte2 > 0 ? + (*pSourceOff & 0xFF0000) >> iMangleByte2 : + (*pSourceOff & 0xFF0000) << -iMangleByte2) + + (iMangleByte3 > 0 ? + (*pSourceOff & 0xFF000000) >> iMangleByte3 : + (*pSourceOff & 0xFF000000) << -iMangleByte3); + } + } } \ No newline at end of file diff --git a/Helpers/Helper.h b/Helpers/Helper.h index 64e617b..d712fcd 100644 --- a/Helpers/Helper.h +++ b/Helpers/Helper.h @@ -1,21 +1,21 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteam.h" -#include - +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteam.h" +#include + DLL(const char*) BS_Helper_FormatUnixTime(uint32_t unTime, const char* pchFormat); \ No newline at end of file diff --git a/Resources/BlitzSteam.LICENSE b/Resources/BlitzSteam.LICENSE index 9cecc1d..c65825e 100644 --- a/Resources/BlitzSteam.LICENSE +++ b/Resources/BlitzSteam.LICENSE @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Resources/BlitzSteam.LICENSE.lesser b/Resources/BlitzSteam.LICENSE.lesser index 65c5ca8..b14ca0a 100644 --- a/Resources/BlitzSteam.LICENSE.lesser +++ b/Resources/BlitzSteam.LICENSE.lesser @@ -1,165 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/Resources/BlitzSteam.bb b/Resources/BlitzSteam.bb index da3d351..efda130 100644 --- a/Resources/BlitzSteam.bb +++ b/Resources/BlitzSteam.bb @@ -574,6 +574,15 @@ Const BS_EMarketingMessageFlags_PlatformLinux = 1 Shl 3 Const BS_EMarketingMessageFlags_PlatformRestrictions = BS_EMarketingMessageFlags_PlatformWindows Or BS_EMarketingMessageFlags_PlatformMac Or BS_EMarketingMessageFlags_PlatformLinux ;[End Block] +;[Block] Enumeration: EMatchMakingServerResponse +;------------------------------------------------------------------------------ +;! Enumeration - EMatchMakingServerResponse +;------------------------------------------------------------------------------ +Const BS_EMatchMakingServerResponse_ServerResponded = 0 +Const BS_EMatchMakingServerResponse_ServerFailedToRespond = 1 +Const BS_EMatchMakingServerResponse_NoServersListedOnMasterServer = 2 +;[End Block] + ;[Block] Enumeration: ENotificationPosition ;------------------------------------------------------------------------------ ;! Enumeration - ENotificationPosition @@ -1890,6 +1899,6 @@ End Type ;~IDEal Editor Parameters: ;~F#13#26#31#49#60#71#7E#93#C8#E0#F5#101#110#121#14F#166#178#190#1A1#1E2 -;~F#1EB#1F5#20C#216#220#229#232#240#24B#255#26B#27C#295#2A5#314#322#32C#33C#344#351 -;~F#360#36E#378#389#39D#3A0#3B6#3EA#40A#429#525#543#553#560#653#6CC#6FF +;~F#1EB#1F5#20C#216#220#229#249#254#25E#274#285#29E#2AE#31D#32B#335#345#34D#35A#369 +;~F#377#381#392#3A6#3A9#3BF#3F3#413#432#52E#54C#55C#569#65C#6D5#708 ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/BlitzSteam.ipf b/Resources/BlitzSteam.ipf index 2cb969c..fdfa47e 100644 --- a/Resources/BlitzSteam.ipf +++ b/Resources/BlitzSteam.ipf @@ -1,21 +1,22 @@ -[IDEal Project file] - - Version="1" - Expanded="False" - Icon="" - MainFile="SteamHTMLSurface_Example.bb" - Compiler="Blitz3D" - CommandLine="" - - - AbsPath="\Examples" Expanded="True" - - - AbsPath="\BlitzSteam.bb" PrjFolder="" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\BlitzSteamUtility.bb" PrjFolder="" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\Examples\SteamAPI_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\Examples\SteamAppList_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\Examples\SteamApps_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\Examples\SteamController_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" - AbsPath="\Examples\SteamHTMLSurface_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" - +[IDEal Project file] + + Version="1" + Expanded="True" + Icon="" + MainFile="SteamMatchmakingServers_Example.bb" + Compiler="Blitz3D" + CommandLine="" + + + AbsPath="\Examples" Expanded="True" + + + AbsPath="\BlitzSteam.bb" PrjFolder="" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\BlitzSteamUtility.bb" PrjFolder="" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamAPI_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamAppList_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamApps_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamController_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamHTMLSurface_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + AbsPath="\Examples\SteamMatchmakingServers_Example.bb" PrjFolder="\Examples" Line="0" Column="0" Tip="0" Visible="False" + diff --git a/Resources/BlitzSteamUtility.bb b/Resources/BlitzSteamUtility.bb index 01c5f5e..6c7562a 100644 --- a/Resources/BlitzSteamUtility.bb +++ b/Resources/BlitzSteamUtility.bb @@ -1,628 +1,628 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -;------------------------------------------------------------------------------ -;! Constants -;------------------------------------------------------------------------------ -Const BSU_NAME_LENGTH = 4096 -Const BSU_INSTALLDIR_LENGTH = 4096 -Const BSU_APPID_COUNT = 4096 -Const BSU_INSTALLEDDEPOTS_COUNT = 4096 - -;------------------------------------------------------------------------------ -;! Globals -;------------------------------------------------------------------------------ -Global BSU_Initialized = False -Global BSU_IsSteamRunning% = False -; -- Interfaces -Global BSU_AppList% -Global BSU_Apps% -Global BSU_Client% -Global BSU_Controller% -Global BSU_Friends% -Global BSU_GameServer% -Global BSU_GameServerStats% -Global BSU_HTMLSurface% -Global BSU_HTTP% -Global BSU_Inventory% -Global BSU_Matchmaking% -Global BSU_MatchmakingServers% -Global BSU_Music% -Global BSU_MusicRemote% -Global BSU_Networking% -Global BSU_RemoteStorage% -Global BSU_Screenshots% -Global BSU_UGC% -Global BSU_UnifiedMessages% -Global BSU_User% -Global BSU_UserStats% -Global BSU_Utils% -Global BSU_Video% - -;[Block] API: Steam -;------------------------------------------------------------------------------ -;! API: Steam -;------------------------------------------------------------------------------ -Function BSU_Init() - BSU_IsSteamRunning = BS_Steam_IsSteamRunning() - If BSU_IsSteamRunning And BS_Steam_Init() Then - - BSU_AppList = BS_AppList() - BSU_Apps = BS_Apps() - BSU_Client = BS_Client() - BSU_Controller = BS_Controller() - BSU_Friends = BS_Friends() - BSU_GameServer = BS_GameServer() - BSU_GameServerStats = BS_GameServerStats() - BSU_HTMLSurface = BS_HTMLSurface() - BSU_HTTP = BS_HTTP() - BSU_Inventory = BS_Inventory() - BSU_Matchmaking = BS_Matchmaking() - BSU_MatchmakingServers = BS_MatchmakingServers() - BSU_Music = BS_Music() - BSU_MusicRemote = BS_MusicRemote() - BSU_Networking = BS_Networking() - BSU_RemoteStorage = BS_RemoteStorage() - BSU_Screenshots = BS_Screenshots() - BSU_UGC = BS_UGC() - BSU_UnifiedMessages = BS_UnifiedMessages() - BSU_User = BS_User() - BSU_UserStats = BS_UserStats() - BSU_Utils = BS_Utils() - BSU_Video = BS_Video() - - BSU_Initialized = True - EndIf -End Function - -Function BSU_Shutdown() - If BSU_IsSteamRunning - BS_GameServer_Shutdown() - BS_Steam_Shutdown() - - BSU_AppList=0 - BSU_Apps=0 - BSU_Client=0 - BSU_Controller=0 - BSU_Friends=0 - BSU_GameServer=0 - BSU_GameServerStats=0 - BSU_HTTP=0 - BSU_HTMLSurface=0 - BSU_Matchmaking=0 - BSU_MatchmakingServers=0 - BSU_Music=0 - BSU_MusicRemote=0 - BSU_Networking=0 - BSU_RemoteStorage=0 - BSU_Screenshots=0 - BSU_UGC=0 - BSU_UnifiedMessages=0 - BSU_User=0 - BSU_UserStats=0 - BSU_Utils=0 - BSU_Video=0 - - BSU_Initialized = False - EndIf -End Function -;[End Block] - -;[Block] API: AppList -;------------------------------------------------------------------------------ -;! API: AppList -;------------------------------------------------------------------------------ -Type BSU_App - Field AppId% - Field Name$ - Field InstallDir$ -End Type -Global BSU_AppCount = 0 - -Function BSU_AppList_GetInstalledApps(BankAppIdsStorage=0, BankAppNameStorage=0, BankAppInstallDirStorage=0) - Local BankAppIds, BankAppIdsSz = BSU_APPID_COUNT - Local BankAppName, BankAppNameSz = BSU_NAME_LENGTH - Local BankAppInstallDir, BankAppInstallDirSz = BSU_INSTALLDIR_LENGTH - Local AppCount%, InstalledApp.BSU_App - - If BSU_Initialized Then - ; Clear Installed App List - Delete Each BSU_App - - ; Early-Exit to not waste time. - If BS_AppList_GetNumInstalledApps(BSU_Apps) = 0 Then Return - - If BankAppIdsStorage = 0 - ; Create Temporary storage for AppIds. - BankAppIds = CreateBank(BankAppIdsSz * 4) - Else - ; Reuse existing Bank. - BankAppIds = BankAppIdsStorage - BankAppIdsSz = Floor(BankSize(BankAppIds) / 4) - EndIf - - ; Request installed apps from Steam. - BSU_AppCount = BS_AppList_GetInstalledApps(BSU_AppList, BankAppIds, BankAppIdsSz) - - ; We don't need to do this if we don't actually have any apps returned. - If BSU_AppCount > 0 Then - If BankAppNameStorage = 0 Then - ; Create temporary storage for name. - BankAppName = CreateBank(BankAppNameSz) - Else - BankAppName = BankAppNameStorage - BankAppNameSz = BankSize(BankAppName) - EndIf - If BankAppInstallDirStorage = 0 Then - ; Create temporary storage for installdir. - BankAppInstallDir = CreateBank(BankAppInstallDirSz) - Else - BankAppInstallDir = BankAppInstallDirStorage - BankAppInstallDirSz = BankSize(BankAppInstallDir) - EndIf - - ; Index all apps. - Local AppIndex - For AppIndex = 0 To BSU_AppCount - 1 - InstalledApp.BSU_App = New BSU_App - InstalledApp\AppId = PeekInt(BankAppIds, AppIndex * 4) - InstalledApp\Name = BSU_AppList_GetAppName(InstalledApp\AppId, BankAppName) - InstalledApp\InstallDir = BSU_AppList_GetInstallDir(InstalledApp\AppId, BankAppInstallDir) - Next - - ; Free temporary storage for name and installdir. - If BankAppInstallDirStorage = 0 Then FreeBank BankAppInstallDir - If BankAppNameStorage = 0 Then FreeBank BankAppName - EndIf - - ; Free temporary storage for AppIds. - If BankAppIdsStorage = 0 Then FreeBank BankAppIds - EndIf -End Function - -Function BSU_AppList_GetAppName$(AppID%, BankStorage=0) - Local Bank, BankSz = BSU_NAME_LENGTH - Local AppName$ - - If BSU_Initialized Then - If BankStorage = 0 Then - ; Create temporary storage. - Bank = CreateBank(BankSz) - Else - ; Reuse existing Bank. - Bank = BankStorage - BankSz = BankSize(Bank) - EndIf - - ; Request App name from Steam. - BS_AppList_GetAppName(BSU_AppList, AppID, Bank, BankSz) - - ; Read returned C-String from Bank. - AppName$ = BSU_PeekCString(Bank, 0) - - ; Free temporary storage. - If BankStorage = 0 Then FreeBank Bank - EndIf - - ; Return name read. - Return AppName -End Function - -Function BSU_AppList_GetInstallDir$(AppID%, BankStorage=0) - Local Bank, BankSz = BSU_INSTALLDIR_LENGTH - Local AppInstallDir$ - - If BSU_Initialized Then - If BankStorage = 0 Then - ; Create temporary storage. - Bank = CreateBank(BankSz) - Else - ; Reuse existing Bank. - Bank = BankStorage - BankSz = BankSize(Bank) - EndIf - - ; Request App name from Steam. - BS_AppList_GetAppInstallDir(BSU_AppList, AppID, Bank, BankSz) - - ; Read returned C-String from Bank. - AppInstallDir$ = BSU_PeekCString(Bank, 0) - - ; Free temporary storage. - If BankStorage = 0 Then FreeBank Bank - EndIf - - ; Return name read. - Return AppInstallDir -End Function -;[End Block] - -;[Block] API: Apps -;------------------------------------------------------------------------------ -;! API: Apps -;------------------------------------------------------------------------------ -Type BSU_DLC - Field AppId% - Field Available% - Field Name$ -End Type -Global BSU_DLCCount - -Type BSU_Depot - Field DepotId% -End Type -Global BSU_DepotCount - -Function BSU_Apps_GetDLCData(BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) - Local BankAppId%, BankAvailable% - Local BankName%, BankNameSz% = BSU_NAME_LENGTH - Local DLCCount% = 0 - - If BSU_Initialized Then - Delete Each BSU_DLC - - BSU_DLCCount = BS_Apps_GetDLCCount(BSU_Apps) - If BSU_DLCCount > 0 - If BankAppIdStorage = 0 Then - ; Create temporary storage for AppId. - BankAppId = CreateBank(4) - Else - ; Reuse existing storage. - BankAppId = BankAppIdStorage - EndIf - - If BankAvailableStorage = 0 Then - ; Create temporary storage for Availability. - BankAvailable = CreateBank(4) - Else - ; Reuse existing storage. - BankAvailable = BankAvailableStorage - EndIf - - If BankNameStorage = 0 Then - ; Create temporary storage for Availability. - BankName = CreateBank(BankNameSz) - Else - ; Reuse existing storage. - BankName = BankNameStorage - BankNameSz = BankSize(BankName) - EndIf - - Local DLCIndex% - For DLCIndex = 0 To BSU_DLCCount - 1 - BSU_Apps_GetDLCDataByIndex(DLCIndex, BankAppId, BankAvailable, BankName) - Next - - ; Free temporary storages. - If BankNameStorage = 0 Then FreeBank BankName - If BankAvailableStorage = 0 Then FreeBank BankAvailable - If BankAppIdStorage = 0 Then FreeBank BankAppId - EndIf - EndIf -End Function - -Function BSU_Apps_GetDLCDataByIndex.BSU_DLC(iDLC%, BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) - Local BankAppId%, BankAvailable% - Local BankName%, BankNameSz% = BSU_NAME_LENGTH - Local DLC.BSU_DLC - - If BSU_Initialized Then - If BankAppIdStorage = 0 Then - ; Create temporary storage for AppId. - BankAppId = CreateBank(4) - Else - ; Reuse existing storage. - BankAppId = BankAppIdStorage - EndIf - - If BankAvailableStorage = 0 Then - ; Create temporary storage for Availability. - BankAvailable = CreateBank(4) - Else - ; Reuse existing storage. - BankAvailable = BankAvailableStorage - EndIf - - If BankNameStorage = 0 Then - ; Create temporary storage for Availability. - BankName = CreateBank(BankNameSz) - Else - ; Reuse existing storage. - BankName = BankNameStorage - BankNameSz = BankSize(BankName) - EndIf - - ; Request DLC Data from Steam. - If BS_Apps_GetDLCDataByIndex(BSU_Apps, iDLC, BankAppId, BankAvailable, BankName, BankNameSz) - ; Create a result DLC object. - DLC.BSU_DLC = New BSU_DLC - DLC\AppId = PeekInt(BankAppId, 0) - DLC\Available = PeekInt(BankAvailable, 0) - DLC\Name = BSU_PeekCString(BankName, 0) - EndIf - - ; Free temporary storages. - If BankNameStorage = 0 Then FreeBank BankName - If BankAvailableStorage = 0 Then FreeBank BankAvailable - If BankAppIdStorage = 0 Then FreeBank BankAppId - EndIf - - ; Return the result. - Return DLC -End Function - -Function BSU_Apps_GetCurrentBetaName$(BankNameStorage=0) - Local BankName, BankNameSz = BSU_NAME_LENGTH - Local BetaName$ = "" - - If BSU_Initialized Then - If BankNameStorage = 0 Then - ; Create temporary storage for name. - BankName = CreateBank(BankNameSz) - Else - ; Reuse existing storage. - BankName = BankNameStorage - BankNameSz = BankSize(BankName) - EndIf - - ; Request beta name from Steam. - BS_Apps_GetCurrentBetaName(BSU_Apps, BankName, BankNameSz) - - ; Read returned name. - BetaName = BSU_PeekCString(BankName, 0) - - ; Free temporary storage. - If BankNameStorage = 0 Then FreeBank BankName - EndIf - - ; Return the result. - Return BetaName -End Function - -Function BSU_Apps_GetInstalledDepots(nAppID%, BankDepotStorage=0) - Local BankDepot, BankDepotSz = BSU_INSTALLEDDEPOTS_COUNT - Local DepotCount - - If BSU_Initialized Then - Delete Each BSU_Depot - - If BankDepotStorage = 0 Then - ; Create temporary storage. - BankDepot = CreateBank(BankDepotSz * 4) - Else - ; Reuse existing storage. - BankDepot = BankDepotStorage - BankDepotSz = BankSize(BankDepot) / 4 - EndIf - - ; Request depots from Steam. - BSU_DepotCount = BS_Apps_GetInstalledDepots(BSU_Apps, nAppID, BankDepot, BankDepotSz) - - ; Read returned depots into objects. - Local DepotIndex - For DepotIndex = 0 To BSU_DepotCount - 1 - Local Depot.BSU_Depot = New BSU_Depot - Depot\DepotId = PeekInt(BankDepot, DepotIndex * 4) - Next - - ; Free temporary storage. - If BankDepotStorage = 0 Then FreeBank BankDepot - EndIf -End Function - -Function BSU_Apps_GetAppInstallDir$(nAppID%, BankInstallDirStorage=0) - Local BankInstallDir, BankInstallDirSz = BSU_INSTALLDIR_LENGTH - Local InstallDir$ - - If BSU_Initialized Then - If BankInstallDirStorage = 0 Then - ; Create temporary storage. - BankInstallDir = CreateBank(BankInstallDirSz) - Else - ; Reuse existing storage. - BankInstallDir = BankInstallDirStorage - BankInstallDirSz = BankSize(BankInstallDir) - EndIf - - ; Request install dir from Steam. - Local InstallDirLen% = BS_Apps_GetAppInstallDir(BSU_Apps, nAppID, BankInstallDir, BankInstallDirSz) - - ; Read returned value. - InstallDir = BSU_PeekCString(BankInstallDir, 0) - - ; Free temporary storage. - If BankInstallDirStorage = 0 Then FreeBank BankInstallDir - EndIf - - Return InstallDir$ -End Function - -Function BSU_Apps_GetDLCDownloadProgress#(nAppID%) - Local Progress# = 1.0 - If BSU_Initialized - ; Create temporary storage. - Local i64_Downloaded, i64_Total - i64_Downloaded = BU_LongLong_Create() - i64_Total = BU_LongLong_Create() - - ; Request download progress from Steam. - If BS_Apps_GetDlcDownloadProgressEx(BSU_Apps, nAppID, i64_Downloaded, i64_Total) Then - Local dDownloaded, dTotal - dDownloaded = BU_LongLong_ToDouble(i64_Downloaded) - dTotal = BU_LongLong_ToDouble(i64_Total) - - BU_Double_Div(dDownloaded, dTotal) - Progress = BU_Double_ToFloat(dDownloaded) - - BU_Double_Destroy dDownloaded - BU_Double_Destroy dTotal - EndIf - - ; Free temporary storage. - BU_LongLong_Destroy i64_Downloaded - BU_LongLong_Destroy i64_Total - EndIf - Return Progress -End Function -;[End Block] - -;[Block] API: Apps -;------------------------------------------------------------------------------ -;! API: Friends -;------------------------------------------------------------------------------ -Type BSU_Friend - Field SteamID_L, SteamID_R - - Field Name$ - Field NickName$ - - Field Index% - Field Relationship% - Field State% - Field SteamLevel% -End Type -Global BSU_FriendCount - -Function BSU_Friends_GetFriends(iFriendFlags = BS_EFriendFlags_All) - If BSU_Initialized Then - Delete Each BSU_Friend - - BSU_FriendCount = BS_Friends_GetFriendCount(BSU_Friends, iFriendFlags) - If BSU_FriendCount > 0 Then - Local FriendIndex - For FriendIndex = 0 To BSU_FriendCount - 1 - Local CSteamID = BS_Friends_GetFriendByIndex(BSU_Friends, FriendIndex, iFriendFlags) - Local Friend.BSU_Friend = New BSU_Friend - - ; Store a 'native' version of the SteamID - Local SteamID64 = BS_CSteamID_ConvertToUInt64(CSteamID) - Friend\SteamID_L = BU_LongLong_ToLongHigh(SteamID64) - Friend\SteamID_R = BU_LongLong_ToLongLow(SteamID64) - BU_LongLong_Destroy(SteamID64) - - ; Names - Friend\Name = BS_Friends_GetFriendPersonaName(BSU_Friends, CSteamID) - Friend\NickName = BS_Friends_GetPlayerNickname(BSU_Friends, CSteamID) - - ; Other Stuff - Friend\Index = FriendIndex - Friend\Relationship = BS_Friends_GetFriendRelationship(BSU_Friends, CSteamID) - Friend\State = BS_Friends_GetFriendPersonaState(BSU_Friends, CSteamID) - Friend\SteamLevel = BS_Friends_GetFriendSteamLevel(BSU_Friends, CSteamID) - - BS_CSteamID_Destroy(CSteamID) - Next - EndIf - EndIf -End Function - -;[Block] API: GameServer -;------------------------------------------------------------------------------ -;! API: GameServer -;------------------------------------------------------------------------------ -Function BSU_GameServer_Init(IPv4%=0, Port%=27015, SteamPort%=27016, QueryPort=27017, ServerMode=BS_EServerMode_AuthenticationAndSecure, Version$="1.0.0.0") - If BS_SteamGameServer_Init(IPv4, SteamPort, Port, QueryPort, ServerMode, Version) Then - BSU_GameServer = BS_GameServer() - BSU_GameServerStats = BS_GameServerStats() - BSU_HTTP = BS_GameServerHTTP() - BSU_Inventory = BS_GameServerInventory() - BSU_Networking = BS_GameServerNetworking() - BSU_UGC = BS_GameServerUGC() - BSU_Utils = BS_GameServerUtils() - - BSU_Initialized = True - EndIf -End Function - -Function BSU_GameServer_Shutdown() - If BSU_Initialized = True - BS_SteamGameServer_Shutdown() - - BSU_GameServer=0 - BSU_GameServerStats=0 - BSU_HTTP=0 - BSU_Inventory=0 - BSU_Networking=0 - BSU_UGC=0 - BSU_Utils=0 - - BSU_Initialized = False - EndIf -End Function -;[End Block] - -;------------------------------------------------------------------------------ -;! API: GameServerStats -;------------------------------------------------------------------------------ - - - -;[Block] Blitz Stuff -;---------------------------------------------------------------- -;! Blitz Stuff -;---------------------------------------------------------------- -; -- Utility -; Writes a C-String value to a Bank. -; Returns amount of bytes written. -Function BSU_PokeCString%(Bank%, Pos%, Value$) - If Bank Then - Local BankSz = BankSize(Bank) - - If Pos < 0 Then Pos = 0 - If Pos >= BankSz Then Pos = BankSz - 1 - - Local ValuePos, ValueLen = Len(Value) - For ValuePos = 1 To ValueLen - ; Don't write over the edge, we still need space for the 0-byte - If (Pos + ValuePos) >= (BankSz - 1) Then Exit - - PokeByte Bank, Pos + ValuePos, Asc(Mid(Value, ValuePos, 1)) - Next - PokeByte Bank, Pos + ValuePos, 0 - Return ValuePos - EndIf -End Function - -; Reads a C-String value from a Bank. -; Returns read C-String -Function BSU_PeekCString$(Bank%, Pos%, Len%=-1) - If Bank Then - Local BankSz = BankSize(Bank) - - If Pos < 0 Then Pos = 0 - If Pos >= BankSz Then Pos = BankSz - 1 - - Local OutStr$, OutLen = (BankSz - Pos) - Local BankPos - For BankPos = 0 To OutLen - If (Pos + BankPos) >= BankSz Then Exit - - Local Value = PeekByte(Bank, Pos + BankPos) - - If (Value = 0 And Len = -1) Or (Pos > Len) Then - Exit - Else - OutStr=OutStr+Chr(Value) - EndIf - Next - Return OutStr - EndIf -End Function -;[End Block] - -;~IDEal Editor Parameters: -;~F#3A#5A#7F#86#C3#DF#100#107#10C#13C#16E#18A#1A9#1C4 +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +;------------------------------------------------------------------------------ +;! Constants +;------------------------------------------------------------------------------ +Const BSU_NAME_LENGTH = 4096 +Const BSU_INSTALLDIR_LENGTH = 4096 +Const BSU_APPID_COUNT = 4096 +Const BSU_INSTALLEDDEPOTS_COUNT = 4096 + +;------------------------------------------------------------------------------ +;! Globals +;------------------------------------------------------------------------------ +Global BSU_Initialized = False +Global BSU_IsSteamRunning% = False +; -- Interfaces +Global BSU_AppList% +Global BSU_Apps% +Global BSU_Client% +Global BSU_Controller% +Global BSU_Friends% +Global BSU_GameServer% +Global BSU_GameServerStats% +Global BSU_HTMLSurface% +Global BSU_HTTP% +Global BSU_Inventory% +Global BSU_Matchmaking% +Global BSU_MatchmakingServers% +Global BSU_Music% +Global BSU_MusicRemote% +Global BSU_Networking% +Global BSU_RemoteStorage% +Global BSU_Screenshots% +Global BSU_UGC% +Global BSU_UnifiedMessages% +Global BSU_User% +Global BSU_UserStats% +Global BSU_Utils% +Global BSU_Video% + +;[Block] API: Steam +;------------------------------------------------------------------------------ +;! API: Steam +;------------------------------------------------------------------------------ +Function BSU_Init() + BSU_IsSteamRunning = BS_Steam_IsSteamRunning() + If BSU_IsSteamRunning And BS_Steam_Init() Then + + BSU_AppList = BS_AppList() + BSU_Apps = BS_Apps() + BSU_Client = BS_Client() + BSU_Controller = BS_Controller() + BSU_Friends = BS_Friends() + BSU_GameServer = BS_GameServer() + BSU_GameServerStats = BS_GameServerStats() + BSU_HTMLSurface = BS_HTMLSurface() + BSU_HTTP = BS_HTTP() + BSU_Inventory = BS_Inventory() + BSU_Matchmaking = BS_Matchmaking() + BSU_MatchmakingServers = BS_MatchmakingServers() + BSU_Music = BS_Music() + BSU_MusicRemote = BS_MusicRemote() + BSU_Networking = BS_Networking() + BSU_RemoteStorage = BS_RemoteStorage() + BSU_Screenshots = BS_Screenshots() + BSU_UGC = BS_UGC() + BSU_UnifiedMessages = BS_UnifiedMessages() + BSU_User = BS_User() + BSU_UserStats = BS_UserStats() + BSU_Utils = BS_Utils() + BSU_Video = BS_Video() + + BSU_Initialized = True + EndIf +End Function + +Function BSU_Shutdown() + If BSU_IsSteamRunning + BS_GameServer_Shutdown() + BS_Steam_Shutdown() + + BSU_AppList=0 + BSU_Apps=0 + BSU_Client=0 + BSU_Controller=0 + BSU_Friends=0 + BSU_GameServer=0 + BSU_GameServerStats=0 + BSU_HTTP=0 + BSU_HTMLSurface=0 + BSU_Matchmaking=0 + BSU_MatchmakingServers=0 + BSU_Music=0 + BSU_MusicRemote=0 + BSU_Networking=0 + BSU_RemoteStorage=0 + BSU_Screenshots=0 + BSU_UGC=0 + BSU_UnifiedMessages=0 + BSU_User=0 + BSU_UserStats=0 + BSU_Utils=0 + BSU_Video=0 + + BSU_Initialized = False + EndIf +End Function +;[End Block] + +;[Block] API: AppList +;------------------------------------------------------------------------------ +;! API: AppList +;------------------------------------------------------------------------------ +Type BSU_App + Field AppId% + Field Name$ + Field InstallDir$ +End Type +Global BSU_AppCount = 0 + +Function BSU_AppList_GetInstalledApps(BankAppIdsStorage=0, BankAppNameStorage=0, BankAppInstallDirStorage=0) + Local BankAppIds, BankAppIdsSz = BSU_APPID_COUNT + Local BankAppName, BankAppNameSz = BSU_NAME_LENGTH + Local BankAppInstallDir, BankAppInstallDirSz = BSU_INSTALLDIR_LENGTH + Local AppCount%, InstalledApp.BSU_App + + If BSU_Initialized Then + ; Clear Installed App List + Delete Each BSU_App + + ; Early-Exit to not waste time. + If BS_AppList_GetNumInstalledApps(BSU_Apps) = 0 Then Return + + If BankAppIdsStorage = 0 + ; Create Temporary storage for AppIds. + BankAppIds = CreateBank(BankAppIdsSz * 4) + Else + ; Reuse existing Bank. + BankAppIds = BankAppIdsStorage + BankAppIdsSz = Floor(BankSize(BankAppIds) / 4) + EndIf + + ; Request installed apps from Steam. + BSU_AppCount = BS_AppList_GetInstalledApps(BSU_AppList, BankAppIds, BankAppIdsSz) + + ; We don't need to do this if we don't actually have any apps returned. + If BSU_AppCount > 0 Then + If BankAppNameStorage = 0 Then + ; Create temporary storage for name. + BankAppName = CreateBank(BankAppNameSz) + Else + BankAppName = BankAppNameStorage + BankAppNameSz = BankSize(BankAppName) + EndIf + If BankAppInstallDirStorage = 0 Then + ; Create temporary storage for installdir. + BankAppInstallDir = CreateBank(BankAppInstallDirSz) + Else + BankAppInstallDir = BankAppInstallDirStorage + BankAppInstallDirSz = BankSize(BankAppInstallDir) + EndIf + + ; Index all apps. + Local AppIndex + For AppIndex = 0 To BSU_AppCount - 1 + InstalledApp.BSU_App = New BSU_App + InstalledApp\AppId = PeekInt(BankAppIds, AppIndex * 4) + InstalledApp\Name = BSU_AppList_GetAppName(InstalledApp\AppId, BankAppName) + InstalledApp\InstallDir = BSU_AppList_GetInstallDir(InstalledApp\AppId, BankAppInstallDir) + Next + + ; Free temporary storage for name and installdir. + If BankAppInstallDirStorage = 0 Then FreeBank BankAppInstallDir + If BankAppNameStorage = 0 Then FreeBank BankAppName + EndIf + + ; Free temporary storage for AppIds. + If BankAppIdsStorage = 0 Then FreeBank BankAppIds + EndIf +End Function + +Function BSU_AppList_GetAppName$(AppID%, BankStorage=0) + Local Bank, BankSz = BSU_NAME_LENGTH + Local AppName$ + + If BSU_Initialized Then + If BankStorage = 0 Then + ; Create temporary storage. + Bank = CreateBank(BankSz) + Else + ; Reuse existing Bank. + Bank = BankStorage + BankSz = BankSize(Bank) + EndIf + + ; Request App name from Steam. + BS_AppList_GetAppName(BSU_AppList, AppID, Bank, BankSz) + + ; Read returned C-String from Bank. + AppName$ = BSU_PeekCString(Bank, 0) + + ; Free temporary storage. + If BankStorage = 0 Then FreeBank Bank + EndIf + + ; Return name read. + Return AppName +End Function + +Function BSU_AppList_GetInstallDir$(AppID%, BankStorage=0) + Local Bank, BankSz = BSU_INSTALLDIR_LENGTH + Local AppInstallDir$ + + If BSU_Initialized Then + If BankStorage = 0 Then + ; Create temporary storage. + Bank = CreateBank(BankSz) + Else + ; Reuse existing Bank. + Bank = BankStorage + BankSz = BankSize(Bank) + EndIf + + ; Request App name from Steam. + BS_AppList_GetAppInstallDir(BSU_AppList, AppID, Bank, BankSz) + + ; Read returned C-String from Bank. + AppInstallDir$ = BSU_PeekCString(Bank, 0) + + ; Free temporary storage. + If BankStorage = 0 Then FreeBank Bank + EndIf + + ; Return name read. + Return AppInstallDir +End Function +;[End Block] + +;[Block] API: Apps +;------------------------------------------------------------------------------ +;! API: Apps +;------------------------------------------------------------------------------ +Type BSU_DLC + Field AppId% + Field Available% + Field Name$ +End Type +Global BSU_DLCCount + +Type BSU_Depot + Field DepotId% +End Type +Global BSU_DepotCount + +Function BSU_Apps_GetDLCData(BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) + Local BankAppId%, BankAvailable% + Local BankName%, BankNameSz% = BSU_NAME_LENGTH + Local DLCCount% = 0 + + If BSU_Initialized Then + Delete Each BSU_DLC + + BSU_DLCCount = BS_Apps_GetDLCCount(BSU_Apps) + If BSU_DLCCount > 0 + If BankAppIdStorage = 0 Then + ; Create temporary storage for AppId. + BankAppId = CreateBank(4) + Else + ; Reuse existing storage. + BankAppId = BankAppIdStorage + EndIf + + If BankAvailableStorage = 0 Then + ; Create temporary storage for Availability. + BankAvailable = CreateBank(4) + Else + ; Reuse existing storage. + BankAvailable = BankAvailableStorage + EndIf + + If BankNameStorage = 0 Then + ; Create temporary storage for Availability. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + Local DLCIndex% + For DLCIndex = 0 To BSU_DLCCount - 1 + BSU_Apps_GetDLCDataByIndex(DLCIndex, BankAppId, BankAvailable, BankName) + Next + + ; Free temporary storages. + If BankNameStorage = 0 Then FreeBank BankName + If BankAvailableStorage = 0 Then FreeBank BankAvailable + If BankAppIdStorage = 0 Then FreeBank BankAppId + EndIf + EndIf +End Function + +Function BSU_Apps_GetDLCDataByIndex.BSU_DLC(iDLC%, BankAppIdStorage=0, BankAvailableStorage=0, BankNameStorage=0) + Local BankAppId%, BankAvailable% + Local BankName%, BankNameSz% = BSU_NAME_LENGTH + Local DLC.BSU_DLC + + If BSU_Initialized Then + If BankAppIdStorage = 0 Then + ; Create temporary storage for AppId. + BankAppId = CreateBank(4) + Else + ; Reuse existing storage. + BankAppId = BankAppIdStorage + EndIf + + If BankAvailableStorage = 0 Then + ; Create temporary storage for Availability. + BankAvailable = CreateBank(4) + Else + ; Reuse existing storage. + BankAvailable = BankAvailableStorage + EndIf + + If BankNameStorage = 0 Then + ; Create temporary storage for Availability. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + ; Request DLC Data from Steam. + If BS_Apps_GetDLCDataByIndex(BSU_Apps, iDLC, BankAppId, BankAvailable, BankName, BankNameSz) + ; Create a result DLC object. + DLC.BSU_DLC = New BSU_DLC + DLC\AppId = PeekInt(BankAppId, 0) + DLC\Available = PeekInt(BankAvailable, 0) + DLC\Name = BSU_PeekCString(BankName, 0) + EndIf + + ; Free temporary storages. + If BankNameStorage = 0 Then FreeBank BankName + If BankAvailableStorage = 0 Then FreeBank BankAvailable + If BankAppIdStorage = 0 Then FreeBank BankAppId + EndIf + + ; Return the result. + Return DLC +End Function + +Function BSU_Apps_GetCurrentBetaName$(BankNameStorage=0) + Local BankName, BankNameSz = BSU_NAME_LENGTH + Local BetaName$ = "" + + If BSU_Initialized Then + If BankNameStorage = 0 Then + ; Create temporary storage for name. + BankName = CreateBank(BankNameSz) + Else + ; Reuse existing storage. + BankName = BankNameStorage + BankNameSz = BankSize(BankName) + EndIf + + ; Request beta name from Steam. + BS_Apps_GetCurrentBetaName(BSU_Apps, BankName, BankNameSz) + + ; Read returned name. + BetaName = BSU_PeekCString(BankName, 0) + + ; Free temporary storage. + If BankNameStorage = 0 Then FreeBank BankName + EndIf + + ; Return the result. + Return BetaName +End Function + +Function BSU_Apps_GetInstalledDepots(nAppID%, BankDepotStorage=0) + Local BankDepot, BankDepotSz = BSU_INSTALLEDDEPOTS_COUNT + Local DepotCount + + If BSU_Initialized Then + Delete Each BSU_Depot + + If BankDepotStorage = 0 Then + ; Create temporary storage. + BankDepot = CreateBank(BankDepotSz * 4) + Else + ; Reuse existing storage. + BankDepot = BankDepotStorage + BankDepotSz = BankSize(BankDepot) / 4 + EndIf + + ; Request depots from Steam. + BSU_DepotCount = BS_Apps_GetInstalledDepots(BSU_Apps, nAppID, BankDepot, BankDepotSz) + + ; Read returned depots into objects. + Local DepotIndex + For DepotIndex = 0 To BSU_DepotCount - 1 + Local Depot.BSU_Depot = New BSU_Depot + Depot\DepotId = PeekInt(BankDepot, DepotIndex * 4) + Next + + ; Free temporary storage. + If BankDepotStorage = 0 Then FreeBank BankDepot + EndIf +End Function + +Function BSU_Apps_GetAppInstallDir$(nAppID%, BankInstallDirStorage=0) + Local BankInstallDir, BankInstallDirSz = BSU_INSTALLDIR_LENGTH + Local InstallDir$ + + If BSU_Initialized Then + If BankInstallDirStorage = 0 Then + ; Create temporary storage. + BankInstallDir = CreateBank(BankInstallDirSz) + Else + ; Reuse existing storage. + BankInstallDir = BankInstallDirStorage + BankInstallDirSz = BankSize(BankInstallDir) + EndIf + + ; Request install dir from Steam. + Local InstallDirLen% = BS_Apps_GetAppInstallDir(BSU_Apps, nAppID, BankInstallDir, BankInstallDirSz) + + ; Read returned value. + InstallDir = BSU_PeekCString(BankInstallDir, 0) + + ; Free temporary storage. + If BankInstallDirStorage = 0 Then FreeBank BankInstallDir + EndIf + + Return InstallDir$ +End Function + +Function BSU_Apps_GetDLCDownloadProgress#(nAppID%) + Local Progress# = 1.0 + If BSU_Initialized + ; Create temporary storage. + Local i64_Downloaded, i64_Total + i64_Downloaded = BU_LongLong_Create() + i64_Total = BU_LongLong_Create() + + ; Request download progress from Steam. + If BS_Apps_GetDlcDownloadProgressEx(BSU_Apps, nAppID, i64_Downloaded, i64_Total) Then + Local dDownloaded, dTotal + dDownloaded = BU_LongLong_ToDouble(i64_Downloaded) + dTotal = BU_LongLong_ToDouble(i64_Total) + + BU_Double_Div(dDownloaded, dTotal) + Progress = BU_Double_ToFloat(dDownloaded) + + BU_Double_Destroy dDownloaded + BU_Double_Destroy dTotal + EndIf + + ; Free temporary storage. + BU_LongLong_Destroy i64_Downloaded + BU_LongLong_Destroy i64_Total + EndIf + Return Progress +End Function +;[End Block] + +;[Block] API: Apps +;------------------------------------------------------------------------------ +;! API: Friends +;------------------------------------------------------------------------------ +Type BSU_Friend + Field SteamID_L, SteamID_R + + Field Name$ + Field NickName$ + + Field Index% + Field Relationship% + Field State% + Field SteamLevel% +End Type +Global BSU_FriendCount + +Function BSU_Friends_GetFriends(iFriendFlags = BS_EFriendFlags_All) + If BSU_Initialized Then + Delete Each BSU_Friend + + BSU_FriendCount = BS_Friends_GetFriendCount(BSU_Friends, iFriendFlags) + If BSU_FriendCount > 0 Then + Local FriendIndex + For FriendIndex = 0 To BSU_FriendCount - 1 + Local CSteamID = BS_Friends_GetFriendByIndex(BSU_Friends, FriendIndex, iFriendFlags) + Local Friend.BSU_Friend = New BSU_Friend + + ; Store a 'native' version of the SteamID + Local SteamID64 = BS_CSteamID_ConvertToUInt64(CSteamID) + Friend\SteamID_L = BU_LongLong_ToLongHigh(SteamID64) + Friend\SteamID_R = BU_LongLong_ToLongLow(SteamID64) + BU_LongLong_Destroy(SteamID64) + + ; Names + Friend\Name = BS_Friends_GetFriendPersonaName(BSU_Friends, CSteamID) + Friend\NickName = BS_Friends_GetPlayerNickname(BSU_Friends, CSteamID) + + ; Other Stuff + Friend\Index = FriendIndex + Friend\Relationship = BS_Friends_GetFriendRelationship(BSU_Friends, CSteamID) + Friend\State = BS_Friends_GetFriendPersonaState(BSU_Friends, CSteamID) + Friend\SteamLevel = BS_Friends_GetFriendSteamLevel(BSU_Friends, CSteamID) + + BS_CSteamID_Destroy(CSteamID) + Next + EndIf + EndIf +End Function + +;[Block] API: GameServer +;------------------------------------------------------------------------------ +;! API: GameServer +;------------------------------------------------------------------------------ +Function BSU_GameServer_Init(IPv4%=0, Port%=27015, SteamPort%=27016, QueryPort=27017, ServerMode=BS_EServerMode_AuthenticationAndSecure, Version$="1.0.0.0") + If BS_SteamGameServer_Init(IPv4, SteamPort, Port, QueryPort, ServerMode, Version) Then + BSU_GameServer = BS_GameServer() + BSU_GameServerStats = BS_GameServerStats() + BSU_HTTP = BS_GameServerHTTP() + BSU_Inventory = BS_GameServerInventory() + BSU_Networking = BS_GameServerNetworking() + BSU_UGC = BS_GameServerUGC() + BSU_Utils = BS_GameServerUtils() + + BSU_Initialized = True + EndIf +End Function + +Function BSU_GameServer_Shutdown() + If BSU_Initialized = True + BS_SteamGameServer_Shutdown() + + BSU_GameServer=0 + BSU_GameServerStats=0 + BSU_HTTP=0 + BSU_Inventory=0 + BSU_Networking=0 + BSU_UGC=0 + BSU_Utils=0 + + BSU_Initialized = False + EndIf +End Function +;[End Block] + +;------------------------------------------------------------------------------ +;! API: GameServerStats +;------------------------------------------------------------------------------ + + + +;[Block] Blitz Stuff +;---------------------------------------------------------------- +;! Blitz Stuff +;---------------------------------------------------------------- +; -- Utility +; Writes a C-String value to a Bank. +; Returns amount of bytes written. +Function BSU_PokeCString%(Bank%, Pos%, Value$) + If Bank Then + Local BankSz = BankSize(Bank) + + If Pos < 0 Then Pos = 0 + If Pos >= BankSz Then Pos = BankSz - 1 + + Local ValuePos, ValueLen = Len(Value) + For ValuePos = 1 To ValueLen + ; Don't write over the edge, we still need space for the 0-byte + If (Pos + ValuePos) >= (BankSz - 1) Then Exit + + PokeByte Bank, Pos + ValuePos, Asc(Mid(Value, ValuePos, 1)) + Next + PokeByte Bank, Pos + ValuePos, 0 + Return ValuePos + EndIf +End Function + +; Reads a C-String value from a Bank. +; Returns read C-String +Function BSU_PeekCString$(Bank%, Pos%, Len%=-1) + If Bank Then + Local BankSz = BankSize(Bank) + + If Pos < 0 Then Pos = 0 + If Pos >= BankSz Then Pos = BankSz - 1 + + Local OutStr$, OutLen = (BankSz - Pos) + Local BankPos + For BankPos = 0 To OutLen + If (Pos + BankPos) >= BankSz Then Exit + + Local Value = PeekByte(Bank, Pos + BankPos) + + If (Value = 0 And Len = -1) Or (Pos > Len) Then + Exit + Else + OutStr=OutStr+Chr(Value) + EndIf + Next + Return OutStr + EndIf +End Function +;[End Block] + +;~IDEal Editor Parameters: +;~F#3A#5A#7F#86#C3#DF#100#107#10C#13C#16E#18A#1A9#1C4 ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam.decls b/Resources/Decls/BlitzSteam.decls index 0760b0f..032af34 100644 --- a/Resources/Decls/BlitzSteam.decls +++ b/Resources/Decls/BlitzSteam.decls @@ -1,20 +1,23 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" -; Generic --------------------------------------------------------------------- -BS_Helper_FormatUnixTime$(unixTime%, pchFormat$) :"_BS_Helper_FormatUnixTime@8" -BS_Helper_CopyMemoryIntMangle(pSource%, pDest%, iMangling%, iSourceW%, iSourceH%, iDestW%, iDestH%, iAreaX%, iAreaY%, iAreaW%, iAreaH%):"_BS_Helper_CopyMemoryIntMangle@44" \ No newline at end of file +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; Generic --------------------------------------------------------------------- +BS_Helper_FormatUnixTime$(unixTime%, pchFormat$) :"_BS_Helper_FormatUnixTime@8" +BS_Helper_CopyMemoryIntMangle(pSource%, pDest%, iMangling%, iSourceW%, iSourceH%, iDestW%, iDestH%, iAreaX%, iAreaY%, iAreaW%, iAreaH%):"_BS_Helper_CopyMemoryIntMangle@44" + +BS_BlitzPointer_GetReturnAddress%() :"_BS_BlitzPointer_GetReturnAddress@0" +BS_BlitzPointer_GetFunctionPointer%() :"_BS_BlitzPointer_GetFunctionPointer@0" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_Callback.decls b/Resources/Decls/BlitzSteam_Callback.decls new file mode 100644 index 0000000..ff20199 --- /dev/null +++ b/Resources/Decls/BlitzSteam_Callback.decls @@ -0,0 +1,33 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; BlitzCallback --------------------------------------------------------------- +BS_Callback_New%(pFunction%) :"_BS_Callback_New@4" +BS_Callback_Destroy(pThis%) :"_BS_Callback_Destroy@4" +BS_Callback_GetCallbackSizeBytes%(pThis%) :"_BS_Callback_GetCallbackSizeBytes@4" +BS_Callback_SetCallback(pThis%, iCallback%) :"_BS_Callback_SetCallback@8" +BS_Callback_GetCallback%(pThis%) :"_BS_Callback_GetCallback@4" +BS_Callback_SetFunction(pThis%, pFunction%) :"_BS_Callback_SetFunction@8" +BS_Callback_GetFunction%(pThis%) :"_BS_Callback_GetFunction@4" +BS_Callback_SetRegistered(pThis%, bIsRegistered%) :"_BS_Callback_SetRegistered@8" +BS_Callback_IsRegistered%(pThis%) :"_BS_Callback_IsRegistered@4" +BS_Callback_SetGameServer(pThis%, bIsGameServer%) :"_BS_Callback_SetGameServer@8" +BS_Callback_IsGameServer%(pThis%) :"_BS_Callback_IsGameServer@4" +BS_Callback_Register(pThis%, iCallback%) :"_BS_Callback_Register@8" +BS_Callback_Unregister(pThis%) :"_BS_Callback_Unregister@4" +BS_Callback_RegisterResult(pThis%, lSteamAPICall%, iCallback%) :"_BS_Callback_RegisterResult@12" +BS_Callback_UnregisterResult(pThis%) :"_BS_Callback_UnregisterResult@4" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_Double.decls b/Resources/Decls/BlitzSteam_Double.decls index 91ee831..f2d0bce 100644 --- a/Resources/Decls/BlitzSteam_Double.decls +++ b/Resources/Decls/BlitzSteam_Double.decls @@ -1,42 +1,42 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; aDouble with this program. If not, see . - -.lib "BlitzSteam.dll" -; Double ------------------------------------------------------------------------ -BS_Double_New%() :"_BS_Double_New@0" -BS_Double_Copy%(pThis%) :"_BS_Double_Copy@4" -BS_Double_Destroy(pThis%) :"_BS_Double_Destroy@4" -BS_Double_ToString$(pThis%) :"_BS_Double_ToString@4" -BS_Double_FromString%(cString$) :"_BS_Double_FromString@4" -BS_Double_FromF%(Float#) :"_BS_Double_FromF@4" -BS_Double_ToF#(pThis%) :"_BS_Double_ToF@4" -BS_Double_FromI%(iRight%) :"_BS_Double_FromI@4" -BS_Double_ToI%(pThis%) :"_BS_Double_ToI@8" -BS_Double_FromL(pDouble%) :"_BS_Double_FromL@4" -BS_Double_ToL(pThis%) :"_BS_Double_ToL@4" -BS_Double_Compare%(pThis%, pOther%) :"_BS_Double_Compare@8" -BS_Double_Set%(pThis%, pOther%) :"_BS_Double_Set@8" -BS_Double_Add%(pThis%, pOther%) :"_BS_Double_Add@8" -BS_Double_Sub%(pThis%, pOther%) :"_BS_Double_Sub@8" -BS_Double_Div%(pThis%, pOther%) :"_BS_Double_Div@8" -BS_Double_Mul%(pThis%, pOther%) :"_BS_Double_Mul@8" -BS_Double_Mod%(pThis%, pOther%) :"_BS_Double_Mod@8" -BS_Double_SetF%(pThis%, fOther%) :"_BS_Double_SetF@8" -BS_Double_AddF%(pThis%, fOther%) :"_BS_Double_AddF@8" -BS_Double_SubF%(pThis%, fOther%) :"_BS_Double_SubF@8" -BS_Double_DivF%(pThis%, fOther%) :"_BS_Double_DivF@8" -BS_Double_MulF%(pThis%, fOther%) :"_BS_Double_MulF@8" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; aDouble with this program. If not, see . + +.lib "BlitzSteam.dll" +; Double ------------------------------------------------------------------------ +BS_Double_New%() :"_BS_Double_New@0" +BS_Double_Copy%(pThis%) :"_BS_Double_Copy@4" +BS_Double_Destroy(pThis%) :"_BS_Double_Destroy@4" +BS_Double_ToString$(pThis%) :"_BS_Double_ToString@4" +BS_Double_FromString%(cString$) :"_BS_Double_FromString@4" +BS_Double_FromF%(Float#) :"_BS_Double_FromF@4" +BS_Double_ToF#(pThis%) :"_BS_Double_ToF@4" +BS_Double_FromI%(iRight%) :"_BS_Double_FromI@4" +BS_Double_ToI%(pThis%) :"_BS_Double_ToI@8" +BS_Double_FromL(pDouble%) :"_BS_Double_FromL@4" +BS_Double_ToL(pThis%) :"_BS_Double_ToL@4" +BS_Double_Compare%(pThis%, pOther%) :"_BS_Double_Compare@8" +BS_Double_Set%(pThis%, pOther%) :"_BS_Double_Set@8" +BS_Double_Add%(pThis%, pOther%) :"_BS_Double_Add@8" +BS_Double_Sub%(pThis%, pOther%) :"_BS_Double_Sub@8" +BS_Double_Div%(pThis%, pOther%) :"_BS_Double_Div@8" +BS_Double_Mul%(pThis%, pOther%) :"_BS_Double_Mul@8" +BS_Double_Mod%(pThis%, pOther%) :"_BS_Double_Mod@8" +BS_Double_SetF%(pThis%, fOther%) :"_BS_Double_SetF@8" +BS_Double_AddF%(pThis%, fOther%) :"_BS_Double_AddF@8" +BS_Double_SubF%(pThis%, fOther%) :"_BS_Double_SubF@8" +BS_Double_DivF%(pThis%, fOther%) :"_BS_Double_DivF@8" +BS_Double_MulF%(pThis%, fOther%) :"_BS_Double_MulF@8" BS_Double_ModF%(pThis%, fOther%) :"_BS_Double_ModF@8" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_Memory.decls b/Resources/Decls/BlitzSteam_Memory.decls index d705658..8db029f 100644 --- a/Resources/Decls/BlitzSteam_Memory.decls +++ b/Resources/Decls/BlitzSteam_Memory.decls @@ -1,33 +1,33 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" -; Memory ---------------------------------------------------------------------- -BS_Memory_Alloc%(iSize%) :"_BS_Memory_Alloc@4" -BS_Memory_ReAlloc%(pMemory%, iSize%) :"_BS_Memory_ReAlloc@8" -BS_Memory_Free(pMemory%) :"_BS_Memory_Free@4" -BS_Memory_PokeByte(pMemory%, iOffset%, bValue%) :"_BS_Memory_PokeByte@12" -BS_Memory_PeekByte%(pMemory%, iOffset%) :"_BS_Memory_PeekByte@8" -BS_Memory_PokeShort(pMemory%, iOffset%, sValue%) :"_BS_Memory_PokeShort@12" -BS_Memory_PeekShort%(pMemory%, iOffset%) :"_BS_Memory_PeekShort@8" -BS_Memory_PokeInt(pMemory%, iOffset%, iValue%) :"_BS_Memory_PokeInt@12" -BS_Memory_PeekInt%(pMemory%, iOffset%) :"_BS_Memory_PeekInt@8" -BS_Memory_PokeFloat(pMemory%, iOffset%, fValue#) :"_BS_Memory_PokeFloat@12" -BS_Memory_PeekFloat#(pMemory%, iOffset%) :"_BS_Memory_PeekFloat@8" -BS_Memory_PokeLong(pMemory%, iOffset%, lValue%) :"_BS_Memory_PokeLong@12" -BS_Memory_PeekLong%(pMemory%, iOffset%) :"_BS_Memory_PeekLong@8" -BS_Memory_PokeDouble(pMemory%, iOffset%, dValue%) :"_BS_Memory_PokeDouble@12" -BS_Memory_PeekDouble%(pMemory%, iOffset%) :"_BS_Memory_PeekDouble@8" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" +; Memory ---------------------------------------------------------------------- +BS_Memory_Alloc%(iSize%) :"_BS_Memory_Alloc@4" +BS_Memory_ReAlloc%(pMemory%, iSize%) :"_BS_Memory_ReAlloc@8" +BS_Memory_Free(pMemory%) :"_BS_Memory_Free@4" +BS_Memory_PokeByte(pMemory%, iOffset%, bValue%) :"_BS_Memory_PokeByte@12" +BS_Memory_PeekByte%(pMemory%, iOffset%) :"_BS_Memory_PeekByte@8" +BS_Memory_PokeShort(pMemory%, iOffset%, sValue%) :"_BS_Memory_PokeShort@12" +BS_Memory_PeekShort%(pMemory%, iOffset%) :"_BS_Memory_PeekShort@8" +BS_Memory_PokeInt(pMemory%, iOffset%, iValue%) :"_BS_Memory_PokeInt@12" +BS_Memory_PeekInt%(pMemory%, iOffset%) :"_BS_Memory_PeekInt@8" +BS_Memory_PokeFloat(pMemory%, iOffset%, fValue#) :"_BS_Memory_PokeFloat@12" +BS_Memory_PeekFloat#(pMemory%, iOffset%) :"_BS_Memory_PeekFloat@8" +BS_Memory_PokeLong(pMemory%, iOffset%, lValue%) :"_BS_Memory_PokeLong@12" +BS_Memory_PeekLong%(pMemory%, iOffset%) :"_BS_Memory_PeekLong@8" +BS_Memory_PokeDouble(pMemory%, iOffset%, dValue%) :"_BS_Memory_PokeDouble@12" +BS_Memory_PeekDouble%(pMemory%, iOffset%) :"_BS_Memory_PeekDouble@8" diff --git a/Resources/Decls/BlitzSteam_SteamGameServer.decls b/Resources/Decls/BlitzSteam_SteamGameServer.decls index 7095cac..d91bf2c 100644 --- a/Resources/Decls/BlitzSteam_SteamGameServer.decls +++ b/Resources/Decls/BlitzSteam_SteamGameServer.decls @@ -1,77 +1,77 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; GameServer ------------------------------------------------------------------ -BS_SteamGameServer_Init%(iIP%, sSteamPort%, sGamePort%, sQueryPort%, EServerMode%, cVersion$):"_BS_SteamGameServer_Init@24" -BS_SteamGameServer_Shutdown() :"_BS_SteamGameServer_Shutdown@0" -BS_SteamGameServer_RunCallbacks() :"_BS_SteamGameServer_RunCallbacks@0" -BS_SteamGameServer_GetHSteamPipe%() :"_BS_SteamGameServer_GetHSteamPipe@0" -BS_SteamGameServer_IsSecure%() :"_BS_SteamGameServer_IsSecure@0" -BS_SteamGameServer_GetSteamID%() :"_BS_SteamGameServer_GetSteamID@0" -;! Function above returns a CSteamID*, clean it up afterwards! -BS_SteamGameServer%() :"_BS_SteamGameServer@0" -BS_ISteamGameServer_InitGameServer%(pThis%, iIP%, sGamePort%, sQueryPort%, iFlags%, iAppId%, cVersion$):"_BS_ISteamGameServer_InitGameServer@24" -BS_ISteamGameServer_SetProduct(pThis%, cProduct$) :"_BS_ISteamGameServer_SetProduct@8" -BS_ISteamGameServer_SetGameDescription(pThis%, cDescription$) :"_BS_ISteamGameServer_SetGameDescription@8" -BS_ISteamGameServer_SetModDir(pThis%, cDirectory$) :"_BS_ISteamGameServer_SetModDir@8" -BS_ISteamGameServer_SetDedicatedServer(pThis%, bDedicated%) :"_BS_ISteamGameServer_SetDedicatedServer@8" -BS_ISteamGameServer_LogOn(pThis%, cToken$) :"_BS_ISteamGameServer_LogOn@8" -BS_ISteamGameServer_LogOnAnonymous(pThis%) :"_BS_ISteamGameServer_LogOnAnonymous@4" -BS_ISteamGameServer_LogOff(pThis%) :"_BS_ISteamGameServer_LogOff@4" -BS_ISteamGameServer_IsLoggedOn%(pThis%) :"_BS_ISteamGameServer_IsLoggedOn@4" -BS_ISteamGameServer_IsSecure%(pThis%) :"_BS_ISteamGameServer_IsSecure@4" -BS_ISteamGameServer_GetSteamID%(pThis%) :"_BS_ISteamGameServer_GetSteamID@4" -BS_ISteamGameServer_WasRestartRequested%(pThis%) :"_BS_ISteamGameServer_WasRestartRequested@4" -BS_ISteamGameServer_SetMaxPlayerCount(pThis%, iMaxPlayers%) :"_BS_ISteamGameServer_SetMaxPlayerCount@8" -BS_ISteamGameServer_SetBotPlayerCount(pThis%, iBotPlayers%) :"_BS_ISteamGameServer_SetBotPlayerCount@8" -BS_ISteamGameServer_SetServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetServerName@8" -BS_ISteamGameServer_SetMapName(pThis%, cName$) :"_BS_ISteamGameServer_SetMapName@8" -BS_ISteamGameServer_SetPasswordProtected(pThis%, bPassworded%) :"_BS_ISteamGameServer_SetPasswordProtected@8" -BS_ISteamGameServer_SetSpectatorPort(pThis%, sPort%) :"_BS_ISteamGameServer_SetSpectatorPort@8" -BS_ISteamGameServer_SetSpectatorServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetSpectatorServerName@8" -BS_ISteamGameServer_ClearAllKeyValues(pThis%) :"_BS_ISteamGameServer_ClearAllKeyValues@4" -BS_ISteamGameServer_SetKeyValue(pThis%, cKey$, cValue$) :"_BS_ISteamGameServer_SetKeyValue@12" -BS_ISteamGameServer_SetGameTags(pThis%, cTags$) :"_BS_ISteamGameServer_SetGameTags@8" -BS_ISteamGameServer_SetGameData(pThis%, cData$) :"_BS_ISteamGameServer_SetGameData@8" -BS_ISteamGameServer_SetRegion(pThis%, cRegion$) :"_BS_ISteamGameServer_SetRegion@8" -BS_ISteamGameServer_SendUserConnectAndAuthenticate%(pThis%, iIP%, pAuthBlob*, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" -BS_ISteamGameServer_SendUserConnectAndAuthenticateEx%(pThis%, iIP%, pAuthBlob%, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" -BS_ISteamGameServer_CreateUnauthenticatedUserConnection%(pThis%) :"_BS_ISteamGameServer_CreateUnauthenticatedUserConnection@4" -;! Function above returns a CSteamID*, clean it up afterwards! -BS_ISteamGameServer_SendUserDisconnect(pThis%, lSteamId%) :"_BS_ISteamGameServer_SendUserDisconnect@8" -BS_ISteamGameServer_UpdateUserData%(pThis%, lSteamId%, cName$, iScore%):"_BS_ISteamGameServer_UpdateUserData@16" -BS_ISteamGameServer_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamGameServer_GetAuthSessionTicket@16" -BS_ISteamGameServer_GetAuthSessionTicketEx%(pThis%, pTicket%, iTicketSize%, piTicketSize%):"_BS_ISteamGameServer_GetAuthSessionTicket@16" -BS_ISteamGameServer_BeginAuthSession%(pThis%, pTicket*, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" -BS_ISteamGameServer_BeginAuthSessionEx%(pThis%, pTicket%, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" -BS_ISteamGameServer_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamGameServer_EndAuthSession@8" -BS_ISteamGameServer_CancelAuthTicket(pThis%, iAuthTicket%) :"_BS_ISteamGameServer_CancelAuthTicket@8" -BS_ISteamGameServer_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamGameServer_UserHasLicenseForApp@12" -BS_ISteamGameServer_RequestUserGroupStatus%(pThis%, lSteamId%, pSteamIdGroup%) :"_BS_ISteamGameServer_RequestUserGroupStatus@12" -BS_ISteamGameServer_GetPublicIP%(pThis%) :"_BS_ISteamGameServer_GetPublicIP@4" -BS_ISteamGameServer_HandleIncomingPacket%(pThis%, pBuffer*, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" -BS_ISteamGameServer_HandleIncomingPacketEx%(pThis%, pBuffer%, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" -BS_ISteamGameServer_GetNextOutgoingPacket%(pThis%, pBuffer*, iBufferSize%, piIP*, psPort*):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" -BS_ISteamGameServer_GetNextOutgoingPacketEx%(pThis%, pBuffer%, iBufferSize%, piIP%, psPort%):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" -BS_ISteamGameServer_EnableHeartbeats(pThis%, bActive%) :"_BS_ISteamGameServer_EnableHeartbeats@8" -BS_ISteamGameServer_SetHeartbeatInterval(pThis%, iInterval%) :"_BS_ISteamGameServer_SetHeartbeatInterval@8" -BS_ISteamGameServer_ForceHeartbeat(pThis%) :"_BS_ISteamGameServer_ForceHeartbeat@4" -BS_ISteamGameServer_AssociateWithClan%(pThis%, pSteamIDClan%) :"_BS_ISteamGameServer_AssociateWithClan@8" -;! Function above returns a SteamAPICall_t*, clean it up afterwards! -BS_ISteamGameServer_ComputeNewPlayerCompatibility%(pThis%, pSteamIDNewPlayer%) :"_BS_ISteamGameServer_ComputeNewPlayerCompatibility@8" -;! Function above returns a SteamAPICall_t*, clean it up afterwards! +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; GameServer ------------------------------------------------------------------ +BS_SteamGameServer_Init%(iIP%, sSteamPort%, sGamePort%, sQueryPort%, EServerMode%, cVersion$):"_BS_SteamGameServer_Init@24" +BS_SteamGameServer_Shutdown() :"_BS_SteamGameServer_Shutdown@0" +BS_SteamGameServer_RunCallbacks() :"_BS_SteamGameServer_RunCallbacks@0" +BS_SteamGameServer_GetHSteamPipe%() :"_BS_SteamGameServer_GetHSteamPipe@0" +BS_SteamGameServer_IsSecure%() :"_BS_SteamGameServer_IsSecure@0" +BS_SteamGameServer_GetSteamID%() :"_BS_SteamGameServer_GetSteamID@0" +;! Function above returns a CSteamID*, clean it up afterwards! +BS_SteamGameServer%() :"_BS_SteamGameServer@0" +BS_ISteamGameServer_InitGameServer%(pThis%, iIP%, sGamePort%, sQueryPort%, iFlags%, iAppId%, cVersion$):"_BS_ISteamGameServer_InitGameServer@24" +BS_ISteamGameServer_SetProduct(pThis%, cProduct$) :"_BS_ISteamGameServer_SetProduct@8" +BS_ISteamGameServer_SetGameDescription(pThis%, cDescription$) :"_BS_ISteamGameServer_SetGameDescription@8" +BS_ISteamGameServer_SetModDir(pThis%, cDirectory$) :"_BS_ISteamGameServer_SetModDir@8" +BS_ISteamGameServer_SetDedicatedServer(pThis%, bDedicated%) :"_BS_ISteamGameServer_SetDedicatedServer@8" +BS_ISteamGameServer_LogOn(pThis%, cToken$) :"_BS_ISteamGameServer_LogOn@8" +BS_ISteamGameServer_LogOnAnonymous(pThis%) :"_BS_ISteamGameServer_LogOnAnonymous@4" +BS_ISteamGameServer_LogOff(pThis%) :"_BS_ISteamGameServer_LogOff@4" +BS_ISteamGameServer_IsLoggedOn%(pThis%) :"_BS_ISteamGameServer_IsLoggedOn@4" +BS_ISteamGameServer_IsSecure%(pThis%) :"_BS_ISteamGameServer_IsSecure@4" +BS_ISteamGameServer_GetSteamID%(pThis%) :"_BS_ISteamGameServer_GetSteamID@4" +BS_ISteamGameServer_WasRestartRequested%(pThis%) :"_BS_ISteamGameServer_WasRestartRequested@4" +BS_ISteamGameServer_SetMaxPlayerCount(pThis%, iMaxPlayers%) :"_BS_ISteamGameServer_SetMaxPlayerCount@8" +BS_ISteamGameServer_SetBotPlayerCount(pThis%, iBotPlayers%) :"_BS_ISteamGameServer_SetBotPlayerCount@8" +BS_ISteamGameServer_SetServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetServerName@8" +BS_ISteamGameServer_SetMapName(pThis%, cName$) :"_BS_ISteamGameServer_SetMapName@8" +BS_ISteamGameServer_SetPasswordProtected(pThis%, bPassworded%) :"_BS_ISteamGameServer_SetPasswordProtected@8" +BS_ISteamGameServer_SetSpectatorPort(pThis%, sPort%) :"_BS_ISteamGameServer_SetSpectatorPort@8" +BS_ISteamGameServer_SetSpectatorServerName(pThis%, cName$) :"_BS_ISteamGameServer_SetSpectatorServerName@8" +BS_ISteamGameServer_ClearAllKeyValues(pThis%) :"_BS_ISteamGameServer_ClearAllKeyValues@4" +BS_ISteamGameServer_SetKeyValue(pThis%, cKey$, cValue$) :"_BS_ISteamGameServer_SetKeyValue@12" +BS_ISteamGameServer_SetGameTags(pThis%, cTags$) :"_BS_ISteamGameServer_SetGameTags@8" +BS_ISteamGameServer_SetGameData(pThis%, cData$) :"_BS_ISteamGameServer_SetGameData@8" +BS_ISteamGameServer_SetRegion(pThis%, cRegion$) :"_BS_ISteamGameServer_SetRegion@8" +BS_ISteamGameServer_SendUserConnectAndAuthenticate%(pThis%, iIP%, pAuthBlob*, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" +BS_ISteamGameServer_SendUserConnectAndAuthenticateEx%(pThis%, iIP%, pAuthBlob%, iAuthBlobSize%, lSteamId%):"_BS_ISteamGameServer_SendUserConnectAndAuthenticate@20" +BS_ISteamGameServer_CreateUnauthenticatedUserConnection%(pThis%) :"_BS_ISteamGameServer_CreateUnauthenticatedUserConnection@4" +;! Function above returns a CSteamID*, clean it up afterwards! +BS_ISteamGameServer_SendUserDisconnect(pThis%, lSteamId%) :"_BS_ISteamGameServer_SendUserDisconnect@8" +BS_ISteamGameServer_UpdateUserData%(pThis%, lSteamId%, cName$, iScore%):"_BS_ISteamGameServer_UpdateUserData@16" +BS_ISteamGameServer_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamGameServer_GetAuthSessionTicket@16" +BS_ISteamGameServer_GetAuthSessionTicketEx%(pThis%, pTicket%, iTicketSize%, piTicketSize%):"_BS_ISteamGameServer_GetAuthSessionTicket@16" +BS_ISteamGameServer_BeginAuthSession%(pThis%, pTicket*, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" +BS_ISteamGameServer_BeginAuthSessionEx%(pThis%, pTicket%, iTicketSize%, lSteamId%):"_BS_ISteamGameServer_BeginAuthSession@16" +BS_ISteamGameServer_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamGameServer_EndAuthSession@8" +BS_ISteamGameServer_CancelAuthTicket(pThis%, iAuthTicket%) :"_BS_ISteamGameServer_CancelAuthTicket@8" +BS_ISteamGameServer_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamGameServer_UserHasLicenseForApp@12" +BS_ISteamGameServer_RequestUserGroupStatus%(pThis%, lSteamId%, pSteamIdGroup%) :"_BS_ISteamGameServer_RequestUserGroupStatus@12" +BS_ISteamGameServer_GetPublicIP%(pThis%) :"_BS_ISteamGameServer_GetPublicIP@4" +BS_ISteamGameServer_HandleIncomingPacket%(pThis%, pBuffer*, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" +BS_ISteamGameServer_HandleIncomingPacketEx%(pThis%, pBuffer%, iBufferSize%, iIP%, sPort%):"_BS_ISteamGameServer_HandleIncomingPacket@20" +BS_ISteamGameServer_GetNextOutgoingPacket%(pThis%, pBuffer*, iBufferSize%, piIP*, psPort*):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" +BS_ISteamGameServer_GetNextOutgoingPacketEx%(pThis%, pBuffer%, iBufferSize%, piIP%, psPort%):"_BS_ISteamGameServer_GetNextOutgoingPacket@20" +BS_ISteamGameServer_EnableHeartbeats(pThis%, bActive%) :"_BS_ISteamGameServer_EnableHeartbeats@8" +BS_ISteamGameServer_SetHeartbeatInterval(pThis%, iInterval%) :"_BS_ISteamGameServer_SetHeartbeatInterval@8" +BS_ISteamGameServer_ForceHeartbeat(pThis%) :"_BS_ISteamGameServer_ForceHeartbeat@4" +BS_ISteamGameServer_AssociateWithClan%(pThis%, pSteamIDClan%) :"_BS_ISteamGameServer_AssociateWithClan@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServer_ComputeNewPlayerCompatibility%(pThis%, pSteamIDNewPlayer%) :"_BS_ISteamGameServer_ComputeNewPlayerCompatibility@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! diff --git a/Resources/Decls/BlitzSteam_SteamGameServerStats.decls b/Resources/Decls/BlitzSteam_SteamGameServerStats.decls index f99fd57..61241d1 100644 --- a/Resources/Decls/BlitzSteam_SteamGameServerStats.decls +++ b/Resources/Decls/BlitzSteam_SteamGameServerStats.decls @@ -1,36 +1,36 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; GameServerStats ------------------------------------------------------------- -BS_SteamGameServerStats%() :"_BS_SteamGameServerStats@0" -BS_ISteamGameServerStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_RequestUserStats@8" -;! Function above returns a SteamAPICall_t*, clean it up afterwards! -BS_ISteamGameServerStats_StoreUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_StoreUserStats@8" -;! Function above returns a SteamAPICall_t*, clean it up afterwards! -BS_ISteamGameServerStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStat@16" -BS_ISteamGameServerStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStat@16" -BS_ISteamGameServerStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStatF@16" -BS_ISteamGameServerStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStatF@16" -BS_ISteamGameServerStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*):"_BS_ISteamGameServerStats_GetUserAchievement@16" -BS_ISteamGameServerStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%):"_BS_ISteamGameServerStats_GetUserAchievement@16" -BS_ISteamGameServerStats_SetUserStat%(pThis%, lSteamId%, cName%, iData%) :"_BS_ISteamGameServerStats_SetUserStat@16" -BS_ISteamGameServerStats_SetUserStatF%(pThis%, lSteamId%, cName%, fData#) :"_BS_ISteamGameServerStats_SetUserStatF@16" -BS_ISteamGameServerStats_UpdateUserAvgRateStat%(pThis%, lSteamId%, cName$, fCountThisSession#, dSessionLength%):"_BS_ISteamGameServerStats_UpdateUserAvgRateStat@20" -;! Function above takes a Double* as last parameter. -BS_ISteamGameServerStats_SetUserAchievement%(pThis%, lSteamId%, cName$) :"_BS_ISteamGameServerStats_SetUserAchievement@12" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; GameServerStats ------------------------------------------------------------- +BS_SteamGameServerStats%() :"_BS_SteamGameServerStats@0" +BS_ISteamGameServerStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_RequestUserStats@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServerStats_StoreUserStats%(pThis%, lSteamId%) :"_BS_ISteamGameServerStats_StoreUserStats@8" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamGameServerStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStat@16" +BS_ISteamGameServerStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStat@16" +BS_ISteamGameServerStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_ISteamGameServerStats_GetUserStatF@16" +BS_ISteamGameServerStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_ISteamGameServerStats_GetUserStatF@16" +BS_ISteamGameServerStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*):"_BS_ISteamGameServerStats_GetUserAchievement@16" +BS_ISteamGameServerStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%):"_BS_ISteamGameServerStats_GetUserAchievement@16" +BS_ISteamGameServerStats_SetUserStat%(pThis%, lSteamId%, cName%, iData%) :"_BS_ISteamGameServerStats_SetUserStat@16" +BS_ISteamGameServerStats_SetUserStatF%(pThis%, lSteamId%, cName%, fData#) :"_BS_ISteamGameServerStats_SetUserStatF@16" +BS_ISteamGameServerStats_UpdateUserAvgRateStat%(pThis%, lSteamId%, cName$, fCountThisSession#, dSessionLength%):"_BS_ISteamGameServerStats_UpdateUserAvgRateStat@20" +;! Function above takes a Double* as last parameter. +BS_ISteamGameServerStats_SetUserAchievement%(pThis%, lSteamId%, cName$) :"_BS_ISteamGameServerStats_SetUserAchievement@12" BS_ISteamGameServerStats_ClearUserAchievement%(pThis%, lSteamId%, cName$) :"_BS_ISteamGameServerStats_ClearUserAchievement@12" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamHTMLSurface.decls b/Resources/Decls/BlitzSteam_SteamHTMLSurface.decls index dfc6bfe..9e4dee5 100644 --- a/Resources/Decls/BlitzSteam_SteamHTMLSurface.decls +++ b/Resources/Decls/BlitzSteam_SteamHTMLSurface.decls @@ -1,56 +1,56 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; HTMLSurface ----------------------------------------------------------------- -BS_SteamHTMLSurface%() :"_BS_SteamHTMLSurface@0" -BS_ISteamHTMLSurface_Init%(pThis%) :"_BS_ISteamHTMLSurface_Init@4" -BS_ISteamHTMLSurface_Shutdown%(pThis%) :"_BS_ISteamHTMLSurface_Shutdown@4" -BS_ISteamHTMLSurface_CreateBrowser%(pThis%, cUserAgent$, cUserCSS$) :"_BS_ISteamHTMLSurface_CreateBrowser@12" -;! Function above returns a SteamAPICall_t*, clean it up afterwards! -BS_ISteamHTMLSurface_RemoveBrowser(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_RemoveBrowser@8" -BS_ISteamHTMLSurface_LoadURL(pThis%, iHandle%, cURL$, cPostData$) :"_BS_ISteamHTMLSurface_LoadURL@16" -BS_ISteamHTMLSurface_SetSize(pThis%, iHandle%, iWidth%, iHeight%) :"_BS_ISteamHTMLSurface_SetSize@16" -BS_ISteamHTMLSurface_StopLoad(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopLoad@8" -BS_ISteamHTMLSurface_Reload(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_Reload@8" -BS_ISteamHTMLSurface_GoBack(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoBack@8" -BS_ISteamHTMLSurface_GoForward(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoForward@8" -BS_ISteamHTMLSurface_AddHeader(pThis%, iHandle%, cKey$, cValue$) :"_BS_ISteamHTMLSurface_AddHeader@16" -BS_ISteamHTMLSurface_ExecuteJavascript(pThis%, iHandle%, cScript$) :"_BS_ISteamHTMLSurface_ExecuteJavascript@12" -BS_ISteamHTMLSurface_MouseUp(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseUp@12" -BS_ISteamHTMLSurface_MouseDown(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDown@12" -BS_ISteamHTMLSurface_MouseDoubleClick(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDoubleClick@12" -BS_ISteamHTMLSurface_MouseMove(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_MouseMove@16" -BS_ISteamHTMLSurface_MouseWheel(pThis%, iHandle%, iDelta%) :"_BS_ISteamHTMLSurface_MouseWheel@12" -BS_ISteamHTMLSurface_KeyDown(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyDown@16" -BS_ISteamHTMLSurface_KeyUp(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyUp@16" -BS_ISteamHTMLSurface_KeyChar(pThis%, iHandle%, iUnicodeChar%, EHTMLKeyModifiers%):"_BS_ISteamHTMLSurface_KeyChar@16" -BS_ISteamHTMLSurface_SetHorizontalScroll(pThis%, iHandle%, iAbsolutePixelScroll%):"_BS_ISteamHTMLSurface_SetHorizontalScroll@16" -BS_ISteamHTMLSurface_SetVerticalScroll(pThis%, iHandle%, iAbsolutePixelScroll%) :"_BS_ISteamHTMLSurface_SetVerticalScroll@16" -BS_ISteamHTMLSurface_SetKeyFocus(pThis%, iHandle%, bHasKeyFocus%) :"_BS_ISteamHTMLSurface_SetKeyFocus@12" -BS_ISteamHTMLSurface_ViewSource(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_ViewSource@8" -BS_ISteamHTMLSurface_CopyToClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_CopyToClipboard@8" -BS_ISteamHTMLSurface_PasteFromClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_PasteFromClipboard@8" -BS_ISteamHTMLSurface_Find(pThis%, iHandle%, cSearch$, bCurrentlyInFind%, bReverse%):"_BS_ISteamHTMLSurface_Find@20" -BS_ISteamHTMLSurface_StopFind(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopFind@8" -BS_ISteamHTMLSurface_GetLinkAtPosition(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_GetLinkAtPosition@16" -BS_ISteamHTMLSurface_SetCookie(pThis%, iHandle%, cHostName$, cKey$, cValue$, cPath$, nExpires%, bSecure%, bHTTPOnly%):"_BS_ISteamHTMLSurface_SetCookie@36" -BS_ISteamHTMLSurface_SetPageScaleFactor(pThis%, iHandle%, fZoom#, iX%, iY%) :"_BS_ISteamHTMLSurface_SetPageScaleFactor@20" -BS_ISteamHTMLSurface_SetBackgroundMode(pThis%, iHandle%, bBackgroundMode%) :"_BS_ISteamHTMLSurface_SetBackgroundMode@12" -BS_ISteamHTMLSurface_AllowStartRequest(pThis%, iHandle%, bAllowed%) :"_BS_ISteamHTMLSurface_AllowStartRequest@12" -BS_ISteamHTMLSurface_JSDialogResponse(pThis%, iHandle%, bResult%) :"_BS_ISteamHTMLSurface_JSDialogResponse@12" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; HTMLSurface ----------------------------------------------------------------- +BS_SteamHTMLSurface%() :"_BS_SteamHTMLSurface@0" +BS_ISteamHTMLSurface_Init%(pThis%) :"_BS_ISteamHTMLSurface_Init@4" +BS_ISteamHTMLSurface_Shutdown%(pThis%) :"_BS_ISteamHTMLSurface_Shutdown@4" +BS_ISteamHTMLSurface_CreateBrowser%(pThis%, cUserAgent$, cUserCSS$) :"_BS_ISteamHTMLSurface_CreateBrowser@12" +;! Function above returns a SteamAPICall_t*, clean it up afterwards! +BS_ISteamHTMLSurface_RemoveBrowser(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_RemoveBrowser@8" +BS_ISteamHTMLSurface_LoadURL(pThis%, iHandle%, cURL$, cPostData$) :"_BS_ISteamHTMLSurface_LoadURL@16" +BS_ISteamHTMLSurface_SetSize(pThis%, iHandle%, iWidth%, iHeight%) :"_BS_ISteamHTMLSurface_SetSize@16" +BS_ISteamHTMLSurface_StopLoad(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopLoad@8" +BS_ISteamHTMLSurface_Reload(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_Reload@8" +BS_ISteamHTMLSurface_GoBack(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoBack@8" +BS_ISteamHTMLSurface_GoForward(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_GoForward@8" +BS_ISteamHTMLSurface_AddHeader(pThis%, iHandle%, cKey$, cValue$) :"_BS_ISteamHTMLSurface_AddHeader@16" +BS_ISteamHTMLSurface_ExecuteJavascript(pThis%, iHandle%, cScript$) :"_BS_ISteamHTMLSurface_ExecuteJavascript@12" +BS_ISteamHTMLSurface_MouseUp(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseUp@12" +BS_ISteamHTMLSurface_MouseDown(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDown@12" +BS_ISteamHTMLSurface_MouseDoubleClick(pThis%, iHandle%, EMouseButton%) :"_BS_ISteamHTMLSurface_MouseDoubleClick@12" +BS_ISteamHTMLSurface_MouseMove(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_MouseMove@16" +BS_ISteamHTMLSurface_MouseWheel(pThis%, iHandle%, iDelta%) :"_BS_ISteamHTMLSurface_MouseWheel@12" +BS_ISteamHTMLSurface_KeyDown(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyDown@16" +BS_ISteamHTMLSurface_KeyUp(pThis%, iHandle%, iKeyCode%, EHTMLKeyModifiers%) :"_BS_ISteamHTMLSurface_KeyUp@16" +BS_ISteamHTMLSurface_KeyChar(pThis%, iHandle%, iUnicodeChar%, EHTMLKeyModifiers%):"_BS_ISteamHTMLSurface_KeyChar@16" +BS_ISteamHTMLSurface_SetHorizontalScroll(pThis%, iHandle%, iAbsolutePixelScroll%):"_BS_ISteamHTMLSurface_SetHorizontalScroll@16" +BS_ISteamHTMLSurface_SetVerticalScroll(pThis%, iHandle%, iAbsolutePixelScroll%) :"_BS_ISteamHTMLSurface_SetVerticalScroll@16" +BS_ISteamHTMLSurface_SetKeyFocus(pThis%, iHandle%, bHasKeyFocus%) :"_BS_ISteamHTMLSurface_SetKeyFocus@12" +BS_ISteamHTMLSurface_ViewSource(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_ViewSource@8" +BS_ISteamHTMLSurface_CopyToClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_CopyToClipboard@8" +BS_ISteamHTMLSurface_PasteFromClipboard(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_PasteFromClipboard@8" +BS_ISteamHTMLSurface_Find(pThis%, iHandle%, cSearch$, bCurrentlyInFind%, bReverse%):"_BS_ISteamHTMLSurface_Find@20" +BS_ISteamHTMLSurface_StopFind(pThis%, iHandle%) :"_BS_ISteamHTMLSurface_StopFind@8" +BS_ISteamHTMLSurface_GetLinkAtPosition(pThis%, iHandle%, X%, Y%) :"_BS_ISteamHTMLSurface_GetLinkAtPosition@16" +BS_ISteamHTMLSurface_SetCookie(pThis%, iHandle%, cHostName$, cKey$, cValue$, cPath$, nExpires%, bSecure%, bHTTPOnly%):"_BS_ISteamHTMLSurface_SetCookie@36" +BS_ISteamHTMLSurface_SetPageScaleFactor(pThis%, iHandle%, fZoom#, iX%, iY%) :"_BS_ISteamHTMLSurface_SetPageScaleFactor@20" +BS_ISteamHTMLSurface_SetBackgroundMode(pThis%, iHandle%, bBackgroundMode%) :"_BS_ISteamHTMLSurface_SetBackgroundMode@12" +BS_ISteamHTMLSurface_AllowStartRequest(pThis%, iHandle%, bAllowed%) :"_BS_ISteamHTMLSurface_AllowStartRequest@12" +BS_ISteamHTMLSurface_JSDialogResponse(pThis%, iHandle%, bResult%) :"_BS_ISteamHTMLSurface_JSDialogResponse@12" BS_ISteamHTMLSurface_FileLoadDialogResponse(pThis%, iHandle%, pcSelectedFiles%) :"_BS_ISteamHTMLSurface_FileLoadDialogResponse@12" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamHTTP.decls b/Resources/Decls/BlitzSteam_SteamHTTP.decls index 45a819a..e51d1df 100644 --- a/Resources/Decls/BlitzSteam_SteamHTTP.decls +++ b/Resources/Decls/BlitzSteam_SteamHTTP.decls @@ -1,54 +1,54 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; HTTP ------------------------------------------------------------------------ -BS_SteamHTTP%() :"_BS_SteamHTTP@0" -BS_SteamGameServerHTTP%() :"_BS_SteamGameServerHTTP@0" -BS_ISteamHTTP_CreateHTTPRequest%(pThis%, EHTTPRequestMethod%, cAbsoluteUrl$) :"_BS_ISteamHTTP_CreateHTTPRequest@12" -BS_ISteamHTTP_SetHTTPRequestContextValue%(pThis%, iRequest%, lContextValue%) :"_BS_ISteamHTTP_SetHTTPRequestContextValue@12" -BS_ISteamHTTP_SetHTTPNetworkActivityTimeout%(pThis%, iRequest%, iSeconds%) :"_BS_ISteamHTTP_SetHTTPNetworkActivityTimeout@12" -BS_ISteamHTTP_SetHTTPRequestHeaderValue%(pThis%, iRequest%, cName$, cValue$) :"_BS_ISteamHTTP_SetHTTPRequestHeaderValue@16" -BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter%(pThis%, iRequest%, cName$, cValue$):"_BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter@16" -BS_ISteamHTTP_SendHTTPRequest%(pThis%, iRequest, lCallHandle%) :"_BS_ISteamHTTP_SendHTTPRequest@12" -BS_ISteamHTTP_SendHTTPRequestAndStreamResponse%(pThis%, iRequest%, lCallHandle%):"_BS_ISteamHTTP_SendHTTPRequestAndStreamResponse@12" -BS_ISteamHTTP_DeferHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_DeferHTTPRequest@8" -BS_ISteamHTTP_PrioritizeHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_PrioritizeHTTPRequest@8" -BS_ISteamHTTP_GetHTTPResponseHeaderSize%(pThis%, iRequest%, cName$, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" -BS_ISteamHTTP_GetHTTPResponseHeaderSizeEx%(pThis%, iRequest%, cName$, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" -BS_ISteamHTTP_GetHTTPResponseHeaderValue%(pThis%, iRequest%, cName$, pBuffer*, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" -BS_ISteamHTTP_GetHTTPResponseHeaderValueEx%(pThis%, iRequest%, cName$, pBuffer%, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" -BS_ISteamHTTP_GetHTTPResponseBodySize%(pThis%, iRequest%, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" -BS_ISteamHTTP_GetHTTPResponseBodySizeEx%(pThis%, iRequest%, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" -BS_ISteamHTTP_GetHTTPResponseBodyData%(pThis%, iRequest%, pBuffer*, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" -BS_ISteamHTTP_GetHTTPResponseBodyDataEx%(pThis%, iRequest%, pBuffer%, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" -BS_ISteamHTTP_GetHTTPStreamingResponseBodyData%(pThis%, iRequest%, iOffset%, pBuffer*, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" -BS_ISteamHTTP_GetHTTPStreamingResponseBodyDataEx%(pThis%, iRequest%, iOffset%, pBuffer%, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" -BS_ISteamHTTP_ReleaseHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_ReleaseHTTPRequest@8" -BS_ISteamHTTP_GetHTTPDownloadProgressPct%(pThis%, iRequest%, pfPercent*) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" -BS_ISteamHTTP_GetHTTPDownloadProgressPctEx%(pThis%, iRequest%, pfPercent%) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" -BS_ISteamHTTP_SetHTTPRequestRawPostBody%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" -BS_ISteamHTTP_SetHTTPRequestRawPostBodyEx%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" -BS_ISteamHTTP_CreateCookieContainer%(pThis%, bAllowResponsesToModify%) :"_BS_ISteamHTTP_CreateCookieContainer@8" -BS_ISteamHTTP_ReleaseCookieContainer%(pThis%, iCookieContainer%) :"_BS_ISteamHTTP_ReleaseCookieContainer@8" -BS_ISteamHTTP_SetCookie%(pthis%, iCookieContainer%, cHost$, cUrl$, cCookie$) :"_BS_ISteamHTTP_SetCookie@20" -BS_ISteamHTTP_SetHTTPRequestCookieContainer%(pThis%, iRequest%, iCookieContainer%):"_BS_ISteamHTTP_SetHTTPRequestCookieContainer@12" -BS_ISteamHTTP_SetHTTPRequestUserAgentInfo%(pThis%, iRequest%, cUserAgent$) :"_BS_ISteamHTTP_SetHTTPRequestUserAgentInfo@12" -BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate%(pThis%, iRequest%, bRequire%):"_BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate@12" -BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS%(pThis%, iRequest%, iMilliseconds%):"_BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS@12" -BS_ISteamHTTP_GetHTTPRequestWasTimedOut%(pThis%, iRequest%, pbWasTimedOut*) :"_BS_ISteamHTTP_GetHTTPRequestWasTimedOut@12" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; HTTP ------------------------------------------------------------------------ +BS_SteamHTTP%() :"_BS_SteamHTTP@0" +BS_SteamGameServerHTTP%() :"_BS_SteamGameServerHTTP@0" +BS_ISteamHTTP_CreateHTTPRequest%(pThis%, EHTTPRequestMethod%, cAbsoluteUrl$) :"_BS_ISteamHTTP_CreateHTTPRequest@12" +BS_ISteamHTTP_SetHTTPRequestContextValue%(pThis%, iRequest%, lContextValue%) :"_BS_ISteamHTTP_SetHTTPRequestContextValue@12" +BS_ISteamHTTP_SetHTTPNetworkActivityTimeout%(pThis%, iRequest%, iSeconds%) :"_BS_ISteamHTTP_SetHTTPNetworkActivityTimeout@12" +BS_ISteamHTTP_SetHTTPRequestHeaderValue%(pThis%, iRequest%, cName$, cValue$) :"_BS_ISteamHTTP_SetHTTPRequestHeaderValue@16" +BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter%(pThis%, iRequest%, cName$, cValue$):"_BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter@16" +BS_ISteamHTTP_SendHTTPRequest%(pThis%, iRequest, lCallHandle%) :"_BS_ISteamHTTP_SendHTTPRequest@12" +BS_ISteamHTTP_SendHTTPRequestAndStreamResponse%(pThis%, iRequest%, lCallHandle%):"_BS_ISteamHTTP_SendHTTPRequestAndStreamResponse@12" +BS_ISteamHTTP_DeferHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_DeferHTTPRequest@8" +BS_ISteamHTTP_PrioritizeHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_PrioritizeHTTPRequest@8" +BS_ISteamHTTP_GetHTTPResponseHeaderSize%(pThis%, iRequest%, cName$, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" +BS_ISteamHTTP_GetHTTPResponseHeaderSizeEx%(pThis%, iRequest%, cName$, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseHeaderSize@16" +BS_ISteamHTTP_GetHTTPResponseHeaderValue%(pThis%, iRequest%, cName$, pBuffer*, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" +BS_ISteamHTTP_GetHTTPResponseHeaderValueEx%(pThis%, iRequest%, cName$, pBuffer%, iSize%):"_BS_ISteamHTTP_GetHTTPResponseHeaderValue@20" +BS_ISteamHTTP_GetHTTPResponseBodySize%(pThis%, iRequest%, piSize*) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" +BS_ISteamHTTP_GetHTTPResponseBodySizeEx%(pThis%, iRequest%, piSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodySize@12" +BS_ISteamHTTP_GetHTTPResponseBodyData%(pThis%, iRequest%, pBuffer*, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" +BS_ISteamHTTP_GetHTTPResponseBodyDataEx%(pThis%, iRequest%, pBuffer%, nSize%) :"_BS_ISteamHTTP_GetHTTPResponseBodyData@16" +BS_ISteamHTTP_GetHTTPStreamingResponseBodyData%(pThis%, iRequest%, iOffset%, pBuffer*, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" +BS_ISteamHTTP_GetHTTPStreamingResponseBodyDataEx%(pThis%, iRequest%, iOffset%, pBuffer%, nSize%):"_BS_ISteamHTTP_GetHTTPStreamingResponseBodyData@20" +BS_ISteamHTTP_ReleaseHTTPRequest%(pThis%, iRequest%) :"_BS_ISteamHTTP_ReleaseHTTPRequest@8" +BS_ISteamHTTP_GetHTTPDownloadProgressPct%(pThis%, iRequest%, pfPercent*) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" +BS_ISteamHTTP_GetHTTPDownloadProgressPctEx%(pThis%, iRequest%, pfPercent%) :"_BS_ISteamHTTP_GetHTTPDownloadProgressPct@12" +BS_ISteamHTTP_SetHTTPRequestRawPostBody%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" +BS_ISteamHTTP_SetHTTPRequestRawPostBodyEx%(pThis%, iRequest%, cType$, pBody*, nSize%):"_BS_ISteamHTTP_SetHTTPRequestRawPostBody@16" +BS_ISteamHTTP_CreateCookieContainer%(pThis%, bAllowResponsesToModify%) :"_BS_ISteamHTTP_CreateCookieContainer@8" +BS_ISteamHTTP_ReleaseCookieContainer%(pThis%, iCookieContainer%) :"_BS_ISteamHTTP_ReleaseCookieContainer@8" +BS_ISteamHTTP_SetCookie%(pthis%, iCookieContainer%, cHost$, cUrl$, cCookie$) :"_BS_ISteamHTTP_SetCookie@20" +BS_ISteamHTTP_SetHTTPRequestCookieContainer%(pThis%, iRequest%, iCookieContainer%):"_BS_ISteamHTTP_SetHTTPRequestCookieContainer@12" +BS_ISteamHTTP_SetHTTPRequestUserAgentInfo%(pThis%, iRequest%, cUserAgent$) :"_BS_ISteamHTTP_SetHTTPRequestUserAgentInfo@12" +BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate%(pThis%, iRequest%, bRequire%):"_BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate@12" +BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS%(pThis%, iRequest%, iMilliseconds%):"_BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS@12" +BS_ISteamHTTP_GetHTTPRequestWasTimedOut%(pThis%, iRequest%, pbWasTimedOut*) :"_BS_ISteamHTTP_GetHTTPRequestWasTimedOut@12" BS_ISteamHTTP_GetHTTPRequestWasTimedOutEx%(pThis%, iRequest%, pbWasTimedOut%) :"_BS_ISteamHTTP_GetHTTPRequestWasTimedOut@12" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamInventory.decls b/Resources/Decls/BlitzSteam_SteamInventory.decls index 732f2dd..adb6819 100644 --- a/Resources/Decls/BlitzSteam_SteamInventory.decls +++ b/Resources/Decls/BlitzSteam_SteamInventory.decls @@ -1,59 +1,59 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Inventory ------------------------------------------------------------------- -BS_SteamInventory%() :"_BS_SteamInventory@0" -BS_SteamGameServerInventory%() :"_BS_SteamGameServerInventory@0" -BS_ISteamInventory_GetResultStatus%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultStatus@8" -BS_ISteamInventory_GetResultItems%(pThis%, iResultHandle%, pItemsArray*, piItemsArraySize*):"_BS_ISteamInventory_GetResultItems@16" -BS_ISteamInventory_GetResultItemsEx%(pThis%, iResultHandle%, pItemsArray%, piItemsArraySize%):"_BS_ISteamInventory_GetResultItems@16" -BS_ISteamInventory_GetResultTimestamp%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultTimestamp@8" -BS_ISteamInventory_CheckResultSteamID%(pThis%, iResultHandle%, lSteamIdExpected%):"_BS_ISteamInventory_GetResultTimestamp@12" -BS_ISteamInventory_DestroyResult(pThis%, iResultHandle%) :"_BS_ISteamInventory_DestroyResult@8" -BS_ISteamInventory_GetAllItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GetAllItems@8" -BS_ISteamInventory_GetAllItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GetAllItems@8" -BS_ISteamInventory_GetItemsByID%(pThis%, piResultHandle*, plInstanceIds*, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" -BS_ISteamInventory_GetItemsByIDEx%(pThis%, piResultHandle%, plInstanceIds%, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" -BS_ISteamInventory_SerializeResult%(pThis%, iResultHandle%, pOutBuffer*, piOutBufferSize*):"_BS_ISteamInventory_SerializeResult@16" -BS_ISteamInventory_SerializeResultEx%(pThis%, iResultHandle%, pOutBuffer%, piOutBufferSize%):"_BS_ISteamInventory_SerializeResult@16" -BS_ISteamInventory_DeserializeResult%(pThis%, piResultHandle*, pBuffer*, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" -BS_ISteamInventory_DeserializeResultEx%(pThis%, piResultHandle%, pBuffer%, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" -BS_ISteamInventory_GenerateItems%(pThis%, piResultHandle*, piIdArray*, piQuantityArray*, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" -BS_ISteamInventory_GenerateItemsEx%(pThis%, piResultHandle%, piIdArray%, piQuantityArray%, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" -BS_ISteamInventory_GrantPromoItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GrantPromoItems@8" -BS_ISteamInventory_GrantPromoItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GrantPromoItems@8" -BS_ISteamInventory_AddPromoItem%(pThis%, piResultHandle*, iId%) :"_BS_ISteamInventory_AddPromoItem@12" -BS_ISteamInventory_AddPromoItemEx%(pThis%, piResultHandle%, iId%) :"_BS_ISteamInventory_AddPromoItem@12" -BS_ISteamInventory_AddPromoItems%(pThis%, piResultHandle*, piIdsArray*, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" -BS_ISteamInventory_AddPromoItemsEx%(pThis%, piResultHandle%, piIdsArray%, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" -BS_ISteamInventory_ConsumeItem%(pThis%, piResultHandle*, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" -BS_ISteamInventory_ConsumeItemEx%(pThis%, piResultHandle%, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" -BS_ISteamInventory_ExchangeItems%(pThis%, piResultHandle*, piGenerateArray*, piGenerateQuantityArray*, iArrayGenerateLength%, piDestroyArray*, piDestroyQuantityArray*, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" -BS_ISteamInventory_ExchangeItemsEx%(pThis%, piResultHandle%, piGenerateArray%, piGenerateQuantityArray%, iArrayGenerateLength%, piDestroyArray%, piDestroyQuantityArray%, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" -BS_ISteamInventory_TransferItemQuantity%(pThis%, piResultHandle*, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" -BS_ISteamInventory_TransferItemQuantityEx%(pThis%, piResultHandle%, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" -BS_ISteamInventory_SendItemDropHeartbeat%(pThis%) :"_BS_ISteamInventory_SendItemDropHeartbeat@4" -BS_ISteamInventory_TriggerItemDrop%(pThis%, piResultHandle*, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" -BS_ISteamInventory_TriggerItemDropEx%(pThis%, piResultHandle%, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" -BS_ISteamInventory_TradeItems%(pThis%, piResultHandle*, lSteamIdPartner%, piArrayGive*, piArrayGiveQuantity*, iArrayGiveLength%, piArrayGet*, piArrayGetQuantity*, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" -BS_ISteamInventory_TradeItemsEx%(pThis%, piResultHandle%, lSteamIdPartner%, piArrayGive%, piArrayGiveQuantity%, iArrayGiveLength%, piArrayGet%, piArrayGetQuantity%, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" -BS_ISteamInventory_LoadItemDefinitions%(pThis%) :"_BS_ISteamInventory_LoadItemDefinitions@4" -BS_ISteamInventory_GetItemDefinitionIDs%(pThis%, piArrayId*, piArrayIdSize*) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" -BS_ISteamInventory_GetItemDefinitionIDsEx%(pThis%, piArrayId%, piArrayIdSize%) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" -BS_ISteamInventory_GetItemDefinitionProperty%(pThis%, iId%, cName$, pcValueBuffer*, piValueBufferSize*):"_BS_ISteamInventory_GetItemDefinitionProperty@20" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Inventory ------------------------------------------------------------------- +BS_SteamInventory%() :"_BS_SteamInventory@0" +BS_SteamGameServerInventory%() :"_BS_SteamGameServerInventory@0" +BS_ISteamInventory_GetResultStatus%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultStatus@8" +BS_ISteamInventory_GetResultItems%(pThis%, iResultHandle%, pItemsArray*, piItemsArraySize*):"_BS_ISteamInventory_GetResultItems@16" +BS_ISteamInventory_GetResultItemsEx%(pThis%, iResultHandle%, pItemsArray%, piItemsArraySize%):"_BS_ISteamInventory_GetResultItems@16" +BS_ISteamInventory_GetResultTimestamp%(pThis%, iResultHandle%) :"_BS_ISteamInventory_GetResultTimestamp@8" +BS_ISteamInventory_CheckResultSteamID%(pThis%, iResultHandle%, lSteamIdExpected%):"_BS_ISteamInventory_GetResultTimestamp@12" +BS_ISteamInventory_DestroyResult(pThis%, iResultHandle%) :"_BS_ISteamInventory_DestroyResult@8" +BS_ISteamInventory_GetAllItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GetAllItems@8" +BS_ISteamInventory_GetAllItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GetAllItems@8" +BS_ISteamInventory_GetItemsByID%(pThis%, piResultHandle*, plInstanceIds*, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" +BS_ISteamInventory_GetItemsByIDEx%(pThis%, piResultHandle%, plInstanceIds%, iInstanceIdCount%):"_BS_ISteamInventory_GetItemsByID@16" +BS_ISteamInventory_SerializeResult%(pThis%, iResultHandle%, pOutBuffer*, piOutBufferSize*):"_BS_ISteamInventory_SerializeResult@16" +BS_ISteamInventory_SerializeResultEx%(pThis%, iResultHandle%, pOutBuffer%, piOutBufferSize%):"_BS_ISteamInventory_SerializeResult@16" +BS_ISteamInventory_DeserializeResult%(pThis%, piResultHandle*, pBuffer*, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" +BS_ISteamInventory_DeserializeResultEx%(pThis%, piResultHandle%, pBuffer%, iBufferSize%, bReservedMustBeFalse):"_BS_ISteamInventory_DeserializeResult@20" +BS_ISteamInventory_GenerateItems%(pThis%, piResultHandle*, piIdArray*, piQuantityArray*, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" +BS_ISteamInventory_GenerateItemsEx%(pThis%, piResultHandle%, piIdArray%, piQuantityArray%, iArrayLength%):"_BS_ISteamInventory_GenerateItems@20" +BS_ISteamInventory_GrantPromoItems%(pThis%, piResultHandle*) :"_BS_ISteamInventory_GrantPromoItems@8" +BS_ISteamInventory_GrantPromoItemsEx%(pThis%, piResultHandle%) :"_BS_ISteamInventory_GrantPromoItems@8" +BS_ISteamInventory_AddPromoItem%(pThis%, piResultHandle*, iId%) :"_BS_ISteamInventory_AddPromoItem@12" +BS_ISteamInventory_AddPromoItemEx%(pThis%, piResultHandle%, iId%) :"_BS_ISteamInventory_AddPromoItem@12" +BS_ISteamInventory_AddPromoItems%(pThis%, piResultHandle*, piIdsArray*, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" +BS_ISteamInventory_AddPromoItemsEx%(pThis%, piResultHandle%, piIdsArray%, iArrayLength%):"_BS_ISteamInventory_AddPromoItems@16" +BS_ISteamInventory_ConsumeItem%(pThis%, piResultHandle*, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" +BS_ISteamInventory_ConsumeItemEx%(pThis%, piResultHandle%, iId%, iQuantity%) :"_BS_ISteamInventory_ConsumeItem@16" +BS_ISteamInventory_ExchangeItems%(pThis%, piResultHandle*, piGenerateArray*, piGenerateQuantityArray*, iArrayGenerateLength%, piDestroyArray*, piDestroyQuantityArray*, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" +BS_ISteamInventory_ExchangeItemsEx%(pThis%, piResultHandle%, piGenerateArray%, piGenerateQuantityArray%, iArrayGenerateLength%, piDestroyArray%, piDestroyQuantityArray%, iArrayDestroyLength%):"_BS_ISteamInventory_ExchangeItems@32" +BS_ISteamInventory_TransferItemQuantity%(pThis%, piResultHandle*, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" +BS_ISteamInventory_TransferItemQuantityEx%(pThis%, piResultHandle%, iSourceId%, iQuantity%, iDestId%):"_BS_ISteamInventory_TransferItemQuantity@20" +BS_ISteamInventory_SendItemDropHeartbeat%(pThis%) :"_BS_ISteamInventory_SendItemDropHeartbeat@4" +BS_ISteamInventory_TriggerItemDrop%(pThis%, piResultHandle*, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" +BS_ISteamInventory_TriggerItemDropEx%(pThis%, piResultHandle%, iDropListId%) :"_BS_ISteamInventory_TriggerItemDrop@12" +BS_ISteamInventory_TradeItems%(pThis%, piResultHandle*, lSteamIdPartner%, piArrayGive*, piArrayGiveQuantity*, iArrayGiveLength%, piArrayGet*, piArrayGetQuantity*, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" +BS_ISteamInventory_TradeItemsEx%(pThis%, piResultHandle%, lSteamIdPartner%, piArrayGive%, piArrayGiveQuantity%, iArrayGiveLength%, piArrayGet%, piArrayGetQuantity%, iArrayGetLength%):"_BS_ISteamInventory_TradeItems@36" +BS_ISteamInventory_LoadItemDefinitions%(pThis%) :"_BS_ISteamInventory_LoadItemDefinitions@4" +BS_ISteamInventory_GetItemDefinitionIDs%(pThis%, piArrayId*, piArrayIdSize*) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" +BS_ISteamInventory_GetItemDefinitionIDsEx%(pThis%, piArrayId%, piArrayIdSize%) :"_BS_ISteamInventory_GetItemDefinitionIDs@12" +BS_ISteamInventory_GetItemDefinitionProperty%(pThis%, iId%, cName$, pcValueBuffer*, piValueBufferSize*):"_BS_ISteamInventory_GetItemDefinitionProperty@20" BS_ISteamInventory_GetItemDefinitionPropertyEx%(pThis%, iId%, cName$, pcValueBuffer%, piValueBufferSize%):"_BS_ISteamInventory_GetItemDefinitionProperty@20" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamMatchmaking.decls b/Resources/Decls/BlitzSteam_SteamMatchmaking.decls index b4087a6..2923f02 100644 --- a/Resources/Decls/BlitzSteam_SteamMatchmaking.decls +++ b/Resources/Decls/BlitzSteam_SteamMatchmaking.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Matchmaking ----------------------------------------------------------------- -BS_SteamMatchmaking%() :"_BS_SteamMatchmaking@0" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Matchmaking ----------------------------------------------------------------- +BS_SteamMatchmaking%() :"_BS_SteamMatchmaking@0" ; Todo \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamMatchmakingServers.decls b/Resources/Decls/BlitzSteam_SteamMatchmakingServers.decls index cf3ea13..337e2f8 100644 --- a/Resources/Decls/BlitzSteam_SteamMatchmakingServers.decls +++ b/Resources/Decls/BlitzSteam_SteamMatchmakingServers.decls @@ -1,21 +1,42 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; MatchmakingServers ---------------------------------------------------------- -BS_SteamMatchmakingServers%() :"_BS_SteamMatchmakingServers@0" -; Todo \ No newline at end of file +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; MatchmakingServers ---------------------------------------------------------- +BS_SteamMatchmakingServers%() :"_BS_SteamMatchmakingServers@0" +BS_ISteamMatchmakingServers_RequestInternetServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestInternetServerList@20" +BS_ISteamMatchmakingServers_RequestInternetServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestInternetServerList@20" +BS_ISteamMatchmakingServers_RequestLANServerList%(pThis%, iApp%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestLANServerList@12" +BS_ISteamMatchmakingServers_RequestFriendsServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFriendsServerList@20" +BS_ISteamMatchmakingServers_RequestFriendsServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFriendsServerList@20" +BS_ISteamMatchmakingServers_RequestFavoritesServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFavoritesServerList@20" +BS_ISteamMatchmakingServers_RequestFavoritesServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestFavoritesServerList@20" +BS_ISteamMatchmakingServers_RequestHistoryServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestHistoryServerList@20" +BS_ISteamMatchmakingServers_RequestHistoryServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestHistoryServerList@20" +BS_ISteamMatchmakingServers_RequestSpectatorServerList%(pThis%, iApp%, ppchFilters*, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestSpectatorServerList@20" +BS_ISteamMatchmakingServers_RequestSpectatorServerListEx%(pThis%, iApp%, ppchFilters%, nFilters%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_RequestSpectatorServerList@20" +BS_ISteamMatchmakingServers_ReleaseRequest%(pThis%, hServerListRequest%) :"_BS_ISteamMatchmakingServers_ReleaseRequest@8" +BS_ISteamMatchmakingServers_GetServerDetails%(pThis%, hRequest%, iServer%) :"_BS_ISteamMatchmakingServers_GetServerDetails@12" +BS_ISteamMatchmakingServers_CancelQuery%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_CancelQuery@8" +BS_ISteamMatchmakingServers_RefreshQuery%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_RefreshQuery@8" +BS_ISteamMatchmakingServers_IsRefreshing%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_IsRefreshing@8" +BS_ISteamMatchmakingServers_GetServerCount%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_GetServerCount@8" +BS_ISteamMatchmakingServers_RefreshServer%(pThis%, hRequest%) :"_BS_ISteamMatchmakingServers_RefreshServer@8" +BS_ISteamMatchmakingServers_PingServer%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_PingServer@16" +BS_ISteamMatchmakingServers_PlayerDetails%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_PlayerDetails@16" +BS_ISteamMatchmakingServers_ServerRules%(pThis%, unIP%, usPort%, pRequestServersResponse%):"_BS_ISteamMatchmakingServers_ServerRules@16" +BS_ISteamMatchmakingServers_CancelServerQuery%(pThis%, hServerQuery) :"_BS_ISteamMatchmakingServers_CancelServerQuery@8" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamMatchmakingTypes.decls b/Resources/Decls/BlitzSteam_SteamMatchmakingTypes.decls new file mode 100644 index 0000000..47c09a7 --- /dev/null +++ b/Resources/Decls/BlitzSteam_SteamMatchmakingTypes.decls @@ -0,0 +1,78 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; ISteamMatchmakingServerListResponse ----------------------------------------- +BS_ISteamMatchmakingServerListResponse_New%(Data%, pServerResponded%, pServerFailedToRespond%, pRefreshComplete%):"_BS_ISteamMatchmakingServerListResponse_New@16" +BS_ISteamMatchmakingServerListResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingServerListResponse_Destroy@4" +;- Callback pServerResponded: Function(Data%, hRequest%, iServer%) +;- Callback pServerFailedToRespond: Function(Data%, hRequest%, iServer%) +;- Callback pRefreshComplete: Function(Data%) + +; ISteamMatchmakingPingResponse ----------------------------------------------- +BS_ISteamMatchmakingPingResponse_New%(Data%, pServerResponded%, pServerFailedToRespond%):"_BS_ISteamMatchmakingPingResponse_New@12" +BS_ISteamMatchmakingPingResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPingResponse_Destroy@4" +;- Callback pServerResponded: Function(Data%, TGameServerItem%) +;- Callback pServerFailedToRespond: Function(Data%) + +; ISteamMatchmakingPlayersResponse -------------------------------------------- +BS_ISteamMatchmakingPlayersResponse_New%(Data%, pAddPlayerToList%, pPlayersFailedToRespond%, pPlayersRefreshComplete%):"_BS_ISteamMatchmakingPlayersResponse_New@16" +BS_ISteamMatchmakingPlayersResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPlayersResponse_Destroy@4" +;- Callback pAddPlayerToList: Function(Data%, pchName%, nScore%, flTimePlayer#) +;- Callback pPlayersFailedToRespond: Function(Data%) +;- Callback pPlayersRefreshComplete: Function(Data%) + +; ISteamMatchmakingRulesResponse ---------------------------------------------- +BS_ISteamMatchmakingRulesResponse_New%(Data%, pRulesResponded%, pRulesFailedToRespond%, pRulesRefreshComplete%):"_BS_ISteamMatchmakingRulesResponse_New@16" +BS_ISteamMatchmakingRulesResponse_Destroy%(pThis%):"_BS_ISteamMatchmakingPlayersResponse_Destroy@4" +;- Callback pRulesResponded: Function(Data%, pchRule%, pchValue%) +;- Callback pRulesFailedToRespond: Function(Data%) +;- Callback pRulesRefreshComplete: Function(Data%) + +; TGameServerItem ------------------------------------------------------------- +BS_TGameServerItem_GetName$(pThis%) :"_BS_TGameServerItem_GetName@4" +BS_TGameServerItem_SetName(pThis%, cName$) :"_BS_TGameServerItem_SetName@8" +BS_TGameServerItem_NetAdr%(pThis%) :"_BS_TGameServerItem_NetAdr@4" +BS_TGameServerItem_Ping%(pThis%) :"_BS_TGameServerItem_Ping@4" +BS_TGameServerItem_HadSuccessfulResponse%(pThis%) :"_BS_TGameServerItem_HadSuccessfulResponse@4" +BS_TGameServerItem_DoNotRefresh%(pThis%) :"_BS_TGameServerItem_DoNotRefresh@4" +BS_TGameServerItem_GameDir$(pThis%) :"_BS_TGameServerItem_GameDir@4" +BS_TGameServerItem_Map$(pThis%) :"_BS_TGameServerItem_Map@4" +BS_TGameServerItem_GameDescription$(pThis%) :"_BS_TGameServerItem_GameDescription@4" +BS_TGameServerItem_AppId%(pThis%) :"_BS_TGameServerItem_AppId@4" +BS_TGameServerItem_Players%(pThis%) :"_BS_TGameServerItem_Players@4" +BS_TGameServerItem_MaxPlayers%(pThis%) :"_BS_TGameServerItem_MaxPlayers@4" +BS_TGameServerItem_BotPlayers%(pThis%) :"_BS_TGameServerItem_BotPlayers@4" +BS_TGameServerItem_Password%(pThis%) :"_BS_TGameServerItem_Password@4" +BS_TGameServerItem_Secure%(pThis%) :"_BS_TGameServerItem_Secure@4" +BS_TGameServerItem_TimeLastPlayed%(pThis%) :"_BS_TGameServerItem_TimeLastPlayed@4" +BS_TGameServerItem_ServerVersion%(pThis%) :"_BS_TGameServerItem_ServerVersion@4" +BS_TGameServerItem_GameTags$(pThis%) :"_BS_TGameServerItem_GameTags@4" +BS_TGameServerItem_SteamID%(pThis%) :"_BS_TGameServerItem_SteamID@4" + +; TServerNetAdr --------------------------------------------------------------- +BS_TServerNetAdr_Set(pThis%, pThat%) :"_BS_TServerNetAdr_Set@8" +BS_TServerNetAdr_Init(pThis%, iIP%, iQueryPort%, iConnectionPort%) :"_BS_TServerNetAdr_Init@16" +BS_TServerNetAdr_GetQueryPort%(pThis%) :"_BS_TServerNetAdr_GetQueryPort@4" +BS_TServerNetAdr_SetQueryPort(pThis%, iPort%) :"_BS_TServerNetAdr_SetQueryPort@8" +BS_TServerNetAdr_GetConnectionPort%(pThis%) :"_BS_TServerNetAdr_GetConnectionPort@4" +BS_TServerNetAdr_SetConnectionPort(pThis%, iPort%) :"_BS_TServerNetAdr_SetConnectionPort@8" +BS_TServerNetAdr_GetIP%(pThis%) :"_BS_TServerNetAdr_GetIP@4" +BS_TServerNetAdr_SetIP(pThis%, iIP%) :"_BS_TServerNetAdr_SetIP@8" +BS_TServerNetAdr_GetConnectionAddressString$(pThis%) :"_BS_TServerNetAdr_GetConnectionAddressString@4" +BS_TServerNetAdr_GetQueryAddressString$(pThis%) :"_BS_TServerNetAdr_GetQueryAddressString@4" +BS_TServerNetAdr_Compare%(pThis%, pThat%) :"_BS_TServerNetAdr_Compare@8" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamMusic.decls b/Resources/Decls/BlitzSteam_SteamMusic.decls index 62e933d..2294d38 100644 --- a/Resources/Decls/BlitzSteam_SteamMusic.decls +++ b/Resources/Decls/BlitzSteam_SteamMusic.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Music ----------------------------------------------------------------------- -BS_SteamMusic%() :"_BS_SteamMusic@0" -; Todo +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Music ----------------------------------------------------------------------- +BS_SteamMusic%() :"_BS_SteamMusic@0" +; Todo diff --git a/Resources/Decls/BlitzSteam_SteamMusicRemote.decls b/Resources/Decls/BlitzSteam_SteamMusicRemote.decls index 898d107..2093ce9 100644 --- a/Resources/Decls/BlitzSteam_SteamMusicRemote.decls +++ b/Resources/Decls/BlitzSteam_SteamMusicRemote.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; MusicRemote ----------------------------------------------------------------- -BS_SteamMusicRemote%() :"_BS_SteamMusicRemote@0" -; Todo +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; MusicRemote ----------------------------------------------------------------- +BS_SteamMusicRemote%() :"_BS_SteamMusicRemote@0" +; Todo diff --git a/Resources/Decls/BlitzSteam_SteamNetworking.decls b/Resources/Decls/BlitzSteam_SteamNetworking.decls index 263951c..ecd6157 100644 --- a/Resources/Decls/BlitzSteam_SteamNetworking.decls +++ b/Resources/Decls/BlitzSteam_SteamNetworking.decls @@ -1,32 +1,32 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Networking ------------------------------------------------------------------ -BS_SteamNetworking%() :"_BS_SteamNetworking@0" -BS_SteamGameServerNetworking%() :"_BS_SteamGameServerNetworking@0" -BS_ISteamNetworking_SendP2PPacket%(pThis%, lRemoteSteamId%, pData*, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" -BS_ISteamNetworking_SendP2PPacketEx%(pThis%, lRemoteSteamId%, pData%, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" -BS_ISteamNetworking_IsP2PPacketAvailable%(pThis%, piSize*, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailable@12" -BS_ISteamNetworking_IsP2PPacketAvailableEx%(pThis%, piSize%, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailableEx@12" -BS_ISteamNetworking_ReadP2PPacket%(pThis%, pBuffer*, iBufferSize%, piMessageSize*, lRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" -BS_ISteamNetworking_ReadP2PPacketEx%(pThis%, pBuffer%, iBufferSize%, piMessageSize%, lRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" -BS_ISteamNetworking_AcceptP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_AcceptP2PSessionWithUser@8" -BS_ISteamNetworking_CloseP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_CloseP2PSessionWithUser@8" -BS_ISteamNetworking_CloseP2PChannelWithUser%(pThis%, lRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_CloseP2PChannelWithUser@12" -BS_ISteamNetworking_GetP2PSessionState%(pThis%, lRemoteSteamId%, pConnectionState*):"_BS_ISteamNetworking_GetP2PSessionState@12" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Networking ------------------------------------------------------------------ +BS_SteamNetworking%() :"_BS_SteamNetworking@0" +BS_SteamGameServerNetworking%() :"_BS_SteamGameServerNetworking@0" +BS_ISteamNetworking_SendP2PPacket%(pThis%, lRemoteSteamId%, pData*, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" +BS_ISteamNetworking_SendP2PPacketEx%(pThis%, lRemoteSteamId%, pData%, iDataSize%, EP2PSendType%, iChannel%):"_BS_ISteamNetworking_SendP2PPacket@24" +BS_ISteamNetworking_IsP2PPacketAvailable%(pThis%, piSize*, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailable@12" +BS_ISteamNetworking_IsP2PPacketAvailableEx%(pThis%, piSize%, iChannel%) :"_BS_ISteamNetworking_IsP2PPacketAvailable@12" +BS_ISteamNetworking_ReadP2PPacket%(pThis%, pBuffer*, iBufferSize%, piMessageSize*, plRemoteSteamId*, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" +BS_ISteamNetworking_ReadP2PPacketEx%(pThis%, pBuffer%, iBufferSize%, piMessageSize%, plRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_ReadP2PPacket@24" +BS_ISteamNetworking_AcceptP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_AcceptP2PSessionWithUser@8" +BS_ISteamNetworking_CloseP2PSessionWithUser%(pThis%, lRemoteSteamId%) :"_BS_ISteamNetworking_CloseP2PSessionWithUser@8" +BS_ISteamNetworking_CloseP2PChannelWithUser%(pThis%, lRemoteSteamId%, iChannel%):"_BS_ISteamNetworking_CloseP2PChannelWithUser@12" +BS_ISteamNetworking_GetP2PSessionState%(pThis%, lRemoteSteamId%, pConnectionState*):"_BS_ISteamNetworking_GetP2PSessionState@12" BS_ISteamNetworking_AllowP2PPacketRelay%(pThis%, bAllow%) :"_BS_ISteamNetworking_AllowP2PPacketRelay@8" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamRemoteStorage.decls b/Resources/Decls/BlitzSteam_SteamRemoteStorage.decls index d06a0ec..ea3f10b 100644 --- a/Resources/Decls/BlitzSteam_SteamRemoteStorage.decls +++ b/Resources/Decls/BlitzSteam_SteamRemoteStorage.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; RemoteStorage --------------------------------------------------------------- -BS_SteamRemoteStorage%() :"_BS_SteamRemoteStorage@0" -; Todo +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; RemoteStorage --------------------------------------------------------------- +BS_SteamRemoteStorage%() :"_BS_SteamRemoteStorage@0" +; Todo diff --git a/Resources/Decls/BlitzSteam_SteamScreenshots.decls b/Resources/Decls/BlitzSteam_SteamScreenshots.decls index 7e37a02..671fa4b 100644 --- a/Resources/Decls/BlitzSteam_SteamScreenshots.decls +++ b/Resources/Decls/BlitzSteam_SteamScreenshots.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Screenshots ----------------------------------------------------------------- -BS_SteamScreenshots%() :"_BS_SteamScreenshots@0" -; Todo +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Screenshots ----------------------------------------------------------------- +BS_SteamScreenshots%() :"_BS_SteamScreenshots@0" +; Todo diff --git a/Resources/Decls/BlitzSteam_SteamUGC.decls b/Resources/Decls/BlitzSteam_SteamUGC.decls index a91fe13..ce0a3e6 100644 --- a/Resources/Decls/BlitzSteam_SteamUGC.decls +++ b/Resources/Decls/BlitzSteam_SteamUGC.decls @@ -1,22 +1,22 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; UGC ------------------------------------------------------------------------- -BS_SteamUGC%() :"_BS_SteamUGC@0" -BS_SteamGameServerUGC%() :"_BS_SteamGameServerUGC@0" -; Todo +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UGC ------------------------------------------------------------------------- +BS_SteamUGC%() :"_BS_SteamUGC@0" +BS_SteamGameServerUGC%() :"_BS_SteamGameServerUGC@0" +; Todo diff --git a/Resources/Decls/BlitzSteam_SteamUnifiedMessages.decls b/Resources/Decls/BlitzSteam_SteamUnifiedMessages.decls index 4d29356..84e4d38 100644 --- a/Resources/Decls/BlitzSteam_SteamUnifiedMessages.decls +++ b/Resources/Decls/BlitzSteam_SteamUnifiedMessages.decls @@ -1,20 +1,20 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; UnifiedMessages ------------------------------------------------------------- -BS_SteamUnifiedMessages%() :"_BS_SteamUnifiedMessages@0" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UnifiedMessages ------------------------------------------------------------- +BS_SteamUnifiedMessages%() :"_BS_SteamUnifiedMessages@0" diff --git a/Resources/Decls/BlitzSteam_SteamUser.decls b/Resources/Decls/BlitzSteam_SteamUser.decls index d51d81e..54037e4 100644 --- a/Resources/Decls/BlitzSteam_SteamUser.decls +++ b/Resources/Decls/BlitzSteam_SteamUser.decls @@ -1,49 +1,49 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; User ------------------------------------------------------------------------ -BS_SteamUser%() :"_BS_SteamUser@0" -BS_ISteamUser_GetHSteamUser%(pThis%) :"_BS_ISteamUser_GetHSteamUser@4" -BS_ISteamUser_IsLoggedOn%(pThis%) :"_BS_ISteamUser_IsLoggedOn@4" -BS_ISteamUser_GetSteamID%(pThis%) :"_BS_ISteamUser_GetSteamID@4" -BS_ISteamUser_InitiateGameConnection%(pThis%, pAuthBlob*, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" -BS_ISteamUser_InitiateGameConnectionEx%(pThis%, pAuthBlob%, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" -BS_ISteamUser_TerminateGameConnection(pThis%, iIp%, sPort%) :"_BS_ISteamUser_TerminateGameConnection@12" -BS_ISteamUser_TrackAppUsageEvent(pThis%, iAppId%, EAppUsageEvent%, cExtraInfo$) :"_BS_ISteamUser_TrackAppUsageEvent@16" -BS_ISteamUser_GetUserDataFolder%(pThis%, pBuffer*, iBufferSize%) :"_BS_ISteamUser_GetUserDataFolder@12" -BS_ISteamUser_StartVoiceRecording(pThis%) :"_BS_ISteamUser_StartVoiceRecording@4" -BS_ISteamUser_StopVoiceRecording(pThis%) :"_BS_ISteamUser_StopVoiceRecording@4" -BS_ISteamUser_GetAvailableVoice%(pThis%, pCompressed*, pUncompressed*, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" -BS_ISteamUser_GetAvailableVoiceEx%(pThis%, pCompressed%, pUncompressed%, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" -BS_ISteamUser_GetVoice%(pThis%, bCompressed%, pCompressed*, iCompressedSize%, piCompressedBytesWritten*, bUncompressed%, pUncompressed*, iUncompressedSize%, piUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_GetVoice@36" -BS_ISteamUser_GetVoiceEx%(pThisEx%, bCompressed%, pCompressed%, iCompressedSize%, piCompressedBytesWritten%, bUncompressed%, pUncompressed%, iUncompressedSize%, piUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_GetVoice@36" -BS_ISteamUser_DecompressVoice(pThis%, pCompressed*, iCompressedSize%, pUncompressed*, iUncompressedSize%, iUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" -BS_ISteamUser_DecompressVoiceEx(pThis%, pCompressed*, iCompressedSize%, pUncompressed%, iUncompressedSize%, iUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" -BS_ISteamUser_GetVoiceOptimalSampleRate%(pThis%) :"_BS_ISteamUser_GetVoiceOptimalSampleRate@4" -BS_ISteamUser_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetAuthSessionTicket@12" -BS_ISteamUser_BeginAuthSession%(pThis%, pAuthTicket*, iAuthTicketSize%, lSteamId%):"_BS_ISteamUser_BeginAuthSession@16" -BS_ISteamUser_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamUser_EndAuthSession@8" -BS_ISteamUser_CancelAuthTicket(pThis%, hAuthTicket%) :"_BS_ISteamUser_CancelAuthTicket@8" -BS_ISteamUser_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamUser_UserHasLicenseForApp@12" -BS_ISteamUser_IsBehindNAT%(pThis%) :"_BS_ISteamUser_IsBehindNAT@4" -BS_ISteamUser_AdvertiseGame%(pThis%, lSteamId%, iIp%, sPort%) :"_BS_ISteamUser_AdvertiseGame@16" -BS_ISteamUser_RequestEncryptedAppTicket%(pThis%, pData*, iDataSize%) :"_BS_ISteamUser_RequestEncryptedAppTicket@12" -BS_ISteamUser_GetEncryptedAppTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetEncryptedAppTicket@16" -BS_ISteamUser_GetGameBadgeLevel%(pThis%, iSeries%, bFoil%) :"_BS_ISteamUser_GetGameBadgeLevel@12" -BS_ISteamUser_GetPlayerSteamLevel%(pThis%) :"_BS_ISteamUser_GetPlayerSteamLevel@4" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; User ------------------------------------------------------------------------ +BS_SteamUser%() :"_BS_SteamUser@0" +BS_ISteamUser_GetHSteamUser%(pThis%) :"_BS_ISteamUser_GetHSteamUser@4" +BS_ISteamUser_IsLoggedOn%(pThis%) :"_BS_ISteamUser_IsLoggedOn@4" +BS_ISteamUser_GetSteamID%(pThis%) :"_BS_ISteamUser_GetSteamID@4" +BS_ISteamUser_InitiateGameConnection%(pThis%, pAuthBlob*, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" +BS_ISteamUser_InitiateGameConnectionEx%(pThis%, pAuthBlob%, iAuthBlobSize%, lSteamId%, iIp%, sPort%, bSecure%):"_BS_ISteamUser_InitiateGameConnection@28" +BS_ISteamUser_TerminateGameConnection(pThis%, iIp%, sPort%) :"_BS_ISteamUser_TerminateGameConnection@12" +BS_ISteamUser_TrackAppUsageEvent(pThis%, iAppId%, EAppUsageEvent%, cExtraInfo$) :"_BS_ISteamUser_TrackAppUsageEvent@16" +BS_ISteamUser_GetUserDataFolder%(pThis%, pBuffer*, iBufferSize%) :"_BS_ISteamUser_GetUserDataFolder@12" +BS_ISteamUser_StartVoiceRecording(pThis%) :"_BS_ISteamUser_StartVoiceRecording@4" +BS_ISteamUser_StopVoiceRecording(pThis%) :"_BS_ISteamUser_StopVoiceRecording@4" +BS_ISteamUser_GetAvailableVoice%(pThis%, pCompressed*, pUncompressed*, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" +BS_ISteamUser_GetAvailableVoiceEx%(pThis%, pCompressed%, pUncompressed%, nDesiredSampleRate%):"_BS_ISteamUser_GetAvailableVoice@16" +BS_ISteamUser_GetVoice%(pThis%, bCompressed%, pCompressed*, iCompressedSize%, piCompressedBytesWritten*, bUncompressed%, pUncompressed*, iUncompressedSize%, piUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_GetVoice@36" +BS_ISteamUser_GetVoiceEx%(pThisEx%, bCompressed%, pCompressed%, iCompressedSize%, piCompressedBytesWritten%, bUncompressed%, pUncompressed%, iUncompressedSize%, piUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_GetVoice@36" +BS_ISteamUser_DecompressVoice(pThis%, pCompressed*, iCompressedSize%, pUncompressed*, iUncompressedSize%, iUncompressedBytesWritten*, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" +BS_ISteamUser_DecompressVoiceEx(pThis%, pCompressed*, iCompressedSize%, pUncompressed%, iUncompressedSize%, iUncompressedBytesWritten%, iSampleRate%):"_BS_ISteamUser_DecompressVoice@28" +BS_ISteamUser_GetVoiceOptimalSampleRate%(pThis%) :"_BS_ISteamUser_GetVoiceOptimalSampleRate@4" +BS_ISteamUser_GetAuthSessionTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetAuthSessionTicket@16" +BS_ISteamUser_BeginAuthSession%(pThis%, pAuthTicket*, iAuthTicketSize%, lSteamId%):"_BS_ISteamUser_BeginAuthSession@16" +BS_ISteamUser_EndAuthSession(pThis%, lSteamId%) :"_BS_ISteamUser_EndAuthSession@8" +BS_ISteamUser_CancelAuthTicket(pThis%, hAuthTicket%) :"_BS_ISteamUser_CancelAuthTicket@8" +BS_ISteamUser_UserHasLicenseForApp%(pThis%, lSteamId%, iAppId%) :"_BS_ISteamUser_UserHasLicenseForApp@12" +BS_ISteamUser_IsBehindNAT%(pThis%) :"_BS_ISteamUser_IsBehindNAT@4" +BS_ISteamUser_AdvertiseGame%(pThis%, lSteamId%, iIp%, sPort%) :"_BS_ISteamUser_AdvertiseGame@16" +BS_ISteamUser_RequestEncryptedAppTicket%(pThis%, pData*, iDataSize%) :"_BS_ISteamUser_RequestEncryptedAppTicket@12" +BS_ISteamUser_GetEncryptedAppTicket%(pThis%, pTicket*, iTicketSize%, piTicketSize*):"_BS_ISteamUser_GetEncryptedAppTicket@16" +BS_ISteamUser_GetGameBadgeLevel%(pThis%, iSeries%, bFoil%) :"_BS_ISteamUser_GetGameBadgeLevel@12" +BS_ISteamUser_GetPlayerSteamLevel%(pThis%) :"_BS_ISteamUser_GetPlayerSteamLevel@4" BS_ISteamUser_RequestStoreAuthURL%(pThis%, cRedirectUrl$) :"_BS_ISteamUser_RequestStoreAuthURL@8" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamUserStats.decls b/Resources/Decls/BlitzSteam_SteamUserStats.decls index 140c251..8f04e41 100644 --- a/Resources/Decls/BlitzSteam_SteamUserStats.decls +++ b/Resources/Decls/BlitzSteam_SteamUserStats.decls @@ -1,77 +1,77 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; UserStats ------------------------------------------------------------------- -BS_UserStats%() :"_BS_UserStats@0" -BS_UserStats_RequestCurrentStats%(pThis%) :"_BS_UserStats_RequestCurrentStats@4" -BS_UserStats_GetStat%(pThis%, cName$, pData*) :"_BS_UserStats_GetStat@12" -BS_UserStats_GetStatEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStat@12" -BS_UserStats_GetStatF%(pThis%, cName$, pData*) :"_BS_UserStats_GetStatF@12" -BS_UserStats_GetStatFEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStatF@12" -BS_UserStats_SetStat%(pThis%, cName$, pData%) :"_BS_UserStats_SetStat@12" -BS_UserStats_SetStatF%(pThis%, cName$, pData#) :"_BS_UserStats_SetStatF@12" -BS_UserStats_UpdateAvgRateStat%(pThis%, cName$, fCountThisSession#, dSessionLength%):"_BS_UserStats_UpdateAvgRateStat@16" -BS_UserStats_GetAchievement%(pThis%, cName$, pbAchieved*) :"_BS_UserStats_GetAchievement@12" -BS_UserStats_GetAchievementEx%(pThis%, cName$, pbAchieved%) :"_BS_UserStats_GetAchievement@12" -BS_UserStats_SetAchievement%(pThis%, cName$) :"_BS_UserStats_SetAchievement@8" -BS_UserStats_ClearAchievement%(pThis%, cName$) :"_BS_UserStats_ClearAchievement@8" -BS_UserStats_GetAchievementAndUnlockTime%(pThis%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetAchievementAndUnlockTime@16" -BS_UserStats_GetAchievementAndUnlockTimeEx%(pThis%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetAchievementAndUnlockTime@16" -BS_UserStats_StoreStats%(pThis%) :"_BS_UserStats_StoreStats@4" -BS_UserStats_GetAchievementIcon%(pThis%, cName$) :"_BS_UserStats_GetAchievementIcon@8" -BS_UserStats_GetAchievementDisplayAttribute$(pThis%, cName$, cKey$) :"_BS_UserStats_GetAchievementDisplayAttribute@12" -BS_UserStats_IndicateAchievementProgress%(pThis%, cName$, iProgress%, iMaxProgress%):"_BS_UserStats_IndicateAchievementProgress@16" -BS_UserStats_GetNumAchievements%(pThis%) :"_BS_UserStats_GetNumAchievements@4" -BS_UserStats_GetAchievementName$(pThis%, iAchievement%) :"_BS_UserStats_GetAchievementName@8" -BS_UserStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_UserStats_RequestUserStats@8" -BS_UserStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStat@16" -BS_UserStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStat@16" -BS_UserStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStatF@16" -BS_UserStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStatF@16" -BS_UserStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*) :"_BS_UserStats_GetUserAchievement@16" -BS_UserStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%) :"_BS_UserStats_GetUserAchievement@16" -BS_UserStats_GetUserAchievementAndUnlockTime%(pThis%, lSteamId%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" -BS_UserStats_GetUserAchievementAndUnlockTimeEx%(pThis%, lSteamId%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" -BS_UserStats_ResetAllStats%(pThis%, bAchievementsToo%) :"_BS_UserStats_ResetAllStats@8" -BS_UserStats_FindOrCreateLeaderboard%(pThis%, cLeaderboardName$, eLeaderboardSortMethod%, eLeaderboardDisplayType%):"_BS_UserStats_FindOrCreateLeaderboard@16" -BS_UserStats_FindLeaderboard%(pThis%, cLeaderboardName$) :"_BS_UserStats_FindLeaderboard@8" -BS_UserStats_GetLeaderboardName$(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardName@8" -BS_UserStats_GetLeaderboardEntryCount%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardEntryCount@8" -BS_UserStats_GetLeaderboardSortMethod%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardSortMethod@8" -BS_UserStats_GetLeaderboardDisplayType%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardDisplayType@8" -BS_UserStats_DownloadLeaderboardEntries%(pThis%, hSteamLeaderboard%, eLeaderboardDataRequest%, iRangeStart%, iRangeEnd%):"_BS_UserStats_DownloadLeaderboardEntries@20" -BS_UserStats_DownloadLeaderboardEntriesForUsers%(pThis%, hSteamLeaderboard%, plUsers*, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" -BS_UserStats_DownloadLeaderboardEntriesForUsersEx%(pThis%, hSteamLeaderboard%, plUsers%, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" -BS_UserStats_GetDownloadedLeaderboardEntry%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry*, pDetails*, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" -BS_UserStats_GetDownloadedLeaderboardEntryEx%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry%, pDetails%, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" -BS_UserStats_UploadLeaderboardScore%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails*, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" -BS_UserStats_UploadLeaderboardScoreEx%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails%, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" -BS_UserStats_AttachLeaderboardUGC%(pThis%, hSteamLeaderboard%, hUGC%) :"_BS_UserStats_AttachLeaderboardUGC@12" -BS_UserStats_GetNumberOfCurrentPlayers%(pThis%) :"_BS_UserStats_GetNumberOfCurrentPlayers@4" -BS_UserStats_RequestGlobalAchievementPercentages%(pThis%) :"_BS_UserStats_RequestGlobalAchievementPercentages@4" -BS_UserStats_GetMostAchievedAchievementInfo%(pThis%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetMostAchievedAchievementInfo@20" -BS_UserStats_GetMostAchievedAchievementInfoEx%(pThis%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetMostAchievedAchievementInfo@20" -BS_UserStats_GetNextMostAchievedAchievementInfo%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" -BS_UserStats_GetNextMostAchievedAchievementInfoEx%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" -BS_UserStats_GetAchievementAchievedPercent%(pThis%, cName$, pfPercent*) :"_BS_UserStats_GetAchievementAchievedPercent@12" -BS_UserStats_GetAchievementAchievedPercentEx%(pThis%, cName$, pfPercent%) :"_BS_UserStats_GetAchievementAchievedPercent@12" -BS_UserStats_RequestGlobalStats%(pThis%, iHistoryDays%) :"_BS_UserStats_RequestGlobalStats@8" -BS_UserStats_GetGlobalStatL%(pThis, cStatName$, plData%) :"_BS_UserStats_GetGlobalStatL@12" -BS_UserStats_GetGlobalStatD%(pThis, cStatName$, pdData%) :"_BS_UserStats_GetGlobalStatD@12" -BS_UserStats_GetGlobalStatHistoryL%(pThis, cStatName$, plDataArray%, iDataSize%):"BS_UserStats_GetGlobalStatHistoryL@16" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; UserStats ------------------------------------------------------------------- +BS_UserStats%() :"_BS_UserStats@0" +BS_UserStats_RequestCurrentStats%(pThis%) :"_BS_UserStats_RequestCurrentStats@4" +BS_UserStats_GetStat%(pThis%, cName$, pData*) :"_BS_UserStats_GetStat@12" +BS_UserStats_GetStatEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStat@12" +BS_UserStats_GetStatF%(pThis%, cName$, pData*) :"_BS_UserStats_GetStatF@12" +BS_UserStats_GetStatFEx%(pThis%, cName$, pData%) :"_BS_UserStats_GetStatF@12" +BS_UserStats_SetStat%(pThis%, cName$, pData%) :"_BS_UserStats_SetStat@12" +BS_UserStats_SetStatF%(pThis%, cName$, pData#) :"_BS_UserStats_SetStatF@12" +BS_UserStats_UpdateAvgRateStat%(pThis%, cName$, fCountThisSession#, dSessionLength%):"_BS_UserStats_UpdateAvgRateStat@16" +BS_UserStats_GetAchievement%(pThis%, cName$, pbAchieved*) :"_BS_UserStats_GetAchievement@12" +BS_UserStats_GetAchievementEx%(pThis%, cName$, pbAchieved%) :"_BS_UserStats_GetAchievement@12" +BS_UserStats_SetAchievement%(pThis%, cName$) :"_BS_UserStats_SetAchievement@8" +BS_UserStats_ClearAchievement%(pThis%, cName$) :"_BS_UserStats_ClearAchievement@8" +BS_UserStats_GetAchievementAndUnlockTime%(pThis%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetAchievementAndUnlockTime@16" +BS_UserStats_GetAchievementAndUnlockTimeEx%(pThis%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetAchievementAndUnlockTime@16" +BS_UserStats_StoreStats%(pThis%) :"_BS_UserStats_StoreStats@4" +BS_UserStats_GetAchievementIcon%(pThis%, cName$) :"_BS_UserStats_GetAchievementIcon@8" +BS_UserStats_GetAchievementDisplayAttribute$(pThis%, cName$, cKey$) :"_BS_UserStats_GetAchievementDisplayAttribute@12" +BS_UserStats_IndicateAchievementProgress%(pThis%, cName$, iProgress%, iMaxProgress%):"_BS_UserStats_IndicateAchievementProgress@16" +BS_UserStats_GetNumAchievements%(pThis%) :"_BS_UserStats_GetNumAchievements@4" +BS_UserStats_GetAchievementName$(pThis%, iAchievement%) :"_BS_UserStats_GetAchievementName@8" +BS_UserStats_RequestUserStats%(pThis%, lSteamId%) :"_BS_UserStats_RequestUserStats@8" +BS_UserStats_GetUserStat%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStat@16" +BS_UserStats_GetUserStatEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStat@16" +BS_UserStats_GetUserStatF%(pThis%, lSteamId%, cName$, pData*) :"_BS_UserStats_GetUserStatF@16" +BS_UserStats_GetUserStatFEx%(pThis%, lSteamId%, cName$, pData%) :"_BS_UserStats_GetUserStatF@16" +BS_UserStats_GetUserAchievement%(pThis%, lSteamId%, cName$, pbAchieved*) :"_BS_UserStats_GetUserAchievement@16" +BS_UserStats_GetUserAchievementEx%(pThis%, lSteamId%, cName$, pbAchieved%) :"_BS_UserStats_GetUserAchievement@16" +BS_UserStats_GetUserAchievementAndUnlockTime%(pThis%, lSteamId%, cName$, pbAchieved*, piUnlockTime*):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" +BS_UserStats_GetUserAchievementAndUnlockTimeEx%(pThis%, lSteamId%, cName$, pbAchieved%, piUnlockTime%):"_BS_UserStats_GetUserAchievementAndUnlockTime@20" +BS_UserStats_ResetAllStats%(pThis%, bAchievementsToo%) :"_BS_UserStats_ResetAllStats@8" +BS_UserStats_FindOrCreateLeaderboard%(pThis%, cLeaderboardName$, eLeaderboardSortMethod%, eLeaderboardDisplayType%):"_BS_UserStats_FindOrCreateLeaderboard@16" +BS_UserStats_FindLeaderboard%(pThis%, cLeaderboardName$) :"_BS_UserStats_FindLeaderboard@8" +BS_UserStats_GetLeaderboardName$(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardName@8" +BS_UserStats_GetLeaderboardEntryCount%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardEntryCount@8" +BS_UserStats_GetLeaderboardSortMethod%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardSortMethod@8" +BS_UserStats_GetLeaderboardDisplayType%(pThis%, hSteamLeaderboard%) :"_BS_UserStats_GetLeaderboardDisplayType@8" +BS_UserStats_DownloadLeaderboardEntries%(pThis%, hSteamLeaderboard%, eLeaderboardDataRequest%, iRangeStart%, iRangeEnd%):"_BS_UserStats_DownloadLeaderboardEntries@20" +BS_UserStats_DownloadLeaderboardEntriesForUsers%(pThis%, hSteamLeaderboard%, plUsers*, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" +BS_UserStats_DownloadLeaderboardEntriesForUsersEx%(pThis%, hSteamLeaderboard%, plUsers%, iUserCount%):"_BS_UserStats_DownloadLeaderboardEntriesForUsers@16" +BS_UserStats_GetDownloadedLeaderboardEntry%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry*, pDetails*, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" +BS_UserStats_GetDownloadedLeaderboardEntryEx%(lpSteamUsers%, hSteamLeaderboardEntries%, iIndex%, pLeaderboardEntry%, pDetails%, iDetailsMax%):"_BS_UserStats_GetDownloadedLeaderboardEntry@24" +BS_UserStats_UploadLeaderboardScore%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails*, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" +BS_UserStats_UploadLeaderboardScoreEx%(pThis%, hSteamLeaderboard%, eLeaderboardUploadScoreMethod%, iScore%, pScoreDetails%, iScoreDetailsCount%):"_BS_UserStats_UploadLeaderboardScore@24" +BS_UserStats_AttachLeaderboardUGC%(pThis%, hSteamLeaderboard%, hUGC%) :"_BS_UserStats_AttachLeaderboardUGC@12" +BS_UserStats_GetNumberOfCurrentPlayers%(pThis%) :"_BS_UserStats_GetNumberOfCurrentPlayers@4" +BS_UserStats_RequestGlobalAchievementPercentages%(pThis%) :"_BS_UserStats_RequestGlobalAchievementPercentages@4" +BS_UserStats_GetMostAchievedAchievementInfo%(pThis%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetMostAchievedAchievementInfo@20" +BS_UserStats_GetMostAchievedAchievementInfoEx%(pThis%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetMostAchievedAchievementInfo@20" +BS_UserStats_GetNextMostAchievedAchievementInfo%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent*, pbAchieved*):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" +BS_UserStats_GetNextMostAchievedAchievementInfoEx%(pThis%, iIteratorPrevious%, cName$, iNameLength%, pfPercent%, pbAchieved%):"_BS_UserStats_GetNextMostAchievedAchievementInfo@24" +BS_UserStats_GetAchievementAchievedPercent%(pThis%, cName$, pfPercent*) :"_BS_UserStats_GetAchievementAchievedPercent@12" +BS_UserStats_GetAchievementAchievedPercentEx%(pThis%, cName$, pfPercent%) :"_BS_UserStats_GetAchievementAchievedPercent@12" +BS_UserStats_RequestGlobalStats%(pThis%, iHistoryDays%) :"_BS_UserStats_RequestGlobalStats@8" +BS_UserStats_GetGlobalStatL%(pThis, cStatName$, plData%) :"_BS_UserStats_GetGlobalStatL@12" +BS_UserStats_GetGlobalStatD%(pThis, cStatName$, pdData%) :"_BS_UserStats_GetGlobalStatD@12" +BS_UserStats_GetGlobalStatHistoryL%(pThis, cStatName$, plDataArray%, iDataSize%):"BS_UserStats_GetGlobalStatHistoryL@16" BS_UserStats_GetGlobalStatHistoryD%(pThis, cStatName$, pdDataArray%, iDataSize%):"BS_UserStats_GetGlobalStatHistoryD@16" \ No newline at end of file diff --git a/Resources/Decls/BlitzSteam_SteamUtils.decls b/Resources/Decls/BlitzSteam_SteamUtils.decls index 400869f..25c78ab 100644 --- a/Resources/Decls/BlitzSteam_SteamUtils.decls +++ b/Resources/Decls/BlitzSteam_SteamUtils.decls @@ -1,21 +1,21 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Utils ----------------------------------------------------------------------- -BS_SteamUtils%() :"_BS_SteamUtils@0" -BS_SteamGameServerUtils%() :"_BS_SteamGameServerUtils@0" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Utils ----------------------------------------------------------------------- +BS_SteamUtils%() :"_BS_SteamUtils@0" +BS_SteamGameServerUtils%() :"_BS_SteamGameServerUtils@0" diff --git a/Resources/Decls/BlitzSteam_SteamVideo.decls b/Resources/Decls/BlitzSteam_SteamVideo.decls index ff9c34d..f86493c 100644 --- a/Resources/Decls/BlitzSteam_SteamVideo.decls +++ b/Resources/Decls/BlitzSteam_SteamVideo.decls @@ -1,20 +1,20 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -.lib "BlitzSteam.dll" - -; Utils ----------------------------------------------------------------------- -BS_SteamVideo%() :"_BS_SteamVideo@0" +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +.lib "BlitzSteam.dll" + +; Utils ----------------------------------------------------------------------- +BS_SteamVideo%() :"_BS_SteamVideo@0" diff --git a/Resources/Examples/SteamAPI_Example.bb b/Resources/Examples/SteamAPI_Example.bb index a4fb7bc..42cf291 100644 --- a/Resources/Examples/SteamAPI_Example.bb +++ b/Resources/Examples/SteamAPI_Example.bb @@ -1,66 +1,66 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -Include "../BlitzSteam.bb" - -; Initialize Steam before your next call to Graphics. -If BS_SteamAPI_Init() = False Then - RuntimeError "Steam: Failed to initialize!" -EndIf - -Const FPS = 30 -Const FPS_MULT# = 1.0 / FPS - -; Demo Scene -Graphics3D 1024, 768, 32, 2 -SetBuffer BackBuffer() - -Local demoTimer = CreateTimer(FPS) - -Local demoRoot = CreatePivot() - -Local demoCameraRoot = CreatePivot(demoRoot) -Local demoCamera = CreateCamera(demoCameraRoot) -MoveEntity demoCamera, 0, 0, -10 - -Local demoCube = CreateCube(demoRoot) - -Local EndGame = False -Repeat - Cls - - ;! Update - ; End on Escape - EndGame = KeyHit(1) - - TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT - - ;! Render 3D - RenderWorld - - ;! Render 2D - Text 0, 0, "Escape to Quit" - - ;! Update Window - Flip 0 - WaitTimer(demoTimer) -Until EndGame = True - -; Shut down Steam as the last action of your program. -BS_SteamAPI_Shutdown() -End -;~IDEal Editor Parameters: +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" + +; Initialize Steam before your next call to Graphics. +If BS_SteamAPI_Init() = False Then + RuntimeError "Steam: Failed to initialize!" +EndIf + +Const FPS = 30 +Const FPS_MULT# = 1.0 / FPS + +; Demo Scene +Graphics3D 1024, 768, 32, 2 +SetBuffer BackBuffer() + +Local demoTimer = CreateTimer(FPS) + +Local demoRoot = CreatePivot() + +Local demoCameraRoot = CreatePivot(demoRoot) +Local demoCamera = CreateCamera(demoCameraRoot) +MoveEntity demoCamera, 0, 0, -10 + +Local demoCube = CreateCube(demoRoot) + +Local EndGame = False +Repeat + Cls + + ;! Update + ; End on Escape + EndGame = KeyHit(1) + + TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT + + ;! Render 3D + RenderWorld + + ;! Render 2D + Text 0, 0, "Escape to Quit" + + ;! Update Window + Flip 0 + WaitTimer(demoTimer) +Until EndGame = True + +; Shut down Steam as the last action of your program. +BS_SteamAPI_Shutdown() +End +;~IDEal Editor Parameters: ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Examples/SteamAppList_Example.bb b/Resources/Examples/SteamAppList_Example.bb index 3f4b8b4..121d855 100644 --- a/Resources/Examples/SteamAppList_Example.bb +++ b/Resources/Examples/SteamAppList_Example.bb @@ -1,128 +1,128 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -Include "../BlitzSteam.bb" - -; Initialize Steam before your next call to Graphics. -If BS_SteamAPI_Init() = False Then - RuntimeError "Steam: Failed to initialize!" -EndIf - -Const FPS = 30 -Const FPS_MULT# = 1.0 / FPS - -; Demo Scene -Graphics3D 1024, 768, 32, 2 -SetBuffer BackBuffer() - -Local demoTimer = CreateTimer(FPS) - -Local demoRoot = CreatePivot() - -Local demoCameraRoot = CreatePivot(demoRoot) -Local demoCamera = CreateCamera(demoCameraRoot) -MoveEntity demoCamera, 0, 0, -10 - -Local demoCube = CreateCube(demoRoot) - -; SteamAppList stuff -Type SteamAppList - Field AppId% - Field Name$ - Field InstallDir$ - Field BuildId% -End Type -Global SteamAppList_Count% - -Function SteamAppList_Fill() - SteamAppList_Count = BS_ISteamAppList_GetNumInstalledApps(BS_SteamAppList()) - - Local Buffer = CreateBank(4 * SteamAppList_Count) - Local AppNameBuffer = CreateBank(1024) - Local PathBuffer = CreateBank(260) - - Local AppIdCount = BS_ISteamAppList_GetInstalledApps(BS_SteamAppList(), Buffer, SteamAppList_Count) - Delete Each SteamAppList - For Index = 0 To AppIdCount - 1 - Local AppId = PeekInt(Buffer, Index*4) - - Local SAL.SteamAppList = New SteamAppList - SAL\AppId = AppId - Local AppNameLen = BS_ISteamAppList_GetAppName(BS_SteamAppList(), AppId, AppNameBuffer, 1024) - SAL\Name = PeekCString(AppNameBuffer, 0, AppNameLen) - Local PathLen = BS_ISteamAppList_GetAppInstallDir(BS_SteamAppList(), AppId, PathBuffer, 260) - SAL\InstallDir = PeekCString(PathBuffer, 0, PathLen) - SAL\BuildId = BS_ISteamAppList_GetAppBuildId(BS_SteamAppList(), AppId) - Next - - FreeBank AppNameBuffer - FreeBank PathBuffer - FreeBank Buffer -End Function - -Function PeekCString$(Bank, Offset=0, Length=-1) - Local Out$ = "", Pos = Offset - While Abs(Length) > 0 - Length = Length - 1 - - Local by = PeekByte(Bank, Pos) - If by = 0 Then - Length = 0 - Else - Out = Out + Chr(by) - EndIf - - Pos = Pos + 1 - Wend - Return Out -End Function - -SteamAppList_Fill() - -; Main Loop -Local EndGame = False -Repeat - Cls - - ;! Update - ; End on Escape - EndGame = KeyHit(1) - - TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT - - ;! Render 3D - RenderWorld - - ;! Render 2D - Text 0, 0, "Escape to Quit" - - Text 0,15, "Installed Apps: " + SteamAppList_Count - Local SAL.SteamAppList, Index = 0 - For SAL.SteamAppList = Each SteamAppList - Index = Index + 1 - Text 0, 30 + Index* 15, RSet(SAL\AppId, 6) + "/" + RSet(SAL\BuildId, 8) + ": " + SAL\Name + " (Installed: '" + SAL\InstallDir + "')" - Next - - ;! Update Window - Flip 0 - WaitTimer(demoTimer) -Until EndGame = True - -; Shut down Steam as the last action of your program. -BS_SteamAPI_Shutdown() -End -;~IDEal Editor Parameters: +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" + +; Initialize Steam before your next call to Graphics. +If BS_SteamAPI_Init() = False Then + RuntimeError "Steam: Failed to initialize!" +EndIf + +Const FPS = 30 +Const FPS_MULT# = 1.0 / FPS + +; Demo Scene +Graphics3D 1024, 768, 32, 2 +SetBuffer BackBuffer() + +Local demoTimer = CreateTimer(FPS) + +Local demoRoot = CreatePivot() + +Local demoCameraRoot = CreatePivot(demoRoot) +Local demoCamera = CreateCamera(demoCameraRoot) +MoveEntity demoCamera, 0, 0, -10 + +Local demoCube = CreateCube(demoRoot) + +; SteamAppList stuff +Type SteamAppList + Field AppId% + Field Name$ + Field InstallDir$ + Field BuildId% +End Type +Global SteamAppList_Count% + +Function SteamAppList_Fill() + SteamAppList_Count = BS_ISteamAppList_GetNumInstalledApps(BS_SteamAppList()) + + Local Buffer = CreateBank(4 * SteamAppList_Count) + Local AppNameBuffer = CreateBank(1024) + Local PathBuffer = CreateBank(260) + + Local AppIdCount = BS_ISteamAppList_GetInstalledApps(BS_SteamAppList(), Buffer, SteamAppList_Count) + Delete Each SteamAppList + For Index = 0 To AppIdCount - 1 + Local AppId = PeekInt(Buffer, Index*4) + + Local SAL.SteamAppList = New SteamAppList + SAL\AppId = AppId + Local AppNameLen = BS_ISteamAppList_GetAppName(BS_SteamAppList(), AppId, AppNameBuffer, 1024) + SAL\Name = PeekCString(AppNameBuffer, 0, AppNameLen) + Local PathLen = BS_ISteamAppList_GetAppInstallDir(BS_SteamAppList(), AppId, PathBuffer, 260) + SAL\InstallDir = PeekCString(PathBuffer, 0, PathLen) + SAL\BuildId = BS_ISteamAppList_GetAppBuildId(BS_SteamAppList(), AppId) + Next + + FreeBank AppNameBuffer + FreeBank PathBuffer + FreeBank Buffer +End Function + +Function PeekCString$(Bank, Offset=0, Length=-1) + Local Out$ = "", Pos = Offset + While Abs(Length) > 0 + Length = Length - 1 + + Local by = PeekByte(Bank, Pos) + If by = 0 Then + Length = 0 + Else + Out = Out + Chr(by) + EndIf + + Pos = Pos + 1 + Wend + Return Out +End Function + +SteamAppList_Fill() + +; Main Loop +Local EndGame = False +Repeat + Cls + + ;! Update + ; End on Escape + EndGame = KeyHit(1) + + TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT + + ;! Render 3D + RenderWorld + + ;! Render 2D + Text 0, 0, "Escape to Quit" + + Text 0,15, "Installed Apps: " + SteamAppList_Count + Local SAL.SteamAppList, Index = 0 + For SAL.SteamAppList = Each SteamAppList + Index = Index + 1 + Text 0, 30 + Index* 15, RSet(SAL\AppId, 6) + "/" + RSet(SAL\BuildId, 8) + ": " + SAL\Name + " (Installed: '" + SAL\InstallDir + "')" + Next + + ;! Update Window + Flip 0 + WaitTimer(demoTimer) +Until EndGame = True + +; Shut down Steam as the last action of your program. +BS_SteamAPI_Shutdown() +End +;~IDEal Editor Parameters: ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Examples/SteamApps_Example.bb b/Resources/Examples/SteamApps_Example.bb index cefcbb1..445f882 100644 --- a/Resources/Examples/SteamApps_Example.bb +++ b/Resources/Examples/SteamApps_Example.bb @@ -1,179 +1,179 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -Include "../BlitzSteam.bb" - -; Initialize Steam before your next call to Graphics. -If BS_SteamAPI_Init() = False Then - RuntimeError "Steam: Failed to initialize!" -EndIf - -Const FPS = 30 -Const FPS_MULT# = 1.0 / FPS - -; Demo Scene -Graphics3D 1024, 768, 32, 2 -SetBuffer BackBuffer() - -Local demoTimer = CreateTimer(FPS) -Local demoRoot = CreatePivot() -Local demoCameraRoot = CreatePivot(demoRoot) -Local demoCamera = CreateCamera(demoCameraRoot) -MoveEntity demoCamera, 0, 0, -10 -Local demoCube = CreateCube(demoRoot) - -; SteamApps Stuff -Type SteamAppsDLC - Field Id% - Field Available% - Field Name$ -End Type -Global SteamAppsDLC_Count - -Function SteamAppsDLC_Fill() - Local IdBuffer = CreateBank(4) - Local AvailableBuffer = CreateBank(4) - Local NameBuffer = CreateBank(1024) - - SteamAppsDLC_Count = BS_ISteamApps_GetDLCCount(BS_SteamApps()) - Delete Each SteamAppsDLC - For Index = 0 To SteamAppsDLC_Count - 1 - If BS_ISteamApps_GetDLCDataByIndex(BS_SteamApps(), Index, IdBuffer, AvailableBuffer, NameBuffer, 1024) - Local SAD.SteamAppsDLC = New SteamAppsDLC - SAD\Id = PeekInt(IdBuffer, 0) - SAD\Available = PeekInt(AvailableBuffer, 0) - SAD\Name = PeekCString(NameBuffer, 0, 1024) - Else - SteamAppsDLC_Count = SteamAppsDLC_Count - 1 - EndIf - Next - - FreeBank NameBuffer - FreeBank AvailableBuffer - FreeBank IdBuffer -End Function - -Type SteamAppsDepots - Field DepotId -End Type -Global SteamAppsDepots_Count - -Function SteamAppsDepots_Fill() - Local DepotsBuffer - ; Exercise: Do this one yourself with the above Type. It's not that hard. -End Function - -Function PeekCString$(Bank, Offset=0, Length=-1) - Local Out$ = "", Pos = Offset - While Abs(Length) > 0 - Length = Length - 1 - - Local by = PeekByte(Bank, Pos) - If by = 0 Then - Length = 0 - Else - Out = Out + Chr(by) - EndIf - - Pos = Pos + 1 - Wend - Return Out -End Function - -Local BetaBuffer = CreateBank(1024) -BS_ISteamApps_GetCurrentBetaName(BS_SteamApps(), BetaBuffer, 1024) -Local Beta$ = PeekCString(BetaBuffer, 0, 1024) -FreeBank BetaBuffer - -Local AppInstallDir$, AppInstallDirBuffer = CreateBank(260) -BS_ISteamApps_GetAppInstallDir(BS_SteamApps(), 480, AppInstallDirBuffer, 260) -AppInstallDir = PeekCString(AppInstallDirBuffer, 0, 260) -FreeBank AppInstallDirBuffer - -Local llOwner = BS_ISteamApps_GetAppOwner(BS_SteamApps()) -Local OwnerId$ = "[U:" + BS_CSteamID_GetAccountInstance(llOwner) + ":" + BS_CSteamID_GetAccountID(llOwner) + "] STEAM_" + (BS_CSteamID_GetEAccountType(llOwner) - 1) + ":" + (BS_CSteamID_GetEUniverse(llOwner) - 1) + ":" + (BS_CSteamID_GetAccountID(llOwner) / 2) -BS_CSteamID_Destroy llOwner - -; Main Loop -Local EndGame = False -Repeat - Cls - - ;! Update - ; End on Escape - EndGame = KeyHit(1) - - TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT - - ;! Render 3D - RenderWorld - - ;! Render 2D - Text 0, 0, "Escape to Quit" - - Text 0, 30, "Is Subscribed? " + BS_ISteamApps_IsSubscribed(BS_SteamApps()) - Text 0, 45, "Is Low Violence? " + BS_ISteamApps_IsLowViolence(BS_SteamApps()) - Text 0, 60, "Is Cybercafe? " + BS_ISteamApps_IsCybercafe(BS_SteamApps()) - Text 0, 75, "Is VAC Banned? " + BS_ISteamApps_IsVACBanned(BS_SteamApps()) - Text 0, 90, "Current Game Language: " + BS_ISteamApps_GetCurrentGameLanguage(BS_SteamApps()) - Text 0,105, "Available Game Languages: " + BS_ISteamApps_GetAvailableGameLanguages(BS_SteamApps()) - Text 0,120, "Is Subscribed App (480)? " + BS_ISteamApps_IsSubscribedApp(BS_SteamApps(), 480) - Text 0,135, "Is DLC (323180) Installed? " + BS_ISteamApps_IsDlcInstalled(BS_SteamApps(), 323180) ; Portal 2 Soundtrack DLC - Text 0,150, "Earliest Purchase Unix Time (480): " + BS_ISteamApps_GetEarliestPurchaseUnixTime(BS_SteamApps(), 480) - Text 0,165, "Is Subscribed from Free Weekend? " + BS_ISteamApps_IsSubscribedFromFreeWeekend(BS_SteamApps()) - Text 0,180, "DLC Count: " + BS_ISteamApps_GetDLCCount(BS_SteamApps()) - Text 0,195, "Current Beta Name: " + Beta - Text 0,210, "App Install Dir: " + AppInstallDir$ - Text 0,225, "Is App Installed (480): " + BS_ISteamApps_IsAppInstalled(BS_SteamApps(), 480) - Text 0,240, "App Owner Id: " + OwnerId - Text 0,255, "App Built Id: " + BS_ISteamApps_GetAppBuildId(BS_SteamApps()) - - ; BS_ISteamApps_GetLanchQueryParam$(BS_SteamApps(), pchKey$) - ; // Returns the associated launch param if the game is run via steam://run///?param1=value1;param2=value2;param3=value3 etc. - ; // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string. - ; // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game, - ; // but it is advised that you not param names beginning with an underscore for your own features. - - ; BS_ISteamApps_MarkContentCorrupt signals steam that game files are corrupt or missing. Forces a validation after quit and before next start. - - ; How To Use: BS_ISteamApps_RequestProofOfPurchaseKey(BS_SteamApps(), nAppId) - ; // Request cd-key for yourself or owned DLC. If you are interested in this - ; // data then make sure you provide us with a list of valid keys to be distributed - ; // to users when they purchase the game, before the game ships. - ; // You'll receive an AppProofOfPurchaseKeyResponse_t callback when - ; // the key is available (which may be immediately). - ; Example (Spacewar) does not have CD-Keys. - - Text 512, 0, "DLCs: " + SteamAppsDLC_Count - Local Index = 0, SAD.SteamAppsDLC - For SAD = Each SteamAppsDLC - Text 512, 15 + Index * 15, SAD\Id + "(" + SAD\Available + "): " + SAD\Name - ; You could install DLCs from the app itself, BS_ISteamApps_InstallDLC, BS_ISteamApps_UninstallDLC - ; BS_ISteamApps_GetDlcDownloadProgress allows you to check the progress, BlitzUtility's LongLong stuff is useful here. - - Index = Index + 1 - Next - - ;! Update Window - Flip 0 - WaitTimer(demoTimer) -Until EndGame = True - -; Shut down Steam as the last action of your program. -BS_SteamAPI_Shutdown() -End -;~IDEal Editor Parameters: +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" + +; Initialize Steam before your next call to Graphics. +If BS_SteamAPI_Init() = False Then + RuntimeError "Steam: Failed to initialize!" +EndIf + +Const FPS = 30 +Const FPS_MULT# = 1.0 / FPS + +; Demo Scene +Graphics3D 1024, 768, 32, 2 +SetBuffer BackBuffer() + +Local demoTimer = CreateTimer(FPS) +Local demoRoot = CreatePivot() +Local demoCameraRoot = CreatePivot(demoRoot) +Local demoCamera = CreateCamera(demoCameraRoot) +MoveEntity demoCamera, 0, 0, -10 +Local demoCube = CreateCube(demoRoot) + +; SteamApps Stuff +Type SteamAppsDLC + Field Id% + Field Available% + Field Name$ +End Type +Global SteamAppsDLC_Count + +Function SteamAppsDLC_Fill() + Local IdBuffer = CreateBank(4) + Local AvailableBuffer = CreateBank(4) + Local NameBuffer = CreateBank(1024) + + SteamAppsDLC_Count = BS_ISteamApps_GetDLCCount(BS_SteamApps()) + Delete Each SteamAppsDLC + For Index = 0 To SteamAppsDLC_Count - 1 + If BS_ISteamApps_GetDLCDataByIndex(BS_SteamApps(), Index, IdBuffer, AvailableBuffer, NameBuffer, 1024) + Local SAD.SteamAppsDLC = New SteamAppsDLC + SAD\Id = PeekInt(IdBuffer, 0) + SAD\Available = PeekInt(AvailableBuffer, 0) + SAD\Name = PeekCString(NameBuffer, 0, 1024) + Else + SteamAppsDLC_Count = SteamAppsDLC_Count - 1 + EndIf + Next + + FreeBank NameBuffer + FreeBank AvailableBuffer + FreeBank IdBuffer +End Function + +Type SteamAppsDepots + Field DepotId +End Type +Global SteamAppsDepots_Count + +Function SteamAppsDepots_Fill() + Local DepotsBuffer + ; Exercise: Do this one yourself with the above Type. It's not that hard. +End Function + +Function PeekCString$(Bank, Offset=0, Length=-1) + Local Out$ = "", Pos = Offset + While Abs(Length) > 0 + Length = Length - 1 + + Local by = PeekByte(Bank, Pos) + If by = 0 Then + Length = 0 + Else + Out = Out + Chr(by) + EndIf + + Pos = Pos + 1 + Wend + Return Out +End Function + +Local BetaBuffer = CreateBank(1024) +BS_ISteamApps_GetCurrentBetaName(BS_SteamApps(), BetaBuffer, 1024) +Local Beta$ = PeekCString(BetaBuffer, 0, 1024) +FreeBank BetaBuffer + +Local AppInstallDir$, AppInstallDirBuffer = CreateBank(260) +BS_ISteamApps_GetAppInstallDir(BS_SteamApps(), 480, AppInstallDirBuffer, 260) +AppInstallDir = PeekCString(AppInstallDirBuffer, 0, 260) +FreeBank AppInstallDirBuffer + +Local llOwner = BS_ISteamApps_GetAppOwner(BS_SteamApps()) +Local OwnerId$ = "[U:" + BS_CSteamID_GetAccountInstance(llOwner) + ":" + BS_CSteamID_GetAccountID(llOwner) + "] STEAM_" + (BS_CSteamID_GetEAccountType(llOwner) - 1) + ":" + (BS_CSteamID_GetEUniverse(llOwner) - 1) + ":" + (BS_CSteamID_GetAccountID(llOwner) / 2) +BS_CSteamID_Destroy llOwner + +; Main Loop +Local EndGame = False +Repeat + Cls + + ;! Update + ; End on Escape + EndGame = KeyHit(1) + + TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT + + ;! Render 3D + RenderWorld + + ;! Render 2D + Text 0, 0, "Escape to Quit" + + Text 0, 30, "Is Subscribed? " + BS_ISteamApps_IsSubscribed(BS_SteamApps()) + Text 0, 45, "Is Low Violence? " + BS_ISteamApps_IsLowViolence(BS_SteamApps()) + Text 0, 60, "Is Cybercafe? " + BS_ISteamApps_IsCybercafe(BS_SteamApps()) + Text 0, 75, "Is VAC Banned? " + BS_ISteamApps_IsVACBanned(BS_SteamApps()) + Text 0, 90, "Current Game Language: " + BS_ISteamApps_GetCurrentGameLanguage(BS_SteamApps()) + Text 0,105, "Available Game Languages: " + BS_ISteamApps_GetAvailableGameLanguages(BS_SteamApps()) + Text 0,120, "Is Subscribed App (480)? " + BS_ISteamApps_IsSubscribedApp(BS_SteamApps(), 480) + Text 0,135, "Is DLC (323180) Installed? " + BS_ISteamApps_IsDlcInstalled(BS_SteamApps(), 323180) ; Portal 2 Soundtrack DLC + Text 0,150, "Earliest Purchase Unix Time (480): " + BS_ISteamApps_GetEarliestPurchaseUnixTime(BS_SteamApps(), 480) + Text 0,165, "Is Subscribed from Free Weekend? " + BS_ISteamApps_IsSubscribedFromFreeWeekend(BS_SteamApps()) + Text 0,180, "DLC Count: " + BS_ISteamApps_GetDLCCount(BS_SteamApps()) + Text 0,195, "Current Beta Name: " + Beta + Text 0,210, "App Install Dir: " + AppInstallDir$ + Text 0,225, "Is App Installed (480): " + BS_ISteamApps_IsAppInstalled(BS_SteamApps(), 480) + Text 0,240, "App Owner Id: " + OwnerId + Text 0,255, "App Built Id: " + BS_ISteamApps_GetAppBuildId(BS_SteamApps()) + + ; BS_ISteamApps_GetLanchQueryParam$(BS_SteamApps(), pchKey$) + ; // Returns the associated launch param if the game is run via steam://run///?param1=value1;param2=value2;param3=value3 etc. + ; // Parameter names starting with the character '@' are reserved for internal use and will always return and empty string. + ; // Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game, + ; // but it is advised that you not param names beginning with an underscore for your own features. + + ; BS_ISteamApps_MarkContentCorrupt signals steam that game files are corrupt or missing. Forces a validation after quit and before next start. + + ; How To Use: BS_ISteamApps_RequestProofOfPurchaseKey(BS_SteamApps(), nAppId) + ; // Request cd-key for yourself or owned DLC. If you are interested in this + ; // data then make sure you provide us with a list of valid keys to be distributed + ; // to users when they purchase the game, before the game ships. + ; // You'll receive an AppProofOfPurchaseKeyResponse_t callback when + ; // the key is available (which may be immediately). + ; Example (Spacewar) does not have CD-Keys. + + Text 512, 0, "DLCs: " + SteamAppsDLC_Count + Local Index = 0, SAD.SteamAppsDLC + For SAD = Each SteamAppsDLC + Text 512, 15 + Index * 15, SAD\Id + "(" + SAD\Available + "): " + SAD\Name + ; You could install DLCs from the app itself, BS_ISteamApps_InstallDLC, BS_ISteamApps_UninstallDLC + ; BS_ISteamApps_GetDlcDownloadProgress allows you to check the progress, BlitzUtility's LongLong stuff is useful here. + + Index = Index + 1 + Next + + ;! Update Window + Flip 0 + WaitTimer(demoTimer) +Until EndGame = True + +; Shut down Steam as the last action of your program. +BS_SteamAPI_Shutdown() +End +;~IDEal Editor Parameters: ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Examples/SteamController_Example.bb b/Resources/Examples/SteamController_Example.bb index 1aa4377..695ffce 100644 --- a/Resources/Examples/SteamController_Example.bb +++ b/Resources/Examples/SteamController_Example.bb @@ -1,68 +1,68 @@ -; BlitzSteam - Steam wrapper for Blitz -; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -; -; This program is free software: you can redistribute it and/or modify -; it under the terms of the GNU Lesser General Public License as -; published by the Free Software Foundation, either version 3 of the -; License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU Lesser General Public License -; along with this program. If not, see . - -Include "../BlitzSteam.bb" - -;! Example is incomplete, I do not own a Steam Controller. - -; Initialize Steam before your next call to Graphics. -If BS_SteamAPI_Init() = False Then - RuntimeError "Steam: Failed to initialize!" -EndIf - -Const FPS = 30 -Const FPS_MULT# = 1.0 / FPS - -; Demo Scene -Graphics3D 1024, 768, 32, 2 -SetBuffer BackBuffer() - -Local demoTimer = CreateTimer(FPS) - -Local demoRoot = CreatePivot() - -Local demoCameraRoot = CreatePivot(demoRoot) -Local demoCamera = CreateCamera(demoCameraRoot) -MoveEntity demoCamera, 0, 0, -10 - -Local demoCube = CreateCube(demoRoot) - -Local EndGame = False -Repeat - Cls - - ;! Update - ; End on Escape - EndGame = KeyHit(1) - - TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT - - ;! Render 3D - RenderWorld - - ;! Render 2D - Text 0, 0, "Escape to Quit" - - ;! Update Window - Flip 0 - WaitTimer(demoTimer) -Until EndGame = True - -; Shut down Steam as the last action of your program. -BS_SteamAPI_Shutdown() -End -;~IDEal Editor Parameters: +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" + +;! Example is incomplete, I do not own a Steam Controller. + +; Initialize Steam before your next call to Graphics. +If BS_SteamAPI_Init() = False Then + RuntimeError "Steam: Failed to initialize!" +EndIf + +Const FPS = 30 +Const FPS_MULT# = 1.0 / FPS + +; Demo Scene +Graphics3D 1024, 768, 32, 2 +SetBuffer BackBuffer() + +Local demoTimer = CreateTimer(FPS) + +Local demoRoot = CreatePivot() + +Local demoCameraRoot = CreatePivot(demoRoot) +Local demoCamera = CreateCamera(demoCameraRoot) +MoveEntity demoCamera, 0, 0, -10 + +Local demoCube = CreateCube(demoRoot) + +Local EndGame = False +Repeat + Cls + + ;! Update + ; End on Escape + EndGame = KeyHit(1) + + TurnEntity demoCube, 1 * FPS_MULT, 3 * FPS_MULT, 2.332 * FPS_MULT + + ;! Render 3D + RenderWorld + + ;! Render 2D + Text 0, 0, "Escape to Quit" + + ;! Update Window + Flip 0 + WaitTimer(demoTimer) +Until EndGame = True + +; Shut down Steam as the last action of your program. +BS_SteamAPI_Shutdown() +End +;~IDEal Editor Parameters: ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Examples/SteamHTMLSurface_Example.bb b/Resources/Examples/SteamHTMLSurface_Example.bb index 9fcf963..36af349 100644 --- a/Resources/Examples/SteamHTMLSurface_Example.bb +++ b/Resources/Examples/SteamHTMLSurface_Example.bb @@ -1,381 +1,396 @@ -Include "../BlitzSteam.bb" - -;---------------------------------------------------------------- -;! Steam Stuff -;---------------------------------------------------------------- - -; SteamClient: WarningMessageHook -Global Steam_WarningMessageHook_Callback = 0 -Function Steam_WarningMessageHook(bIsWarning%, pchMessageBuffer%) - If Steam_WarningMessageHook_Callback = 0 Then - Steam_WarningMessageHook_Callback = BP_GetFunctionPointer() - Return - EndIf - - ; Read Message from buffer - Local msg$ = "" - If bIsWarning = 1 Then - msg = "[Warning]" - Else - msg = "[Info]" - EndIf - msg = msg + PeekMemoryStringC(pchMessageBuffer) - - DebugLog "[Steam]" + msg$ -End Function:Steam_WarningMessageHook(0, 0) -Function PeekMemoryStringC(Memory%, Length%=-1) - Local Ptr = Memory - Local iChar = 0, tiChar = 0 - Local sOut$ = "" - - Repeat - tiChar = PeekMemoryByte(Ptr) - - ; Advance memory, decrease Length - Ptr = Ptr + 1 - Length = Length - 1 - - If (tiChar = 0) Then - Length = 0 - Else - sOut = sOut + Chr(tiChar) - EndIf - Until Length = 0 - - Return sOut -End Function - -;---------------------------------------------------------------- -;! SteamBrowser (Image & Texture Drawing) -;---------------------------------------------------------------- -Global SteamBrowser_Callback_BrowserReady_p = 0, SteamBrowser_Callback_BrowserReady_c = 0 -Global SteamBrowser_Callback_NeedsPaint_p = 0, SteamBrowser_Callback_NeedsPaint_c = 0 -Global SteamBrowser_Callback_StartRequest_p = 0, SteamBrowser_Callback_StartRequest_c = 0 - -Type SteamBrowser - Field Id%, lSteamAPICall% - Field Size%[1] ;Width, Height - Field URL$ - - ; CEF Stuff - Field UpdateRegion[3] ;X,Y,W,H - Field Serial%, Scale#, ScrollX%, ScrollY% - - ; Image Based - Field hImage% - - ; Texture Based - Field hTexture% -End Type - -Function SteamBrowser_Create.SteamBrowser(Width%, Height%, URL$="http://google.com/", UserAgent$="SteamBrowser", UserCSS$="") - ; Create our Object - Local SB.SteamBrowser = New SteamBrowser - SB\Id = 0 ; Initialize to 0 until the Browser is ready. - SB\Size[0] = Width - SB\Size[1] = Height - SB\URL = URL - SB\lSteamAPICall = BS_ISteamHTMLSurface_CreateBrowser(BS_SteamHTMLSurface(), UserAgent, UserCSS) - - ; We need to register our callbacks, or nothing will work. - BS_Callback_RegisterResult SteamBrowser_Callback_BrowserReady_c, SB\lSteamAPICall, BS_SteamHTMLSurface_BrowserReady ; Listen to the result of the last SteamAPICall. - BS_Callback_Register SteamBrowser_Callback_NeedsPaint_c, BS_SteamHTMLSurface_NeedsPaint - BS_Callback_Register SteamBrowser_Callback_StartRequest_c, BS_SteamHTMLSurface_StartRequest - - ; Image Based - SB\hImage = CreateImage(SB\Size[0], SB\Size[1]) - ; Texture Based - SB\hTexture = CreateTexture(SB\Size[0], SB\Size[1], 1+2) - - Return SB -End Function - -Function SteamBrowser_Destroy(SB.SteamBrowser) - ; Texture Based - FreeTexture SB\hTexture - ; Image Based - FreeImage SB\hImage - - BS_ISteamHTMLSurface_RemoveBrowser BS_SteamHTMLSurface(), SB\Id - Delete SB -End Function - -Function SteamBrowser_Find.SteamBrowser(iId%, lSteamAPICall%) - Local SB.SteamBrowser = Null - ; Find by Id - If iId <> 0 - For SB.SteamBrowser = Each SteamBrowser - If (SB\Id = iId) Then - Return SB - EndIf - Next - EndIf - ; Find by SteamAPICall - If lSteamAPICall <> 0 - For SB.SteamBrowser = Each SteamBrowser - If (SB\lSteamAPICall <> 0) And (BS_Long_Compare(lSteamAPICall, SB\lSteamAPICall) = 0) Then - Return SB - EndIf - Next - EndIf - Return Null -End Function - -Function SteamBrowser_SetSize(SB.SteamBrowser, Width%, Height%) - SB\Size[0] = Width - SB\Size[1] = Height - - ; Update Browser Size - BS_ISteamHTMLSurface_SetSize BS_SteamHTMLSurface(), SB\Id, Width, Height - - ; Image Based - FreeImage(SB\hImage) - SB\hImage = CreateImage(Width, Height) - ; Texture Based - FreeTexture(SB\hTexture) - SB\hTexture = CreateTexture(Width, Height, 1+2) -End Function - -Function SteamBrowser_LoadUrl(SB.SteamBrowser, URL$, PostData$="") - BS_ISteamHTMLSurface_LoadURL BS_SteamHTMLSurface(), SB\Id, URL, PostData -End Function - -Function SteamBrowser_IsReady(SB.SteamBrowser) - Return (SB\Id <> 0) -End Function - -Function SteamBrowser_GetImageHandle(SB.SteamBrowser) - Return SB\hImage -End Function - -Function SteamBrowser_GetTextureHandle(SB.SteamBrowser) - Return SB\hTexture -End Function - -Function SteamBrowser_Callback_BrowserReady(pvParam%, bIOFailure, lSteamAPICall) - If (SteamBrowser_Callback_BrowserReady_p = 0) Then - SteamBrowser_Callback_BrowserReady_p = BP_GetFunctionPointer() - SteamBrowser_Callback_BrowserReady_c = BS_Callback_New(SteamBrowser_Callback_BrowserReady_p) - Return - EndIf - - ; Search for a valid SteamBrowser object. - Local SB.SteamBrowser = SteamBrowser_Find(0, lSteamAPICall) - SB\Id = BS_Memory_PeekInt(pvParam, 0) - SteamBrowser_SetSize(SB, SB\Size[0], SB\Size[1]) - SteamBrowser_LoadUrl(SB, SB\URL) - - ; Destroy our SteamAPICall pointer and clear the value. - BS_Long_Destroy(SB\lSteamAPICall):SB\lSteamAPICall = 0 -End Function:SteamBrowser_Callback_BrowserReady(0, 0, 0) - -Function SteamBrowser_Callback_NeedsPaint(pvParam%, p2, p3) - If (SteamBrowser_Callback_NeedsPaint_p = 0) Then - SteamBrowser_Callback_NeedsPaint_p = BP_GetFunctionPointer() - SteamBrowser_Callback_NeedsPaint_c = BS_Callback_New(SteamBrowser_Callback_NeedsPaint_p) - Return - EndIf - - ; Search for a valid SteamBrowser object. - Local SB.SteamBrowser = SteamBrowser_Find(BS_Memory_PeekInt(pvParam, 0), 0) - - ; Parse Data from pvParam - Local pBuffer, pW, pH, pUpdateX, pUpdateY, pUpdateW, pUpdateH, pScrollX, pScrollY, pScale#, pSerial - pBuffer = BS_Memory_PeekInt(pvParam, 4) - pW = BS_Memory_PeekInt(pvParam, 8) - pH = BS_Memory_PeekInt(pvParam, 12) - pUpdateX = BS_Memory_PeekInt(pvParam, 16) - pUpdateY = BS_Memory_PeekInt(pvParam, 20) - pUpdateW = BS_Memory_PeekInt(pvParam, 24) - pUpdateH = BS_Memory_PeekInt(pvParam, 28) - pScrollX = BS_Memory_PeekInt(pvParam, 32) - pScrollY = BS_Memory_PeekInt(pvParam, 36) - pScale = BS_Memory_PeekFloat(pvParam, 40) - pSerial = BS_Memory_PeekInt(pvParam, 44) - - ; Assign to Object - SB\UpdateRegion[0] = pUpdateX - SB\UpdateRegion[1] = pUpdateY - SB\UpdateRegion[2] = pUpdateW - SB\UpdateRegion[3] = pUpdateH - SB\Scale = pScale - SB\ScrollX = pScrollX - SB\ScrollY = pScrollY - SB\Serial = pSerial - - ; Fix up Buffer Size (Always next bigger 16*n, for whatever reason (SIBLY WHAT DID YOU DO!?)) - Local nW = (16 * Ceil(pW / 16.0)) - ;DebugLog ImageWidth(SB\hImage) + ":" + ImageHeight(SB\hImage) - - ; Image Based - Local hImageBuffer = ImageBuffer(SB\hImage) - LockBuffer hImageBuffer - BS_Helper_CopyMemoryIntMangle pBuffer, BS_Memory_PeekInt(hImageBuffer, 72), 0, pW, pH, nW, SB\Size[1], pUpdateX, pUpdateY, pUpdateW, pUpdateH - UnlockBuffer hImageBuffer - - ; Texture Based (Identical) - Local hTextureBuffer = ImageBuffer(SB\hImage) - LockBuffer hTextureBuffer - BS_Helper_CopyMemoryIntMangle pBuffer, BS_Memory_PeekInt(hTextureBuffer, 72), 0, pW, pH, nW, SB\Size[1], pUpdateX, pUpdateY, pUpdateW, pUpdateH - UnlockBuffer hTextureBuffer - - - ; pvParam Structure - ;CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint - ;CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called - ;CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture - ;CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture - ;CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update - ;CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update - ;CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update - ;CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update - ;CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered - ;CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered - ;CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered - ;CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages -End Function:SteamBrowser_Callback_NeedsPaint(0, 0, 0) - -Function SteamBrowser_Callback_StartRequest(pvParam%, p2, p3) - If (SteamBrowser_Callback_StartRequest_p = 0) Then - SteamBrowser_Callback_StartRequest_p = BP_GetFunctionPointer() - SteamBrowser_Callback_StartRequest_c = BS_Callback_New(SteamBrowser_Callback_StartRequest_p) - Return - EndIf - - ; Search for a valid SteamBrowser object. - Local SB.SteamBrowser = SteamBrowser_Find(BS_Memory_PeekInt(pvParam, 0), 0) - - ; Default to allow all requests. (Why not? For an Example, this is good enough.) - ; Could implement a simple filter using a second type, but why don't you experiment a bit? - BS_ISteamHTMLSurface_AllowStartRequest BS_SteamHTMLSurface(), SB\Id, True -End Function:SteamBrowser_Callback_StartRequest(0, 0, 0) - - - - -;---------------------------------------------------------------- -;! Example Code -;---------------------------------------------------------------- -If BS_SteamAPI_Init() = 0 Then RuntimeError "Steam failed to initialize." - -; Steam: Hooks, Callbacks, CallResults -BS_ISteamClient_SetWarningMessageHook BS_SteamClient(), Steam_WarningMessageHook_Callback - -; Steam: HTMLSurface API -If BS_SteamHTMLSurface() = 0 Then RuntimeError "Steam: HTMLSurface API is not available." -If BS_ISteamHTMLSurface_Init(BS_SteamHTMLSurface()) = 0 Then RuntimeError "Steam: HTMLSurface API did not want to be initialized?!" -;BS_ISteamHTMLSurface_SetSize BS_SteamHTMLSurface(), 0, GraphicsWidth(), GraphicsHeight() - -Const FPS = 60 -Const FPS_MULT# = 1.0 / FPS - -; Demo Scene -Graphics3D 1024, 768, 32, 2 -SetBuffer BackBuffer() - -Local demoTimer = CreateTimer(FPS) -Local demoRoot = CreatePivot() -Local demoCameraRoot = CreatePivot(demoRoot) -Local demoCamera = CreateCamera(demoCameraRoot) -MoveEntity demoCamera, 0, 0, -10 -Local demoCube = CreateCube(demoRoot) - -; Create a Browser -Local myBrowser.SteamBrowser = SteamBrowser_Create(GraphicsWidth(), GraphicsHeight(), "http://store.steampowered.com/app/368720/") - -Local Mouse[3], MouseButton[3], Key[255] -While Not KeyHit(1) - Cls - - ; Only allow input when the browser is up to date. - ;If (myBrowser\iLastDraw > myBrowser\iLastRequest) Then - If True - ; Mouse Input - If Mouse[0] <> MouseX() Or Mouse[1] <> MouseY() Then - Mouse[0] = MouseX() - Mouse[1] = MouseY() - BS_ISteamHTMLSurface_MouseMove BS_SteamHTMLSurface(), myBrowser\Id, MouseX(), MouseY() - EndIf - If Mouse[2] <> MouseZ() Then - Mouse[2] = MouseZ() - BS_ISteamHTMLSurface_MouseWheel BS_SteamHTMLSurface(), myBrowser\Id, MouseZSpeed()*30 - EndIf - - Local Button - For Button = 1 To 3 - Local ButtonDown = MouseDown(Button) - If MouseButton[Button] <> ButtonDown Then - MouseButton[Button] = MouseDown(Button) - - If ButtonDown - BS_ISteamHTMLSurface_MouseDown BS_SteamHTMLSurface(), myBrowser\Id, Button - 1 - Else - BS_ISteamHTMLSurface_MouseUp BS_SteamHTMLSurface(), myBrowser\Id, Button - 1 - EndIf - EndIf - Next - - ; Keyboard - Local Modifier = BS_EHTMLKeyModifiers_None - If KeyDown(42) Or KeyDown(54) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_ShiftDown - If KeyDown(29) Or KeyDown(157) Or KeyDown(184) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_CtrlDown - If KeyDown(56) Or KeyDown(184) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_AltDown - - Local VK - For VK = 0 To 255 - Local SC = InputEx_User32_MapVirtualKeyEx(VK, 0, 0) - - Local KeyDownN = KeyDown(SC) - If Key[VK] <> KeyDownN Then - Key[VK] = KeyDownN - - If KeyDownN = 1 Then - BS_ISteamHTMLSurface_KeyDown BS_SteamHTMLSurface(), myBrowser\Id, VK, Modifier - Else - BS_ISteamHTMLSurface_KeyUp BS_SteamHTMLSurface(), myBrowser\Id, VK, Modifier - EndIf - EndIf - Next - Local GetKeyC = GetKey() - If GetKeyC - BS_ISteamHTMLSurface_KeyChar BS_SteamHTMLSurface(), myBrowser\Id, GetKeyC, Modifier - EndIf - - EndIf - - ; Steam: Run any Callbacks - ; Q: Why before RenderWorld/Flip? - ; A: If we did any changes, having them available before Rendering helps responsiveness. - ; A one-frame Delay is noticeable, even to people claiming the eye only sees 30 fps. - ; Please read a Biology book if you are one of those, it doesn't work like that. - BS_SteamAPI_RunCallbacks() - - RenderWorld - - ;If (myBrowser\iLastDraw > myBrowser\iLastRequest) Then - If Not KeyDown(57) - DrawBlock SteamBrowser_GetImageHandle(myBrowser), 0, 0, 0 - Color 255, 0, 0 - Rect myBrowser\UpdateRegion[0],myBrowser\UpdateRegion[1],myBrowser\UpdateRegion[2],myBrowser\UpdateRegion[3], 0 - Else - EntityTexture demoCube, SteamBrowser_GetTextureHandle(myBrowser) - EndIf - ;EndIf - - Flip - WaitTimer demoTimer -Wend - -; Destroy existing Browser -SteamBrowser_Destroy(myBrowser):myBrowser = Null - -; Steam: HTMLSurface API -BS_ISteamHTMLSurface_Shutdown(BS_SteamHTMLSurface()) -BS_SteamAPI_Shutdown() - -EndGraphics -End - -;~IDEal Editor Parameters: -;~F#8#19 +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" +;---------------------------------------------------------------- +;! Steam Stuff +;---------------------------------------------------------------- + +; SteamClient: WarningMessageHook +Global Steam_WarningMessageHook_Callback = 0 +Function Steam_WarningMessageHook(bIsWarning%, pchMessageBuffer%) + If Steam_WarningMessageHook_Callback = 0 Then + Steam_WarningMessageHook_Callback = BP_GetFunctionPointer() + Return + EndIf + + ; Read Message from buffer + Local msg$ = "" + If bIsWarning = 1 Then + msg = "[Warning]" + Else + msg = "[Info]" + EndIf + msg = msg + PeekMemoryStringC(pchMessageBuffer) + + DebugLog "[Steam]" + msg$ +End Function:Steam_WarningMessageHook(0, 0) +Function PeekMemoryStringC(Memory%, Length%=-1) + Local Ptr = Memory + Local iChar = 0, tiChar = 0 + Local sOut$ = "" + + Repeat + tiChar = PeekMemoryByte(Ptr) + + ; Advance memory, decrease Length + Ptr = Ptr + 1 + Length = Length - 1 + + If (tiChar = 0) Then + Length = 0 + Else + sOut = sOut + Chr(tiChar) + EndIf + Until Length = 0 + + Return sOut +End Function + +;---------------------------------------------------------------- +;! SteamBrowser (Image & Texture Drawing) +;---------------------------------------------------------------- +Global SteamBrowser_Callback_BrowserReady_p = 0, SteamBrowser_Callback_BrowserReady_c = 0 +Global SteamBrowser_Callback_NeedsPaint_p = 0, SteamBrowser_Callback_NeedsPaint_c = 0 +Global SteamBrowser_Callback_StartRequest_p = 0, SteamBrowser_Callback_StartRequest_c = 0 + +Type SteamBrowser + Field Id%, lSteamAPICall% + Field Size%[1] ;Width, Height + Field URL$ + + ; CEF Stuff + Field UpdateRegion[3] ;X,Y,W,H + Field Serial%, Scale#, ScrollX%, ScrollY% + + ; Image Based + Field hImage% + + ; Texture Based + Field hTexture% +End Type + +Function SteamBrowser_Create.SteamBrowser(Width%, Height%, URL$="http://google.com/", UserAgent$="SteamBrowser", UserCSS$="") + ; Create our Object + Local SB.SteamBrowser = New SteamBrowser + SB\Id = 0 ; Initialize to 0 until the Browser is ready. + SB\Size[0] = Width + SB\Size[1] = Height + SB\URL = URL + SB\lSteamAPICall = BS_ISteamHTMLSurface_CreateBrowser(BS_SteamHTMLSurface(), UserAgent, UserCSS) + + ; We need to register our callbacks, or nothing will work. + BS_Callback_RegisterResult SteamBrowser_Callback_BrowserReady_c, SB\lSteamAPICall, BS_SteamHTMLSurface_BrowserReady ; Listen to the result of the last SteamAPICall. + BS_Callback_Register SteamBrowser_Callback_NeedsPaint_c, BS_SteamHTMLSurface_NeedsPaint + BS_Callback_Register SteamBrowser_Callback_StartRequest_c, BS_SteamHTMLSurface_StartRequest + + ; Image Based + SB\hImage = CreateImage(SB\Size[0], SB\Size[1]) + ; Texture Based + SB\hTexture = CreateTexture(SB\Size[0], SB\Size[1], 1+2) + + Return SB +End Function + +Function SteamBrowser_Destroy(SB.SteamBrowser) + ; Texture Based + FreeTexture SB\hTexture + ; Image Based + FreeImage SB\hImage + + BS_ISteamHTMLSurface_RemoveBrowser BS_SteamHTMLSurface(), SB\Id + Delete SB +End Function + +Function SteamBrowser_Find.SteamBrowser(iId%, lSteamAPICall%) + Local SB.SteamBrowser = Null + ; Find by Id + If iId <> 0 + For SB.SteamBrowser = Each SteamBrowser + If (SB\Id = iId) Then + Return SB + EndIf + Next + EndIf + ; Find by SteamAPICall + If lSteamAPICall <> 0 + For SB.SteamBrowser = Each SteamBrowser + If (SB\lSteamAPICall <> 0) And (BS_Long_Compare(lSteamAPICall, SB\lSteamAPICall) = 0) Then + Return SB + EndIf + Next + EndIf + Return Null +End Function + +Function SteamBrowser_SetSize(SB.SteamBrowser, Width%, Height%) + SB\Size[0] = Width + SB\Size[1] = Height + + ; Update Browser Size + BS_ISteamHTMLSurface_SetSize BS_SteamHTMLSurface(), SB\Id, Width, Height + + ; Image Based + FreeImage(SB\hImage) + SB\hImage = CreateImage(Width, Height) + ; Texture Based + FreeTexture(SB\hTexture) + SB\hTexture = CreateTexture(Width, Height, 1+2) +End Function + +Function SteamBrowser_LoadUrl(SB.SteamBrowser, URL$, PostData$="") + BS_ISteamHTMLSurface_LoadURL BS_SteamHTMLSurface(), SB\Id, URL, PostData +End Function + +Function SteamBrowser_IsReady(SB.SteamBrowser) + Return (SB\Id <> 0) +End Function + +Function SteamBrowser_GetImageHandle(SB.SteamBrowser) + Return SB\hImage +End Function + +Function SteamBrowser_GetTextureHandle(SB.SteamBrowser) + Return SB\hTexture +End Function + +Function SteamBrowser_Callback_BrowserReady(pvParam%, bIOFailure, lSteamAPICall) + If (SteamBrowser_Callback_BrowserReady_p = 0) Then + SteamBrowser_Callback_BrowserReady_p = BP_GetFunctionPointer() + SteamBrowser_Callback_BrowserReady_c = BS_Callback_New(SteamBrowser_Callback_BrowserReady_p) + Return + EndIf + + ; Search for a valid SteamBrowser object. + Local SB.SteamBrowser = SteamBrowser_Find(0, lSteamAPICall) + SB\Id = BS_Memory_PeekInt(pvParam, 0) + SteamBrowser_SetSize(SB, SB\Size[0], SB\Size[1]) + SteamBrowser_LoadUrl(SB, SB\URL) + + ; Destroy our SteamAPICall pointer and clear the value. + BS_Long_Destroy(SB\lSteamAPICall):SB\lSteamAPICall = 0 +End Function:SteamBrowser_Callback_BrowserReady(0, 0, 0) + +Function SteamBrowser_Callback_NeedsPaint(pvParam%, p2, p3) + If (SteamBrowser_Callback_NeedsPaint_p = 0) Then + SteamBrowser_Callback_NeedsPaint_p = BP_GetFunctionPointer() + SteamBrowser_Callback_NeedsPaint_c = BS_Callback_New(SteamBrowser_Callback_NeedsPaint_p) + Return + EndIf + + ; Search for a valid SteamBrowser object. + Local SB.SteamBrowser = SteamBrowser_Find(BS_Memory_PeekInt(pvParam, 0), 0) + + ; Parse Data from pvParam + Local pBuffer, pW, pH, pUpdateX, pUpdateY, pUpdateW, pUpdateH, pScrollX, pScrollY, pScale#, pSerial + pBuffer = BS_Memory_PeekInt(pvParam, 4) + pW = BS_Memory_PeekInt(pvParam, 8) + pH = BS_Memory_PeekInt(pvParam, 12) + pUpdateX = BS_Memory_PeekInt(pvParam, 16) + pUpdateY = BS_Memory_PeekInt(pvParam, 20) + pUpdateW = BS_Memory_PeekInt(pvParam, 24) + pUpdateH = BS_Memory_PeekInt(pvParam, 28) + pScrollX = BS_Memory_PeekInt(pvParam, 32) + pScrollY = BS_Memory_PeekInt(pvParam, 36) + pScale = BS_Memory_PeekFloat(pvParam, 40) + pSerial = BS_Memory_PeekInt(pvParam, 44) + + ; Assign to Object + SB\UpdateRegion[0] = pUpdateX + SB\UpdateRegion[1] = pUpdateY + SB\UpdateRegion[2] = pUpdateW + SB\UpdateRegion[3] = pUpdateH + SB\Scale = pScale + SB\ScrollX = pScrollX + SB\ScrollY = pScrollY + SB\Serial = pSerial + + ; Fix up Buffer Size (Always next bigger 16*n, for whatever reason (SIBLY WHAT DID YOU DO!?)) + Local nW = (16 * Ceil(pW / 16.0)) + ;DebugLog ImageWidth(SB\hImage) + ":" + ImageHeight(SB\hImage) + + ; Image Based + Local hImageBuffer = ImageBuffer(SB\hImage) + LockBuffer hImageBuffer + BS_Helper_CopyMemoryIntMangle pBuffer, BS_Memory_PeekInt(hImageBuffer, 72), 0, pW, pH, nW, SB\Size[1], pUpdateX, pUpdateY, pUpdateW, pUpdateH + UnlockBuffer hImageBuffer + + ; Texture Based (Identical) + Local hTextureBuffer = ImageBuffer(SB\hImage) + LockBuffer hTextureBuffer + BS_Helper_CopyMemoryIntMangle pBuffer, BS_Memory_PeekInt(hTextureBuffer, 72), 0, pW, pH, nW, SB\Size[1], pUpdateX, pUpdateY, pUpdateW, pUpdateH + UnlockBuffer hTextureBuffer + + + ; pvParam Structure + ;CALLBACK_MEMBER(0, HHTMLBrowser, unBrowserHandle) // the browser that needs the paint + ;CALLBACK_MEMBER(1, const char *, pBGRA ) // a pointer to the B8G8R8A8 data for this surface, valid until SteamAPI_RunCallbacks is next called + ;CALLBACK_MEMBER(2, uint32, unWide) // the total width of the pBGRA texture + ;CALLBACK_MEMBER(3, uint32, unTall) // the total height of the pBGRA texture + ;CALLBACK_MEMBER(4, uint32, unUpdateX) // the offset in X for the damage rect for this update + ;CALLBACK_MEMBER(5, uint32, unUpdateY) // the offset in Y for the damage rect for this update + ;CALLBACK_MEMBER(6, uint32, unUpdateWide) // the width of the damage rect for this update + ;CALLBACK_MEMBER(7, uint32, unUpdateTall) // the height of the damage rect for this update + ;CALLBACK_MEMBER(8, uint32, unScrollX) // the page scroll the browser was at when this texture was rendered + ;CALLBACK_MEMBER(9, uint32, unScrollY) // the page scroll the browser was at when this texture was rendered + ;CALLBACK_MEMBER(10, float, flPageScale) // the page scale factor on this page when rendered + ;CALLBACK_MEMBER(11, uint32, unPageSerial) // incremented on each new page load, you can use this to reject draws while navigating to new pages +End Function:SteamBrowser_Callback_NeedsPaint(0, 0, 0) + +Function SteamBrowser_Callback_StartRequest(pvParam%, p2, p3) + If (SteamBrowser_Callback_StartRequest_p = 0) Then + SteamBrowser_Callback_StartRequest_p = BP_GetFunctionPointer() + SteamBrowser_Callback_StartRequest_c = BS_Callback_New(SteamBrowser_Callback_StartRequest_p) + Return + EndIf + + ; Search for a valid SteamBrowser object. + Local SB.SteamBrowser = SteamBrowser_Find(BS_Memory_PeekInt(pvParam, 0), 0) + + ; Default to allow all requests. (Why not? For an Example, this is good enough.) + ; Could implement a simple filter using a second type, but why don't you experiment a bit? + BS_ISteamHTMLSurface_AllowStartRequest BS_SteamHTMLSurface(), SB\Id, True +End Function:SteamBrowser_Callback_StartRequest(0, 0, 0) + + + + +;---------------------------------------------------------------- +;! Example Code +;---------------------------------------------------------------- +If BS_SteamAPI_Init() = 0 Then RuntimeError "Steam failed to initialize." + +; Steam: Hooks, Callbacks, CallResults +BS_ISteamClient_SetWarningMessageHook BS_SteamClient(), Steam_WarningMessageHook_Callback + +; Steam: HTMLSurface API +If BS_SteamHTMLSurface() = 0 Then RuntimeError "Steam: HTMLSurface API is not available." +If BS_ISteamHTMLSurface_Init(BS_SteamHTMLSurface()) = 0 Then RuntimeError "Steam: HTMLSurface API did not want to be initialized?!" +;BS_ISteamHTMLSurface_SetSize BS_SteamHTMLSurface(), 0, GraphicsWidth(), GraphicsHeight() + +Const FPS = 60 +Const FPS_MULT# = 1.0 / FPS + +; Demo Scene +Graphics3D 1024, 768, 32, 2 +SetBuffer BackBuffer() + +Local demoTimer = CreateTimer(FPS) +Local demoRoot = CreatePivot() +Local demoCameraRoot = CreatePivot(demoRoot) +Local demoCamera = CreateCamera(demoCameraRoot) +MoveEntity demoCamera, 0, 0, -10 +Local demoCube = CreateCube(demoRoot) + +; Create a Browser +Local myBrowser.SteamBrowser = SteamBrowser_Create(GraphicsWidth(), GraphicsHeight(), "http://store.steampowered.com/app/368720/") + +Local Mouse[3], MouseButton[3], Key[255] +While Not KeyHit(1) + Cls + + ; Only allow input when the browser is up to date. + ;If (myBrowser\iLastDraw > myBrowser\iLastRequest) Then + If True + ; Mouse Input + If Mouse[0] <> MouseX() Or Mouse[1] <> MouseY() Then + Mouse[0] = MouseX() + Mouse[1] = MouseY() + BS_ISteamHTMLSurface_MouseMove BS_SteamHTMLSurface(), myBrowser\Id, MouseX(), MouseY() + EndIf + If Mouse[2] <> MouseZ() Then + Mouse[2] = MouseZ() + BS_ISteamHTMLSurface_MouseWheel BS_SteamHTMLSurface(), myBrowser\Id, MouseZSpeed()*30 + EndIf + + Local Button + For Button = 1 To 3 + Local ButtonDown = MouseDown(Button) + If MouseButton[Button] <> ButtonDown Then + MouseButton[Button] = MouseDown(Button) + + If ButtonDown + BS_ISteamHTMLSurface_MouseDown BS_SteamHTMLSurface(), myBrowser\Id, Button - 1 + Else + BS_ISteamHTMLSurface_MouseUp BS_SteamHTMLSurface(), myBrowser\Id, Button - 1 + EndIf + EndIf + Next + + ; Keyboard + Local Modifier = BS_EHTMLKeyModifiers_None + If KeyDown(42) Or KeyDown(54) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_ShiftDown + If KeyDown(29) Or KeyDown(157) Or KeyDown(184) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_CtrlDown + If KeyDown(56) Or KeyDown(184) Then Modifier = Modifier Or BS_EHTMLKeyModifiers_AltDown + + Local VK + For VK = 0 To 255 + Local SC = InputEx_User32_MapVirtualKeyEx(VK, 0, 0) + + Local KeyDownN = KeyDown(SC) + If Key[VK] <> KeyDownN Then + Key[VK] = KeyDownN + + If KeyDownN = 1 Then + BS_ISteamHTMLSurface_KeyDown BS_SteamHTMLSurface(), myBrowser\Id, VK, Modifier + Else + BS_ISteamHTMLSurface_KeyUp BS_SteamHTMLSurface(), myBrowser\Id, VK, Modifier + EndIf + EndIf + Next + Local GetKeyC = GetKey() + If GetKeyC + BS_ISteamHTMLSurface_KeyChar BS_SteamHTMLSurface(), myBrowser\Id, GetKeyC, Modifier + EndIf + + EndIf + + ; Steam: Run any Callbacks + ; Q: Why before RenderWorld/Flip? + ; A: If we did any changes, having them available before Rendering helps responsiveness. + ; A one-frame Delay is noticeable, even to people claiming the eye only sees 30 fps. + ; Please read a Biology book if you are one of those, it doesn't work like that. + BS_SteamAPI_RunCallbacks() + + RenderWorld + + ;If (myBrowser\iLastDraw > myBrowser\iLastRequest) Then + If Not KeyDown(57) + DrawBlock SteamBrowser_GetImageHandle(myBrowser), 0, 0, 0 + Color 255, 0, 0 + Rect myBrowser\UpdateRegion[0],myBrowser\UpdateRegion[1],myBrowser\UpdateRegion[2],myBrowser\UpdateRegion[3], 0 + Else + EntityTexture demoCube, SteamBrowser_GetTextureHandle(myBrowser) + EndIf + ;EndIf + + Flip + WaitTimer demoTimer +Wend + +; Destroy existing Browser +SteamBrowser_Destroy(myBrowser):myBrowser = Null + +; Steam: HTMLSurface API +BS_ISteamHTMLSurface_Shutdown(BS_SteamHTMLSurface()) +BS_SteamAPI_Shutdown() + +EndGraphics +End + +;~IDEal Editor Parameters: +;~F#17#28 ;~C#Blitz3D \ No newline at end of file diff --git a/Resources/Examples/SteamMatchmakingServers_Example.bb b/Resources/Examples/SteamMatchmakingServers_Example.bb new file mode 100644 index 0000000..76b5b38 --- /dev/null +++ b/Resources/Examples/SteamMatchmakingServers_Example.bb @@ -0,0 +1,88 @@ +; BlitzSteam - Steam wrapper for Blitz +; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +; +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU Lesser General Public License as +; published by the Free Software Foundation, either version 3 of the +; License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU Lesser General Public License +; along with this program. If not, see . + +Include "../BlitzSteam.bb" + +;---------------------------------------------------------------- +;! Configuration +;---------------------------------------------------------------- +Const APPID = 480 ; Test App / SpaceWar + +Const FRAMERATE = 60 +Const RESOLUTION_X = 1024 +Const RESOLUTION_Y = 768 +Const RESOLUTION_Z = 32 +Const RESOLUTION_MODE = 2 + +;---------------------------------------------------------------- +;! Init Code +;---------------------------------------------------------------- +Global Timer = CreateTimer(FRAMERATE) + +Global ServerListResponse_ServerResponded_p%:ServerListResponse_ServerResponded(0, 0) +Global ServerListResponse_RefreshComplete_p%:ServerListResponse_RefreshComplete(0, 0) + +Graphics RESOLUTION_X, RESOLUTION_Y, RESOLUTION_Z, RESOLUTION_MODE +SetBuffer BackBuffer() + +If Not BS_SteamAPI_Init() Then RuntimeError "Failed to initialize Steam!" + +;---------------------------------------------------------------- +;! Main Code +;---------------------------------------------------------------- +Local Bank =CreateBank(1) +Local pRequestServersResponse = BS_ISteamMatchmakingServerListResponse_New(ServerListResponse_ServerResponded_p, 0, ServerListResponse_RefreshComplete_p) +Local hRequest = BS_ISteamMatchmakingServers_RequestInternetServerList(BS_SteamMatchmakingServers(), 480, Bank, 0, pRequestServersResponse) + +While Not KeyHit(1) + WaitTimer Timer + BS_SteamAPI_RunCallbacks() +Wend + +BS_ISteamMatchmakingServers_ReleaseRequest(BS_SteamMatchmakingServers(), hRequest) +BS_SteamAPI_Shutdown() + +;---------------------------------------------------------------- +;! Functions +;---------------------------------------------------------------- +Function ServerListResponse_ServerResponded(hRequest%, iServer%) + If (Not ServerListResponse_ServerResponded_p) + ServerListResponse_ServerResponded_p = BP_GetFunctionPointer() + Return + EndIf + Print iServer +End Function + +Function ServerListResponse_RefreshComplete(hRequest%, eMatchMakingServerResponse%) + If (Not ServerListResponse_RefreshComplete_p) + ServerListResponse_RefreshComplete_p = BP_GetFunctionPointer() + Return + EndIf + + Select eMatchMakingServerResponse + Case BS_EMatchMakingServerResponse_ServerResponded + Print "Got Servers" + Case BS_EMatchMakingServerResponse_ServerFailedToRespond + Print "Server did not respond" + Case BS_EMatchMakingServerResponse_NoServersListedOnMasterServer + Print "No Servers listed for this game." + Default + Print "Unknown" + End Select +End Function + +;~IDEal Editor Parameters: +;~C#Blitz3D \ No newline at end of file diff --git a/Types/BlitzCallback.cpp b/Types/BlitzCallback.cpp index 180adc8..849412e 100644 --- a/Types/BlitzCallback.cpp +++ b/Types/BlitzCallback.cpp @@ -1,266 +1,266 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzCallback.h" - -void BlitzCallback::Initialize() { -#define BlitzCallback_DefineSize(T) BlitzCallback::Sizes.emplace(T::k_iCallback, sizeof(T)); - // Do nothing if it was already done. - if (BlitzCallback::Sizes.size() > 0) - return; - - // Default to the size of the class itself if no callback id is given. - BlitzCallback::Sizes.emplace(0, sizeof(BlitzCallback)); - - // SteamAPI - // SteamAppList - BlitzCallback_DefineSize(SteamAppInstalled_t); - BlitzCallback_DefineSize(SteamAppUninstalled_t); - // SteamApps - BlitzCallback_DefineSize(DlcInstalled_t); - BlitzCallback_DefineSize(RegisterActivationCodeResponse_t); - BlitzCallback_DefineSize(AppProofOfPurchaseKeyResponse_t); - BlitzCallback_DefineSize(NewLaunchQueryParameters_t); - // SteamController - // SteamFriends - BlitzCallback_DefineSize(PersonaStateChange_t); - BlitzCallback_DefineSize(GameOverlayActivated_t); - BlitzCallback_DefineSize(GameServerChangeRequested_t); - BlitzCallback_DefineSize(GameLobbyJoinRequested_t); - BlitzCallback_DefineSize(AvatarImageLoaded_t); - BlitzCallback_DefineSize(ClanOfficerListResponse_t); - BlitzCallback_DefineSize(FriendRichPresenceUpdate_t); - BlitzCallback_DefineSize(GameRichPresenceJoinRequested_t); - BlitzCallback_DefineSize(GameConnectedClanChatMsg_t); - BlitzCallback_DefineSize(GameConnectedChatJoin_t); - BlitzCallback_DefineSize(GameConnectedChatLeave_t); - BlitzCallback_DefineSize(DownloadClanActivityCountsResult_t); - BlitzCallback_DefineSize(JoinClanChatRoomCompletionResult_t); - BlitzCallback_DefineSize(GameConnectedFriendChatMsg_t); - BlitzCallback_DefineSize(FriendsGetFollowerCount_t); - BlitzCallback_DefineSize(FriendsIsFollowing_t); - BlitzCallback_DefineSize(FriendsEnumerateFollowingList_t); - BlitzCallback_DefineSize(SetPersonaNameResponse_t); - // SteamGameServer - BlitzCallback_DefineSize(GSClientApprove_t); - BlitzCallback_DefineSize(GSClientDeny_t); - BlitzCallback_DefineSize(GSClientKick_t); - BlitzCallback_DefineSize(GSClientAchievementStatus_t); - BlitzCallback_DefineSize(GSPolicyResponse_t); - BlitzCallback_DefineSize(GSGameplayStats_t); - BlitzCallback_DefineSize(GSClientGroupStatus_t); - BlitzCallback_DefineSize(GSReputation_t); - BlitzCallback_DefineSize(AssociateWithClanResult_t); - BlitzCallback_DefineSize(ComputeNewPlayerCompatibilityResult_t); - // SteamGameServerStats - BlitzCallback_DefineSize(GSStatsReceived_t); - BlitzCallback_DefineSize(GSStatsStored_t); - BlitzCallback_DefineSize(GSStatsUnloaded_t); - // SteamHTMLSurface - BlitzCallback_DefineSize(HTML_BrowserReady_t); - // SteamHTTP - BlitzCallback_DefineSize(HTTPRequestCompleted_t); - BlitzCallback_DefineSize(HTTPRequestHeadersReceived_t); - BlitzCallback_DefineSize(HTTPRequestDataReceived_t); - // SteamInventory - BlitzCallback_DefineSize(SteamInventoryResultReady_t); - BlitzCallback_DefineSize(SteamInventoryFullUpdate_t); - BlitzCallback_DefineSize(SteamInventoryDefinitionUpdate_t); - // SteamMatchmaking - // SteamMatchmakingServers - // SteamMusic - // SteamMusicRemote - // SteamNetworking - BlitzCallback_DefineSize(P2PSessionRequest_t); - BlitzCallback_DefineSize(P2PSessionConnectFail_t); - BlitzCallback_DefineSize(SocketStatusCallback_t); -} - -std::map BlitzCallback::Sizes; - -BlitzCallback::BlitzCallback(BP_BlitzFunction3_t pFunctionPointer) { - BlitzCallback::Initialize(); - - // Initialize all values to 0. - this->m_iCallback = 0; - this->m_nCallbackFlags = 0; - this->m_hSteamAPICall = 0; - - // Set function pointer. - this->m_pFunctionPointer = pFunctionPointer; -} - -BlitzCallback::~BlitzCallback() { - // Unregister if we are still registered. - this->UnregisterResult(); - this->Unregister(); - - // Reset all variables to 0. - this->m_iCallback = 0; - this->m_nCallbackFlags = 0; - this->m_hSteamAPICall = 0; - this->m_pFunctionPointer = 0; -} - -void BlitzCallback::Run(void *pvParam) { - if (m_hSteamAPICall != 0) - m_hSteamAPICall = 0; // Caller unregisters for us. - - BP_CallFunction3(m_pFunctionPointer, reinterpret_cast(pvParam), 0, 0); -} - -void BlitzCallback::Run(void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall) { - if (m_hSteamAPICall != 0) - m_hSteamAPICall = 0; // Caller unregisters for us. - - BP_CallFunction3(m_pFunctionPointer, reinterpret_cast(pvParam), (bIOFailure ? 0 : 1), reinterpret_cast(&hSteamAPICall)); -} - -int BlitzCallback::GetCallbackSizeBytes() { - return (BlitzCallback::Sizes.find(this->m_iCallback)->second); -} - -void BlitzCallback::SetCallback(int32_t iCallback) { - this->m_iCallback = iCallback; -} - -int32_t BlitzCallback::GetCallback() { - return this->m_iCallback; -} - -void BlitzCallback::SetFunction(BP_BlitzFunction3_t pFunction) { - this->m_pFunctionPointer = pFunction; -} - -BP_BlitzFunction3_t BlitzCallback::GetFunction() { - return this->m_pFunctionPointer; -} - -bool BlitzCallback::IsRegistered() { - return (this->m_nCallbackFlags & this->k_ECallbackFlagsRegistered) != 0; -} - -void BlitzCallback::SetRegistered(bool bIsRegistered) { - this->m_nCallbackFlags &= ~k_ECallbackFlagsRegistered; - if (bIsRegistered) - this->m_nCallbackFlags |= k_ECallbackFlagsRegistered; -} - -bool BlitzCallback::IsGameServer() { - return (this->m_nCallbackFlags & this->k_ECallbackFlagsGameServer) != 0; -} - -void BlitzCallback::SetGameServer(bool bIsGameServer) { - this->m_nCallbackFlags &= ~k_ECallbackFlagsGameServer; - if (bIsGameServer) - this->m_nCallbackFlags |= k_ECallbackFlagsGameServer; -} - -void BlitzCallback::Register(uint32_t iCallback) { - if (this->IsRegistered()) - this->Unregister(); - - SteamAPI_RegisterCallback(this, iCallback); - this->m_iCallback = iCallback; -} - -void BlitzCallback::Unregister() { - if (this->IsRegistered()) { - SteamAPI_UnregisterCallback(this); - this->m_iCallback = 0; - } -} - -void BlitzCallback::RegisterResult(SteamAPICall_t hSteamAPICall, uint32_t iCallback) { - if (this->m_hSteamAPICall != 0) - this->UnregisterResult(); - - this->m_hSteamAPICall = hSteamAPICall; - this->m_iCallback = iCallback; - - SteamAPI_RegisterCallResult(this, hSteamAPICall); -} - -void BlitzCallback::UnregisterResult() { - if (this->m_hSteamAPICall != 0) { - SteamAPI_UnregisterCallResult(this, this->m_hSteamAPICall); - this->m_hSteamAPICall = 0; - this->m_iCallback = 0; - } -} - -//----------------------------------------------------------------------------- -// C-Callables -//----------------------------------------------------------------------------- -DLL(BlitzCallback*) BS_Callback_New(BP_BlitzFunction3_t pFunctionPointer) { - return new BlitzCallback(pFunctionPointer); -} - -DLL(void) BS_Callback_Destroy(BlitzCallback* pCallback) { - delete pCallback; -} - -DLL(int32_t) BS_Callback_GetCallbackSizeBytes(BlitzCallback* pCallback) { - return pCallback->GetCallbackSizeBytes(); -} - -DLL(void) BS_Callback_SetCallback(BlitzCallback* pCallback, int32_t iCallback) { - pCallback->SetCallback(iCallback); -} - -DLL(int32_t) BS_Callback_GetCallback(BlitzCallback* pCallback) { - return pCallback->GetCallback(); -} - -DLL(void) BS_Callback_SetFunction(BlitzCallback* pCallback, BP_BlitzFunction3_t pFunction) { - pCallback->SetFunction(pFunction); -} - -DLL(BP_BlitzFunction3_t) BS_Callback_GetFunction(BlitzCallback* pCallback) { - return pCallback->GetFunction(); -} - -DLL(int32_t) BS_Callback_IsRegistered(BlitzCallback* pCallback) { - return pCallback->IsRegistered(); -} - -DLL(void) BS_Callback_SetRegistered(BlitzCallback* pCallback, int32_t bIsRegistered) { - pCallback->SetRegistered(!!bIsRegistered); -} - -DLL(int32_t) BS_Callback_IsGameServer(BlitzCallback* pCallback) { - return pCallback->IsGameServer(); -} - -DLL(void) BS_Callback_SetGameServer(BlitzCallback* pCallback, int32_t bIsGameServer) { - pCallback->SetGameServer(!!bIsGameServer); -} - -DLL(void) BS_Callback_Register(BlitzCallback* pCallback, uint32_t iCallback) { - pCallback->Register(iCallback); -} - -DLL(void) BS_Callback_Unregister(BlitzCallback* pCallback) { - pCallback->Unregister(); -} - -DLL(void) BS_Callback_RegisterResult(BlitzCallback* pCallback, SteamAPICall_t* pSteamAPICall, uint32_t iCallback) { - pCallback->RegisterResult(*pSteamAPICall, iCallback); -} - -DLL(void) BS_Callback_UnregisterResult(BlitzCallback* pCallback) { - pCallback->UnregisterResult(); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzCallback.h" + +void BlitzCallback::Initialize() { +#define BlitzCallback_DefineSize(T) BlitzCallback::Sizes.emplace(T::k_iCallback, sizeof(T)); + // Do nothing if it was already done. + if (BlitzCallback::Sizes.size() > 0) + return; + + // Default to the size of the class itself if no callback id is given. + BlitzCallback::Sizes.emplace(0, sizeof(BlitzCallback)); + + // SteamAPI + // SteamAppList + BlitzCallback_DefineSize(SteamAppInstalled_t); + BlitzCallback_DefineSize(SteamAppUninstalled_t); + // SteamApps + BlitzCallback_DefineSize(DlcInstalled_t); + BlitzCallback_DefineSize(RegisterActivationCodeResponse_t); + BlitzCallback_DefineSize(AppProofOfPurchaseKeyResponse_t); + BlitzCallback_DefineSize(NewLaunchQueryParameters_t); + // SteamController + // SteamFriends + BlitzCallback_DefineSize(PersonaStateChange_t); + BlitzCallback_DefineSize(GameOverlayActivated_t); + BlitzCallback_DefineSize(GameServerChangeRequested_t); + BlitzCallback_DefineSize(GameLobbyJoinRequested_t); + BlitzCallback_DefineSize(AvatarImageLoaded_t); + BlitzCallback_DefineSize(ClanOfficerListResponse_t); + BlitzCallback_DefineSize(FriendRichPresenceUpdate_t); + BlitzCallback_DefineSize(GameRichPresenceJoinRequested_t); + BlitzCallback_DefineSize(GameConnectedClanChatMsg_t); + BlitzCallback_DefineSize(GameConnectedChatJoin_t); + BlitzCallback_DefineSize(GameConnectedChatLeave_t); + BlitzCallback_DefineSize(DownloadClanActivityCountsResult_t); + BlitzCallback_DefineSize(JoinClanChatRoomCompletionResult_t); + BlitzCallback_DefineSize(GameConnectedFriendChatMsg_t); + BlitzCallback_DefineSize(FriendsGetFollowerCount_t); + BlitzCallback_DefineSize(FriendsIsFollowing_t); + BlitzCallback_DefineSize(FriendsEnumerateFollowingList_t); + BlitzCallback_DefineSize(SetPersonaNameResponse_t); + // SteamGameServer + BlitzCallback_DefineSize(GSClientApprove_t); + BlitzCallback_DefineSize(GSClientDeny_t); + BlitzCallback_DefineSize(GSClientKick_t); + BlitzCallback_DefineSize(GSClientAchievementStatus_t); + BlitzCallback_DefineSize(GSPolicyResponse_t); + BlitzCallback_DefineSize(GSGameplayStats_t); + BlitzCallback_DefineSize(GSClientGroupStatus_t); + BlitzCallback_DefineSize(GSReputation_t); + BlitzCallback_DefineSize(AssociateWithClanResult_t); + BlitzCallback_DefineSize(ComputeNewPlayerCompatibilityResult_t); + // SteamGameServerStats + BlitzCallback_DefineSize(GSStatsReceived_t); + BlitzCallback_DefineSize(GSStatsStored_t); + BlitzCallback_DefineSize(GSStatsUnloaded_t); + // SteamHTMLSurface + BlitzCallback_DefineSize(HTML_BrowserReady_t); + // SteamHTTP + BlitzCallback_DefineSize(HTTPRequestCompleted_t); + BlitzCallback_DefineSize(HTTPRequestHeadersReceived_t); + BlitzCallback_DefineSize(HTTPRequestDataReceived_t); + // SteamInventory + BlitzCallback_DefineSize(SteamInventoryResultReady_t); + BlitzCallback_DefineSize(SteamInventoryFullUpdate_t); + BlitzCallback_DefineSize(SteamInventoryDefinitionUpdate_t); + // SteamMatchmaking + // SteamMatchmakingServers + // SteamMusic + // SteamMusicRemote + // SteamNetworking + BlitzCallback_DefineSize(P2PSessionRequest_t); + BlitzCallback_DefineSize(P2PSessionConnectFail_t); + BlitzCallback_DefineSize(SocketStatusCallback_t); +} + +std::map BlitzCallback::Sizes; + +BlitzCallback::BlitzCallback(BP_BlitzFunction3_t pFunctionPointer) { + BlitzCallback::Initialize(); + + // Initialize all values to 0. + this->m_iCallback = 0; + this->m_nCallbackFlags = 0; + this->m_hSteamAPICall = 0; + + // Set function pointer. + this->m_pFunctionPointer = pFunctionPointer; +} + +BlitzCallback::~BlitzCallback() { + // Unregister if we are still registered. + this->UnregisterResult(); + this->Unregister(); + + // Reset all variables to 0. + this->m_iCallback = 0; + this->m_nCallbackFlags = 0; + this->m_hSteamAPICall = 0; + this->m_pFunctionPointer = 0; +} + +void BlitzCallback::Run(void *pvParam) { + if (m_hSteamAPICall != 0) + m_hSteamAPICall = 0; // Caller unregisters for us. + + BP_CallFunction3(m_pFunctionPointer, reinterpret_cast(pvParam), 0, 0); +} + +void BlitzCallback::Run(void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall) { + if (m_hSteamAPICall != 0) + m_hSteamAPICall = 0; // Caller unregisters for us. + + BP_CallFunction3(m_pFunctionPointer, reinterpret_cast(pvParam), (bIOFailure ? 0 : 1), reinterpret_cast(&hSteamAPICall)); +} + +int BlitzCallback::GetCallbackSizeBytes() { + return (BlitzCallback::Sizes.find(this->m_iCallback)->second); +} + +void BlitzCallback::SetCallback(int32_t iCallback) { + this->m_iCallback = iCallback; +} + +int32_t BlitzCallback::GetCallback() { + return this->m_iCallback; +} + +void BlitzCallback::SetFunction(BP_BlitzFunction3_t pFunction) { + this->m_pFunctionPointer = pFunction; +} + +BP_BlitzFunction3_t BlitzCallback::GetFunction() { + return this->m_pFunctionPointer; +} + +bool BlitzCallback::IsRegistered() { + return (this->m_nCallbackFlags & this->k_ECallbackFlagsRegistered) != 0; +} + +void BlitzCallback::SetRegistered(bool bIsRegistered) { + this->m_nCallbackFlags &= ~k_ECallbackFlagsRegistered; + if (bIsRegistered) + this->m_nCallbackFlags |= k_ECallbackFlagsRegistered; +} + +bool BlitzCallback::IsGameServer() { + return (this->m_nCallbackFlags & this->k_ECallbackFlagsGameServer) != 0; +} + +void BlitzCallback::SetGameServer(bool bIsGameServer) { + this->m_nCallbackFlags &= ~k_ECallbackFlagsGameServer; + if (bIsGameServer) + this->m_nCallbackFlags |= k_ECallbackFlagsGameServer; +} + +void BlitzCallback::Register(uint32_t iCallback) { + if (this->IsRegistered()) + this->Unregister(); + + SteamAPI_RegisterCallback(this, iCallback); + this->m_iCallback = iCallback; +} + +void BlitzCallback::Unregister() { + if (this->IsRegistered()) { + SteamAPI_UnregisterCallback(this); + this->m_iCallback = 0; + } +} + +void BlitzCallback::RegisterResult(SteamAPICall_t hSteamAPICall, uint32_t iCallback) { + if (this->m_hSteamAPICall != 0) + this->UnregisterResult(); + + this->m_hSteamAPICall = hSteamAPICall; + this->m_iCallback = iCallback; + + SteamAPI_RegisterCallResult(this, hSteamAPICall); +} + +void BlitzCallback::UnregisterResult() { + if (this->m_hSteamAPICall != 0) { + SteamAPI_UnregisterCallResult(this, this->m_hSteamAPICall); + this->m_hSteamAPICall = 0; + this->m_iCallback = 0; + } +} + +//----------------------------------------------------------------------------- +// C-Callables +//----------------------------------------------------------------------------- +DLL(BlitzCallback*) BS_Callback_New(BP_BlitzFunction3_t pFunctionPointer) { + return new BlitzCallback(pFunctionPointer); +} + +DLL(void) BS_Callback_Destroy(BlitzCallback* pCallback) { + delete pCallback; +} + +DLL(int32_t) BS_Callback_GetCallbackSizeBytes(BlitzCallback* pCallback) { + return pCallback->GetCallbackSizeBytes(); +} + +DLL(void) BS_Callback_SetCallback(BlitzCallback* pCallback, int32_t iCallback) { + pCallback->SetCallback(iCallback); +} + +DLL(int32_t) BS_Callback_GetCallback(BlitzCallback* pCallback) { + return pCallback->GetCallback(); +} + +DLL(void) BS_Callback_SetFunction(BlitzCallback* pCallback, BP_BlitzFunction3_t pFunction) { + pCallback->SetFunction(pFunction); +} + +DLL(BP_BlitzFunction3_t) BS_Callback_GetFunction(BlitzCallback* pCallback) { + return pCallback->GetFunction(); +} + +DLL(int32_t) BS_Callback_IsRegistered(BlitzCallback* pCallback) { + return pCallback->IsRegistered(); +} + +DLL(void) BS_Callback_SetRegistered(BlitzCallback* pCallback, int32_t bIsRegistered) { + pCallback->SetRegistered(!!bIsRegistered); +} + +DLL(int32_t) BS_Callback_IsGameServer(BlitzCallback* pCallback) { + return pCallback->IsGameServer(); +} + +DLL(void) BS_Callback_SetGameServer(BlitzCallback* pCallback, int32_t bIsGameServer) { + pCallback->SetGameServer(!!bIsGameServer); +} + +DLL(void) BS_Callback_Register(BlitzCallback* pCallback, uint32_t iCallback) { + pCallback->Register(iCallback); +} + +DLL(void) BS_Callback_Unregister(BlitzCallback* pCallback) { + pCallback->Unregister(); +} + +DLL(void) BS_Callback_RegisterResult(BlitzCallback* pCallback, SteamAPICall_t* pSteamAPICall, uint32_t iCallback) { + pCallback->RegisterResult(*pSteamAPICall, iCallback); +} + +DLL(void) BS_Callback_UnregisterResult(BlitzCallback* pCallback) { + pCallback->UnregisterResult(); } \ No newline at end of file diff --git a/Types/BlitzCallback.h b/Types/BlitzCallback.h index 6709c9a..9425574 100644 --- a/Types/BlitzCallback.h +++ b/Types/BlitzCallback.h @@ -1,96 +1,96 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once - -#include "BlitzSteamInternal.h" -#include "../Helpers/BlitzPointer.h" - -#include -#include -#include - -class BlitzCallback : public CCallbackBase { - // Static Parts - public: - /// Initializes the CallbackSizes list for future use. - static void Initialize(); - static std::map Sizes; - - // Class Parts - public: - // Constructor - BlitzCallback(BP_BlitzFunction3_t pFunctionPointer); - // Destructor - ~BlitzCallback(); - - // Run - virtual void Run(void *pvParam); - virtual void Run(void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall); - - // Callback Size - virtual int GetCallbackSizeBytes(); - - // Accessors - void SetCallback(int32_t iCallback); - int32_t GetCallback(); - - void SetFunction(BP_BlitzFunction3_t pFunction); - BP_BlitzFunction3_t GetFunction(); - - bool IsRegistered(); - void SetRegistered(bool bIsRegistered); - - bool IsGameServer(); - void SetGameServer(bool bIsGameServer); - - // Registration in Steam - /// Register as Callback - void Register(uint32_t iCallback); - void Unregister(); - - /// Register as CallResult - void RegisterResult(SteamAPICall_t hSteamAPICall, uint32_t iCallback); - void UnregisterResult(); - - private: - /// Function to Call - BP_BlitzFunction3_t m_pFunctionPointer; - - /// Assigned SteamAPICall - SteamAPICall_t m_hSteamAPICall; -}; - -//----------------------------------------------------------------------------- -// C-Callables -//----------------------------------------------------------------------------- -DLL(BlitzCallback*) BS_Callback_New(BP_BlitzFunction3_t pFunctionPointer); -DLL(void) BS_Callback_Destroy(BlitzCallback* pCallback); - -DLL(int32_t) BS_Callback_GetCallbackSizeBytes(BlitzCallback* pCallback); -DLL(void) BS_Callback_SetCallback(BlitzCallback* pCallback, int32_t iCallback); -DLL(int32_t) BS_Callback_GetCallback(BlitzCallback* pCallback); -DLL(void) BS_Callback_SetFunction(BlitzCallback* pCallback, BP_BlitzFunction3_t pFunction); -DLL(BP_BlitzFunction3_t) BS_Callback_GetFunction(BlitzCallback* pCallback); -DLL(void) BS_Callback_SetRegistered(BlitzCallback* pCallback, int32_t bIsRegistered); -DLL(int32_t) BS_Callback_IsRegistered(BlitzCallback* pCallback); -DLL(void) BS_Callback_SetGameServer(BlitzCallback* pCallback, int32_t bIsGameServer); -DLL(int32_t) BS_Callback_IsGameServer(BlitzCallback* pCallback); - -DLL(void) BS_Callback_Register(BlitzCallback* pCallback, uint32_t iCallback); -DLL(void) BS_Callback_Unregister(BlitzCallback* pCallback); -DLL(void) BS_Callback_RegisterResult(BlitzCallback* pCallback, SteamAPICall_t* pSteamAPICall, uint32_t iCallback); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once + +#include "BlitzSteamInternal.h" +#include "../Helpers/BlitzPointer.h" + +#include +#include +#include + +class BlitzCallback : public CCallbackBase { + // Static Parts + public: + /// Initializes the CallbackSizes list for future use. + static void Initialize(); + static std::map Sizes; + + // Class Parts + public: + // Constructor + BlitzCallback(BP_BlitzFunction3_t pFunctionPointer); + // Destructor + ~BlitzCallback(); + + // Run + virtual void Run(void *pvParam); + virtual void Run(void *pvParam, bool bIOFailure, SteamAPICall_t hSteamAPICall); + + // Callback Size + virtual int GetCallbackSizeBytes(); + + // Accessors + void SetCallback(int32_t iCallback); + int32_t GetCallback(); + + void SetFunction(BP_BlitzFunction3_t pFunction); + BP_BlitzFunction3_t GetFunction(); + + bool IsRegistered(); + void SetRegistered(bool bIsRegistered); + + bool IsGameServer(); + void SetGameServer(bool bIsGameServer); + + // Registration in Steam + /// Register as Callback + void Register(uint32_t iCallback); + void Unregister(); + + /// Register as CallResult + void RegisterResult(SteamAPICall_t hSteamAPICall, uint32_t iCallback); + void UnregisterResult(); + + private: + /// Function to Call + BP_BlitzFunction3_t m_pFunctionPointer; + + /// Assigned SteamAPICall + SteamAPICall_t m_hSteamAPICall; +}; + +//----------------------------------------------------------------------------- +// C-Callables +//----------------------------------------------------------------------------- +DLL(BlitzCallback*) BS_Callback_New(BP_BlitzFunction3_t pFunctionPointer); +DLL(void) BS_Callback_Destroy(BlitzCallback* pCallback); + +DLL(int32_t) BS_Callback_GetCallbackSizeBytes(BlitzCallback* pCallback); +DLL(void) BS_Callback_SetCallback(BlitzCallback* pCallback, int32_t iCallback); +DLL(int32_t) BS_Callback_GetCallback(BlitzCallback* pCallback); +DLL(void) BS_Callback_SetFunction(BlitzCallback* pCallback, BP_BlitzFunction3_t pFunction); +DLL(BP_BlitzFunction3_t) BS_Callback_GetFunction(BlitzCallback* pCallback); +DLL(void) BS_Callback_SetRegistered(BlitzCallback* pCallback, int32_t bIsRegistered); +DLL(int32_t) BS_Callback_IsRegistered(BlitzCallback* pCallback); +DLL(void) BS_Callback_SetGameServer(BlitzCallback* pCallback, int32_t bIsGameServer); +DLL(int32_t) BS_Callback_IsGameServer(BlitzCallback* pCallback); + +DLL(void) BS_Callback_Register(BlitzCallback* pCallback, uint32_t iCallback); +DLL(void) BS_Callback_Unregister(BlitzCallback* pCallback); +DLL(void) BS_Callback_RegisterResult(BlitzCallback* pCallback, SteamAPICall_t* pSteamAPICall, uint32_t iCallback); DLL(void) BS_Callback_UnregisterResult(BlitzCallback* pCallback); \ No newline at end of file diff --git a/Types/CSteamID.cpp b/Types/CSteamID.cpp index c06f7dc..39b1e0e 100644 --- a/Types/CSteamID.cpp +++ b/Types/CSteamID.cpp @@ -1,169 +1,172 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "CSteamID.h" - -DLL(CSteamID*) BS_CSteamID_New() { - return new CSteamID(); -} - -DLL(CSteamID*) BS_CSteamID_Copy(CSteamID* pOther) { - return new CSteamID(*pOther); -} - -DLL(void) BS_CSteamID_Destroy(CSteamID* pThis) { - delete pThis; -} - -DLL(CSteamID*) BS_CSteamID_New_IdUniverseType(AccountID_t iAccountId, EUniverse eUniverse, EAccountType eAccountType) { - return new CSteamID(iAccountId, eUniverse, eAccountType); -} - -DLL(CSteamID*) BS_CSteamID_New_IdInstanceUniverseType(AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType) { - return new CSteamID(iAccountId, iInstance, eUniverse, eAccountType); -} - -DLL(CSteamID*) BS_CSteamID_FromL(int64_t* pOther) { - return new CSteamID((uint64_t)*pOther); -} - -DLL(int64_t*) BS_CSteamID_ToL(CSteamID* pThis) { - return new int64_t(pThis->ConvertToUint64()); -} - -DLL(void) BS_CSteamID_Set(CSteamID* pThis, AccountID_t iAccountID, EUniverse eUniverse, EAccountType eAccountType) { - pThis->Set(iAccountID, eUniverse, eAccountType); -} - -DLL(void) BS_CSteamID_InstancedSet(CSteamID* pThis, AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType) { - pThis->InstancedSet(iAccountId, iInstance, eUniverse, eAccountType); -} - -DLL(void) BS_CSteamID_FullSet(CSteamID* pThis, int64_t* plIdentifier, EUniverse eUniverse, EAccountType eAccountType) { - pThis->FullSet(*plIdentifier, eUniverse, eAccountType); -} - -DLL(void) BS_CSteamID_SetFromLong(CSteamID* pThis, int64_t* plSteamID) { - pThis->SetFromUint64(*plSteamID); -} - -DLL(void) BS_CSteamID_Clear(CSteamID* pThis) { - pThis->Clear(); -} - -DLL(int64_t*) BS_CSteamID_GetStaticAccountKey(CSteamID* pThis) { - return new int64_t(pThis->GetStaticAccountKey()); -} - -DLL(void) BS_CSteamID_CreateBlankAnonLogon(CSteamID* pThis, EUniverse eUniverse) { - pThis->CreateBlankAnonLogon(eUniverse); -} - -DLL(void) BS_CSteamID_CreateBlankAnonUserLogon(CSteamID* pThis, EUniverse eUniverse) { - pThis->CreateBlankAnonUserLogon(eUniverse); -} - -DLL(int32_t) BS_CSteamID_IsBlankAnonAccount(CSteamID* pThis) { - return pThis->BBlankAnonAccount(); -} - -DLL(int32_t) BS_CSteamID_IsGameServerAccount(CSteamID* pThis) { - return pThis->BGameServerAccount(); -} - -DLL(int32_t) BS_CSteamID_IsPersistentGameServerAccount(CSteamID* pThis) { - return pThis->BPersistentGameServerAccount(); -} - -DLL(int32_t) BS_CSteamID_IsAnonGameServerAccount(CSteamID* pThis) { - return pThis->BAnonGameServerAccount(); -} - -DLL(int32_t) BS_CSteamID_IsContentServerAccount(CSteamID* pThis) { - return pThis->BContentServerAccount(); -} - -DLL(int32_t) BS_CSteamID_IsClanAccount(CSteamID* pThis) { - return pThis->BClanAccount(); -} - -DLL(int32_t) BS_CSteamID_IsChatAccount(CSteamID* pThis) { - return pThis->BChatAccount(); -} - -DLL(int32_t) BS_CSteamID_IsLobby(CSteamID* pThis) { - return pThis->IsLobby(); -} - -DLL(int32_t) BS_CSteamID_IsIndividualAccount(CSteamID* pThis) { - return pThis->BIndividualAccount(); -} - -DLL(int32_t) BS_CSteamID_IsAnonAccount(CSteamID* pThis) { - return pThis->BAnonAccount(); -} - -DLL(int32_t) BS_CSteamID_IsAnonUserAccount(CSteamID* pThis) { - return pThis->BAnonUserAccount(); -} - -DLL(int32_t) BS_CSteamID_IsConsoleUserAccount(CSteamID* pThis) { - return pThis->BConsoleUserAccount(); -} - -DLL(void) BS_CSteamID_SetAccountID(CSteamID* pThis, AccountID_t iAccountId) { - pThis->SetAccountID(iAccountId); -} - -DLL(AccountID_t) BS_CSteamID_GetAccountID(CSteamID* pThis) { - return pThis->GetAccountID(); -} - -DLL(void) BS_CSteamID_SetAccountInstance(CSteamID* pThis, uint32_t iInstance) { - pThis->SetAccountInstance(iInstance); -} - -DLL(void) BS_CSteamID_ClearIndividualInstance(CSteamID* pThis) { - pThis->ClearIndividualInstance(); -} - -DLL(int32_t) BS_CSteamID_HasNoIndividualInstance(CSteamID* pThis) { - return pThis->HasNoIndividualInstance(); -} - -DLL(uint32_t) BS_CSteamID_GetAccountInstance(CSteamID* pThis) { - return pThis->GetUnAccountInstance(); -} - -DLL(EAccountType) BS_CSteamID_GetEAccountType(CSteamID* pThis) { - return pThis->GetEAccountType(); -} - -DLL(void) BS_CSteamID_SetEUniverse(CSteamID* pThis, EUniverse eUniverse) { - pThis->SetEUniverse(eUniverse); -} - -DLL(EUniverse) BS_CSteamID_GetEUniverse(CSteamID* pThis) { - return pThis->GetEUniverse(); -} - -DLL(int32_t) BS_CSteamID_Compare(CSteamID* pThis, CSteamID* pOther) { - return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ - /* Greater */ - (*pThis > *pOther ? 1 : 0) + - /* Smaller */ - (*pThis < *pOther ? -1 : 0); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "CSteamID.h" + +DLL(CSteamID*) BS_CSteamID_New() { + return new CSteamID(); +} + +DLL(CSteamID*) BS_CSteamID_Copy(CSteamID* pOther) { + return new CSteamID(*pOther); +} + +DLL(void) BS_CSteamID_Destroy(CSteamID* pThis) { + delete pThis; +} + +DLL(CSteamID*) BS_CSteamID_New_IdUniverseType(AccountID_t iAccountId, EUniverse eUniverse, EAccountType eAccountType) { + return new CSteamID(iAccountId, eUniverse, eAccountType); +} + +DLL(CSteamID*) BS_CSteamID_New_IdInstanceUniverseType(AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType) { + return new CSteamID(iAccountId, iInstance, eUniverse, eAccountType); +} + +DLL(CSteamID*) BS_CSteamID_FromL(int64_t* pOther) { + return new CSteamID((uint64_t)*pOther); +} + +DLL(int64_t*) BS_CSteamID_ToL(CSteamID* pThis) { + return new int64_t(pThis->ConvertToUint64()); +} + +DLL(void) BS_CSteamID_Set(CSteamID* pThis, AccountID_t iAccountID, EUniverse eUniverse, EAccountType eAccountType) { + pThis->Set(iAccountID, eUniverse, eAccountType); +} + +DLL(void) BS_CSteamID_InstancedSet(CSteamID* pThis, AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType) { + pThis->InstancedSet(iAccountId, iInstance, eUniverse, eAccountType); +} + +DLL(void) BS_CSteamID_FullSet(CSteamID* pThis, int64_t* plIdentifier, EUniverse eUniverse, EAccountType eAccountType) { + pThis->FullSet(*plIdentifier, eUniverse, eAccountType); +} + +DLL(void) BS_CSteamID_SetFromLong(CSteamID* pThis, int64_t* plSteamID) { + pThis->SetFromUint64(*plSteamID); +} + +DLL(void) BS_CSteamID_Clear(CSteamID* pThis) { + pThis->Clear(); +} + +DLL(int64_t*) BS_CSteamID_GetStaticAccountKey(CSteamID* pThis) { + return new int64_t(pThis->GetStaticAccountKey()); +} + +DLL(void) BS_CSteamID_CreateBlankAnonLogon(CSteamID* pThis, EUniverse eUniverse) { + pThis->CreateBlankAnonLogon(eUniverse); +} + +DLL(void) BS_CSteamID_CreateBlankAnonUserLogon(CSteamID* pThis, EUniverse eUniverse) { + pThis->CreateBlankAnonUserLogon(eUniverse); +} + +DLL(int32_t) BS_CSteamID_IsBlankAnonAccount(CSteamID* pThis) { + return pThis->BBlankAnonAccount(); +} + +DLL(int32_t) BS_CSteamID_IsGameServerAccount(CSteamID* pThis) { + return pThis->BGameServerAccount(); +} + +DLL(int32_t) BS_CSteamID_IsPersistentGameServerAccount(CSteamID* pThis) { + return pThis->BPersistentGameServerAccount(); +} + +DLL(int32_t) BS_CSteamID_IsAnonGameServerAccount(CSteamID* pThis) { + return pThis->BAnonGameServerAccount(); +} + +DLL(int32_t) BS_CSteamID_IsContentServerAccount(CSteamID* pThis) { + return pThis->BContentServerAccount(); +} + +DLL(int32_t) BS_CSteamID_IsClanAccount(CSteamID* pThis) { + return pThis->BClanAccount(); +} + +DLL(int32_t) BS_CSteamID_IsChatAccount(CSteamID* pThis) { + return pThis->BChatAccount(); +} + +DLL(int32_t) BS_CSteamID_IsLobby(CSteamID* pThis) { + return pThis->IsLobby(); +} + +DLL(int32_t) BS_CSteamID_IsIndividualAccount(CSteamID* pThis) { + return pThis->BIndividualAccount(); +} + +DLL(int32_t) BS_CSteamID_IsAnonAccount(CSteamID* pThis) { + return pThis->BAnonAccount(); +} + +DLL(int32_t) BS_CSteamID_IsAnonUserAccount(CSteamID* pThis) { + return pThis->BAnonUserAccount(); +} + +DLL(int32_t) BS_CSteamID_IsConsoleUserAccount(CSteamID* pThis) { + return pThis->BConsoleUserAccount(); +} + +DLL(void) BS_CSteamID_SetAccountID(CSteamID* pThis, AccountID_t iAccountId) { + pThis->SetAccountID(iAccountId); +} + +DLL(AccountID_t) BS_CSteamID_GetAccountID(CSteamID* pThis) { + return pThis->GetAccountID(); +} + +DLL(void) BS_CSteamID_SetAccountInstance(CSteamID* pThis, uint32_t iInstance) { + pThis->SetAccountInstance(iInstance); +} + +DLL(void) BS_CSteamID_ClearIndividualInstance(CSteamID* pThis) { + pThis->ClearIndividualInstance(); +} + +DLL(int32_t) BS_CSteamID_HasNoIndividualInstance(CSteamID* pThis) { + return pThis->HasNoIndividualInstance(); +} + +DLL(uint32_t) BS_CSteamID_GetAccountInstance(CSteamID* pThis) { + return pThis->GetUnAccountInstance(); +} + +DLL(EAccountType) BS_CSteamID_GetEAccountType(CSteamID* pThis) { + return pThis->GetEAccountType(); +} + +DLL(void) BS_CSteamID_SetEUniverse(CSteamID* pThis, EUniverse eUniverse) { + pThis->SetEUniverse(eUniverse); +} + +DLL(EUniverse) BS_CSteamID_GetEUniverse(CSteamID* pThis) { + return pThis->GetEUniverse(); +} + +DLL(int32_t) BS_CSteamID_Compare(CSteamID* pThis, CSteamID* pOther) { + if ((pThis == nullptr) || (pOther == nullptr)) + return -1; + + return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ + /* Greater */ + (*pThis > *pOther ? 1 : 0) + + /* Smaller */ + (*pThis < *pOther ? -1 : 0); } \ No newline at end of file diff --git a/Types/CSteamID.h b/Types/CSteamID.h index 38c2805..4974715 100644 --- a/Types/CSteamID.h +++ b/Types/CSteamID.h @@ -1,179 +1,179 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteamInternal.h" - -//----------------------------------------------------------------------------- -// Purpose: Constructor -//----------------------------------------------------------------------------- -DLL(CSteamID*) BS_CSteamID_New(); -DLL(CSteamID*) BS_CSteamID_Copy(CSteamID* pOther); -DLL(void) BS_CSteamID_Destroy(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Constructor -// Input : unAccountID - 32-bit account ID -// eUniverse - Universe this account belongs to -// eAccountType - Type of account -//----------------------------------------------------------------------------- -DLL(CSteamID*) BS_CSteamID_New_IdUniverseType(AccountID_t iAccountId, EUniverse eUniverse, EAccountType eAccountType); - -//----------------------------------------------------------------------------- -// Purpose: Constructor -// Input : unAccountID - 32-bit account ID -// unAccountInstance - instance -// eUniverse - Universe this account belongs to -// eAccountType - Type of account -//----------------------------------------------------------------------------- -DLL(CSteamID*) BS_CSteamID_New_IdInstanceUniverseType(AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType); - -//----------------------------------------------------------------------------- -// Purpose: Constructor -// Input : ulSteamID - 64-bit representation of a Steam ID -// Note: Will not accept a uint32 or int32 as input, as that is a probable mistake. -// See the stubbed out overloads in the private: section for more info. -//----------------------------------------------------------------------------- -DLL(CSteamID*) BS_CSteamID_FromL(int64_t* pOther); -DLL(int64_t*) BS_CSteamID_ToL(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Sets parameters for steam ID -// Input : unAccountID - 32-bit account ID -// eUniverse - Universe this account belongs to -// eAccountType - Type of account -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_Set(CSteamID* pThis, AccountID_t iAccountID, EUniverse eUniverse, EAccountType eAccountType); - -//----------------------------------------------------------------------------- -// Purpose: Sets parameters for steam ID -// Input : unAccountID - 32-bit account ID -// eUniverse - Universe this account belongs to -// eAccountType - Type of account -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_InstancedSet(CSteamID* pThis, AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType); - -//----------------------------------------------------------------------------- -// Purpose: Initializes a steam ID from its 52 bit parts and universe/type -// Input : ulIdentifier - 52 bits of goodness -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_FullSet(CSteamID* pThis, int64_t* plIdentifier, EUniverse eUniverse, EAccountType eAccountType); - -//----------------------------------------------------------------------------- -// Purpose: Initializes a steam ID from its 64-bit representation -// Input : ulSteamID - 64-bit representation of a Steam ID -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_SetFromLong(CSteamID* pThis, int64_t* plSteamID); - -//----------------------------------------------------------------------------- -// Purpose: Clear all fields, leaving an invalid ID. -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_Clear(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Converts the static parts of a steam ID to a 64-bit representation. -// For multiseat accounts, all instances of that account will have the -// same static account key, so they can be grouped together by the static -// account key. -// Output : 64-bit static account key -//----------------------------------------------------------------------------- -DLL(int64_t*) BS_CSteamID_GetStaticAccountKey(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: create an anonymous game server login to be filled in by the AM -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_CreateBlankAnonLogon(CSteamID* pThis, EUniverse eUniverse); - -//----------------------------------------------------------------------------- -// Purpose: create an anonymous game server login to be filled in by the AM -//----------------------------------------------------------------------------- -DLL(void) BS_CSteamID_CreateBlankAnonUserLogon(CSteamID* pThis, EUniverse eUniverse); - -//----------------------------------------------------------------------------- -// Purpose: Is this an anonymous game server login that will be filled in? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsBlankAnonAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a game server account id? (Either persistent or anonymous) -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsGameServerAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a persistent (not anonymous) game server account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsPersistentGameServerAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this an anonymous game server account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsAnonGameServerAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a content server account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsContentServerAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a clan account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsClanAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a chat account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsChatAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a Lobby? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsLobby(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this an individual user account id? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsIndividualAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this an anonymous account? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsAnonAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this an anonymous user account? ( used to create an account or reset a password ) -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsAnonUserAccount(CSteamID* pThis); - -//----------------------------------------------------------------------------- -// Purpose: Is this a faked up Steam ID for a PSN friend account? -//----------------------------------------------------------------------------- -DLL(int32_t) BS_CSteamID_IsConsoleUserAccount(CSteamID* pThis); - -// simple accessors -DLL(void) BS_CSteamID_SetAccountID(CSteamID* pThis, AccountID_t iAccountId); -DLL(AccountID_t) BS_CSteamID_GetAccountID(CSteamID* pThis); - -DLL(void) BS_CSteamID_SetAccountInstance(CSteamID* pThis, uint32_t iInstance); -DLL(void) BS_CSteamID_ClearIndividualInstance(CSteamID* pThis); -DLL(int32_t) BS_CSteamID_HasNoIndividualInstance(CSteamID* pThis); -DLL(uint32_t) BS_CSteamID_GetAccountInstance(CSteamID* pThis); - -DLL(EAccountType) BS_CSteamID_GetEAccountType(CSteamID* pThis); - -DLL(void) BS_CSteamID_SetEUniverse(CSteamID* pThis, EUniverse eUniverse); -DLL(EUniverse) BS_CSteamID_GetEUniverse(CSteamID* pThis); - +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +DLL(CSteamID*) BS_CSteamID_New(); +DLL(CSteamID*) BS_CSteamID_Copy(CSteamID* pOther); +DLL(void) BS_CSteamID_Destroy(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : unAccountID - 32-bit account ID +// eUniverse - Universe this account belongs to +// eAccountType - Type of account +//----------------------------------------------------------------------------- +DLL(CSteamID*) BS_CSteamID_New_IdUniverseType(AccountID_t iAccountId, EUniverse eUniverse, EAccountType eAccountType); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : unAccountID - 32-bit account ID +// unAccountInstance - instance +// eUniverse - Universe this account belongs to +// eAccountType - Type of account +//----------------------------------------------------------------------------- +DLL(CSteamID*) BS_CSteamID_New_IdInstanceUniverseType(AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : ulSteamID - 64-bit representation of a Steam ID +// Note: Will not accept a uint32 or int32 as input, as that is a probable mistake. +// See the stubbed out overloads in the private: section for more info. +//----------------------------------------------------------------------------- +DLL(CSteamID*) BS_CSteamID_FromL(int64_t* pOther); +DLL(int64_t*) BS_CSteamID_ToL(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Sets parameters for steam ID +// Input : unAccountID - 32-bit account ID +// eUniverse - Universe this account belongs to +// eAccountType - Type of account +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_Set(CSteamID* pThis, AccountID_t iAccountID, EUniverse eUniverse, EAccountType eAccountType); + +//----------------------------------------------------------------------------- +// Purpose: Sets parameters for steam ID +// Input : unAccountID - 32-bit account ID +// eUniverse - Universe this account belongs to +// eAccountType - Type of account +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_InstancedSet(CSteamID* pThis, AccountID_t iAccountId, uint32_t iInstance, EUniverse eUniverse, EAccountType eAccountType); + +//----------------------------------------------------------------------------- +// Purpose: Initializes a steam ID from its 52 bit parts and universe/type +// Input : ulIdentifier - 52 bits of goodness +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_FullSet(CSteamID* pThis, int64_t* plIdentifier, EUniverse eUniverse, EAccountType eAccountType); + +//----------------------------------------------------------------------------- +// Purpose: Initializes a steam ID from its 64-bit representation +// Input : ulSteamID - 64-bit representation of a Steam ID +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_SetFromLong(CSteamID* pThis, int64_t* plSteamID); + +//----------------------------------------------------------------------------- +// Purpose: Clear all fields, leaving an invalid ID. +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_Clear(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Converts the static parts of a steam ID to a 64-bit representation. +// For multiseat accounts, all instances of that account will have the +// same static account key, so they can be grouped together by the static +// account key. +// Output : 64-bit static account key +//----------------------------------------------------------------------------- +DLL(int64_t*) BS_CSteamID_GetStaticAccountKey(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: create an anonymous game server login to be filled in by the AM +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_CreateBlankAnonLogon(CSteamID* pThis, EUniverse eUniverse); + +//----------------------------------------------------------------------------- +// Purpose: create an anonymous game server login to be filled in by the AM +//----------------------------------------------------------------------------- +DLL(void) BS_CSteamID_CreateBlankAnonUserLogon(CSteamID* pThis, EUniverse eUniverse); + +//----------------------------------------------------------------------------- +// Purpose: Is this an anonymous game server login that will be filled in? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsBlankAnonAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a game server account id? (Either persistent or anonymous) +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsGameServerAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a persistent (not anonymous) game server account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsPersistentGameServerAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this an anonymous game server account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsAnonGameServerAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a content server account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsContentServerAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a clan account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsClanAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a chat account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsChatAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a Lobby? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsLobby(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this an individual user account id? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsIndividualAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this an anonymous account? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsAnonAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this an anonymous user account? ( used to create an account or reset a password ) +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsAnonUserAccount(CSteamID* pThis); + +//----------------------------------------------------------------------------- +// Purpose: Is this a faked up Steam ID for a PSN friend account? +//----------------------------------------------------------------------------- +DLL(int32_t) BS_CSteamID_IsConsoleUserAccount(CSteamID* pThis); + +// simple accessors +DLL(void) BS_CSteamID_SetAccountID(CSteamID* pThis, AccountID_t iAccountId); +DLL(AccountID_t) BS_CSteamID_GetAccountID(CSteamID* pThis); + +DLL(void) BS_CSteamID_SetAccountInstance(CSteamID* pThis, uint32_t iInstance); +DLL(void) BS_CSteamID_ClearIndividualInstance(CSteamID* pThis); +DLL(int32_t) BS_CSteamID_HasNoIndividualInstance(CSteamID* pThis); +DLL(uint32_t) BS_CSteamID_GetAccountInstance(CSteamID* pThis); + +DLL(EAccountType) BS_CSteamID_GetEAccountType(CSteamID* pThis); + +DLL(void) BS_CSteamID_SetEUniverse(CSteamID* pThis, EUniverse eUniverse); +DLL(EUniverse) BS_CSteamID_GetEUniverse(CSteamID* pThis); + DLL(int32_t) BS_CSteamID_Compare(CSteamID* pThis, CSteamID* pOther); \ No newline at end of file diff --git a/Types/Double.cpp b/Types/Double.cpp index 4c1a4ab..263aad0 100644 --- a/Types/Double.cpp +++ b/Types/Double.cpp @@ -1,122 +1,125 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "Long.h" - -DLL(double_t*) BS_Double_New() { - return new double_t; -} -DLL(double_t*) BS_Double_Copy(double_t* pOther) { - return new double_t(*pOther); -} -DLL(void) BS_Double_Destroy(double_t* pThis) { - delete pThis; -} - -char* BS_Double_Buffer = new char[32]; -DLL(const char*) BS_Double_ToString(double_t* pThis) { - std::stringstream myStream; - myStream << (*pThis); - - const char* myBuffer = myStream.str().c_str(); - strcpy_s(BS_Double_Buffer, 32, myBuffer); - return BS_Double_Buffer; -} -DLL(double_t*) BS_Double_FromString(const char* pString) { - double_t* pThis = new double_t; - std::stringstream myStream = std::stringstream(pString); - myStream >> *pThis; - return pThis; -} - -DLL(double_t*) BS_Double_FromF(float_t fOther) { - return new double_t(fOther); -} -DLL(float_t) BS_Double_ToF(double_t* pThis) { - return (float_t)*pThis; -} - -DLL(double_t*) BS_Double_FromI(int32_t iOther) { - return new double_t(iOther); -} -DLL(int32_t) BS_Double_ToI(double_t* pThis) { - return (int32_t)*pThis; -} - -DLL(double_t*) BS_Double_FromL(int64_t* pOther) { - return new double_t((double_t)*pOther); -} -DLL(int64_t*) BS_Double_ToL(double_t* pThis) { - return new int64_t((int64_t)*pThis); -} - -DLL(int32_t) BS_Double_Compare(double_t* pThis, double_t* pOther) { - return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ - /* Greater */ - (*pThis > *pOther ? 1 : 0) + - /* Smaller */ - (*pThis < *pOther ? -1 : 0); -} - -DLL(double_t*) BS_Double_Set(double_t* pThis, double_t* pOther) { - *pThis = *pOther; - return pThis; -} -DLL(double_t*) BS_Double_Add(double_t* pThis, double_t* pOther) { - *pThis += *pOther; - return pThis; -} -DLL(double_t*) BS_Double_Sub(double_t* pThis, double_t* pOther) { - *pThis -= *pOther; - return pThis; -} -DLL(double_t*) BS_Double_Div(double_t* pThis, double_t* pOther) { - *pThis /= *pOther; - return pThis; -} -DLL(double_t*) BS_Double_Mul(double_t* pThis, double_t* pOther) { - *pThis *= *pOther; - return pThis; -} -DLL(double_t*) BS_Double_Mod(double_t* pThis, double_t* pOther) { - *pThis = fmod(*pThis, *pOther); - return pThis; -} - -DLL(double_t*) BS_Double_SetF(double_t* pThis, float_t fOther) { - *pThis = fOther; - return pThis; -} -DLL(double_t*) BS_Double_AddF(double_t* pThis, float_t fOther) { - *pThis += fOther; - return pThis; -} -DLL(double_t*) BS_Double_SubF(double_t* pThis, float_t fOther) { - *pThis -= fOther; - return pThis; -} -DLL(double_t*) BS_Double_DivF(double_t* pThis, float_t fOther) { - *pThis /= fOther; - return pThis; -} -DLL(double_t*) BS_Double_MulF(double_t* pThis, float_t fOther) { - *pThis *= fOther; - return pThis; -} -DLL(double_t*) BS_Double_ModF(double_t* pThis, float_t fOther) { - *pThis = fmod(*pThis, fOther); - return pThis; +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "Long.h" + +DLL(double_t*) BS_Double_New() { + return new double_t; +} +DLL(double_t*) BS_Double_Copy(double_t* pOther) { + return new double_t(*pOther); +} +DLL(void) BS_Double_Destroy(double_t* pThis) { + delete pThis; +} + +char* BS_Double_Buffer = new char[32]; +DLL(const char*) BS_Double_ToString(double_t* pThis) { + std::stringstream myStream; + myStream << (*pThis); + + const char* myBuffer = myStream.str().c_str(); + strcpy_s(BS_Double_Buffer, 32, myBuffer); + return BS_Double_Buffer; +} +DLL(double_t*) BS_Double_FromString(const char* pString) { + double_t* pThis = new double_t; + std::stringstream myStream = std::stringstream(pString); + myStream >> *pThis; + return pThis; +} + +DLL(double_t*) BS_Double_FromF(float_t fOther) { + return new double_t(fOther); +} +DLL(float_t) BS_Double_ToF(double_t* pThis) { + return (float_t)*pThis; +} + +DLL(double_t*) BS_Double_FromI(int32_t iOther) { + return new double_t(iOther); +} +DLL(int32_t) BS_Double_ToI(double_t* pThis) { + return (int32_t)*pThis; +} + +DLL(double_t*) BS_Double_FromL(int64_t* pOther) { + return new double_t((double_t)*pOther); +} +DLL(int64_t*) BS_Double_ToL(double_t* pThis) { + return new int64_t((int64_t)*pThis); +} + +DLL(int32_t) BS_Double_Compare(double_t* pThis, double_t* pOther) { + if ((pThis == nullptr) || (pOther == nullptr)) + return -1; + + return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ + /* Greater */ + (*pThis > *pOther ? 1 : 0) + + /* Smaller */ + (*pThis < *pOther ? -1 : 0); +} + +DLL(double_t*) BS_Double_Set(double_t* pThis, double_t* pOther) { + *pThis = *pOther; + return pThis; +} +DLL(double_t*) BS_Double_Add(double_t* pThis, double_t* pOther) { + *pThis += *pOther; + return pThis; +} +DLL(double_t*) BS_Double_Sub(double_t* pThis, double_t* pOther) { + *pThis -= *pOther; + return pThis; +} +DLL(double_t*) BS_Double_Div(double_t* pThis, double_t* pOther) { + *pThis /= *pOther; + return pThis; +} +DLL(double_t*) BS_Double_Mul(double_t* pThis, double_t* pOther) { + *pThis *= *pOther; + return pThis; +} +DLL(double_t*) BS_Double_Mod(double_t* pThis, double_t* pOther) { + *pThis = fmod(*pThis, *pOther); + return pThis; +} + +DLL(double_t*) BS_Double_SetF(double_t* pThis, float_t fOther) { + *pThis = fOther; + return pThis; +} +DLL(double_t*) BS_Double_AddF(double_t* pThis, float_t fOther) { + *pThis += fOther; + return pThis; +} +DLL(double_t*) BS_Double_SubF(double_t* pThis, float_t fOther) { + *pThis -= fOther; + return pThis; +} +DLL(double_t*) BS_Double_DivF(double_t* pThis, float_t fOther) { + *pThis /= fOther; + return pThis; +} +DLL(double_t*) BS_Double_MulF(double_t* pThis, float_t fOther) { + *pThis *= fOther; + return pThis; +} +DLL(double_t*) BS_Double_ModF(double_t* pThis, float_t fOther) { + *pThis = fmod(*pThis, fOther); + return pThis; } \ No newline at end of file diff --git a/Types/Double.h b/Types/Double.h index 80f120e..a581375 100644 --- a/Types/Double.h +++ b/Types/Double.h @@ -1,51 +1,51 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteamInternal.h" -#include - -DLL(double_t*) BS_Double_New(); -DLL(double_t*) BS_Double_Copy(double_t* pRight); -DLL(void) BS_Double_Destroy(double_t* pThis); - -DLL(const char*) BS_Double_ToString(double_t* pThis); -DLL(double_t*) BS_Double_FromString(const char* pString); - -DLL(double_t*) BS_Double_FromF(float_t fOther); -DLL(float_t) BS_Double_ToF(double_t* pThis); - -DLL(double_t*) BS_Double_FromI(int32_t iOther); -DLL(int32_t) BS_Double_ToI(double_t* pThis); - -DLL(double_t*) BS_Double_FromL(int64_t* pOther); -DLL(int64_t*) BS_Double_ToL(double_t* pThis); - -DLL(int32_t) BS_Double_Compare(double_t* pThis, double_t* pOther); - -DLL(double_t*) BS_Double_Set(double_t* pThis, double_t* pOther); -DLL(double_t*) BS_Double_Add(double_t* pThis, double_t* pOther); -DLL(double_t*) BS_Double_Sub(double_t* pThis, double_t* pOther); -DLL(double_t*) BS_Double_Div(double_t* pThis, double_t* pOther); -DLL(double_t*) BS_Double_Mul(double_t* pThis, double_t* pOther); -DLL(double_t*) BS_Double_Mod(double_t* pThis, double_t* pOther); - -DLL(double_t*) BS_Double_SetF(double_t* pThis, float_t fOther); -DLL(double_t*) BS_Double_AddF(double_t* pThis, float_t fOther); -DLL(double_t*) BS_Double_SubF(double_t* pThis, float_t fOther); -DLL(double_t*) BS_Double_DivF(double_t* pThis, float_t fOther); -DLL(double_t*) BS_Double_MulF(double_t* pThis, float_t fOther); -DLL(double_t*) BS_Double_ModF(double_t* pThis, float_t fOther); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" +#include + +DLL(double_t*) BS_Double_New(); +DLL(double_t*) BS_Double_Copy(double_t* pRight); +DLL(void) BS_Double_Destroy(double_t* pThis); + +DLL(const char*) BS_Double_ToString(double_t* pThis); +DLL(double_t*) BS_Double_FromString(const char* pString); + +DLL(double_t*) BS_Double_FromF(float_t fOther); +DLL(float_t) BS_Double_ToF(double_t* pThis); + +DLL(double_t*) BS_Double_FromI(int32_t iOther); +DLL(int32_t) BS_Double_ToI(double_t* pThis); + +DLL(double_t*) BS_Double_FromL(int64_t* pOther); +DLL(int64_t*) BS_Double_ToL(double_t* pThis); + +DLL(int32_t) BS_Double_Compare(double_t* pThis, double_t* pOther); + +DLL(double_t*) BS_Double_Set(double_t* pThis, double_t* pOther); +DLL(double_t*) BS_Double_Add(double_t* pThis, double_t* pOther); +DLL(double_t*) BS_Double_Sub(double_t* pThis, double_t* pOther); +DLL(double_t*) BS_Double_Div(double_t* pThis, double_t* pOther); +DLL(double_t*) BS_Double_Mul(double_t* pThis, double_t* pOther); +DLL(double_t*) BS_Double_Mod(double_t* pThis, double_t* pOther); + +DLL(double_t*) BS_Double_SetF(double_t* pThis, float_t fOther); +DLL(double_t*) BS_Double_AddF(double_t* pThis, float_t fOther); +DLL(double_t*) BS_Double_SubF(double_t* pThis, float_t fOther); +DLL(double_t*) BS_Double_DivF(double_t* pThis, float_t fOther); +DLL(double_t*) BS_Double_MulF(double_t* pThis, float_t fOther); +DLL(double_t*) BS_Double_ModF(double_t* pThis, float_t fOther); diff --git a/Types/Long.cpp b/Types/Long.cpp index 4b01cb3..29b01ad 100644 --- a/Types/Long.cpp +++ b/Types/Long.cpp @@ -1,167 +1,170 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "Long.h" - -DLL(int64_t*) BS_Long_New() { - return new int64_t; -} -DLL(int64_t*) BS_Long_Copy(int64_t* pOther) { - return new int64_t(*pOther); -} -DLL(void) BS_Long_Destroy(int64_t* pThis) { - delete pThis; -} - -char* BS_Long_Buffer = new char[32]; -DLL(const char*) BS_Long_ToString(int64_t* pThis) { - std::stringstream myStream; - myStream << (*pThis); - - const char* myBuffer = myStream.str().c_str(); - strcpy_s(BS_Long_Buffer, 32, myBuffer); - return BS_Long_Buffer; -} -DLL(int64_t*) BS_Long_FromString(const char* pString) { - int64_t* pThis = new int64_t; - std::stringstream myStream = std::stringstream(pString); - myStream >> *pThis; - return pThis; -} - -DLL(int64_t*) BS_Long_FromI(int32_t iRight) { - return new int64_t(iRight); -} -DLL(int64_t*) BS_Long_FromII(int32_t iLeft, int32_t iRight) { - return new int64_t(((int64_t)(iLeft) << 32) + iRight); -} -DLL(int32_t) BS_Long_ToI(int64_t* pThis, int32_t iShift) { - if (iShift >= 0) - return (int32_t)(*pThis >> iShift); - else - return (int32_t)(*pThis << -iShift); -} -DLL(int32_t) BS_Long_ToIH(int64_t* pThis) { - return (int32_t)(*pThis >> 32); -} -DLL(int32_t) BS_Long_ToIL(int64_t* pThis) { - return (int32_t)*pThis; -} - -DLL(int64_t*) BS_Long_FromF(float_t fOther) { - return new int64_t((int64_t)fOther); -} -DLL(float_t) BS_Long_ToF(int64_t* pThis) { - return (float_t)*pThis; -} - -DLL(int64_t*) BS_Long_FromD(double_t* pOther) { - return new int64_t((int64_t)*pOther); -} -DLL(double_t*) BS_Long_ToD(int64_t* pThis) { - return new double_t((double_t)*pThis); -} - -DLL(int32_t) BS_Long_Compare(int64_t* pThis, int64_t* pOther) { - return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ - /* Greater */ - (*pThis > *pOther ? 1 : 0) + - /* Smaller */ - (*pThis < *pOther ? -1 : 0); -} - -DLL(int64_t*) BS_Long_Set(int64_t* pThis, int64_t* pOther) { - *pThis = *pOther; - return pThis; -} -DLL(int64_t*) BS_Long_Add(int64_t* pThis, int64_t* pOther) { - *pThis += *pOther; - return pThis; -} -DLL(int64_t*) BS_Long_Sub(int64_t* pThis, int64_t* pOther) { - *pThis -= *pOther; - return pThis; -} -DLL(int64_t*) BS_Long_Div(int64_t* pThis, int64_t* pOther) { - *pThis /= *pOther; - return pThis; -} -DLL(int64_t*) BS_Long_Mul(int64_t* pThis, int64_t* pOther) { - *pThis *= *pOther; - return pThis; -} -DLL(int64_t*) BS_Long_Mod(int64_t* pThis, int64_t* pOther) { - *pThis %= *pOther; - return pThis; -} - -DLL(int64_t*) BS_Long_SetI(int64_t* pThis, int32_t iRight) { - *pThis = iRight; - return pThis; -} -DLL(int64_t*) BS_Long_AddI(int64_t* pThis, int32_t iRight) { - *pThis += iRight; - return pThis; -} -DLL(int64_t*) BS_Long_SubI(int64_t* pThis, int32_t iRight) { - *pThis -= iRight; - return pThis; -} -DLL(int64_t*) BS_Long_DivI(int64_t* pThis, int32_t iRight) { - *pThis /= iRight; - return pThis; -} -DLL(int64_t*) BS_Long_MulI(int64_t* pThis, int32_t iRight) { - *pThis *= iRight; - return pThis; -} -DLL(int64_t*) BS_Long_ModI(int64_t* pThis, int32_t iRight) { - *pThis %= iRight; - return pThis; -} - -DLL(int64_t*) BS_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis = (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL(int64_t*) BS_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis += (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL(int64_t*) BS_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis -= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL(int64_t*) BS_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis /= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL(int64_t*) BS_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis *= (((int64_t)iLeft << 32) + iRight); - return pThis; -} -DLL(int64_t*) BS_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight) { - *pThis %= (((int64_t)iLeft << 32) + iRight); - return pThis; -} - -DLL(int64_t*) BS_Long_Shift(int64_t* pThis, int32_t iRight) { - if (iRight >= 0) - *pThis >>= iRight; - else - *pThis <<= -iRight; - return pThis; +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "Long.h" + +DLL(int64_t*) BS_Long_New() { + return new int64_t; +} +DLL(int64_t*) BS_Long_Copy(int64_t* pOther) { + return new int64_t(*pOther); +} +DLL(void) BS_Long_Destroy(int64_t* pThis) { + delete pThis; +} + +char* BS_Long_Buffer = new char[32]; +DLL(const char*) BS_Long_ToString(int64_t* pThis) { + std::stringstream myStream; + myStream << (*pThis); + + const char* myBuffer = myStream.str().c_str(); + strcpy_s(BS_Long_Buffer, 32, myBuffer); + return BS_Long_Buffer; +} +DLL(int64_t*) BS_Long_FromString(const char* pString) { + int64_t* pThis = new int64_t; + std::stringstream myStream = std::stringstream(pString); + myStream >> *pThis; + return pThis; +} + +DLL(int64_t*) BS_Long_FromI(int32_t iRight) { + return new int64_t(iRight); +} +DLL(int64_t*) BS_Long_FromII(int32_t iLeft, int32_t iRight) { + return new int64_t(((int64_t)(iLeft) << 32) + iRight); +} +DLL(int32_t) BS_Long_ToI(int64_t* pThis, int32_t iShift) { + if (iShift >= 0) + return (int32_t)(*pThis >> iShift); + else + return (int32_t)(*pThis << -iShift); +} +DLL(int32_t) BS_Long_ToIH(int64_t* pThis) { + return (int32_t)(*pThis >> 32); +} +DLL(int32_t) BS_Long_ToIL(int64_t* pThis) { + return (int32_t)*pThis; +} + +DLL(int64_t*) BS_Long_FromF(float_t fOther) { + return new int64_t((int64_t)fOther); +} +DLL(float_t) BS_Long_ToF(int64_t* pThis) { + return (float_t)*pThis; +} + +DLL(int64_t*) BS_Long_FromD(double_t* pOther) { + return new int64_t((int64_t)*pOther); +} +DLL(double_t*) BS_Long_ToD(int64_t* pThis) { + return new double_t((double_t)*pThis); +} + +DLL(int32_t) BS_Long_Compare(int64_t* pThis, int64_t* pOther) { + if ((pThis == nullptr) || (pOther == nullptr)) + return -1; + + return /* It can either be Equal (0) or Smaller or Greater. Easy to check. */ + /* Greater */ + (*pThis > *pOther ? 1 : 0) + + /* Smaller */ + (*pThis < *pOther ? -1 : 0); +} + +DLL(int64_t*) BS_Long_Set(int64_t* pThis, int64_t* pOther) { + *pThis = *pOther; + return pThis; +} +DLL(int64_t*) BS_Long_Add(int64_t* pThis, int64_t* pOther) { + *pThis += *pOther; + return pThis; +} +DLL(int64_t*) BS_Long_Sub(int64_t* pThis, int64_t* pOther) { + *pThis -= *pOther; + return pThis; +} +DLL(int64_t*) BS_Long_Div(int64_t* pThis, int64_t* pOther) { + *pThis /= *pOther; + return pThis; +} +DLL(int64_t*) BS_Long_Mul(int64_t* pThis, int64_t* pOther) { + *pThis *= *pOther; + return pThis; +} +DLL(int64_t*) BS_Long_Mod(int64_t* pThis, int64_t* pOther) { + *pThis %= *pOther; + return pThis; +} + +DLL(int64_t*) BS_Long_SetI(int64_t* pThis, int32_t iRight) { + *pThis = iRight; + return pThis; +} +DLL(int64_t*) BS_Long_AddI(int64_t* pThis, int32_t iRight) { + *pThis += iRight; + return pThis; +} +DLL(int64_t*) BS_Long_SubI(int64_t* pThis, int32_t iRight) { + *pThis -= iRight; + return pThis; +} +DLL(int64_t*) BS_Long_DivI(int64_t* pThis, int32_t iRight) { + *pThis /= iRight; + return pThis; +} +DLL(int64_t*) BS_Long_MulI(int64_t* pThis, int32_t iRight) { + *pThis *= iRight; + return pThis; +} +DLL(int64_t*) BS_Long_ModI(int64_t* pThis, int32_t iRight) { + *pThis %= iRight; + return pThis; +} + +DLL(int64_t*) BS_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis = (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL(int64_t*) BS_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis += (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL(int64_t*) BS_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis -= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL(int64_t*) BS_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis /= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL(int64_t*) BS_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis *= (((int64_t)iLeft << 32) + iRight); + return pThis; +} +DLL(int64_t*) BS_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight) { + *pThis %= (((int64_t)iLeft << 32) + iRight); + return pThis; +} + +DLL(int64_t*) BS_Long_Shift(int64_t* pThis, int32_t iRight) { + if (iRight >= 0) + *pThis >>= iRight; + else + *pThis <<= -iRight; + return pThis; } \ No newline at end of file diff --git a/Types/Long.h b/Types/Long.h index 1f114aa..ca8f5f9 100644 --- a/Types/Long.h +++ b/Types/Long.h @@ -1,63 +1,63 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteamInternal.h" -#include - -DLL(int64_t*) BS_Long_New(); -DLL(int64_t*) BS_Long_Copy(int64_t* pRight); -DLL(void) BS_Long_Destroy(int64_t* pThis); - -DLL(const char*) BS_Long_ToString(int64_t* pThis); -DLL(int64_t*) BS_Long_FromString(const char* pString); - -DLL(int64_t*) BS_Long_FromI(int32_t iRight); -DLL(int64_t*) BS_Long_FromII(int32_t iLeft, int32_t iRight); -DLL(int32_t) BS_Long_ToI(int64_t* pThis, int32_t iShift); -DLL(int32_t) BS_Long_ToIH(int64_t* pThis); -DLL(int32_t) BS_Long_ToIL(int64_t* pThis); - -DLL(int64_t*) BS_Long_FromF(float_t fOther); -DLL(float_t) BS_Long_ToF(int64_t* pThis); - -DLL(int64_t*) BS_Long_FromD(double_t* pOther); -DLL(double_t*) BS_Long_ToD(int64_t* pThis); - -DLL(int32_t) BS_Long_Compare(int64_t* pThis, int64_t* pOther); - -DLL(int64_t*) BS_Long_Set(int64_t* pThis, int64_t* pOther); -DLL(int64_t*) BS_Long_Add(int64_t* pThis, int64_t* pOther); -DLL(int64_t*) BS_Long_Sub(int64_t* pThis, int64_t* pOther); -DLL(int64_t*) BS_Long_Div(int64_t* pThis, int64_t* pOther); -DLL(int64_t*) BS_Long_Mul(int64_t* pThis, int64_t* pOther); -DLL(int64_t*) BS_Long_Mod(int64_t* pThis, int64_t* pOther); - -DLL(int64_t*) BS_Long_SetI(int64_t* pThis, int32_t iRight); -DLL(int64_t*) BS_Long_AddI(int64_t* pThis, int32_t iRight); -DLL(int64_t*) BS_Long_SubI(int64_t* pThis, int32_t iRight); -DLL(int64_t*) BS_Long_DivI(int64_t* pThis, int32_t iRight); -DLL(int64_t*) BS_Long_MulI(int64_t* pThis, int32_t iRight); -DLL(int64_t*) BS_Long_ModI(int64_t* pThis, int32_t iRight); - -DLL(int64_t*) BS_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL(int64_t*) BS_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL(int64_t*) BS_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL(int64_t*) BS_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL(int64_t*) BS_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight); -DLL(int64_t*) BS_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight); - +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" +#include + +DLL(int64_t*) BS_Long_New(); +DLL(int64_t*) BS_Long_Copy(int64_t* pRight); +DLL(void) BS_Long_Destroy(int64_t* pThis); + +DLL(const char*) BS_Long_ToString(int64_t* pThis); +DLL(int64_t*) BS_Long_FromString(const char* pString); + +DLL(int64_t*) BS_Long_FromI(int32_t iRight); +DLL(int64_t*) BS_Long_FromII(int32_t iLeft, int32_t iRight); +DLL(int32_t) BS_Long_ToI(int64_t* pThis, int32_t iShift); +DLL(int32_t) BS_Long_ToIH(int64_t* pThis); +DLL(int32_t) BS_Long_ToIL(int64_t* pThis); + +DLL(int64_t*) BS_Long_FromF(float_t fOther); +DLL(float_t) BS_Long_ToF(int64_t* pThis); + +DLL(int64_t*) BS_Long_FromD(double_t* pOther); +DLL(double_t*) BS_Long_ToD(int64_t* pThis); + +DLL(int32_t) BS_Long_Compare(int64_t* pThis, int64_t* pOther); + +DLL(int64_t*) BS_Long_Set(int64_t* pThis, int64_t* pOther); +DLL(int64_t*) BS_Long_Add(int64_t* pThis, int64_t* pOther); +DLL(int64_t*) BS_Long_Sub(int64_t* pThis, int64_t* pOther); +DLL(int64_t*) BS_Long_Div(int64_t* pThis, int64_t* pOther); +DLL(int64_t*) BS_Long_Mul(int64_t* pThis, int64_t* pOther); +DLL(int64_t*) BS_Long_Mod(int64_t* pThis, int64_t* pOther); + +DLL(int64_t*) BS_Long_SetI(int64_t* pThis, int32_t iRight); +DLL(int64_t*) BS_Long_AddI(int64_t* pThis, int32_t iRight); +DLL(int64_t*) BS_Long_SubI(int64_t* pThis, int32_t iRight); +DLL(int64_t*) BS_Long_DivI(int64_t* pThis, int32_t iRight); +DLL(int64_t*) BS_Long_MulI(int64_t* pThis, int32_t iRight); +DLL(int64_t*) BS_Long_ModI(int64_t* pThis, int32_t iRight); + +DLL(int64_t*) BS_Long_SetII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL(int64_t*) BS_Long_AddII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL(int64_t*) BS_Long_SubII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL(int64_t*) BS_Long_DivII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL(int64_t*) BS_Long_MulII(int64_t* pThis, int32_t iLeft, int32_t iRight); +DLL(int64_t*) BS_Long_ModII(int64_t* pThis, int32_t iLeft, int32_t iRight); + DLL(int64_t*) BS_Long_Shift(int64_t* pThis, int32_t iShift); \ No newline at end of file diff --git a/Types/Memory.cpp b/Types/Memory.cpp index 4eccc14..ff24ad1 100644 --- a/Types/Memory.cpp +++ b/Types/Memory.cpp @@ -1,77 +1,77 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "Memory.h" - -DLL(void*) BS_Memory_Alloc(uint32_t iSize) { - return malloc(iSize); -} - -DLL(void*) BS_Memory_ReAlloc(void* pMemory, uint32_t iNewSize) { - return realloc(pMemory, iNewSize); -} - -DLL(void) BS_Memory_Free(void* pMemory) { - free(pMemory); -} - -DLL(void) BS_Memory_PokeByte(void* pMemory, uint32_t offset, int8_t value) { - *((reinterpret_cast(pMemory) + offset)) = value; -} - -DLL(int32_t) BS_Memory_PeekByte(void* pMemory, uint32_t offset) { - return *(reinterpret_cast(pMemory) + offset); -} - -DLL(void) BS_Memory_PokeShort(void* pMemory, uint32_t offset, int16_t value) { - *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; -} - -DLL(int32_t) BS_Memory_PeekShort(void* pMemory, uint32_t offset) { - return *(int16_t*)(reinterpret_cast(pMemory) + offset); -} - -DLL(void) BS_Memory_PokeInt(void* pMemory, uint32_t offset, int32_t value) { - *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; -} - -DLL(int32_t) BS_Memory_PeekInt(void* pMemory, uint32_t offset) { - return *(int32_t*)(reinterpret_cast(pMemory) + offset); -} - -DLL(void) BS_Memory_PokeFloat(void* pMemory, uint32_t offset, float_t value) { - *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; -} - -DLL(float_t) BS_Memory_PeekFloat(void* pMemory, uint32_t offset) { - return *(float_t*)(reinterpret_cast(pMemory) + offset); -} - -DLL(void) BS_Memory_PokeLong(void* pMemory, uint32_t offset, int64_t* value) { - *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = *value; -} - -DLL(int64_t*) BS_Memory_PeekLong(void* pMemory, uint32_t offset) { - return new int64_t(*(reinterpret_cast(reinterpret_cast(pMemory) + offset))); -} - -DLL(void) BS_Memory_PokeDouble(void* pMemory, uint32_t offset, double_t* value) { - *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = *value; -} - -DLL(double_t*) BS_Memory_PeekDouble(void* pMemory, uint32_t offset) { - return new double_t(*(reinterpret_cast(reinterpret_cast(pMemory) + offset))); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "Memory.h" + +DLL(void*) BS_Memory_Alloc(uint32_t iSize) { + return malloc(iSize); +} + +DLL(void*) BS_Memory_ReAlloc(void* pMemory, uint32_t iNewSize) { + return realloc(pMemory, iNewSize); +} + +DLL(void) BS_Memory_Free(void* pMemory) { + free(pMemory); +} + +DLL(void) BS_Memory_PokeByte(void* pMemory, uint32_t offset, int8_t value) { + *((reinterpret_cast(pMemory) + offset)) = value; +} + +DLL(int32_t) BS_Memory_PeekByte(void* pMemory, uint32_t offset) { + return *(reinterpret_cast(pMemory) + offset); +} + +DLL(void) BS_Memory_PokeShort(void* pMemory, uint32_t offset, int16_t value) { + *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; +} + +DLL(int32_t) BS_Memory_PeekShort(void* pMemory, uint32_t offset) { + return *(int16_t*)(reinterpret_cast(pMemory) + offset); +} + +DLL(void) BS_Memory_PokeInt(void* pMemory, uint32_t offset, int32_t value) { + *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; +} + +DLL(int32_t) BS_Memory_PeekInt(void* pMemory, uint32_t offset) { + return *(int32_t*)(reinterpret_cast(pMemory) + offset); +} + +DLL(void) BS_Memory_PokeFloat(void* pMemory, uint32_t offset, float_t value) { + *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = value; +} + +DLL(float_t) BS_Memory_PeekFloat(void* pMemory, uint32_t offset) { + return *(float_t*)(reinterpret_cast(pMemory) + offset); +} + +DLL(void) BS_Memory_PokeLong(void* pMemory, uint32_t offset, int64_t* value) { + *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = *value; +} + +DLL(int64_t*) BS_Memory_PeekLong(void* pMemory, uint32_t offset) { + return new int64_t(*(reinterpret_cast(reinterpret_cast(pMemory) + offset))); +} + +DLL(void) BS_Memory_PokeDouble(void* pMemory, uint32_t offset, double_t* value) { + *(reinterpret_cast(reinterpret_cast(pMemory) + offset)) = *value; +} + +DLL(double_t*) BS_Memory_PeekDouble(void* pMemory, uint32_t offset) { + return new double_t(*(reinterpret_cast(reinterpret_cast(pMemory) + offset))); +} diff --git a/Types/Memory.h b/Types/Memory.h index f1e2742..db29c64 100644 --- a/Types/Memory.h +++ b/Types/Memory.h @@ -1,42 +1,42 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#pragma once -#include "BlitzSteamInternal.h" -#include - - -DLL(void*) BS_Memory_Alloc(uint32_t iSize); -DLL(void*) BS_Memory_ReAlloc(void* pMemory, uint32_t iNewSize); -DLL(void) BS_Memory_Free(void* pMemory); - -DLL(void) BS_Memory_PokeByte(void* pMemory, uint32_t offset, int8_t value); -DLL(int32_t) BS_Memory_PeekByte(void* pMemory, uint32_t offset); - -DLL(void) BS_Memory_PokeShort(void* pMemory, uint32_t offset, int16_t value); -DLL(int32_t) BS_Memory_PeekShort(void* pMemory, uint32_t offset); - -DLL(void) BS_Memory_PokeInt(void* pMemory, uint32_t offset, int32_t value); -DLL(int32_t) BS_Memory_PeekInt(void* pMemory, uint32_t offset); - -DLL(void) BS_Memory_PokeFloat(void* pMemory, uint32_t offset, float_t value); -DLL(float_t) BS_Memory_PeekFloat(void* pMemory, uint32_t offset); - -DLL(void) BS_Memory_PokeLong(void* pMemory, uint32_t offset, int64_t* value); -DLL(int64_t*) BS_Memory_PeekLong(void* pMemory, uint32_t offset); - -DLL(void) BS_Memory_PokeDouble(void* pMemory, uint32_t offset, double_t* value); -DLL(double_t*) BS_Memory_PeekDouble(void* pMemory, uint32_t offset); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" +#include + + +DLL(void*) BS_Memory_Alloc(uint32_t iSize); +DLL(void*) BS_Memory_ReAlloc(void* pMemory, uint32_t iNewSize); +DLL(void) BS_Memory_Free(void* pMemory); + +DLL(void) BS_Memory_PokeByte(void* pMemory, uint32_t offset, int8_t value); +DLL(int32_t) BS_Memory_PeekByte(void* pMemory, uint32_t offset); + +DLL(void) BS_Memory_PokeShort(void* pMemory, uint32_t offset, int16_t value); +DLL(int32_t) BS_Memory_PeekShort(void* pMemory, uint32_t offset); + +DLL(void) BS_Memory_PokeInt(void* pMemory, uint32_t offset, int32_t value); +DLL(int32_t) BS_Memory_PeekInt(void* pMemory, uint32_t offset); + +DLL(void) BS_Memory_PokeFloat(void* pMemory, uint32_t offset, float_t value); +DLL(float_t) BS_Memory_PeekFloat(void* pMemory, uint32_t offset); + +DLL(void) BS_Memory_PokeLong(void* pMemory, uint32_t offset, int64_t* value); +DLL(int64_t*) BS_Memory_PeekLong(void* pMemory, uint32_t offset); + +DLL(void) BS_Memory_PokeDouble(void* pMemory, uint32_t offset, double_t* value); +DLL(double_t*) BS_Memory_PeekDouble(void* pMemory, uint32_t offset); diff --git a/Types/SteamMatchmakingTypes.cpp b/Types/SteamMatchmakingTypes.cpp new file mode 100644 index 0000000..db5d577 --- /dev/null +++ b/Types/SteamMatchmakingTypes.cpp @@ -0,0 +1,271 @@ +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "SteamMatchmakingTypes.h" + +////////////////////////////////////////////////////////////////////////// +BlitzISteamMatchmakingServerListResponse::BlitzISteamMatchmakingServerListResponse(void* pData, BP_BlitzFunction3_t pServerResponded, + BP_BlitzFunction3_t pServerFailedToRespond, BP_BlitzFunction3_t pRefreshComplete) + : m_pData(pData), m_pServerResponded(pServerResponded), m_pServerFailedToRespond(pServerFailedToRespond), m_pRefreshComplete(pRefreshComplete) {} + +void BlitzISteamMatchmakingServerListResponse::ServerResponded(HServerListRequest hRequest, int iServer) { + if (this->m_pServerResponded != nullptr) + BP_CallFunction3(m_pServerResponded, reinterpret_cast(m_pData), reinterpret_cast(hRequest), iServer); +} + +void BlitzISteamMatchmakingServerListResponse::ServerFailedToRespond(HServerListRequest hRequest, int iServer) { + if (this->m_pServerFailedToRespond != nullptr) + BP_CallFunction3(m_pServerFailedToRespond, reinterpret_cast(m_pData), reinterpret_cast(hRequest), iServer); +} + +void BlitzISteamMatchmakingServerListResponse::RefreshComplete(HServerListRequest hRequest, EMatchMakingServerResponse response) { + if (this->m_pRefreshComplete != nullptr) + BP_CallFunction3(m_pRefreshComplete, reinterpret_cast(m_pData), reinterpret_cast(hRequest), static_cast(response)); +} + +DLL(BlitzISteamMatchmakingServerListResponse*) BS_ISteamMatchmakingServerListResponse_New(void* pData, BP_BlitzFunction3_t pServerResponded, BP_BlitzFunction3_t pServerFailedToRespond, BP_BlitzFunction3_t pRefreshComplete) { + return new BlitzISteamMatchmakingServerListResponse(pData, pServerResponded, pServerFailedToRespond, pRefreshComplete); +} + +DLL(void) BS_ISteamMatchmakingServerListResponse_Destroy(BlitzISteamMatchmakingServerListResponse* pThis) { + delete pThis; +} + +////////////////////////////////////////////////////////////////////////// +BlitzISteamMatchmakingPingResponse::BlitzISteamMatchmakingPingResponse(void* pData, BP_BlitzFunction2_t pServerResponded, BP_BlitzFunction1_t pServerFailedToRespond) + : m_pData(pData), m_pServerResponded(pServerResponded), m_pServerFailedToRespond(pServerFailedToRespond) {} + +void BlitzISteamMatchmakingPingResponse::ServerResponded(gameserveritem_t &server) { + if (this->m_pServerResponded != nullptr) + BP_CallFunction2(m_pServerResponded, reinterpret_cast(m_pData), reinterpret_cast(&server)); +} + +void BlitzISteamMatchmakingPingResponse::ServerFailedToRespond() { + if (this->m_pServerFailedToRespond != nullptr) + BP_CallFunction1(m_pServerFailedToRespond, reinterpret_cast(m_pData)); +} + +DLL(BlitzISteamMatchmakingPingResponse*) BS_ISteamMatchmakingPingResponse_New(void* pData, BP_BlitzFunction2_t pServerResponded, BP_BlitzFunction1_t pServerFailedToRespond) { + return new BlitzISteamMatchmakingPingResponse(pData, pServerResponded, pServerFailedToRespond); +} + +DLL(void) BS_ISteamMatchmakingPingResponse_Destroy(BlitzISteamMatchmakingPingResponse* pThis) { + delete pThis; +} + +////////////////////////////////////////////////////////////////////////// +BlitzISteamMatchmakingPlayersResponse::BlitzISteamMatchmakingPlayersResponse(void* pData, BP_BlitzFunction4_t pAddPlayerToList, BP_BlitzFunction1_t pPlayersFailedToRespond, BP_BlitzFunction1_t pPlayersRefreshComplete) + : m_pData(pData), m_pAddPlayerToList(pAddPlayerToList), m_pPlayersFailedToRespond(pPlayersFailedToRespond), m_pPlayersRefreshComplete(pPlayersRefreshComplete) {} + +void BlitzISteamMatchmakingPlayersResponse::AddPlayerToList(const char *pchName, int nScore, float flTimePlayed) { + if (m_pAddPlayerToList != nullptr) + BP_CallFunction4(m_pAddPlayerToList, reinterpret_cast(m_pData), reinterpret_cast(pchName), nScore, *reinterpret_cast(&flTimePlayed)); +} + +void BlitzISteamMatchmakingPlayersResponse::PlayersFailedToRespond() { + if (m_pPlayersFailedToRespond != nullptr) + BP_CallFunction1(m_pPlayersFailedToRespond, reinterpret_cast(m_pData)); +} + +void BlitzISteamMatchmakingPlayersResponse::PlayersRefreshComplete() { + if (m_pPlayersRefreshComplete != nullptr) + BP_CallFunction1(m_pPlayersRefreshComplete, reinterpret_cast(m_pData)); +} + +DLL(BlitzISteamMatchmakingPlayersResponse*) BS_ISteamMatchmakingPlayersResponse_New(void* pData, BP_BlitzFunction4_t pAddPlayerToList, BP_BlitzFunction1_t pPlayersFailedToRespond, BP_BlitzFunction1_t pPlayersRefreshComplete) { + return new BlitzISteamMatchmakingPlayersResponse(pData, pAddPlayerToList, pPlayersFailedToRespond, pPlayersRefreshComplete); +} + +DLL(void) BS_ISteamMatchmakingPlayersResponse_Destroy(BlitzISteamMatchmakingPlayersResponse* pThis) { + delete pThis; +} + +////////////////////////////////////////////////////////////////////////// +BlitzISteamMatchmakingRulesResponse::BlitzISteamMatchmakingRulesResponse(void* pData, BP_BlitzFunction3_t pRulesResponded, BP_BlitzFunction1_t pRulesFailedToRespond, BP_BlitzFunction1_t pRulesRefreshComplete) + : m_pData(pData), m_pRulesResponded(pRulesResponded), m_pRulesFailedToRespond(pRulesFailedToRespond), m_pRulesRefreshComplete(pRulesRefreshComplete) {} + +void BlitzISteamMatchmakingRulesResponse::RulesResponded(const char *pchRule, const char *pchValue) { + if (this->m_pRulesResponded != nullptr) + BP_CallFunction3(m_pRulesResponded, reinterpret_cast(m_pData), reinterpret_cast(pchRule), reinterpret_cast(pchValue)); +} + +void BlitzISteamMatchmakingRulesResponse::RulesFailedToRespond() { + if (this->m_pRulesFailedToRespond != nullptr) + BP_CallFunction1(m_pRulesFailedToRespond, reinterpret_cast(m_pData)); +} + +void BlitzISteamMatchmakingRulesResponse::RulesRefreshComplete() { + if (this->m_pRulesRefreshComplete != nullptr) + BP_CallFunction1(m_pRulesRefreshComplete, reinterpret_cast(m_pData)); +} + +DLL(BlitzISteamMatchmakingRulesResponse*) BS_ISteamMatchmakingRulesResponse_New(void* pData, BP_BlitzFunction3_t pRulesResponded, BP_BlitzFunction1_t pRulesFailedToRespond, BP_BlitzFunction1_t pRulesRefreshComplete) { + return new BlitzISteamMatchmakingRulesResponse(pData, pRulesResponded, pRulesFailedToRespond, pRulesRefreshComplete); +} + +DLL(void) BS_ISteamMatchmakingRulesResponse_Destroy(BlitzISteamMatchmakingRulesResponse* pThis) { + delete pThis; +} + +////////////////////////////////////////////////////////////////////////// +char* BS_TGameServerItem_CharBuffer = new char[128]; + +DLL(const char*) BS_TGameServerItem_GetName(gameserveritem_t* pThis) { + strcpy(BS_TGameServerItem_CharBuffer, pThis->GetName()); + return BS_TGameServerItem_CharBuffer; +} + +DLL(void) BS_TGameServerItem_SetName(gameserveritem_t* pThis, const char* cName) { + pThis->SetName(cName); +} + +///< IP/Query Port/Connection Port for this server +DLL(servernetadr_t*) BS_TGameServerItem_NetAdr(gameserveritem_t* pThis) { + return &(pThis->m_NetAdr); +} + +///< current ping time in milliseconds +DLL(int) BS_TGameServerItem_Ping(gameserveritem_t* pThis) { + return pThis->m_nPing; +} + +///< server has responded successfully in the past +DLL(bool) BS_TGameServerItem_HadSuccessfulResponse(gameserveritem_t* pThis) { + return pThis->m_bHadSuccessfulResponse; +} + +///< server is marked as not responding and should no longer be refreshed +DLL(bool) BS_TGameServerItem_DoNotRefresh(gameserveritem_t* pThis) { + return pThis->m_bDoNotRefresh; +} + +///< current game directory +DLL(const char*) BS_TGameServerItem_GameDir(gameserveritem_t* pThis) { + strcpy(BS_TGameServerItem_CharBuffer, pThis->m_szGameDir); + return BS_TGameServerItem_CharBuffer; +} + +///< current map +DLL(const char*) BS_TGameServerItem_Map(gameserveritem_t* pThis) { + strcpy(BS_TGameServerItem_CharBuffer, pThis->m_szMap); + return BS_TGameServerItem_CharBuffer; +} + +///< game description +DLL(const char*) BS_TGameServerItem_GameDescription(gameserveritem_t* pThis) { + strcpy(BS_TGameServerItem_CharBuffer, pThis->m_szGameDescription); + return BS_TGameServerItem_CharBuffer; +} + +///< Steam App ID of this server +DLL(uint32_t) BS_TGameServerItem_AppId(gameserveritem_t* pThis) { + return pThis->m_nAppID; +} + +///< total number of players currently on the server. INCLUDES BOTS!! +DLL(uint32_t) BS_TGameServerItem_Players(gameserveritem_t* pThis) { + return pThis->m_nPlayers; +} + +///< Maximum players that can join this server +DLL(uint32_t) BS_TGameServerItem_MaxPlayers(gameserveritem_t* pThis) { + return pThis->m_nMaxPlayers; +} + +///< Number of bots (i.e simulated players) on this server +DLL(uint32_t) BS_TGameServerItem_BotPlayers(gameserveritem_t* pThis) { + return pThis->m_nBotPlayers; +} + +///< true if this server needs a password to join +DLL(bool) BS_TGameServerItem_Password(gameserveritem_t* pThis) { + return pThis->m_bPassword; +} + +///< Is this server protected by VAC +DLL(bool) BS_TGameServerItem_Secure(gameserveritem_t* pThis) { + return pThis->m_bSecure; +} + +///< time (in unix time) when this server was last played on (for favorite/history servers) +DLL(uint32_t) BS_TGameServerItem_TimeLastPlayed(gameserveritem_t* pThis) { + return pThis->m_ulTimeLastPlayed; +} + +///< server version as reported to Steam +DLL(uint32_t) BS_TGameServerItem_ServerVersion(gameserveritem_t* pThis) { + return pThis->m_nServerVersion; +} + +/// the tags this server exposes +DLL(const char*) BS_TGameServerItem_GameTags(gameserveritem_t* pThis) { + strcpy(BS_TGameServerItem_CharBuffer, pThis->m_szGameTags); + return BS_TGameServerItem_CharBuffer; +} + +/// steamID of the game server - invalid if it's doesn't have one (old server, or not connected to Steam) +DLL(CSteamID*) BS_TGameServerItem_SteamID(gameserveritem_t* pThis) { + return &(pThis->m_steamID); +} + +////////////////////////////////////////////////////////////////////////// +char* BS_TServerNetAdr_CharBuffer = new char[128]; + +DLL(void) BS_TServerNetAdr_Set(servernetadr_t* pThis, servernetadr_t* pThat) { + *pThis = *pThat; +} + +DLL(void) BS_TServerNetAdr_Init(servernetadr_t* pThis, uint32_t iIP, uint16_t iQueryPort, uint16_t iConnectionPort) { + pThis->Init(iIP, iQueryPort, iConnectionPort); +} + +DLL(uint16_t) BS_TServerNetAdr_GetQueryPort(servernetadr_t* pThis) { + return pThis->GetQueryPort(); +} + +DLL(void) BS_TServerNetAdr_SetQueryPort(servernetadr_t* pThis, uint16_t iPort) { + pThis->SetQueryPort(iPort); +} + +DLL(uint16_t) BS_TServerNetAdr_GetConnectionPort(servernetadr_t* pThis) { + return pThis->GetConnectionPort(); +} + +DLL(void) BS_TServerNetAdr_SetConnectionPort(servernetadr_t* pThis, uint16_t iPort) { + pThis->SetConnectionPort(iPort); +} + +DLL(uint32_t) BS_TServerNetAdr_GetIP(servernetadr_t* pThis) { + return pThis->GetIP(); +} + +DLL(void) BS_TServerNetAdr_SetIP(servernetadr_t* pThis, uint32_t iIP) { + pThis->SetIP(iIP); +} + +DLL(const char*) BS_TServerNetAdr_GetConnectionAddressString(servernetadr_t* pThis) { + strcpy(BS_TServerNetAdr_CharBuffer, pThis->GetConnectionAddressString()); + return BS_TServerNetAdr_CharBuffer; +} + +DLL(const char*) BS_TServerNetAdr_GetQueryAddressString(servernetadr_t* pThis) { + strcpy(BS_TServerNetAdr_CharBuffer, pThis->GetQueryAddressString()); + return BS_TServerNetAdr_CharBuffer; +} + +DLL(uint32_t) BS_TServerNetAdr_Compare(servernetadr_t* pThis, servernetadr_t* pThat) { + return (pThis < pThat ? -1 : (pThis > pThat ? 1 : 0)); +} \ No newline at end of file diff --git a/Types/SteamMatchmakingTypes.h b/Types/SteamMatchmakingTypes.h new file mode 100644 index 0000000..9901115 --- /dev/null +++ b/Types/SteamMatchmakingTypes.h @@ -0,0 +1,137 @@ +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" +#include "../Helpers/BlitzPointer.h" + +//----------------------------------------------------------------------------- +// Purpose: Callback interface for receiving responses after a server list refresh +// or an individual server update. +// +// Since you get these callbacks after requesting full list refreshes you will +// usually implement this interface inside an object like CServerBrowser. If that +// object is getting destructed you should use ISteamMatchMakingServers()->CancelQuery() +// to cancel any in-progress queries so you don't get a callback into the destructed +// object and crash. +//----------------------------------------------------------------------------- +class BlitzISteamMatchmakingServerListResponse : public ISteamMatchmakingServerListResponse { +private: + void* m_pData; + + BP_BlitzFunction3_t m_pServerResponded; + BP_BlitzFunction3_t m_pServerFailedToRespond; + BP_BlitzFunction3_t m_pRefreshComplete; +public: + BlitzISteamMatchmakingServerListResponse(void* pData, BP_BlitzFunction3_t pServerResponded, BP_BlitzFunction3_t pServerFailedToRespond, BP_BlitzFunction3_t pRefreshComplete); + + // Server has responded ok with updated data + virtual void ServerResponded(HServerListRequest hRequest, int iServer) override; + // Server has failed to respond + virtual void ServerFailedToRespond(HServerListRequest hRequest, int iServer) override; + // A list refresh you had initiated is now 100% completed + virtual void RefreshComplete(HServerListRequest hRequest, EMatchMakingServerResponse response) override; +}; + +//----------------------------------------------------------------------------- +// Purpose: Callback interface for receiving responses after pinging an individual server +// +// These callbacks all occur in response to querying an individual server +// via the ISteamMatchmakingServers()->PingServer() call below. If you are +// destructing an object that implements this interface then you should call +// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query +// which is in progress. Failure to cancel in progress queries when destructing +// a callback handler may result in a crash when a callback later occurs. +//----------------------------------------------------------------------------- +class BlitzISteamMatchmakingPingResponse : public ISteamMatchmakingPingResponse { +private: + void* m_pData; + + BP_BlitzFunction2_t m_pServerResponded; + BP_BlitzFunction1_t m_pServerFailedToRespond; +public: + BlitzISteamMatchmakingPingResponse(void* pData, BP_BlitzFunction2_t pServerResponded, BP_BlitzFunction1_t pServerFailedToRespond); + + // Server has responded successfully and has updated data + virtual void ServerResponded(gameserveritem_t &server) override; + // Server failed to respond to the ping request + virtual void ServerFailedToRespond() override; +}; + +//----------------------------------------------------------------------------- +// Purpose: Callback interface for receiving responses after requesting details on +// who is playing on a particular server. +// +// These callbacks all occur in response to querying an individual server +// via the ISteamMatchmakingServers()->PlayerDetails() call below. If you are +// destructing an object that implements this interface then you should call +// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query +// which is in progress. Failure to cancel in progress queries when destructing +// a callback handler may result in a crash when a callback later occurs. +//----------------------------------------------------------------------------- +class BlitzISteamMatchmakingPlayersResponse : public ISteamMatchmakingPlayersResponse { +private: + void* m_pData; + + BP_BlitzFunction4_t m_pAddPlayerToList; + BP_BlitzFunction1_t m_pPlayersFailedToRespond; + BP_BlitzFunction1_t m_pPlayersRefreshComplete; + +public: + BlitzISteamMatchmakingPlayersResponse(void* pData, BP_BlitzFunction4_t pAddPlayerToList, BP_BlitzFunction1_t pPlayersFailedToRespond, BP_BlitzFunction1_t pPlayersRefreshComplete); + + // Got data on a new player on the server -- you'll get this callback once per player + // on the server which you have requested player data on. + virtual void AddPlayerToList(const char *pchName, int nScore, float flTimePlayed) override; + // The server failed to respond to the request for player details + virtual void PlayersFailedToRespond() override; + // The server has finished responding to the player details request + // (ie, you won't get anymore AddPlayerToList callbacks) + virtual void PlayersRefreshComplete() override; +}; + +//----------------------------------------------------------------------------- +// Purpose: Callback interface for receiving responses after requesting rules +// details on a particular server. +// +// These callbacks all occur in response to querying an individual server +// via the ISteamMatchmakingServers()->ServerRules() call below. If you are +// destructing an object that implements this interface then you should call +// ISteamMatchmakingServers()->CancelServerQuery() passing in the handle to the query +// which is in progress. Failure to cancel in progress queries when destructing +// a callback handler may result in a crash when a callback later occurs. +//----------------------------------------------------------------------------- +class BlitzISteamMatchmakingRulesResponse : public ISteamMatchmakingRulesResponse { +private: + void* m_pData; + + BP_BlitzFunction3_t m_pRulesResponded; + BP_BlitzFunction1_t m_pRulesFailedToRespond, m_pRulesRefreshComplete; + +public: + BlitzISteamMatchmakingRulesResponse(void* pData, BP_BlitzFunction3_t pRulesResponded, BP_BlitzFunction1_t pRulesFailedToRespond, BP_BlitzFunction1_t pRulesRefreshComplete); + + // Got data on a rule on the server -- you'll get one of these per rule defined on + // the server you are querying + virtual void RulesResponded(const char *pchRule, const char *pchValue) override; + + // The server failed to respond to the request for rule details + virtual void RulesFailedToRespond() override; + + // The server has finished responding to the rule details request + // (ie, you won't get anymore RulesResponded callbacks) + virtual void RulesRefreshComplete() override; +}; \ No newline at end of file diff --git a/Types/SteamTypes.cpp b/Types/SteamTypes.cpp new file mode 100644 index 0000000..05e3196 --- /dev/null +++ b/Types/SteamTypes.cpp @@ -0,0 +1,17 @@ +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "SteamTypes.h" diff --git a/Types/SteamTypes.h b/Types/SteamTypes.h new file mode 100644 index 0000000..0a737ab --- /dev/null +++ b/Types/SteamTypes.h @@ -0,0 +1,19 @@ +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once +#include "BlitzSteamInternal.h" + diff --git a/Wrapper/Steam.cpp b/Wrapper/Steam.cpp index 2f868ce..64aabfa 100644 --- a/Wrapper/Steam.cpp +++ b/Wrapper/Steam.cpp @@ -1,99 +1,99 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------------------------------------------------------------------------------------// -// Steam API setup & shutdown -// -// These functions manage loading, initializing and shutdown of the steamclient.dll -// -//----------------------------------------------------------------------------------------------------------------------------------------------------------// - -DLL(int32_t) BS_SteamAPI_Init() { - return SteamAPI_Init(); -} - -DLL(void) BS_SteamAPI_Shutdown() { - SteamAPI_Shutdown(); -} - -// checks if a local Steam client is running -DLL(int32_t) BS_SteamAPI_IsSteamRunning() { - return SteamAPI_IsSteamRunning(); -} - -// Detects if your executable was launched through the Steam client, and restarts your game through -// the client if necessary. The Steam client will be started if it is not running. -// -// Returns: true if your executable was NOT launched through the Steam client. This function will -// then start your application through the client. Your current process should exit. -// -// false if your executable was started through the Steam client or a steam_appid.txt file -// is present in your game's directory (for development). Your current process should continue. -// -// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied -// to your executable, Steam's DRM will handle restarting through Steam if necessary. -DLL(int32_t) BS_SteamAPI_RestartAppIfNecessary(uint32_t unOwnAppID) { - return SteamAPI_RestartAppIfNecessary(unOwnAppID); -} - -// crash dump recording functions -DLL(void) BS_SteamAPI_WriteMiniDump(uint32_t uStructuredExceptionCode, void* pvExceptionInfo, uint32_t uBuildID) { - SteamAPI_WriteMiniDump(uStructuredExceptionCode, pvExceptionInfo, uBuildID); -} - -DLL(void) BS_SteamAPI_SetMiniDumpComment(const char* pchMsg) { - SteamAPI_SetMiniDumpComment(pchMsg); -} - -// Most Steam API functions allocate some amount of thread-local memory for -// parameter storage. The SteamAPI_ReleaseCurrentThreadMemory() function -// will free all API-related memory associated with the calling thread. -// This memory is also released automatically by SteamAPI_RunCallbacks(), so -// a single-threaded program does not need to explicitly call this function. -DLL(void) BS_SteamAPI_ReleaseCurrentThreadMemory() { - return SteamAPI_ReleaseCurrentThreadMemory(); -} - -// -- Callbacks -//----------------------------------------------------------------------------------------------------------------------------------------------------------// -// steam callback and call-result helpers -// -// The following macros and classes are used to register your application for -// callbacks and call-results, which are delivered in a predictable manner. -// -// STEAM_CALLBACK macros are meant for use inside of a C++ class definition. -// They map a Steam notification callback directly to a class member function -// which is automatically prototyped as "void func( callback_type *pParam )". -// -// CCallResult is used with specific Steam APIs that return "result handles". -// The handle can be passed to a CCallResult object's Set function, along with -// an object pointer and member-function pointer. The member function will -// be executed once the results of the Steam API call are available. -// -// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK -// macros if you require finer control over registration and unregistration. -// -// Callbacks and call-results are queued automatically and are only -// delivered/executed when your application calls SteamAPI_RunCallbacks(). -//----------------------------------------------------------------------------------------------------------------------------------------------------------// - -// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously, -// but if you choose to do this, callback code may be executed on any thread. -DLL(void) BS_SteamAPI_RunCallbacks() { - SteamAPI_RunCallbacks(); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------------------------------------------------------------------------------------// +// Steam API setup & shutdown +// +// These functions manage loading, initializing and shutdown of the steamclient.dll +// +//----------------------------------------------------------------------------------------------------------------------------------------------------------// + +DLL(int32_t) BS_SteamAPI_Init() { + return SteamAPI_Init(); +} + +DLL(void) BS_SteamAPI_Shutdown() { + SteamAPI_Shutdown(); +} + +// checks if a local Steam client is running +DLL(int32_t) BS_SteamAPI_IsSteamRunning() { + return SteamAPI_IsSteamRunning(); +} + +// Detects if your executable was launched through the Steam client, and restarts your game through +// the client if necessary. The Steam client will be started if it is not running. +// +// Returns: true if your executable was NOT launched through the Steam client. This function will +// then start your application through the client. Your current process should exit. +// +// false if your executable was started through the Steam client or a steam_appid.txt file +// is present in your game's directory (for development). Your current process should continue. +// +// NOTE: This function should be used only if you are using CEG or not using Steam's DRM. Once applied +// to your executable, Steam's DRM will handle restarting through Steam if necessary. +DLL(int32_t) BS_SteamAPI_RestartAppIfNecessary(uint32_t unOwnAppID) { + return SteamAPI_RestartAppIfNecessary(unOwnAppID); +} + +// crash dump recording functions +DLL(void) BS_SteamAPI_WriteMiniDump(uint32_t uStructuredExceptionCode, void* pvExceptionInfo, uint32_t uBuildID) { + SteamAPI_WriteMiniDump(uStructuredExceptionCode, pvExceptionInfo, uBuildID); +} + +DLL(void) BS_SteamAPI_SetMiniDumpComment(const char* pchMsg) { + SteamAPI_SetMiniDumpComment(pchMsg); +} + +// Most Steam API functions allocate some amount of thread-local memory for +// parameter storage. The SteamAPI_ReleaseCurrentThreadMemory() function +// will free all API-related memory associated with the calling thread. +// This memory is also released automatically by SteamAPI_RunCallbacks(), so +// a single-threaded program does not need to explicitly call this function. +DLL(void) BS_SteamAPI_ReleaseCurrentThreadMemory() { + return SteamAPI_ReleaseCurrentThreadMemory(); +} + +// -- Callbacks +//----------------------------------------------------------------------------------------------------------------------------------------------------------// +// steam callback and call-result helpers +// +// The following macros and classes are used to register your application for +// callbacks and call-results, which are delivered in a predictable manner. +// +// STEAM_CALLBACK macros are meant for use inside of a C++ class definition. +// They map a Steam notification callback directly to a class member function +// which is automatically prototyped as "void func( callback_type *pParam )". +// +// CCallResult is used with specific Steam APIs that return "result handles". +// The handle can be passed to a CCallResult object's Set function, along with +// an object pointer and member-function pointer. The member function will +// be executed once the results of the Steam API call are available. +// +// CCallback and CCallbackManual classes can be used instead of STEAM_CALLBACK +// macros if you require finer control over registration and unregistration. +// +// Callbacks and call-results are queued automatically and are only +// delivered/executed when your application calls SteamAPI_RunCallbacks(). +//----------------------------------------------------------------------------------------------------------------------------------------------------------// + +// SteamAPI_RunCallbacks is safe to call from multiple threads simultaneously, +// but if you choose to do this, callback code may be executed on any thread. +DLL(void) BS_SteamAPI_RunCallbacks() { + SteamAPI_RunCallbacks(); } \ No newline at end of file diff --git a/Wrapper/SteamAppList.cpp b/Wrapper/SteamAppList.cpp index dbf3f78..e7f93c0 100644 --- a/Wrapper/SteamAppList.cpp +++ b/Wrapper/SteamAppList.cpp @@ -1,50 +1,50 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: This is a restricted interface that can only be used by previously approved apps, -// contact your Steam Account Manager if you believe you need access to this API. -// This interface lets you detect installed apps for the local Steam client, useful for debugging tools -// to offer lists of apps to debug via Steam. -//----------------------------------------------------------------------------- -DLL(ISteamAppList*) BS_SteamAppList() { - return SteamAppList(); -} - -DLL(int32_t) BS_ISteamAppList_GetNumInstalledApps(ISteamAppList* lpSteamAppList) { - return lpSteamAppList->GetNumInstalledApps(); -} - -DLL(int32_t) BS_ISteamAppList_GetInstalledApps(ISteamAppList* lpSteamAppList, AppId_t *pvecAppID, uint32_t unMaxAppIDs) { - return lpSteamAppList->GetInstalledApps(pvecAppID, unMaxAppIDs); -} - -// returns -1 if no name was found -DLL(int32_t) BS_ISteamAppList_GetAppName(ISteamAppList* lpSteamAppList, AppId_t nAppID, const char* pchName, uint32_t cchNameMax) { - return lpSteamAppList->GetAppName(nAppID, (char*)pchName, cchNameMax); -} - -// returns -1 if no dir was found -DLL(int32_t) BS_ISteamAppList_GetAppInstallDir(ISteamAppList* lpSteamAppList, AppId_t nAppID, char* pchDirectoryBuffer, uint32_t cchDirectoryMax) { - return lpSteamAppList->GetAppInstallDir(nAppID, pchDirectoryBuffer, cchDirectoryMax); -} - -// return the buildid of this app, may change at any time based on backend updates to the game -DLL(int32_t) BS_ISteamAppList_GetAppBuildId(ISteamAppList* lpSteamAppList, AppId_t nAppID) { - return lpSteamAppList->GetAppBuildId(nAppID); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: This is a restricted interface that can only be used by previously approved apps, +// contact your Steam Account Manager if you believe you need access to this API. +// This interface lets you detect installed apps for the local Steam client, useful for debugging tools +// to offer lists of apps to debug via Steam. +//----------------------------------------------------------------------------- +DLL(ISteamAppList*) BS_SteamAppList() { + return SteamAppList(); +} + +DLL(int32_t) BS_ISteamAppList_GetNumInstalledApps(ISteamAppList* lpSteamAppList) { + return lpSteamAppList->GetNumInstalledApps(); +} + +DLL(int32_t) BS_ISteamAppList_GetInstalledApps(ISteamAppList* lpSteamAppList, AppId_t *pvecAppID, uint32_t unMaxAppIDs) { + return lpSteamAppList->GetInstalledApps(pvecAppID, unMaxAppIDs); +} + +// returns -1 if no name was found +DLL(int32_t) BS_ISteamAppList_GetAppName(ISteamAppList* lpSteamAppList, AppId_t nAppID, const char* pchName, uint32_t cchNameMax) { + return lpSteamAppList->GetAppName(nAppID, (char*)pchName, cchNameMax); +} + +// returns -1 if no dir was found +DLL(int32_t) BS_ISteamAppList_GetAppInstallDir(ISteamAppList* lpSteamAppList, AppId_t nAppID, char* pchDirectoryBuffer, uint32_t cchDirectoryMax) { + return lpSteamAppList->GetAppInstallDir(nAppID, pchDirectoryBuffer, cchDirectoryMax); +} + +// return the buildid of this app, may change at any time based on backend updates to the game +DLL(int32_t) BS_ISteamAppList_GetAppBuildId(ISteamAppList* lpSteamAppList, AppId_t nAppID) { + return lpSteamAppList->GetAppBuildId(nAppID); +} diff --git a/Wrapper/SteamApps.cpp b/Wrapper/SteamApps.cpp index 99992f3..4a0e047 100644 --- a/Wrapper/SteamApps.cpp +++ b/Wrapper/SteamApps.cpp @@ -1,146 +1,146 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: interface to app data -//----------------------------------------------------------------------------- -DLL(ISteamApps*) BS_SteamApps() { - return SteamApps(); -} - -DLL(int32_t) BS_ISteamApps_IsSubscribed(ISteamApps* lpSteamApps) { - return lpSteamApps->BIsSubscribed(); -} - -DLL(int32_t) BS_ISteamApps_IsLowViolence(ISteamApps* lpSteamApps) { - return lpSteamApps->BIsLowViolence(); -} - -DLL(int32_t) BS_ISteamApps_IsCybercafe(ISteamApps* lpSteamApps) { - return lpSteamApps->BIsCybercafe(); -} - -DLL(int32_t) BS_ISteamApps_IsVACBanned(ISteamApps* lpSteamApps) { - return lpSteamApps->BIsVACBanned(); -} - -DLL(const char*) BS_ISteamApps_GetCurrentGameLanguage(ISteamApps* lpSteamApps) { - return lpSteamApps->GetCurrentGameLanguage(); -} - -DLL(const char*) BS_ISteamApps_GetAvailableGameLanguages(ISteamApps* lpSteamApps) { - return lpSteamApps->GetAvailableGameLanguages(); -} - -// only use this member if you need to check ownership of another game related to yours, a demo for example -DLL(int32_t) BS_ISteamApps_IsSubscribedApp(ISteamApps* lpSteamApps, AppId_t appID) { - return lpSteamApps->BIsSubscribedApp(appID); -} - -// Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed -DLL(int32_t) BS_ISteamApps_IsDlcInstalled(ISteamApps* lpSteamApps, AppId_t appID) { - return lpSteamApps->BIsDlcInstalled(appID); -} - -// returns the Unix time of the purchase of the app -DLL(int32_t) BS_ISteamApps_GetEarliestPurchaseUnixTime(ISteamApps* lpSteamApps, AppId_t appID) { - return lpSteamApps->GetEarliestPurchaseUnixTime(appID); -} - -// Checks if the user is subscribed to the current app through a free weekend -// This function will return false for users who have a retail or other type of license -// Before using, please ask your Valve technical contact how to package and secure your free weekened -DLL(int32_t) BS_ISteamApps_IsSubscribedFromFreeWeekend(ISteamApps* lpSteamApps) { - return lpSteamApps->BIsSubscribedFromFreeWeekend(); -} - -// Returns the number of DLC pieces for the running app -DLL(int32_t) BS_ISteamApps_GetDLCCount(ISteamApps* lpSteamApps) { - return lpSteamApps->GetDLCCount(); -} - -// Returns metadata for DLC by index, of range [0, GetDLCCount()] -DLL(int32_t) BS_ISteamApps_GetDLCDataByIndex(ISteamApps* lpSteamApps, uint32_t iDLC, AppId_t *pAppIdBuffer, bool* pbAvailableBuffer, char *pchNameBuffer, uint32_t cchNameBufferSize) { - return lpSteamApps->BGetDLCDataByIndex(iDLC, pAppIdBuffer, (bool*)pbAvailableBuffer, pchNameBuffer, cchNameBufferSize); -} - -// Install/Uninstall control for optional DLC -DLL(void) BS_ISteamApps_InstallDLC(ISteamApps* lpSteamApps, AppId_t nAppID) { - lpSteamApps->InstallDLC(nAppID); -} - -DLL(void) BS_ISteamApps_UninstallDLC(ISteamApps* lpSteamApps, AppId_t nAppID) { - lpSteamApps->UninstallDLC(nAppID); -} - -// Request cd-key for yourself or owned DLC. If you are interested in this -// data then make sure you provide us with a list of valid keys to be distributed -// to users when they purchase the game, before the game ships. -// You'll receive an AppProofOfPurchaseKeyResponse_t callback when -// the key is available (which may be immediately). -DLL(void) BS_ISteamApps_RequestAppProofOfPurchaseKey(ISteamApps* lpSteamApps, AppId_t nAppID) { - lpSteamApps->RequestAppProofOfPurchaseKey(nAppID); -} - -// returns current beta branch name, 'public' is the default branch -DLL(int32_t) BS_ISteamApps_GetCurrentBetaName(ISteamApps* lpSteamApps, char* pchNameBuffer, int cchNameBufferSize) { - return lpSteamApps->GetCurrentBetaName(pchNameBuffer, cchNameBufferSize); -} - -// signal Steam that game files seems corrupt or missing -DLL(int32_t) BS_ISteamApps_MarkContentCorrupt(ISteamApps* lpSteamApps, uint32_t bMissingFilesOnly) { - return lpSteamApps->MarkContentCorrupt(bMissingFilesOnly != 0); -} - -// return installed depots in mount order -DLL(int32_t) BS_ISteamApps_GetInstalledDepots(ISteamApps* lpSteamApps, AppId_t nAppID, DepotId_t *pDepotsBuffer, uint32_t cMaxDepots) { - return lpSteamApps->GetInstalledDepots(nAppID, pDepotsBuffer, cMaxDepots); -} - -// returns current app install folder for AppID, returns folder name length -DLL(int32_t) BS_ISteamApps_GetAppInstallDir(ISteamApps* lpSteamApps, AppId_t appID, char *pchFolderBuffer, uint32_t cchFolderBufferSize) { - return lpSteamApps->GetAppInstallDir(appID, pchFolderBuffer, cchFolderBufferSize); -} - -// returns true if that app is installed (not necessarily owned) -DLL(int32_t) BS_ISteamApps_IsAppInstalled(ISteamApps* lpSteamApps, AppId_t appID) { - return lpSteamApps->BIsAppInstalled(appID); -} - -// returns the SteamID of the original owner. If different from current user, it's borrowed -DLL(CSteamID*) BS_ISteamApps_GetAppOwner(ISteamApps* lpSteamApps) { - return new CSteamID(lpSteamApps->GetAppOwner()); -} - -// Returns the associated launch param if the game is run via steam://run///?param1=value1;param2=value2;param3=value3 etc. -// Parameter names starting with the character '@' are reserved for internal use and will always return and empty string. -// Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game, -// but it is advised that you not param names beginning with an underscore for your own features. -DLL(const char*) BS_ISteamApps_GetLaunchQueryParam(ISteamApps* lpSteamApps, const char *pchKey) { - return lpSteamApps->GetLaunchQueryParam(pchKey); -} - -// get download progress for optional DLC -DLL(int32_t) BS_ISteamApps_GetDlcDownloadProgress(ISteamApps* lpSteamApps, AppId_t nAppID, uint64_t* pLLBytesDownloaded, uint64_t* pLLBytesTotal) { - return lpSteamApps->GetDlcDownloadProgress(nAppID, pLLBytesDownloaded, pLLBytesTotal); -} - -// return the buildid of this app, may change at any time based on backend updates to the game -DLL(int32_t) BS_ISteamApps_GetAppBuildId(ISteamApps* lpSteamApps) { - return lpSteamApps->GetAppBuildId(); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: interface to app data +//----------------------------------------------------------------------------- +DLL(ISteamApps*) BS_SteamApps() { + return SteamApps(); +} + +DLL(int32_t) BS_ISteamApps_IsSubscribed(ISteamApps* lpSteamApps) { + return lpSteamApps->BIsSubscribed(); +} + +DLL(int32_t) BS_ISteamApps_IsLowViolence(ISteamApps* lpSteamApps) { + return lpSteamApps->BIsLowViolence(); +} + +DLL(int32_t) BS_ISteamApps_IsCybercafe(ISteamApps* lpSteamApps) { + return lpSteamApps->BIsCybercafe(); +} + +DLL(int32_t) BS_ISteamApps_IsVACBanned(ISteamApps* lpSteamApps) { + return lpSteamApps->BIsVACBanned(); +} + +DLL(const char*) BS_ISteamApps_GetCurrentGameLanguage(ISteamApps* lpSteamApps) { + return lpSteamApps->GetCurrentGameLanguage(); +} + +DLL(const char*) BS_ISteamApps_GetAvailableGameLanguages(ISteamApps* lpSteamApps) { + return lpSteamApps->GetAvailableGameLanguages(); +} + +// only use this member if you need to check ownership of another game related to yours, a demo for example +DLL(int32_t) BS_ISteamApps_IsSubscribedApp(ISteamApps* lpSteamApps, AppId_t appID) { + return lpSteamApps->BIsSubscribedApp(appID); +} + +// Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed +DLL(int32_t) BS_ISteamApps_IsDlcInstalled(ISteamApps* lpSteamApps, AppId_t appID) { + return lpSteamApps->BIsDlcInstalled(appID); +} + +// returns the Unix time of the purchase of the app +DLL(int32_t) BS_ISteamApps_GetEarliestPurchaseUnixTime(ISteamApps* lpSteamApps, AppId_t appID) { + return lpSteamApps->GetEarliestPurchaseUnixTime(appID); +} + +// Checks if the user is subscribed to the current app through a free weekend +// This function will return false for users who have a retail or other type of license +// Before using, please ask your Valve technical contact how to package and secure your free weekened +DLL(int32_t) BS_ISteamApps_IsSubscribedFromFreeWeekend(ISteamApps* lpSteamApps) { + return lpSteamApps->BIsSubscribedFromFreeWeekend(); +} + +// Returns the number of DLC pieces for the running app +DLL(int32_t) BS_ISteamApps_GetDLCCount(ISteamApps* lpSteamApps) { + return lpSteamApps->GetDLCCount(); +} + +// Returns metadata for DLC by index, of range [0, GetDLCCount()] +DLL(int32_t) BS_ISteamApps_GetDLCDataByIndex(ISteamApps* lpSteamApps, uint32_t iDLC, AppId_t *pAppIdBuffer, bool* pbAvailableBuffer, char *pchNameBuffer, uint32_t cchNameBufferSize) { + return lpSteamApps->BGetDLCDataByIndex(iDLC, pAppIdBuffer, (bool*)pbAvailableBuffer, pchNameBuffer, cchNameBufferSize); +} + +// Install/Uninstall control for optional DLC +DLL(void) BS_ISteamApps_InstallDLC(ISteamApps* lpSteamApps, AppId_t nAppID) { + lpSteamApps->InstallDLC(nAppID); +} + +DLL(void) BS_ISteamApps_UninstallDLC(ISteamApps* lpSteamApps, AppId_t nAppID) { + lpSteamApps->UninstallDLC(nAppID); +} + +// Request cd-key for yourself or owned DLC. If you are interested in this +// data then make sure you provide us with a list of valid keys to be distributed +// to users when they purchase the game, before the game ships. +// You'll receive an AppProofOfPurchaseKeyResponse_t callback when +// the key is available (which may be immediately). +DLL(void) BS_ISteamApps_RequestAppProofOfPurchaseKey(ISteamApps* lpSteamApps, AppId_t nAppID) { + lpSteamApps->RequestAppProofOfPurchaseKey(nAppID); +} + +// returns current beta branch name, 'public' is the default branch +DLL(int32_t) BS_ISteamApps_GetCurrentBetaName(ISteamApps* lpSteamApps, char* pchNameBuffer, int cchNameBufferSize) { + return lpSteamApps->GetCurrentBetaName(pchNameBuffer, cchNameBufferSize); +} + +// signal Steam that game files seems corrupt or missing +DLL(int32_t) BS_ISteamApps_MarkContentCorrupt(ISteamApps* lpSteamApps, uint32_t bMissingFilesOnly) { + return lpSteamApps->MarkContentCorrupt(bMissingFilesOnly != 0); +} + +// return installed depots in mount order +DLL(int32_t) BS_ISteamApps_GetInstalledDepots(ISteamApps* lpSteamApps, AppId_t nAppID, DepotId_t *pDepotsBuffer, uint32_t cMaxDepots) { + return lpSteamApps->GetInstalledDepots(nAppID, pDepotsBuffer, cMaxDepots); +} + +// returns current app install folder for AppID, returns folder name length +DLL(int32_t) BS_ISteamApps_GetAppInstallDir(ISteamApps* lpSteamApps, AppId_t appID, char *pchFolderBuffer, uint32_t cchFolderBufferSize) { + return lpSteamApps->GetAppInstallDir(appID, pchFolderBuffer, cchFolderBufferSize); +} + +// returns true if that app is installed (not necessarily owned) +DLL(int32_t) BS_ISteamApps_IsAppInstalled(ISteamApps* lpSteamApps, AppId_t appID) { + return lpSteamApps->BIsAppInstalled(appID); +} + +// returns the SteamID of the original owner. If different from current user, it's borrowed +DLL(CSteamID*) BS_ISteamApps_GetAppOwner(ISteamApps* lpSteamApps) { + return new CSteamID(lpSteamApps->GetAppOwner()); +} + +// Returns the associated launch param if the game is run via steam://run///?param1=value1;param2=value2;param3=value3 etc. +// Parameter names starting with the character '@' are reserved for internal use and will always return and empty string. +// Parameter names starting with an underscore '_' are reserved for steam features -- they can be queried by the game, +// but it is advised that you not param names beginning with an underscore for your own features. +DLL(const char*) BS_ISteamApps_GetLaunchQueryParam(ISteamApps* lpSteamApps, const char *pchKey) { + return lpSteamApps->GetLaunchQueryParam(pchKey); +} + +// get download progress for optional DLC +DLL(int32_t) BS_ISteamApps_GetDlcDownloadProgress(ISteamApps* lpSteamApps, AppId_t nAppID, uint64_t* pLLBytesDownloaded, uint64_t* pLLBytesTotal) { + return lpSteamApps->GetDlcDownloadProgress(nAppID, pLLBytesDownloaded, pLLBytesTotal); +} + +// return the buildid of this app, may change at any time based on backend updates to the game +DLL(int32_t) BS_ISteamApps_GetAppBuildId(ISteamApps* lpSteamApps) { + return lpSteamApps->GetAppBuildId(); +} diff --git a/Wrapper/SteamClient.cpp b/Wrapper/SteamClient.cpp index 2744d4c..88839cc 100644 --- a/Wrapper/SteamClient.cpp +++ b/Wrapper/SteamClient.cpp @@ -1,147 +1,147 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamClient*) BS_SteamClient() { - return SteamClient(); -} - -DLL(HSteamPipe) BS_ISteamClient_CreateSteamPipe(ISteamClient* lpSteamClient) { - return lpSteamClient->CreateSteamPipe(); -} - -DLL(int32_t) BS_ISteamClient_ReleaseSteamPipe(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe) { - return lpSteamClient->BReleaseSteamPipe(hSteamPipe); -} - -DLL(HSteamUser) BS_ISteamClient_ConnectToGlobalUser(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe) { - return lpSteamClient->ConnectToGlobalUser(hSteamPipe); -} - -DLL(void) BS_ISteamClient_SetLocalIPBinding(ISteamClient* lpSteamClient, uint32_t unIP, uint16 usPort) { - return lpSteamClient->SetLocalIPBinding(unIP, usPort); -} - -DLL(HSteamUser) BS_ISteamClient_CreateLocalUser(ISteamClient* lpSteamClient, HSteamPipe* phSteamPipe, EAccountType eAccountType) { - return lpSteamClient->CreateLocalUser(phSteamPipe, eAccountType); -} - -DLL(void) BS_ISteamClient_ReleaseUser(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe, HSteamUser hSteamUser) { - return lpSteamClient->ReleaseUser(hSteamPipe, hSteamUser); -} - -DLL(int32_t) BS_ISteamClient_GetIPCCallCount(ISteamClient* lpSteamClient) { - return lpSteamClient->GetIPCCallCount(); -} - -DLL(int32_t) BS_ISteamClient_ShutdownIfAllPipesClosed(ISteamClient* lpSteamClient) { - return lpSteamClient->BShutdownIfAllPipesClosed(); -} - -// Interfaces -DLL(ISteamAppList*) BS_ISteamClient_GetSteamAppList(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamAppList(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamApps*) BS_ISteamClient_GetSteamApps(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamApps(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamController*) BS_ISteamClient_GetSteamController(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamController(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamFriends*) BS_ISteamClient_GetSteamFriends(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamFriends(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamGameServer*) BS_ISteamClient_GetSteamGameServer(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamGameServer(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamGameServerStats*) BS_ISteamClient_GetSteamGameServerStats(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamGameServerStats(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamHTMLSurface*) BS_ISteamClient_GetSteamHTMLSurface(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamHTMLSurface(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamHTTP*) BS_ISteamClient_GetSteamHTTP(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamHTTP(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamInventory*) BS_ISteamClient_GetSteamInventory(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamInventory(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamMatchmaking*) BS_ISteamClient_GetSteamMatchmaking(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamMatchmaking(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamMatchmakingServers*) BS_ISteamClient_GetSteamMatchmakingServers(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamMatchmakingServers(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamMusic*) BS_ISteamClient_GetSteamMusic(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamMusic(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamMusicRemote*) BS_ISteamClient_GetSteamMusicRemote(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamMusicRemote(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamNetworking*) BS_ISteamClient_GetSteamNetworking(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamNetworking(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamRemoteStorage*) BS_ISteamClient_GetSteamRemoteStorage(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamRemoteStorage(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamScreenshots*) BS_ISteamClient_GetSteamScreenshots(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamScreenshots(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamUGC*) BS_ISteamClient_GetSteamUGC(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamUGC(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamUnifiedMessages*) BS_ISteamClient_GetSteamUnifiedMessages(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamUnifiedMessages(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamUser*) BS_ISteamClient_GetSteamUser(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamUser(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamUserStats*) BS_ISteamClient_GetSteamUserStats(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamUserStats(hSteamUser, hSteamPipe, pchVersion); -} - -DLL(ISteamUtils*) BS_ISteamClient_GetSteamUtils(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamUtils(hSteamPipe, pchVersion); -} - -DLL(ISteamVideo*) BS_ISteamClient_GetSteamVideo(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { - return lpSteamClient->GetISteamVideo(hSteamUser, hSteamPipe, pchVersion); -} - -// Callbacks & Hooks -DLL(void) BS_ISteamClient_SetWarningMessageHook(ISteamClient* lpSteamClient, SteamAPIWarningMessageHook_t fpfunction) { - lpSteamClient->SetWarningMessageHook(fpfunction); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamClient*) BS_SteamClient() { + return SteamClient(); +} + +DLL(HSteamPipe) BS_ISteamClient_CreateSteamPipe(ISteamClient* lpSteamClient) { + return lpSteamClient->CreateSteamPipe(); +} + +DLL(int32_t) BS_ISteamClient_ReleaseSteamPipe(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe) { + return lpSteamClient->BReleaseSteamPipe(hSteamPipe); +} + +DLL(HSteamUser) BS_ISteamClient_ConnectToGlobalUser(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe) { + return lpSteamClient->ConnectToGlobalUser(hSteamPipe); +} + +DLL(void) BS_ISteamClient_SetLocalIPBinding(ISteamClient* lpSteamClient, uint32_t unIP, uint16 usPort) { + return lpSteamClient->SetLocalIPBinding(unIP, usPort); +} + +DLL(HSteamUser) BS_ISteamClient_CreateLocalUser(ISteamClient* lpSteamClient, HSteamPipe* phSteamPipe, EAccountType eAccountType) { + return lpSteamClient->CreateLocalUser(phSteamPipe, eAccountType); +} + +DLL(void) BS_ISteamClient_ReleaseUser(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe, HSteamUser hSteamUser) { + return lpSteamClient->ReleaseUser(hSteamPipe, hSteamUser); +} + +DLL(int32_t) BS_ISteamClient_GetIPCCallCount(ISteamClient* lpSteamClient) { + return lpSteamClient->GetIPCCallCount(); +} + +DLL(int32_t) BS_ISteamClient_ShutdownIfAllPipesClosed(ISteamClient* lpSteamClient) { + return lpSteamClient->BShutdownIfAllPipesClosed(); +} + +// Interfaces +DLL(ISteamAppList*) BS_ISteamClient_GetSteamAppList(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamAppList(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamApps*) BS_ISteamClient_GetSteamApps(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamApps(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamController*) BS_ISteamClient_GetSteamController(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamController(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamFriends*) BS_ISteamClient_GetSteamFriends(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamFriends(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamGameServer*) BS_ISteamClient_GetSteamGameServer(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamGameServer(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamGameServerStats*) BS_ISteamClient_GetSteamGameServerStats(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamGameServerStats(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamHTMLSurface*) BS_ISteamClient_GetSteamHTMLSurface(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamHTMLSurface(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamHTTP*) BS_ISteamClient_GetSteamHTTP(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamHTTP(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamInventory*) BS_ISteamClient_GetSteamInventory(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamInventory(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamMatchmaking*) BS_ISteamClient_GetSteamMatchmaking(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamMatchmaking(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamMatchmakingServers*) BS_ISteamClient_GetSteamMatchmakingServers(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamMatchmakingServers(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamMusic*) BS_ISteamClient_GetSteamMusic(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamMusic(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamMusicRemote*) BS_ISteamClient_GetSteamMusicRemote(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamMusicRemote(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamNetworking*) BS_ISteamClient_GetSteamNetworking(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamNetworking(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamRemoteStorage*) BS_ISteamClient_GetSteamRemoteStorage(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamRemoteStorage(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamScreenshots*) BS_ISteamClient_GetSteamScreenshots(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamScreenshots(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamUGC*) BS_ISteamClient_GetSteamUGC(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamUGC(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamUnifiedMessages*) BS_ISteamClient_GetSteamUnifiedMessages(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamUnifiedMessages(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamUser*) BS_ISteamClient_GetSteamUser(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamUser(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamUserStats*) BS_ISteamClient_GetSteamUserStats(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamUserStats(hSteamUser, hSteamPipe, pchVersion); +} + +DLL(ISteamUtils*) BS_ISteamClient_GetSteamUtils(ISteamClient* lpSteamClient, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamUtils(hSteamPipe, pchVersion); +} + +DLL(ISteamVideo*) BS_ISteamClient_GetSteamVideo(ISteamClient* lpSteamClient, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char *pchVersion) { + return lpSteamClient->GetISteamVideo(hSteamUser, hSteamPipe, pchVersion); +} + +// Callbacks & Hooks +DLL(void) BS_ISteamClient_SetWarningMessageHook(ISteamClient* lpSteamClient, SteamAPIWarningMessageHook_t fpfunction) { + lpSteamClient->SetWarningMessageHook(fpfunction); +} diff --git a/Wrapper/SteamController.cpp b/Wrapper/SteamController.cpp index a14535d..ad3dfa1 100644 --- a/Wrapper/SteamController.cpp +++ b/Wrapper/SteamController.cpp @@ -1,126 +1,126 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: Native Steam controller support API -//----------------------------------------------------------------------------- -DLL(ISteamController*) BS_SteamController() { - return SteamController(); -} - -// Init and Shutdown must be called when starting/ending use of this interface -DLL(int32_t) BS_ISteamController_Init(ISteamController* lpSteamController) { - return lpSteamController->Init(); -} - -// Init and Shutdown must be called when starting/ending use of this interface -DLL(int32_t) BS_ISteamController_Shutdown(ISteamController* lpSteamController) { - return lpSteamController->Shutdown(); -} - -// Pump callback/callresult events -// Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly. -DLL(void) BS_ISteamController_RunFrame(ISteamController* lpSteamController) { - lpSteamController->RunFrame(); -} - -// Enumerate currently connected controllers -// handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles -// Returns the number of handles written to handlesOut -DLL(int32_t) BS_ISteamController_GetConnectedControllers(ISteamController* lpSteamController, ControllerHandle_t* pHandlesOut) { - return lpSteamController->GetConnectedControllers(pHandlesOut); -} - -ControllerHandle_t* pControllerHandles = new ControllerHandle_t[STEAM_CONTROLLER_MAX_COUNT]; -DLL(int32_t) BS_ISteamController_GetConnectedControllersSimple(ISteamController* lpSteamController) { - return lpSteamController->GetConnectedControllers(pControllerHandles); -} - -DLL(ControllerHandle_t*) BS_ISteamController_GetConnectedControllersSimple_Index(uint32_t index) { - if (index >= STEAM_CONTROLLER_MAX_COUNT) - index = STEAM_CONTROLLER_MAX_COUNT - 1; - return &(pControllerHandles[index]); -} - -// Invokes the Steam overlay and brings up the binding screen -// Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode -DLL(int32_t) BS_ISteamController_ShowBindingPanel(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle) { - return lpSteamController->ShowBindingPanel(*pControllerHandle); -} - -// ACTION SETS -// Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls. -DLL(ControllerActionSetHandle_t*) BS_ISteamController_GetActionSetHandle(ISteamController* lpSteamController, const char* pszActionSetName) { - return new ControllerActionSetHandle_t(lpSteamController->GetActionSetHandle(pszActionSetName)); -} - -// Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive') -// This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in -// your state loops, instead of trying to place it in all of your state transitions. -DLL(void) BS_ISteamController_ActivateActionSet(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle) { - lpSteamController->ActivateActionSet(*pControllerHandle, *pActionSetHandle); -} - -DLL(ControllerActionSetHandle_t*) BS_ISteamController_GetCurrentActionSet(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle) { - return new ControllerActionSetHandle_t(lpSteamController->GetCurrentActionSet(*pControllerHandle)); -} - -// Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls. -DLL(ControllerDigitalActionHandle_t*) BS_ISteamController_GetDigitalActionHandle(ISteamController* lpSteamController, const char* pszActionName) { - return new ControllerDigitalActionHandle_t(lpSteamController->GetDigitalActionHandle(pszActionName)); -} - -// Returns the current state of the supplied digital game action -DLL(ControllerDigitalActionData_t*) BS_ISteamController_GetDigitalActionData(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerDigitalActionHandle_t* pDigitalActionHandle) { - return &lpSteamController->GetDigitalActionData(*pControllerHandle, *pDigitalActionHandle); -} - -// Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. -// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles -DLL(int32_t) BS_ISteamController_GetDigitalActionOrigins(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle, ControllerDigitalActionHandle_t* pDigitalActionHandle, EControllerActionOrigin *pEControllerActionOrigin) { - return lpSteamController->GetDigitalActionOrigins(*pControllerHandle, *pActionSetHandle, *pDigitalActionHandle, pEControllerActionOrigin); -} - -// Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls. -DLL(ControllerAnalogActionHandle_t*) BS_ISteamController_GetAnalogActionHandle(ISteamController* lpSteamController, const char *pszActionName) { - return new ControllerAnalogActionHandle_t(lpSteamController->GetAnalogActionHandle(pszActionName)); -} - -// Returns the current state of these supplied analog game action -DLL(ControllerAnalogActionData_t*) BS_ISteamController_GetAnalogActionData(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle) { - return &lpSteamController->GetAnalogActionData(*pControllerHandle, *pAnalogActionHandle); -} - -// Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. -// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles -DLL(int32_t) BS_ISteamController_GetAnalogActionOrigins(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle, EControllerActionOrigin *pEControllerActionOrigin) { - return lpSteamController->GetAnalogActionOrigins(*pControllerHandle, *pActionSetHandle, *pAnalogActionHandle, pEControllerActionOrigin); -} - -DLL(void) BS_ISteamController_StopAnalogActionMomentum(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle) { - lpSteamController->StopAnalogActionMomentum(*pControllerHandle, *pAnalogActionHandle); -} - -// Trigger a haptic pulse on a controller -DLL(void) BS_ISteamController_TriggerHapticPulse(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ESteamControllerPad eTargetPad, uint32_t usDurationMicroSec) { - lpSteamController->TriggerHapticPulse(*pControllerHandle, eTargetPad, (uint16_t)usDurationMicroSec); -} - -DLL(void) BS_ISteamController_TriggerRepeatedHapticPulse(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ESteamControllerPad eTargetPad, uint32_t usDurationMicroSec, uint32_t usOffMicroSec, uint32_t unRepeat, uint32_t nFlags) { - lpSteamController->TriggerRepeatedHapticPulse(*pControllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Native Steam controller support API +//----------------------------------------------------------------------------- +DLL(ISteamController*) BS_SteamController() { + return SteamController(); +} + +// Init and Shutdown must be called when starting/ending use of this interface +DLL(int32_t) BS_ISteamController_Init(ISteamController* lpSteamController) { + return lpSteamController->Init(); +} + +// Init and Shutdown must be called when starting/ending use of this interface +DLL(int32_t) BS_ISteamController_Shutdown(ISteamController* lpSteamController) { + return lpSteamController->Shutdown(); +} + +// Pump callback/callresult events +// Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly. +DLL(void) BS_ISteamController_RunFrame(ISteamController* lpSteamController) { + lpSteamController->RunFrame(); +} + +// Enumerate currently connected controllers +// handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles +// Returns the number of handles written to handlesOut +DLL(int32_t) BS_ISteamController_GetConnectedControllers(ISteamController* lpSteamController, ControllerHandle_t* pHandlesOut) { + return lpSteamController->GetConnectedControllers(pHandlesOut); +} + +ControllerHandle_t* pControllerHandles = new ControllerHandle_t[STEAM_CONTROLLER_MAX_COUNT]; +DLL(int32_t) BS_ISteamController_GetConnectedControllersSimple(ISteamController* lpSteamController) { + return lpSteamController->GetConnectedControllers(pControllerHandles); +} + +DLL(ControllerHandle_t*) BS_ISteamController_GetConnectedControllersSimple_Index(uint32_t index) { + if (index >= STEAM_CONTROLLER_MAX_COUNT) + index = STEAM_CONTROLLER_MAX_COUNT - 1; + return &(pControllerHandles[index]); +} + +// Invokes the Steam overlay and brings up the binding screen +// Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode +DLL(int32_t) BS_ISteamController_ShowBindingPanel(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle) { + return lpSteamController->ShowBindingPanel(*pControllerHandle); +} + +// ACTION SETS +// Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls. +DLL(ControllerActionSetHandle_t*) BS_ISteamController_GetActionSetHandle(ISteamController* lpSteamController, const char* pszActionSetName) { + return new ControllerActionSetHandle_t(lpSteamController->GetActionSetHandle(pszActionSetName)); +} + +// Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive') +// This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in +// your state loops, instead of trying to place it in all of your state transitions. +DLL(void) BS_ISteamController_ActivateActionSet(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle) { + lpSteamController->ActivateActionSet(*pControllerHandle, *pActionSetHandle); +} + +DLL(ControllerActionSetHandle_t*) BS_ISteamController_GetCurrentActionSet(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle) { + return new ControllerActionSetHandle_t(lpSteamController->GetCurrentActionSet(*pControllerHandle)); +} + +// Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls. +DLL(ControllerDigitalActionHandle_t*) BS_ISteamController_GetDigitalActionHandle(ISteamController* lpSteamController, const char* pszActionName) { + return new ControllerDigitalActionHandle_t(lpSteamController->GetDigitalActionHandle(pszActionName)); +} + +// Returns the current state of the supplied digital game action +DLL(ControllerDigitalActionData_t*) BS_ISteamController_GetDigitalActionData(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerDigitalActionHandle_t* pDigitalActionHandle) { + return &lpSteamController->GetDigitalActionData(*pControllerHandle, *pDigitalActionHandle); +} + +// Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. +// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles +DLL(int32_t) BS_ISteamController_GetDigitalActionOrigins(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle, ControllerDigitalActionHandle_t* pDigitalActionHandle, EControllerActionOrigin *pEControllerActionOrigin) { + return lpSteamController->GetDigitalActionOrigins(*pControllerHandle, *pActionSetHandle, *pDigitalActionHandle, pEControllerActionOrigin); +} + +// Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls. +DLL(ControllerAnalogActionHandle_t*) BS_ISteamController_GetAnalogActionHandle(ISteamController* lpSteamController, const char *pszActionName) { + return new ControllerAnalogActionHandle_t(lpSteamController->GetAnalogActionHandle(pszActionName)); +} + +// Returns the current state of these supplied analog game action +DLL(ControllerAnalogActionData_t*) BS_ISteamController_GetAnalogActionData(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle) { + return &lpSteamController->GetAnalogActionData(*pControllerHandle, *pAnalogActionHandle); +} + +// Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. +// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles +DLL(int32_t) BS_ISteamController_GetAnalogActionOrigins(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerActionSetHandle_t* pActionSetHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle, EControllerActionOrigin *pEControllerActionOrigin) { + return lpSteamController->GetAnalogActionOrigins(*pControllerHandle, *pActionSetHandle, *pAnalogActionHandle, pEControllerActionOrigin); +} + +DLL(void) BS_ISteamController_StopAnalogActionMomentum(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ControllerAnalogActionHandle_t* pAnalogActionHandle) { + lpSteamController->StopAnalogActionMomentum(*pControllerHandle, *pAnalogActionHandle); +} + +// Trigger a haptic pulse on a controller +DLL(void) BS_ISteamController_TriggerHapticPulse(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ESteamControllerPad eTargetPad, uint32_t usDurationMicroSec) { + lpSteamController->TriggerHapticPulse(*pControllerHandle, eTargetPad, (uint16_t)usDurationMicroSec); +} + +DLL(void) BS_ISteamController_TriggerRepeatedHapticPulse(ISteamController* lpSteamController, ControllerHandle_t* pControllerHandle, ESteamControllerPad eTargetPad, uint32_t usDurationMicroSec, uint32_t usOffMicroSec, uint32_t unRepeat, uint32_t nFlags) { + lpSteamController->TriggerRepeatedHapticPulse(*pControllerHandle, eTargetPad, usDurationMicroSec, usOffMicroSec, unRepeat, nFlags); +} diff --git a/Wrapper/SteamFriends.cpp b/Wrapper/SteamFriends.cpp index 598541e..9845005 100644 --- a/Wrapper/SteamFriends.cpp +++ b/Wrapper/SteamFriends.cpp @@ -1,425 +1,425 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: interface to accessing information about individual users, -// that can be a friend, in a group, on a game server or in a lobby with the local user -//----------------------------------------------------------------------------- -DLL(ISteamFriends*) BS_SteamFriends() { - return SteamFriends(); -} - -// returns the local players name - guaranteed to not be NULL. -// this is the same name as on the users community profile page -// this is stored in UTF-8 format -// like all the other interface functions that return a char *, it's important that this pointer is not saved -// off; it will eventually be free'd or re-allocated -DLL(const char*) BS_ISteamFriends_GetPersonaName(ISteamFriends* lpSteamFriends) { - return lpSteamFriends->GetPersonaName(); -} - -// Sets the player name, stores it on the server and publishes the changes to all friends who are online. -// Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success. -// -// The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t. -// -// If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted -// to change the name back, in addition to the SetPersonaNameResponse_t callback. -DLL(SteamAPICall_t*) BS_ISteamFriends_SetPersonaName(ISteamFriends* lpSteamFriends, const char* pchPersonaName) { - return new uint64_t(lpSteamFriends->SetPersonaName(pchPersonaName)); -} - -// gets the status of the current user -DLL(int32_t) BS_ISteamFriends_GetPersonaState(ISteamFriends* lpSteamFriends) { - return lpSteamFriends->GetPersonaState(); -} - -// friend iteration -// takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria -// then GetFriendByIndex() can then be used to return the id's of each of those users -DLL(int32_t) BS_ISteamFriends_GetFriendCount(ISteamFriends* lpSteamFriends, int32_t iFriendFlags) { - return lpSteamFriends->GetFriendCount(iFriendFlags); -} - -// returns the steamID of a user -// iFriend is a index of range [0, GetFriendCount()) -// iFriendsFlags must be the same value as used in GetFriendCount() -// the returned CSteamID can then be used by all the functions below to access details about the user -DLL(CSteamID*) BS_ISteamFriends_GetFriendByIndex(ISteamFriends* lpSteamFriends, int32_t iFriend, int32_t iFriendFlags) { - return new CSteamID(lpSteamFriends->GetFriendByIndex(iFriend, iFriendFlags)); -} - -// returns a relationship to a user -DLL(EFriendRelationship) BS_ISteamFriends_GetFriendRelationship(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendRelationship(*steamIDFriend); -} - -// returns the current status of the specified user -// this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user -DLL(EPersonaState) BS_ISteamFriends_GetFriendPersonaState(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendPersonaState(*steamIDFriend); -} - -// returns the name another user - guaranteed to not be NULL. -// same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user -// note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously -DLL(const char*) BS_ISteamFriends_GetFriendPersonaName(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendPersonaName(*steamIDFriend); -} - -// returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details -DLL(uint32_t) BS_ISteamFriends_GetFriendGamePlayed(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, FriendGameInfo_t *pFriendGameInfo) { - return lpSteamFriends->GetFriendGamePlayed(*steamIDFriend, pFriendGameInfo); -} - -// accesses old friends names - returns an empty string when their are no more items in the history -DLL(const char*) BS_ISteamFriends_GetFriendPersonaNameHistory(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iPersonaName) { - return lpSteamFriends->GetFriendPersonaNameHistory(*steamIDFriend, iPersonaName); -} - -// friends steam level -DLL(int32_t) BS_ISteamFriends_GetFriendSteamLevel(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendSteamLevel(*steamIDFriend); -} - -// Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player. -DLL(const char*) BS_ISteamFriends_GetPlayerNickname(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriends) { - const char* nickname = lpSteamFriends->GetPlayerNickname(*steamIDFriends); - if (nickname == NULL) { - nickname = ""; - } - return nickname; -} - -// friend grouping (tag) apis -// returns the number of friends groups -DLL(int32_t) BS_ISteamFriends_GetFriendsGroupCount(ISteamFriends* lpSteamFriends) { - return lpSteamFriends->GetFriendsGroupCount(); -} - -// returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid) -DLL(FriendsGroupID_t) BS_ISteamFriends_GetFriendsGroupIDByIndex(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { - return lpSteamFriends->GetFriendsGroupIDByIndex(friendsGroupID); -} - -// returns the name for the given friends group (NULL in the case of invalid friends group IDs) -DLL(const char*) BS_ISteamFriends_GetFriendsGroupName(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { - return lpSteamFriends->GetFriendsGroupName(friendsGroupID); -} - -// returns the number of members in a given friends group -DLL(int32_t) BS_ISteamFriends_GetFriendsGroupMembersCount(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { - return lpSteamFriends->GetFriendsGroupMembersCount(friendsGroupID); -} - -// gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid -DLL(void) BS_ISteamFriends_GetFriendsGroupMembersList(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID, CSteamID* pOutSteamIDMembers, int32_t nMembersCount) { - lpSteamFriends->GetFriendsGroupMembersList(friendsGroupID, pOutSteamIDMembers, nMembersCount); -} - -// returns true if the specified user meets any of the criteria specified in iFriendFlags -// iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values -DLL(uint32_t) BS_ISteamFriends_HasFriend(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iFriendsFlags) { - return lpSteamFriends->HasFriend(*steamIDFriend, iFriendsFlags); -} - -// clan (group) iteration and access functions -DLL(int32_t) BS_ISteamFriends_GetClanCount(ISteamFriends* lpSteamFriends) { - return lpSteamFriends->GetClanCount(); -} - -DLL(CSteamID*) BS_ISteamFriends_GetClanByIndex(ISteamFriends* lpSteamFriends, int32_t iClan) { - CSteamID* steamID = new CSteamID(lpSteamFriends->GetClanByIndex(iClan)); - return steamID; -} - -DLL(const char*) BS_ISteamFriends_GetClanName(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return lpSteamFriends->GetClanName(*steamIDClan); -} - -DLL(const char*) BS_ISteamFriends_GetClanTag(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return lpSteamFriends->GetClanTag(*steamIDClan); -} - -// returns the most recent information we have about what's happening in a clan -DLL(uint32_t) BS_ISteamFriends_GetClanActivityCounts(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t* pnOnline, int32_t* pnInGame, int32_t* pnChatting) { - return lpSteamFriends->GetClanActivityCounts(*steamIDClan, pnOnline, pnInGame, pnChatting); -} - -// for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest -DLL(SteamAPICall_t*) BS_ISteamFriends_DownloadClanActivityCounts(ISteamFriends* lpSteamFriends, CSteamID* psteamIDClans, int32_t cClansToRequest) { - return new uint64_t(lpSteamFriends->DownloadClanActivityCounts(psteamIDClans, cClansToRequest)); -} - -// iterators for getting users in a chat room, lobby, game server or clan -// note that large clans that cannot be iterated by the local user -// note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby -// steamIDSource can be the steamID of a group, game server, lobby or chat room -DLL(int32_t) BS_ISteamFriends_GetFriendCountFromSource(ISteamFriends* lpSteamFriends, CSteamID* steamIDSource) { - return lpSteamFriends->GetFriendCountFromSource(*steamIDSource); -} - -DLL(CSteamID*) BS_ISteamFriends_GetFriendFromSourceByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDSource, int32_t iFriend) { - return new CSteamID(lpSteamFriends->GetFriendFromSourceByIndex(*steamIDSource, iFriend)); -} - -// returns true if the local user can see that steamIDUser is a member or in steamIDSource -DLL(uint32_t) BS_ISteamFriends_IsUserInSource(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, CSteamID* steamIDSource) { - return lpSteamFriends->IsUserInSource(*steamIDUser, *steamIDSource); -} - -// User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI) -DLL(void) BS_ISteamFriends_SetInGameVoiceSpeaking(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, uint32_t bSpeaking) { - lpSteamFriends->SetInGameVoiceSpeaking(*steamIDUser, bSpeaking != 0); -} - -// activates the game overlay, with an optional dialog to open -// valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements" -DLL(void) BS_ISteamFriends_ActivateGameOverlay(ISteamFriends* lpSteamFriends, const char* pchDialog) { - lpSteamFriends->ActivateGameOverlay(pchDialog); -} - -// activates game overlay to a specific place -// valid options are -// "steamid" - opens the overlay web browser to the specified user or groups profile -// "chat" - opens a chat window to the specified user, or joins the group chat -// "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API -// "stats" - opens the overlay web browser to the specified user's stats -// "achievements" - opens the overlay web browser to the specified user's achievements -// "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend -// "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend -// "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite -// "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite -DLL(void) BS_ISteamFriends_ActivateGameOverlayToUser(ISteamFriends* lpSteamFriends, const char* pchDialog, CSteamID* steamID) { - lpSteamFriends->ActivateGameOverlayToUser(pchDialog, *steamID); -} - -// activates game overlay web browser directly to the specified URL -// full address with protocol type is required, e.g. http://www.steamgames.com/ -DLL(void) BS_ISteamFriends_ActivateGameOverlayToWebPage(ISteamFriends* lpSteamFriends, const char* pchURL) { - lpSteamFriends->ActivateGameOverlayToWebPage(pchURL); -} - -// activates game overlay to store page for app -DLL(void) BS_ISteamFriends_ActivateGameOverlayToStore(ISteamFriends* lpSteamFriends, AppId_t nAppID, EOverlayToStoreFlag eFlag) { - lpSteamFriends->ActivateGameOverlayToStore(nAppID, eFlag); -} - -// Mark a target user as 'played with'. This is a client-side only feature that requires that the calling user is -// in game -DLL(void) BS_ISteamFriends_SetPlayedWith(ISteamFriends* lpSteamFriends, CSteamID* steamIDUserPlayedWith) { - lpSteamFriends->SetPlayedWith(*steamIDUserPlayedWith); -} - -// activates game overlay to open the invite dialog. Invitations will be sent for the provided lobby. -DLL(void) BS_ISteamFriends_ActivateGameOverlayInviteDialog(ISteamFriends* lpSteamFriends, CSteamID* steamIDLobby) { - lpSteamFriends->ActivateGameOverlayInviteDialog(*steamIDLobby); -} - -// gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set -DLL(int32_t) BS_ISteamFriends_GetSmallFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetSmallFriendAvatar(*steamIDFriend); -} - -// gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set -DLL(int32_t) BS_ISteamFriends_GetMediumFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetMediumFriendAvatar(*steamIDFriend); -} - -// gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set -// returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again -DLL(int32_t) BS_ISteamFriends_GetLargeFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetLargeFriendAvatar(*steamIDFriend); -} - -// requests information about a user - persona name & avatar -// if bRequireNameOnly is set, then the avatar of a user isn't downloaded -// - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them -// if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved -// if returns false, it means that we already have all the details about that user, and functions can be called immediately -DLL(uint32_t) BS_ISteamFriends_RequestUserInformation(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, uint32_t bRequireNameOnly) { - return lpSteamFriends->RequestUserInformation(*steamIDUser, bRequireNameOnly != 0); -} - -// requests information about a clan officer list -// when complete, data is returned in ClanOfficerListResponse_t call result -// this makes available the calls below -// you can only ask about clans that a user is a member of -// note that this won't download avatars automatically; if you get an officer, -// and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar -DLL(SteamAPICall_t*) BS_ISteamFriends_RequestClanOfficerList(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return new uint64_t(lpSteamFriends->RequestClanOfficerList(*steamIDClan)); -} - -// iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed - -// returns the steamID of the clan owner -DLL(CSteamID*) BS_ISteamFriends_GetClanOwner(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return new CSteamID(lpSteamFriends->GetClanOwner(*steamIDClan)); -} - -// returns the number of officers in a clan (including the owner) -DLL(int32_t) BS_ISteamFriends_GetClanOfficerCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return lpSteamFriends->GetClanOfficerCount(*steamIDClan); -} - -// returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount) -DLL(CSteamID*) BS_ISteamFriends_GetClanOfficerByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t iOfficer) { - return new CSteamID(lpSteamFriends->GetClanOfficerByIndex(*steamIDClan, iOfficer)); -} - -// if current user is chat restricted, he can't send or receive any text/voice chat messages. -// the user can't see custom avatars. But the user can be online and send/recv game invites. -// a chat restricted user can't add friends or join any groups. -DLL(EUserRestriction) BS_ISteamFriends_GetUserRestrictions(ISteamFriends* lpSteamFriends) { - return (EUserRestriction)lpSteamFriends->GetUserRestrictions(); -} - -// Rich Presence data is automatically shared between friends who are in the same game -// Each user has a set of Key/Value pairs -// Up to 20 different keys can be set -// There are two magic keys: -// "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list -// "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game -// GetFriendRichPresence() returns an empty string "" if no value is set -// SetRichPresence() to a NULL or an empty string deletes the key -// You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount() -// and GetFriendRichPresenceKeyByIndex() (typically only used for debugging) -DLL(uint32_t) BS_ISteamFriends_SetRichPresence(ISteamFriends* lpSteamFriends, const char* pchKey, const char* pchValue) { - return lpSteamFriends->SetRichPresence(pchKey, pchValue); -} - -DLL(void) BS_ISteamFriends_ClearRichPresence(ISteamFriends* lpSteamFriends) { - lpSteamFriends->ClearRichPresence(); -} - -DLL(const char*) BS_ISteamFriends_GetFriendRichPresence(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char* pchKey) { - return lpSteamFriends->GetFriendRichPresence(*steamIDFriend, pchKey); -} - -DLL(int32_t) BS_ISteamFriends_GetFriendRichPresenceKeyCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendRichPresenceKeyCount(*steamIDFriend); -} - -DLL(const char*) BS_ISteamFriends_GetFriendRichPresenceKeyByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iKey) { - return lpSteamFriends->GetFriendRichPresenceKeyByIndex(*steamIDFriend, iKey); -} - -// Requests rich presence for a specific user. -DLL(void) BS_ISteamFriends_RequestFriendRichPresence(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - lpSteamFriends->RequestFriendRichPresence(*steamIDFriend); -} - -// rich invite support -// if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game -// if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string -// invites can only be sent to friends -DLL(uint32_t) BS_ISteamFriends_InviteUserToGame(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char *pchConnectString) { - return lpSteamFriends->InviteUserToGame(*steamIDFriend, pchConnectString); -} - -// recently-played-with friends iteration -// this iterates the entire list of users recently played with, across games -// GetFriendCoplayTime() returns as a unix time -DLL(int32_t) BS_ISteamFriends_GetCoplayFriendCount(ISteamFriends* lpSteamFriends) { - return lpSteamFriends->GetCoplayFriendCount(); -} - -DLL(CSteamID*) BS_ISteamFriends_GetCoplayFriend(ISteamFriends* lpSteamFriends, int32_t iCoplayFriend) { - return new CSteamID(lpSteamFriends->GetCoplayFriend(iCoplayFriend)); -} - -DLL(int32_t) BS_ISteamFriends_GetFriendCoplayTime(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendCoplayTime(*steamIDFriend); -} - -DLL(AppId_t) BS_ISteamFriends_GetFriendCoplayGame(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { - return lpSteamFriends->GetFriendCoplayGame(*steamIDFriend); -} - -// chat interface for games -// this allows in-game access to group (clan) chats from in the game -// the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay -// use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat -DLL(SteamAPICall_t*) BS_ISteamFriends_JoinClanChatRoom(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return new SteamAPICall_t(lpSteamFriends->JoinClanChatRoom(*steamIDClan)); -} - -DLL(uint32_t) BS_ISteamFriends_LeaveClanChatRoom(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return lpSteamFriends->LeaveClanChatRoom(*steamIDClan); -} - -DLL(int32_t) BS_ISteamFriends_GetClanChatMemberCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { - return lpSteamFriends->GetClanChatMemberCount(*steamIDClan); -} - -DLL(CSteamID*) BS_ISteamFriends_GetChatMemberByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t iUser) { - return new CSteamID(lpSteamFriends->GetChatMemberByIndex(*steamIDClan, iUser)); -} - -DLL(uint32_t) BS_ISteamFriends_SendClanChatMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, const char *pchText) { - return lpSteamFriends->SendClanChatMessage(*steamIDClanChat, pchText); -} - -DLL(int32_t) BS_ISteamFriends_GetClanChatMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, int32_t iMessage, void* prgchText, int32_t cchTextMax, EChatEntryType* peChatEntryType, CSteamID* psteamidChatter) { - return lpSteamFriends->GetClanChatMessage(*steamIDClanChat, iMessage, prgchText, cchTextMax, peChatEntryType, psteamidChatter); -} - -DLL(uint32_t) BS_ISteamFriends_IsClanChatAdmin(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, CSteamID* steamIDUser) { - return lpSteamFriends->IsClanChatAdmin(*steamIDClanChat, *steamIDUser); -} - -// interact with the Steam (game overlay / desktop) -DLL(uint32_t) BS_ISteamFriends_IsClanChatWindowOpenInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { - return lpSteamFriends->IsClanChatWindowOpenInSteam(*steamIDClanChat); -} - -DLL(uint32_t) BS_ISteamFriends_OpenClanChatWindowInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { - return lpSteamFriends->OpenClanChatWindowInSteam(*steamIDClanChat); -} - -DLL(uint32_t) BS_ISteamFriends_CloseClanChatWindowInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { - return lpSteamFriends->CloseClanChatWindowInSteam(*steamIDClanChat); -} - -// peer-to-peer chat interception -// this is so you can show P2P chats inline in the game -DLL(uint32_t) BS_ISteamFriends_SetListenForFriendsMessages(ISteamFriends* lpSteamFriends, uint32_t bInterceptEnabled) { - return lpSteamFriends->SetListenForFriendsMessages(bInterceptEnabled != 0); -} - -DLL(uint32_t) BS_ISteamFriends_ReplyToFriendMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char* pchMsgToSend) { - return lpSteamFriends->ReplyToFriendMessage(*steamIDFriend, pchMsgToSend); -} - -DLL(int32_t) BS_ISteamFriends_GetFriendMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iMessageID, void* pvData, int32_t cubData, EChatEntryType* peChatEntryType) { - return lpSteamFriends->GetFriendMessage(*steamIDFriend, iMessageID, pvData, cubData, peChatEntryType); -} - -// following apis -DLL(SteamAPICall_t*) BS_ISteamFriends_GetFollowerCount(ISteamFriends* lpSteamFriends, CSteamID* steamID) { - return new SteamAPICall_t(lpSteamFriends->GetFollowerCount(*steamID)); -} - -DLL(SteamAPICall_t*) BS_ISteamFriends_IsFollowing(ISteamFriends* lpSteamFriends, CSteamID* steamID) { - return new SteamAPICall_t(lpSteamFriends->IsFollowing(*steamID)); -} - -DLL(SteamAPICall_t*) BS_ISteamFriends_EnumerateFollowingList(ISteamFriends* lpSteamFriends, uint32_t unStartIndex) { - return new SteamAPICall_t(lpSteamFriends->EnumerateFollowingList(unStartIndex)); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: interface to accessing information about individual users, +// that can be a friend, in a group, on a game server or in a lobby with the local user +//----------------------------------------------------------------------------- +DLL(ISteamFriends*) BS_SteamFriends() { + return SteamFriends(); +} + +// returns the local players name - guaranteed to not be NULL. +// this is the same name as on the users community profile page +// this is stored in UTF-8 format +// like all the other interface functions that return a char *, it's important that this pointer is not saved +// off; it will eventually be free'd or re-allocated +DLL(const char*) BS_ISteamFriends_GetPersonaName(ISteamFriends* lpSteamFriends) { + return lpSteamFriends->GetPersonaName(); +} + +// Sets the player name, stores it on the server and publishes the changes to all friends who are online. +// Changes take place locally immediately, and a PersonaStateChange_t is posted, presuming success. +// +// The final results are available through the return value SteamAPICall_t, using SetPersonaNameResponse_t. +// +// If the name change fails to happen on the server, then an additional global PersonaStateChange_t will be posted +// to change the name back, in addition to the SetPersonaNameResponse_t callback. +DLL(SteamAPICall_t*) BS_ISteamFriends_SetPersonaName(ISteamFriends* lpSteamFriends, const char* pchPersonaName) { + return new uint64_t(lpSteamFriends->SetPersonaName(pchPersonaName)); +} + +// gets the status of the current user +DLL(int32_t) BS_ISteamFriends_GetPersonaState(ISteamFriends* lpSteamFriends) { + return lpSteamFriends->GetPersonaState(); +} + +// friend iteration +// takes a set of k_EFriendFlags, and returns the number of users the client knows about who meet that criteria +// then GetFriendByIndex() can then be used to return the id's of each of those users +DLL(int32_t) BS_ISteamFriends_GetFriendCount(ISteamFriends* lpSteamFriends, int32_t iFriendFlags) { + return lpSteamFriends->GetFriendCount(iFriendFlags); +} + +// returns the steamID of a user +// iFriend is a index of range [0, GetFriendCount()) +// iFriendsFlags must be the same value as used in GetFriendCount() +// the returned CSteamID can then be used by all the functions below to access details about the user +DLL(CSteamID*) BS_ISteamFriends_GetFriendByIndex(ISteamFriends* lpSteamFriends, int32_t iFriend, int32_t iFriendFlags) { + return new CSteamID(lpSteamFriends->GetFriendByIndex(iFriend, iFriendFlags)); +} + +// returns a relationship to a user +DLL(EFriendRelationship) BS_ISteamFriends_GetFriendRelationship(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendRelationship(*steamIDFriend); +} + +// returns the current status of the specified user +// this will only be known by the local user if steamIDFriend is in their friends list; on the same game server; in a chat room or lobby; or in a small group with the local user +DLL(EPersonaState) BS_ISteamFriends_GetFriendPersonaState(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendPersonaState(*steamIDFriend); +} + +// returns the name another user - guaranteed to not be NULL. +// same rules as GetFriendPersonaState() apply as to whether or not the user knowns the name of the other user +// note that on first joining a lobby, chat room or game server the local user will not known the name of the other users automatically; that information will arrive asyncronously +DLL(const char*) BS_ISteamFriends_GetFriendPersonaName(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendPersonaName(*steamIDFriend); +} + +// returns true if the friend is actually in a game, and fills in pFriendGameInfo with an extra details +DLL(uint32_t) BS_ISteamFriends_GetFriendGamePlayed(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, FriendGameInfo_t *pFriendGameInfo) { + return lpSteamFriends->GetFriendGamePlayed(*steamIDFriend, pFriendGameInfo); +} + +// accesses old friends names - returns an empty string when their are no more items in the history +DLL(const char*) BS_ISteamFriends_GetFriendPersonaNameHistory(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iPersonaName) { + return lpSteamFriends->GetFriendPersonaNameHistory(*steamIDFriend, iPersonaName); +} + +// friends steam level +DLL(int32_t) BS_ISteamFriends_GetFriendSteamLevel(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendSteamLevel(*steamIDFriend); +} + +// Returns nickname the current user has set for the specified player. Returns NULL if the no nickname has been set for that player. +DLL(const char*) BS_ISteamFriends_GetPlayerNickname(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriends) { + const char* nickname = lpSteamFriends->GetPlayerNickname(*steamIDFriends); + if (nickname == NULL) { + nickname = ""; + } + return nickname; +} + +// friend grouping (tag) apis +// returns the number of friends groups +DLL(int32_t) BS_ISteamFriends_GetFriendsGroupCount(ISteamFriends* lpSteamFriends) { + return lpSteamFriends->GetFriendsGroupCount(); +} + +// returns the friends group ID for the given index (invalid indices return k_FriendsGroupID_Invalid) +DLL(FriendsGroupID_t) BS_ISteamFriends_GetFriendsGroupIDByIndex(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { + return lpSteamFriends->GetFriendsGroupIDByIndex(friendsGroupID); +} + +// returns the name for the given friends group (NULL in the case of invalid friends group IDs) +DLL(const char*) BS_ISteamFriends_GetFriendsGroupName(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { + return lpSteamFriends->GetFriendsGroupName(friendsGroupID); +} + +// returns the number of members in a given friends group +DLL(int32_t) BS_ISteamFriends_GetFriendsGroupMembersCount(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID) { + return lpSteamFriends->GetFriendsGroupMembersCount(friendsGroupID); +} + +// gets up to nMembersCount members of the given friends group, if fewer exist than requested those positions' SteamIDs will be invalid +DLL(void) BS_ISteamFriends_GetFriendsGroupMembersList(ISteamFriends* lpSteamFriends, FriendsGroupID_t friendsGroupID, CSteamID* pOutSteamIDMembers, int32_t nMembersCount) { + lpSteamFriends->GetFriendsGroupMembersList(friendsGroupID, pOutSteamIDMembers, nMembersCount); +} + +// returns true if the specified user meets any of the criteria specified in iFriendFlags +// iFriendFlags can be the union (binary or, |) of one or more k_EFriendFlags values +DLL(uint32_t) BS_ISteamFriends_HasFriend(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iFriendsFlags) { + return lpSteamFriends->HasFriend(*steamIDFriend, iFriendsFlags); +} + +// clan (group) iteration and access functions +DLL(int32_t) BS_ISteamFriends_GetClanCount(ISteamFriends* lpSteamFriends) { + return lpSteamFriends->GetClanCount(); +} + +DLL(CSteamID*) BS_ISteamFriends_GetClanByIndex(ISteamFriends* lpSteamFriends, int32_t iClan) { + CSteamID* steamID = new CSteamID(lpSteamFriends->GetClanByIndex(iClan)); + return steamID; +} + +DLL(const char*) BS_ISteamFriends_GetClanName(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return lpSteamFriends->GetClanName(*steamIDClan); +} + +DLL(const char*) BS_ISteamFriends_GetClanTag(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return lpSteamFriends->GetClanTag(*steamIDClan); +} + +// returns the most recent information we have about what's happening in a clan +DLL(uint32_t) BS_ISteamFriends_GetClanActivityCounts(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t* pnOnline, int32_t* pnInGame, int32_t* pnChatting) { + return lpSteamFriends->GetClanActivityCounts(*steamIDClan, pnOnline, pnInGame, pnChatting); +} + +// for clans a user is a member of, they will have reasonably up-to-date information, but for others you'll have to download the info to have the latest +DLL(SteamAPICall_t*) BS_ISteamFriends_DownloadClanActivityCounts(ISteamFriends* lpSteamFriends, CSteamID* psteamIDClans, int32_t cClansToRequest) { + return new uint64_t(lpSteamFriends->DownloadClanActivityCounts(psteamIDClans, cClansToRequest)); +} + +// iterators for getting users in a chat room, lobby, game server or clan +// note that large clans that cannot be iterated by the local user +// note that the current user must be in a lobby to retrieve CSteamIDs of other users in that lobby +// steamIDSource can be the steamID of a group, game server, lobby or chat room +DLL(int32_t) BS_ISteamFriends_GetFriendCountFromSource(ISteamFriends* lpSteamFriends, CSteamID* steamIDSource) { + return lpSteamFriends->GetFriendCountFromSource(*steamIDSource); +} + +DLL(CSteamID*) BS_ISteamFriends_GetFriendFromSourceByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDSource, int32_t iFriend) { + return new CSteamID(lpSteamFriends->GetFriendFromSourceByIndex(*steamIDSource, iFriend)); +} + +// returns true if the local user can see that steamIDUser is a member or in steamIDSource +DLL(uint32_t) BS_ISteamFriends_IsUserInSource(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, CSteamID* steamIDSource) { + return lpSteamFriends->IsUserInSource(*steamIDUser, *steamIDSource); +} + +// User is in a game pressing the talk button (will suppress the microphone for all voice comms from the Steam friends UI) +DLL(void) BS_ISteamFriends_SetInGameVoiceSpeaking(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, uint32_t bSpeaking) { + lpSteamFriends->SetInGameVoiceSpeaking(*steamIDUser, bSpeaking != 0); +} + +// activates the game overlay, with an optional dialog to open +// valid options are "Friends", "Community", "Players", "Settings", "OfficialGameGroup", "Stats", "Achievements" +DLL(void) BS_ISteamFriends_ActivateGameOverlay(ISteamFriends* lpSteamFriends, const char* pchDialog) { + lpSteamFriends->ActivateGameOverlay(pchDialog); +} + +// activates game overlay to a specific place +// valid options are +// "steamid" - opens the overlay web browser to the specified user or groups profile +// "chat" - opens a chat window to the specified user, or joins the group chat +// "jointrade" - opens a window to a Steam Trading session that was started with the ISteamEconomy/StartTrade Web API +// "stats" - opens the overlay web browser to the specified user's stats +// "achievements" - opens the overlay web browser to the specified user's achievements +// "friendadd" - opens the overlay in minimal mode prompting the user to add the target user as a friend +// "friendremove" - opens the overlay in minimal mode prompting the user to remove the target friend +// "friendrequestaccept" - opens the overlay in minimal mode prompting the user to accept an incoming friend invite +// "friendrequestignore" - opens the overlay in minimal mode prompting the user to ignore an incoming friend invite +DLL(void) BS_ISteamFriends_ActivateGameOverlayToUser(ISteamFriends* lpSteamFriends, const char* pchDialog, CSteamID* steamID) { + lpSteamFriends->ActivateGameOverlayToUser(pchDialog, *steamID); +} + +// activates game overlay web browser directly to the specified URL +// full address with protocol type is required, e.g. http://www.steamgames.com/ +DLL(void) BS_ISteamFriends_ActivateGameOverlayToWebPage(ISteamFriends* lpSteamFriends, const char* pchURL) { + lpSteamFriends->ActivateGameOverlayToWebPage(pchURL); +} + +// activates game overlay to store page for app +DLL(void) BS_ISteamFriends_ActivateGameOverlayToStore(ISteamFriends* lpSteamFriends, AppId_t nAppID, EOverlayToStoreFlag eFlag) { + lpSteamFriends->ActivateGameOverlayToStore(nAppID, eFlag); +} + +// Mark a target user as 'played with'. This is a client-side only feature that requires that the calling user is +// in game +DLL(void) BS_ISteamFriends_SetPlayedWith(ISteamFriends* lpSteamFriends, CSteamID* steamIDUserPlayedWith) { + lpSteamFriends->SetPlayedWith(*steamIDUserPlayedWith); +} + +// activates game overlay to open the invite dialog. Invitations will be sent for the provided lobby. +DLL(void) BS_ISteamFriends_ActivateGameOverlayInviteDialog(ISteamFriends* lpSteamFriends, CSteamID* steamIDLobby) { + lpSteamFriends->ActivateGameOverlayInviteDialog(*steamIDLobby); +} + +// gets the small (32x32) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set +DLL(int32_t) BS_ISteamFriends_GetSmallFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetSmallFriendAvatar(*steamIDFriend); +} + +// gets the medium (64x64) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set +DLL(int32_t) BS_ISteamFriends_GetMediumFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetMediumFriendAvatar(*steamIDFriend); +} + +// gets the large (184x184) avatar of the current user, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set +// returns -1 if this image has yet to be loaded, in this case wait for a AvatarImageLoaded_t callback and then call this again +DLL(int32_t) BS_ISteamFriends_GetLargeFriendAvatar(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetLargeFriendAvatar(*steamIDFriend); +} + +// requests information about a user - persona name & avatar +// if bRequireNameOnly is set, then the avatar of a user isn't downloaded +// - it's a lot slower to download avatars and churns the local cache, so if you don't need avatars, don't request them +// if returns true, it means that data is being requested, and a PersonaStateChanged_t callback will be posted when it's retrieved +// if returns false, it means that we already have all the details about that user, and functions can be called immediately +DLL(uint32_t) BS_ISteamFriends_RequestUserInformation(ISteamFriends* lpSteamFriends, CSteamID* steamIDUser, uint32_t bRequireNameOnly) { + return lpSteamFriends->RequestUserInformation(*steamIDUser, bRequireNameOnly != 0); +} + +// requests information about a clan officer list +// when complete, data is returned in ClanOfficerListResponse_t call result +// this makes available the calls below +// you can only ask about clans that a user is a member of +// note that this won't download avatars automatically; if you get an officer, +// and no avatar image is available, call RequestUserInformation( steamID, false ) to download the avatar +DLL(SteamAPICall_t*) BS_ISteamFriends_RequestClanOfficerList(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return new uint64_t(lpSteamFriends->RequestClanOfficerList(*steamIDClan)); +} + +// iteration of clan officers - can only be done when a RequestClanOfficerList() call has completed + +// returns the steamID of the clan owner +DLL(CSteamID*) BS_ISteamFriends_GetClanOwner(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return new CSteamID(lpSteamFriends->GetClanOwner(*steamIDClan)); +} + +// returns the number of officers in a clan (including the owner) +DLL(int32_t) BS_ISteamFriends_GetClanOfficerCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return lpSteamFriends->GetClanOfficerCount(*steamIDClan); +} + +// returns the steamID of a clan officer, by index, of range [0,GetClanOfficerCount) +DLL(CSteamID*) BS_ISteamFriends_GetClanOfficerByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t iOfficer) { + return new CSteamID(lpSteamFriends->GetClanOfficerByIndex(*steamIDClan, iOfficer)); +} + +// if current user is chat restricted, he can't send or receive any text/voice chat messages. +// the user can't see custom avatars. But the user can be online and send/recv game invites. +// a chat restricted user can't add friends or join any groups. +DLL(EUserRestriction) BS_ISteamFriends_GetUserRestrictions(ISteamFriends* lpSteamFriends) { + return (EUserRestriction)lpSteamFriends->GetUserRestrictions(); +} + +// Rich Presence data is automatically shared between friends who are in the same game +// Each user has a set of Key/Value pairs +// Up to 20 different keys can be set +// There are two magic keys: +// "status" - a UTF-8 string that will show up in the 'view game info' dialog in the Steam friends list +// "connect" - a UTF-8 string that contains the command-line for how a friend can connect to a game +// GetFriendRichPresence() returns an empty string "" if no value is set +// SetRichPresence() to a NULL or an empty string deletes the key +// You can iterate the current set of keys for a friend with GetFriendRichPresenceKeyCount() +// and GetFriendRichPresenceKeyByIndex() (typically only used for debugging) +DLL(uint32_t) BS_ISteamFriends_SetRichPresence(ISteamFriends* lpSteamFriends, const char* pchKey, const char* pchValue) { + return lpSteamFriends->SetRichPresence(pchKey, pchValue); +} + +DLL(void) BS_ISteamFriends_ClearRichPresence(ISteamFriends* lpSteamFriends) { + lpSteamFriends->ClearRichPresence(); +} + +DLL(const char*) BS_ISteamFriends_GetFriendRichPresence(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char* pchKey) { + return lpSteamFriends->GetFriendRichPresence(*steamIDFriend, pchKey); +} + +DLL(int32_t) BS_ISteamFriends_GetFriendRichPresenceKeyCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendRichPresenceKeyCount(*steamIDFriend); +} + +DLL(const char*) BS_ISteamFriends_GetFriendRichPresenceKeyByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iKey) { + return lpSteamFriends->GetFriendRichPresenceKeyByIndex(*steamIDFriend, iKey); +} + +// Requests rich presence for a specific user. +DLL(void) BS_ISteamFriends_RequestFriendRichPresence(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + lpSteamFriends->RequestFriendRichPresence(*steamIDFriend); +} + +// rich invite support +// if the target accepts the invite, the pchConnectString gets added to the command-line for launching the game +// if the game is already running, a GameRichPresenceJoinRequested_t callback is posted containing the connect string +// invites can only be sent to friends +DLL(uint32_t) BS_ISteamFriends_InviteUserToGame(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char *pchConnectString) { + return lpSteamFriends->InviteUserToGame(*steamIDFriend, pchConnectString); +} + +// recently-played-with friends iteration +// this iterates the entire list of users recently played with, across games +// GetFriendCoplayTime() returns as a unix time +DLL(int32_t) BS_ISteamFriends_GetCoplayFriendCount(ISteamFriends* lpSteamFriends) { + return lpSteamFriends->GetCoplayFriendCount(); +} + +DLL(CSteamID*) BS_ISteamFriends_GetCoplayFriend(ISteamFriends* lpSteamFriends, int32_t iCoplayFriend) { + return new CSteamID(lpSteamFriends->GetCoplayFriend(iCoplayFriend)); +} + +DLL(int32_t) BS_ISteamFriends_GetFriendCoplayTime(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendCoplayTime(*steamIDFriend); +} + +DLL(AppId_t) BS_ISteamFriends_GetFriendCoplayGame(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend) { + return lpSteamFriends->GetFriendCoplayGame(*steamIDFriend); +} + +// chat interface for games +// this allows in-game access to group (clan) chats from in the game +// the behavior is somewhat sophisticated, because the user may or may not be already in the group chat from outside the game or in the overlay +// use ActivateGameOverlayToUser( "chat", steamIDClan ) to open the in-game overlay version of the chat +DLL(SteamAPICall_t*) BS_ISteamFriends_JoinClanChatRoom(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return new SteamAPICall_t(lpSteamFriends->JoinClanChatRoom(*steamIDClan)); +} + +DLL(uint32_t) BS_ISteamFriends_LeaveClanChatRoom(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return lpSteamFriends->LeaveClanChatRoom(*steamIDClan); +} + +DLL(int32_t) BS_ISteamFriends_GetClanChatMemberCount(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan) { + return lpSteamFriends->GetClanChatMemberCount(*steamIDClan); +} + +DLL(CSteamID*) BS_ISteamFriends_GetChatMemberByIndex(ISteamFriends* lpSteamFriends, CSteamID* steamIDClan, int32_t iUser) { + return new CSteamID(lpSteamFriends->GetChatMemberByIndex(*steamIDClan, iUser)); +} + +DLL(uint32_t) BS_ISteamFriends_SendClanChatMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, const char *pchText) { + return lpSteamFriends->SendClanChatMessage(*steamIDClanChat, pchText); +} + +DLL(int32_t) BS_ISteamFriends_GetClanChatMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, int32_t iMessage, void* prgchText, int32_t cchTextMax, EChatEntryType* peChatEntryType, CSteamID* psteamidChatter) { + return lpSteamFriends->GetClanChatMessage(*steamIDClanChat, iMessage, prgchText, cchTextMax, peChatEntryType, psteamidChatter); +} + +DLL(uint32_t) BS_ISteamFriends_IsClanChatAdmin(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat, CSteamID* steamIDUser) { + return lpSteamFriends->IsClanChatAdmin(*steamIDClanChat, *steamIDUser); +} + +// interact with the Steam (game overlay / desktop) +DLL(uint32_t) BS_ISteamFriends_IsClanChatWindowOpenInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { + return lpSteamFriends->IsClanChatWindowOpenInSteam(*steamIDClanChat); +} + +DLL(uint32_t) BS_ISteamFriends_OpenClanChatWindowInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { + return lpSteamFriends->OpenClanChatWindowInSteam(*steamIDClanChat); +} + +DLL(uint32_t) BS_ISteamFriends_CloseClanChatWindowInSteam(ISteamFriends* lpSteamFriends, CSteamID* steamIDClanChat) { + return lpSteamFriends->CloseClanChatWindowInSteam(*steamIDClanChat); +} + +// peer-to-peer chat interception +// this is so you can show P2P chats inline in the game +DLL(uint32_t) BS_ISteamFriends_SetListenForFriendsMessages(ISteamFriends* lpSteamFriends, uint32_t bInterceptEnabled) { + return lpSteamFriends->SetListenForFriendsMessages(bInterceptEnabled != 0); +} + +DLL(uint32_t) BS_ISteamFriends_ReplyToFriendMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, const char* pchMsgToSend) { + return lpSteamFriends->ReplyToFriendMessage(*steamIDFriend, pchMsgToSend); +} + +DLL(int32_t) BS_ISteamFriends_GetFriendMessage(ISteamFriends* lpSteamFriends, CSteamID* steamIDFriend, int32_t iMessageID, void* pvData, int32_t cubData, EChatEntryType* peChatEntryType) { + return lpSteamFriends->GetFriendMessage(*steamIDFriend, iMessageID, pvData, cubData, peChatEntryType); +} + +// following apis +DLL(SteamAPICall_t*) BS_ISteamFriends_GetFollowerCount(ISteamFriends* lpSteamFriends, CSteamID* steamID) { + return new SteamAPICall_t(lpSteamFriends->GetFollowerCount(*steamID)); +} + +DLL(SteamAPICall_t*) BS_ISteamFriends_IsFollowing(ISteamFriends* lpSteamFriends, CSteamID* steamID) { + return new SteamAPICall_t(lpSteamFriends->IsFollowing(*steamID)); +} + +DLL(SteamAPICall_t*) BS_ISteamFriends_EnumerateFollowingList(ISteamFriends* lpSteamFriends, uint32_t unStartIndex) { + return new SteamAPICall_t(lpSteamFriends->EnumerateFollowingList(unStartIndex)); +} diff --git a/Wrapper/SteamGameServer.cpp b/Wrapper/SteamGameServer.cpp index aa6c738..202fe13 100644 --- a/Wrapper/SteamGameServer.cpp +++ b/Wrapper/SteamGameServer.cpp @@ -1,371 +1,371 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -// Initialize ISteamGameServer interface object, and set server properties which may not be changed. -// -// After calling this function, you should set any additional server parameters, and then -// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn() -// -// - usSteamPort is the local port used to communicate with the steam servers. -// - usGamePort is the port that clients will connect to for gameplay. -// - usQueryPort is the port that will manage server browser related duties and info -// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it -// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving -// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h. -// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the -// server is out of date. (Only servers with the latest version will be listed.) -DLL(uint32_t) BS_SteamGameServer_Init(uint32_t unIP, uint16_t usSteamPort, uint16_t usGamePort, uint16_t usQueryPort, EServerMode eServerMode, const char *pchVersionString) { - return SteamGameServer_Init(unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString); -} - -DLL(void) BS_SteamGameServer_Shutdown() { - SteamGameServer_Shutdown(); -} - -DLL(void) BS_SteamGameServer_RunCallbacks() { - SteamGameServer_RunCallbacks(); -} - -DLL(uint32_t) BS_SteamGameServer_IsSecure() { - return SteamGameServer_BSecure(); -} - -DLL(CSteamID*) BS_SteamGameServer_GetSteamID() { - return new CSteamID(SteamGameServer_GetSteamID()); -} - -//----------------------------------------------------------------------------------------------------------------------------------------------------------// -// steamclient.dll private wrapper functions -// -// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases -//----------------------------------------------------------------------------------------------------------------------------------------------------------// -DLL(HSteamPipe) BS_SteamGameServer_GetHSteamPipe() { - return SteamGameServer_GetHSteamPipe(); -} - -// ISteamGameServer Stuff -//----------------------------------------------------------------------------- -// Purpose: Functions for authenticating users via Steam to play on a game server -//----------------------------------------------------------------------------- -DLL(ISteamGameServer*) BS_SteamGameServer() { - return SteamGameServer(); -} - -// -// Basic server data. These properties, if set, must be set before before calling LogOn. They -// may not be changed after logged in. -// - -/// This is called by SteamGameServer_Init, and you will usually not need to call it directly -DLL(uint32_t) BS_ISteamGameServer_InitGameServer(ISteamGameServer* pSteamGameServer, uint32_t unIP, uint16_t usGamePort, uint16_t usQueryPort, uint32_t unFlags, AppId_t nGameAppId, const char *pchVersionString) { - return pSteamGameServer->InitGameServer(unIP, usGamePort, usQueryPort, unFlags, nGameAppId, pchVersionString); -} - -/// Game product identifier. This is currently used by the master server for version checking purposes. -/// It's a required field, but will eventually will go away, and the AppID will be used for this purpose. -DLL(void) BS_ISteamGameServer_SetProduct(ISteamGameServer* pSteamGameServer, const char *pszProduct) { - pSteamGameServer->SetProduct(pszProduct); -} - -/// Description of the game. This is a required field and is displayed in the steam server browser....for now. -/// This is a required field, but it will go away eventually, as the data should be determined from the AppID. -DLL(void) BS_ISteamGameServer_SetGameDescription(ISteamGameServer* pSteamGameServer, const char *pszGameDescription) { - pSteamGameServer->SetGameDescription(pszGameDescription); -} - -/// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning -/// this application is the original game, not a mod. -/// -/// @see k_cbMaxGameServerGameDir -DLL(void) BS_ISteamGameServer_SetModDir(ISteamGameServer* pSteamGameServer, const char *pszModDir) { - pSteamGameServer->SetModDir(pszModDir); -} - -/// Is this is a dedicated server? The default value is false. -DLL(void) BS_ISteamGameServer_SetDedicatedServer(ISteamGameServer* pSteamGameServer, uint32_t bDedicated) { - pSteamGameServer->SetDedicatedServer(!!bDedicated); -} - -// -// Login -// - -/// Begin process to login to a persistent game server account -/// -/// You need to register for callbacks to determine the result of this operation. -/// @see SteamServersConnected_t -/// @see SteamServerConnectFailure_t -/// @see SteamServersDisconnected_t -DLL(void) BS_ISteamGameServer_LogOn(ISteamGameServer* pSteamGameServer, const char *pszToken) { - pSteamGameServer->LogOn(pszToken); -} - -/// Login to a generic, anonymous account. -/// -/// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init, -/// but this is no longer the case. -DLL(void) BS_ISteamGameServer_LogOnAnonymous(ISteamGameServer* pSteamGameServer) { - pSteamGameServer->LogOnAnonymous(); -} - -/// Begin process of logging game server out of steam -DLL(void) BS_ISteamGameServer_LogOff(ISteamGameServer* pSteamGameServer) { - pSteamGameServer->LogOff(); -} - -// status functions -DLL(uint32_t) BS_ISteamGameServer_IsLoggedOn(ISteamGameServer* pSteamGameServer) { - return pSteamGameServer->BLoggedOn(); -} - -DLL(uint32_t) BS_ISteamGameServer_IsSecure(ISteamGameServer* pSteamGameServer) { - return pSteamGameServer->BSecure(); -} - -DLL(CSteamID*) BS_ISteamGameServer_GetSteamID(ISteamGameServer* pSteamGameServer) { - return new CSteamID(pSteamGameServer->GetSteamID()); -} - -/// Returns true if the master server has requested a restart. -/// Only returns true once per request. -DLL(uint32_t) BS_ISteamGameServer_WasRestartRequested(ISteamGameServer* pSteamGameServer) { - return pSteamGameServer->WasRestartRequested(); -} - -// -// Server state. These properties may be changed at any time. -// - -/// Max player count that will be reported to server browser and client queries -DLL(void) BS_ISteamGameServer_SetMaxPlayerCount(ISteamGameServer* pSteamGameServer, int32_t cPlayersMax) { - pSteamGameServer->SetMaxPlayerCount(cPlayersMax); -} - -/// Number of bots. Default value is zero -DLL(void) BS_ISteamGameServer_SetBotPlayerCount(ISteamGameServer* pSteamGameServer, int32_t cBotplayers) { - pSteamGameServer->SetBotPlayerCount(cBotplayers); -} - -/// Set the name of server as it will appear in the server browser -/// -/// @see k_cbMaxGameServerName -DLL(void) BS_ISteamGameServer_SetServerName(ISteamGameServer* pSteamGameServer, const char *pszServerName) { - pSteamGameServer->SetServerName(pszServerName); -} - -/// Set name of map to report in the server browser -/// -/// @see k_cbMaxGameServerName -DLL(void) BS_ISteamGameServer_SetMapName(ISteamGameServer* pSteamGameServer, const char *pszMapName) { - pSteamGameServer->SetMapName(pszMapName); -} - -/// Let people know if your server will require a password -DLL(void) BS_ISteamGameServer_SetPasswordProtected(ISteamGameServer* pSteamGameServer, uint32_t bPasswordProtected) { - pSteamGameServer->SetPasswordProtected(!!bPasswordProtected); -} - -/// Spectator server. The default value is zero, meaning the service -/// is not used. -DLL(void) BS_ISteamGameServer_SetSpectatorPort(ISteamGameServer* pSteamGameServer, uint16_t unSpectatorPort) { - pSteamGameServer->SetSpectatorPort(unSpectatorPort); -} - -/// Name of the spectator server. (Only used if spectator port is nonzero.) -/// -/// @see k_cbMaxGameServerMapName -DLL(void) BS_ISteamGameServer_SetSpectatorServerName(ISteamGameServer* pSteamGameServer, const char *pszSpectatorServerName) { - pSteamGameServer->SetSpectatorServerName(pszSpectatorServerName); -} - -/// Call this to clear the whole list of key/values that are sent in rules queries. -DLL(void) BS_ISteamGameServer_ClearAllKeyValues(ISteamGameServer* pSteamGameServer) { - pSteamGameServer->ClearAllKeyValues(); -} - -/// Call this to add/update a key/value pair. -DLL(void) BS_ISteamGameServer_SetKeyValue(ISteamGameServer* pSteamGameServer, const char *pKey, const char *pValue) { - pSteamGameServer->SetKeyValue(pKey, pValue); -} - -/// Sets a string defining the "gametags" for this server, this is optional, but if it is set -/// it allows users to filter in the matchmaking/server-browser interfaces based on the value -/// -/// @see k_cbMaxGameServerTags -DLL(void) BS_ISteamGameServer_SetGameTags(ISteamGameServer* pSteamGameServer, const char *pchGameTags) { - pSteamGameServer->SetGameTags(pchGameTags); -} - -/// Sets a string defining the "gamedata" for this server, this is optional, but if it is set -/// it allows users to filter in the matchmaking/server-browser interfaces based on the value -/// don't set this unless it actually changes, its only uploaded to the master once (when -/// acknowledged) -/// -/// @see k_cbMaxGameServerGameData -DLL(void) BS_ISteamGameServer_SetGameData(ISteamGameServer* pSteamGameServer, const char *pchGameData) { - pSteamGameServer->SetGameData(pchGameData); -} - -/// Region identifier. This is an optional field, the default value is empty, meaning the "world" region -DLL(void) BS_ISteamGameServer_SetRegion(ISteamGameServer* pSteamGameServer, const char *pszRegion) { - pSteamGameServer->SetRegion(pszRegion); -} - -// -// Player list management / authentication -// - -// Handles receiving a new connection from a Steam user. This call will ask the Steam -// servers to validate the users identity, app ownership, and VAC status. If the Steam servers -// are off-line, then it will validate the cached ticket itself which will validate app ownership -// and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection() -// and must then be sent up to the game server for authentication. -// -// Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL -// If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication -// for the user has succeeded or failed (the steamid in the callback will match the one returned by this call) -DLL(uint32_t) BS_ISteamGameServer_SendUserConnectAndAuthenticate(ISteamGameServer* pSteamGameServer, uint32_t unIPClient, const void *pvAuthBlob, uint32_t cubAuthBlobSize, CSteamID *pSteamIDUser) { - return pSteamGameServer->SendUserConnectAndAuthenticate(unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser); -} - -// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation. -// -// Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect() -// when this user leaves the server just like you would for a real user. -DLL(CSteamID*) BS_ISteamGameServer_CreateUnauthenticatedUserConnection(ISteamGameServer* pSteamGameServer) { - return new CSteamID(pSteamGameServer->CreateUnauthenticatedUserConnection()); -} - -// Should be called whenever a user leaves our game server, this lets Steam internally -// track which users are currently on which servers for the purposes of preventing a single -// account being logged into multiple servers, showing who is currently on a server, etc. -DLL(void) BS_ISteamGameServer_SendUserDisconnect(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser) { - pSteamGameServer->SendUserDisconnect(*pSteamIDUser); -} - -// Update the data to be displayed in the server browser and matchmaking interfaces for a user -// currently connected to the server. For regular users you must call this after you receive a -// GSUserValidationSuccess callback. -// -// Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player) -DLL(uint32_t) BS_ISteamGameServer_UpdateUserData(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser, const char *pchPlayerName, uint32_t uScore) { - return pSteamGameServer->BUpdateUserData(*pSteamIDUser, pchPlayerName, uScore); -} - -// New auth system APIs - do not mix with the old auth system APIs. -// ---------------------------------------------------------------- - -// Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ). -// pcbTicket retrieves the length of the actual ticket. -DLL(HAuthTicket) BS_ISteamGameServer_GetAuthSessionTicket(ISteamGameServer* pSteamGameServer, void *pTicket, int32_t cbMaxTicket, uint32_t *pcbTicket) { - return pSteamGameServer->GetAuthSessionTicket(pTicket, cbMaxTicket, pcbTicket); -} - -// Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused -// Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) -DLL(EBeginAuthSessionResult) BS_ISteamGameServer_BeginAuthSession(ISteamGameServer* pSteamGameServer, const void *pAuthTicket, int32_t cbAuthTicket, CSteamID* pSteamID) { - return pSteamGameServer->BeginAuthSession(pAuthTicket, cbAuthTicket, *pSteamID); -} - -// Stop tracking started by BeginAuthSession - called when no longer playing game with this entity -DLL(void) BS_ISteamGameServer_EndAuthSession(ISteamGameServer* pSteamGameServer, CSteamID* pSteamID) { - pSteamGameServer->EndAuthSession(*pSteamID); -} - -// Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to -DLL(void) BS_ISteamGameServer_CancelAuthTicket(ISteamGameServer* pSteamGameServer, HAuthTicket hAuthTicket) { - pSteamGameServer->CancelAuthTicket(hAuthTicket); -} - -// After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function -// to determine if the user owns downloadable content specified by the provided AppID. -DLL(EUserHasLicenseForAppResult) BS_ISteamGameServer_UserHasLicenseForApp(ISteamGameServer* pSteamGameServer, CSteamID* pSteamID, AppId_t appID) { - return pSteamGameServer->UserHasLicenseForApp(*pSteamID, appID); -} - -// Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t -// returns false if we're not connected to the steam servers and thus cannot ask -DLL(uint32_t) BS_ISteamGameServer_RequestUserGroupStatus(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser, CSteamID* pSteamIDGroup) { - return pSteamGameServer->RequestUserGroupStatus(*pSteamIDUser, *pSteamIDGroup); -} - -// Returns the public IP of the server according to Steam, useful when the server is -// behind NAT and you want to advertise its IP in a lobby for other clients to directly -// connect to -DLL(uint32_t) BS_ISteamGameServer_GetPublicIP(ISteamGameServer* pSteamGameServer) { - return pSteamGameServer->GetPublicIP(); -} - -// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own -// socket to talk to the master server on, it lets the game use its socket to forward messages -// back and forth. This prevents us from requiring server ops to open up yet another port -// in their firewalls. -// -// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001 - -// These are used when you've elected to multiplex the game server's UDP socket -// rather than having the master server updater use its own sockets. -// -// Source games use this to simplify the job of the server admins, so they -// don't have to open up more ports on their firewalls. - -// Call this when a packet that starts with 0xFFFFFFFF comes in. That means -// it's for us. -DLL(uint32_t) BS_ISteamGameServer_HandleIncomingPacket(ISteamGameServer* pSteamGameServer, const void *pData, int32_t cbData, uint32_t srcIP, uint16_t srcPort) { - return pSteamGameServer->HandleIncomingPacket(pData, cbData, srcIP, srcPort); -} - -// AFTER calling HandleIncomingPacket for any packets that came in that frame, call this. -// This gets a packet that the master server updater needs to send out on UDP. -// It returns the length of the packet it wants to send, or 0 if there are no more packets to send. -// Call this each frame until it returns 0. -DLL(uint32_t) BS_ISteamGameServer_GetNextOutgoingPacket(ISteamGameServer* pSteamGameServer, void *pOut, int32_t cbMaxOut, uint32_t *pNetAdr, uint16_t *pPort) { - return pSteamGameServer->GetNextOutgoingPacket(pOut, cbMaxOut, pNetAdr, pPort); -} - -// -// Control heartbeats / advertisement with master server -// - -// Call this as often as you like to tell the master server updater whether or not -// you want it to be active (default: off). -DLL(void) BS_ISteamGameServer_EnableHeartbeats(ISteamGameServer* pSteamGameServer, uint32_t bActive) { - pSteamGameServer->EnableHeartbeats(!!bActive); -} - -// You usually don't need to modify this. -// Pass -1 to use the default value for iHeartbeatInterval. -// Some mods change this. -DLL(void) BS_ISteamGameServer_SetHeartbeatInterval(ISteamGameServer* pSteamGameServer, int32_t iHeartbeatInterval) { - pSteamGameServer->SetHeartbeatInterval(iHeartbeatInterval); -} - -// Force a heartbeat to steam at the next opportunity -DLL(void) BS_ISteamGameServer_ForceHeartbeat(ISteamGameServer* pSteamGameServer) { - pSteamGameServer->ForceHeartbeat(); -} - -// associate this game server with this clan for the purposes of computing player compat -DLL(SteamAPICall_t*) BS_ISteamGameServer_AssociateWithClan(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDClan) { - return new SteamAPICall_t(pSteamGameServer->AssociateWithClan(*pSteamIDClan)); -} - -// ask if any of the current players dont want to play with this new player - or vice versa -DLL(SteamAPICall_t*) BS_ISteamGameServer_ComputeNewPlayerCompatibility(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDNewPlayer) { - return new SteamAPICall_t(pSteamGameServer->ComputeNewPlayerCompatibility(*pSteamIDNewPlayer)); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +// Initialize ISteamGameServer interface object, and set server properties which may not be changed. +// +// After calling this function, you should set any additional server parameters, and then +// call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn() +// +// - usSteamPort is the local port used to communicate with the steam servers. +// - usGamePort is the port that clients will connect to for gameplay. +// - usQueryPort is the port that will manage server browser related duties and info +// pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it +// will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving +// UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h. +// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the +// server is out of date. (Only servers with the latest version will be listed.) +DLL(uint32_t) BS_SteamGameServer_Init(uint32_t unIP, uint16_t usSteamPort, uint16_t usGamePort, uint16_t usQueryPort, EServerMode eServerMode, const char *pchVersionString) { + return SteamGameServer_Init(unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString); +} + +DLL(void) BS_SteamGameServer_Shutdown() { + SteamGameServer_Shutdown(); +} + +DLL(void) BS_SteamGameServer_RunCallbacks() { + SteamGameServer_RunCallbacks(); +} + +DLL(uint32_t) BS_SteamGameServer_IsSecure() { + return SteamGameServer_BSecure(); +} + +DLL(CSteamID*) BS_SteamGameServer_GetSteamID() { + return new CSteamID(SteamGameServer_GetSteamID()); +} + +//----------------------------------------------------------------------------------------------------------------------------------------------------------// +// steamclient.dll private wrapper functions +// +// The following functions are part of abstracting API access to the steamclient.dll, but should only be used in very specific cases +//----------------------------------------------------------------------------------------------------------------------------------------------------------// +DLL(HSteamPipe) BS_SteamGameServer_GetHSteamPipe() { + return SteamGameServer_GetHSteamPipe(); +} + +// ISteamGameServer Stuff +//----------------------------------------------------------------------------- +// Purpose: Functions for authenticating users via Steam to play on a game server +//----------------------------------------------------------------------------- +DLL(ISteamGameServer*) BS_SteamGameServer() { + return SteamGameServer(); +} + +// +// Basic server data. These properties, if set, must be set before before calling LogOn. They +// may not be changed after logged in. +// + +/// This is called by SteamGameServer_Init, and you will usually not need to call it directly +DLL(uint32_t) BS_ISteamGameServer_InitGameServer(ISteamGameServer* pSteamGameServer, uint32_t unIP, uint16_t usGamePort, uint16_t usQueryPort, uint32_t unFlags, AppId_t nGameAppId, const char *pchVersionString) { + return pSteamGameServer->InitGameServer(unIP, usGamePort, usQueryPort, unFlags, nGameAppId, pchVersionString); +} + +/// Game product identifier. This is currently used by the master server for version checking purposes. +/// It's a required field, but will eventually will go away, and the AppID will be used for this purpose. +DLL(void) BS_ISteamGameServer_SetProduct(ISteamGameServer* pSteamGameServer, const char *pszProduct) { + pSteamGameServer->SetProduct(pszProduct); +} + +/// Description of the game. This is a required field and is displayed in the steam server browser....for now. +/// This is a required field, but it will go away eventually, as the data should be determined from the AppID. +DLL(void) BS_ISteamGameServer_SetGameDescription(ISteamGameServer* pSteamGameServer, const char *pszGameDescription) { + pSteamGameServer->SetGameDescription(pszGameDescription); +} + +/// If your game is a "mod," pass the string that identifies it. The default is an empty string, meaning +/// this application is the original game, not a mod. +/// +/// @see k_cbMaxGameServerGameDir +DLL(void) BS_ISteamGameServer_SetModDir(ISteamGameServer* pSteamGameServer, const char *pszModDir) { + pSteamGameServer->SetModDir(pszModDir); +} + +/// Is this is a dedicated server? The default value is false. +DLL(void) BS_ISteamGameServer_SetDedicatedServer(ISteamGameServer* pSteamGameServer, uint32_t bDedicated) { + pSteamGameServer->SetDedicatedServer(!!bDedicated); +} + +// +// Login +// + +/// Begin process to login to a persistent game server account +/// +/// You need to register for callbacks to determine the result of this operation. +/// @see SteamServersConnected_t +/// @see SteamServerConnectFailure_t +/// @see SteamServersDisconnected_t +DLL(void) BS_ISteamGameServer_LogOn(ISteamGameServer* pSteamGameServer, const char *pszToken) { + pSteamGameServer->LogOn(pszToken); +} + +/// Login to a generic, anonymous account. +/// +/// Note: in previous versions of the SDK, this was automatically called within SteamGameServer_Init, +/// but this is no longer the case. +DLL(void) BS_ISteamGameServer_LogOnAnonymous(ISteamGameServer* pSteamGameServer) { + pSteamGameServer->LogOnAnonymous(); +} + +/// Begin process of logging game server out of steam +DLL(void) BS_ISteamGameServer_LogOff(ISteamGameServer* pSteamGameServer) { + pSteamGameServer->LogOff(); +} + +// status functions +DLL(uint32_t) BS_ISteamGameServer_IsLoggedOn(ISteamGameServer* pSteamGameServer) { + return pSteamGameServer->BLoggedOn(); +} + +DLL(uint32_t) BS_ISteamGameServer_IsSecure(ISteamGameServer* pSteamGameServer) { + return pSteamGameServer->BSecure(); +} + +DLL(CSteamID*) BS_ISteamGameServer_GetSteamID(ISteamGameServer* pSteamGameServer) { + return new CSteamID(pSteamGameServer->GetSteamID()); +} + +/// Returns true if the master server has requested a restart. +/// Only returns true once per request. +DLL(uint32_t) BS_ISteamGameServer_WasRestartRequested(ISteamGameServer* pSteamGameServer) { + return pSteamGameServer->WasRestartRequested(); +} + +// +// Server state. These properties may be changed at any time. +// + +/// Max player count that will be reported to server browser and client queries +DLL(void) BS_ISteamGameServer_SetMaxPlayerCount(ISteamGameServer* pSteamGameServer, int32_t cPlayersMax) { + pSteamGameServer->SetMaxPlayerCount(cPlayersMax); +} + +/// Number of bots. Default value is zero +DLL(void) BS_ISteamGameServer_SetBotPlayerCount(ISteamGameServer* pSteamGameServer, int32_t cBotplayers) { + pSteamGameServer->SetBotPlayerCount(cBotplayers); +} + +/// Set the name of server as it will appear in the server browser +/// +/// @see k_cbMaxGameServerName +DLL(void) BS_ISteamGameServer_SetServerName(ISteamGameServer* pSteamGameServer, const char *pszServerName) { + pSteamGameServer->SetServerName(pszServerName); +} + +/// Set name of map to report in the server browser +/// +/// @see k_cbMaxGameServerName +DLL(void) BS_ISteamGameServer_SetMapName(ISteamGameServer* pSteamGameServer, const char *pszMapName) { + pSteamGameServer->SetMapName(pszMapName); +} + +/// Let people know if your server will require a password +DLL(void) BS_ISteamGameServer_SetPasswordProtected(ISteamGameServer* pSteamGameServer, uint32_t bPasswordProtected) { + pSteamGameServer->SetPasswordProtected(!!bPasswordProtected); +} + +/// Spectator server. The default value is zero, meaning the service +/// is not used. +DLL(void) BS_ISteamGameServer_SetSpectatorPort(ISteamGameServer* pSteamGameServer, uint16_t unSpectatorPort) { + pSteamGameServer->SetSpectatorPort(unSpectatorPort); +} + +/// Name of the spectator server. (Only used if spectator port is nonzero.) +/// +/// @see k_cbMaxGameServerMapName +DLL(void) BS_ISteamGameServer_SetSpectatorServerName(ISteamGameServer* pSteamGameServer, const char *pszSpectatorServerName) { + pSteamGameServer->SetSpectatorServerName(pszSpectatorServerName); +} + +/// Call this to clear the whole list of key/values that are sent in rules queries. +DLL(void) BS_ISteamGameServer_ClearAllKeyValues(ISteamGameServer* pSteamGameServer) { + pSteamGameServer->ClearAllKeyValues(); +} + +/// Call this to add/update a key/value pair. +DLL(void) BS_ISteamGameServer_SetKeyValue(ISteamGameServer* pSteamGameServer, const char *pKey, const char *pValue) { + pSteamGameServer->SetKeyValue(pKey, pValue); +} + +/// Sets a string defining the "gametags" for this server, this is optional, but if it is set +/// it allows users to filter in the matchmaking/server-browser interfaces based on the value +/// +/// @see k_cbMaxGameServerTags +DLL(void) BS_ISteamGameServer_SetGameTags(ISteamGameServer* pSteamGameServer, const char *pchGameTags) { + pSteamGameServer->SetGameTags(pchGameTags); +} + +/// Sets a string defining the "gamedata" for this server, this is optional, but if it is set +/// it allows users to filter in the matchmaking/server-browser interfaces based on the value +/// don't set this unless it actually changes, its only uploaded to the master once (when +/// acknowledged) +/// +/// @see k_cbMaxGameServerGameData +DLL(void) BS_ISteamGameServer_SetGameData(ISteamGameServer* pSteamGameServer, const char *pchGameData) { + pSteamGameServer->SetGameData(pchGameData); +} + +/// Region identifier. This is an optional field, the default value is empty, meaning the "world" region +DLL(void) BS_ISteamGameServer_SetRegion(ISteamGameServer* pSteamGameServer, const char *pszRegion) { + pSteamGameServer->SetRegion(pszRegion); +} + +// +// Player list management / authentication +// + +// Handles receiving a new connection from a Steam user. This call will ask the Steam +// servers to validate the users identity, app ownership, and VAC status. If the Steam servers +// are off-line, then it will validate the cached ticket itself which will validate app ownership +// and identity. The AuthBlob here should be acquired on the game client using SteamUser()->InitiateGameConnection() +// and must then be sent up to the game server for authentication. +// +// Return Value: returns true if the users ticket passes basic checks. pSteamIDUser will contain the Steam ID of this user. pSteamIDUser must NOT be NULL +// If the call succeeds then you should expect a GSClientApprove_t or GSClientDeny_t callback which will tell you whether authentication +// for the user has succeeded or failed (the steamid in the callback will match the one returned by this call) +DLL(uint32_t) BS_ISteamGameServer_SendUserConnectAndAuthenticate(ISteamGameServer* pSteamGameServer, uint32_t unIPClient, const void *pvAuthBlob, uint32_t cubAuthBlobSize, CSteamID *pSteamIDUser) { + return pSteamGameServer->SendUserConnectAndAuthenticate(unIPClient, pvAuthBlob, cubAuthBlobSize, pSteamIDUser); +} + +// Creates a fake user (ie, a bot) which will be listed as playing on the server, but skips validation. +// +// Return Value: Returns a SteamID for the user to be tracked with, you should call HandleUserDisconnect() +// when this user leaves the server just like you would for a real user. +DLL(CSteamID*) BS_ISteamGameServer_CreateUnauthenticatedUserConnection(ISteamGameServer* pSteamGameServer) { + return new CSteamID(pSteamGameServer->CreateUnauthenticatedUserConnection()); +} + +// Should be called whenever a user leaves our game server, this lets Steam internally +// track which users are currently on which servers for the purposes of preventing a single +// account being logged into multiple servers, showing who is currently on a server, etc. +DLL(void) BS_ISteamGameServer_SendUserDisconnect(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser) { + pSteamGameServer->SendUserDisconnect(*pSteamIDUser); +} + +// Update the data to be displayed in the server browser and matchmaking interfaces for a user +// currently connected to the server. For regular users you must call this after you receive a +// GSUserValidationSuccess callback. +// +// Return Value: true if successful, false if failure (ie, steamIDUser wasn't for an active player) +DLL(uint32_t) BS_ISteamGameServer_UpdateUserData(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser, const char *pchPlayerName, uint32_t uScore) { + return pSteamGameServer->BUpdateUserData(*pSteamIDUser, pchPlayerName, uScore); +} + +// New auth system APIs - do not mix with the old auth system APIs. +// ---------------------------------------------------------------- + +// Retrieve ticket to be sent to the entity who wishes to authenticate you ( using BeginAuthSession API ). +// pcbTicket retrieves the length of the actual ticket. +DLL(HAuthTicket) BS_ISteamGameServer_GetAuthSessionTicket(ISteamGameServer* pSteamGameServer, void *pTicket, int32_t cbMaxTicket, uint32_t *pcbTicket) { + return pSteamGameServer->GetAuthSessionTicket(pTicket, cbMaxTicket, pcbTicket); +} + +// Authenticate ticket ( from GetAuthSessionTicket ) from entity steamID to be sure it is valid and isnt reused +// Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) +DLL(EBeginAuthSessionResult) BS_ISteamGameServer_BeginAuthSession(ISteamGameServer* pSteamGameServer, const void *pAuthTicket, int32_t cbAuthTicket, CSteamID* pSteamID) { + return pSteamGameServer->BeginAuthSession(pAuthTicket, cbAuthTicket, *pSteamID); +} + +// Stop tracking started by BeginAuthSession - called when no longer playing game with this entity +DLL(void) BS_ISteamGameServer_EndAuthSession(ISteamGameServer* pSteamGameServer, CSteamID* pSteamID) { + pSteamGameServer->EndAuthSession(*pSteamID); +} + +// Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to +DLL(void) BS_ISteamGameServer_CancelAuthTicket(ISteamGameServer* pSteamGameServer, HAuthTicket hAuthTicket) { + pSteamGameServer->CancelAuthTicket(hAuthTicket); +} + +// After receiving a user's authentication data, and passing it to SendUserConnectAndAuthenticate, use this function +// to determine if the user owns downloadable content specified by the provided AppID. +DLL(EUserHasLicenseForAppResult) BS_ISteamGameServer_UserHasLicenseForApp(ISteamGameServer* pSteamGameServer, CSteamID* pSteamID, AppId_t appID) { + return pSteamGameServer->UserHasLicenseForApp(*pSteamID, appID); +} + +// Ask if a user in in the specified group, results returns async by GSUserGroupStatus_t +// returns false if we're not connected to the steam servers and thus cannot ask +DLL(uint32_t) BS_ISteamGameServer_RequestUserGroupStatus(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDUser, CSteamID* pSteamIDGroup) { + return pSteamGameServer->RequestUserGroupStatus(*pSteamIDUser, *pSteamIDGroup); +} + +// Returns the public IP of the server according to Steam, useful when the server is +// behind NAT and you want to advertise its IP in a lobby for other clients to directly +// connect to +DLL(uint32_t) BS_ISteamGameServer_GetPublicIP(ISteamGameServer* pSteamGameServer) { + return pSteamGameServer->GetPublicIP(); +} + +// These are in GameSocketShare mode, where instead of ISteamGameServer creating its own +// socket to talk to the master server on, it lets the game use its socket to forward messages +// back and forth. This prevents us from requiring server ops to open up yet another port +// in their firewalls. +// +// the IP address and port should be in host order, i.e 127.0.0.1 == 0x7f000001 + +// These are used when you've elected to multiplex the game server's UDP socket +// rather than having the master server updater use its own sockets. +// +// Source games use this to simplify the job of the server admins, so they +// don't have to open up more ports on their firewalls. + +// Call this when a packet that starts with 0xFFFFFFFF comes in. That means +// it's for us. +DLL(uint32_t) BS_ISteamGameServer_HandleIncomingPacket(ISteamGameServer* pSteamGameServer, const void *pData, int32_t cbData, uint32_t srcIP, uint16_t srcPort) { + return pSteamGameServer->HandleIncomingPacket(pData, cbData, srcIP, srcPort); +} + +// AFTER calling HandleIncomingPacket for any packets that came in that frame, call this. +// This gets a packet that the master server updater needs to send out on UDP. +// It returns the length of the packet it wants to send, or 0 if there are no more packets to send. +// Call this each frame until it returns 0. +DLL(uint32_t) BS_ISteamGameServer_GetNextOutgoingPacket(ISteamGameServer* pSteamGameServer, void *pOut, int32_t cbMaxOut, uint32_t *pNetAdr, uint16_t *pPort) { + return pSteamGameServer->GetNextOutgoingPacket(pOut, cbMaxOut, pNetAdr, pPort); +} + +// +// Control heartbeats / advertisement with master server +// + +// Call this as often as you like to tell the master server updater whether or not +// you want it to be active (default: off). +DLL(void) BS_ISteamGameServer_EnableHeartbeats(ISteamGameServer* pSteamGameServer, uint32_t bActive) { + pSteamGameServer->EnableHeartbeats(!!bActive); +} + +// You usually don't need to modify this. +// Pass -1 to use the default value for iHeartbeatInterval. +// Some mods change this. +DLL(void) BS_ISteamGameServer_SetHeartbeatInterval(ISteamGameServer* pSteamGameServer, int32_t iHeartbeatInterval) { + pSteamGameServer->SetHeartbeatInterval(iHeartbeatInterval); +} + +// Force a heartbeat to steam at the next opportunity +DLL(void) BS_ISteamGameServer_ForceHeartbeat(ISteamGameServer* pSteamGameServer) { + pSteamGameServer->ForceHeartbeat(); +} + +// associate this game server with this clan for the purposes of computing player compat +DLL(SteamAPICall_t*) BS_ISteamGameServer_AssociateWithClan(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDClan) { + return new SteamAPICall_t(pSteamGameServer->AssociateWithClan(*pSteamIDClan)); +} + +// ask if any of the current players dont want to play with this new player - or vice versa +DLL(SteamAPICall_t*) BS_ISteamGameServer_ComputeNewPlayerCompatibility(ISteamGameServer* pSteamGameServer, CSteamID* pSteamIDNewPlayer) { + return new SteamAPICall_t(pSteamGameServer->ComputeNewPlayerCompatibility(*pSteamIDNewPlayer)); } \ No newline at end of file diff --git a/Wrapper/SteamGameServerStats.cpp b/Wrapper/SteamGameServerStats.cpp index 49aade7..5150467 100644 --- a/Wrapper/SteamGameServerStats.cpp +++ b/Wrapper/SteamGameServerStats.cpp @@ -1,81 +1,81 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: Functions for authenticating users via Steam to play on a game server -//----------------------------------------------------------------------------- -DLL(ISteamGameServerStats*) BS_SteamGameServerStats() { - return SteamGameServerStats(); -} - -// downloads stats for the user -// returns a GSStatsReceived_t callback when completed -// if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail -// these stats will only be auto-updated for clients playing on the server. For other -// users you'll need to call RequestUserStats() again to refresh any data -DLL(SteamAPICall_t*) BS_ISteamGameServerStats_RequestUserStats(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser) { - return new SteamAPICall_t(pSteamGameServerStats->RequestUserStats(*steamIDUser)); -} - -// Store the current data on the server, will get a GSStatsStored_t callback when set. -// -// If the callback has a result of k_EResultInvalidParam, one or more stats -// uploaded has been rejected, either because they broke constraints -// or were out of date. In this case the server sends back updated values. -// The stats should be re-iterated to keep in sync. -DLL(SteamAPICall_t*) BS_ISteamGameServerStats_StoreUserStats(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser) { - return new SteamAPICall_t(pSteamGameServerStats->StoreUserStats(*steamIDUser)); -} - -// requests stat information for a user, usable after a successful call to RequestUserStats() -DLL(uint32_t) BS_ISteamGameServerStats_GetUserStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pData) { - return pSteamGameServerStats->GetUserStat(*steamIDUser, pchName, (int32_t*)pData); -} - -DLL(uint32_t) BS_ISteamGameServerStats_GetUserStatF(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, float_t* pData) { - return pSteamGameServerStats->GetUserStat(*steamIDUser, pchName, pData); -} - -DLL(uint32_t) BS_ISteamGameServerStats_GetUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pbAchieved) { - return pSteamGameServerStats->GetUserAchievement(*steamIDUser, pchName, (bool*)pbAchieved); -} - -// Set / update stats and achievements. -// Note: These updates will work only on stats game servers are allowed to edit and only for -// game servers that have been declared as officially controlled by the game creators. -// Set the IP range of your official servers on the Steamworks page -DLL(uint32_t) BS_ISteamGameServerStats_SetUserStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t nData) { - return pSteamGameServerStats->SetUserStat(*steamIDUser, pchName, (int32_t)nData); -} - -DLL(uint32_t) BS_ISteamGameServerStats_SetUserStatF(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, float_t fData) { - return pSteamGameServerStats->SetUserStat(*steamIDUser, pchName, fData); -} - -DLL(uint32_t) BS_ISteamGameServerStats_UpdateUserAvgRateStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char *pchName, float flCountThisSession, double* pdSessionLength) { - return pSteamGameServerStats->UpdateUserAvgRateStat(*steamIDUser, pchName, flCountThisSession, *pdSessionLength); -} - -DLL(uint32_t) BS_ISteamGameServerStats_SetUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName) { - return pSteamGameServerStats->SetUserAchievement(*steamIDUser, pchName); -} - -DLL(uint32_t) BS_ISteamGameServerStats_ClearUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName) { - return pSteamGameServerStats->ClearUserAchievement(*steamIDUser, pchName); -} - +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Functions for authenticating users via Steam to play on a game server +//----------------------------------------------------------------------------- +DLL(ISteamGameServerStats*) BS_SteamGameServerStats() { + return SteamGameServerStats(); +} + +// downloads stats for the user +// returns a GSStatsReceived_t callback when completed +// if the user has no stats, GSStatsReceived_t.m_eResult will be set to k_EResultFail +// these stats will only be auto-updated for clients playing on the server. For other +// users you'll need to call RequestUserStats() again to refresh any data +DLL(SteamAPICall_t*) BS_ISteamGameServerStats_RequestUserStats(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser) { + return new SteamAPICall_t(pSteamGameServerStats->RequestUserStats(*steamIDUser)); +} + +// Store the current data on the server, will get a GSStatsStored_t callback when set. +// +// If the callback has a result of k_EResultInvalidParam, one or more stats +// uploaded has been rejected, either because they broke constraints +// or were out of date. In this case the server sends back updated values. +// The stats should be re-iterated to keep in sync. +DLL(SteamAPICall_t*) BS_ISteamGameServerStats_StoreUserStats(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser) { + return new SteamAPICall_t(pSteamGameServerStats->StoreUserStats(*steamIDUser)); +} + +// requests stat information for a user, usable after a successful call to RequestUserStats() +DLL(uint32_t) BS_ISteamGameServerStats_GetUserStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pData) { + return pSteamGameServerStats->GetUserStat(*steamIDUser, pchName, (int32_t*)pData); +} + +DLL(uint32_t) BS_ISteamGameServerStats_GetUserStatF(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, float_t* pData) { + return pSteamGameServerStats->GetUserStat(*steamIDUser, pchName, pData); +} + +DLL(uint32_t) BS_ISteamGameServerStats_GetUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pbAchieved) { + return pSteamGameServerStats->GetUserAchievement(*steamIDUser, pchName, (bool*)pbAchieved); +} + +// Set / update stats and achievements. +// Note: These updates will work only on stats game servers are allowed to edit and only for +// game servers that have been declared as officially controlled by the game creators. +// Set the IP range of your official servers on the Steamworks page +DLL(uint32_t) BS_ISteamGameServerStats_SetUserStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, uint32_t nData) { + return pSteamGameServerStats->SetUserStat(*steamIDUser, pchName, (int32_t)nData); +} + +DLL(uint32_t) BS_ISteamGameServerStats_SetUserStatF(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName, float_t fData) { + return pSteamGameServerStats->SetUserStat(*steamIDUser, pchName, fData); +} + +DLL(uint32_t) BS_ISteamGameServerStats_UpdateUserAvgRateStat(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char *pchName, float flCountThisSession, double* pdSessionLength) { + return pSteamGameServerStats->UpdateUserAvgRateStat(*steamIDUser, pchName, flCountThisSession, *pdSessionLength); +} + +DLL(uint32_t) BS_ISteamGameServerStats_SetUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName) { + return pSteamGameServerStats->SetUserAchievement(*steamIDUser, pchName); +} + +DLL(uint32_t) BS_ISteamGameServerStats_ClearUserAchievement(ISteamGameServerStats* pSteamGameServerStats, CSteamID* steamIDUser, const char* pchName) { + return pSteamGameServerStats->ClearUserAchievement(*steamIDUser, pchName); +} + diff --git a/Wrapper/SteamHTMLSurface.cpp b/Wrapper/SteamHTMLSurface.cpp index 3195780..31afede 100644 --- a/Wrapper/SteamHTMLSurface.cpp +++ b/Wrapper/SteamHTMLSurface.cpp @@ -1,209 +1,209 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" -#include "SteamworksSDK/public/steam/isteamhtmlsurface.h" - -DLL(ISteamHTMLSurface*) BS_SteamHTMLSurface() { - return SteamHTMLSurface(); -} - -// Must call init and shutdown when starting/ending use of the interface -DLL(uint32_t) BS_ISteamHTMLSurface_Init(ISteamHTMLSurface* pSteamHTMLSurface) { - return pSteamHTMLSurface->Init(); -} - -DLL(uint32_t) BS_ISteamHTMLSurface_Shutdown(ISteamHTMLSurface* pSteamHTMLSurface) { - return pSteamHTMLSurface->Shutdown(); -} - -// Create a browser object for display of a html page, when creation is complete the call handle -// will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser. -// The user agent string is a substring to be added to the general user agent string so you can -// identify your client on web servers. -// The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if -// you do not require this functionality. -DLL(SteamAPICall_t*) BS_ISteamHTMLSurface_CreateBrowser(ISteamHTMLSurface* pSteamHTMLSurface, const char* pchUserAgent, const char* pchUserCSS) { - return new SteamAPICall_t(pSteamHTMLSurface->CreateBrowser(pchUserAgent, pchUserCSS)); -} - -// Call this when you are done with a html surface, this lets us free the resources being used by it -DLL(void) BS_ISteamHTMLSurface_RemoveBrowser(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->RemoveBrowser(unBrowserHandle); -} - -// Navigate to this URL, results in a HTML_StartRequest_t as the request commences -DLL(void) BS_ISteamHTMLSurface_LoadURL(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchURL, const char* pchPostData) { - pSteamHTMLSurface->LoadURL(unBrowserHandle, pchURL, pchPostData); -} - -// Tells the surface the size in pixels to display the surface -DLL(void) BS_ISteamHTMLSurface_SetSize(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32_t unWidth, uint32_t unHeight) { - pSteamHTMLSurface->SetSize(unBrowserHandle, unWidth, unHeight); -} - -// Stop the load of the current html page -DLL(void) BS_ISteamHTMLSurface_StopLoad(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->StopLoad(unBrowserHandle); -} - -// Reload (most likely from local cache) the current page -DLL(void) BS_ISteamHTMLSurface_Reload(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->Reload(unBrowserHandle); -} - -// navigate back in the page history -DLL(void) BS_ISteamHTMLSurface_GoBack(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->GoBack(unBrowserHandle); -} - -// navigate forward in the page history -DLL(void) BS_ISteamHTMLSurface_GoForward(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->GoForward(unBrowserHandle); -} - -// add this header to any url requests from this browser -DLL(void) BS_ISteamHTMLSurface_AddHeader(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchKey, const char* pchValue) { - pSteamHTMLSurface->AddHeader(unBrowserHandle, pchKey, pchValue); -} - -// run this javascript script in the currently loaded page -DLL(void) BS_ISteamHTMLSurface_ExecuteJavascript(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchScript) { - pSteamHTMLSurface->ExecuteJavascript(unBrowserHandle, pchScript); -} - -// Mouse click and mouse movement commands -DLL(void) BS_ISteamHTMLSurface_MouseUp(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { - pSteamHTMLSurface->MouseUp(unBrowserHandle, eMouseButton); -} - -DLL(void) BS_ISteamHTMLSurface_MouseDown(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { - pSteamHTMLSurface->MouseDown(unBrowserHandle, eMouseButton); -} - -DLL(void) BS_ISteamHTMLSurface_MouseDoubleClick(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { - pSteamHTMLSurface->MouseDoubleClick(unBrowserHandle, eMouseButton); -} - -// x and y are relative to the HTML bounds -DLL(void) BS_ISteamHTMLSurface_MouseMove(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int32_t x, int32_t y) { - pSteamHTMLSurface->MouseMove(unBrowserHandle, x, y); -} - -// nDelta is pixels of scroll -DLL(void) BS_ISteamHTMLSurface_MouseWheel(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int32_t nDelta) { - pSteamHTMLSurface->MouseWheel(unBrowserHandle, nDelta); -} - -// keyboard interactions, native keycode is the virtual key code value from your OS -DLL(void) BS_ISteamHTMLSurface_KeyDown(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { - pSteamHTMLSurface->KeyDown(unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers); -} - -DLL(void) BS_ISteamHTMLSurface_KeyUp(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { - pSteamHTMLSurface->KeyUp(unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers); -} - -// cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press) -DLL(void) BS_ISteamHTMLSurface_KeyChar(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { - pSteamHTMLSurface->KeyChar(unBrowserHandle, cUnicodeChar, eHTMLKeyModifiers); -} - -// programmatically scroll this many pixels on the page -DLL(void) BS_ISteamHTMLSurface_SetHorizontalScroll(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll) { - pSteamHTMLSurface->SetHorizontalScroll(unBrowserHandle, nAbsolutePixelScroll); -} - -DLL(void) BS_ISteamHTMLSurface_SetVerticalScroll(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll) { - pSteamHTMLSurface->SetVerticalScroll(unBrowserHandle, nAbsolutePixelScroll); -} - -// tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things -DLL(void) BS_ISteamHTMLSurface_SetKeyFocus(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus) { - pSteamHTMLSurface->SetKeyFocus(unBrowserHandle, bHasKeyFocus); -} - -// open the current pages html code in the local editor of choice, used for debugging -DLL(void) BS_ISteamHTMLSurface_ViewSource(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->ViewSource(unBrowserHandle); -} - -// copy the currently selected text on the html page to the local clipboard -DLL(void) BS_ISteamHTMLSurface_CopyToClipboard(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->CopyToClipboard(unBrowserHandle); -} - -// paste from the local clipboard to the current html page -DLL(void) BS_ISteamHTMLSurface_PasteFromClipboard(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->PasteFromClipboard(unBrowserHandle); -} - -// find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element -DLL(void) BS_ISteamHTMLSurface_Find(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse) { - pSteamHTMLSurface->Find(unBrowserHandle, pchSearchStr, bCurrentlyInFind, bReverse); -} - -// cancel a currently running find -DLL(void) BS_ISteamHTMLSurface_StopFind(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { - pSteamHTMLSurface->StopFind(unBrowserHandle); -} - -// return details about the link at position x,y on the current page -DLL(void) BS_ISteamHTMLSurface_GetLinkAtPosition(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int x, int y) { - pSteamHTMLSurface->GetLinkAtPosition(unBrowserHandle, x, y); -} - -// set a webcookie for the hostname in question -DLL(void) BS_ISteamHTMLSurface_SetCookie(ISteamHTMLSurface* pSteamHTMLSurface, const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly) { - pSteamHTMLSurface->SetCookie(pchHostname, pchKey, pchValue, pchPath, nExpires, bSecure, bHTTPOnly); -} - -// Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care) -DLL(void) BS_ISteamHTMLSurface_SetPageScaleFactor(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY) { - pSteamHTMLSurface->SetPageScaleFactor(unBrowserHandle, flZoom, nPointX, nPointY); -} - -// Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are -// more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled, -// all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1". -// When background mode is disabled, any video or audio objects with that property will resume with ".play()". -DLL(void) BS_ISteamHTMLSurface_SetBackgroundMode(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bBackgroundMode) { - pSteamHTMLSurface->SetBackgroundMode(unBrowserHandle, bBackgroundMode); -} - -// CALLBACKS -// -// These set of functions are used as responses to callback requests -// - -// You MUST call this in response to a HTML_StartRequest_t callback -// Set bAllowed to true to allow this navigation, false to cancel it and stay -// on the current page. You can use this feature to limit the valid pages -// allowed in your HTML surface. -DLL(void) BS_ISteamHTMLSurface_AllowStartRequest(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bAllowed) { - pSteamHTMLSurface->AllowStartRequest(unBrowserHandle, bAllowed); -} - -// You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback -// Set bResult to true for the OK option of a confirm, use false otherwise -DLL(void) BS_ISteamHTMLSurface_JSDialogResponse(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bResult) { - pSteamHTMLSurface->JSDialogResponse(unBrowserHandle, bResult); -} - -// You MUST call this in response to a HTML_FileOpenDialog_t callback -DLL(void) BS_ISteamHTMLSurface_FileLoadDialogResponse(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles) { - pSteamHTMLSurface->FileLoadDialogResponse(unBrowserHandle, pchSelectedFiles); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" +#include "SteamworksSDK/public/steam/isteamhtmlsurface.h" + +DLL(ISteamHTMLSurface*) BS_SteamHTMLSurface() { + return SteamHTMLSurface(); +} + +// Must call init and shutdown when starting/ending use of the interface +DLL(uint32_t) BS_ISteamHTMLSurface_Init(ISteamHTMLSurface* pSteamHTMLSurface) { + return pSteamHTMLSurface->Init(); +} + +DLL(uint32_t) BS_ISteamHTMLSurface_Shutdown(ISteamHTMLSurface* pSteamHTMLSurface) { + return pSteamHTMLSurface->Shutdown(); +} + +// Create a browser object for display of a html page, when creation is complete the call handle +// will return a HTML_BrowserReady_t callback for the HHTMLBrowser of your new browser. +// The user agent string is a substring to be added to the general user agent string so you can +// identify your client on web servers. +// The userCSS string lets you apply a CSS style sheet to every displayed page, leave null if +// you do not require this functionality. +DLL(SteamAPICall_t*) BS_ISteamHTMLSurface_CreateBrowser(ISteamHTMLSurface* pSteamHTMLSurface, const char* pchUserAgent, const char* pchUserCSS) { + return new SteamAPICall_t(pSteamHTMLSurface->CreateBrowser(pchUserAgent, pchUserCSS)); +} + +// Call this when you are done with a html surface, this lets us free the resources being used by it +DLL(void) BS_ISteamHTMLSurface_RemoveBrowser(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->RemoveBrowser(unBrowserHandle); +} + +// Navigate to this URL, results in a HTML_StartRequest_t as the request commences +DLL(void) BS_ISteamHTMLSurface_LoadURL(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchURL, const char* pchPostData) { + pSteamHTMLSurface->LoadURL(unBrowserHandle, pchURL, pchPostData); +} + +// Tells the surface the size in pixels to display the surface +DLL(void) BS_ISteamHTMLSurface_SetSize(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32_t unWidth, uint32_t unHeight) { + pSteamHTMLSurface->SetSize(unBrowserHandle, unWidth, unHeight); +} + +// Stop the load of the current html page +DLL(void) BS_ISteamHTMLSurface_StopLoad(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->StopLoad(unBrowserHandle); +} + +// Reload (most likely from local cache) the current page +DLL(void) BS_ISteamHTMLSurface_Reload(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->Reload(unBrowserHandle); +} + +// navigate back in the page history +DLL(void) BS_ISteamHTMLSurface_GoBack(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->GoBack(unBrowserHandle); +} + +// navigate forward in the page history +DLL(void) BS_ISteamHTMLSurface_GoForward(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->GoForward(unBrowserHandle); +} + +// add this header to any url requests from this browser +DLL(void) BS_ISteamHTMLSurface_AddHeader(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchKey, const char* pchValue) { + pSteamHTMLSurface->AddHeader(unBrowserHandle, pchKey, pchValue); +} + +// run this javascript script in the currently loaded page +DLL(void) BS_ISteamHTMLSurface_ExecuteJavascript(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char* pchScript) { + pSteamHTMLSurface->ExecuteJavascript(unBrowserHandle, pchScript); +} + +// Mouse click and mouse movement commands +DLL(void) BS_ISteamHTMLSurface_MouseUp(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { + pSteamHTMLSurface->MouseUp(unBrowserHandle, eMouseButton); +} + +DLL(void) BS_ISteamHTMLSurface_MouseDown(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { + pSteamHTMLSurface->MouseDown(unBrowserHandle, eMouseButton); +} + +DLL(void) BS_ISteamHTMLSurface_MouseDoubleClick(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, ISteamHTMLSurface::EHTMLMouseButton eMouseButton) { + pSteamHTMLSurface->MouseDoubleClick(unBrowserHandle, eMouseButton); +} + +// x and y are relative to the HTML bounds +DLL(void) BS_ISteamHTMLSurface_MouseMove(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int32_t x, int32_t y) { + pSteamHTMLSurface->MouseMove(unBrowserHandle, x, y); +} + +// nDelta is pixels of scroll +DLL(void) BS_ISteamHTMLSurface_MouseWheel(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int32_t nDelta) { + pSteamHTMLSurface->MouseWheel(unBrowserHandle, nDelta); +} + +// keyboard interactions, native keycode is the virtual key code value from your OS +DLL(void) BS_ISteamHTMLSurface_KeyDown(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { + pSteamHTMLSurface->KeyDown(unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers); +} + +DLL(void) BS_ISteamHTMLSurface_KeyUp(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nNativeKeyCode, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { + pSteamHTMLSurface->KeyUp(unBrowserHandle, nNativeKeyCode, eHTMLKeyModifiers); +} + +// cUnicodeChar is the unicode character point for this keypress (and potentially multiple chars per press) +DLL(void) BS_ISteamHTMLSurface_KeyChar(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 cUnicodeChar, ISteamHTMLSurface::EHTMLKeyModifiers eHTMLKeyModifiers) { + pSteamHTMLSurface->KeyChar(unBrowserHandle, cUnicodeChar, eHTMLKeyModifiers); +} + +// programmatically scroll this many pixels on the page +DLL(void) BS_ISteamHTMLSurface_SetHorizontalScroll(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll) { + pSteamHTMLSurface->SetHorizontalScroll(unBrowserHandle, nAbsolutePixelScroll); +} + +DLL(void) BS_ISteamHTMLSurface_SetVerticalScroll(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, uint32 nAbsolutePixelScroll) { + pSteamHTMLSurface->SetVerticalScroll(unBrowserHandle, nAbsolutePixelScroll); +} + +// tell the html control if it has key focus currently, controls showing the I-beam cursor in text controls amongst other things +DLL(void) BS_ISteamHTMLSurface_SetKeyFocus(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bHasKeyFocus) { + pSteamHTMLSurface->SetKeyFocus(unBrowserHandle, bHasKeyFocus); +} + +// open the current pages html code in the local editor of choice, used for debugging +DLL(void) BS_ISteamHTMLSurface_ViewSource(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->ViewSource(unBrowserHandle); +} + +// copy the currently selected text on the html page to the local clipboard +DLL(void) BS_ISteamHTMLSurface_CopyToClipboard(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->CopyToClipboard(unBrowserHandle); +} + +// paste from the local clipboard to the current html page +DLL(void) BS_ISteamHTMLSurface_PasteFromClipboard(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->PasteFromClipboard(unBrowserHandle); +} + +// find this string in the browser, if bCurrentlyInFind is true then instead cycle to the next matching element +DLL(void) BS_ISteamHTMLSurface_Find(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char *pchSearchStr, bool bCurrentlyInFind, bool bReverse) { + pSteamHTMLSurface->Find(unBrowserHandle, pchSearchStr, bCurrentlyInFind, bReverse); +} + +// cancel a currently running find +DLL(void) BS_ISteamHTMLSurface_StopFind(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle) { + pSteamHTMLSurface->StopFind(unBrowserHandle); +} + +// return details about the link at position x,y on the current page +DLL(void) BS_ISteamHTMLSurface_GetLinkAtPosition(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, int x, int y) { + pSteamHTMLSurface->GetLinkAtPosition(unBrowserHandle, x, y); +} + +// set a webcookie for the hostname in question +DLL(void) BS_ISteamHTMLSurface_SetCookie(ISteamHTMLSurface* pSteamHTMLSurface, const char *pchHostname, const char *pchKey, const char *pchValue, const char *pchPath, RTime32 nExpires, bool bSecure, bool bHTTPOnly) { + pSteamHTMLSurface->SetCookie(pchHostname, pchKey, pchValue, pchPath, nExpires, bSecure, bHTTPOnly); +} + +// Zoom the current page by flZoom ( from 0.0 to 2.0, so to zoom to 120% use 1.2 ), zooming around point X,Y in the page (use 0,0 if you don't care) +DLL(void) BS_ISteamHTMLSurface_SetPageScaleFactor(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, float flZoom, int nPointX, int nPointY) { + pSteamHTMLSurface->SetPageScaleFactor(unBrowserHandle, flZoom, nPointX, nPointY); +} + +// Enable/disable low-resource background mode, where javascript and repaint timers are throttled, resources are +// more aggressively purged from memory, and audio/video elements are paused. When background mode is enabled, +// all HTML5 video and audio objects will execute ".pause()" and gain the property "._steam_background_paused = 1". +// When background mode is disabled, any video or audio objects with that property will resume with ".play()". +DLL(void) BS_ISteamHTMLSurface_SetBackgroundMode(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bBackgroundMode) { + pSteamHTMLSurface->SetBackgroundMode(unBrowserHandle, bBackgroundMode); +} + +// CALLBACKS +// +// These set of functions are used as responses to callback requests +// + +// You MUST call this in response to a HTML_StartRequest_t callback +// Set bAllowed to true to allow this navigation, false to cancel it and stay +// on the current page. You can use this feature to limit the valid pages +// allowed in your HTML surface. +DLL(void) BS_ISteamHTMLSurface_AllowStartRequest(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bAllowed) { + pSteamHTMLSurface->AllowStartRequest(unBrowserHandle, bAllowed); +} + +// You MUST call this in response to a HTML_JSAlert_t or HTML_JSConfirm_t callback +// Set bResult to true for the OK option of a confirm, use false otherwise +DLL(void) BS_ISteamHTMLSurface_JSDialogResponse(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, bool bResult) { + pSteamHTMLSurface->JSDialogResponse(unBrowserHandle, bResult); +} + +// You MUST call this in response to a HTML_FileOpenDialog_t callback +DLL(void) BS_ISteamHTMLSurface_FileLoadDialogResponse(ISteamHTMLSurface* pSteamHTMLSurface, HHTMLBrowser unBrowserHandle, const char **pchSelectedFiles) { + pSteamHTMLSurface->FileLoadDialogResponse(unBrowserHandle, pchSelectedFiles); } \ No newline at end of file diff --git a/Wrapper/SteamHTTP.cpp b/Wrapper/SteamHTTP.cpp index 46ad631..65289ae 100644 --- a/Wrapper/SteamHTTP.cpp +++ b/Wrapper/SteamHTTP.cpp @@ -1,189 +1,189 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: interface to http client -//----------------------------------------------------------------------------- -DLL(ISteamHTTP*) BS_HTTP() { - return SteamHTTP(); -} - -DLL(ISteamHTTP*) BS_GameServerHTTP() { - return SteamGameServerHTTP(); -} - -// Initializes a new HTTP request, returning a handle to use in further operations on it. Requires -// the method (GET or POST) and the absolute URL for the request. Both http and https are supported, -// so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/ -// or such. -DLL(HTTPRequestHandle) BS_ISteamHTTP_CreateHTTPRequest(ISteamHTTP* pThis, EHTTPMethod eHTTPRequestMethod, const char* cAbsoluteUrl) { - return pThis->CreateHTTPRequest(eHTTPRequestMethod, cAbsoluteUrl); -} - -// Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after -// sending the request. This is just so the caller can easily keep track of which callbacks go with which request data. -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestContextValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint64_t* plContextValue) { - return pThis->SetHTTPRequestContextValue(hRequest, *plContextValue); -} - -// Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default -// timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request -// has already been sent. -DLL(int32_t) BS_ISteamHTTP_SetHTTPNetworkActivityTimeout(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds) { - return pThis->SetHTTPRequestNetworkActivityTimeout(hRequest, unTimeoutSeconds); -} - -// Set a request header value for the request, must be called prior to sending the request. Will -// return false if the handle is invalid or the request is already sent. -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestHeaderValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue) { - return pThis->SetHTTPRequestHeaderValue(hRequest, pchHeaderName, pchHeaderValue); -} - -// Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified -// when creating the request. Must be called prior to sending the request. Will return false if the -// handle is invalid or the request is already sent. -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue) { - return pThis->SetHTTPRequestGetOrPostParameter(hRequest, pchParamName, pchParamValue); -} - -// Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on -// asynchronous response via callback. -// -// Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control -// header and only do a local cache lookup rather than sending any actual remote request. -DLL(int32_t) BS_ISteamHTTP_SendHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle) { - return pThis->SendHTTPRequest(hRequest, pCallHandle); -} - -// Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on -// asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and -// HTTPRequestDataReceived_t callbacks while streaming. -DLL(int32_t) BS_ISteamHTTP_SendHTTPRequestAndStreamResponse(ISteamHTTP* pThis, HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle) { - return pThis->SendHTTPRequestAndStreamResponse(hRequest, pCallHandle); -} - -// Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move -// the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent. -DLL(int32_t) BS_ISteamHTTP_DeferHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { - return pThis->DeferHTTPRequest(hRequest); -} - -// Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move -// the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent. -DLL(int32_t) BS_ISteamHTTP_PrioritizeHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { - return pThis->PrioritizeHTTPRequest(hRequest); -} - -// Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also -// returns the size of the header value if present so the caller and allocate a correctly sized buffer for -// GetHTTPResponseHeaderValue. -DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseHeaderSize(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize) { - return pThis->GetHTTPResponseHeaderSize(hRequest, pchHeaderName, unResponseHeaderSize); -} - -// Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the -// header is not present or if your buffer is too small to contain it's value. You should first call -// BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed. -DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseHeaderValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize) { - return pThis->GetHTTPResponseHeaderValue(hRequest, pchHeaderName, pHeaderValueBuffer, unBufferSize); -} - -// Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the -// handle is invalid. -DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseBodySize(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 *unBodySize) { - return pThis->GetHTTPResponseBodySize(hRequest, unBodySize); -} - -// Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the -// handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out -// the correct buffer size to use. -DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseBodyData(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize) { - return pThis->GetHTTPResponseBodyData(hRequest, pBodyDataBuffer, unBufferSize); -} - -// Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the -// handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset -// do not match the size and offset sent in HTTPRequestDataReceived_t. -DLL(int32_t) BS_ISteamHTTP_GetHTTPStreamingResponseBodyData(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize) { - return pThis->GetHTTPStreamingResponseBodyData(hRequest, cOffset, pBodyDataBuffer, unBufferSize); -} - -// Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t -// callback and finishing using the response. -DLL(int32_t) BS_ISteamHTTP_ReleaseHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { - return pThis->ReleaseHTTPRequest(hRequest); -} - -// Gets progress on downloading the body for the request. This will be zero unless a response header has already been -// received which included a content-length field. For responses that contain no content-length it will report -// zero for the duration of the request as the size is unknown until the connection closes. -DLL(int32_t) BS_ISteamHTTP_GetHTTPDownloadProgressPct(ISteamHTTP* pThis, HTTPRequestHandle hRequest, float *pflPercentOut) { - return pThis->GetHTTPDownloadProgressPct(hRequest, pflPercentOut); -} - -// Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params -// have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType -// parameter will set the content-type header for the request so the server may know how to interpret the body. -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestRawPostBody(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen) { - return pThis->SetHTTPRequestRawPostBody(hRequest, pchContentType, pubBody, unBodyLen); -} - -// Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true -// than any response to your requests using this cookie container may add new cookies which may be transmitted with -// future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for -// during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across -// repeat executions of your process. -DLL(HTTPCookieContainerHandle) BS_ISteamHTTP_CreateCookieContainer(ISteamHTTP* pThis, bool bAllowResponsesToModify) { - return pThis->CreateCookieContainer(bAllowResponsesToModify); -} - -// Release a cookie container you are finished using, freeing it's memory -DLL(int32_t) BS_ISteamHTTP_ReleaseCookieContainer(ISteamHTTP* pThis, HTTPCookieContainerHandle hCookieContainer) { - return pThis->ReleaseCookieContainer(hCookieContainer); -} - -// Adds a cookie to the specified cookie container that will be used with future requests. -DLL(int32_t) BS_ISteamHTTP_SetCookie(ISteamHTTP* pThis, HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie) { - return pThis->SetCookie(hCookieContainer, pchHost, pchUrl, pchCookie); -} - -// Set the cookie container to use for a HTTP request -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestCookieContainer(ISteamHTTP* pThis, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer) { - return pThis->SetHTTPRequestCookieContainer(hRequest, hCookieContainer); -} - -// Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestUserAgentInfo(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchUserAgentInfo) { - return pThis->SetHTTPRequestUserAgentInfo(hRequest, pchUserAgentInfo); -} - -// Set that https request should require verified SSL certificate via machines certificate trust store -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(ISteamHTTP* pThis, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate) { - return pThis->SetHTTPRequestRequiresVerifiedCertificate(hRequest, bRequireVerifiedCertificate); -} - -// Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout -// which can bump everytime we get more data -DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 unMilliseconds) { - return pThis->SetHTTPRequestAbsoluteTimeoutMS(hRequest, unMilliseconds); -} - -// Check if the reason the request failed was because we timed it out (rather than some harder failure) -DLL(int32_t) BS_ISteamHTTP_GetHTTPRequestWasTimedOut(ISteamHTTP* pThis, HTTPRequestHandle hRequest, bool *pbWasTimedOut) { - return pThis->GetHTTPRequestWasTimedOut(hRequest, pbWasTimedOut); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: interface to http client +//----------------------------------------------------------------------------- +DLL(ISteamHTTP*) BS_HTTP() { + return SteamHTTP(); +} + +DLL(ISteamHTTP*) BS_GameServerHTTP() { + return SteamGameServerHTTP(); +} + +// Initializes a new HTTP request, returning a handle to use in further operations on it. Requires +// the method (GET or POST) and the absolute URL for the request. Both http and https are supported, +// so this string must start with http:// or https:// and should look like http://store.steampowered.com/app/250/ +// or such. +DLL(HTTPRequestHandle) BS_ISteamHTTP_CreateHTTPRequest(ISteamHTTP* pThis, EHTTPMethod eHTTPRequestMethod, const char* cAbsoluteUrl) { + return pThis->CreateHTTPRequest(eHTTPRequestMethod, cAbsoluteUrl); +} + +// Set a context value for the request, which will be returned in the HTTPRequestCompleted_t callback after +// sending the request. This is just so the caller can easily keep track of which callbacks go with which request data. +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestContextValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint64_t* plContextValue) { + return pThis->SetHTTPRequestContextValue(hRequest, *plContextValue); +} + +// Set a timeout in seconds for the HTTP request, must be called prior to sending the request. Default +// timeout is 60 seconds if you don't call this. Returns false if the handle is invalid, or the request +// has already been sent. +DLL(int32_t) BS_ISteamHTTP_SetHTTPNetworkActivityTimeout(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 unTimeoutSeconds) { + return pThis->SetHTTPRequestNetworkActivityTimeout(hRequest, unTimeoutSeconds); +} + +// Set a request header value for the request, must be called prior to sending the request. Will +// return false if the handle is invalid or the request is already sent. +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestHeaderValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, const char *pchHeaderValue) { + return pThis->SetHTTPRequestHeaderValue(hRequest, pchHeaderName, pchHeaderValue); +} + +// Set a GET or POST parameter value on the request, which is set will depend on the EHTTPMethod specified +// when creating the request. Must be called prior to sending the request. Will return false if the +// handle is invalid or the request is already sent. +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestGetOrPostParameter(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchParamName, const char *pchParamValue) { + return pThis->SetHTTPRequestGetOrPostParameter(hRequest, pchParamName, pchParamValue); +} + +// Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on +// asynchronous response via callback. +// +// Note: If the user is in offline mode in Steam, then this will add a only-if-cached cache-control +// header and only do a local cache lookup rather than sending any actual remote request. +DLL(int32_t) BS_ISteamHTTP_SendHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle) { + return pThis->SendHTTPRequest(hRequest, pCallHandle); +} + +// Sends the HTTP request, will return false on a bad handle, otherwise use SteamCallHandle to wait on +// asynchronous response via callback for completion, and listen for HTTPRequestHeadersReceived_t and +// HTTPRequestDataReceived_t callbacks while streaming. +DLL(int32_t) BS_ISteamHTTP_SendHTTPRequestAndStreamResponse(ISteamHTTP* pThis, HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle) { + return pThis->SendHTTPRequestAndStreamResponse(hRequest, pCallHandle); +} + +// Defers a request you have sent, the actual HTTP client code may have many requests queued, and this will move +// the specified request to the tail of the queue. Returns false on invalid handle, or if the request is not yet sent. +DLL(int32_t) BS_ISteamHTTP_DeferHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { + return pThis->DeferHTTPRequest(hRequest); +} + +// Prioritizes a request you have sent, the actual HTTP client code may have many requests queued, and this will move +// the specified request to the head of the queue. Returns false on invalid handle, or if the request is not yet sent. +DLL(int32_t) BS_ISteamHTTP_PrioritizeHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { + return pThis->PrioritizeHTTPRequest(hRequest); +} + +// Checks if a response header is present in a HTTP response given a handle from HTTPRequestCompleted_t, also +// returns the size of the header value if present so the caller and allocate a correctly sized buffer for +// GetHTTPResponseHeaderValue. +DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseHeaderSize(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, uint32 *unResponseHeaderSize) { + return pThis->GetHTTPResponseHeaderSize(hRequest, pchHeaderName, unResponseHeaderSize); +} + +// Gets header values from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the +// header is not present or if your buffer is too small to contain it's value. You should first call +// BGetHTTPResponseHeaderSize to check for the presence of the header and to find out the size buffer needed. +DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseHeaderValue(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchHeaderName, uint8 *pHeaderValueBuffer, uint32 unBufferSize) { + return pThis->GetHTTPResponseHeaderValue(hRequest, pchHeaderName, pHeaderValueBuffer, unBufferSize); +} + +// Gets the size of the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the +// handle is invalid. +DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseBodySize(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 *unBodySize) { + return pThis->GetHTTPResponseBodySize(hRequest, unBodySize); +} + +// Gets the body data from a HTTP response given a handle from HTTPRequestCompleted_t, will return false if the +// handle is invalid or is to a streaming response, or if the provided buffer is not the correct size. Use BGetHTTPResponseBodySize first to find out +// the correct buffer size to use. +DLL(int32_t) BS_ISteamHTTP_GetHTTPResponseBodyData(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint8 *pBodyDataBuffer, uint32 unBufferSize) { + return pThis->GetHTTPResponseBodyData(hRequest, pBodyDataBuffer, unBufferSize); +} + +// Gets the body data from a streaming HTTP response given a handle from HTTPRequestDataReceived_t. Will return false if the +// handle is invalid or is to a non-streaming response (meaning it wasn't sent with SendHTTPRequestAndStreamResponse), or if the buffer size and offset +// do not match the size and offset sent in HTTPRequestDataReceived_t. +DLL(int32_t) BS_ISteamHTTP_GetHTTPStreamingResponseBodyData(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 cOffset, uint8 *pBodyDataBuffer, uint32 unBufferSize) { + return pThis->GetHTTPStreamingResponseBodyData(hRequest, cOffset, pBodyDataBuffer, unBufferSize); +} + +// Releases an HTTP response handle, should always be called to free resources after receiving a HTTPRequestCompleted_t +// callback and finishing using the response. +DLL(int32_t) BS_ISteamHTTP_ReleaseHTTPRequest(ISteamHTTP* pThis, HTTPRequestHandle hRequest) { + return pThis->ReleaseHTTPRequest(hRequest); +} + +// Gets progress on downloading the body for the request. This will be zero unless a response header has already been +// received which included a content-length field. For responses that contain no content-length it will report +// zero for the duration of the request as the size is unknown until the connection closes. +DLL(int32_t) BS_ISteamHTTP_GetHTTPDownloadProgressPct(ISteamHTTP* pThis, HTTPRequestHandle hRequest, float *pflPercentOut) { + return pThis->GetHTTPDownloadProgressPct(hRequest, pflPercentOut); +} + +// Sets the body for an HTTP Post request. Will fail and return false on a GET request, and will fail if POST params +// have already been set for the request. Setting this raw body makes it the only contents for the post, the pchContentType +// parameter will set the content-type header for the request so the server may know how to interpret the body. +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestRawPostBody(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchContentType, uint8 *pubBody, uint32 unBodyLen) { + return pThis->SetHTTPRequestRawPostBody(hRequest, pchContentType, pubBody, unBodyLen); +} + +// Creates a cookie container handle which you must later free with ReleaseCookieContainer(). If bAllowResponsesToModify=true +// than any response to your requests using this cookie container may add new cookies which may be transmitted with +// future requests. If bAllowResponsesToModify=false than only cookies you explicitly set will be sent. This API is just for +// during process lifetime, after steam restarts no cookies are persisted and you have no way to access the cookie container across +// repeat executions of your process. +DLL(HTTPCookieContainerHandle) BS_ISteamHTTP_CreateCookieContainer(ISteamHTTP* pThis, bool bAllowResponsesToModify) { + return pThis->CreateCookieContainer(bAllowResponsesToModify); +} + +// Release a cookie container you are finished using, freeing it's memory +DLL(int32_t) BS_ISteamHTTP_ReleaseCookieContainer(ISteamHTTP* pThis, HTTPCookieContainerHandle hCookieContainer) { + return pThis->ReleaseCookieContainer(hCookieContainer); +} + +// Adds a cookie to the specified cookie container that will be used with future requests. +DLL(int32_t) BS_ISteamHTTP_SetCookie(ISteamHTTP* pThis, HTTPCookieContainerHandle hCookieContainer, const char *pchHost, const char *pchUrl, const char *pchCookie) { + return pThis->SetCookie(hCookieContainer, pchHost, pchUrl, pchCookie); +} + +// Set the cookie container to use for a HTTP request +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestCookieContainer(ISteamHTTP* pThis, HTTPRequestHandle hRequest, HTTPCookieContainerHandle hCookieContainer) { + return pThis->SetHTTPRequestCookieContainer(hRequest, hCookieContainer); +} + +// Set the extra user agent info for a request, this doesn't clobber the normal user agent, it just adds the extra info on the end +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestUserAgentInfo(ISteamHTTP* pThis, HTTPRequestHandle hRequest, const char *pchUserAgentInfo) { + return pThis->SetHTTPRequestUserAgentInfo(hRequest, pchUserAgentInfo); +} + +// Set that https request should require verified SSL certificate via machines certificate trust store +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestRequiresVerifiedCertificate(ISteamHTTP* pThis, HTTPRequestHandle hRequest, bool bRequireVerifiedCertificate) { + return pThis->SetHTTPRequestRequiresVerifiedCertificate(hRequest, bRequireVerifiedCertificate); +} + +// Set an absolute timeout on the HTTP request, this is just a total time timeout different than the network activity timeout +// which can bump everytime we get more data +DLL(int32_t) BS_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS(ISteamHTTP* pThis, HTTPRequestHandle hRequest, uint32 unMilliseconds) { + return pThis->SetHTTPRequestAbsoluteTimeoutMS(hRequest, unMilliseconds); +} + +// Check if the reason the request failed was because we timed it out (rather than some harder failure) +DLL(int32_t) BS_ISteamHTTP_GetHTTPRequestWasTimedOut(ISteamHTTP* pThis, HTTPRequestHandle hRequest, bool *pbWasTimedOut) { + return pThis->GetHTTPRequestWasTimedOut(hRequest, pbWasTimedOut); } \ No newline at end of file diff --git a/Wrapper/SteamMatchmaking.cpp b/Wrapper/SteamMatchmaking.cpp index b63e67e..9e7fc0b 100644 --- a/Wrapper/SteamMatchmaking.cpp +++ b/Wrapper/SteamMatchmaking.cpp @@ -1,296 +1,296 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamMatchmaking*) BS_SteamMatchmaking() { - return SteamMatchmaking(); -} - - -// game server favorites storage -// saves basic details about a multiplayer game server locally - -// returns the number of favorites servers the user has stored -DLL(int32_t) BS_ISteamMatchmaking_GetFavoriteGameCount(ISteamMatchmaking* pThis) { - return pThis->GetFavoriteGameCount(); -} - -// returns the details of the game server -// iGame is of range [0,GetFavoriteGameCount()) -// *pnIP, *pnConnPort are filled in the with IP:port of the game server -// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections -// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added -DLL(int32_t) BS_ISteamMatchmaking_GetFavoriteGame(ISteamMatchmaking* pThis, int32_t iGame, - AppId_t *pnAppID, uint32_t *pnIP, uint16_t *pnConnPort, uint16_t *pnQueryPort, - uint32_t *punFlags, uint32_t *pRTime32LastPlayedOnServer) { - return pThis->GetFavoriteGame(iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer); -} - -// adds the game server to the local list; updates the time played of the server if it already exists in the list -DLL(int) BS_ISteamMatchmaking_AddFavoriteGame(ISteamMatchmaking* pThis, AppId_t nAppID, uint32 nIP, uint16 nConnPort, - uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer) { - return pThis->AddFavoriteGame(nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer); -} - -// removes the game server from the local storage; returns true if one was removed -DLL(bool) BS_ISteamMatchmaking_RemoveFavoriteGame(ISteamMatchmaking* pThis, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags) { - return pThis->RemoveFavoriteGame(nAppID, nIP, nConnPort, nQueryPort, unFlags); -} - -/////// -// Game lobby functions - -// Get a list of relevant lobbies -// this is an asynchronous request -// results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found -// this will never return lobbies that are full -// to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call -// use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g. -/* -class CMyLobbyListManager -{ -CCallResult m_CallResultLobbyMatchList; -void FindLobbies() -{ -// SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList() -SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList(); -m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList ); -} - -void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure ) -{ -// lobby list has be retrieved from Steam back-end, use results -} -} -*/ -// -//CALL_RESULT(LobbyMatchList_t) -DLL(SteamAPICall_t) BS_ISteamMatchmaking_RequestLobbyList(ISteamMatchmaking* pThis) { - return pThis->RequestLobbyList(); -} -// filters for lobbies -// this needs to be called before RequestLobbyList() to take effect -// these are cleared on each call to RequestLobbyList() -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListStringFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType) { - pThis->AddRequestLobbyListStringFilter(pchKeyToMatch, pchValueToMatch, eComparisonType); -} -// numerical comparison -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType) { - pThis->AddRequestLobbyListNumericalFilter(pchKeyToMatch, nValueToMatch, eComparisonType); -} -// returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, int nValueToBeCloseTo) { - pThis->AddRequestLobbyListNearValueFilter(pchKeyToMatch, nValueToBeCloseTo); -} -// returns only lobbies with the specified number of slots available -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(ISteamMatchmaking* pThis, int nSlotsAvailable) { - pThis->AddRequestLobbyListFilterSlotsAvailable(nSlotsAvailable); -} -// sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed) -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(ISteamMatchmaking* pThis, ELobbyDistanceFilter eLobbyDistanceFilter) { - pThis->AddRequestLobbyListDistanceFilter(eLobbyDistanceFilter); -} -// sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(ISteamMatchmaking* pThis, int cMaxResults) { - pThis->AddRequestLobbyListResultCountFilter(cMaxResults); -} - -DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - pThis->AddRequestLobbyListCompatibleMembersFilter(*steamIDLobby); -} - -// returns the CSteamID* of a lobby, as retrieved by a RequestLobbyList call -// should only be called after a LobbyMatchList_t callback is received -// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching) -// the returned CSteamID*::IsValid() will be false if iLobby is out of range -DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyByIndex(ISteamMatchmaking* pThis, int iLobby) { - return &(pThis->GetLobbyByIndex(iLobby)); -} - -// Create a lobby on the Steam servers. -// If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID* -// of the lobby will need to be communicated via game channels or via InviteUserToLobby() -// this is an asynchronous request -// results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point -// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby) -//CALL_RESULT(LobbyCreated_t) -DLL(SteamAPICall_t) BS_ISteamMatchmaking_CreateLobby(ISteamMatchmaking* pThis, ELobbyType eLobbyType, int cMaxMembers) { - return pThis->CreateLobby(eLobbyType, cMaxMembers); -} - -// Joins an existing lobby -// this is an asynchronous request -// results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful -// lobby metadata is available to use immediately on this call completing -//CALL_RESULT(LobbyEnter_t) -DLL(SteamAPICall_t) BS_ISteamMatchmaking_JoinLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->JoinLobby(*steamIDLobby); -} - -// Leave a lobby; this will take effect immediately on the client side -// other users in the lobby will be notified by a LobbyChatUpdate_t callback -DLL(void) BS_ISteamMatchmaking_LeaveLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->LeaveLobby(*steamIDLobby); -} - -// Invite another user to the lobby -// the target user will receive a LobbyInvite_t callback -// will return true if the invite is successfully sent, whether or not the target responds -// returns false if the local user is not connected to the Steam servers -// if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game, -// or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id> -DLL(bool) BS_ISteamMatchmaking_InviteUserToLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDInvitee) { - return pThis->InviteUserToLobby(*steamIDLobby, *steamIDInvitee); -} - -// Lobby iteration, for viewing details of users in a lobby -// only accessible if the lobby user is a member of the specified lobby -// persona information for other lobby members (name, avatar, etc.) will be asynchronously received -// and accessible via ISteamFriends interface - -// returns the number of users in the specified lobby -DLL(int) BS_ISteamMatchmaking_GetNumLobbyMembers(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->GetNumLobbyMembers(*steamIDLobby); -} -// returns the CSteamID* of a user in the lobby -// iMember is of range [0,GetNumLobbyMembers()) -// note that the current user must be in a lobby to retrieve CSteamID*s of other users in that lobby -DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyMemberByIndex(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iMember) { - return &(pThis->GetLobbyMemberByIndex(*steamIDLobby, iMember)); -} - -// Get data associated with this lobby -// takes a simple key, and returns the string associated with it -// "" will be returned if no value is set, or if steamIDLobby is invalid -DLL(const char*) BS_ISteamMatchmaking_GetLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey) { - return pThis->GetLobbyData(*steamIDLobby, pchKey); -} -// Sets a key/value pair in the lobby metadata -// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data -// this can be used to set lobby names, map, etc. -// to reset a key, just set it to "" -// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback -DLL(bool) BS_ISteamMatchmaking_SetLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey, const char *pchValue) { - return pThis->SetLobbyData(*steamIDLobby, pchKey, pchValue); -} - -// returns the number of metadata keys set on the specified lobby -DLL(int) BS_ISteamMatchmaking_GetLobbyDataCount(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->GetLobbyDataCount(*steamIDLobby); -} - -// returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount()) -DLL(bool) BS_ISteamMatchmaking_GetLobbyDataByIndex(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize) { - return pThis->GetLobbyDataByIndex(*steamIDLobby, iLobbyData, pchKey, cchKeyBufferSize, pchValue, cchValueBufferSize); -} - -// removes a metadata key from the lobby -DLL(bool) BS_ISteamMatchmaking_DeleteLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey) { - return pThis->DeleteLobbyData(*steamIDLobby, pchKey); -} - -// Gets per-user metadata for someone in this lobby -DLL(const char*) BS_ISteamMatchmaking_GetLobbyMemberData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDUser, const char *pchKey) { - return pThis->GetLobbyMemberData(*steamIDLobby, *steamIDUser, pchKey); -} -// Sets per-user metadata (for the local user implicitly) -DLL(void) BS_ISteamMatchmaking_SetLobbyMemberData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey, const char *pchValue) { - pThis->SetLobbyMemberData(*steamIDLobby, pchKey, pchValue); -} - -// Broadcasts a chat message to the all the users in the lobby -// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback -// returns true if the message is successfully sent -// pvMsgBody can be binary or text data, up to 4k -// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator -DLL(bool) BS_ISteamMatchmaking_SendLobbyChatMsg(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const void *pvMsgBody, int cubMsgBody) { - return pThis->SendLobbyChatMsg(*steamIDLobby, pvMsgBody, cubMsgBody); -} -// Get a chat message as specified in a LobbyChatMsg_t callback -// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback -// *pSteamIDUser is filled in with the CSteamID* of the member -// *pvData is filled in with the message itself -// return value is the number of bytes written into the buffer -DLL(int) BS_ISteamMatchmaking_GetLobbyChatEntry(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iChatID, OUT_STRUCT() CSteamID* *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType) { - return pThis->GetLobbyChatEntry(*steamIDLobby, iChatID, *pSteamIDUser, pvData, cubData, peChatEntryType); -} - -// Refreshes metadata for a lobby you're not necessarily in right now -// you never do this for lobbies you're a member of, only if your -// this will send down all the metadata associated with a lobby -// this is an asynchronous call -// returns false if the local user is not connected to the Steam servers -// results will be returned by a LobbyDataUpdate_t callback -// if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false -DLL(bool) BS_ISteamMatchmaking_RequestLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->RequestLobbyData(*steamIDLobby); -} - -// sets the game server associated with the lobby -// usually at this point, the users will join the specified game server -// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect -DLL(void) BS_ISteamMatchmaking_SetLobbyGameServer(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID* steamIDGameServer) { - pThis->SetLobbyGameServer(*steamIDLobby, unGameServerIP, unGameServerPort, *steamIDGameServer); -} - -// returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist -DLL(bool) BS_ISteamMatchmaking_GetLobbyGameServer(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID* *psteamIDGameServer) { - return pThis->GetLobbyGameServer(*steamIDLobby, punGameServerIP, punGameServerPort, *psteamIDGameServer); -} - -// set the limit on the # of users who can join the lobby -DLL(bool) BS_ISteamMatchmaking_SetLobbyMemberLimit(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int cMaxMembers) { - return pThis->SetLobbyMemberLimit(*steamIDLobby, cMaxMembers); -} - -// returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined -DLL(int) BS_ISteamMatchmaking_GetLobbyMemberLimit(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return pThis->GetLobbyMemberLimit(*steamIDLobby); -} - -// updates which type of lobby it is -// only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls -DLL(bool) BS_ISteamMatchmaking_SetLobbyType(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, ELobbyType eLobbyType) { - return pThis->SetLobbyType(*steamIDLobby, eLobbyType); -} - -// sets whether or not a lobby is joinable - defaults to true for a new lobby -// if set to false, no user can join, even if they are a friend or have been invited -DLL(bool) BS_ISteamMatchmaking_SetLobbyJoinable(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, bool bLobbyJoinable) { - return pThis->SetLobbyJoinable(*steamIDLobby, bLobbyJoinable); -} - -// returns the current lobby owner -// you must be a member of the lobby to access this -// there always one lobby owner - if the current owner leaves, another user will become the owner -// it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner -DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyOwner(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { - return &(pThis->GetLobbyOwner(*steamIDLobby)); -} - -// changes who the lobby owner is -// you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby -// after completion, the local user will no longer be the owner -DLL(bool) BS_ISteamMatchmaking_SetLobbyOwner(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDNewOwner) { - return pThis->SetLobbyOwner(*steamIDLobby, *steamIDNewOwner); -} - -// link two lobbies for the purposes of checking player compatibility -// you must be the lobby owner of both lobbies -DLL(bool) BS_ISteamMatchmaking_SetLinkedLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDLobbyDependent) { - return pThis->SetLinkedLobby(*steamIDLobby, *steamIDLobbyDependent); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamMatchmaking*) BS_SteamMatchmaking() { + return SteamMatchmaking(); +} + + +// game server favorites storage +// saves basic details about a multiplayer game server locally + +// returns the number of favorites servers the user has stored +DLL(int32_t) BS_ISteamMatchmaking_GetFavoriteGameCount(ISteamMatchmaking* pThis) { + return pThis->GetFavoriteGameCount(); +} + +// returns the details of the game server +// iGame is of range [0,GetFavoriteGameCount()) +// *pnIP, *pnConnPort are filled in the with IP:port of the game server +// *punFlags specify whether the game server was stored as an explicit favorite or in the history of connections +// *pRTime32LastPlayedOnServer is filled in the with the Unix time the favorite was added +DLL(int32_t) BS_ISteamMatchmaking_GetFavoriteGame(ISteamMatchmaking* pThis, int32_t iGame, + AppId_t *pnAppID, uint32_t *pnIP, uint16_t *pnConnPort, uint16_t *pnQueryPort, + uint32_t *punFlags, uint32_t *pRTime32LastPlayedOnServer) { + return pThis->GetFavoriteGame(iGame, pnAppID, pnIP, pnConnPort, pnQueryPort, punFlags, pRTime32LastPlayedOnServer); +} + +// adds the game server to the local list; updates the time played of the server if it already exists in the list +DLL(int) BS_ISteamMatchmaking_AddFavoriteGame(ISteamMatchmaking* pThis, AppId_t nAppID, uint32 nIP, uint16 nConnPort, + uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer) { + return pThis->AddFavoriteGame(nAppID, nIP, nConnPort, nQueryPort, unFlags, rTime32LastPlayedOnServer); +} + +// removes the game server from the local storage; returns true if one was removed +DLL(bool) BS_ISteamMatchmaking_RemoveFavoriteGame(ISteamMatchmaking* pThis, AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags) { + return pThis->RemoveFavoriteGame(nAppID, nIP, nConnPort, nQueryPort, unFlags); +} + +/////// +// Game lobby functions + +// Get a list of relevant lobbies +// this is an asynchronous request +// results will be returned by LobbyMatchList_t callback & call result, with the number of lobbies found +// this will never return lobbies that are full +// to add more filter, the filter calls below need to be call before each and every RequestLobbyList() call +// use the CCallResult<> object in steam_api.h to match the SteamAPICall_t call result to a function in an object, e.g. +/* +class CMyLobbyListManager +{ +CCallResult m_CallResultLobbyMatchList; +void FindLobbies() +{ +// SteamMatchmaking()->AddRequestLobbyListFilter*() functions would be called here, before RequestLobbyList() +SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList(); +m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CMyLobbyListManager::OnLobbyMatchList ); +} + +void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure ) +{ +// lobby list has be retrieved from Steam back-end, use results +} +} +*/ +// +//CALL_RESULT(LobbyMatchList_t) +DLL(SteamAPICall_t) BS_ISteamMatchmaking_RequestLobbyList(ISteamMatchmaking* pThis) { + return pThis->RequestLobbyList(); +} +// filters for lobbies +// this needs to be called before RequestLobbyList() to take effect +// these are cleared on each call to RequestLobbyList() +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListStringFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType) { + pThis->AddRequestLobbyListStringFilter(pchKeyToMatch, pchValueToMatch, eComparisonType); +} +// numerical comparison +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListNumericalFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType) { + pThis->AddRequestLobbyListNumericalFilter(pchKeyToMatch, nValueToMatch, eComparisonType); +} +// returns results closest to the specified value. Multiple near filters can be added, with early filters taking precedence +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListNearValueFilter(ISteamMatchmaking* pThis, const char *pchKeyToMatch, int nValueToBeCloseTo) { + pThis->AddRequestLobbyListNearValueFilter(pchKeyToMatch, nValueToBeCloseTo); +} +// returns only lobbies with the specified number of slots available +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListFilterSlotsAvailable(ISteamMatchmaking* pThis, int nSlotsAvailable) { + pThis->AddRequestLobbyListFilterSlotsAvailable(nSlotsAvailable); +} +// sets the distance for which we should search for lobbies (based on users IP address to location map on the Steam backed) +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListDistanceFilter(ISteamMatchmaking* pThis, ELobbyDistanceFilter eLobbyDistanceFilter) { + pThis->AddRequestLobbyListDistanceFilter(eLobbyDistanceFilter); +} +// sets how many results to return, the lower the count the faster it is to download the lobby results & details to the client +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListResultCountFilter(ISteamMatchmaking* pThis, int cMaxResults) { + pThis->AddRequestLobbyListResultCountFilter(cMaxResults); +} + +DLL(void) BS_ISteamMatchmaking_AddRequestLobbyListCompatibleMembersFilter(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + pThis->AddRequestLobbyListCompatibleMembersFilter(*steamIDLobby); +} + +// returns the CSteamID* of a lobby, as retrieved by a RequestLobbyList call +// should only be called after a LobbyMatchList_t callback is received +// iLobby is of the range [0, LobbyMatchList_t::m_nLobbiesMatching) +// the returned CSteamID*::IsValid() will be false if iLobby is out of range +DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyByIndex(ISteamMatchmaking* pThis, int iLobby) { + return &(pThis->GetLobbyByIndex(iLobby)); +} + +// Create a lobby on the Steam servers. +// If private, then the lobby will not be returned by any RequestLobbyList() call; the CSteamID* +// of the lobby will need to be communicated via game channels or via InviteUserToLobby() +// this is an asynchronous request +// results will be returned by LobbyCreated_t callback and call result; lobby is joined & ready to use at this point +// a LobbyEnter_t callback will also be received (since the local user is joining their own lobby) +//CALL_RESULT(LobbyCreated_t) +DLL(SteamAPICall_t) BS_ISteamMatchmaking_CreateLobby(ISteamMatchmaking* pThis, ELobbyType eLobbyType, int cMaxMembers) { + return pThis->CreateLobby(eLobbyType, cMaxMembers); +} + +// Joins an existing lobby +// this is an asynchronous request +// results will be returned by LobbyEnter_t callback & call result, check m_EChatRoomEnterResponse to see if was successful +// lobby metadata is available to use immediately on this call completing +//CALL_RESULT(LobbyEnter_t) +DLL(SteamAPICall_t) BS_ISteamMatchmaking_JoinLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->JoinLobby(*steamIDLobby); +} + +// Leave a lobby; this will take effect immediately on the client side +// other users in the lobby will be notified by a LobbyChatUpdate_t callback +DLL(void) BS_ISteamMatchmaking_LeaveLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->LeaveLobby(*steamIDLobby); +} + +// Invite another user to the lobby +// the target user will receive a LobbyInvite_t callback +// will return true if the invite is successfully sent, whether or not the target responds +// returns false if the local user is not connected to the Steam servers +// if the other user clicks the join link, a GameLobbyJoinRequested_t will be posted if the user is in-game, +// or if the game isn't running yet the game will be launched with the parameter +connect_lobby <64-bit lobby id> +DLL(bool) BS_ISteamMatchmaking_InviteUserToLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDInvitee) { + return pThis->InviteUserToLobby(*steamIDLobby, *steamIDInvitee); +} + +// Lobby iteration, for viewing details of users in a lobby +// only accessible if the lobby user is a member of the specified lobby +// persona information for other lobby members (name, avatar, etc.) will be asynchronously received +// and accessible via ISteamFriends interface + +// returns the number of users in the specified lobby +DLL(int) BS_ISteamMatchmaking_GetNumLobbyMembers(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->GetNumLobbyMembers(*steamIDLobby); +} +// returns the CSteamID* of a user in the lobby +// iMember is of range [0,GetNumLobbyMembers()) +// note that the current user must be in a lobby to retrieve CSteamID*s of other users in that lobby +DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyMemberByIndex(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iMember) { + return &(pThis->GetLobbyMemberByIndex(*steamIDLobby, iMember)); +} + +// Get data associated with this lobby +// takes a simple key, and returns the string associated with it +// "" will be returned if no value is set, or if steamIDLobby is invalid +DLL(const char*) BS_ISteamMatchmaking_GetLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey) { + return pThis->GetLobbyData(*steamIDLobby, pchKey); +} +// Sets a key/value pair in the lobby metadata +// each user in the lobby will be broadcast this new value, and any new users joining will receive any existing data +// this can be used to set lobby names, map, etc. +// to reset a key, just set it to "" +// other users in the lobby will receive notification of the lobby data change via a LobbyDataUpdate_t callback +DLL(bool) BS_ISteamMatchmaking_SetLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey, const char *pchValue) { + return pThis->SetLobbyData(*steamIDLobby, pchKey, pchValue); +} + +// returns the number of metadata keys set on the specified lobby +DLL(int) BS_ISteamMatchmaking_GetLobbyDataCount(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->GetLobbyDataCount(*steamIDLobby); +} + +// returns a lobby metadata key/values pair by index, of range [0, GetLobbyDataCount()) +DLL(bool) BS_ISteamMatchmaking_GetLobbyDataByIndex(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize) { + return pThis->GetLobbyDataByIndex(*steamIDLobby, iLobbyData, pchKey, cchKeyBufferSize, pchValue, cchValueBufferSize); +} + +// removes a metadata key from the lobby +DLL(bool) BS_ISteamMatchmaking_DeleteLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey) { + return pThis->DeleteLobbyData(*steamIDLobby, pchKey); +} + +// Gets per-user metadata for someone in this lobby +DLL(const char*) BS_ISteamMatchmaking_GetLobbyMemberData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDUser, const char *pchKey) { + return pThis->GetLobbyMemberData(*steamIDLobby, *steamIDUser, pchKey); +} +// Sets per-user metadata (for the local user implicitly) +DLL(void) BS_ISteamMatchmaking_SetLobbyMemberData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const char *pchKey, const char *pchValue) { + pThis->SetLobbyMemberData(*steamIDLobby, pchKey, pchValue); +} + +// Broadcasts a chat message to the all the users in the lobby +// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback +// returns true if the message is successfully sent +// pvMsgBody can be binary or text data, up to 4k +// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator +DLL(bool) BS_ISteamMatchmaking_SendLobbyChatMsg(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, const void *pvMsgBody, int cubMsgBody) { + return pThis->SendLobbyChatMsg(*steamIDLobby, pvMsgBody, cubMsgBody); +} +// Get a chat message as specified in a LobbyChatMsg_t callback +// iChatID is the LobbyChatMsg_t::m_iChatID value in the callback +// *pSteamIDUser is filled in with the CSteamID* of the member +// *pvData is filled in with the message itself +// return value is the number of bytes written into the buffer +DLL(int) BS_ISteamMatchmaking_GetLobbyChatEntry(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int iChatID, OUT_STRUCT() CSteamID* *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType) { + return pThis->GetLobbyChatEntry(*steamIDLobby, iChatID, *pSteamIDUser, pvData, cubData, peChatEntryType); +} + +// Refreshes metadata for a lobby you're not necessarily in right now +// you never do this for lobbies you're a member of, only if your +// this will send down all the metadata associated with a lobby +// this is an asynchronous call +// returns false if the local user is not connected to the Steam servers +// results will be returned by a LobbyDataUpdate_t callback +// if the specified lobby doesn't exist, LobbyDataUpdate_t::m_bSuccess will be set to false +DLL(bool) BS_ISteamMatchmaking_RequestLobbyData(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->RequestLobbyData(*steamIDLobby); +} + +// sets the game server associated with the lobby +// usually at this point, the users will join the specified game server +// either the IP/Port or the steamID of the game server has to be valid, depending on how you want the clients to be able to connect +DLL(void) BS_ISteamMatchmaking_SetLobbyGameServer(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID* steamIDGameServer) { + pThis->SetLobbyGameServer(*steamIDLobby, unGameServerIP, unGameServerPort, *steamIDGameServer); +} + +// returns the details of a game server set in a lobby - returns false if there is no game server set, or that lobby doesn't exist +DLL(bool) BS_ISteamMatchmaking_GetLobbyGameServer(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, OUT_STRUCT() CSteamID* *psteamIDGameServer) { + return pThis->GetLobbyGameServer(*steamIDLobby, punGameServerIP, punGameServerPort, *psteamIDGameServer); +} + +// set the limit on the # of users who can join the lobby +DLL(bool) BS_ISteamMatchmaking_SetLobbyMemberLimit(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, int cMaxMembers) { + return pThis->SetLobbyMemberLimit(*steamIDLobby, cMaxMembers); +} + +// returns the current limit on the # of users who can join the lobby; returns 0 if no limit is defined +DLL(int) BS_ISteamMatchmaking_GetLobbyMemberLimit(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return pThis->GetLobbyMemberLimit(*steamIDLobby); +} + +// updates which type of lobby it is +// only lobbies that are k_ELobbyTypePublic or k_ELobbyTypeInvisible, and are set to joinable, will be returned by RequestLobbyList() calls +DLL(bool) BS_ISteamMatchmaking_SetLobbyType(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, ELobbyType eLobbyType) { + return pThis->SetLobbyType(*steamIDLobby, eLobbyType); +} + +// sets whether or not a lobby is joinable - defaults to true for a new lobby +// if set to false, no user can join, even if they are a friend or have been invited +DLL(bool) BS_ISteamMatchmaking_SetLobbyJoinable(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, bool bLobbyJoinable) { + return pThis->SetLobbyJoinable(*steamIDLobby, bLobbyJoinable); +} + +// returns the current lobby owner +// you must be a member of the lobby to access this +// there always one lobby owner - if the current owner leaves, another user will become the owner +// it is possible (bur rare) to join a lobby just as the owner is leaving, thus entering a lobby with self as the owner +DLL(CSteamID*) BS_ISteamMatchmaking_GetLobbyOwner(ISteamMatchmaking* pThis, CSteamID* steamIDLobby) { + return &(pThis->GetLobbyOwner(*steamIDLobby)); +} + +// changes who the lobby owner is +// you must be the lobby owner for this to succeed, and steamIDNewOwner must be in the lobby +// after completion, the local user will no longer be the owner +DLL(bool) BS_ISteamMatchmaking_SetLobbyOwner(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDNewOwner) { + return pThis->SetLobbyOwner(*steamIDLobby, *steamIDNewOwner); +} + +// link two lobbies for the purposes of checking player compatibility +// you must be the lobby owner of both lobbies +DLL(bool) BS_ISteamMatchmaking_SetLinkedLobby(ISteamMatchmaking* pThis, CSteamID* steamIDLobby, CSteamID* steamIDLobbyDependent) { + return pThis->SetLinkedLobby(*steamIDLobby, *steamIDLobbyDependent); } \ No newline at end of file diff --git a/Wrapper/SteamMatchmakingServers.cpp b/Wrapper/SteamMatchmakingServers.cpp index 9d5f155..e6e1ed0 100644 --- a/Wrapper/SteamMatchmakingServers.cpp +++ b/Wrapper/SteamMatchmakingServers.cpp @@ -1,23 +1,190 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamMatchmakingServers*) BS_SteamMatchmakingServers() { - return SteamMatchmakingServers(); -} - -#pragma message("SteamMatchmakingServers is not ported yet. TODO!") \ No newline at end of file +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Functions for match making services for clients to get to game lists and details +//----------------------------------------------------------------------------- +DLL(ISteamMatchmakingServers*) BS_SteamMatchmakingServers() { + return SteamMatchmakingServers(); +} + +// Request a new list of servers of a particular type. These calls each correspond to one of the EMatchMakingType values. +// Each call allocates a new asynchronous request object. +// Request object must be released by calling ReleaseRequest( hServerListRequest ) +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestInternetServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestInternetServerList(iApp, ppchFilters, nFilters, pRequestServersResponse); +} +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestLANServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestLANServerList(iApp, pRequestServersResponse); +} +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestFriendsServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestFriendsServerList(iApp, ppchFilters, nFilters, pRequestServersResponse); +} +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestFavoritesServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestFavoritesServerList(iApp, ppchFilters, nFilters, pRequestServersResponse); +} +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestHistoryServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestHistoryServerList(iApp, ppchFilters, nFilters, pRequestServersResponse); +} +DLL(HServerListRequest) BS_ISteamMatchmakingServers_RequestSpectatorServerList(ISteamMatchmakingServers* pThis, AppId_t iApp, ARRAY_COUNT(nFilters) MatchMakingKeyValuePair_t **ppchFilters, uint32 nFilters, ISteamMatchmakingServerListResponse *pRequestServersResponse) { + return pThis->RequestSpectatorServerList(iApp, ppchFilters, nFilters, pRequestServersResponse); +} + +// Releases the asynchronous request object and cancels any pending query on it if there's a pending query in progress. +// RefreshComplete callback is not posted when request is released. +DLL(void) BS_ISteamMatchmakingServers_ReleaseRequest(ISteamMatchmakingServers* pThis, HServerListRequest hServerListRequest) { + pThis->ReleaseRequest(hServerListRequest); +} + +/* the filter operation codes that go in the key part of MatchMakingKeyValuePair_t should be one of these: + +"map" +- Server passes the filter if the server is playing the specified map. +"gamedataand" +- Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains all of the +specified strings. The value field is a comma-delimited list of strings to match. +"gamedataor" +- Server passes the filter if the server's game data (ISteamGameServer::SetGameData) contains at least one of the +specified strings. The value field is a comma-delimited list of strings to match. +"gamedatanor" +- Server passes the filter if the server's game data (ISteamGameServer::SetGameData) does not contain any +of the specified strings. The value field is a comma-delimited list of strings to check. +"gametagsand" +- Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) contains all +of the specified strings. The value field is a comma-delimited list of strings to check. +"gametagsnor" +- Server passes the filter if the server's game tags (ISteamGameServer::SetGameTags) does not contain any +of the specified strings. The value field is a comma-delimited list of strings to check. +"and" (x1 && x2 && ... && xn) +"or" (x1 || x2 || ... || xn) +"nand" !(x1 && x2 && ... && xn) +"nor" !(x1 || x2 || ... || xn) +- Performs Boolean operation on the following filters. The operand to this filter specifies +the "size" of the Boolean inputs to the operation, in Key/value pairs. (The keyvalue +pairs must immediately follow, i.e. this is a prefix logical operator notation.) +In the simplest case where Boolean expressions are not nested, this is simply +the number of operands. + +For example, to match servers on a particular map or with a particular tag, would would +use these filters. + +( server.map == "cp_dustbowl" || server.gametags.contains("payload") ) +"or", "2" +"map", "cp_dustbowl" +"gametagsand", "payload" + +If logical inputs are nested, then the operand specifies the size of the entire +"length" of its operands, not the number of immediate children. + +( server.map == "cp_dustbowl" || ( server.gametags.contains("payload") && !server.gametags.contains("payloadrace") ) ) +"or", "4" +"map", "cp_dustbowl" +"and", "2" +"gametagsand", "payload" +"gametagsnor", "payloadrace" + +Unary NOT can be achieved using either "nand" or "nor" with a single operand. + +"addr" +- Server passes the filter if the server's query address matches the specified IP or IP:port. +"gameaddr" +- Server passes the filter if the server's game address matches the specified IP or IP:port. + +The following filter operations ignore the "value" part of MatchMakingKeyValuePair_t + +"dedicated" +- Server passes the filter if it passed true to SetDedicatedServer. +"secure" +- Server passes the filter if the server is VAC-enabled. +"notfull" +- Server passes the filter if the player count is less than the reported max player count. +"hasplayers" +- Server passes the filter if the player count is greater than zero. +"noplayers" +- Server passes the filter if it doesn't have any players. +"linux" +- Server passes the filter if it's a linux server +*/ + +// Get details on a given server in the list, you can get the valid range of index +// values by calling GetServerCount(). You will also receive index values in +// ISteamMatchmakingServerListResponse::ServerResponded() callbacks +DLL(gameserveritem_t*) BS_ISteamMatchmakingServers_GetServerDetails(ISteamMatchmakingServers* pThis, HServerListRequest hRequest, int iServer) { + return pThis->GetServerDetails(hRequest, iServer); +} + +// Cancel an request which is operation on the given list type. You should call this to cancel +// any in-progress requests before destructing a callback object that may have been passed +// to one of the above list request calls. Not doing so may result in a crash when a callback +// occurs on the destructed object. +// Canceling a query does not release the allocated request handle. +// The request handle must be released using ReleaseRequest( hRequest ) +DLL(void) BS_ISteamMatchmakingServers_CancelQuery(ISteamMatchmakingServers* pThis, HServerListRequest hRequest) { + pThis->CancelQuery(hRequest); +} + +// Ping every server in your list again but don't update the list of servers +// Query callback installed when the server list was requested will be used +// again to post notifications and RefreshComplete, so the callback must remain +// valid until another RefreshComplete is called on it or the request +// is released with ReleaseRequest( hRequest ) +DLL(void) BS_ISteamMatchmakingServers_RefreshQuery(ISteamMatchmakingServers* pThis, HServerListRequest hRequest) { + pThis->RefreshQuery(hRequest); +} + +// Returns true if the list is currently refreshing its server list +DLL(bool) BS_ISteamMatchmakingServers_IsRefreshing(ISteamMatchmakingServers* pThis, HServerListRequest hRequest) { + return pThis->IsRefreshing(hRequest); +} + +// How many servers in the given list, GetServerDetails above takes 0... GetServerCount() - 1 +DLL(int) BS_ISteamMatchmakingServers_GetServerCount(ISteamMatchmakingServers* pThis, HServerListRequest hRequest) { + return pThis->GetServerCount(hRequest); +} + +// Refresh a single server inside of a query (rather than all the servers ) +DLL(void) BS_ISteamMatchmakingServers_RefreshServer(ISteamMatchmakingServers* pThis, HServerListRequest hRequest, int iServer) { + pThis->RefreshServer(hRequest, iServer); +} + + +//----------------------------------------------------------------------------- +// Queries to individual servers directly via IP/Port +//----------------------------------------------------------------------------- + +// Request updated ping time and other details from a single server +DLL(HServerQuery) BS_ISteamMatchmakingServers_PingServer(ISteamMatchmakingServers* pThis, uint32 unIP, uint16 usPort, ISteamMatchmakingPingResponse *pRequestServersResponse) { + return pThis->PingServer(unIP, usPort, pRequestServersResponse); +} + +// Request the list of players currently playing on a server +DLL(HServerQuery) BS_ISteamMatchmakingServers_PlayerDetails(ISteamMatchmakingServers* pThis, uint32 unIP, uint16 usPort, ISteamMatchmakingPlayersResponse *pRequestServersResponse) { + return pThis->PlayerDetails(unIP, usPort, pRequestServersResponse); +} + +// Request the list of rules that the server is running (See ISteamGameServer::SetKeyValue() to set the rules server side) +DLL(HServerQuery) BS_ISteamMatchmakingServers_ServerRules(ISteamMatchmakingServers* pThis, uint32 unIP, uint16 usPort, ISteamMatchmakingRulesResponse *pRequestServersResponse) { + return pThis->ServerRules(unIP, usPort, pRequestServersResponse); +} + +// Cancel an outstanding Ping/Players/Rules query from above. You should call this to cancel +// any in-progress requests before destructing a callback object that may have been passed +// to one of the above calls to avoid crashing when callbacks occur. +DLL(void) BS_ISteamMatchmakingServers_CancelServerQuery(ISteamMatchmakingServers* pThis, HServerQuery hServerQuery) { + pThis->CancelServerQuery(hServerQuery); +} \ No newline at end of file diff --git a/Wrapper/SteamMusic.cpp b/Wrapper/SteamMusic.cpp index 66c196f..0e092ee 100644 --- a/Wrapper/SteamMusic.cpp +++ b/Wrapper/SteamMusic.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamMusic*) BS_SteamMusic() { - return SteamMusic(); -} - -#pragma message("SteamMusic is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamMusic*) BS_SteamMusic() { + return SteamMusic(); +} + +#pragma message("SteamMusic is not ported yet. TODO!") diff --git a/Wrapper/SteamMusicRemote.cpp b/Wrapper/SteamMusicRemote.cpp index 9b9af28..c4a6a93 100644 --- a/Wrapper/SteamMusicRemote.cpp +++ b/Wrapper/SteamMusicRemote.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamMusicRemote*) BS_SteamMusicRemote() { - return SteamMusicRemote(); -} - -#pragma message("SteamMusicRemote is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamMusicRemote*) BS_SteamMusicRemote() { + return SteamMusicRemote(); +} + +#pragma message("SteamMusicRemote is not ported yet. TODO!") diff --git a/Wrapper/SteamNetworking.cpp b/Wrapper/SteamNetworking.cpp index 2d020f3..0b83e87 100644 --- a/Wrapper/SteamNetworking.cpp +++ b/Wrapper/SteamNetworking.cpp @@ -1,98 +1,98 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: Functions for making connections and sending data between clients, -// traversing NAT's where possible -//----------------------------------------------------------------------------- -DLL(ISteamNetworking*) BS_SteamNetworking() { - return SteamNetworking(); -} - -DLL(ISteamNetworking*) BS_SteamGameServerNetworking() { - return SteamGameServerNetworking(); -} - -//////////////////////////////////////////////////////////////////////////////////////////// -// Session-less connection functions -// automatically establishes NAT-traversing or Relay server connections - -// Sends a P2P packet to the specified user -// UDP-like, unreliable and a max packet size of 1200 bytes -// the first packet send may be delayed as the NAT-traversal code runs -// if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t -// see EP2PSend enum above for the descriptions of the different ways of sending packets -// -// nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket() -// with the same channel number in order to retrieve the data on the other end -// using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources -DLL(uint32_t) BS_ISteamNetworking_SendP2PPacket(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, const void* pubData, uint32_t cubData, EP2PSend eP2PSendType, uint32_t nChannel) { - return pThis->SendP2PPacket(*pSteamIDRemote, pubData, cubData, eP2PSendType, nChannel); -} - -// returns true if any data is available for read, and the amount of data that will need to be read -DLL(uint32_t) BS_ISteamNetworking_IsP2PPacketAvailable(ISteamNetworking* pThis, uint32_t* pcubMsgSize, uint32_t nChannel) { - return pThis->IsP2PPacketAvailable(pcubMsgSize, nChannel); -} - -// reads in a packet that has been sent from another user via SendP2PPacket() -// returns the size of the message and the steamID of the user who sent it in the last two parameters -// if the buffer passed in is too small, the message will be truncated -// this call is not blocking, and will return false if no data is available -DLL(uint32_t) BS_ISteamNetworking_ReadP2PPacket(ISteamNetworking* pThis, void* pubDest, uint32_t cubDest, uint32_t* pcubMsgSize, CSteamID* pSteamIDRemote, uint32_t nChannel) { - return pThis->ReadP2PPacket(pubDest, cubDest, pcubMsgSize, pSteamIDRemote, nChannel); -} - -// AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback -// P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet -// if you don't want to talk to the user, just ignore the request -// if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically -// this may be called multiple times for a single user -// (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request) -DLL(uint32_t) BS_ISteamNetworking_AcceptP2PSessionWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote) { - return pThis->AcceptP2PSessionWithUser(*pSteamIDRemote); -} - -// call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood -// if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted -DLL(uint32_t) BS_ISteamNetworking_CloseP2PSessionWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote) { - return pThis->CloseP2PSessionWithUser(*pSteamIDRemote); -} - -// call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels -// open channels to a user have been closed, the open session to the user will be closed and new data from this -// user will trigger a P2PSessionRequest_t callback -DLL(uint32_t) BS_ISteamNetworking_CloseP2PChannelWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, uint32_t nChannel) { - return pThis->CloseP2PChannelWithUser(*pSteamIDRemote, nChannel); -} - -// fills out P2PSessionState_t structure with details about the underlying connection to the user -// should only needed for debugging purposes -// returns false if no connection exists to the specified user -DLL(uint32_t) BS_ISteamNetworking_GetP2PSessionState(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, P2PSessionState_t* pConnectionState) { - return pThis->GetP2PSessionState(*pSteamIDRemote, pConnectionState); -} - -// Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection -// or NAT-traversal cannot be established. Only applies to connections created after setting this value, -// or to existing connections that need to automatically reconnect after this value is set. -// -// P2P packet relay is allowed by default -DLL(uint32_t) BS_ISteamNetworking_AllowP2PPacketRelay(ISteamNetworking* pThis, uint32_t bAllow) { - return pThis->AllowP2PPacketRelay(!!bAllow); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Functions for making connections and sending data between clients, +// traversing NAT's where possible +//----------------------------------------------------------------------------- +DLL(ISteamNetworking*) BS_SteamNetworking() { + return SteamNetworking(); +} + +DLL(ISteamNetworking*) BS_SteamGameServerNetworking() { + return SteamGameServerNetworking(); +} + +//////////////////////////////////////////////////////////////////////////////////////////// +// Session-less connection functions +// automatically establishes NAT-traversing or Relay server connections + +// Sends a P2P packet to the specified user +// UDP-like, unreliable and a max packet size of 1200 bytes +// the first packet send may be delayed as the NAT-traversal code runs +// if we can't get through to the user, an error will be posted via the callback P2PSessionConnectFail_t +// see EP2PSend enum above for the descriptions of the different ways of sending packets +// +// nChannel is a routing number you can use to help route message to different systems - you'll have to call ReadP2PPacket() +// with the same channel number in order to retrieve the data on the other end +// using different channels to talk to the same user will still use the same underlying p2p connection, saving on resources +DLL(uint32_t) BS_ISteamNetworking_SendP2PPacket(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, const void* pubData, uint32_t cubData, EP2PSend eP2PSendType, uint32_t nChannel) { + return pThis->SendP2PPacket(*pSteamIDRemote, pubData, cubData, eP2PSendType, nChannel); +} + +// returns true if any data is available for read, and the amount of data that will need to be read +DLL(uint32_t) BS_ISteamNetworking_IsP2PPacketAvailable(ISteamNetworking* pThis, uint32_t* pcubMsgSize, uint32_t nChannel) { + return pThis->IsP2PPacketAvailable(pcubMsgSize, nChannel); +} + +// reads in a packet that has been sent from another user via SendP2PPacket() +// returns the size of the message and the steamID of the user who sent it in the last two parameters +// if the buffer passed in is too small, the message will be truncated +// this call is not blocking, and will return false if no data is available +DLL(uint32_t) BS_ISteamNetworking_ReadP2PPacket(ISteamNetworking* pThis, void** pubDest, uint32_t cubDest, uint32_t* pcubMsgSize, CSteamID* pSteamIDRemote, uint32_t nChannel) { + return pThis->ReadP2PPacket(*pubDest, cubDest, pcubMsgSize, static_cast(pSteamIDRemote), nChannel); +} + +// AcceptP2PSessionWithUser() should only be called in response to a P2PSessionRequest_t callback +// P2PSessionRequest_t will be posted if another user tries to send you a packet that you haven't talked to yet +// if you don't want to talk to the user, just ignore the request +// if the user continues to send you packets, another P2PSessionRequest_t will be posted periodically +// this may be called multiple times for a single user +// (if you've called SendP2PPacket() on the other user, this implicitly accepts the session request) +DLL(uint32_t) BS_ISteamNetworking_AcceptP2PSessionWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote) { + return pThis->AcceptP2PSessionWithUser(*pSteamIDRemote); +} + +// call CloseP2PSessionWithUser() when you're done talking to a user, will free up resources under-the-hood +// if the remote user tries to send data to you again, another P2PSessionRequest_t callback will be posted +DLL(uint32_t) BS_ISteamNetworking_CloseP2PSessionWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote) { + return pThis->CloseP2PSessionWithUser(*pSteamIDRemote); +} + +// call CloseP2PChannelWithUser() when you're done talking to a user on a specific channel. Once all channels +// open channels to a user have been closed, the open session to the user will be closed and new data from this +// user will trigger a P2PSessionRequest_t callback +DLL(uint32_t) BS_ISteamNetworking_CloseP2PChannelWithUser(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, uint32_t nChannel) { + return pThis->CloseP2PChannelWithUser(*pSteamIDRemote, nChannel); +} + +// fills out P2PSessionState_t structure with details about the underlying connection to the user +// should only needed for debugging purposes +// returns false if no connection exists to the specified user +DLL(uint32_t) BS_ISteamNetworking_GetP2PSessionState(ISteamNetworking* pThis, CSteamID* pSteamIDRemote, P2PSessionState_t* pConnectionState) { + return pThis->GetP2PSessionState(*pSteamIDRemote, pConnectionState); +} + +// Allow P2P connections to fall back to being relayed through the Steam servers if a direct connection +// or NAT-traversal cannot be established. Only applies to connections created after setting this value, +// or to existing connections that need to automatically reconnect after this value is set. +// +// P2P packet relay is allowed by default +DLL(uint32_t) BS_ISteamNetworking_AllowP2PPacketRelay(ISteamNetworking* pThis, uint32_t bAllow) { + return pThis->AllowP2PPacketRelay(!!bAllow); +} diff --git a/Wrapper/SteamRemoteStorage.cpp b/Wrapper/SteamRemoteStorage.cpp index b651248..fd7b934 100644 --- a/Wrapper/SteamRemoteStorage.cpp +++ b/Wrapper/SteamRemoteStorage.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamRemoteStorage*) BS_SteamRemoteStorage() { - return SteamRemoteStorage(); -} - -#pragma message("SteamRemoteStorage is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamRemoteStorage*) BS_SteamRemoteStorage() { + return SteamRemoteStorage(); +} + +#pragma message("SteamRemoteStorage is not ported yet. TODO!") diff --git a/Wrapper/SteamScreenshots.cpp b/Wrapper/SteamScreenshots.cpp index c99d61a..bd006a7 100644 --- a/Wrapper/SteamScreenshots.cpp +++ b/Wrapper/SteamScreenshots.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamScreenshots*) BS_SteamScreenshots() { - return SteamScreenshots(); -} - -#pragma message("SteamScreenshots is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamScreenshots*) BS_SteamScreenshots() { + return SteamScreenshots(); +} + +#pragma message("SteamScreenshots is not ported yet. TODO!") diff --git a/Wrapper/SteamUGC.cpp b/Wrapper/SteamUGC.cpp index feeafda..b4a20dc 100644 --- a/Wrapper/SteamUGC.cpp +++ b/Wrapper/SteamUGC.cpp @@ -1,28 +1,28 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamUGC*) BS_SteamUGC() { - return SteamUGC(); -} - -DLL(ISteamUGC*) BS_SteamGameServerUGC() { - return SteamGameServerUGC(); -} - -#pragma message("SteamUGC is not ported yet. TODO!") - +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamUGC*) BS_SteamUGC() { + return SteamUGC(); +} + +DLL(ISteamUGC*) BS_SteamGameServerUGC() { + return SteamGameServerUGC(); +} + +#pragma message("SteamUGC is not ported yet. TODO!") + diff --git a/Wrapper/SteamUnifiedMessages.cpp b/Wrapper/SteamUnifiedMessages.cpp index cd76449..5e325b2 100644 --- a/Wrapper/SteamUnifiedMessages.cpp +++ b/Wrapper/SteamUnifiedMessages.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamUnifiedMessages*) BS_SteamUnifiedMessages() { - return SteamUnifiedMessages(); -} - -#pragma message("SteamUnifiedMessages is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamUnifiedMessages*) BS_SteamUnifiedMessages() { + return SteamUnifiedMessages(); +} + +#pragma message("SteamUnifiedMessages is not ported yet. TODO!") diff --git a/Wrapper/SteamUser.cpp b/Wrapper/SteamUser.cpp index 97f61bb..30a6981 100644 --- a/Wrapper/SteamUser.cpp +++ b/Wrapper/SteamUser.cpp @@ -1,214 +1,214 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: Functions for accessing and manipulating a steam account -// associated with one client instance -//----------------------------------------------------------------------------- -DLL(ISteamUser*) BS_SteamUser() { - return SteamUser(); -} - -// returns the HSteamUser this interface represents -// this is only used internally by the API, and by a few select interfaces that support multi-user -DLL(HSteamUser) BS_ISteamUser_GetHSteamUser( ISteamUser* lpSteamUser ) { - return lpSteamUser->GetHSteamUser( ); -} - -// returns true if the Steam client current has a live connection to the Steam servers. -// If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy. -// The Steam client will automatically be trying to recreate the connection as often as possible. -DLL(uint32_t) BS_ISteamUser_IsLoggedOn( ISteamUser* lpSteamUser ) { - return lpSteamUser->BLoggedOn( ); -} - -// returns the CSteamID of the account currently logged into the Steam client -// a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API -DLL(CSteamID*) BS_ISteamUser_GetSteamID( ISteamUser* lpSteamUser ) { - return &(lpSteamUser->GetSteamID( )); -} - -// Multiplayer Authentication functions - -// InitiateGameConnection() starts the state machine for authenticating the game client with the game server -// It is the client portion of a three-way handshake between the client, the game server, and the steam servers -// -// Parameters: -// void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token. -// int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes. -// CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client -// CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( ) -// uint32 unIPServer, uint16 usPortServer - the IP address of the game server -// bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running) -// -// return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed -// The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process. -DLL(uint32_t) BS_ISteamUser_InitiateGameConnection( ISteamUser* lpSteamUser, void* pAuthBlob, uint32_t cbMaxAuthBlob, CSteamID* SteamIDGameServer, uint32_t unIPServer, uint16_t usPortServer, uint32_t bSecure ) { - return lpSteamUser->InitiateGameConnection( pAuthBlob, cbMaxAuthBlob, *SteamIDGameServer, unIPServer, usPortServer, bSecure != 0 ); -} - -// notify of disconnect -// needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call -DLL(void) BS_ISteamUser_TerminateGameConnection( ISteamUser* lpSteamUser, uint32_t unIPServer, uint16_t usPortServer ) { - lpSteamUser->TerminateGameConnection( unIPServer, usPortServer ); -} - -// Legacy functions - -// used by only a few games to track usage events -DLL(void) BS_ISteamUser_TrackAppUsageEvent( ISteamUser* lpSteamUser, CGameID* gameId, uint32_t eAppUsageEvent, const char* pchExtraInfo ) { - lpSteamUser->TrackAppUsageEvent( *gameId, eAppUsageEvent, pchExtraInfo ); -} - -// get the local storage folder for current Steam account to write application data, e.g. save games, configs etc. -// this will usually be something like "C:\Progam Files\Steam\userdata\\\local" -DLL(uint32_t) BS_ISteamUser_GetUserDataFolder( ISteamUser* lpSteamUser, char* pchBuffer, uint32_t cubBuffer ) { - return lpSteamUser->GetUserDataFolder( pchBuffer, cubBuffer ); -} - -// Starts voice recording. Once started, use GetVoice() to get the data -DLL(void) BS_ISteamUser_StartVoiceRecording( ISteamUser* lpSteamUser ) { - lpSteamUser->StartVoiceRecording( ); -} - -// Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for -// a little bit after this function is called. GetVoice() should continue to be called until it returns -// k_eVoiceResultNotRecording -DLL(void) BS_ISteamUser_StopVoiceRecording( ISteamUser* lpSteamUser ) { - lpSteamUser->StopVoiceRecording( ); -} - -// Determine the amount of captured audio data that is available in bytes. -// This provides both the compressed and uncompressed data. Please note that the uncompressed -// data is not the raw feed from the microphone: data may only be available if audible -// levels of speech are detected. -// nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case) -// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate -DLL(EVoiceResult) BS_ISteamUser_GetAvailableVoice( ISteamUser* lpSteamUser, uint32_t* pcbCompressed, uint32_t* pcbUncompressed, uint32_t nUncompressedVoiceDesiredSampleRate ) { - return lpSteamUser->GetAvailableVoice( pcbCompressed, pcbUncompressed, nUncompressedVoiceDesiredSampleRate ); -} - -// Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to -// DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format. -// Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible -// levels of speech are detected, and may have passed through denoising filters, etc. -// This function should be called as often as possible once recording has started; once per frame at least. -// nBytesWritten is set to the number of bytes written to pDestBuffer. -// nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer. -// You must grab both compressed and uncompressed here at the same time, if you want both. -// Matching data that is not read during this call will be thrown away. -// GetAvailableVoice() can be used to determine how much data is actually available. -// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate -DLL(EVoiceResult) BS_ISteamUser_GetVoice( ISteamUser* lpSteamUser, uint32_t bWantCompressed, void *pDestBuffer, uint32_t cbDestBufferSize, uint32_t *nBytesWritten, uint32_t bWantUncompressed, void *pUncompressedDestBuffer, uint32_t cbUncompressedDestBufferSize, uint32_t *nUncompressBytesWritten, uint32_t nUncompressedVoiceDesiredSampleRate ) { - return lpSteamUser->GetVoice( bWantCompressed != 0, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed != 0, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate ); -} - -// Decompresses a chunk of compressed data produced by GetVoice(). -// nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall. -// In that case, nBytesWritten is set to the size of the buffer required to decompress the given -// data. The suggested buffer size for the destination buffer is 22 kilobytes. -// The output format of the data is 16-bit signed at the requested samples per second. -// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate -DLL(EVoiceResult) BS_ISteamUser_DecompressVoice( ISteamUser* lpSteamUser, const void *pCompressed, uint32_t cbCompressed, void *pDestBuffer, uint32_t cbDestBufferSize, uint32_t *nBytesWritten, uint32_t nDesiredSampleRate ) { - return lpSteamUser->DecompressVoice( pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate ); -} - -// This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results -DLL(uint32_t) BS_ISteamUser_GetVoiceOptimalSampleRate( ISteamUser* lpSteamUser ) { - return lpSteamUser->GetVoiceOptimalSampleRate( ); -} - -// Retrieve ticket to be sent to the entity who wishes to authenticate you. -// pcbTicket retrieves the length of the actual ticket. -DLL(HAuthTicket) BS_ISteamUser_GetAuthSessionTicket( ISteamUser* lpSteamUser, void* pTicket, uint32_t cbMaxTicket, uint32_t* pcbTicket ) { - return lpSteamUser->GetAuthSessionTicket( pTicket, cbMaxTicket, pcbTicket ); -} - -// Authenticate ticket from entity steamID to be sure it is valid and isnt reused -// Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) -DLL(EBeginAuthSessionResult) BS_ISteamUser_BeginAuthSession( ISteamUser* lpSteamUser, const void *pAuthTicket, uint32_t cbAuthTicket, CSteamID* steamID ) { - return lpSteamUser->BeginAuthSession( pAuthTicket, cbAuthTicket, *steamID ); -} - -// Stop tracking started by BeginAuthSession - called when no longer playing game with this entity -DLL(void) BS_ISteamUser_EndAuthSession( ISteamUser* lpSteamUser, CSteamID* steamID ) { - lpSteamUser->EndAuthSession( *steamID ); -} - -// Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to -DLL(void) BS_ISteamUser_CancelAuthTicket( ISteamUser* lpSteamUser, HAuthTicket hAuthTicket ) { - lpSteamUser->CancelAuthTicket( hAuthTicket ); -} - -// After receiving a user's authentication data, and passing it to BeginAuthSession, use this function -// to determine if the user owns downloadable content specified by the provided AppID. -DLL(EUserHasLicenseForAppResult) BS_ISteamUser_UserHasLicenseForApp( ISteamUser* lpSteamUser, CSteamID* steamID, AppId_t appID ) { - return lpSteamUser->UserHasLicenseForApp( *steamID, appID ); -} - -// returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam -// (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT. -DLL(uint32_t) BS_ISteamUser_IsBehindNAT( ISteamUser* lpSteamUser ) { - return lpSteamUser->BIsBehindNAT( ); -} - -// set data to be replicated to friends so that they can join your game -// CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client -// uint32 unIPServer, uint16 usPortServer - the IP address of the game server -DLL(void) BS_ISteamUser_AdvertiseGame( ISteamUser* lpSteamUser, CSteamID* steamIDGameServer, uint32_t unIPServer, uint16_t usPortServer ) { - lpSteamUser->AdvertiseGame( *steamIDGameServer, unIPServer, usPortServer ); -} - -// Requests a ticket encrypted with an app specific shared key -// pDataToInclude, cbDataToInclude will be encrypted into the ticket -// ( This is asynchronous, you must wait for the ticket to be completed by the server ) -//CALL_RESULT( EncryptedAppTicketResponse_t ) -DLL(SteamAPICall_t*) BS_ISteamUser_RequestEncryptedAppTicket( ISteamUser* lpSteamUser, void* pDataToInclude, uint32_t cbDataToInclude ) { - return new uint64_t(lpSteamUser->RequestEncryptedAppTicket( pDataToInclude, cbDataToInclude )); -} - -// retrieve a finished ticket -DLL(uint32_t) BS_ISteamUser_GetEncryptedAppTicket( ISteamUser* lpSteamUser, void *pTicket, uint32_t cbMaxTicket, uint32_t* pcbTicket ) { - return lpSteamUser->GetEncryptedAppTicket( pTicket, cbMaxTicket, pcbTicket ); -} - -// Trading Card badges data access -// if you only have one set of cards, the series will be 1 -// the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1) -DLL(uint32_t) BS_ISteamUser_GetGameBadgeLevel( ISteamUser* lpSteamUser, uint32_t nSeries, uint32_t bFoil ) { - return lpSteamUser->GetGameBadgeLevel( nSeries, bFoil != 0 ); -} - -// gets the Steam Level of the user, as shown on their profile -DLL(uint32_t) BS_ISteamUser_GetPlayerSteamLevel( ISteamUser* lpSteamUser ) { - return lpSteamUser->GetPlayerSteamLevel( ); -} - -// Requests a URL which authenticates an in-game browser for store check-out, -// and then redirects to the specified URL. As long as the in-game browser -// accepts and handles session cookies, Steam microtransaction checkout pages -// will automatically recognize the user instead of presenting a login page. -// The result of this API call will be a StoreAuthURLResponse_t callback. -// NOTE: The URL has a very short lifetime to prevent history-snooping attacks, -// so you should only call this API when you are about to launch the browser, -// or else immediately navigate to the result URL using a hidden browser window. -// NOTE 2: The resulting authorization cookie has an expiration time of one day, -// so it would be a good idea to request and visit a new auth URL every 12 hours. -DLL(SteamAPICall_t*) BS_ISteamUser_RequestStoreAuthURL( ISteamUser* lpSteamUser, const char* pchRedirectURL ) { - return new uint64_t(lpSteamUser->RequestStoreAuthURL( pchRedirectURL )); -} +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Functions for accessing and manipulating a steam account +// associated with one client instance +//----------------------------------------------------------------------------- +DLL(ISteamUser*) BS_SteamUser() { + return SteamUser(); +} + +// returns the HSteamUser this interface represents +// this is only used internally by the API, and by a few select interfaces that support multi-user +DLL(HSteamUser) BS_ISteamUser_GetHSteamUser( ISteamUser* lpSteamUser ) { + return lpSteamUser->GetHSteamUser( ); +} + +// returns true if the Steam client current has a live connection to the Steam servers. +// If false, it means there is no active connection due to either a networking issue on the local machine, or the Steam server is down/busy. +// The Steam client will automatically be trying to recreate the connection as often as possible. +DLL(uint32_t) BS_ISteamUser_IsLoggedOn( ISteamUser* lpSteamUser ) { + return lpSteamUser->BLoggedOn( ); +} + +// returns the CSteamID of the account currently logged into the Steam client +// a CSteamID is a unique identifier for an account, and used to differentiate users in all parts of the Steamworks API +DLL(CSteamID*) BS_ISteamUser_GetSteamID( ISteamUser* lpSteamUser ) { + return &(lpSteamUser->GetSteamID( )); +} + +// Multiplayer Authentication functions + +// InitiateGameConnection() starts the state machine for authenticating the game client with the game server +// It is the client portion of a three-way handshake between the client, the game server, and the steam servers +// +// Parameters: +// void *pAuthBlob - a pointer to empty memory that will be filled in with the authentication token. +// int cbMaxAuthBlob - the number of bytes of allocated memory in pBlob. Should be at least 2048 bytes. +// CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client +// CGameID gameID - the ID of the current game. For games without mods, this is just CGameID( ) +// uint32 unIPServer, uint16 usPortServer - the IP address of the game server +// bool bSecure - whether or not the client thinks that the game server is reporting itself as secure (i.e. VAC is running) +// +// return value - returns the number of bytes written to pBlob. If the return is 0, then the buffer passed in was too small, and the call has failed +// The contents of pBlob should then be sent to the game server, for it to use to complete the authentication process. +DLL(uint32_t) BS_ISteamUser_InitiateGameConnection( ISteamUser* lpSteamUser, void* pAuthBlob, uint32_t cbMaxAuthBlob, CSteamID* SteamIDGameServer, uint32_t unIPServer, uint16_t usPortServer, uint32_t bSecure ) { + return lpSteamUser->InitiateGameConnection( pAuthBlob, cbMaxAuthBlob, *SteamIDGameServer, unIPServer, usPortServer, bSecure != 0 ); +} + +// notify of disconnect +// needs to occur when the game client leaves the specified game server, needs to match with the InitiateGameConnection() call +DLL(void) BS_ISteamUser_TerminateGameConnection( ISteamUser* lpSteamUser, uint32_t unIPServer, uint16_t usPortServer ) { + lpSteamUser->TerminateGameConnection( unIPServer, usPortServer ); +} + +// Legacy functions + +// used by only a few games to track usage events +DLL(void) BS_ISteamUser_TrackAppUsageEvent( ISteamUser* lpSteamUser, CGameID* gameId, uint32_t eAppUsageEvent, const char* pchExtraInfo ) { + lpSteamUser->TrackAppUsageEvent( *gameId, eAppUsageEvent, pchExtraInfo ); +} + +// get the local storage folder for current Steam account to write application data, e.g. save games, configs etc. +// this will usually be something like "C:\Progam Files\Steam\userdata\\\local" +DLL(uint32_t) BS_ISteamUser_GetUserDataFolder( ISteamUser* lpSteamUser, char* pchBuffer, uint32_t cubBuffer ) { + return lpSteamUser->GetUserDataFolder( pchBuffer, cubBuffer ); +} + +// Starts voice recording. Once started, use GetVoice() to get the data +DLL(void) BS_ISteamUser_StartVoiceRecording( ISteamUser* lpSteamUser ) { + lpSteamUser->StartVoiceRecording( ); +} + +// Stops voice recording. Because people often release push-to-talk keys early, the system will keep recording for +// a little bit after this function is called. GetVoice() should continue to be called until it returns +// k_eVoiceResultNotRecording +DLL(void) BS_ISteamUser_StopVoiceRecording( ISteamUser* lpSteamUser ) { + lpSteamUser->StopVoiceRecording( ); +} + +// Determine the amount of captured audio data that is available in bytes. +// This provides both the compressed and uncompressed data. Please note that the uncompressed +// data is not the raw feed from the microphone: data may only be available if audible +// levels of speech are detected. +// nUncompressedVoiceDesiredSampleRate is necessary to know the number of bytes to return in pcbUncompressed - can be set to 0 if you don't need uncompressed (the usual case) +// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate +DLL(EVoiceResult) BS_ISteamUser_GetAvailableVoice( ISteamUser* lpSteamUser, uint32_t* pcbCompressed, uint32_t* pcbUncompressed, uint32_t nUncompressedVoiceDesiredSampleRate ) { + return lpSteamUser->GetAvailableVoice( pcbCompressed, pcbUncompressed, nUncompressedVoiceDesiredSampleRate ); +} + +// Gets the latest voice data from the microphone. Compressed data is an arbitrary format, and is meant to be handed back to +// DecompressVoice() for playback later as a binary blob. Uncompressed data is 16-bit, signed integer, 11025Hz PCM format. +// Please note that the uncompressed data is not the raw feed from the microphone: data may only be available if audible +// levels of speech are detected, and may have passed through denoising filters, etc. +// This function should be called as often as possible once recording has started; once per frame at least. +// nBytesWritten is set to the number of bytes written to pDestBuffer. +// nUncompressedBytesWritten is set to the number of bytes written to pUncompressedDestBuffer. +// You must grab both compressed and uncompressed here at the same time, if you want both. +// Matching data that is not read during this call will be thrown away. +// GetAvailableVoice() can be used to determine how much data is actually available. +// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nUncompressedVoiceDesiredSampleRate +DLL(EVoiceResult) BS_ISteamUser_GetVoice( ISteamUser* lpSteamUser, uint32_t bWantCompressed, void *pDestBuffer, uint32_t cbDestBufferSize, uint32_t *nBytesWritten, uint32_t bWantUncompressed, void *pUncompressedDestBuffer, uint32_t cbUncompressedDestBufferSize, uint32_t *nUncompressBytesWritten, uint32_t nUncompressedVoiceDesiredSampleRate ) { + return lpSteamUser->GetVoice( bWantCompressed != 0, pDestBuffer, cbDestBufferSize, nBytesWritten, bWantUncompressed != 0, pUncompressedDestBuffer, cbUncompressedDestBufferSize, nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate ); +} + +// Decompresses a chunk of compressed data produced by GetVoice(). +// nBytesWritten is set to the number of bytes written to pDestBuffer unless the return value is k_EVoiceResultBufferTooSmall. +// In that case, nBytesWritten is set to the size of the buffer required to decompress the given +// data. The suggested buffer size for the destination buffer is 22 kilobytes. +// The output format of the data is 16-bit signed at the requested samples per second. +// If you're upgrading from an older Steamworks API, you'll want to pass in 11025 to nDesiredSampleRate +DLL(EVoiceResult) BS_ISteamUser_DecompressVoice( ISteamUser* lpSteamUser, const void *pCompressed, uint32_t cbCompressed, void *pDestBuffer, uint32_t cbDestBufferSize, uint32_t *nBytesWritten, uint32_t nDesiredSampleRate ) { + return lpSteamUser->DecompressVoice( pCompressed, cbCompressed, pDestBuffer, cbDestBufferSize, nBytesWritten, nDesiredSampleRate ); +} + +// This returns the frequency of the voice data as it's stored internally; calling DecompressVoice() with this size will yield the best results +DLL(uint32_t) BS_ISteamUser_GetVoiceOptimalSampleRate( ISteamUser* lpSteamUser ) { + return lpSteamUser->GetVoiceOptimalSampleRate( ); +} + +// Retrieve ticket to be sent to the entity who wishes to authenticate you. +// pcbTicket retrieves the length of the actual ticket. +DLL(HAuthTicket) BS_ISteamUser_GetAuthSessionTicket( ISteamUser* lpSteamUser, void* pTicket, uint32_t cbMaxTicket, uint32_t* pcbTicket ) { + return lpSteamUser->GetAuthSessionTicket( pTicket, cbMaxTicket, pcbTicket ); +} + +// Authenticate ticket from entity steamID to be sure it is valid and isnt reused +// Registers for callbacks if the entity goes offline or cancels the ticket ( see ValidateAuthTicketResponse_t callback and EAuthSessionResponse ) +DLL(EBeginAuthSessionResult) BS_ISteamUser_BeginAuthSession( ISteamUser* lpSteamUser, const void* pAuthTicket, uint32_t cbAuthTicket, CSteamID* steamID ) { + return lpSteamUser->BeginAuthSession( pAuthTicket, cbAuthTicket, *steamID ); +} + +// Stop tracking started by BeginAuthSession - called when no longer playing game with this entity +DLL(void) BS_ISteamUser_EndAuthSession( ISteamUser* lpSteamUser, CSteamID* steamID ) { + lpSteamUser->EndAuthSession( *steamID ); +} + +// Cancel auth ticket from GetAuthSessionTicket, called when no longer playing game with the entity you gave the ticket to +DLL(void) BS_ISteamUser_CancelAuthTicket( ISteamUser* lpSteamUser, HAuthTicket hAuthTicket ) { + lpSteamUser->CancelAuthTicket( hAuthTicket ); +} + +// After receiving a user's authentication data, and passing it to BeginAuthSession, use this function +// to determine if the user owns downloadable content specified by the provided AppID. +DLL(EUserHasLicenseForAppResult) BS_ISteamUser_UserHasLicenseForApp( ISteamUser* lpSteamUser, CSteamID* steamID, AppId_t appID ) { + return lpSteamUser->UserHasLicenseForApp( *steamID, appID ); +} + +// returns true if this users looks like they are behind a NAT device. Only valid once the user has connected to steam +// (i.e a SteamServersConnected_t has been issued) and may not catch all forms of NAT. +DLL(uint32_t) BS_ISteamUser_IsBehindNAT( ISteamUser* lpSteamUser ) { + return lpSteamUser->BIsBehindNAT( ); +} + +// set data to be replicated to friends so that they can join your game +// CSteamID steamIDGameServer - the steamID of the game server, received from the game server by the client +// uint32 unIPServer, uint16 usPortServer - the IP address of the game server +DLL(void) BS_ISteamUser_AdvertiseGame( ISteamUser* lpSteamUser, CSteamID* steamIDGameServer, uint32_t unIPServer, uint16_t usPortServer ) { + lpSteamUser->AdvertiseGame( *steamIDGameServer, unIPServer, usPortServer ); +} + +// Requests a ticket encrypted with an app specific shared key +// pDataToInclude, cbDataToInclude will be encrypted into the ticket +// ( This is asynchronous, you must wait for the ticket to be completed by the server ) +//CALL_RESULT( EncryptedAppTicketResponse_t ) +DLL(SteamAPICall_t*) BS_ISteamUser_RequestEncryptedAppTicket( ISteamUser* lpSteamUser, void* pDataToInclude, uint32_t cbDataToInclude ) { + return new uint64_t(lpSteamUser->RequestEncryptedAppTicket( pDataToInclude, cbDataToInclude )); +} + +// retrieve a finished ticket +DLL(uint32_t) BS_ISteamUser_GetEncryptedAppTicket( ISteamUser* lpSteamUser, void *pTicket, uint32_t cbMaxTicket, uint32_t* pcbTicket ) { + return lpSteamUser->GetEncryptedAppTicket( pTicket, cbMaxTicket, pcbTicket ); +} + +// Trading Card badges data access +// if you only have one set of cards, the series will be 1 +// the user has can have two different badges for a series; the regular (max level 5) and the foil (max level 1) +DLL(uint32_t) BS_ISteamUser_GetGameBadgeLevel( ISteamUser* lpSteamUser, uint32_t nSeries, uint32_t bFoil ) { + return lpSteamUser->GetGameBadgeLevel( nSeries, bFoil != 0 ); +} + +// gets the Steam Level of the user, as shown on their profile +DLL(uint32_t) BS_ISteamUser_GetPlayerSteamLevel( ISteamUser* lpSteamUser ) { + return lpSteamUser->GetPlayerSteamLevel( ); +} + +// Requests a URL which authenticates an in-game browser for store check-out, +// and then redirects to the specified URL. As long as the in-game browser +// accepts and handles session cookies, Steam microtransaction checkout pages +// will automatically recognize the user instead of presenting a login page. +// The result of this API call will be a StoreAuthURLResponse_t callback. +// NOTE: The URL has a very short lifetime to prevent history-snooping attacks, +// so you should only call this API when you are about to launch the browser, +// or else immediately navigate to the result URL using a hidden browser window. +// NOTE 2: The resulting authorization cookie has an expiration time of one day, +// so it would be a good idea to request and visit a new auth URL every 12 hours. +DLL(SteamAPICall_t*) BS_ISteamUser_RequestStoreAuthURL( ISteamUser* lpSteamUser, const char* pchRedirectURL ) { + return new uint64_t(lpSteamUser->RequestStoreAuthURL( pchRedirectURL )); +} diff --git a/Wrapper/SteamUserStats.cpp b/Wrapper/SteamUserStats.cpp index 3bce77e..a1a78e4 100644 --- a/Wrapper/SteamUserStats.cpp +++ b/Wrapper/SteamUserStats.cpp @@ -1,308 +1,308 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -//----------------------------------------------------------------------------- -// Purpose: Functions for accessing stats, achievements, and leaderboard information -//----------------------------------------------------------------------------- -DLL(ISteamUserStats*) BS_SteamUserStats() { - return SteamUserStats(); -} - -// Ask the server to send down this user's data and achievements for this game -//CALL_BACK(UserStatsReceived_t) -DLL(uint32_t) BS_ISteamUserStats_RequestCurrentStats( ISteamUserStats* lpSteamUserStats ) { - return lpSteamUserStats->RequestCurrentStats( ); -} - -// Data accessors -DLL(uint32_t) BS_ISteamUserStats_GetStat( ISteamUserStats* lpSteamUserStats, const char* pchName, int32_t* pData ) { - return lpSteamUserStats->GetStat( pchName, pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_GetStatF( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t* pData ) { - return lpSteamUserStats->GetStat( pchName, pData ); -} - -// Set / update data -DLL(uint32_t) BS_ISteamUserStats_SetStat( ISteamUserStats* lpSteamUserStats, const char* pchName, int32_t pData ) { - return lpSteamUserStats->SetStat( pchName, pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_SetStatF( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t pData ) { - return lpSteamUserStats->SetStat( pchName, pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_UpdateAvgRateStat( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t flCountThisSession, double_t* dSessionLength ) { - return lpSteamUserStats->UpdateAvgRateStat( pchName, flCountThisSession, *dSessionLength ); -} - -// Achievement flag accessors -DLL(uint32_t) BS_ISteamUserStats_GetAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName, bool* pbAchieved ) { - return lpSteamUserStats->GetAchievement( pchName, (bool*)pbAchieved ); -} - -DLL(uint32_t) BS_ISteamUserStats_SetAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName ) { - return lpSteamUserStats->SetAchievement( pchName ); -} - -DLL(uint32_t) BS_ISteamUserStats_ClearAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName ) { - return lpSteamUserStats->ClearAchievement( pchName ); -} - -// Get the achievement status, and the time it was unlocked if unlocked. -// If the return value is true, but the unlock time is zero, that means it was unlocked before Steam -// began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970. -DLL(uint32_t) BS_ISteamUserStats_GetAchievementAndUnlockTime( ISteamUserStats* lpSteamUserStats, const char* pchName, bool* pbAchieved, uint32_t* punUnlockTime ) { - return lpSteamUserStats->GetAchievementAndUnlockTime( pchName, (bool*)pbAchieved, punUnlockTime ); -} - -// Store the current data on the server, will get a callback when set -// And one callback for every new achievement -// -// If the callback has a result of k_EResultInvalidParam, one or more stats -// uploaded has been rejected, either because they broke constraints -// or were out of date. In this case the server sends back updated values. -// The stats should be re-iterated to keep in sync. -DLL(uint32_t) BS_ISteamUserStats_StoreStats( ISteamUserStats* lpSteamUserStats ) { - return lpSteamUserStats->StoreStats( ); -} - -// Achievement / GroupAchievement metadata - -// Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set. -// A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback -// which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the -// specified achievement. -DLL(uint32_t) BS_ISteamUserStats_GetAchievementIcon( ISteamUserStats* lpSteamUserStats, const char* pchName ) { - return lpSteamUserStats->GetAchievementIcon( pchName ); -} - -// Get general attributes for an achievement. Accepts the following keys: -// - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8) -// - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden) -DLL(const char*) BS_ISteamUserStats_GetAchievementDisplayAttribute( ISteamUserStats* lpSteamUserStats, const char* pchName, const char* pchKey ) { - return lpSteamUserStats->GetAchievementDisplayAttribute( pchName, pchKey ); -} - -// Achievement progress - triggers an AchievementProgress callback, that is all. -// Calling this w/ N out of N progress will NOT set the achievement, the game must still do that. -DLL(uint32_t) BS_ISteamUserStats_IndicateAchievementProgress( ISteamUserStats* lpSteamUserStats, const char* pchName, uint32_t nCurProgress, uint32_t nMaxProgress ) { - return lpSteamUserStats->IndicateAchievementProgress( pchName, nCurProgress, nMaxProgress ); -} - -// Used for iterating achievements. In general games should not need these functions because they should have a -// list of existing achievements compiled into them -DLL(uint32_t) BS_ISteamUserStats_GetNumAchievements( ISteamUserStats* lpSteamUserStats ) { - return lpSteamUserStats->GetNumAchievements( ); -} - -// Get achievement name iAchievement in [0,GetNumAchievements) -DLL(const char*) BS_ISteamUserStats_GetAchievementName( ISteamUserStats* lpSteamUserStats, uint32_t iAchievement ) { - return lpSteamUserStats->GetAchievementName( iAchievement ); -} - -// Friends stats & achievements - -// downloads stats for the user -// returns a UserStatsReceived_t received when completed -// if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail -// these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data -//CALL_RESULT(UserStatsReceived_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestUserStats( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser ) { - return new uint64_t( lpSteamUserStats->RequestUserStats( *steamIDUser ) ); -} - -// requests stat information for a user, usable after a successful call to RequestUserStats() -DLL(uint32_t) BS_ISteamUserStats_GetUserStat( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pData ) { - return lpSteamUserStats->GetUserStat( *steamIDUser, pchName, (int32_t*)pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_GetUserStatF( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, float_t* pData ) { - return lpSteamUserStats->GetUserStat( *steamIDUser, pchName, pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_GetUserAchievement( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, bool* pbAchieved ) { - return lpSteamUserStats->GetUserAchievement( *steamIDUser, pchName, (bool*)pbAchieved ); -} - -// See notes for GetAchievementAndUnlockTime above -DLL(uint32_t) BS_ISteamUserStats_GetUserAchievementAndUnlockTime( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, bool* pbAchieved, uint32_t* punUnlockTime ) { - return lpSteamUserStats->GetUserAchievementAndUnlockTime( *steamIDUser, pchName, (bool*)pbAchieved, punUnlockTime ); -} - -// Reset stats -DLL(uint32_t) BS_ISteamUserStats_ResetAllStats( ISteamUserStats* lpSteamUserStats, uint32_t bAchievementsToo ) { - return lpSteamUserStats->ResetAllStats( bAchievementsToo != 0 ); -} - -// Leaderboard functions - -// asks the Steam back-end for a leaderboard by name, and will create it if it's not yet -// This call is asynchronous, with the result returned in LeaderboardFindResult_t -//CALL_RESULT(LeaderboardFindResult_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_FindOrCreateLeaderboard( ISteamUserStats* lpSteamUserStats, const char* pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) { - return new uint64_t( lpSteamUserStats->FindOrCreateLeaderboard( pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType ) ); -} - -// as above, but won't create the leaderboard if it's not found -// This call is asynchronous, with the result returned in LeaderboardFindResult_t -//CALL_RESULT(LeaderboardFindResult_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_FindLeaderboard( ISteamUserStats* lpSteamUserStats, const char *pchLeaderboardName ) { - return new uint64_t( lpSteamUserStats->FindLeaderboard( pchLeaderboardName ) ); -} - -// returns the name of a leaderboard -DLL(const char*) BS_ISteamUserStats_GetLeaderboardName( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { - return lpSteamUserStats->GetLeaderboardName( *hSteamLeaderboard ); -} - -// returns the total number of entries in a leaderboard, as of the last request -DLL(int) BS_ISteamUserStats_GetLeaderboardEntryCount( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { - return lpSteamUserStats->GetLeaderboardEntryCount( *hSteamLeaderboard ); -} - -// returns the sort method of the leaderboard -DLL(ELeaderboardSortMethod) BS_ISteamUserStats_GetLeaderboardSortMethod( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { - return lpSteamUserStats->GetLeaderboardSortMethod( *hSteamLeaderboard ); -} - -// returns the display type of the leaderboard -DLL(ELeaderboardDisplayType) BS_ISteamUserStats_GetLeaderboardDisplayType( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { - return lpSteamUserStats->GetLeaderboardDisplayType( *hSteamLeaderboard ); -} - -// Asks the Steam back-end for a set of rows in the leaderboard. -// This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t -// LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below) -// You can ask for more entries than exist, and it will return as many as do exist. -// k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries] -// k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate -// e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after -// k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user -//CALL_RESULT(LeaderboardScoresDownloaded_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_DownloadLeaderboardEntries( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) { - return new uint64_t( lpSteamUserStats->DownloadLeaderboardEntries( *hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd ) ); -} -///##### - -// as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers -// if a user doesn't have a leaderboard entry, they won't be included in the result -// a max of 100 users can be downloaded at a time, with only one outstanding call at a time -//CALL_RESULT(LeaderboardScoresDownloaded_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_DownloadLeaderboardEntriesForUsers( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, CSteamID* prgUsers, int cUsers ) { - return new uint64_t( lpSteamUserStats->DownloadLeaderboardEntriesForUsers( *hSteamLeaderboard, prgUsers, cUsers ) ); -} - -// Returns data about a single leaderboard entry -// use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries -// e.g. -// void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded ) -// { -// for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ ) -// { -// LeaderboardEntry_t leaderboardEntry; -// int32 details[3]; // we know this is how many we've stored previously -// GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 ); -// assert( leaderboardEntry.m_cDetails == 3 ); -// ... -// } -// once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid -DLL(uint32_t) BS_ISteamUserStats_GetDownloadedLeaderboardEntry( ISteamUserStats* lpSteamUserStats, SteamLeaderboardEntries_t* hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) { - return lpSteamUserStats->GetDownloadedLeaderboardEntry( *hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax ); -} - -// Uploads a user score to the Steam back-end. -// This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t -// Details are extra game-defined information regarding how the user got that score -// pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list -//CALL_RESULT(LeaderboardScoreUploaded_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_UploadLeaderboardScore( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32_t* pScoreDetails, int cScoreDetailsCount ) { - return new uint64_t(lpSteamUserStats->UploadLeaderboardScore( *hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount )); -} - -// Attaches a piece of user generated content the user's entry on a leaderboard. -// hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare(). -// This call is asynchronous, with the result returned in LeaderboardUGCSet_t. -//CALL_RESULT(LeaderboardUGCSet_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_AttachLeaderboardUGC( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, UGCHandle_t* hUGC ) { - return new uint64_t( lpSteamUserStats->AttachLeaderboardUGC( *hSteamLeaderboard, *hUGC ) ); -} - -// Retrieves the number of players currently playing your game (online + offline) -// This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t -//CALL_RESULT(NumberOfCurrentPlayers_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_GetNumberOfCurrentPlayers( ISteamUserStats* lpSteamUserStats ) { - return new uint64_t( lpSteamUserStats->GetNumberOfCurrentPlayers( ) ); -} - -// Requests that Steam fetch data on the percentage of players who have received each achievement -// for the game globally. -// This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t. -//CALL_RESULT(GlobalAchievementPercentagesReady_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestGlobalAchievementPercentages( ISteamUserStats* lpSteamUserStats ) { - return new uint64_t( lpSteamUserStats->RequestGlobalAchievementPercentages( ) ); -} - -// Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch -// the next most achieved afterwards. Will return -1 if there is no data on achievement -// percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback). -DLL(uint32_t) BS_ISteamUserStats_GetMostAchievedAchievementInfo( ISteamUserStats* lpSteamUserStats, char *pchName, uint32_t unNameBufLen, float *pflPercent, bool* pbAchieved ) { - return lpSteamUserStats->GetMostAchievedAchievementInfo( pchName, unNameBufLen, pflPercent, pbAchieved ); -} - -// Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another -// GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last -// achievement has been iterated. -DLL(uint32_t) BS_ISteamUserStats_GetNextMostAchievedAchievementInfo( ISteamUserStats* lpSteamUserStats, int iIteratorPrevious, char *pchName, uint32_t unNameBufLen, float *pflPercent, bool *pbAchieved ) { - return lpSteamUserStats->GetNextMostAchievedAchievementInfo( iIteratorPrevious, pchName, unNameBufLen, pflPercent, pbAchieved ); -} - -// Returns the percentage of users who have achieved the specified achievement. -DLL(uint32_t) BS_ISteamUserStats_GetAchievementAchievedPercent( ISteamUserStats* lpSteamUserStats, const char *pchName, float *pflPercent ) { - return lpSteamUserStats->GetAchievementAchievedPercent( pchName, pflPercent ); -} - -// Requests global stats data, which is available for stats marked as "aggregated". -// This call is asynchronous, with the results returned in GlobalStatsReceived_t. -// nHistoryDays specifies how many days of day-by-day history to retrieve in addition -// to the overall totals. The limit is 60. -//CALL_RESULT(GlobalStatsReceived_t) -DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestGlobalStats( ISteamUserStats* lpSteamUserStats, int nHistoryDays ) { - return new uint64_t( lpSteamUserStats->RequestGlobalStats( nHistoryDays ) ); -} - -// Gets the lifetime totals for an aggregated stat -DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatL( ISteamUserStats* lpSteamUserStats, const char *pchStatName, int64* pData ) { - return lpSteamUserStats->GetGlobalStat( pchStatName, pData ); -} - -DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatD( ISteamUserStats* lpSteamUserStats, const char *pchStatName, double* pData ) { - return lpSteamUserStats->GetGlobalStat( pchStatName, pData ); -} - -// Gets history for an aggregated stat. pData will be filled with daily values, starting with today. -// So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago, -// etc. cubData is the size in bytes of the pubData buffer. Returns the number of -// elements actually set. -DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatHistoryL( ISteamUserStats* lpSteamUserStats, const char *pchStatName, int64 *pData, uint32_t cubData ) { - return lpSteamUserStats->GetGlobalStatHistory( pchStatName, pData, cubData ); -} - -DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatHistoryD( ISteamUserStats* lpSteamUserStats, const char *pchStatName, double *pData, uint32_t cubData ) { - return lpSteamUserStats->GetGlobalStatHistory( pchStatName, pData, cubData ); +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +//----------------------------------------------------------------------------- +// Purpose: Functions for accessing stats, achievements, and leaderboard information +//----------------------------------------------------------------------------- +DLL(ISteamUserStats*) BS_SteamUserStats() { + return SteamUserStats(); +} + +// Ask the server to send down this user's data and achievements for this game +//CALL_BACK(UserStatsReceived_t) +DLL(uint32_t) BS_ISteamUserStats_RequestCurrentStats( ISteamUserStats* lpSteamUserStats ) { + return lpSteamUserStats->RequestCurrentStats( ); +} + +// Data accessors +DLL(uint32_t) BS_ISteamUserStats_GetStat( ISteamUserStats* lpSteamUserStats, const char* pchName, int32_t* pData ) { + return lpSteamUserStats->GetStat( pchName, pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_GetStatF( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t* pData ) { + return lpSteamUserStats->GetStat( pchName, pData ); +} + +// Set / update data +DLL(uint32_t) BS_ISteamUserStats_SetStat( ISteamUserStats* lpSteamUserStats, const char* pchName, int32_t pData ) { + return lpSteamUserStats->SetStat( pchName, pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_SetStatF( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t pData ) { + return lpSteamUserStats->SetStat( pchName, pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_UpdateAvgRateStat( ISteamUserStats* lpSteamUserStats, const char* pchName, float_t flCountThisSession, double_t* dSessionLength ) { + return lpSteamUserStats->UpdateAvgRateStat( pchName, flCountThisSession, *dSessionLength ); +} + +// Achievement flag accessors +DLL(uint32_t) BS_ISteamUserStats_GetAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName, bool* pbAchieved ) { + return lpSteamUserStats->GetAchievement( pchName, (bool*)pbAchieved ); +} + +DLL(uint32_t) BS_ISteamUserStats_SetAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName ) { + return lpSteamUserStats->SetAchievement( pchName ); +} + +DLL(uint32_t) BS_ISteamUserStats_ClearAchievement( ISteamUserStats* lpSteamUserStats, const char* pchName ) { + return lpSteamUserStats->ClearAchievement( pchName ); +} + +// Get the achievement status, and the time it was unlocked if unlocked. +// If the return value is true, but the unlock time is zero, that means it was unlocked before Steam +// began tracking achievement unlock times (December 2009). Time is seconds since January 1, 1970. +DLL(uint32_t) BS_ISteamUserStats_GetAchievementAndUnlockTime( ISteamUserStats* lpSteamUserStats, const char* pchName, bool* pbAchieved, uint32_t* punUnlockTime ) { + return lpSteamUserStats->GetAchievementAndUnlockTime( pchName, (bool*)pbAchieved, punUnlockTime ); +} + +// Store the current data on the server, will get a callback when set +// And one callback for every new achievement +// +// If the callback has a result of k_EResultInvalidParam, one or more stats +// uploaded has been rejected, either because they broke constraints +// or were out of date. In this case the server sends back updated values. +// The stats should be re-iterated to keep in sync. +DLL(uint32_t) BS_ISteamUserStats_StoreStats( ISteamUserStats* lpSteamUserStats ) { + return lpSteamUserStats->StoreStats( ); +} + +// Achievement / GroupAchievement metadata + +// Gets the icon of the achievement, which is a handle to be used in ISteamUtils::GetImageRGBA(), or 0 if none set. +// A return value of 0 may indicate we are still fetching data, and you can wait for the UserAchievementIconFetched_t callback +// which will notify you when the bits are ready. If the callback still returns zero, then there is no image set for the +// specified achievement. +DLL(uint32_t) BS_ISteamUserStats_GetAchievementIcon( ISteamUserStats* lpSteamUserStats, const char* pchName ) { + return lpSteamUserStats->GetAchievementIcon( pchName ); +} + +// Get general attributes for an achievement. Accepts the following keys: +// - "name" and "desc" for retrieving the localized achievement name and description (returned in UTF8) +// - "hidden" for retrieving if an achievement is hidden (returns "0" when not hidden, "1" when hidden) +DLL(const char*) BS_ISteamUserStats_GetAchievementDisplayAttribute( ISteamUserStats* lpSteamUserStats, const char* pchName, const char* pchKey ) { + return lpSteamUserStats->GetAchievementDisplayAttribute( pchName, pchKey ); +} + +// Achievement progress - triggers an AchievementProgress callback, that is all. +// Calling this w/ N out of N progress will NOT set the achievement, the game must still do that. +DLL(uint32_t) BS_ISteamUserStats_IndicateAchievementProgress( ISteamUserStats* lpSteamUserStats, const char* pchName, uint32_t nCurProgress, uint32_t nMaxProgress ) { + return lpSteamUserStats->IndicateAchievementProgress( pchName, nCurProgress, nMaxProgress ); +} + +// Used for iterating achievements. In general games should not need these functions because they should have a +// list of existing achievements compiled into them +DLL(uint32_t) BS_ISteamUserStats_GetNumAchievements( ISteamUserStats* lpSteamUserStats ) { + return lpSteamUserStats->GetNumAchievements( ); +} + +// Get achievement name iAchievement in [0,GetNumAchievements) +DLL(const char*) BS_ISteamUserStats_GetAchievementName( ISteamUserStats* lpSteamUserStats, uint32_t iAchievement ) { + return lpSteamUserStats->GetAchievementName( iAchievement ); +} + +// Friends stats & achievements + +// downloads stats for the user +// returns a UserStatsReceived_t received when completed +// if the other user has no stats, UserStatsReceived_t.m_eResult will be set to k_EResultFail +// these stats won't be auto-updated; you'll need to call RequestUserStats() again to refresh any data +//CALL_RESULT(UserStatsReceived_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestUserStats( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser ) { + return new uint64_t( lpSteamUserStats->RequestUserStats( *steamIDUser ) ); +} + +// requests stat information for a user, usable after a successful call to RequestUserStats() +DLL(uint32_t) BS_ISteamUserStats_GetUserStat( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, uint32_t* pData ) { + return lpSteamUserStats->GetUserStat( *steamIDUser, pchName, (int32_t*)pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_GetUserStatF( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, float_t* pData ) { + return lpSteamUserStats->GetUserStat( *steamIDUser, pchName, pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_GetUserAchievement( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, bool* pbAchieved ) { + return lpSteamUserStats->GetUserAchievement( *steamIDUser, pchName, (bool*)pbAchieved ); +} + +// See notes for GetAchievementAndUnlockTime above +DLL(uint32_t) BS_ISteamUserStats_GetUserAchievementAndUnlockTime( ISteamUserStats* lpSteamUserStats, CSteamID* steamIDUser, const char* pchName, bool* pbAchieved, uint32_t* punUnlockTime ) { + return lpSteamUserStats->GetUserAchievementAndUnlockTime( *steamIDUser, pchName, (bool*)pbAchieved, punUnlockTime ); +} + +// Reset stats +DLL(uint32_t) BS_ISteamUserStats_ResetAllStats( ISteamUserStats* lpSteamUserStats, uint32_t bAchievementsToo ) { + return lpSteamUserStats->ResetAllStats( bAchievementsToo != 0 ); +} + +// Leaderboard functions + +// asks the Steam back-end for a leaderboard by name, and will create it if it's not yet +// This call is asynchronous, with the result returned in LeaderboardFindResult_t +//CALL_RESULT(LeaderboardFindResult_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_FindOrCreateLeaderboard( ISteamUserStats* lpSteamUserStats, const char* pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType ) { + return new uint64_t( lpSteamUserStats->FindOrCreateLeaderboard( pchLeaderboardName, eLeaderboardSortMethod, eLeaderboardDisplayType ) ); +} + +// as above, but won't create the leaderboard if it's not found +// This call is asynchronous, with the result returned in LeaderboardFindResult_t +//CALL_RESULT(LeaderboardFindResult_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_FindLeaderboard( ISteamUserStats* lpSteamUserStats, const char *pchLeaderboardName ) { + return new uint64_t( lpSteamUserStats->FindLeaderboard( pchLeaderboardName ) ); +} + +// returns the name of a leaderboard +DLL(const char*) BS_ISteamUserStats_GetLeaderboardName( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { + return lpSteamUserStats->GetLeaderboardName( *hSteamLeaderboard ); +} + +// returns the total number of entries in a leaderboard, as of the last request +DLL(int) BS_ISteamUserStats_GetLeaderboardEntryCount( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { + return lpSteamUserStats->GetLeaderboardEntryCount( *hSteamLeaderboard ); +} + +// returns the sort method of the leaderboard +DLL(ELeaderboardSortMethod) BS_ISteamUserStats_GetLeaderboardSortMethod( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { + return lpSteamUserStats->GetLeaderboardSortMethod( *hSteamLeaderboard ); +} + +// returns the display type of the leaderboard +DLL(ELeaderboardDisplayType) BS_ISteamUserStats_GetLeaderboardDisplayType( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard ) { + return lpSteamUserStats->GetLeaderboardDisplayType( *hSteamLeaderboard ); +} + +// Asks the Steam back-end for a set of rows in the leaderboard. +// This call is asynchronous, with the result returned in LeaderboardScoresDownloaded_t +// LeaderboardScoresDownloaded_t will contain a handle to pull the results from GetDownloadedLeaderboardEntries() (below) +// You can ask for more entries than exist, and it will return as many as do exist. +// k_ELeaderboardDataRequestGlobal requests rows in the leaderboard from the full table, with nRangeStart & nRangeEnd in the range [1, TotalEntries] +// k_ELeaderboardDataRequestGlobalAroundUser requests rows around the current user, nRangeStart being negate +// e.g. DownloadLeaderboardEntries( hLeaderboard, k_ELeaderboardDataRequestGlobalAroundUser, -3, 3 ) will return 7 rows, 3 before the user, 3 after +// k_ELeaderboardDataRequestFriends requests all the rows for friends of the current user +//CALL_RESULT(LeaderboardScoresDownloaded_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_DownloadLeaderboardEntries( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd ) { + return new uint64_t( lpSteamUserStats->DownloadLeaderboardEntries( *hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd ) ); +} +///##### + +// as above, but downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers +// if a user doesn't have a leaderboard entry, they won't be included in the result +// a max of 100 users can be downloaded at a time, with only one outstanding call at a time +//CALL_RESULT(LeaderboardScoresDownloaded_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_DownloadLeaderboardEntriesForUsers( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, CSteamID* prgUsers, int cUsers ) { + return new uint64_t( lpSteamUserStats->DownloadLeaderboardEntriesForUsers( *hSteamLeaderboard, prgUsers, cUsers ) ); +} + +// Returns data about a single leaderboard entry +// use a for loop from 0 to LeaderboardScoresDownloaded_t::m_cEntryCount to get all the downloaded entries +// e.g. +// void OnLeaderboardScoresDownloaded( LeaderboardScoresDownloaded_t *pLeaderboardScoresDownloaded ) +// { +// for ( int index = 0; index < pLeaderboardScoresDownloaded->m_cEntryCount; index++ ) +// { +// LeaderboardEntry_t leaderboardEntry; +// int32 details[3]; // we know this is how many we've stored previously +// GetDownloadedLeaderboardEntry( pLeaderboardScoresDownloaded->m_hSteamLeaderboardEntries, index, &leaderboardEntry, details, 3 ); +// assert( leaderboardEntry.m_cDetails == 3 ); +// ... +// } +// once you've accessed all the entries, the data will be free'd, and the SteamLeaderboardEntries_t handle will become invalid +DLL(uint32_t) BS_ISteamUserStats_GetDownloadedLeaderboardEntry( ISteamUserStats* lpSteamUserStats, SteamLeaderboardEntries_t* hSteamLeaderboardEntries, int index, LeaderboardEntry_t *pLeaderboardEntry, int32 *pDetails, int cDetailsMax ) { + return lpSteamUserStats->GetDownloadedLeaderboardEntry( *hSteamLeaderboardEntries, index, pLeaderboardEntry, pDetails, cDetailsMax ); +} + +// Uploads a user score to the Steam back-end. +// This call is asynchronous, with the result returned in LeaderboardScoreUploaded_t +// Details are extra game-defined information regarding how the user got that score +// pScoreDetails points to an array of int32's, cScoreDetailsCount is the number of int32's in the list +//CALL_RESULT(LeaderboardScoreUploaded_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_UploadLeaderboardScore( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int32 nScore, const int32_t* pScoreDetails, int cScoreDetailsCount ) { + return new uint64_t(lpSteamUserStats->UploadLeaderboardScore( *hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount )); +} + +// Attaches a piece of user generated content the user's entry on a leaderboard. +// hContent is a handle to a piece of user generated content that was shared using ISteamUserRemoteStorage::FileShare(). +// This call is asynchronous, with the result returned in LeaderboardUGCSet_t. +//CALL_RESULT(LeaderboardUGCSet_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_AttachLeaderboardUGC( ISteamUserStats* lpSteamUserStats, SteamLeaderboard_t* hSteamLeaderboard, UGCHandle_t* hUGC ) { + return new uint64_t( lpSteamUserStats->AttachLeaderboardUGC( *hSteamLeaderboard, *hUGC ) ); +} + +// Retrieves the number of players currently playing your game (online + offline) +// This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t +//CALL_RESULT(NumberOfCurrentPlayers_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_GetNumberOfCurrentPlayers( ISteamUserStats* lpSteamUserStats ) { + return new uint64_t( lpSteamUserStats->GetNumberOfCurrentPlayers( ) ); +} + +// Requests that Steam fetch data on the percentage of players who have received each achievement +// for the game globally. +// This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t. +//CALL_RESULT(GlobalAchievementPercentagesReady_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestGlobalAchievementPercentages( ISteamUserStats* lpSteamUserStats ) { + return new uint64_t( lpSteamUserStats->RequestGlobalAchievementPercentages( ) ); +} + +// Get the info on the most achieved achievement for the game, returns an iterator index you can use to fetch +// the next most achieved afterwards. Will return -1 if there is no data on achievement +// percentages (ie, you haven't called RequestGlobalAchievementPercentages and waited on the callback). +DLL(uint32_t) BS_ISteamUserStats_GetMostAchievedAchievementInfo( ISteamUserStats* lpSteamUserStats, char *pchName, uint32_t unNameBufLen, float *pflPercent, bool* pbAchieved ) { + return lpSteamUserStats->GetMostAchievedAchievementInfo( pchName, unNameBufLen, pflPercent, pbAchieved ); +} + +// Get the info on the next most achieved achievement for the game. Call this after GetMostAchievedAchievementInfo or another +// GetNextMostAchievedAchievementInfo call passing the iterator from the previous call. Returns -1 after the last +// achievement has been iterated. +DLL(uint32_t) BS_ISteamUserStats_GetNextMostAchievedAchievementInfo( ISteamUserStats* lpSteamUserStats, int iIteratorPrevious, char *pchName, uint32_t unNameBufLen, float *pflPercent, bool *pbAchieved ) { + return lpSteamUserStats->GetNextMostAchievedAchievementInfo( iIteratorPrevious, pchName, unNameBufLen, pflPercent, pbAchieved ); +} + +// Returns the percentage of users who have achieved the specified achievement. +DLL(uint32_t) BS_ISteamUserStats_GetAchievementAchievedPercent( ISteamUserStats* lpSteamUserStats, const char *pchName, float *pflPercent ) { + return lpSteamUserStats->GetAchievementAchievedPercent( pchName, pflPercent ); +} + +// Requests global stats data, which is available for stats marked as "aggregated". +// This call is asynchronous, with the results returned in GlobalStatsReceived_t. +// nHistoryDays specifies how many days of day-by-day history to retrieve in addition +// to the overall totals. The limit is 60. +//CALL_RESULT(GlobalStatsReceived_t) +DLL(SteamAPICall_t*) BS_ISteamUserStats_RequestGlobalStats( ISteamUserStats* lpSteamUserStats, int nHistoryDays ) { + return new uint64_t( lpSteamUserStats->RequestGlobalStats( nHistoryDays ) ); +} + +// Gets the lifetime totals for an aggregated stat +DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatL( ISteamUserStats* lpSteamUserStats, const char *pchStatName, int64* pData ) { + return lpSteamUserStats->GetGlobalStat( pchStatName, pData ); +} + +DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatD( ISteamUserStats* lpSteamUserStats, const char *pchStatName, double* pData ) { + return lpSteamUserStats->GetGlobalStat( pchStatName, pData ); +} + +// Gets history for an aggregated stat. pData will be filled with daily values, starting with today. +// So when called, pData[0] will be today, pData[1] will be yesterday, and pData[2] will be two days ago, +// etc. cubData is the size in bytes of the pubData buffer. Returns the number of +// elements actually set. +DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatHistoryL( ISteamUserStats* lpSteamUserStats, const char *pchStatName, int64 *pData, uint32_t cubData ) { + return lpSteamUserStats->GetGlobalStatHistory( pchStatName, pData, cubData ); +} + +DLL(uint32_t) BS_ISteamUserStats_GetGlobalStatHistoryD( ISteamUserStats* lpSteamUserStats, const char *pchStatName, double *pData, uint32_t cubData ) { + return lpSteamUserStats->GetGlobalStatHistory( pchStatName, pData, cubData ); } \ No newline at end of file diff --git a/Wrapper/SteamUtils.cpp b/Wrapper/SteamUtils.cpp index 6211b73..b0a9e8b 100644 --- a/Wrapper/SteamUtils.cpp +++ b/Wrapper/SteamUtils.cpp @@ -1,27 +1,27 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamUtils*) BS_SteamUtils() { - return SteamUtils(); -} - -DLL(ISteamUtils*) BS_SteamGameServerUtils() { - return SteamGameServerUtils(); -} - -#pragma message("SteamUtils is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamUtils*) BS_SteamUtils() { + return SteamUtils(); +} + +DLL(ISteamUtils*) BS_SteamGameServerUtils() { + return SteamGameServerUtils(); +} + +#pragma message("SteamUtils is not ported yet. TODO!") diff --git a/Wrapper/SteamVideo.cpp b/Wrapper/SteamVideo.cpp index 7e4d2bb..c160b19 100644 --- a/Wrapper/SteamVideo.cpp +++ b/Wrapper/SteamVideo.cpp @@ -1,23 +1,23 @@ -// BlitzSteam - Steam wrapper for Blitz -// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "BlitzSteam.h" - -DLL(ISteamVideo*) BS_SteamVideo() { - return SteamVideo(); -} - -#pragma message("SteamVideo is not ported yet. TODO!") +// BlitzSteam - Steam wrapper for Blitz +// Copyright (C) 2015 Xaymar (Michael Fabian Dirks) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "BlitzSteam.h" + +DLL(ISteamVideo*) BS_SteamVideo() { + return SteamVideo(); +} + +#pragma message("SteamVideo is not ported yet. TODO!")