1- using Newtonsoft . Json ;
21using Oxide . Core ;
2+ using UnityEngine ;
3+ using Newtonsoft . Json ;
34using Oxide . Core . Configuration ;
45using 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