Compare commits

...

10 Commits

Author SHA1 Message Date
MSWS
e0ee4bf325 fix: Don't give glocks by default 2025-11-01 17:21:16 -07:00
MSWS
4a4c7e0782 Reduce cost of body paint 2025-11-01 17:00:41 -07:00
MSWS
d4f67ced0c Reduce cost of compasses 2025-11-01 16:41:12 -07:00
MSWS
33ca0c8385 update: Allow inspect button to be used alongside use 2025-10-31 20:10:46 -07:00
MSWS
ff2e97a3ce update: Don't play hurt sound if Traitor is shifting 2025-10-31 20:06:19 -07:00
MSWS
a56cdc1285 Reformat and Cleanup 2025-10-31 20:01:20 -07:00
MSWS
ceda5cba64 fix: Roles not being assigned on first round of map 2025-10-31 19:59:09 -07:00
MSWS
7c203bcd91 update: Increase prices of stickers and healthshot, impl CS2 healthshot config 2025-10-31 19:53:46 -07:00
MSWS
f91fc54897 update: Increase speedround weight +semver:patch 2025-10-31 18:41:07 -07:00
MSWS
7ca4a6bef4 Update README 2025-10-30 21:46:49 -07:00
12 changed files with 86 additions and 31 deletions

View File

@@ -16,7 +16,9 @@ survive while eliminating the traitors among them.
- [X] Innocents
- [X] Shop
- [X] Karma
- [ ] Statistics
- [X] Statistics
- [X] Map Integrations
- [X] Special Rounds
## Versioning

View File

