v1.2.2.b2
## GENERAL - Updated CSS to version 1.0.369. - Upgraded the project from .NET 8.0 to .NET 10.0. - Updated Turkish language translation by @ByDexterTR. - Added Russian language translation by @213sdfsdgf. - Fixed an issue with incorrect display of Arabic nicknames. - Used ForceFullUpdate to resolve the "FATAL ERROR: CopyExistingEntity" crash. - Disabled stale HandleCommandDrop hook to avoid crashes when a player joins a team (thanks to @vladimir214sd). - Added new signatures to gamedata. - Added the ability to configure the number of grenades for every skill that uses grenades as part of its ability (e.g., Miner, AntyFlash, MagneticDecoy, etc.). ## SKILL IMPROVEMENTS - Re-Zombie: -- Fixed weapon switching issues when a player is holding a Zeus and a knife. -- Weapons are now removed for bots in zombie mode. - Ghost: -- Blocked the ability to use the Zeus. - Thorns: -- Added a configurable maximum health limit (37 HP) for the damage that can be reflected. - Second Life / Phoenix / Re-Zombie: -- Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly. - Ghost / Chicken: -- Blocked the ability to use the SG556 (`weapon_sg556`). - Wallhack: -- Fixed a bug that caused temporary enemy highlighting right after death. - Cypher: -- Added camera position persistence. - God Mode: -- Fixed an issue with permanent immortality triggering after reaching exactly 0 HP. - Weapons Swap: -- The ammo count is now also transferred when weapons are swapped. - Muhammed: -- Renamed the skill to "DeathBomb". - Spectator: -- Fixed a bug where a player with the Chicken skill would still display as a ragdoll after death when spectated. - Friendly Fire: -- The skill now works even when the server's mp_friendlyfire setting is set to 0. - Baseball: -- Disabled teammate killing.
This commit is contained in:
parent
cba834e8f0
commit
91761f7376
84 changed files with 6894 additions and 1689 deletions
|
|
@ -11,7 +11,7 @@ namespace src.player.skills
|
|||
public class ReZombie : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.ReZombie;
|
||||
private static readonly ConcurrentDictionary<uint, byte> zombies = [];
|
||||
private static readonly ConcurrentDictionary<uint, int> zombies = [];
|
||||
private static readonly object setLock = new();
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -76,25 +76,57 @@ namespace src.player.skills
|
|||
var pawn = victim.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid) return;
|
||||
|
||||
if (zombies.ContainsKey(victim.Index)) return;
|
||||
bool isZombie = zombies.TryGetValue(victim.Index, out int tick);
|
||||
|
||||
if (isZombie && tick + 4 < Server.TickCount)
|
||||
return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
|
||||
if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
lock (setLock)
|
||||
var zombieHealth = SkillsInfo.GetValue<int>(skillName, "zombieHealth");
|
||||
|
||||
if (pawn.Health <= 0)
|
||||
{
|
||||
var zombieHealth = SkillsInfo.GetValue<int>(skillName, "zombieHealth");
|
||||
bool isBlock = victim.TeamChanged;
|
||||
|
||||
zombies.TryAdd(victim.Index, 0);
|
||||
zombies[victim.Index] = Server.TickCount;
|
||||
|
||||
if (isBlock) return;
|
||||
|
||||
DropAllBotWeapons(victim);
|
||||
SetPlayerColor(pawn, false);
|
||||
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
|
||||
|
||||
victim.ExecuteClientCommand("slot3");
|
||||
}
|
||||
else if (isZombie && tick + 4 > Server.TickCount)
|
||||
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
|
||||
}
|
||||
|
||||
private static void DropAllBotWeapons(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid || !player.IsBot) return;
|
||||
|
||||
var pawn = player.PlayerPawn?.Value;
|
||||
if (pawn == null || !pawn.IsValid) return;
|
||||
|
||||
var itemServices = pawn.ItemServices?.As<CCSPlayer_ItemServices>();
|
||||
if (itemServices == null || pawn.WeaponServices?.MyWeapons == null) return;
|
||||
|
||||
foreach (var item in pawn.WeaponServices.MyWeapons)
|
||||
{
|
||||
if (item == null || !item.IsValid) continue;
|
||||
|
||||
var weapon = item.Value;
|
||||
if (weapon == null || !weapon.IsValid) continue;
|
||||
|
||||
var weaponName = weapon.DesignerName;
|
||||
if (string.IsNullOrEmpty(weaponName) || weaponName.Contains("knife") || weaponName.Contains("bayonet"))
|
||||
continue;
|
||||
|
||||
SkillUtils.SafeKillEntity<CBasePlayerWeapon>(weapon.Index);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool OnWeaponCanAcquire(DynamicHook hook, CCSPlayerController player, CEconItemView econItem, CCSWeaponBaseVData vdata)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue