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
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue