v1.0.4
This commit is contained in:
parent
6422436252
commit
714624d96a
45 changed files with 488 additions and 141 deletions
103
jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
Normal file
103
jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.player;
|
||||
using jRandomSkills.src.utils;
|
||||
using static jRandomSkills.jRandomSkills;
|
||||
|
||||
namespace jRandomSkills
|
||||
{
|
||||
public class Bankrupt : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Bankrupt;
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, Config.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % 32 != 0) return;
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
if (!SkillUtils.HasMenu(player)) continue;
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
|
||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
|
||||
HashSet<(string, string)> menuItems = enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account)}$", e.Index.ToString())).ToHashSet();
|
||||
SkillUtils.UpdateMenu(player, menuItems);
|
||||
}
|
||||
}
|
||||
|
||||
public static void TypeSkill(CCSPlayerController player, string[] commands)
|
||||
{
|
||||
if (player == null || !player.IsValid || !player.PawnIsAlive) return;
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
if (playerInfo.SkillChance == 1)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{Localization.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
var enemy = Utilities.GetPlayers().FirstOrDefault(p => p.Team != player.Team && p.Index.ToString() == enemyId);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + Localization.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
ResetMoney(enemy);
|
||||
playerInfo.SkillChance = 1;
|
||||
player.PrintToChat($" {ChatColors.Green}" + Localization.GetTranslation("bankrupt_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + Localization.GetTranslation("bankrupt_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
playerInfo.SkillChance = 0;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
HashSet<(string, string)> menuItems = enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account)}$", e.Index.ToString())).ToHashSet();
|
||||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{Localization.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
private static void ResetMoney(CCSPlayerController enemy)
|
||||
{
|
||||
if (enemy == null || !enemy.IsValid) return;
|
||||
var enemyMoneyServices = enemy.InGameMoneyServices;
|
||||
if (enemyMoneyServices == null) return;
|
||||
|
||||
enemyMoneyServices.Account = 0;
|
||||
Utilities.SetStateChanged(enemy, "CCSPlayerController", "m_pInGameMoneyServices");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#abab33", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ namespace jRandomSkills
|
|||
|
||||
var decoy = decoys.FirstOrDefault(d => d.Index == @event.Entityid);
|
||||
if (decoy != null && decoy.IsValid)
|
||||
decoy.Remove();
|
||||
decoy.AcceptInput("Kill");
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
|
|
|
|||
|
|
@ -66,9 +66,7 @@ namespace jRandomSkills
|
|||
playerPawn.Health = 50;
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
|
||||
|
||||
if (playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
||||
playerPawn.CBodyComponent.SceneNode.Scale = 0.2f;
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||
SkillUtils.ChangePlayerScale(player, .2f);
|
||||
|
||||
playerPawn.Render = Color.FromArgb(0, 255, 255, 255);
|
||||
playerPawn.ShadowStrength = 0.0f;
|
||||
|
|
@ -89,9 +87,7 @@ namespace jRandomSkills
|
|||
playerPawn.Health += 50;
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
|
||||
|
||||
if (playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
||||
playerPawn.CBodyComponent.SceneNode.Scale = 1f;
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||
SkillUtils.ChangePlayerScale(player, 1);
|
||||
|
||||
playerPawn.Render = Color.FromArgb(255, 255, 255, 255);
|
||||
playerPawn.ShadowStrength = 1.0f;
|
||||
|
|
@ -103,7 +99,7 @@ namespace jRandomSkills
|
|||
if (chickens.TryGetValue(player, out var chicken))
|
||||
{
|
||||
if (chicken != null && chicken.IsValid)
|
||||
chicken.Remove();
|
||||
chicken.AcceptInput("Kill");
|
||||
chickens.Remove(player);
|
||||
}
|
||||
}
|
||||
|
|
@ -154,7 +150,7 @@ namespace jRandomSkills
|
|||
if (player == null || !player.IsValid) continue;
|
||||
if (chicken == null || !chicken.IsValid) continue;
|
||||
|
||||
var pawn = player.Pawn.Value;
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null || chicken.AbsOrigin == null) continue;
|
||||
|
||||
float X = (float)Math.Round(pawn.AbsOrigin.X, 2);
|
||||
|
|
@ -163,6 +159,7 @@ namespace jRandomSkills
|
|||
Vector pos = new(X, Y, Z);
|
||||
if (chicken.AbsOrigin.X != pos.X || chicken.AbsOrigin.Y != pos.Y || chicken.AbsOrigin.Z != pos.Z)
|
||||
chicken.Teleport(pos, pawn.AbsRotation, null);
|
||||
pawn.VelocityModifier = 1.1f;
|
||||
UpdateHUD(player);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace jRandomSkills
|
|||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, Config.GetValue<string>(skillName, "color"), false);
|
||||
SkillUtils.RegisterSkill(skillName, Config.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
|
|
@ -24,12 +24,20 @@ namespace jRandomSkills
|
|||
foreach (var player in defaultPostProcessings.Keys)
|
||||
DisableSkill(player);
|
||||
foreach (var postProcessing in newPostProcessing)
|
||||
postProcessing.Remove();
|
||||
if (postProcessing != null && postProcessing.IsValid)
|
||||
postProcessing.AcceptInput("Kill");
|
||||
newPostProcessing.Clear();
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null) return;
|
||||
DisableSkill(player);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % 32 != 0) return;
|
||||
|
|
|
|||
|
|
@ -27,29 +27,31 @@ namespace jRandomSkills
|
|||
|
||||
public static unsafe void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn != null && player.IsValid)
|
||||
{
|
||||
float newSize = (float)Instance.Random.NextDouble() * (Config.GetValue<float>(skillName, "maxScale") - Config.GetValue<float>(skillName, "minScale")) + Config.GetValue<float>(skillName, "minScale");
|
||||
newSize = (float)Math.Round(newSize, 2);
|
||||
playerInfo.SkillChance = newSize;
|
||||
|
||||
// playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = newSize;
|
||||
if (playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
||||
playerPawn.CBodyComponent.SceneNode.Scale = newSize;
|
||||
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||
SkillUtils.ChangePlayerScale(player, newSize);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{Localization.GetTranslation("dwarf")}{ChatColors.Lime}: " + Localization.GetTranslation("dwarf_desc2", newSize), false);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn != null && playerPawn?.CBodyComponent != null)
|
||||
{
|
||||
// playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = 1;
|
||||
if (playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
||||
playerPawn.CBodyComponent.SceneNode.Scale = 1;
|
||||
playerInfo.SkillChance = 1;
|
||||
SkillUtils.ChangePlayerScale(player, 1);
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ namespace jRandomSkills
|
|||
SpawnExplosion(param2.DamagePosition);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#9c0000", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float damage = 10f, float damageRadius = 190f, float chanceFrom = .15f, float chanceTo = .3f) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#9c0000", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float damage = 25f, float damageRadius = 210f, float chanceFrom = .15f, float chanceTo = .3f) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
{
|
||||
public float Damage { get; set; } = damage;
|
||||
public float DamageRadius { get; set; } = damageRadius;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ namespace jRandomSkills
|
|||
public static void NewRound()
|
||||
{
|
||||
foreach (var camera in cameras)
|
||||
camera.Value.Item2.Remove();
|
||||
if (camera.Value.Item2 != null && camera.Value.Item2.IsValid)
|
||||
camera.Value.Item2.AcceptInput("Kill");
|
||||
cameras.Clear();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,12 +11,18 @@ namespace jRandomSkills
|
|||
public class Flash : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Flash;
|
||||
public static readonly Dictionary<ulong, int> jumpedPlayers = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, Config.GetValue<string>(skillName, "color"), false);
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
jumpedPlayers.Clear();
|
||||
}
|
||||
|
||||
public static void PlayerMakeSound(UserMessage um)
|
||||
{
|
||||
var soundevent = um.ReadUInt("soundevent_hash");
|
||||
|
|
@ -35,6 +41,14 @@ namespace jRandomSkills
|
|||
um.Recipients.Clear();
|
||||
}
|
||||
|
||||
public static void PlayerJump(EventPlayerJump @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
if (!jumpedPlayers.TryGetValue(player.SteamID, out _)) return;
|
||||
jumpedPlayers[player.SteamID] = Server.TickCount + 20;
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
|
|
@ -48,6 +62,7 @@ namespace jRandomSkills
|
|||
newSpeed = (float)Math.Round(newSpeed, 2);
|
||||
playerInfo.SkillChance = newSpeed;
|
||||
|
||||
jumpedPlayers.TryAdd(player.SteamID, 0);
|
||||
playerPawn.VelocityModifier = newSpeed;
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{Localization.GetTranslation("flash")}{ChatColors.Lime}: " + Localization.GetTranslation("flash_desc2", newSpeed), false);
|
||||
}
|
||||
|
|
@ -57,6 +72,7 @@ namespace jRandomSkills
|
|||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn == null) return;
|
||||
playerPawn.VelocityModifier = 1;
|
||||
jumpedPlayers.Remove(player.SteamID);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
|
|
@ -69,8 +85,18 @@ namespace jRandomSkills
|
|||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn != null && playerPawn.VelocityModifier != 0)
|
||||
playerPawn.VelocityModifier = Math.Max((float)(playerInfo?.SkillChance ?? 1), 1);
|
||||
if (playerPawn == null || playerPawn.VelocityModifier == 0) continue;
|
||||
|
||||
var buttons = player.Buttons;
|
||||
float newVelocity = Math.Max((float)(playerInfo?.SkillChance ?? 1), 1);
|
||||
if (buttons.HasFlag(PlayerButtons.Moveleft) || buttons.HasFlag(PlayerButtons.Moveright) || buttons.HasFlag(PlayerButtons.Forward) || buttons.HasFlag(PlayerButtons.Back))
|
||||
playerPawn.VelocityModifier = newVelocity;
|
||||
|
||||
if (jumpedPlayers.TryGetValue(player.SteamID, out var time) && time > Server.TickCount)
|
||||
continue;
|
||||
|
||||
if (!((PlayerFlags)player.Flags).HasFlag(PlayerFlags.FL_ONGROUND))
|
||||
playerPawn.AbsVelocity.Z = Math.Min(playerPawn.AbsVelocity.Z, 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,9 +138,9 @@ namespace jRandomSkills
|
|||
{
|
||||
health -= (int)param2.Damage;
|
||||
barricades[box.Index] = health;
|
||||
if (health <= 0) box.Remove();
|
||||
if (health <= 0) box.AcceptInput("Kill");
|
||||
}
|
||||
else box.Remove();
|
||||
else box.AcceptInput("Kill");
|
||||
}
|
||||
|
||||
public class PlayerSkillInfo
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ namespace jRandomSkills
|
|||
private static void RemoveBomb()
|
||||
{
|
||||
if (plantedC4 != null && plantedC4.IsValid)
|
||||
plantedC4.Remove();
|
||||
plantedC4.AcceptInput("Kill");
|
||||
if (triggerC4 != null && triggerC4.IsValid)
|
||||
triggerC4.Remove();
|
||||
triggerC4.AcceptInput("Kill");
|
||||
SkillUtils.TerminateRound(CsTeam.CounterTerrorist);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,9 +21,18 @@ namespace jRandomSkills
|
|||
{
|
||||
glitchedPlayers.Clear();
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
DisableSkill(player);
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null) return;
|
||||
DisableSkill(player);
|
||||
}
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % 32 != 0) return;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ namespace jRandomSkills
|
|||
foreach (var beams in stepBeams.Values)
|
||||
foreach (var beam in beams)
|
||||
if (beam != null && beam.IsValid)
|
||||
beam.Remove();
|
||||
beam.AcceptInput("Kill");
|
||||
stepBeams.Clear();
|
||||
Instance.RemoveListener<Listeners.CheckTransmit>(CheckTransmit);
|
||||
exists = false;
|
||||
|
|
@ -57,7 +57,7 @@ namespace jRandomSkills
|
|||
|
||||
if (beams.Count >= maxStepBeam)
|
||||
{
|
||||
beams[0].Remove();
|
||||
beams[0].AcceptInput("Kill");
|
||||
beams.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,11 +20,20 @@ namespace jRandomSkills
|
|||
|
||||
public static void NewRound()
|
||||
{
|
||||
foreach (var player in playersFOV.Keys)
|
||||
DisableSkill(player);
|
||||
playersFOV.Clear();
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null) return;
|
||||
DisableSkill(player);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % 32 != 0) return;
|
||||
|
|
@ -64,7 +73,6 @@ namespace jRandomSkills
|
|||
|
||||
if (!playersFOV.ContainsKey(enemy))
|
||||
playersFOV.Add(enemy, enemy.DesiredFOV);
|
||||
Server.PrintToChatAll($"FOV: {enemy.DesiredFOV}");
|
||||
enemy.DesiredFOV = customFOV;
|
||||
Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ namespace jRandomSkills
|
|||
Instance.AddTimer(5f, () =>
|
||||
{
|
||||
if (@event != null && @event.IsValid)
|
||||
@event.Remove();
|
||||
@event.AcceptInput("Kill");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ namespace jRandomSkills
|
|||
if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
|
||||
return;
|
||||
|
||||
CCSPlayerPawn attackerPawn = new CCSPlayerPawn(param2.Attacker.Value.Handle);
|
||||
CCSPlayerPawn victimPawn = new CCSPlayerPawn(param.Handle);
|
||||
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
|
||||
CCSPlayerPawn victimPawn = new(param.Handle);
|
||||
|
||||
if (attackerPawn.DesignerName != "player" || victimPawn.DesignerName != "player")
|
||||
return;
|
||||
|
|
@ -42,11 +42,8 @@ namespace jRandomSkills
|
|||
param2.Damage = 1000f;
|
||||
}
|
||||
|
||||
public class SkillConfig : Config.DefaultSkillInfo
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff5CD9", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
{
|
||||
public SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff5CD9", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false) : base(skill, active, color, onlyTeam, needsTeammates)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,8 @@ namespace jRandomSkills
|
|||
{
|
||||
private const Skills skillName = Skills.Pilot;
|
||||
private static readonly float maximumFuel = Config.GetValue<float>(skillName, "maximumFuel");
|
||||
private static readonly float fuelConsumption = Config.GetValue<float>(skillName, "fuelConsumption");
|
||||
private static readonly float refuelling = Config.GetValue<float>(skillName, "refuelling");
|
||||
private static readonly Dictionary<ulong, Pilot_PlayerInfo> PlayerPilotInfo = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -38,9 +40,7 @@ namespace jRandomSkills
|
|||
PlayerPilotInfo[player.SteamID] = new Pilot_PlayerInfo
|
||||
{
|
||||
SteamID = player.SteamID,
|
||||
PressedUse = false,
|
||||
CanUsePilot = true,
|
||||
PilotStartTime = DateTime.MinValue
|
||||
Fuel = maximumFuel,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -54,22 +54,10 @@ namespace jRandomSkills
|
|||
var buttons = player.Buttons;
|
||||
if (PlayerPilotInfo.TryGetValue(player.SteamID, out var pilotInfo))
|
||||
{
|
||||
pilotInfo.Fuel = Math.Min(Math.Max(0, pilotInfo.Fuel - (buttons.HasFlag(PlayerButtons.Use) ? fuelConsumption : -refuelling)), maximumFuel);
|
||||
if (buttons.HasFlag(PlayerButtons.Use))
|
||||
{
|
||||
if (!pilotInfo.PressedUse)
|
||||
{
|
||||
pilotInfo.CanUsePilot = true;
|
||||
pilotInfo.PressedUse = true;
|
||||
pilotInfo.PilotStartTime = DateTime.Now;
|
||||
Instance.AddTimer(4.0f, () => ChangeUsePlayerPilot(player));
|
||||
}
|
||||
|
||||
if (pilotInfo.CanUsePilot)
|
||||
{
|
||||
if (pilotInfo.Fuel > 0 && player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid && !player.PlayerPawn.Value.IsDefusing)
|
||||
ApplyPilotEffect(player);
|
||||
}
|
||||
}
|
||||
|
||||
UpdateHUD(player, pilotInfo);
|
||||
}
|
||||
}
|
||||
|
|
@ -79,22 +67,16 @@ namespace jRandomSkills
|
|||
var buttons = player.Buttons;
|
||||
float fuelPercentage = maximumFuel;
|
||||
|
||||
if (pilotInfo.PressedUse && pilotInfo.CanUsePilot)
|
||||
{
|
||||
float elapsedTime = (float)(DateTime.Now - pilotInfo.PilotStartTime).TotalSeconds;
|
||||
fuelPercentage = Math.Max(0, maximumFuel * (4.0f - elapsedTime) / 4.0f);
|
||||
}
|
||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == skillName);
|
||||
if (skillData == null) return;
|
||||
|
||||
string fuelColor = GetFuelColor(fuelPercentage);
|
||||
string infoLine = buttons.HasFlag(PlayerButtons.Use) ? $"<font color='#FFFFFF'>{Localization.GetTranslation("pilot")}:</font> <br>" : "";
|
||||
string remainingLine = buttons.HasFlag(PlayerButtons.Use) ?
|
||||
(pilotInfo.CanUsePilot ? $"<font color='{fuelColor}'>{fuelPercentage:F0}%</font> <br>" : $"<font color='#FF0000'>{Localization.GetTranslation("pilot_hud_info")}</font> <br>") : "";
|
||||
string fuelColor = GetFuelColor(pilotInfo.Fuel);
|
||||
string infoLine = $"<font class='fontSize-l' class='fontWeight-Bold' color='#FFFFFF'>{Localization.GetTranslation("your_skill")}:</font> <br>";
|
||||
string skillLine = $"<font class='fontSize-l' class='fontWeight-Bold' color='{skillData.Color}'>{skillData.Name}</font> <br>";
|
||||
string remainingLine = $"<font class='fontSize-m' color='#ffffff'>{Localization.GetTranslation("pilot_hud_info")}:</font> <font color='{fuelColor}'>{(pilotInfo.Fuel/maximumFuel)*100:F0}%</font> <br>";
|
||||
|
||||
if (buttons.HasFlag(PlayerButtons.Use))
|
||||
{
|
||||
var hudContent = infoLine + remainingLine;
|
||||
player.PrintToCenterHtml(hudContent);
|
||||
}
|
||||
var hudContent = infoLine + skillLine + remainingLine;
|
||||
player.PrintToCenterHtml(hudContent);
|
||||
}
|
||||
|
||||
private static string GetFuelColor(float fuelPercentage)
|
||||
|
|
@ -104,21 +86,6 @@ namespace jRandomSkills
|
|||
return "#FF0000";
|
||||
}
|
||||
|
||||
private static void ChangeUsePlayerPilot(CCSPlayerController player)
|
||||
{
|
||||
if (PlayerPilotInfo.TryGetValue(player.SteamID, out var pilotInfo))
|
||||
{
|
||||
pilotInfo.CanUsePilot = false;
|
||||
Instance.AddTimer(2.0f, () =>
|
||||
{
|
||||
pilotInfo.PressedUse = false;
|
||||
pilotInfo.CanUsePilot = true;
|
||||
});
|
||||
|
||||
pilotInfo.PressedUse = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ApplyPilotEffect(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
|
|
@ -150,14 +117,14 @@ namespace jRandomSkills
|
|||
public class Pilot_PlayerInfo
|
||||
{
|
||||
public ulong SteamID { get; set; }
|
||||
public bool CanUsePilot { get; set; }
|
||||
public bool PressedUse { get; set; }
|
||||
public DateTime PilotStartTime { get; set; }
|
||||
public float Fuel { get; set; }
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1466F5", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float maximumFuel = 100f) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1466F5", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float maximumFuel = 150f, float fuelConsumption = .64f, float refuelling = .1f) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
|
||||
{
|
||||
public float MaximumFuel { get; set; } = maximumFuel;
|
||||
public float FuelConsumption { get; set; } = fuelConsumption;
|
||||
public float Refuelling { get; set; } = refuelling;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -72,7 +72,7 @@ namespace jRandomSkills
|
|||
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
|
||||
if (plantedBomb != null)
|
||||
{
|
||||
plantedBomb.Remove();
|
||||
plantedBomb.AcceptInput("Kill");
|
||||
SkillUtils.TerminateRound(CsTeam.CounterTerrorist);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ namespace jRandomSkills
|
|||
foreach (var item in pawn.WeaponServices.MyWeapons)
|
||||
{
|
||||
if (item != null && item.IsValid && item.Value != null && item.Value.IsValid && item.Value.DesignerName == weaponToRemove)
|
||||
item.Value.Remove();
|
||||
item.Value.AcceptInput("Kill");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ namespace jRandomSkills
|
|||
var attackerTeam = attackerPawn.TeamNum;
|
||||
var replicaTeam = replica.Globalname.EndsWith("CT") ? 3 : 2;
|
||||
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? 15 : 5);
|
||||
replica.Remove();
|
||||
replica.AcceptInput("Kill");
|
||||
}
|
||||
|
||||
public class PlayerSkillInfo
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ namespace jRandomSkills
|
|||
public static void NewRound()
|
||||
{
|
||||
foreach (var camera in cameras)
|
||||
camera.Value.Item2.Remove();
|
||||
if (camera.Value.Item2 != null && camera.Value.Item2.IsValid)
|
||||
camera.Value.Item2.AcceptInput("Kill");
|
||||
cameras.Clear();
|
||||
}
|
||||
|
||||
|
|
@ -75,10 +76,10 @@ namespace jRandomSkills
|
|||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
|
||||
|
||||
if (cameras.TryGetValue(player.SteamID, out var cameraInfo) && cameraInfo.Item2.IsValid)
|
||||
if (cameras.TryGetValue(player.SteamID, out var cameraInfo) && cameraInfo.Item2 != null && cameraInfo.Item2.IsValid)
|
||||
{
|
||||
orginalCameraRaw = cameraInfo.Item1;
|
||||
cameraInfo.Item2.Remove();
|
||||
cameraInfo.Item2.AcceptInput("Kill");
|
||||
newCameraRaw = CreateCamera(player);
|
||||
} else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ namespace jRandomSkills
|
|||
return;
|
||||
}
|
||||
|
||||
DeacitvateSkill(player, enemy);
|
||||
StealSkill(player, enemy);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -99,29 +99,33 @@ namespace jRandomSkills
|
|||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
private static void DeacitvateSkill(CCSPlayerController player, CCSPlayerController enemy)
|
||||
private static void StealSkill(CCSPlayerController player, CCSPlayerController enemy)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
var enemyInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == enemy.SteamID);
|
||||
if (playerInfo == null || enemyInfo == null) return;
|
||||
var enemySkill = enemyInfo.Skill;
|
||||
|
||||
if (playerInfo != null)
|
||||
{
|
||||
Instance.AddTimer(.1f, () =>
|
||||
{
|
||||
playerInfo.Skill = enemyInfo.Skill;
|
||||
playerInfo.Skill = enemySkill;
|
||||
playerInfo.SpecialSkill = skillName;
|
||||
Instance.SkillAction(enemyInfo.Skill.ToString(), "EnableSkill", [player]);
|
||||
Instance.SkillAction(enemySkill.ToString(), "EnableSkill", [player]);
|
||||
player.PrintToChat($" {ChatColors.Green}" + Localization.GetTranslation("thief_player_info", enemy.PlayerName));
|
||||
});
|
||||
player.PrintToChat($" {ChatColors.Green}" + Localization.GetTranslation("thief_player_info", enemy.PlayerName));
|
||||
}
|
||||
|
||||
if (enemyInfo != null)
|
||||
{
|
||||
Instance.SkillAction(enemyInfo.Skill.ToString(), "DisableSkill", [enemy]);
|
||||
enemyInfo.SpecialSkill = enemyInfo.Skill;
|
||||
enemyInfo.Skill = Skills.None;
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + Localization.GetTranslation("thief_enemy_info"));
|
||||
Instance.AddTimer(.1f, () =>
|
||||
{
|
||||
Instance.SkillAction(enemySkill.ToString(), "DisableSkill", [enemy]);
|
||||
enemyInfo.SpecialSkill = enemySkill;
|
||||
enemyInfo.Skill = Skills.None;
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + Localization.GetTranslation("thief_enemy_info"));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@ namespace jRandomSkills
|
|||
public static void NewRound()
|
||||
{
|
||||
foreach (var camera in cameras)
|
||||
camera.Value.Item2.Remove();
|
||||
if (camera.Value.Item2 != null && camera.Value.Item2.IsValid)
|
||||
camera.Value.Item2.AcceptInput("Kill");
|
||||
cameras.Clear();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,8 +43,10 @@ namespace jRandomSkills
|
|||
{
|
||||
foreach (var glow in glows)
|
||||
{
|
||||
glow.Item1.Remove();
|
||||
glow.Item2.Remove();
|
||||
if (glow.Item1 != null && glow.Item1.IsValid)
|
||||
glow.Item1.AcceptInput("Kill");
|
||||
if (glow.Item2 != null && glow.Item2.IsValid)
|
||||
glow.Item2.AcceptInput("Kill");
|
||||
}
|
||||
glows.Clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ namespace jRandomSkills
|
|||
|
||||
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
|
||||
{
|
||||
CCSPlayerController[] enemies = [.. Utilities.GetPlayers().FindAll(e => e.Team != player.Team)];
|
||||
CCSPlayerController[] enemies = [.. Utilities.GetPlayers().FindAll(e => e.Team != player.Team && e.PawnIsAlive)];
|
||||
if (enemies.Length == 0) return null;
|
||||
return enemies[Instance.Random.Next(enemies.Length)];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue