Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ src/src.generated.sln
src/Folder.DotSettings.user
.env
release
5stack-server-mod.generated.sln
5stack-server-mod.generated.sln
.claude
22 changes: 22 additions & 0 deletions opencode.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"llama.cpp": {
"npm": "@ai-sdk/openai-compatible",
"name": "llama-server (local)",
"options": {
"baseURL": "http://qumulex.llama/v1"
},
"models": {
"unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF": {
"name": "unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF",
"modalities": { "input": ["image", "text"], "output": ["text"] },
"limit": {
"context": 64000,
"output": 65536
}
}
}
}
}
}
40 changes: 40 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/CommandService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public class CommandService : ICommandService
{
public void SendCommands(string[] commands)
{
foreach (var command in commands)
{
Server.ExecuteCommand(command);
}
}

public void PrintToChat(CCSPlayerController player, string message)
{
player.PrintToChat(message);
}

public void PrintToChatAll(string message)
{
Server.PrintToChatAll(message);
}

public void PrintToConsole(string message)
{
Server.PrintToConsole(message);
}

public void PrintToCenter(CCSPlayerController player, string message)
{
player.PrintToCenter(message);
}

public void SendCommand(string command)
{
Server.ExecuteCommand(command);
}
}
}
30 changes: 30 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/ConVarService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public class ConVarService : IConVarService
{
public void SetConVar(CCSPlayerController player, string convarName, string value)
{
if (player == null) return;
player.ExecuteClientCommand($"setconvar {convarName} {value}");
}

public string GetConVar(CCSPlayerController player, string convarName)
{
if (player == null) return "";
return player.GetConVar(convarName);
}

public void SetGlobalConVar(string convarName, string value)
{
Server.ExecuteCommand($"sv_cheats 1; {convarName} {value}; sv_cheats 0");
}

public string GetGlobalConVar(string convarName)
{
return Server.GetConVar(convarName);
}
}
}
25 changes: 25 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/GameStateService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;

namespace FiveStack.CounterStrikeSharp.Services
{
public class GameStateService : IGameStateService
{
public CCSGameRules? Rules()
{
return Utilities.FindAllEntitiesByDesignerName<CCSGameRulesProxy>("cs_gamerules")
.FirstOrDefault()?.GameRules;
}

public List<CCSPlayerController> Players()
{
return Utilities.GetPlayers();
}

public IEnumerable<CCSTeam> Teams()
{
return Utilities.GetTeams();
}
}
}
12 changes: 12 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/ICommandService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace FiveStack.CounterStrikeSharp.Services
{
public interface ICommandService
{
void SendCommands(string[] commands);
void PrintToChat(CCSPlayerController player, string message);
void PrintToChatAll(string message);
void PrintToConsole(string message);
void PrintToCenter(CCSPlayerController player, string message);
void SendCommand(string command);
}
}
12 changes: 12 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/IConVarService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface IConVarService
{
void SetConVar(CCSPlayerController player, string convarName, string value);
string GetConVar(CCSPlayerController player, string convarName);
void SetGlobalConVar(string convarName, string value);
string GetGlobalConVar(string convarName);
}
}
12 changes: 12 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/IGameStateService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface IGameStateService
{
CCSGameRules? Rules();
List<CCSPlayerController> Players();
IEnumerable<CCSTeam> Teams();
}
}
19 changes: 19 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/IMatchUtilityService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using FiveStack.Entities;
using FiveStack.Enums;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface IMatchUtilityService
{
CCSGameRules? Rules();
List<CCSPlayerController> Players();
IEnumerable<CCSTeam> Teams();
string GetSafeMatchPrefix(MatchData matchData);
MatchMember? GetMemberFromLineup(MatchData matchData, string steamId, string playerName);
Guid? GetPlayerLineup(MatchData matchData, CCSPlayerController player);
string? GetPlayerLineupTag(MatchData matchData, CCSPlayerController player);
eMapStatus MapStatusStringToEnum(string state);
}
}
11 changes: 11 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/INetworkServerService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface INetworkServerService
{
void SendToAll(string message);
void SendToPlayer(CCSPlayerController player, string message);
void ExecuteCommand(string command);
}
}
18 changes: 18 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/IPlayerService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface IPlayerService
{
void ChangeTeam(CCSPlayerController player, CsTeam team);
void Respawn(CCSPlayerController player);
void Disconnect(CCSPlayerController player, NetworkDisconnectionReason reason);
void SetPlayerName(CCSPlayerController player, string name);
void SetClanTag(CCSPlayerController player, string? tag);
void MutePlayer(CCSPlayerController player);
void UnmutePlayer(CCSPlayerController player);
bool IsCaptain(CCSPlayerController player, CsTeam team);
bool IsBot(CCSPlayerController player);
bool IsValid(CCSPlayerController player);
}
}
12 changes: 12 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/ITimerService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public interface ITimerService
{
void CreateTimer(float time, Action callback, TimerFlags flags = TimerFlags.NONE);
void CreateTimer(float time, Action<CCSPlayerController> callback, TimerFlags flags = TimerFlags.NONE);
void CreateTimer(float time, Action<CCSPlayerController, string[]> callback, TimerFlags flags = TimerFlags.NONE);
void CreateTimer(float time, Action<CCSPlayerController, string> callback, TimerFlags flags = TimerFlags.NONE);
}
}
57 changes: 57 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/MatchUtilityService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using FiveStack.Entities;
using FiveStack.Enums;

namespace FiveStack.CounterStrikeSharp.Services
{
public class MatchUtilityService : IMatchUtilityService
{
public CCSGameRules? Rules()
{
return Utilities.FindAllEntitiesByDesignerName<CCSGameRulesProxy>("cs_gamerules")
.FirstOrDefault()?.GameRules;
}

public List<CCSPlayerController> Players()
{
return Utilities.GetPlayers();
}

public IEnumerable<CCSTeam> Teams()
{
return Utilities.GetTeams();
}

public string GetSafeMatchPrefix(MatchData matchData)
{
// Implementation would be specific to the match data structure
return "MATCH";
}

public MatchMember? GetMemberFromLineup(MatchData matchData, string steamId, string playerName)
{
// Implementation would depend on match data structure
return null;
}

public Guid? GetPlayerLineup(MatchData matchData, CCSPlayerController player)
{
// Implementation would depend on match data structure
return null;
}

public string? GetPlayerLineupTag(MatchData matchData, CCSPlayerController player)
{
// Implementation would depend on match data structure
return null;
}

public eMapStatus MapStatusStringToEnum(string state)
{
// Implementation would convert string to enum value
return eMapStatus.Unknown;
}
}
}
23 changes: 23 additions & 0 deletions src/FiveStack.CounterStrikeSharp.Services/NetworkServices.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;

namespace FiveStack.CounterStrikeSharp.Services
{
public class NetworkServices : INetworkServerService
{
public void SendToAll(string message)
{
Server.PrintToChatAll(message);
}

public void SendToPlayer(CCSPlayerController player, string message)
{
player.PrintToChat(message);
}

public void ExecuteCommand(string command)
{
Server.ExecuteCommand(command);
}
}
}
Loading