@@ -49,6 +49,35 @@ public void DeleteRank(string name) {
4949
5050 }
5151
52+ [ Command ( "setmaxhomes" ) ]
53+ [ Permission ( MyPromoteLevel . Admin ) ]
54+ public void SetMaxHomes ( string rankName , int value ) {
55+ RanksAndPermissionsModule . RankData Rank = RanksAndPermissions . GetRankData ( rankName ) ;
56+ if ( Rank == null ) {
57+ Context . Respond ( $ "Rank '{ rankName } ' does not exist!") ;
58+ return ;
59+ }
60+
61+ Rank . MaxHomes = value ;
62+ Context . Respond ( $ "Anyone with the rank '{ Rank . RankName } ' can now only set { value } homes") ;
63+ }
64+
65+ [ Command ( "reservedslot" ) ]
66+ [ Permission ( MyPromoteLevel . Admin ) ]
67+ public void SetReservedSlot ( string rankName , string boolVal ) {
68+ if ( boolVal != "true" || boolVal != "false" ) {
69+ Context . Respond ( "Argument is not a valid bool type" ) ;
70+ }
71+ RanksAndPermissionsModule . RankData rank = RanksAndPermissions . GetRankData ( rankName ) ;
72+ if ( rank == null ) {
73+ Context . Respond ( $ "Rank '{ rankName } ' does not exist!") ;
74+ return ;
75+ }
76+ rank . ReservedSlot = bool . Parse ( boolVal ) ;
77+ RanksAndPermissions . UpdateRankObject ( rank ) ;
78+
79+ }
80+
5281 [ Command ( "renamerank" ) ]
5382 [ Permission ( MyPromoteLevel . Admin ) ]
5483 public void RenameRank ( string oldName , string newName ) {
@@ -78,38 +107,91 @@ public void SetDefaultRank(string name) {
78107
79108 [ Command ( "setrank" ) ]
80109 [ Permission ( MyPromoteLevel . Admin ) ]
81- public void SetRank ( string playerName , string rankName ) {
110+ public void SetRank ( string playerNameOrID , string rankName ) {
82111 RanksAndPermissionsModule . RankData rank = RanksAndPermissions . GetRankData ( rankName ) ;
83- /*IMyPlayer player = Utilities.GetPlayerByNameOrId(playerName);
84- if (player == null) {
85- Context.Respond("Player does not exist!");
86- return;
87- }*/
88112
113+ ulong . TryParse ( playerNameOrID , out var id ) ;
114+ id = Utilities . GetPlayerByNameOrId ( playerNameOrID ) ? . SteamUserId ?? id ;
115+ /*IMyPlayer player = Utilities.GetPlayerByNameOrId(playerName);*/
116+ if ( id == 0 ) {
117+ Context . Respond ( $ "Player '{ playerNameOrID } ' not found or ID is invalid.") ;
118+ return ;
119+ }
120+ var player = Utilities . GetPlayerByNameOrId ( playerNameOrID ) ;
89121 if ( rank == null ) {
90122 Context . Respond ( "Rank does not exist!" ) ;
91123 return ;
92124 }
93125
94126 PlayerAccountModule . PlayerAccountData data = new PlayerAccountModule . PlayerAccountData ( ) ;
95- var RegisteredPlayers = PlayerAccountModule . PlayersAccounts . Select ( o => o . Player ) . ToList ( ) ;
96- if ( ! RegisteredPlayers . Contains ( playerName ) ) {
97- Log . Warn ( $ "Player { playerName } does have registered player object... Creating one") ;
98- data . Player = playerName ;
99- //data.SteamID = playerName;
100- data . Rank = rank . RankName ;
101- AccModule . UpdatePlayerAccount ( data ) ;
102- Context . Respond ( $ "{ playerName } 's rank set to { rank . RankName } ") ;
103- Log . Info ( $ "{ playerName } 's rank set to { rank . RankName } ") ;
104- return ;
127+ var RegisteredPlayerNames = PlayerAccountModule . PlayersAccounts . Select ( o => o . Player ) . ToList ( ) ;
128+ var RegisteredPlayerSteamIDs = PlayerAccountModule . PlayersAccounts . Select ( o => o . SteamID ) . ToList ( ) ;
129+ if ( ! RegisteredPlayerNames . Contains ( playerNameOrID ) && ! RegisteredPlayerSteamIDs . Contains ( id ) ) {
130+ Log . Warn ( $ "Player { playerNameOrID } does have registered player object... Creating one") ;
131+ data . Player = playerNameOrID ;
132+ data . SteamID = player . SteamUserId ;
133+ }
134+
135+ if ( RegisteredPlayerNames . Contains ( playerNameOrID ) ) {
136+ data = PlayerAccountModule . PlayersAccounts . Single ( a => a . Player == playerNameOrID ) ;
137+ }
138+
139+ if ( RegisteredPlayerSteamIDs . Contains ( id ) ) {
140+ data = PlayerAccountModule . PlayersAccounts . Single ( a => a . SteamID == id ) ;
105141 }
106- data = PlayerAccountModule . PlayersAccounts . Single ( a => a . Player == playerName ) ;
142+
107143 data . Rank = rank . RankName ;
144+ if ( rank . ReservedSlot && ! MySandboxGame . ConfigDedicated . Reserved . Contains ( id ) ) {
145+ MySandboxGame . ConfigDedicated . Reserved . Add ( id ) ;
146+ } else if ( ! rank . ReservedSlot && MySandboxGame . ConfigDedicated . Reserved . Contains ( id ) ) {
147+ MySandboxGame . ConfigDedicated . Reserved . Remove ( id ) ;
148+ }
108149 MySession . Static . SetUserPromoteLevel ( data . SteamID , RanksAndPermissions . ParseMyPromoteLevel ( rank . KeenLevelRank ) ) ;
109-
150+ Context . Respond ( $ "{ data . Player } 's rank set to { rank . RankName } ") ;
151+ Log . Info ( $ "{ data . Player } 's rank set to { rank . RankName } ") ;
110152 AccModule . UpdatePlayerAccount ( data ) ;
111153 }
112154
155+ [ Command ( "populate" ) ]
156+ [ Permission ( MyPromoteLevel . Admin ) ]
157+ public void Populate ( string rank , string level ) {
158+
159+ Context . Respond ( "Command disabled" ) ;
160+ return ;
161+
162+ var commandManager = EssentialsPlugin . Instance . CommandManager ;
163+ if ( commandManager == null ) {
164+ Context . Respond ( "Must have an attached session to list commands" ) ;
165+ return ;
166+ }
167+ commandManager . Commands . GetNode ( Context . Args , out CommandTree . CommandNode node ) ;
168+
169+ if ( node != null ) {
170+ var command = node . Command ;
171+ var children = node . Subcommands . Where ( e => e . Value . Command ? . MinimumPromoteLevel . ToString ( ) == level ) . Select ( x => x . Key ) ;
172+
173+ var sb = new StringBuilder ( ) ;
174+
175+ if ( command != null && ( Context . Player == null || command . MinimumPromoteLevel <= Context . Player . PromoteLevel ) ) {
176+ sb . AppendLine ( $ "Syntax: { command . SyntaxHelp } ") ;
177+ sb . Append ( command . HelpText ) ;
178+ }
179+
180+ if ( node . Subcommands . Count ( ) != 0 )
181+ sb . Append ( $ "\n Subcommands: { string . Join ( ", " , children ) } ") ;
182+
183+ Context . Respond ( sb . ToString ( ) ) ;
184+ }
185+ else {
186+ var sb = new StringBuilder ( ) ;
187+ foreach ( var command in commandManager . Commands . WalkTree ( ) ) {
188+ if ( command . IsCommand && ( Context . Player == null || command . Command . MinimumPromoteLevel <= Context . Player . PromoteLevel ) )
189+ sb . AppendLine ( $ "{ command . Command . SyntaxHelp } \n { command . Command . HelpText } ") ;
190+ }
191+ Context . Respond ( $ "Available commands: { sb } ") ;
192+ }
193+ }
194+
113195 [ Command ( "addinheritance" ) ]
114196 [ Permission ( MyPromoteLevel . Admin ) ]
115197 public void AddInheritance ( string rankName , string inheritanceName ) {
@@ -301,7 +383,7 @@ public void RemovePlayerPermission(string playerName, string command) {
301383
302384 [ Command ( "listranks" ) ]
303385 [ Permission ( MyPromoteLevel . None ) ]
304- public void ListRanks ( ) {
386+ public void ListRanks ( string listRankName ) {
305387 bool found = false ;
306388 string Ranks = "Ranks: " ;
307389 foreach ( var rank in RanksAndPermissionsModule . Ranks ) {
0 commit comments