Compare commits

..

8 Commits

Author SHA1 Message Date
MSWS
8aa508bf6d feat: Add victim message to 1-hit weapon 2025-11-02 20:45:23 -08:00
MSWS
642155b1bc Revert "fix: Add check after roles assigned"
This reverts commit bacd288fe7.
2025-11-02 20:41:01 -08:00
MSWS
bacd288fe7 fix: Add check after roles assigned 2025-11-02 20:40:05 -08:00
MSWS
29e28038b8 update: Play poison sound only to player 2025-11-02 19:47:22 -08:00
MSWS
b253d8ee12 fix: InvalidateOrder not purging lastUpdate map 2025-11-02 01:23:31 -08:00
MSWS
02575b51e2 Make all rounds give 1 karma 2025-11-02 01:19:24 -08:00
MSWS
d8d365b497 update: Body paint price to match (30) 2025-11-02 01:17:27 -08:00
MSWS
1ac38dc0ad update: Reduce min requirement for special round 8 -> 5 2025-11-02 01:28:16 -07:00
8 changed files with 22 additions and 12 deletions

View File

@@ -80,7 +80,7 @@ public class CS2KarmaConfig : IStorage<KarmaConfig>, IPluginModule {
public static readonly FakeConVar<int> CV_KARMA_PER_ROUND_WIN = new(
"css_ttt_karma_per_round_win",
"Amount of karma a player will gain at the end of each round if their team won",
2, ConVarFlags.FCVAR_NONE, new RangeValidator<int>(0, 50));
1, ConVarFlags.FCVAR_NONE, new RangeValidator<int>(0, 50));
public void Dispose() { }

View File

@@ -11,7 +11,7 @@ namespace TTT.CS2.Configs.ShopItems;
public class CS2BodyPaintConfig : IStorage<BodyPaintConfig>, IPluginModule {
public static readonly FakeConVar<int> CV_PRICE = new(
"css_ttt_shop_bodypaint_price", "Price of the Body Paint item", 40,
"css_ttt_shop_bodypaint_price", "Price of the Body Paint item", 30,
ConVarFlags.FCVAR_NONE, new RangeValidator<int>(0, 10000));
public static readonly FakeConVar<int> CV_MAX_USES = new(

View File

@@ -1,5 +1,6 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using ShopAPI.Configs.Traitor;
@@ -46,6 +47,13 @@ public class DamageStation(IServiceProvider provider)
override protected void onInterval() {
var players = finder.GetOnline();
var toRemove = new List<CPhysicsPropMultiplayer>();
var playerMapping = players
.Select(p => (ApiPlayer: p, GamePlayer: converter.GetPlayer(p)))
.Where(m
=> m.GamePlayer != null
&& !Roles.GetRoles(m.ApiPlayer).Any(r => r is TraitorRole))
.ToList();
foreach (var (prop, info) in props) {
if (_Config.TotalHealthGiven != 0 && Math.Abs(info.HealthGiven)
> Math.Abs(_Config.TotalHealthGiven)) {
@@ -60,10 +68,6 @@ public class DamageStation(IServiceProvider provider)
var propPos = prop.AbsOrigin;
var playerMapping = players.Select(p
=> (ApiPlayer: p, GamePlayer: converter.GetPlayer(p)))
.Where(m => m.GamePlayer != null);
var playerDists = playerMapping
.Select(t => (t.ApiPlayer, Origin: t.GamePlayer!.Pawn.Value?.AbsOrigin,
t.GamePlayer))
@@ -74,11 +78,6 @@ public class DamageStation(IServiceProvider provider)
.ToList();
foreach (var (player, dist, gamePlayer) in playerDists) {
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 =
(int)Math.Floor(_Config.HealthIncrements * healthScale);
@@ -98,6 +97,7 @@ public class DamageStation(IServiceProvider provider)
bus.Dispatch(playerDeath);
}
gamePlayer.EmitSound("Player.DamageFall", SELF(gamePlayer.Slot), 0.2f);
player.Health += damageAmount;
info.HealthGiven += damageAmount;
}
@@ -106,6 +106,10 @@ public class DamageStation(IServiceProvider provider)
foreach (var prop in toRemove) props.Remove(prop);
}
private static RecipientFilter SELF(int slot) {
return new RecipientFilter(slot);
}
[UsedImplicitly]
[EventHandler]
public void OnGameEnd(GameStateUpdateEvent ev) {

View File

@@ -77,6 +77,7 @@ public class ListCommand(IServiceProvider provider) : ICommand, IItemSorter {
public void InvalidateOrder(IOnlinePlayer? player) {
if (player == null) return;
cache.Remove(player.Id);
lastUpdate.Remove(player.Id);
}
private List<IShopItem> calculateSortedItems(IOnlinePlayer? player) {

View File

@@ -54,5 +54,6 @@ public class DeagleDamageListener(IServiceProvider provider)
}
ev.HpLeft = -100;
Messenger.Message(victim, Locale[DeagleMsgs.SHOP_ITEM_DEAGLE_VICTIM]);
}
}

View File

@@ -11,4 +11,7 @@ public class DeagleMsgs {
public static IMsg SHOP_ITEM_DEAGLE_HIT_FF
=> MsgFactory.Create(nameof(SHOP_ITEM_DEAGLE_HIT_FF));
public static IMsg SHOP_ITEM_DEAGLE_VICTIM
=> MsgFactory.Create(nameof(SHOP_ITEM_DEAGLE_VICTIM));
}

View File

@@ -5,6 +5,7 @@ SHOP_ITEM_NOT_FOUND: "%SHOP_PREFIX%Could not find an item named \"{default}{0}{g
SHOP_ITEM_DEAGLE: "One-Hit Revolver"
SHOP_ITEM_DEAGLE_DESC: "A one-hit kill revolver with a single bullet. Aim carefully!"
SHOP_ITEM_DEAGLE_HIT_FF: "%PREFIX%You hit a teammate!"
SHOP_ITEM_DEAGLE_VICTIM: "%PREFIX%You were hit by a {yellow}One-Hit Revolver{grey}."
SHOP_ITEM_STICKERS: "Stickers"
SHOP_ITEM_STICKERS_DESC: "Reveal the roles of all players you taser to others."

View File

@@ -2,7 +2,7 @@
public record SpecialRoundsConfig {
public int MinRoundsBetweenSpecial { get; init; } = 3;
public int MinPlayersForSpecial { get; init; } = 8;
public int MinPlayersForSpecial { get; init; } = 5;
public int MinRoundsAfterMapChange { get; init; } = 2;
public float SpecialRoundChance { get; init; } = 0.2f;
}