-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathNotifier.cs
105 lines (83 loc) · 3.06 KB
/
Notifier.cs
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
104
105
using BrokeProtocol.Collections;
using BrokeProtocol.Entities;
using BrokeProtocolClient.settings;
using BrokeProtocolClient.utils;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace BrokeProtocolClient.modules.misc
{
class Notifier : Module
{
BooleanSetting onEnterExitView = new BooleanSetting("Entering and leaving your view", true);
BooleanSetting onDie = new BooleanSetting("Player dying", true);
List<ShPlayer> lastPlayers = new List<ShPlayer>();
IEnumerator CheckPlayersThread = null;
public Notifier() : base(Categories.Misc, "Notifier", "")
{
addSetting(onEnterExitView);
addSetting(onDie);
}
public override void onActivate()
{
if (CheckPlayersThread == null)
{
CheckPlayersThread = CheckPlayers();
getClient().StartCoroutine(CheckPlayersThread);
}
}
public override void onDeactivate()
{
if (CheckPlayersThread != null)
{
getClient().StopCoroutine(CheckPlayersThread);
}
}
IEnumerator CheckPlayers()
{
var delay = new WaitForSeconds(1f);
while (true)
{
yield return delay;
if (!onEnterExitView.isEnabled()) continue;
var local = getClient().ClManager.myPlayer;
if (!local) continue;
var players = PlayersInView();
var enteredPlayers = players.Except(lastPlayers);
var leftPlayers = lastPlayers.Except(players);
foreach (var player in enteredPlayers)
{
InfoUtils.Notify($"{player.displayName} has entered your view!", 3);
}
foreach (var player in leftPlayers)
{
InfoUtils.Notify($"{player.displayName} has left your view!", 3);
}
lastPlayers.Clear();
foreach (var player in PlayersInView())
{
lastPlayers.Add(player);
}
}
}
public void OnDie(ShPlayer player, ShPlayer attacker)
{
if (!onDie.isEnabled()) return;
if (!player.isHuman) return;
var local = getClient().ClManager.myPlayer;
if (!local) return;
string label;
if (attacker) label = $"{player.displayName} has been killed by {attacker.displayName}!";
else label = $"{player.displayName} has died!";
InfoUtils.Notify(label, 3);
}
IEnumerable<ShPlayer> PlayersInView()
{
return (from p in EntityCollections.Humans where p.isActiveAndEnabled where p != getClient().ClManager.myPlayer select p);
}
}
}