Skip to content

Commit 7ff351c

Browse files
committed
Updated CsServer.cs to handle workshop map IDs passed in via a new user config file, "workshop_maps.json"
1 parent 0c75109 commit 7ff351c

1 file changed

Lines changed: 54 additions & 4 deletions

File tree

PugSharp/CsServer.cs

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,25 @@
99
using PugSharp.Models;
1010
using PugSharp.Server.Contract;
1111

12+
using System.IO;
13+
using System.Text.Json;
14+
1215
namespace PugSharp;
1316

1417
public class CsServer : ICsServer
1518
{
1619
private readonly ILogger<CsServer> _Logger;
1720
private readonly ICssDispatcher _Dispatcher;
1821

22+
private Dictionary<string, string>? _workshopMapLookup;
23+
private readonly string _workshopMapConfigPath;
24+
1925
public CsServer(ILogger<CsServer> logger, ICssDispatcher dispatcher)
2026
{
2127
_Logger = logger;
2228
_Dispatcher = dispatcher;
29+
30+
_workshopMapConfigPath = Path.Combine(GameDirectory, "csgo", "PugSharp", "Config", "workshop_maps.json");
2331
}
2432

2533
public string GameDirectory => CounterStrikeSharp.API.Server.GameDirectory;
@@ -210,14 +218,56 @@ public void SwitchMap(string selectedMap)
210218
{
211219
_Dispatcher.NextWorldUpdate(() =>
212220
{
213-
if (!IsMapValid(selectedMap))
221+
if (string.IsNullOrWhiteSpace(selectedMap))
214222
{
215-
_Logger.LogInformation("The selected map is not valid: \"{SelectedMap}\"!", selectedMap);
223+
_Logger.LogInformation("The selected map is null or empty!");
216224
return;
217225
}
218226

219-
_Logger.LogInformation("Switch map to: \"{SelectedMap}\"!", selectedMap);
220-
ExecuteCommand($"changelevel {selectedMap}");
227+
// Lazy-load the workshop map config if not already loaded
228+
if (_workshopMapLookup == null)
229+
{
230+
try
231+
{
232+
if (File.Exists(_workshopMapConfigPath))
233+
{
234+
string json = File.ReadAllText(_workshopMapConfigPath);
235+
_workshopMapLookup = JsonSerializer.Deserialize<Dictionary<string, string>>(json);
236+
_Logger.LogInformation("Loaded workshop map config from {Path}", _workshopMapConfigPath);
237+
}
238+
else
239+
{
240+
_Logger.LogWarning("Workshop map config not found at {Path}. Workshop maps will not be available.", _workshopMapConfigPath);
241+
_workshopMapLookup = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
242+
}
243+
}
244+
catch (Exception ex)
245+
{
246+
_Logger.LogError(ex, "Failed to load workshop map config from {Path}", _workshopMapConfigPath);
247+
_workshopMapLookup = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
248+
}
249+
}
250+
251+
string command;
252+
253+
if (_workshopMapLookup != null && _workshopMapLookup.TryGetValue(selectedMap, out var workshopId))
254+
{
255+
_Logger.LogInformation("Translating map \"{SelectedMap}\" to Workshop ID: {WorkshopId}", selectedMap, workshopId);
256+
command = $"host_workshop_map {workshopId}";
257+
}
258+
else
259+
{
260+
if (!IsMapValid(selectedMap))
261+
{
262+
_Logger.LogInformation("The selected map is not valid: \"{SelectedMap}\"!", selectedMap);
263+
return;
264+
}
265+
266+
_Logger.LogInformation("Switching to standard map: \"{SelectedMap}\"", selectedMap);
267+
command = $"changelevel {selectedMap}";
268+
}
269+
270+
ExecuteCommand(command);
221271
});
222272
}
223273

0 commit comments

Comments
 (0)