Add optional full force client update path
- Updated markdown files. - Added FullForceUpdate as an optional feature. - Jester: Fixes crashes that occur when a skill is being disabled.
This commit is contained in:
parent
559e7be23f
commit
e490b7f3df
20 changed files with 353 additions and 28 deletions
|
|
@ -1093,24 +1093,31 @@ namespace src.player
|
|||
if (randomSkill.Skill == Skills.Illiterate)
|
||||
Illiterate.Enable();
|
||||
|
||||
var playerIndex = player.Index;
|
||||
Instance?.AddTimer(.2f, () =>
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
var playerTarget = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (playerTarget == null || !playerTarget.IsValid) return;
|
||||
|
||||
if (randomSkill.Display)
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}",
|
||||
border: !Utilities.GetPlayers().Any(p => p != null && p.IsValid && p.Team == player.Team && p != player) ? "tb" : "t");
|
||||
SkillUtils.PrintToChat(playerTarget, $"{ChatColors.DarkRed}{playerTarget.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {playerTarget.GetSkillDescription(randomSkill.Skill)}",
|
||||
border: !Utilities.GetPlayers().Any(p => p != null && p.IsValid && p.Team == playerTarget.Team && p != playerTarget) ? "tb" : "t");
|
||||
|
||||
if (SkillsInfo.GetValue<bool>(randomSkill.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
||||
Instance?.AddTimer(Config.LoadedConfig.SkillTimeBeforeStart, () =>
|
||||
{
|
||||
if (PlayerManager.GetPlayerByIndex(player!.Index)?.Skill != randomSkill.Skill) return;
|
||||
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [player]);
|
||||
var playerTarget = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (playerTarget == null || !playerTarget.IsValid) return;
|
||||
|
||||
if (PlayerManager.GetPlayerByIndex(playerTarget!.Index)?.Skill != randomSkill.Skill) return;
|
||||
Debug.WriteToDebug("Enabling skill after freeze time: " + randomSkill.Skill);
|
||||
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [playerTarget]);
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
else
|
||||
{
|
||||
if (PlayerManager.GetPlayerByIndex(player!.Index)?.Skill != randomSkill.Skill) return;
|
||||
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [player]);
|
||||
if (PlayerManager.GetPlayerByIndex(playerTarget!.Index)?.Skill != randomSkill.Skill) return;
|
||||
Debug.WriteToDebug("Enabling skill: " + randomSkill.Skill);
|
||||
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [playerTarget]);
|
||||
}
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,8 @@ namespace src.player.skills
|
|||
|
||||
invisiblePlayers.TryAdd(player.Index, 0);
|
||||
SkillUtils.SetPlayerInvisibility(player, .5f);
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -106,6 +106,8 @@ namespace src.player.skills
|
|||
|
||||
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
||||
CreatePlayerPosProp(player);
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
private static void CreatePlayerPosProp(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ namespace src.player.skills
|
|||
|
||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||
SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -145,6 +145,8 @@ namespace src.player.skills
|
|||
|
||||
mainSkillTimer ??= Instance.AddTimer(2.5f, () => UpdateAllTrails(),
|
||||
CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
private static void UpdateAllTrails()
|
||||
|
|
|
|||
|
|
@ -53,18 +53,17 @@ namespace src.player.skills
|
|||
var jester = GetJesterInfo(player.Index);
|
||||
if (jester == null) return;
|
||||
|
||||
jester.Generation++;
|
||||
jester.Active = false;
|
||||
if (jester.Timer != null)
|
||||
{
|
||||
jester.Timer.Kill();
|
||||
jester.Timer = null;
|
||||
}
|
||||
jester.Timer = null;
|
||||
|
||||
jesters.TryRemove(player.Index, out _);
|
||||
|
||||
Server.NextWorldUpdate(() =>
|
||||
{
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
SetPlayerColor(player, true);
|
||||
jesters.TryRemove(player.Index, out _);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -154,23 +153,37 @@ namespace src.player.skills
|
|||
|
||||
uint playerIndex = player.Index;
|
||||
|
||||
jesters.TryAdd(playerIndex, new JesterInfo {
|
||||
PlayerIndex = playerIndex,
|
||||
Active = false,
|
||||
Timer = Instance.AddTimer(wait, () => ChangeMode(playerIndex), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE)
|
||||
});
|
||||
if (!jesters.TryGetValue(playerIndex, out var jester))
|
||||
{
|
||||
jester = new JesterInfo
|
||||
{
|
||||
PlayerIndex = playerIndex,
|
||||
Active = false,
|
||||
Generation = 0
|
||||
};
|
||||
|
||||
jesters[playerIndex] = jester;
|
||||
}
|
||||
|
||||
jester.Generation++;
|
||||
int generation = jester.Generation;
|
||||
|
||||
jester.Timer = Instance.AddTimer(wait, () =>
|
||||
{
|
||||
if (!jesters.TryGetValue(playerIndex, out var info))
|
||||
return;
|
||||
|
||||
if (info.Generation != generation)
|
||||
return;
|
||||
|
||||
ChangeMode(playerIndex);
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
private static void ChangeMode(uint playerIndex, bool? forceActive = null)
|
||||
{
|
||||
if (!jesters.TryGetValue(playerIndex, out var jester)) return;
|
||||
|
||||
if (jester.Timer != null)
|
||||
{
|
||||
jester.Timer?.Kill();
|
||||
jester.Timer = null;
|
||||
}
|
||||
|
||||
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
|
||||
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
||||
{
|
||||
|
|
@ -194,7 +207,19 @@ namespace src.player.skills
|
|||
var maxTime = SkillsInfo.GetValue<float>(skillName, "maxTime");
|
||||
float wait = (float)Instance.Random.NextDouble() * (maxTime - minTime) + minTime;
|
||||
|
||||
jester.Timer = Instance.AddTimer(wait, () => ChangeMode(playerIndex), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
jester.Generation++;
|
||||
int generation = jester.Generation;
|
||||
|
||||
jester.Timer = Instance.AddTimer(wait, () =>
|
||||
{
|
||||
if (!jesters.TryGetValue(playerIndex, out var info))
|
||||
return;
|
||||
|
||||
if (info.Generation != generation)
|
||||
return;
|
||||
|
||||
ChangeMode(playerIndex);
|
||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
private static void SetPlayerColor(CCSPlayerController? player, bool forceDisable = false)
|
||||
|
|
@ -205,9 +230,9 @@ namespace src.player.skills
|
|||
if (pawn == null || !pawn.IsValid) return;
|
||||
|
||||
var jester = GetJesterInfo(player.Index);
|
||||
if (jester == null) return;
|
||||
if (!forceDisable && jester == null) return;
|
||||
|
||||
var color = jester.Active && !forceDisable ? Color.FromArgb(255, 128, 0, 128) : Color.FromArgb(255, 255, 255, 255);
|
||||
var color = jester?.Active == true && !forceDisable ? Color.FromArgb(255, 128, 0, 128) : Color.FromArgb(255, 255, 255, 255);
|
||||
pawn.Render = color;
|
||||
Utilities.SetStateChanged(pawn, "CBaseModelEntity", "m_clrRender");
|
||||
}
|
||||
|
|
@ -249,6 +274,7 @@ namespace src.player.skills
|
|||
{
|
||||
public required uint PlayerIndex { get; set; }
|
||||
public bool Active { get; set; } = false;
|
||||
public int Generation { get; set; } = 0;
|
||||
public Timer? Timer { get; set; } = null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ namespace src.player.skills
|
|||
|
||||
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
|
||||
CreatePlayerPosProp(player);
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ namespace src.player.skills
|
|||
public static void EnableSkill(CCSPlayerController _)
|
||||
{
|
||||
Event.EnableTransmit();
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -115,6 +115,8 @@ namespace src.player.skills
|
|||
|
||||
if (glows.IsEmpty)
|
||||
SetGlowEffectForAll();
|
||||
|
||||
SkillUtils.ForceFullUpdateToAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue