Improve skill cooldowns and weapon handling logic
This commit is contained in:
parent
28a7d0048c
commit
1d9e70aeda
9 changed files with 38 additions and 14 deletions
|
|
@ -9,7 +9,7 @@ namespace jRandomSkills
|
||||||
public class BladeMaster : ISkill
|
public class BladeMaster : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.BladeMaster;
|
private const Skills skillName = Skills.BladeMaster;
|
||||||
private static string[] noReflectionWeapon = { "inferno", "flashbang", "smokegrenade", "decoy", "hegrenade", "knife" };
|
private static string[] noReflectionWeapon = { "inferno", "flashbang", "smokegrenade", "decoy", "hegrenade", "knife", "taser" };
|
||||||
private static float torseReflectionChance = Config.GetValue<float>(skillName, "torseReflectionChance") * 100;
|
private static float torseReflectionChance = Config.GetValue<float>(skillName, "torseReflectionChance") * 100;
|
||||||
private static float legReflectionChance = Config.GetValue<float>(skillName, "legReflectionChance") * 100;
|
private static float legReflectionChance = Config.GetValue<float>(skillName, "legReflectionChance") * 100;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ namespace jRandomSkills
|
||||||
public class Chicken : ISkill
|
public class Chicken : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Chicken;
|
private const Skills skillName = Skills.Chicken;
|
||||||
|
private static bool roundEnd = false;
|
||||||
private static string[] disabledWeapons =
|
private static string[] disabledWeapons =
|
||||||
{
|
{
|
||||||
"weapon_ak47",
|
"weapon_ak47",
|
||||||
|
|
@ -48,12 +49,12 @@ namespace jRandomSkills
|
||||||
|
|
||||||
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
|
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
|
||||||
{
|
{
|
||||||
|
roundEnd = false;
|
||||||
Instance.AddTimer(0.1f, () =>
|
Instance.AddTimer(0.1f, () =>
|
||||||
{
|
{
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
{
|
{
|
||||||
if (!Instance.IsPlayerValid(player)) continue;
|
if (!Instance.IsPlayerValid(player)) continue;
|
||||||
|
|
||||||
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) continue;
|
if (playerInfo?.Skill != skillName) continue;
|
||||||
EnableSkill(player);
|
EnableSkill(player);
|
||||||
|
|
@ -73,7 +74,7 @@ namespace jRandomSkills
|
||||||
if (playerInfo?.Skill != skillName) continue;
|
if (playerInfo?.Skill != skillName) continue;
|
||||||
DisableSkill(player);
|
DisableSkill(player);
|
||||||
}
|
}
|
||||||
|
roundEnd = true;
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -160,6 +161,7 @@ namespace jRandomSkills
|
||||||
|
|
||||||
private static void SetWeaponAttack(CCSPlayerController player, bool disableWeapon)
|
private static void SetWeaponAttack(CCSPlayerController player, bool disableWeapon)
|
||||||
{
|
{
|
||||||
|
if (roundEnd) return;
|
||||||
foreach (var weapon in player.Pawn.Value.WeaponServices?.MyWeapons)
|
foreach (var weapon in player.Pawn.Value.WeaponServices?.MyWeapons)
|
||||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
||||||
if (disabledWeapons.Contains(weapon?.Value?.DesignerName))
|
if (disabledWeapons.Contains(weapon?.Value?.DesignerName))
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ namespace jRandomSkills
|
||||||
public class Ghost : ISkill
|
public class Ghost : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Ghost;
|
private const Skills skillName = Skills.Ghost;
|
||||||
|
private static bool roundEnd = false;
|
||||||
private static string[] disabledWeapons =
|
private static string[] disabledWeapons =
|
||||||
{
|
{
|
||||||
"weapon_deagle",
|
"weapon_deagle",
|
||||||
|
|
@ -60,12 +61,12 @@ namespace jRandomSkills
|
||||||
|
|
||||||
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
|
Instance.RegisterEventHandler<EventRoundFreezeEnd>((@event, info) =>
|
||||||
{
|
{
|
||||||
|
roundEnd = false;
|
||||||
Instance.AddTimer(0.1f, () =>
|
Instance.AddTimer(0.1f, () =>
|
||||||
{
|
{
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
{
|
{
|
||||||
if (!Instance.IsPlayerValid(player)) continue;
|
if (!Instance.IsPlayerValid(player)) continue;
|
||||||
|
|
||||||
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill == skillName)
|
if (playerInfo?.Skill == skillName)
|
||||||
EnableSkill(player);
|
EnableSkill(player);
|
||||||
|
|
@ -84,6 +85,7 @@ namespace jRandomSkills
|
||||||
if (playerInfo?.Skill == skillName)
|
if (playerInfo?.Skill == skillName)
|
||||||
DisableSkill(player);
|
DisableSkill(player);
|
||||||
}
|
}
|
||||||
|
roundEnd = true;
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -180,6 +182,7 @@ namespace jRandomSkills
|
||||||
|
|
||||||
private static void SetWeaponAttack(CCSPlayerController player, bool disableWeapon)
|
private static void SetWeaponAttack(CCSPlayerController player, bool disableWeapon)
|
||||||
{
|
{
|
||||||
|
if (roundEnd) return;
|
||||||
foreach (var weapon in player.Pawn.Value.WeaponServices?.MyWeapons)
|
foreach (var weapon in player.Pawn.Value.WeaponServices?.MyWeapons)
|
||||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
||||||
if (disabledWeapons.Contains(weapon?.Value?.DesignerName))
|
if (disabledWeapons.Contains(weapon?.Value?.DesignerName))
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ namespace jRandomSkills
|
||||||
public class Poison : ISkill
|
public class Poison : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Poison;
|
private const Skills skillName = Skills.Poison;
|
||||||
private static int cooldown = Config.GetValue<int>(skillName, "Cooldown");
|
private static float cooldown = Config.GetValue<float>(skillName, "Cooldown");
|
||||||
private static int healthToDamage = Config.GetValue<int>(skillName, "Damage");
|
private static int healthToDamage = Config.GetValue<int>(skillName, "Damage");
|
||||||
private static HashSet<CCSPlayerController> poisonedPlayers = new HashSet<CCSPlayerController>();
|
private static HashSet<CCSPlayerController> poisonedPlayers = new HashSet<CCSPlayerController>();
|
||||||
|
|
||||||
|
|
@ -46,7 +46,7 @@ namespace jRandomSkills
|
||||||
|
|
||||||
private static void OnTick()
|
private static void OnTick()
|
||||||
{
|
{
|
||||||
if (Server.TickCount % (64 * cooldown) != 0) return;
|
if (Server.TickCount % (int)(64 * cooldown) != 0) return;
|
||||||
foreach (var player in poisonedPlayers)
|
foreach (var player in poisonedPlayers)
|
||||||
{
|
{
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
|
|
@ -109,8 +109,8 @@ namespace jRandomSkills
|
||||||
public class SkillConfig : Config.DefaultSkillInfo
|
public class SkillConfig : Config.DefaultSkillInfo
|
||||||
{
|
{
|
||||||
public int Damage { get; set; }
|
public int Damage { get; set; }
|
||||||
public int Cooldown { get; set; }
|
public float Cooldown { get; set; }
|
||||||
public SkillConfig(Skills skill = skillName, bool active = true, string color = "#902eff", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, int cooldown = 2, int damage = 1) : base(skill, active, color, onlyTeam, needsTeammates)
|
public SkillConfig(Skills skill = skillName, bool active = true, string color = "#902eff", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float cooldown = 1, int damage = 1) : base(skill, active, color, onlyTeam, needsTeammates)
|
||||||
{
|
{
|
||||||
Damage = damage;
|
Damage = damage;
|
||||||
Cooldown = cooldown;
|
Cooldown = cooldown;
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,11 @@ namespace jRandomSkills
|
||||||
Instance.AddTimer(.2f, () => {
|
Instance.AddTimer(.2f, () => {
|
||||||
player.Respawn();
|
player.Respawn();
|
||||||
zombies.Add(player);
|
zombies.Add(player);
|
||||||
player.ExecuteClientCommand("slot3");
|
|
||||||
SetPlayerColor(pawn, false);
|
SetPlayerColor(pawn, false);
|
||||||
SkillUtils.AddHealth(pawn, zombieHealth - 100, zombieHealth);
|
SkillUtils.AddHealth(pawn, zombieHealth - 100, zombieHealth);
|
||||||
pawn.Teleport(deadPosition, deadRotation);
|
pawn.Teleport(deadPosition, deadRotation);
|
||||||
|
player.ExecuteClientCommand("slot3");
|
||||||
|
Instance.AddTimer(1, () => player.ExecuteClientCommand("slot3"));
|
||||||
});
|
});
|
||||||
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ namespace jRandomSkills
|
||||||
public class Regeneration : ISkill
|
public class Regeneration : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Regeneration;
|
private const Skills skillName = Skills.Regeneration;
|
||||||
private static int cooldown = Config.GetValue<int>(skillName, "cooldown");
|
private static float cooldown = Config.GetValue<float>(skillName, "cooldown");
|
||||||
private static int healthToAdd = Config.GetValue<int>(skillName, "healthToAdd");
|
private static int healthToAdd = Config.GetValue<int>(skillName, "healthToAdd");
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
|
|
@ -20,7 +20,7 @@ namespace jRandomSkills
|
||||||
|
|
||||||
private static void OnTick()
|
private static void OnTick()
|
||||||
{
|
{
|
||||||
if (Server.TickCount % (64 * cooldown) != 0) return;
|
if (Server.TickCount % (int)(64 * cooldown) != 0) return;
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.skillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
|
|
@ -35,8 +35,8 @@ namespace jRandomSkills
|
||||||
public class SkillConfig : Config.DefaultSkillInfo
|
public class SkillConfig : Config.DefaultSkillInfo
|
||||||
{
|
{
|
||||||
public int HealthToAdd { get; set; }
|
public int HealthToAdd { get; set; }
|
||||||
public int Cooldown { get; set; }
|
public float Cooldown { get; set; }
|
||||||
public SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff462e", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, int healthToAdd = 1, int cooldown = 1) : base(skill, active, color, onlyTeam, needsTeammates)
|
public SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff462e", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, int healthToAdd = 1, float cooldown = .25f) : base(skill, active, color, onlyTeam, needsTeammates)
|
||||||
{
|
{
|
||||||
HealthToAdd = healthToAdd;
|
HealthToAdd = healthToAdd;
|
||||||
Cooldown = cooldown;
|
Cooldown = cooldown;
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,8 @@ namespace jRandomSkills
|
||||||
{
|
{
|
||||||
List<string> playerWeapons = new List<string>();
|
List<string> playerWeapons = new List<string>();
|
||||||
foreach (var weapon in player.PlayerPawn.Value.WeaponServices.MyWeapons)
|
foreach (var weapon in player.PlayerPawn.Value.WeaponServices.MyWeapons)
|
||||||
playerWeapons.Add(weapon?.Value?.DesignerName);
|
if (weapon.Value != null && weapon.Value.IsValid)
|
||||||
|
playerWeapons.Add(SkillUtils.GetDesignerName(weapon.Value));
|
||||||
return playerWeapons.Count == 0 ? null : playerWeapons.ToArray();
|
return playerWeapons.Count == 0 ? null : playerWeapons.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,23 @@ namespace jRandomSkills
|
||||||
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iMaxHealth");
|
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iMaxHealth");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string GetDesignerName(CBasePlayerWeapon weapon)
|
||||||
|
{
|
||||||
|
string designerName = weapon.DesignerName;
|
||||||
|
ushort index = weapon.AttributeManager.Item.ItemDefinitionIndex;
|
||||||
|
|
||||||
|
designerName = (designerName, index) switch
|
||||||
|
{
|
||||||
|
var (name, _) when name.Contains("bayonet") => "weapon_knife",
|
||||||
|
("weapon_m4a1", 60) => "weapon_m4a1_silencer",
|
||||||
|
("weapon_hkp2000", 61) => "weapon_usp_silencer",
|
||||||
|
("weapon_deagle", 64) => "weapon_revolver",
|
||||||
|
_ => designerName
|
||||||
|
};
|
||||||
|
|
||||||
|
return designerName;
|
||||||
|
}
|
||||||
|
|
||||||
public static void SetTeamScores(short ctScore, short tScore, RoundEndReason roundEndReason)
|
public static void SetTeamScores(short ctScore, short tScore, RoundEndReason roundEndReason)
|
||||||
{
|
{
|
||||||
UpdateServerTeamScores(ctScore, tScore);
|
UpdateServerTeamScores(ctScore, tScore);
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue