Skip to content
Merged
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
16 changes: 8 additions & 8 deletions src/ST-API/JsonConverters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ public static Dictionary<string, string> ConstructJsonDictFromString(string str)
}
}

internal class VectorConverter : JsonConverter<Vector>
internal class Vector_tConverter : JsonConverter<Vector_t>
{
public override Vector Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
public override Vector_t Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// Ensure that the reader is positioned at the start of an object
if (reader.TokenType != JsonTokenType.StartObject)
Expand Down Expand Up @@ -63,10 +63,10 @@ public override Vector Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
}
}

return new Vector { X = x, Y = y, Z = z };
return new Vector_t { X = x, Y = y, Z = z };
}

public override void Write(Utf8JsonWriter writer, Vector value, JsonSerializerOptions options)
public override void Write(Utf8JsonWriter writer, Vector_t value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteNumber("X", value.X);
Expand All @@ -76,9 +76,9 @@ public override void Write(Utf8JsonWriter writer, Vector value, JsonSerializerOp
}
}

internal class QAngleConverter : JsonConverter<QAngle>
internal class QAngle_tConverter : JsonConverter<QAngle_t>
{
public override QAngle Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
public override QAngle_t Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// Ensure that the reader is positioned at the start of an object
if (reader.TokenType != JsonTokenType.StartObject)
Expand Down Expand Up @@ -111,10 +111,10 @@ public override QAngle Read(ref Utf8JsonReader reader, Type typeToConvert, JsonS
}
}

return new QAngle { X = X, Y = Y, Z = Z };
return new QAngle_t { X = X, Y = Y, Z = Z };
}

public override void Write(Utf8JsonWriter writer, QAngle value, JsonSerializerOptions options)
public override void Write(Utf8JsonWriter writer, QAngle_t value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteNumber("X", value.X);
Expand Down
4 changes: 2 additions & 2 deletions src/ST-Commands/MapCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void Triggers(CCSPlayerController? player, CommandInfo command)
player.PrintToChat($"Hooked Trigger -> Start -> {CurrentMap.StartZone} -> Angles {CurrentMap.StartZoneAngles}");
player.PrintToChat($"Hooked Trigger -> End -> {CurrentMap.EndZone}");
int i = 1;
foreach (Vector stage in CurrentMap.StageStartZone)
foreach (Vector_t stage in CurrentMap.StageStartZone)
{
if (stage.X == 0 && stage.Y == 0 && stage.Z == 0)
continue;
Expand All @@ -71,7 +71,7 @@ public void Triggers(CCSPlayerController? player, CommandInfo command)
}

i = 1;
foreach (Vector bonus in CurrentMap.BonusStartZone)
foreach (Vector_t bonus in CurrentMap.BonusStartZone)
{
if (bonus.X == 0 && bonus.Y == 0 && bonus.Z == 0)
continue;
Expand Down
90 changes: 65 additions & 25 deletions src/ST-Commands/PlayerCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@ public partial class SurfTimer
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void PlayerReset(CCSPlayerController? player, CommandInfo command)
{
if (player == null || player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player oPlayer = playerList[player.UserId ?? 0];
if (oPlayer.ReplayRecorder.IsSaving)
Expand All @@ -25,16 +30,21 @@ public void PlayerReset(CCSPlayerController? player, CommandInfo command)
// oPlayer.ReplayRecorder.Reset();
// To-do: players[userid].Timer.Reset() -> teleport player
playerList[player.UserId ?? 0].Timer.Reset();
if (CurrentMap.StartZone != new Vector(0, 0, 0))
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StartZone, new QAngle(0, 0, 0), new Vector(0, 0, 0)));
if (!CurrentMap.StartZone.IsZero())
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!,CurrentMap.StartZone));
}

