Add ThirdEye door toggle and decoy ring config

This commit is contained in:
Juzlus 2026-08-10 04:18:16 +02:00
parent 38a7cb8c5c
commit 5c65f4ac71
8 changed files with 47 additions and 4 deletions

View file

@ -10,6 +10,8 @@ using RayTraceAPI;
using src.player.skills; using src.player.skills;
using src.utils; using src.utils;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.ComponentModel.Design;
using System.Security.Principal;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using static CounterStrikeSharp.API.Core.Listeners; using static CounterStrikeSharp.API.Core.Listeners;
using static src.jRandomSkills; using static src.jRandomSkills;
@ -738,7 +740,15 @@ namespace src.player
if (entity == null || !entity.IsValid) return; if (entity == null || !entity.IsValid) return;
string designer = entity.DesignerName; string designer = entity.DesignerName;
if (designer.Contains("door") || designer.Contains("button") || designer.Contains("weapon") || designer.Contains("blocker")) return;
if (designer.Contains("door"))
{
if (playerInfo.Skill == Skills.ThirdEye && !ThirdEye.IsOrginalCamera(player))
SkillUtils.ToogleDoor(entity, pawn);
return;
}
if (designer.Contains("button") || designer.Contains("weapon") || designer.Contains("blocker")) return;
} }
} }

View file

@ -1,9 +1,10 @@
using CounterStrikeSharp.API; using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Utils; using CounterStrikeSharp.API.Modules.Utils;
using System.Drawing;
using System.Collections.Concurrent;
using src.utils; using src.utils;
using System.Collections.Concurrent;
using System.Drawing;
namespace src.player.skills namespace src.player.skills
{ {
@ -44,6 +45,19 @@ namespace src.player.skills
cameras.TryRemove(player.Index, out _); cameras.TryRemove(player.Index, out _);
} }
public static bool IsOrginalCamera(CCSPlayerController player)
{
if (player == null || !player.IsValid) return true;
var pawn = player.PlayerPawn?.Value;
if (pawn == null || !pawn.IsValid) return true;
if (cameras.TryGetValue(player.Index, out var cameraInfo) && cameraInfo.Item1 != 0)
return pawn?.CameraServices?.ViewEntity.Raw == cameraInfo.Item1;
return true;
}
public static void OnTick() public static void OnTick()
{ {
foreach (var player in PlayerManager.GetTickPlayers()) foreach (var player in PlayerManager.GetTickPlayers())

View file

@ -107,6 +107,7 @@ namespace src.utils
public string DisableHUDOnDeathPermission { get; set; } public string DisableHUDOnDeathPermission { get; set; }
public bool DisableSkillsOnRoundEnd { get; set; } public bool DisableSkillsOnRoundEnd { get; set; }
public int? CurseSkillPerPlayer { get; set; } public int? CurseSkillPerPlayer { get; set; }
public bool ShowDecoyRing { get; set; }
public WeaponPools Weapons { get; set; } public WeaponPools Weapons { get; set; }
public LanguageSystem LanguageSystem { get; set; } public LanguageSystem LanguageSystem { get; set; }
public HtmlHudCustomisation HtmlHudCustomisation { get; set; } public HtmlHudCustomisation HtmlHudCustomisation { get; set; }
@ -139,6 +140,7 @@ namespace src.utils
DisableHUDOnDeathPermission = "@jRandomSkills/death"; DisableHUDOnDeathPermission = "@jRandomSkills/death";
DisableSkillsOnRoundEnd = false; DisableSkillsOnRoundEnd = false;
CurseSkillPerPlayer = null; CurseSkillPerPlayer = null;
ShowDecoyRing = true;
Weapons = new WeaponPools Weapons = new WeaponPools
{ {

View file

@ -38,7 +38,7 @@ namespace src.utils
public static void Show(Skills skill, uint id, Vector center, float radius) public static void Show(Skills skill, uint id, Vector center, float radius)
{ {
if (radius <= 0) return; if (radius <= 0 || !Config.LoadedConfig.ShowDecoyRing) return;
string key = MakeKey(skill, id); string key = MakeKey(skill, id);
var ring = new Ring(); var ring = new Ring();

View file

@ -1099,6 +1099,22 @@ namespace src.utils
manager.OpenMainMenu(player, menu); manager.OpenMainMenu(player, menu);
} }
public static void ToogleDoor(CBaseEntity entity, CBasePlayerPawn pawn)
{
if (pawn == null || !pawn.IsValid) return;
if (entity == null || !entity.IsValid) return;
if (!entity.DesignerName.Contains("door")) return;
var door = new CPropDoorRotating(entity.Handle);
if (door == null || !door.IsValid) return;
if (door.DoorState == DoorState_t.DOOR_STATE_CLOSED || door.DoorState == DoorState_t.DOOR_STATE_CLOSING)
door.AcceptInput("use", pawn, door, "!activator");
else if (door.DoorState == DoorState_t.DOOR_STATE_OPEN || door.DoorState == DoorState_t.DOOR_STATE_OPENING)
door.AcceptInput("close");
}
public static void SetTeamScores(short ctScore, short tScore, RoundEndReason roundEndReason) public static void SetTeamScores(short ctScore, short tScore, RoundEndReason roundEndReason)
{ {
if (jRandomSkills.Instance == null || jRandomSkills.Instance.GameRules == null) return; if (jRandomSkills.Instance == null || jRandomSkills.Instance.GameRules == null) return;

View file

@ -22,6 +22,7 @@
"DisableHUDOnDeathPermission": "@jRandomSkills/death", "DisableHUDOnDeathPermission": "@jRandomSkills/death",
"DisableSkillsOnRoundEnd": false, "DisableSkillsOnRoundEnd": false,
"CurseSkillPerPlayer": null, "CurseSkillPerPlayer": null,
"ShowDecoyRing": true,
"Weapons": { "Weapons": {
"Rifle": [ "Rifle": [
"weapon_ak47", "weapon_ak47",