@@ -1,7 +1,7 @@
namespace SpecialRoundAPI;
public record SpeedRoundConfig : SpecialRoundConfig {
public override float Weight { get; init; } = 0.5f;
public override float Weight { get; init; } = 0.6f;
public TimeSpan InitialSeconds { get; init; } = TimeSpan.FromSeconds(40);
public TimeSpan SecondsPerKill { get; init; } = TimeSpan.FromSeconds(10);

View File

@@ -1,5 +1,5 @@
namespace SpecialRoundAPI;
public record VanillaRoundConfig : SpecialRoundConfig {
public override float Weight { get; init; } = 0.3f;
public override float Weight { get; init; } = 0.2f;
}

View File

@@ -1,5 +1,6 @@
using CounterStrikeSharp.API.Core;
using Microsoft.Extensions.DependencyInjection;
using ShopAPI;
using ShopAPI.Configs;
using ShopAPI.Configs.Detective;
using ShopAPI.Configs.Traitor;
@@ -63,6 +64,8 @@ public static class CS2ServiceCollection {
collection
.AddModBehavior<IStorage<OneHitKnifeConfig>, CS2OneHitKnifeConfig>();
collection.AddModBehavior<IStorage<SilentAWPConfig>, CS2SilentAWPConfig>();
collection
.AddModBehavior<IStorage<HealthshotConfig>, CS2HealthshotConfig>();
// TTT - CS2 Specific optionals
collection.AddScoped<ITextSpawner, TextSpawner>();

View File

@@ -63,21 +63,19 @@ public class CS2GameConfig : IStorage<TTTConfig>, IPluginModule {
public static readonly FakeConVar<string> CV_TRAITOR_WEAPONS = new(
"css_ttt_roleweapons_traitor",
"Weapons available to traitors at start of round",
"weapon_knife,weapon_glock", ConVarFlags.FCVAR_NONE,
new ItemValidator(allowMultiple: true));
"Weapons available to traitors at start of round", "",
ConVarFlags.FCVAR_NONE, new ItemValidator(allowMultiple: true));
public static readonly FakeConVar<string> CV_DETECTIVE_WEAPONS = new(
"css_ttt_roleweapons_detective",
"Weapons available to detectives at start of round",
"weapon_knife,weapon_taser,weapon_m4a1,weapon_revolver",
ConVarFlags.FCVAR_NONE, new ItemValidator(allowMultiple: true));
"weapon_taser,weapon_m4a1_silencer,weapon_revolver", ConVarFlags.FCVAR_NONE,
new ItemValidator(allowMultiple: true));
public static readonly FakeConVar<string> CV_INNOCENT_WEAPONS = new(
"css_ttt_roleweapons_innocent",
"Weapons available to innocents at start of round",
"weapon_knife,weapon_glock", ConVarFlags.FCVAR_NONE,
new ItemValidator(allowMultiple: true));
"Weapons available to innocents at start of round", "",
ConVarFlags.FCVAR_NONE, new ItemValidator(allowMultiple: true));
public static readonly FakeConVar<int> CV_TIME_BETWEEN_ROUNDS = new(
"css_ttt_time_between_rounds", "Time to wait between rounds in seconds", 1,

View File

@@ -0,0 +1,43 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Cvars.Validators;
using ShopAPI;
using TTT.API;
using TTT.API.Storage;
namespace TTT.CS2.Configs.ShopItems;
public class CS2HealthshotConfig : IStorage<HealthshotConfig>, IPluginModule {
public static readonly FakeConVar<int> CV_PRICE = new(
"css_ttt_shop_healthshot_price", "Price of the Healthshot item", 40,
ConVarFlags.FCVAR_NONE, new RangeValidator<int>(0, 10000));
public static readonly FakeConVar<int> CV_MAX_PURCHASES = new(
"css_ttt_shop_healthshot_max_purchases",
"Maximum number of times a player can purchase the Healthshot per round", 2,
ConVarFlags.FCVAR_NONE, new RangeValidator<int>(1, 100));
public static readonly FakeConVar<string> CV_WEAPON = new(
"css_ttt_shop_healthshot_weapon", "Weapon entity name for the Healthshot",
"weapon_healthshot");
public void Dispose() { }
public void Start() { }
public void Start(BasePlugin? plugin) {
ArgumentNullException.ThrowIfNull(plugin, nameof(plugin));
plugin.RegisterFakeConVars(this);
}
public Task<HealthshotConfig?> Load() {
var cfg = new HealthshotConfig {
Price = CV_PRICE.Value,
MaxPurchases = CV_MAX_PURCHASES.Value,
Weapon = CV_WEAPON.Value
};
return Task.FromResult<HealthshotConfig?>(cfg);
}
}

View File

@@ -10,7 +10,7 @@ namespace TTT.CS2.Configs.ShopItems;
public class CS2StickersConfig : IStorage<StickersConfig>, IPluginModule {
public static readonly FakeConVar<int> CV_PRICE = new(
"css_ttt_shop_stickers_price", "Price of the Stickers item (Detective)", 35,
"css_ttt_shop_stickers_price", "Price of the Stickers item (Detective)", 45,
ConVarFlags.FCVAR_NONE, new RangeValidator<int>(0, 10000));
public void Dispose() { }

View File

@@ -51,7 +51,9 @@ public class PropMover(IServiceProvider provider) : IPluginModule {
return;
}
if (!pressed.HasFlag(PlayerButtons.Use)) return;
if (!pressed.HasFlag(PlayerButtons.Use)
&& !pressed.HasFlag(PlayerButtons.Inspect))
return;
onStartUse(player);
}

View File

@@ -1,4 +1,5 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using ShopAPI.Configs.Traitor;
@@ -73,8 +74,10 @@ public class DamageStation(IServiceProvider provider)
.ToList();
foreach (var (player, dist, gamePlayer) in playerDists) {
gamePlayer.EmitSound("Player.DamageFall", null, 0.2f);
if (Roles.GetRoles(player).Any(r => r is TraitorRole)) continue;
if ((gamePlayer.Buttons & PlayerButtons.Walk) != PlayerButtons.Walk) {
gamePlayer.EmitSound("Player.DamageFall", null, 0.2f);
if (Roles.GetRoles(player).Any(r => r is TraitorRole)) continue;
}
var healthScale = 1.0 - dist / _Config.MaxRange;
var damageAmount =

View File

@@ -19,20 +19,24 @@ public class MapHookListener(IServiceProvider provider)
[UsedImplicitly]
[EventHandler(Priority = Priority.MONITOR, IgnoreCanceled = true)]
public void OnRoleAssign(PlayerRoleAssignEvent ev) {
var player = converter.GetPlayer(ev.Player);
if (player == null) return;
Server.NextWorldUpdate(() => {
var player = converter.GetPlayer(ev.Player);
if (player == null) return;
switch (ev.Role) {
case TraitorRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null, "TRAITOR:1");
break;
case DetectiveRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null, "DETECTIVE:1");
break;
case InnocentRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null, "INNOCENT:1");
break;
}
switch (ev.Role) {
case TraitorRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null, "TRAITOR:1");
break;
case DetectiveRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null,
"DETECTIVE:1");
break;
case InnocentRole:
player.Pawn.Value?.AcceptInput("AddContext", null, null,
"INNOCENT:1");
break;
}
});
}
[UsedImplicitly]

View File

@@ -3,7 +3,7 @@ using System.Drawing;
namespace ShopAPI.Configs;
public record BodyPaintConfig : ShopItemConfig {
public override int Price { get; init; } = 40;
public override int Price { get; init; } = 30;
public int MaxUses { get; init; } = 4;
public Color ColorToApply { get; init; } = Color.GreenYellow;
}

View File

@@ -1,7 +1,7 @@
namespace ShopAPI.Configs.Traitor;
public record CompassConfig : ShopItemConfig {
public override int Price { get; init; } = 70;
public override int Price { get; init; } = 60;
public float MaxRange { get; init; } = 10000;
public float CompassFOV { get; init; } = 120;
public int CompassLength { get; init; } = 64;