Skip to content

Commit 5399dfb

Browse files
committed
New staff hiding feature and code cleanup!
1 parent 051dd3e commit 5399dfb

File tree

1 file changed

+171
-121
lines changed

1 file changed

+171
-121
lines changed

TrueWelcomer.cs

Lines changed: 171 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,60 @@
1-
using Newtonsoft.Json;
21
using Oxide.Core;
2+
using UnityEngine;
3+
using Newtonsoft.Json;
34
using Oxide.Core.Configuration;
45
using System.Collections.Generic;
5-
using UnityEngine;
66

7-
namespace Oxide.Plugins
8-
{
7+
namespace Oxide.Plugins {
98

10-
[Info("True Welcomer", "ItzNxthaniel", "1.0.2")]
9+
[Info("True Welcomer", "ItzNxthaniel", "1.1.0")]
1110
[Description("This plugin makes it easy to welcome new users and welcome back users rejoining! Also supports Disconnect Messages.")]
12-
public class TrueWelcomer : RustPlugin
13-
{
14-
#region // Vars/Fields \\
11+
public class TrueWelcomer : RustPlugin {
12+
13+
#region Vars/Fields
14+
1515
private static List<string> OnlinePlayers = new List<string>();
16-
#endregion
1716

18-
#region // Config \\
19-
private Configuration _config;
17+
#endregion
2018

21-
protected override void LoadConfig()
22-
{
19+
#region Config
20+
21+
private Configuration _config;
22+
23+
protected override void LoadConfig() {
2324
base.LoadConfig();
2425
_config = Config.ReadObject<Configuration>();
2526
SaveConfig();
2627
}
2728

28-
protected override void SaveConfig() => Config.WriteObject(_config);
29-
30-
protected override void LoadDefaultConfig()
31-
{
32-
_config = new Configuration
33-
{
34-
showJoinMsgs = true,
35-
showWelcomeMessages = true,
36-
showLeaveMsgs = true,
37-
clearOnWipe = true,
38-
steamIconID = 0
29+
protected override void SaveConfig() =>
30+
Config.WriteObject(_config);
31+
32+
protected override void LoadDefaultConfig() {
33+
_config = new Configuration {
34+
debugMode = false,
35+
showJoinMsgs = true,
36+
showWelcomeMessages = true, showLeaveMsgs = true,
37+
clearOnWipe = true,
38+
steamIconID = 0,
39+
hidePlayersWithAuthlevel = false,
40+
authLevelToHide = 0,
41+
hidePlayersWithPermission = false
3942
};
4043

4144
SaveConfig();
4245
}
4346

44-
private class Configuration
45-
{
47+
48+
private enum AuthLevelEnum {
49+
Both = 0,
50+
AuthLevel1 = 1,
51+
AuthLevel2 = 2
52+
}
53+
54+
private class Configuration {
55+
[JsonProperty("Debug Mode")]
56+
internal bool debugMode;
57+
4658
[JsonProperty("Show Join Messages")]
4759
internal bool showJoinMsgs;
4860

@@ -57,155 +69,193 @@ private class Configuration
5769

5870
[JsonProperty("Steam User Icon ID")]
5971
internal ulong steamIconID;
72+
73+
[JsonProperty("Hide Players with AuthLevel")]
74+
internal bool hidePlayersWithAuthlevel;
75+
76+
[JsonProperty("AuthLevel to Hide. 0 - Both, 1 - AuthLevel1, 2 - AuthLevel2 ")]
77+
internal AuthLevelEnum authLevelToHide;
78+
79+
[JsonProperty("Hide Players With Permission")]
80+
internal bool hidePlayersWithPermission;
6081
}
82+
6183
#endregion
6284

63-
#region // Language \\
64-
protected override void LoadDefaultMessages()
65-
{
66-
lang.RegisterMessages(new Dictionary<string, string>
67-
{
68-
["OnWelcome"] = "Welcome, <color=#ff7675>{0}</color>, to the server!",
69-
["OnJoin"] = "Welcome back, <color=#ff7675>{0}</color>, to the server!",
70-
["OnLeave"] = "Goodbye, <color=#ff7675>{0}</color>!"
71-
}, this);
85+
#region Language
86+
87+
protected override void LoadDefaultMessages() {
88+
lang.RegisterMessages(new Dictionary<string, string> {
89+
["OnWelcome"] = "Welcome, <color=#ff7675>{0}</color>, to the server!",
90+
["OnJoin"] = "Welcome back, <color=#ff7675>{0}</color>, to the server!",
91+
["OnLeave"] = "Goodbye, <color=#ff7675>{0}</color>!",
92+
["NoPermission"] = "You do not have permission to run this command!",
93+
["NowHiding"] = "Users will no longer be alerted when you join or leave the server.",
94+
["NowShowing"] = "Users will now be alerted when you join or leave the server.",
95+
["ServerConfigAlert"] = "Due to the Server's Config, your preference will be ignored."
96+
},
97+
this);
7298
}
7399

74-
private void Broadcast(BasePlayer player, string messageKey, params object[] args)
75-
{
100+
private void Broadcast(BasePlayer player, string messageKey, params object[] args) {
76101
if (player == null) return;
77102

78103
var message = GetMessage(messageKey, player.UserIDString, args);
104+
if (_config.debugMode) Puts(message);
79105
Server.Broadcast(message, null, _config.steamIconID);
80106
}
81107

82-
private string GetMessage(string messageKey, string playerID, params object[] args)
83-
{
84-
return string.Format(lang.GetMessage(messageKey, this, playerID), args);
85-
}
86-
#endregion
108+
private string GetMessage(string key, string id = null, params object[] args) =>
109+
string.Format(lang.GetMessage(key, this, id), args);
110+
111+
#endregion
87112

88-
#region // Data \\
89-
DynamicConfigFile dataFile = Interface.Oxide.DataFileSystem.GetDatafile("TrueWelcomer");
90-
#endregion
113+
#region Data
114+
private DynamicConfigFile cachedPlayers = Interface.Oxide.DataFileSystem.GetDatafile("TrueWelcomer");
115+
#endregion
116+
117+
#region Hooks
91118

92-
#region // Hooks \\
93-
private void Init()
94-
{
119+
private void Init() {
95120
permission.RegisterPermission("truewelcomer.admin", this);
121+
permission.RegisterPermission("truewelcomer.canSetPreference", this);
122+
permission.RegisterPermission("truewelcomer.hideUser", this);
96123

97-
foreach(BasePlayer player in BasePlayer.activePlayerList)
98-
{
124+
foreach (BasePlayer player in BasePlayer.activePlayerList) {
99125
OnlinePlayers.Add(player.UserIDString);
100126
}
101127
}
102128

103129
private void OnNewSave() {
104-
if (!_config.clearOnWipe) return;
105-
106-
dataFile.Clear();
107-
dataFile.Save();
130+
if (!_config.clearOnWipe) return;
131+
132+
cachedPlayers.Clear();
133+
cachedPlayers.Save();
108134
}
109135

110-
private void OnPlayerDisconnected(BasePlayer player)
111-
{
136+
private bool ShouldAnnounce(BasePlayer player) {
137+
if (_config.hidePlayersWithPermission && permission.UserHasPermission(player.UserIDString, "truewelcomer.hideUser")) return false;
138+
if (!_config.hidePlayersWithAuthlevel) return true;
139+
ServerUsers.User user = ServerUsers.Get(player.userID);
140+
141+
switch(_config.authLevelToHide) {
142+
case AuthLevelEnum.Both when user.group is ServerUsers.UserGroup.Moderator or ServerUsers.UserGroup.Owner:
143+
case AuthLevelEnum.AuthLevel1 when user.group is ServerUsers.UserGroup.Moderator:
144+
case AuthLevelEnum.AuthLevel2 when user.group is ServerUsers.UserGroup.Owner: return false;
145+
default: return true;
146+
}
147+
}
148+
149+
private void OnPlayerDisconnected(BasePlayer player) {
112150
string uid = player.UserIDString;
113151
OnlinePlayers.Remove(uid);
114152

115-
Broadcast(player, "OnLeave", player.displayName);
153+
switch(ShouldAnnounce(player)) {
154+
case true:
155+
Broadcast(player, "OnLeave", player.displayName);
156+
break;
157+
default: return;
158+
}
116159
}
117160

118-
private void OnPlayerSleepEnded(BasePlayer player)
119-
{
161+
private void OnPlayerSleepEnded(BasePlayer player) {
120162
bool isOnline = false;
121163
foreach (BasePlayer p in BasePlayer.activePlayerList) {
122164
if (p.UserIDString == player.UserIDString) isOnline = true;
123165
}
124166

125-
if (!OnlinePlayers.Contains(player.UserIDString) && isOnline)
126-
{
127-
OnlinePlayers.Add(player.UserIDString);
128-
if (dataFile[player.UserIDString] != null)
129-
{
130-
Broadcast(player, "OnJoin", player.displayName);
131-
}
132-
else
133-
{
134-
Broadcast(player, "OnWelcome", player.displayName);
135-
dataFile[player.UserIDString] = player.displayName;
136-
dataFile.Save();
137-
}
138-
}
167+
string keyToUse = "OnJoin";
168+
169+
if (!OnlinePlayers.Contains(player.UserIDString) && isOnline) {
170+
OnlinePlayers.Add(player.UserIDString);
171+
if (cachedPlayers[player.UserIDString] != null) keyToUse = "OnJoin";
172+
else {
173+
keyToUse = "OnWelcome";
174+
cachedPlayers[player.UserIDString] = player.displayName;
175+
cachedPlayers.Save();
176+
}
177+
}
178+
179+
switch(ShouldAnnounce(player)) {
180+
case true:
181+
Broadcast(player, keyToUse, player.displayName);
182+
break;
183+
default: return;
184+
}
139185
}
140186

141-
[ConsoleCommand("tw.data_refresh")]
142-
private void RefreshDataCommand(ConsoleSystem.Arg arg)
143-
{
187+
[Command("hidewelcome")] private void HideWelcomeCommand(BasePlayer player) {
188+
if (!permission.UserHasPermission(player.UserIDString, "truewelcomer.canSetPreference")) {
189+
player.ChatMessage(GetMessage("NoPermission", player.UserIDString));
190+
return;
191+
}
192+
193+
string finalMsg;
194+
195+
if (permission.UserHasPermission(player.UserIDString, "truewelcomer.hideUser")) {
196+
permission.RevokeUserPermission(player.UserIDString, "truewelcomer.hideUser");
197+
finalMsg = GetMessage("NowShowing", player.UserIDString);
198+
} else {
199+
permission.GrantUserPermission(player.UserIDString, "truewelcomer.hideUser", this);
200+
finalMsg = GetMessage("NowHiding", player.UserIDString);
201+
}
202+
203+
204+
finalMsg += _config.hidePlayersWithPermission ? "" : $"\n{GetMessage("ServerConfigAlert", player.UserIDString)}";
205+
player.ChatMessage(finalMsg);
206+
}
207+
208+
[ConsoleCommand("tw.data_refresh")]
209+
private void RefreshDataCommand(ConsoleSystem.Arg arg) {
144210
BasePlayer player2 = arg.Player();
145-
if (player2 != null && !permission.UserHasPermission(player2.UserIDString, "truewelcomer.admin"))
146-
{
211+
if (player2 != null && !permission.UserHasPermission(player2.UserIDString, "truewelcomer.admin")) {
147212
arg.ReplyWith("You are lacking permission, to run this command.");
213+
return;
148214
}
149-
215+
150216
string msg = "";
151217
int num = 0;
152-
foreach(BasePlayer player in BasePlayer.activePlayerList)
153-
{
154-
if (dataFile[player.UserIDString] != null)
155-
{
156-
num += 0;
157-
}
158-
else
159-
{
160-
dataFile[player.UserIDString] = player.displayName;
161-
dataFile.Save();
162-
num += 1;
163-
msg += $"Player {player.displayName} has been added.\n";
164-
}
165-
218+
foreach (BasePlayer player in BasePlayer.activePlayerList) {
219+
if (cachedPlayers[player.UserIDString] != null) num += 0;
220+
else {
221+
cachedPlayers[player.UserIDString] = player.displayName;
222+
cachedPlayers.Save();
223+
num += 1;
224+
msg += $"Player {player.displayName} has been added.\n";
225+
}
166226
}
167227

168-
foreach (BasePlayer player in BasePlayer.sleepingPlayerList)
169-
{
170-
if (dataFile[player.UserIDString] != null)
171-
{
172-
num += 0;
173-
}
174-
else
175-
{
176-
dataFile[player.UserIDString] = player.displayName;
177-
dataFile.Save();
178-
num += 1;
179-
msg += $"Player {player.displayName} has been added.\n";
180-
}
181-
228+
foreach (BasePlayer player in BasePlayer.sleepingPlayerList) {
229+
if (cachedPlayers[player.UserIDString] != null) num += 0;
230+
else {
231+
cachedPlayers[player.UserIDString] = player.displayName;
232+
cachedPlayers.Save();
233+
num += 1;
234+
msg += $"Player {player.displayName} has been added.\n";
235+
}
182236
}
183237

184-
if (num == 0)
185-
{
186-
arg.ReplyWith("No players have been added.");
187-
return;
188-
}
189-
else
190-
{
238+
if (num == 0) arg.ReplyWith("No players have been added.");
239+
else {
191240
string message = $"{num} players have been added to the Data List.\n{msg}";
192241
arg.ReplyWith(message);
193242
}
194243
}
195244

196-
[ConsoleCommand("tw.data_reset")]
197-
private void ResetDataCommand(ConsoleSystem.Arg arg)
198-
{
245+
[ConsoleCommand("tw.data_reset")]
246+
private void ResetDataCommand(ConsoleSystem.Arg arg) {
199247
BasePlayer player2 = arg.Player();
200-
if (player2 != null && !permission.UserHasPermission(player2.UserIDString, "truewelcomer.admin"))
201-
{
248+
if (player2 != null && !permission.UserHasPermission(player2.UserIDString, "truewelcomer.admin")) {
202249
arg.ReplyWith("You are lacking permission, to run this command.");
250+
return;
203251
}
204252

205-
dataFile.Clear();
206-
dataFile.Save();
253+
cachedPlayers.Clear();
254+
cachedPlayers.Save();
207255
arg.ReplyWith("The Data File for True Welcomer has been reset!");
208256
}
257+
209258
#endregion
259+
210260
}
211261
}

0 commit comments

Comments
 (0)