v1.2.2.b3
## 📋 Changelog - #### General: - ###### Updated Chinese language translation by [by: [@Ericzzrbb](hhttps://github.com/Ericzzrbb)]. - ###### Fixed a bug where a player could be given multiple skills at once while the HUD displayed only one (the player list was never cleared on map change and had no duplicate protection on join). [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Fixed skill names and descriptions showing the raw translation key on Turkish servers (culture-sensitive lowercasing) - affected skills starting with "I" (e.g. Illiterate, Impostor, InfiniteAmmo, Iana). [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### RayTrace-based skills and the skill-use button no longer throw when the RayTrace module is not installed - they now degrade gracefully instead of crashing. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Fixed the skill-use button (when bound to Use/E) blocking option selection inside WSAD target menus. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Performance: cached reflection lookups in `SkillAction` and `SkillsInfo.GetValue`, and de-duplicated the repeated event-dispatch logic on hot paths (OnTick, OnTakeDamage, etc.). [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Stability: removed dead methods that threw `NotImplementedException`, hardened team-score handling, and reset all skill state on round start / map change. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Build: post-build copy paths now follow the active `$(Configuration)` and `$(TargetFramework)`. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Added new Turkish translation strings for the skill notifications listed below. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Fixed bot-related messages so they now display correctly in the chat of the controlling player. - ###### When a player takes control of a bot, all active skill effects affecting that bot are now correctly transferred to the controlling player. - ###### Prevented bots from automatically using skills while being controlled by a player. - #### Skill improvements: - ###### Wallhack: - ###### Fixed enemy outlines briefly flashing for everyone when the skill holder dies. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Area Reaper: - ###### Teammates (CT) are now notified which bombsite (A/B) was sealed. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Wild Throw: - ###### Now notifies the targeted player, consistent with other targeted skills. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Careful Bullets / Darkness / Deaf / Glitch / Jammer / Jump Ban / Magnifier / Poison / Primary Ban / Wild Throw: - ###### The targeted player is now notified when the effect ends after the skill holder dies. [by: [@ByDexterTR](https://github.com/ByDexterTR)] - ###### Careful Bullets: - ###### Added damage-taken sound effects when missing a shot - ###### C4 Camouflage / Ninja: - ###### Fixed a bug where dying with invisibility active and taking control of a bot would grant invisibility to the bot as well. - ###### Poison: - ###### Added damage-taken sound effects. - ###### Primary Ban: - ###### Changed mechanic to directly block shooting weapons instead of forcing a weapon switch to the knife. - ###### Hot Bomb: - ###### Replaced the bomb-burning sound effects. - ###### Added a notification when the burning effect ends and the bomb returns to its normal color.
This commit is contained in:
parent
425bbaa784
commit
2ae293d1aa
45 changed files with 831 additions and 173 deletions
|
|
@ -51,6 +51,7 @@ namespace src.utils
|
|||
|
||||
var randomBot = activeBots[_random.Next(activeBots.Count)];
|
||||
if (randomBot == null || !randomBot.IsValid) return;
|
||||
if (randomBot.Index != randomBot.OriginalControllerOfCurrentPawn.Value?.Index) return;
|
||||
if (randomBot.PlayerPawn?.Value == null || !randomBot.PlayerPawn.Value.IsValid || randomBot.PlayerPawn.Value.IsDefusing) return;
|
||||
|
||||
var bot_info = PlayerManager.GetPlayerByIndex(randomBot.Index);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ public interface ISkill
|
|||
public static void PlayerDeath(EventPlayerDeath _) { }
|
||||
public static void PlayerJump(EventPlayerJump _) { }
|
||||
public static void SwitchTeam(EventSwitchTeam _, GameEventInfo __) { }
|
||||
public static void BotTakeover(EventBotTakeover _) { }
|
||||
|
||||
public static void WeaponFire(EventWeaponFire _) { }
|
||||
public static void WeaponEquip(EventItemEquip _) { }
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ namespace src.player
|
|||
Instance.RegisterEventHandler<EventPlayerBlind>(PlayerBlind);
|
||||
Instance.RegisterEventHandler<EventPlayerHurt>(PlayerHurt);
|
||||
Instance.RegisterEventHandler<EventPlayerJump>(PlayerJump);
|
||||
Instance.RegisterEventHandler<EventBotTakeover>(BotTakeover);
|
||||
|
||||
Instance.RegisterEventHandler<EventWeaponFire>(WeaponFire);
|
||||
Instance.RegisterEventHandler<EventItemEquip>(WeaponEquip);
|
||||
|
|
@ -377,6 +378,15 @@ namespace src.player
|
|||
}
|
||||
}
|
||||
|
||||
private static HookResult BotTakeover(EventBotTakeover @event, GameEventInfo info)
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
DispatchToActiveSkills("BotTakeover", @event);
|
||||
return HookResult.Continue;
|
||||
}
|
||||
}
|
||||
|
||||
private static HookResult PlayerBlind(EventPlayerBlind @event, GameEventInfo info)
|
||||
{
|
||||
lock (setLock)
|
||||
|
|
|
|||
|
|
@ -36,16 +36,19 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
int site = bombsiteA.Contains(commands[0]) ? 0 : bombsiteB.Contains(commands[0]) ? 1 : -1;
|
||||
if (site == -1)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_incorrect_site")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_incorrect_site")}");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -71,8 +74,11 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
playerInfo.SkillUsed = false;
|
||||
SkillUtils.CreateMenu(player, [(player.GetTranslation("bombsite_a"), "a")], (player.GetTranslation("bombsite_b"), "b", true));
|
||||
SkillUtils.CreateMenu(player, [(playerEvent.GetTranslation("bombsite_a"), "a")], (playerEvent.GetTranslation("bombsite_b"), "b", true));
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -103,23 +109,24 @@ namespace src.player.skills
|
|||
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
if (player == null || !player.IsValid || player.Team != CsTeam.Terrorist) continue;
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid || player == null || !player.IsValid || player.Team != CsTeam.Terrorist || player.PlayerPawn?.Value?.Health <= 0) continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill == null) continue;
|
||||
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
var pawn = player.PlayerPawn!.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) continue;
|
||||
|
||||
var activeWeapon = pawn.WeaponServices.ActiveWeapon.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid || activeWeapon.DesignerName != "weapon_c4") continue;
|
||||
|
||||
|
||||
if (!pawn.InBombZone && pawn.InBombZoneTrigger)
|
||||
player.PrintToCenterAlert(player.GetTranslation("areareaper_bombsite_disabled"));
|
||||
playerEvent.PrintToCenterAlert(playerEvent.GetTranslation("areareaper_bombsite_disabled"));
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#edf5b5", CsTeam onlyTeam = CsTeam.CounterTerrorist, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#edf5b5", CsTeam onlyTeam = CsTeam.CounterTerrorist, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ namespace src.player.skills
|
|||
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.Team != player.Team && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PlayerPawn?.Value?.Health > 0 && p.Team != player.Team && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
|
||||
|
|
@ -77,29 +77,35 @@ namespace src.player.skills
|
|||
string option = commands[0];
|
||||
if (string.IsNullOrEmpty(option)) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
if (uint.TryParse(option, out uint enemyIndex))
|
||||
{
|
||||
var enemy = Utilities.GetEntityFromIndex<CCSPlayerController>((int)enemyIndex);
|
||||
if (enemy != null && enemy.IsValid && enemy.PawnIsAlive && enemy.Team != player.Team)
|
||||
if (enemy != null && enemy.IsValid && enemy.PlayerPawn?.Value?.Health > 0 && enemy.Team != player.Team)
|
||||
{
|
||||
ResetMoney(enemy);
|
||||
playerInfo.SkillUsed = true;
|
||||
SkillUtils.CloseMenu(player);
|
||||
player.PrintToChat($" {ChatColors.Lime}{player.GetTranslation("bankrupt_player_info", enemy.PlayerName)}");
|
||||
enemy.PrintToChat($" {ChatColors.Red}{enemy.GetTranslation("bankrupt_enemy_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Lime}{playerEvent.GetTranslation("bankrupt_player_info", enemy.PlayerName)}");
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent != null && enemyEvent.IsValid)
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}{enemyEvent.GetTranslation("bankrupt_enemy_info")}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
private static void ResetMoney(CCSPlayerController enemy)
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
if (weapon == "c4")
|
||||
if (weapon == "c4" && player.PlayerPawn?.Value?.Health > 0)
|
||||
{
|
||||
invisiblePlayers.TryAdd(player.Index, 0);
|
||||
SkillUtils.SetPlayerInvisibility(player, .5f);
|
||||
|
|
@ -69,7 +69,7 @@ namespace src.player.skills
|
|||
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE && invisiblePlayers.ContainsKey(player.Index))
|
||||
if (player.PlayerPawn?.Value?.Health <= 0 && invisiblePlayers.ContainsKey(player.Index))
|
||||
{
|
||||
invisiblePlayers.TryRemove(player.Index, out _);
|
||||
SkillUtils.SetPlayerInvisibility(player, 0);
|
||||
|
|
|
|||
|
|
@ -61,19 +61,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -81,8 +89,11 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("carefulbullets_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("carefulbullets_enemy_info"));
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("carefulbullets_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("carefulbullets_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -91,6 +102,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -98,11 +112,14 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void BulletImpact(EventBulletImpact @event)
|
||||
{
|
||||
var eventPlayer = @event.Userid;
|
||||
if (eventPlayer == null || !eventPlayer.IsValid) return;
|
||||
|
||||
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
|
|
@ -128,7 +145,10 @@ namespace src.player.skills
|
|||
Instance.AddTickTimer(1, () =>
|
||||
{
|
||||
if (lastShot.TryRemove(playerIndex, out bool didHit) && !didHit)
|
||||
{
|
||||
eventPlayer.ExecuteClientCommand($"play player/player_damagebody_0{Instance.Random.Next(4,8)}");
|
||||
SkillUtils.TakeHealth(playerPawn, SkillsInfo.GetValue<int>(skillName, "damageAfterMiss"));
|
||||
}
|
||||
lastShot.TryRemove(playerIndex, out _);
|
||||
});
|
||||
}
|
||||
|
|
@ -155,6 +175,8 @@ namespace src.player.skills
|
|||
return;
|
||||
|
||||
CCSPlayerController attacker = PlayerManager.GetPlayerEvent(attackerPawn.Controller.Value.As<CCSPlayerController>())!;
|
||||
|
||||
if (attacker == null || !attacker.IsValid) return;
|
||||
if (!targetPlayers.ContainsKey(attacker.Index)) return;
|
||||
|
||||
hitPlayer.AddOrUpdate(attacker.Index, Server.TickCount, (_, _) => Server.TickCount);
|
||||
|
|
@ -171,6 +193,10 @@ namespace src.player.skills
|
|||
targetPlayers.TryRemove(targetIndex, out _);
|
||||
lastShot.TryRemove(targetIndex, out _);
|
||||
hitPlayer.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("carefulbullets_disable_info"));
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
|
||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 && !p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
|
||||
ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => (e.PlayerName, e.Index.ToString()))];
|
||||
SkillUtils.UpdateMenu(player, menuItems);
|
||||
|
|
@ -58,19 +58,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -78,8 +86,24 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("darkness_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("darkness_enemy_info"));
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("darkness_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("darkness_enemy_info"));
|
||||
}
|
||||
|
||||
public static void BotTakeover(EventBotTakeover @event)
|
||||
{
|
||||
var bot = @event.Botid;
|
||||
if (bot == null || !bot.IsValid) return;
|
||||
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!playersInDark.ContainsKey(bot.Index)) return;
|
||||
|
||||
ApplyColor(player);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -88,6 +112,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -95,7 +122,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -104,7 +131,7 @@ namespace src.player.skills
|
|||
{
|
||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
var target = Utilities.GetPlayerFromIndex((int)targetIndex);
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid)
|
||||
SetUpPostProcessing(target, true);
|
||||
playersInDark.TryRemove(targetIndex, out _);
|
||||
|
|
@ -124,11 +151,12 @@ namespace src.player.skills
|
|||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
private static void SetUpPostProcessing(CCSPlayerController player, bool turnOff = false)
|
||||
private static void SetUpPostProcessing(CCSPlayerController? player, bool turnOff = false)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
uint playerIndex = player.Index;
|
||||
player = PlayerManager.GetPlayerFromEvent(player);
|
||||
|
||||
lock (setLock)
|
||||
{
|
||||
|
|
@ -145,7 +173,7 @@ namespace src.player.skills
|
|||
return;
|
||||
}
|
||||
|
||||
var target = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
|
||||
if (target == null || !target.IsValid)
|
||||
{
|
||||
darkTimer?.Kill();
|
||||
|
|
|
|||
|
|
@ -57,13 +57,21 @@ namespace src.player.skills
|
|||
if (playerPawn?.CBodyComponent == null) return;
|
||||
if (!player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -72,22 +80,27 @@ namespace src.player.skills
|
|||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
ConcurrentBag<(string, string)> menuItems = [];
|
||||
foreach (var enemy in enemies)
|
||||
{
|
||||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
||||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy?.Index);
|
||||
if (enemyInfo == null) continue;
|
||||
|
||||
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
|
||||
if (skillData == null) continue;
|
||||
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||
|
||||
menuItems.Add(($"\u202A{enemy!.PlayerName}\u202C : {playerEvent.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||
}
|
||||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -103,11 +116,14 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo != null)
|
||||
{
|
||||
playerInfo.Skill = Skills.None;
|
||||
playerInfo.SpecialSkill = skillName;
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deactivator_player_info", enemy.PlayerName));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("deactivator_player_info", enemy.PlayerName));
|
||||
}
|
||||
|
||||
if (enemyInfo != null)
|
||||
|
|
@ -115,7 +131,11 @@ namespace src.player.skills
|
|||
Instance.SkillAction(enemyInfo.Skill.ToString(), "DisableSkill", [enemy]);
|
||||
enemyInfo.SpecialSkill = enemyInfo.Skill;
|
||||
enemyInfo.Skill = Skills.None;
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("deactivator_enemy_info"));
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("deactivator_enemy_info"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ namespace src.player.skills
|
|||
{
|
||||
foreach (var playerIndex in deafPlayers.Keys)
|
||||
{
|
||||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
var player = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
|
||||
if (player == null || !player.IsValid) continue;
|
||||
um.Recipients.Remove(player);
|
||||
}
|
||||
|
|
@ -66,19 +66,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -86,8 +94,11 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deaf_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("deaf_enemy_info"));
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("deaf_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("deaf_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -96,6 +107,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -103,7 +117,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -111,6 +125,11 @@ namespace src.player.skills
|
|||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
deafPlayers.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("deaf_disable_info"));
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,12 +59,15 @@ namespace src.player.skills
|
|||
if (playerPawn?.CBodyComponent == null) return;
|
||||
if (!player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
string enemyId = commands[0];
|
||||
var enemy = Utilities.GetPlayers().FirstOrDefault(p => p.Index.ToString() == enemyId);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -73,7 +76,10 @@ namespace src.player.skills
|
|||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p != player && p.IsValid && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid && p != player && p.PlayerPawn?.Value?.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
ConcurrentBag<string> skills = [];
|
||||
|
|
@ -87,7 +93,7 @@ namespace src.player.skills
|
|||
if (skillData == null) continue;
|
||||
|
||||
skills.Add(skillData.Skill.ToString());
|
||||
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||
menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {playerEvent.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
|
||||
}
|
||||
|
||||
int ctSkills = Event.counterterroristSkills.Count(s => skills.Contains(s.Name));
|
||||
|
|
@ -100,11 +106,11 @@ namespace src.player.skills
|
|||
}
|
||||
|
||||
SkillUtils.CreateMenu(player, menuItems);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName)}",
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{playerEvent.GetSkillName(skillName)}{ChatColors.Lime}: {playerEvent.GetSkillDescription(skillName)}",
|
||||
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -121,6 +127,9 @@ namespace src.player.skills
|
|||
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
|
||||
if (playerInfo == null || enemyInfo == null) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemySkill = enemyInfo.Skill;
|
||||
bool ctSkill = Event.counterterroristSkills.Any(s => s.Name == enemySkill.ToString());
|
||||
bool ttSkill = Event.terroristSkills.Any(s => s.Name == enemySkill.ToString());
|
||||
|
|
@ -135,8 +144,10 @@ namespace src.player.skills
|
|||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
Instance.SkillAction(skillName.ToString(), "EnableSkill", [player]);
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("thief_incorrect_skill", enemyName));
|
||||
if (!player.IsBot)
|
||||
Instance.SkillAction(skillName.ToString(), "EnableSkill", [player]);
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("thief_incorrect_skill", enemyName));
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
return;
|
||||
}
|
||||
|
|
@ -160,7 +171,7 @@ namespace src.player.skills
|
|||
else
|
||||
Instance?.SkillAction(enemySkill.ToString(), "EnableSkill", [player]);
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("duplicator_player_info", enemy.PlayerName));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("duplicator_player_info", enemy.PlayerName));
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffb73b", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||
|
|
|
|||
|
|
@ -28,24 +28,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
uint playerIndex = player.Index;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
var skill = SkillData.Skills.FirstOrDefault(s => player.GetSkillName(s.Skill).Equals(commands[0], StringComparison.OrdinalIgnoreCase) || s.Skill.ToString().Equals(commands[0], StringComparison.OrdinalIgnoreCase));
|
||||
if (skill == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("skill_not_found_setskill"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("skill_not_found_setskill"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (skill.Skill == skillName && !TakeMoney(player))
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("gambler_no_money"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("gambler_no_money"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -96,9 +99,12 @@ namespace src.player.skills
|
|||
skills.Remove(firstSkill);
|
||||
var secondSkill = skills[Instance.Random.Next(skills.Count)];
|
||||
|
||||
ConcurrentBag<(string, string)> menuItems = [(player.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
|
||||
(player.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
|
||||
SkillUtils.CreateMenu(player, menuItems, (player.GetTranslation("gambler_more", SkillsInfo.GetValue<int>(skillName, "refreshPrice")), skillName.ToString(), false));
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
ConcurrentBag<(string, string)> menuItems = [(playerEvent.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
|
||||
(playerEvent.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
|
||||
SkillUtils.CreateMenu(player, menuItems, (playerEvent.GetTranslation("gambler_more", SkillsInfo.GetValue<int>(skillName, "refreshPrice")), skillName.ToString(), false));
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
|
@ -56,30 +55,54 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
glitchedPlayers.TryAdd(enemy.Index, 0);
|
||||
playersToTarget[player.Index] = enemy.Index;
|
||||
|
||||
enemy.ReplicateConVar("sv_disable_radar", "1");
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
enemyEvent.ReplicateConVar("sv_disable_radar", "1");
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("glitch_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("glitch_enemy_info"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("glitch_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("glitch_enemy_info"));
|
||||
}
|
||||
|
||||
public static void BotTakeover(EventBotTakeover @event)
|
||||
{
|
||||
var bot = PlayerManager.GetPlayerEvent(@event.Botid);
|
||||
if (bot == null || !bot.IsValid) return;
|
||||
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!glitchedPlayers.ContainsKey(bot.Index)) return;
|
||||
|
||||
player.ReplicateConVar("sv_disable_radar", "1");
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -88,6 +111,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -95,14 +121,14 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
var target = Utilities.GetPlayerFromIndex((int)targetIndex);
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid)
|
||||
target.ReplicateConVar("sv_disable_radar", "0");
|
||||
glitchedPlayers.TryRemove(targetIndex, out _);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
|
@ -19,25 +20,25 @@ namespace src.player.skills
|
|||
|
||||
public static void OnTick()
|
||||
{
|
||||
float cooldown = SkillsInfo.GetValue<float>(skillName, "cooldown");
|
||||
if (Server.TickCount % (int)(cooldown * 64) != 0) return;
|
||||
int cooldown = (int)(SkillsInfo.GetValue<float>(skillName, "cooldown") * 64);
|
||||
if (Server.TickCount % cooldown != 0) return;
|
||||
|
||||
if (players.IsEmpty || jRandomSkills.Instance.GameRules?.FreezePeriod == true) return;
|
||||
int damage = SkillsInfo.GetValue<int>(skillName, "damage");
|
||||
|
||||
foreach (var player in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PawnIsAlive))
|
||||
foreach (var player in Utilities.GetPlayers().Where(p => p != null && p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
|
||||
{
|
||||
var playerEvent = PlayerManager.GetPlayerEvent(player);
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) continue;
|
||||
|
||||
var pawn = playerEvent.PlayerPawn.Value;
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) continue;
|
||||
|
||||
bool hasC4 = pawn.WeaponServices.MyWeapons.Any(w => w.Value?.DesignerName == "weapon_c4");
|
||||
|
||||
if (!hasC4) continue;
|
||||
|
||||
SkillUtils.TakeHealth(pawn, damage);
|
||||
player.ExecuteClientCommand("play sounds/player/burn_damage1");
|
||||
playerEvent?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -52,7 +53,7 @@ namespace src.player.skills
|
|||
player.PrintToCenterAlert(player.GetTranslation("hotbomb_hint"));
|
||||
}
|
||||
|
||||
private static void ChangeC4Color()
|
||||
private static void ChangeC4Color(Color color)
|
||||
{
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
|
|
@ -62,7 +63,7 @@ namespace src.player.skills
|
|||
var bomb = bombEntities.FirstOrDefault();
|
||||
if (bomb == null) return;
|
||||
|
||||
bomb.Render = Color.Red;
|
||||
bomb.Render = color;
|
||||
Utilities.SetStateChanged(bomb, "CBaseModelEntity", "m_clrRender");
|
||||
});
|
||||
}
|
||||
|
|
@ -83,8 +84,8 @@ namespace src.player.skills
|
|||
{
|
||||
if (players.IsEmpty)
|
||||
{
|
||||
ChangeC4Color();
|
||||
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PawnIsAlive))
|
||||
ChangeC4Color(Color.Red);
|
||||
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
|
||||
enemy.PrintToCenterAlert(enemy.GetTranslation("hotbomb_hint"));
|
||||
}
|
||||
|
||||
|
|
@ -94,6 +95,13 @@ namespace src.player.skills
|
|||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
players.TryRemove(player.Index, out _);
|
||||
|
||||
if (players.IsEmpty && !SkillUtils.IsFreezeTime())
|
||||
{
|
||||
ChangeC4Color(Color.White);
|
||||
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
|
||||
enemy.PrintToCenterAlert(enemy.GetTranslation("hotbomb_disable"));
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#baf081", CsTeam onlyTeam = CsTeam.CounterTerrorist, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, float cooldown = 1, int damage = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
|
@ -27,7 +26,12 @@ namespace src.player.skills
|
|||
{
|
||||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (player == null || !player.IsValid) continue;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
|
||||
if (playerEvent == null || !playerEvent.IsValid) continue;
|
||||
|
||||
SetCrosshair(player, true);
|
||||
SetCrosshair(playerEvent, true);
|
||||
}
|
||||
jammedPlayers.Clear();
|
||||
jammerToTarget.Clear();
|
||||
|
|
@ -59,48 +63,79 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
jammedPlayers.TryAdd(enemy.Index, 0);
|
||||
jammerToTarget[player.Index] = enemy.Index;
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
SetCrosshair(enemy, false);
|
||||
SetCrosshair(enemyEvent, false);
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jammer_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("jammer_enemy_info"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("jammer_player_info", player.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("jammer_enemy_info"));
|
||||
}
|
||||
|
||||
private static void SetCrosshair(CCSPlayerController player, bool enabled)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid) return;
|
||||
|
||||
pawn.HideHUD = (uint)(enabled
|
||||
? (pawn.HideHUD & ~(1 << 8))
|
||||
: (pawn.HideHUD | (1 << 8)));
|
||||
|
||||
Utilities.SetStateChanged(pawn, "CBasePlayerPawn", "m_iHideHUD");
|
||||
}
|
||||
|
||||
public static void BotTakeover(EventBotTakeover @event)
|
||||
{
|
||||
var bot = PlayerManager.GetPlayerEvent(@event.Botid);
|
||||
if (bot == null || !bot.IsValid) return;
|
||||
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!jammedPlayers.ContainsKey(bot.Index)) return;
|
||||
|
||||
SetCrosshair(bot, false);
|
||||
SetCrosshair(player, false);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -108,16 +143,23 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (jammerToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
var target = Utilities.GetPlayerFromIndex((int)targetIndex);
|
||||
if (target != null && target.IsValid)
|
||||
SetCrosshair(target, true);
|
||||
var target1 = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
var target2 = Utilities.GetPlayerFromIndex((int)targetIndex);
|
||||
if (target1 != null && target1.IsValid && target2 != null && target2.IsValid)
|
||||
{
|
||||
SetCrosshair(target1, true);
|
||||
SetCrosshair(target2, true);
|
||||
|
||||
if (target1.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target1.PrintToChat($" {ChatColors.Green}" + target1.GetTranslation("jammer_disable_info"));
|
||||
}
|
||||
jammedPlayers.TryRemove(targetIndex, out _);
|
||||
}
|
||||
|
||||
|
|
@ -126,10 +168,15 @@ namespace src.player.skills
|
|||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var bot = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (bot == null || !bot.IsValid) return;
|
||||
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
SetCrosshair(bot, true);
|
||||
SetCrosshair(player, true);
|
||||
|
||||
jammedPlayers.TryRemove(player.Index, out _);
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,19 +71,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null || !enemy.IsValid || enemy.PlayerPawn.Value == null || !enemy.PlayerPawn.Value.IsValid)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -91,8 +99,11 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jumpban_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("jumpban_enemy_info"));
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("jumpban_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("jumpban_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -101,6 +112,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -108,7 +122,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -119,6 +133,11 @@ namespace src.player.skills
|
|||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
bannedPlayers.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("jumpban_disable_info"));
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using static src.jRandomSkills;
|
||||
using System.Collections.Concurrent;
|
||||
using src.utils;
|
||||
|
||||
|
|
@ -41,29 +40,42 @@ namespace src.player.skills
|
|||
public static void TypeSkill(CCSPlayerController player, string[] commands)
|
||||
{
|
||||
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
SwapHealth(player, enemy);
|
||||
playerInfo.SkillUsed = true;
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("lifeswap_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("lifeswap_enemy_info"));
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("lifeswap_player_info", enemy.PlayerName));
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent != null && enemyEvent.IsValid)
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("lifeswap_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -55,31 +55,56 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}" );
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}" );
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
playersFOV.AddOrUpdate(enemy.Index, enemy.DesiredFOV, (k, v) => enemy.DesiredFOV);
|
||||
playersToTarget[player.Index] = enemy.Index;
|
||||
|
||||
enemy.DesiredFOV = SkillsInfo.GetValue<uint>(skillName, "customFOV");
|
||||
Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
enemyEvent.DesiredFOV = SkillsInfo.GetValue<uint>(skillName, "customFOV");
|
||||
Utilities.SetStateChanged(enemyEvent, "CBasePlayerController", "m_iDesiredFOV");
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("magnifier_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("magnifier_enemy_info"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("magnifier_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("magnifier_enemy_info"));
|
||||
}
|
||||
|
||||
public static void BotTakeover(EventBotTakeover @event)
|
||||
{
|
||||
var bot = PlayerManager.GetPlayerEvent(@event.Botid);
|
||||
if (bot == null || !bot.IsValid) return;
|
||||
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!playersFOV.ContainsKey(bot.Index)) return;
|
||||
|
||||
player.DesiredFOV = SkillsInfo.GetValue<uint>(skillName, "customFOV");
|
||||
Utilities.SetStateChanged(player, "CBasePlayerController", "m_iDesiredFOV");
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -88,6 +113,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Team != player.Team && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -95,7 +123,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -104,7 +132,7 @@ namespace src.player.skills
|
|||
|
||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
var target = Utilities.GetPlayerFromIndex((int)targetIndex);
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid)
|
||||
if (playersFOV.TryGetValue(targetIndex, out uint fov))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -40,17 +40,26 @@ namespace src.player.skills
|
|||
public static void TypeSkill(CCSPlayerController player, string[] commands)
|
||||
{
|
||||
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
|
|
@ -61,8 +70,11 @@ namespace src.player.skills
|
|||
|
||||
SwapMoney(player, enemy);
|
||||
playerInfo.SkillUsed = true;
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("moneyswap_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("moneyswap_enemy_info"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("moneyswap_player_info", enemy.PlayerName));
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent != null && enemyEvent.IsValid)
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("moneyswap_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ namespace src.player.skills
|
|||
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
||||
if (player.PlayerPawn?.Value == null || player.PlayerPawn?.Value?.Health <= 0)
|
||||
invisiblePlayers.TryRemove(player.Index, out _);
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
|
|
@ -181,6 +181,11 @@ namespace src.player.skills
|
|||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (player.PlayerPawn?.Value?.Health <= 0)
|
||||
return;
|
||||
|
||||
Server.PrintToChatAll($"Update ninja for {player.PlayerName}");
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,8 +29,12 @@ namespace src.player.skills
|
|||
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % (int)(64 * SkillsInfo.GetValue<float>(skillName, "Cooldown")) == 0)
|
||||
int cooldown = (int)(64 * SkillsInfo.GetValue<float>(skillName, "Cooldown"));
|
||||
|
||||
if (Server.TickCount % cooldown == 0)
|
||||
{
|
||||
int cooldown2 = cooldown * 2;
|
||||
|
||||
foreach (var playerIndex in poisonedPlayers.Keys)
|
||||
{
|
||||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
|
|
@ -39,8 +43,13 @@ namespace src.player.skills
|
|||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid) continue;
|
||||
|
||||
if (Jester.GetJesterInfo(playerIndex)?.Active == true) continue;
|
||||
|
||||
if (pawn.Health <= SkillsInfo.GetValue<int>(skillName, "MinHealth")) continue;
|
||||
SkillUtils.TakeHealth(pawn, SkillsInfo.GetValue<int>(skillName, "Damage"));
|
||||
|
||||
if (Server.TickCount % cooldown2 == 0)
|
||||
PlayerManager.GetPlayerFromEvent(player)?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -64,19 +73,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -84,8 +101,11 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("poison_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("poison_enemy_info"));
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("poison_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("poison_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -94,6 +114,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -101,7 +124,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -109,6 +132,11 @@ namespace src.player.skills
|
|||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
poisonedPlayers.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("poison_disable_info"));
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,13 @@ namespace src.player.skills
|
|||
private static readonly object setLock = new();
|
||||
private static readonly string[] disabledWeapons =
|
||||
[
|
||||
"ak47", "m4a1", "m4a4", "m4a1_silencer", "famas", "galilar", "aug", "sg553", "mp9", "mac10", "bizon", "mp7", "ump45",
|
||||
"p90", "mp5sd", "ssg08", "awp", "scar20", "g3sg1", "nova", "xm1014", "mag7", "sawedoff", "m249", "negev"
|
||||
"weapon_ak47", "weapon_m4a4", "weapon_m4a1", "weapon_m4a1_silencer",
|
||||
"weapon_famas", "weapon_galilar", "weapon_aug", "weapon_sg553",
|
||||
"weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7",
|
||||
"weapon_ump45", "weapon_p90", "weapon_mp5sd", "weapon_ssg08",
|
||||
"weapon_awp", "weapon_scar20", "weapon_g3sg1", "weapon_nova",
|
||||
"weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249",
|
||||
"weapon_negev", "weapon_sg556"
|
||||
];
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -37,11 +42,14 @@ namespace src.player.skills
|
|||
|
||||
public static void WeaponEquip(EventItemEquip @event)
|
||||
{
|
||||
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
var player = @event.Userid;
|
||||
var playerEvent = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
var weapon = @event.Item;
|
||||
if (player == null || !player.IsValid) return;
|
||||
if (!bannedPlayers.ContainsKey(player.Index) || !disabledWeapons.Contains(weapon)) return;
|
||||
player.ExecuteClientCommand("slot3");
|
||||
|
||||
if (player == null || !player.IsValid || playerEvent == null || !playerEvent.IsValid) return;
|
||||
if (!bannedPlayers.ContainsKey(playerEvent.Index) || !disabledWeapons.Contains("weapon_" + weapon)) return;
|
||||
|
||||
SetWeaponAttack(player, true);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
|
|
@ -66,39 +74,40 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
bannedPlayers.TryAdd(enemy.Index, 0);
|
||||
playersToTarget[player.Index] = enemy.Index;
|
||||
CheckWeapon(enemy);
|
||||
SetWeaponAttack(enemy, true);
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("primaryban_player_info", enemy.PlayerName));
|
||||
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("primaryban_enemy_info"));
|
||||
}
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
private static void CheckWeapon(CCSPlayerController player)
|
||||
{
|
||||
var activeWeapon = player.PlayerPawn.Value?.WeaponServices?.ActiveWeapon?.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid) return;
|
||||
if (activeWeapon.DesignerName == null || string.IsNullOrEmpty(activeWeapon.DesignerName)) return;
|
||||
|
||||
if (!bannedPlayers.ContainsKey(player.Index) || !disabledWeapons.Contains(activeWeapon.DesignerName?.Replace("weapon_", ""))) return;
|
||||
player.ExecuteClientCommand("slot3");
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("primaryban_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("primaryban_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
@ -107,6 +116,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -114,7 +126,7 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -122,6 +134,14 @@ namespace src.player.skills
|
|||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
bannedPlayers.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
{
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("primaryban_disable_info"));
|
||||
SetWeaponAttack(target, false);
|
||||
}
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
|
|
@ -131,9 +151,32 @@ namespace src.player.skills
|
|||
if (player == null || !player.IsValid) return;
|
||||
|
||||
bannedPlayers.TryRemove(player.Index, out _);
|
||||
SetWeaponAttack(player, false);
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
private static void SetWeaponAttack(CCSPlayerController? player, bool disableWeapon)
|
||||
{
|
||||
player = PlayerManager.GetPlayerEvent(player);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var pawn = player?.PlayerPawn?.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
|
||||
foreach (var weapon in pawn.WeaponServices.MyWeapons)
|
||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && !string.IsNullOrEmpty(weapon.Value.DesignerName))
|
||||
{
|
||||
string weaponName = weapon.Value.DesignerName;
|
||||
if (disabledWeapons.Contains(weaponName))
|
||||
{
|
||||
weapon.Value.NextPrimaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
||||
weapon.Value.NextSecondaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
|
||||
|
||||
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextPrimaryAttackTick");
|
||||
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextSecondaryAttackTick");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffc061", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,23 +73,26 @@ namespace src.player.skills
|
|||
if (playerPawn?.CBodyComponent == null) return;
|
||||
if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (commands == null || commands.Length == 0)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex))
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
if (enemy == null || !enemy.IsValid)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -100,11 +103,14 @@ namespace src.player.skills
|
|||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers()
|
||||
.Where(p => p != null
|
||||
&& p.PawnIsAlive
|
||||
&& p.Team != player.Team
|
||||
&& p.IsValid
|
||||
&& p.Team != player.Team
|
||||
&& p.PlayerPawn?.Value?.Health > 0
|
||||
&& p.Team != CsTeam.Spectator
|
||||
&& p.Team != CsTeam.None)
|
||||
.ToArray();
|
||||
|
|
@ -128,7 +134,7 @@ namespace src.player.skills
|
|||
border: !Utilities.GetPlayers().Any(p => p != null && p.Team == player.Team && p != player) ? "tb" : "t");
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
@ -167,8 +173,13 @@ namespace src.player.skills
|
|||
var p = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (p == null || !p.IsValid) return;
|
||||
|
||||
Instance.SkillAction(skillName.ToString(), "EnableSkill", [p]);
|
||||
p.PrintToChat($" {ChatColors.Red}" + p.GetTranslation("thief_incorrect_skill", e.PlayerName));
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(p);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (!player.IsBot)
|
||||
Instance.SkillAction(skillName.ToString(), "EnableSkill", [p]);
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("thief_incorrect_skill", e.PlayerName));
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
return;
|
||||
}
|
||||
|
|
@ -182,6 +193,9 @@ namespace src.player.skills
|
|||
var p = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (p == null || !p.IsValid) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(p);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var pInfo = PlayerManager.GetPlayerByIndex(p.Index);
|
||||
if (pInfo == null) return;
|
||||
|
||||
|
|
@ -191,7 +205,7 @@ namespace src.player.skills
|
|||
SkillUtils.CloseMenu(p);
|
||||
Instance.SkillAction(enemySkill.ToString(), "EnableSkill", [p]);
|
||||
|
||||
p.PrintToChat($" {ChatColors.Green}" + p.GetTranslation("thief_player_info", e.PlayerName));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("thief_player_info", e.PlayerName));
|
||||
|
||||
if (SkillsInfo.GetValue<bool>(enemySkill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
||||
{
|
||||
|
|
@ -218,11 +232,14 @@ namespace src.player.skills
|
|||
var e = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
if (e == null || !e.IsValid) return;
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(e);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
Instance.SkillAction(enemySkill.ToString(), "DisableSkill", [e]);
|
||||
|
||||
eInfo.SpecialSkill = enemySkill;
|
||||
eInfo.Skill = Skills.None;
|
||||
e.PrintToChat($" {ChatColors.Red}" + e.GetTranslation("thief_enemy_info"));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("thief_enemy_info"));
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
|
|
@ -44,14 +47,20 @@ namespace src.player.skills
|
|||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
infectedPlayers.TryRemove(targetIndex, out _);
|
||||
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}{target.GetTranslation("wildthrow_disable_info")}");
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
|
|
@ -100,19 +109,27 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex)) {
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -120,7 +137,12 @@ namespace src.player.skills
|
|||
playersToTarget[player.Index] = enemy.Index;
|
||||
|
||||
playerInfo.SkillUsed = true;
|
||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("wildthrow_player_info", enemy.PlayerName));
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("wildthrow_player_info", enemy.PlayerName));
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("wildthrow_enemy_info"));
|
||||
}
|
||||
|
||||
public static void OnEntitySpawned(CEntityInstance @event)
|
||||
|
|
@ -137,6 +159,9 @@ namespace src.player.skills
|
|||
if (pawn.Controller.Value == null || !pawn.Controller.Value.IsValid) return;
|
||||
var player = pawn.Controller.Value.As<CCSPlayerController>();
|
||||
|
||||
player = PlayerManager.GetPlayerEvent(player);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!infectedPlayers.ContainsKey(player.Index)) return;
|
||||
|
||||
Server.NextFrame(() => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue