-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEventHandlers.cs
More file actions
103 lines (83 loc) · 2.96 KB
/
EventHandlers.cs
File metadata and controls
103 lines (83 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System.Collections.Generic;
using Exiled.API.Features;
using Exiled.Events.EventArgs.Player;
using MEC;
using PlayerRoles;
using ProjectSCRAMBLE.Extensions;
using UnityEngine;
using PlayerEvent = Exiled.Events.Handlers.Player;
using ServerEvent = Exiled.Events.Handlers.Server;
using static ProjectSCRAMBLE.Methods;
using static ProjectSCRAMBLE.ProjectSCRAMBLE;
namespace ProjectSCRAMBLE
{
public class EventHandlers
{
public HashSet<Player> DirtyPlayers { get; set; } = [];
public void Subscribe()
{
ServerEvent.WaitingForPlayers += OnWaitingforPlayers;
PlayerEvent.Verified += OnVerified;
PlayerEvent.Spawned += OnChangedRole;
PlayerEvent.ChangingSpectatedPlayer += OnChangingSpectatedPlayer;
}
public void Unsubscribe()
{
ServerEvent.WaitingForPlayers -= OnWaitingforPlayers;
PlayerEvent.Verified -= OnVerified;
PlayerEvent.Spawned -= OnChangedRole;
PlayerEvent.ChangingSpectatedPlayer -= OnChangingSpectatedPlayer;
}
private void OnWaitingforPlayers()
{
DirtyPlayers.Clear();
Scp96Censors.Clear();
foreach (HashSet<CoroutineHandle> handles in Coroutines.Values)
{
foreach(CoroutineHandle handle in handles)
{
Timing.KillCoroutines(handle);
}
}
Coroutines.Clear();
}
public void OnVerified(VerifiedEventArgs ev)
{
foreach (GameObject censor in Scp96Censors.Values)
{
ev.Player.HideNetworkObject(censor);
}
}
private void OnChangedRole(SpawnedEventArgs ev)
{
if (DirtyPlayers.Contains(ev.Player))
{
SCRAMBLE.DeObfuscateScp96s(ev.Player);
DirtyPlayers.Remove(ev.Player);
}
if (ev.OldRole == RoleTypeId.Scp096 && ev.Player.Role != RoleTypeId.Scp096)
{
RemoveCensor(ev.Player);
Log.Debug($"Scp96:{ev.Player.Nickname} removed censor");
}
else if (ev.Player.Role == RoleTypeId.Scp096)
{
Timing.CallDelayed(0.5f, () => AddCensor(ev.Player));
Log.Debug($"Scp96:{ev.Player.Nickname} added censor");
}
}
private void OnChangingSpectatedPlayer(ChangingSpectatedPlayerEventArgs ev)
{
if (ev.OldTarget != null && SCRAMBLE.ActiveScramblePlayers.Contains(ev.OldTarget))
{
SCRAMBLE.DeObfuscateScp96s(ev.Player);
DirtyPlayers.Remove(ev.Player);
}
if (ev.NewTarget != null && SCRAMBLE.ActiveScramblePlayers.Contains(ev.NewTarget))
{
SCRAMBLE.ObfuscateScp96s(ev.Player);
DirtyPlayers.Add(ev.Player);
}
}
}
}