[ConsoleCommand("css_rs", "Reset back to the start of the stage or bonus you're in.")]
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void PlayerResetStage(CCSPlayerController? player, CommandInfo command)
{
if (player == null || player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player oPlayer = playerList[player.UserId ?? 0];
if (oPlayer.ReplayRecorder.IsSaving)
Expand All @@ -46,18 +56,18 @@ public void PlayerResetStage(CCSPlayerController? player, CommandInfo command)

if (oPlayer.Timer.IsBonusMode)
{
if (oPlayer.Timer.Bonus != 0 && CurrentMap.BonusStartZone[oPlayer.Timer.Bonus] != new Vector(0, 0, 0))
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.BonusStartZone[oPlayer.Timer.Bonus], CurrentMap.BonusStartZoneAngles[oPlayer.Timer.Bonus], new Vector(0, 0, 0)));
if (oPlayer.Timer.Bonus != 0 && !CurrentMap.BonusStartZone[oPlayer.Timer.Bonus].IsZero())
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value! , CurrentMap.BonusStartZone[oPlayer.Timer.Bonus]));
else // Reset back to map start
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StartZone, new QAngle(0, 0, 0), new Vector(0, 0, 0)));
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!,CurrentMap.StartZone));
}

else
{
if (oPlayer.Timer.Stage != 0 && CurrentMap.StageStartZone[oPlayer.Timer.Stage] != new Vector(0, 0, 0))
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StageStartZone[oPlayer.Timer.Stage], CurrentMap.StageStartZoneAngles[oPlayer.Timer.Stage], new Vector(0, 0, 0)));
if (oPlayer.Timer.Stage != 0 && !CurrentMap.StageStartZone[oPlayer.Timer.Stage].IsZero())
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!, CurrentMap.StageStartZone[oPlayer.Timer.Stage]));
else // Reset back to map start
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StartZone, new QAngle(0, 0, 0), new Vector(0, 0, 0)));
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!,CurrentMap.StartZone));
}
}

Expand All @@ -66,8 +76,13 @@ public void PlayerResetStage(CCSPlayerController? player, CommandInfo command)
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void PlayerGoToStage(CCSPlayerController? player, CommandInfo command)
{
if (player == null || player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

int stage;
try
Expand Down Expand Up @@ -109,18 +124,18 @@ public void PlayerGoToStage(CCSPlayerController? player, CommandInfo command)
return;
}

if (CurrentMap.StageStartZone[stage] != new Vector(0, 0, 0))
if (!CurrentMap.StageStartZone[stage].IsZero())
{
playerList[player.UserId ?? 0].Timer.Reset();

if (stage == 1)
{
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StartZone, CurrentMap.StartZoneAngles, new Vector(0, 0, 0)));
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!, CurrentMap.StartZone));
}
else
{
playerList[player.UserId ?? 0].Timer.Stage = stage;
Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.StageStartZone[stage], CurrentMap.StageStartZoneAngles[stage], new Vector(0, 0, 0)));
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!, CurrentMap.StageStartZone[stage]));
playerList[player.UserId ?? 0].Timer.IsStageMode = true;
}

Expand All @@ -139,8 +154,13 @@ public void PlayerGoToStage(CCSPlayerController? player, CommandInfo command)
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void PlayerGoToBonus(CCSPlayerController? player, CommandInfo command)
{
if (player == null || player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

int bonus;

Expand Down Expand Up @@ -175,12 +195,12 @@ public void PlayerGoToBonus(CCSPlayerController? player, CommandInfo command)
return;
}

if (CurrentMap.BonusStartZone[bonus] != new Vector(0, 0, 0))
if (!CurrentMap.BonusStartZone[bonus].IsZero())
{
playerList[player.UserId ?? 0].Timer.Reset();
playerList[player.UserId ?? 0].Timer.IsBonusMode = true;

Server.NextFrame(() => player.PlayerPawn.Value!.Teleport(CurrentMap.BonusStartZone[bonus], CurrentMap.BonusStartZoneAngles[bonus], new Vector(0, 0, 0)));
Server.NextFrame(() => Extensions.Teleport(player.PlayerPawn.Value!, CurrentMap.BonusStartZone[bonus]));
}

else
Expand Down Expand Up @@ -321,8 +341,13 @@ Saveloc Commands
[ConsoleCommand("css_saveloc", "Save current player location to be practiced")]
public void SavePlayerLocation(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.PawnIsAlive || !playerList.ContainsKey(player.UserId ?? 0))
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player p = playerList[player.UserId ?? 0];
if (!p.Timer.IsRunning)
Expand All @@ -337,9 +362,9 @@ public void SavePlayerLocation(CCSPlayerController? player, CommandInfo command)

p.SavedLocations.Add(new SavelocFrame
{
Pos = new Vector(player_pos.X, player_pos.Y, player_pos.Z),
Ang = new QAngle(player_angle.X, player_angle.Y, player_angle.Z),
Vel = new Vector(player_velocity.X, player_velocity.Y, player_velocity.Z),
Pos = new Vector_t(player_pos.X, player_pos.Y, player_pos.Z),
Ang = new QAngle_t(player_angle.X, player_angle.Y, player_angle.Z),
Vel = new Vector_t(player_velocity.X, player_velocity.Y, player_velocity.Z),
Tick = p.Timer.Ticks
});
p.CurrentSavedLocation = p.SavedLocations.Count - 1;
Expand All @@ -352,8 +377,13 @@ public void SavePlayerLocation(CCSPlayerController? player, CommandInfo command)
[ConsoleCommand("css_tele", "Teleport player to current saved location")]
public void TeleportPlayerLocation(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.PawnIsAlive || !playerList.ContainsKey(player.UserId ?? 0))
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player p = playerList[player.UserId ?? 0];

Expand Down Expand Up @@ -387,7 +417,7 @@ public void TeleportPlayerLocation(CCSPlayerController? player, CommandInfo comm
SavelocFrame location = p.SavedLocations[p.CurrentSavedLocation];
Server.NextFrame(() =>
{
p.Controller.PlayerPawn.Value!.Teleport(location.Pos, location.Ang, location.Vel);
Extensions.Teleport(p.Controller.PlayerPawn.Value!, location.Pos, location.Ang, location.Vel);
p.Timer.Ticks = location.Tick;
});

Expand All @@ -399,8 +429,13 @@ public void TeleportPlayerLocation(CCSPlayerController? player, CommandInfo comm
[ConsoleCommand("css_teleprev", "Teleport player to previous saved location")]
public void TeleportPlayerLocationPrev(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.PawnIsAlive || !playerList.ContainsKey(player.UserId ?? 0))
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player p = playerList[player.UserId ?? 0];

Expand Down Expand Up @@ -429,8 +464,13 @@ public void TeleportPlayerLocationPrev(CCSPlayerController? player, CommandInfo
[ConsoleCommand("css_telenext", "Teleport player to next saved location")]
public void TeleportPlayerLocationNext(CCSPlayerController? player, CommandInfo command)
{
if (player == null || !player.PawnIsAlive || !playerList.ContainsKey(player.UserId ?? 0))
if (player == null)
return;
if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None)
{
player.ChangeTeam(CsTeam.CounterTerrorist);
player.Respawn();
}

Player p = playerList[player.UserId ?? 0];

Expand Down
1 change: 0 additions & 1 deletion src/ST-Events/Players.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Utils;
using MaxMind.GeoIP2;
using Microsoft.Extensions.Logging;

Expand Down
4 changes: 4 additions & 0 deletions src/ST-Events/Tick.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities.Constants;

namespace SurfTimer;

Expand All @@ -11,6 +12,9 @@ public void OnTick()
player.Timer.Tick();
player.ReplayRecorder.Tick(player);
player.HUD.Display();
if (player.Controller.Collision == null) continue;
if ((CollisionGroup)player.Controller.Collision.CollisionGroup == CollisionGroup.COLLISION_GROUP_DEBRIS) continue;
player.Controller.SetCollisionGroup(CollisionGroup.COLLISION_GROUP_DEBRIS);
}

if (CurrentMap == null)
Expand Down
Loading