From 0e6f3355430439d6c787b1fd9cfc64c2368a788f Mon Sep 17 00:00:00 2001 From: Nicolai Cornelis Date: Sun, 16 Apr 2023 00:36:58 +0200 Subject: [PATCH] Fixes 64 bit workshop IDs in map selection Bump version --- CHANGELOG.md | 8 ++++++++ scripting/get5/maps.sp | 15 +++++++++++---- scripting/get5/tests.sp | 20 +++++++++++++++++--- scripting/get5/version.sp | 2 +- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09ba9405c..1b2d1b09e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,14 @@ Whenever you update your Get5 plugin, remember to **always** update the `transla Please see the [installation instructions](https://splewis.github.io/get5/latest/installation/#installation) for details. +# 0.14.4 + +#### 2023-04-16 + +Minor bugfix. + +1. Fix invalid parsing of workshop maps with IDs consisting of 64-bit integers. + # 0.14.3 #### 2023-04-10 diff --git a/scripting/get5/maps.sp b/scripting/get5/maps.sp index 9f8037d39..696eeca28 100644 --- a/scripting/get5/maps.sp +++ b/scripting/get5/maps.sp @@ -20,16 +20,23 @@ static Action Timer_DelayedChangeMap(Handle timer, Handle pack) { ResetPack(pack); ReadPackString(pack, map, sizeof(map)); CloseHandle(pack); - if (IsMapWorkshop(map)) { - ServerCommand("host_workshop_map %d", GetMapIdFromString(map)); + char workshopMap[PLATFORM_MAX_PATH]; + if (IsMapWorkshop(map) && GetMapIdFromString(map, workshopMap, sizeof(workshopMap))) { + ServerCommand("host_workshop_map %s", workshopMap); } else { ServerCommand("changelevel %s", map); } return Plugin_Handled; } -int GetMapIdFromString(const char[] map) { +bool GetMapIdFromString(const char[] map, char[] buffer, const int bufferSize) { char buffers[4][PLATFORM_MAX_PATH]; ExplodeString(map, "/", buffers, sizeof(buffers), PLATFORM_MAX_PATH); - return StringToInt(buffers[1]); + int value[2]; + StringToInt64(buffers[1], value); + if (value[0] > 0) { + strcopy(buffer, bufferSize, buffers[1]); + return true; + } + return false; } diff --git a/scripting/get5/tests.sp b/scripting/get5/tests.sp index 312583c6f..6077a5964 100644 --- a/scripting/get5/tests.sp +++ b/scripting/get5/tests.sp @@ -892,17 +892,31 @@ static void Utils_Test() { AssertStrEq("ConvertAuthToSteam64_4_value", output, expected); char mapName[64] = "workshop/3374744/Old Aztec"; + char mapWorkshopId[64]; char formattedMapName[64]; FormatMapName(mapName, formattedMapName, sizeof(formattedMapName)); AssertStrEq("Check workshop map name correctly formatted", "Old Aztec", formattedMapName); - AssertEq("Check workshop map ID extraction", GetMapIdFromString(mapName), 3374744); + AssertTrue("Check workshop map detected", IsMapWorkshop(mapName)); + AssertTrue("Check workshop map ID extraction", GetMapIdFromString(mapName, mapWorkshopId, sizeof(mapWorkshopId))); + AssertStrEq("Check workshop map ID", mapWorkshopId, "3374744"); mapName = "workshop/837575"; // name missing FormatMapName(mapName, formattedMapName, sizeof(formattedMapName)); - AssertStrEq("Check workshop map name incorrectly formatted", "837575", formattedMapName); - AssertEq("Check workshop map ID extraction", GetMapIdFromString(mapName), 837575); + AssertStrEq("Check workshop map name without name", "837575", formattedMapName); + AssertTrue("Check workshop map ID extraction without name", + GetMapIdFromString(mapName, mapWorkshopId, sizeof(mapWorkshopId))); + AssertStrEq("Check workshop map ID without name", mapWorkshopId, "837575"); + + mapName = "workshop/33747383585844/Old Aztec"; + FormatMapName(mapName, formattedMapName, sizeof(formattedMapName)); + AssertStrEq("Check workshop map name correctly formatted 64 bit", "Old Aztec", formattedMapName); + AssertTrue("Check workshop map detected 64 bit", IsMapWorkshop(mapName)); + AssertTrue("Check workshop map ID extraction 64 bit", + GetMapIdFromString(mapName, mapWorkshopId, sizeof(mapWorkshopId))); + AssertStrEq("Check workshop map ID 64 bit", mapWorkshopId, "33747383585844"); mapName = "de_dust2"; + AssertFalse("Check regular map not detected as workshop", IsMapWorkshop(mapName)); FormatMapName(mapName, formattedMapName, sizeof(formattedMapName), true); AssertStrEq("Check regular map name correctly formatted", "Dust II", formattedMapName); FormatMapName(mapName, formattedMapName, sizeof(formattedMapName), true, true); diff --git a/scripting/get5/version.sp b/scripting/get5/version.sp index 1690e02b9..1f92eb0f0 100644 --- a/scripting/get5/version.sp +++ b/scripting/get5/version.sp @@ -1,4 +1,4 @@ -#define PLUGIN_VERSION "0.14.3-dev" +#define PLUGIN_VERSION "0.14.4-dev" // This MUST be the latest version in x.y.z semver format followed by -dev. // If this is not consistently applied, the update-checker might malfunction. // In official releases, the CI flow will remove the -dev suffix when compiling the plugin.