Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
319 changes: 319 additions & 0 deletions Essentials/Commands/RanksModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using Sandbox;
using Sandbox.Engine.Multiplayer;
using Sandbox.Game.GameSystems.BankingAndCurrency;
using Sandbox.Game.World;
using Torch;
using NLog;
using Torch.Commands;
using Torch.Commands.Permissions;
using VRage.Game.ModAPI;
using VRageRender.Utils;
using VRageMath;
using Newtonsoft.Json;
using System.IO;

namespace Essentials.Commands {
[Category("pr")]
public class RanksModule : CommandModule {
public static readonly Logger Log = LogManager.GetCurrentClassLogger();
public PlayerAccountModule AccModule = new PlayerAccountModule();
public RanksAndPermissionsModule RanksAndPermissions = new RanksAndPermissionsModule();


[Command("createrank")]
[Permission(MyPromoteLevel.Admin)]
public void CreateRank(string name) {
if (!RanksAndPermissions.GenerateRank(name)) {
Context.Respond("Rank already exists!");
return;
}
Context.Respond("Rank Created!");
}

[Command("delrank")]
[Permission(MyPromoteLevel.Admin)]
public void DeleteRank(string name) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(name);
if (rank == null) {
Context.Respond($"Rank '{name}' does not exist!");
return;
}
RanksAndPermissionsModule.Ranks.Remove(rank);
RanksAndPermissions.SaveRankData();

}

[Command("renamerank")]
[Permission(MyPromoteLevel.Admin)]
public void RenameRank(string oldName, string newName) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(oldName);
if (rank == null) {
Context.Respond($"Rank '{oldName}' does not exist!");
return;
}
rank.RankName = newName;
RanksAndPermissions.UpdateRankObject(rank);
RanksAndPermissions.UpdateRegisteredPlayersRanks(newName);
}

[Command("setdefaultrank")]
[Permission(MyPromoteLevel.Admin)]
public void SetDefaultRank(string name) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(name);
if (rank == null) {
Context.Respond($"Rank '{name}' does not exist!");
return;
}
EssentialsPlugin.Instance.Config.DefaultRank = name;
EssentialsPlugin.Instance.Save();
Context.Respond($"Default rank set to '{name}'!");
Log.Info($"Default rank set to '{name}'!");
}

[Command("setrank")]
[Permission(MyPromoteLevel.Admin)]
public void SetRank(string playerName, string rankName) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(rankName);
/*IMyPlayer player = Utilities.GetPlayerByNameOrId(playerName);
if (player == null) {
Context.Respond("Player does not exist!");
return;
}*/

if (rank == null) {
Context.Respond("Rank does not exist!");
return;
}

PlayerAccountModule.PlayerAccountData data = new PlayerAccountModule.PlayerAccountData();
var RegisteredPlayers = PlayerAccountModule.PlayersAccounts.Select(o => o.Player).ToList();
if (!RegisteredPlayers.Contains(playerName)) {
Log.Warn($"Player {playerName} does have registered player object... Creating one");
data.Player = playerName;
//data.SteamID = playerName;
data.Rank = rank.RankName;
AccModule.UpdatePlayerAccount(data);
Context.Respond($"{playerName}'s rank set to {rank.RankName}");
Log.Info($"{playerName}'s rank set to {rank.RankName}");
return;
}
data = PlayerAccountModule.PlayersAccounts.Single(a => a.Player == playerName);
data.Rank = rank.RankName;
MySession.Static.SetUserPromoteLevel(data.SteamID, RanksAndPermissions.ParseMyPromoteLevel(rank.KeenLevelRank));

AccModule.UpdatePlayerAccount(data);
}

[Command("addinheritance")]
[Permission(MyPromoteLevel.Admin)]
public void AddInheritance(string rankName, string inheritanceName) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(rankName);
if (rank != null) {
RanksAndPermissionsModule.RankData InheritRank = RanksAndPermissions.GetRankData(inheritanceName);
if (InheritRank == null) {
Context.Respond("The rank you are trying to add to the inheritance list does not exist!");
return;
}
rank.Inherits.Add(inheritanceName);
RanksAndPermissions.UpdateRankObject(rank);
Context.Respond("Inheritance added!");
return;
}
Context.Respond("The rank you are trying to add inheritence to does not exist");
}

[Command("delinheritance")]
[Permission(MyPromoteLevel.Admin)]
public void DelInheritance(string rankName, string inheritanceName) {
RanksAndPermissionsModule.RankData rank = RanksAndPermissions.GetRankData(rankName);
if (rank != null) {
if (!rank.Inherits.Contains(inheritanceName)) {
Context.Respond($"{rank.RankName} does not inherit {inheritanceName}");
return;
}
rank.Inherits.Remove(inheritanceName);
RanksAndPermissions.UpdateRankObject(rank);
Context.Respond("Inheritance removed");
return;
}
Context.Respond("The rank you are trying to remove inheritence from does not exist");

}

[Command("addperm")]
[Permission(MyPromoteLevel.Admin)]
public void AddPermission(string rankName, string command) {
RanksAndPermissionsModule.RankData data = new RanksAndPermissionsModule.RankData();
bool found = false;
foreach (var Rank in RanksAndPermissionsModule.Ranks) {
if (Rank.RankName == rankName) {
data = Rank;
found = true;
break;
}
}

if (!found) {
Context.Respond($"Rank '{rankName}' does not exist!");
return;
}

if (command.Substring(0,1) == "-") {
string stringAfterChar = command.Substring(command.IndexOf("-") + 1);
if (data.Permissions.Allowed.Contains(stringAfterChar)) {
data.Permissions.Allowed.Remove(stringAfterChar);
Context.Respond($"Permission to use command '{command}' has been removed from the {data.RankName} rank!");
RanksAndPermissions.UpdateRankObject(data);
return;
}
}

if (!data.Permissions.Allowed.Contains(command)) {
data.Permissions.Allowed.Add(command);
Context.Respond($"Permission to use command '{command}' has been added to the {data.RankName} rank!");
RanksAndPermissions.UpdateRankObject(data);
return;
}

Context.Respond($"The rank '{data.RankName}' already has permission to use '{command}'");
}

[Command("delperm")]
[Permission(MyPromoteLevel.Admin)]
public void RemovePermission(string rankName, string command) {
RanksAndPermissionsModule.RankData data = new RanksAndPermissionsModule.RankData();
bool found = false;
foreach (var Rank in RanksAndPermissionsModule.Ranks) {
if (Rank.RankName == rankName) {
data = Rank;
found = true;
break;
}
}

if (!found) {
Context.Respond($"Rank '{rankName}' does not exist!");
return;
}

if (command.Substring(0, 1) == "-") {
string stringAfterChar = command.Substring(command.IndexOf("-") + 1);
if (data.Permissions.Disallowed.Contains(stringAfterChar)) {
data.Permissions.Disallowed.Remove(stringAfterChar);
Context.Respond($"Updated rank");
RanksAndPermissions.UpdateRankObject(data);
return;
}
}

if (!data.Permissions.Disallowed.Contains(command)) {
data.Permissions.Disallowed.Add(command);
Context.Respond($"Permission to use command '{command}' has been actively revoked from the {data.RankName} rank!");
RanksAndPermissions.UpdateRankObject(data);
return;
}

Context.Respond($"Permission to use command '{command}' is already being actively revoked from the {data.RankName} rank!");
}


[Command("addplayerperm")]
[Permission(MyPromoteLevel.Admin)]
public void AddPlayerPermission(string playerName, string command) {
PlayerAccountModule.PlayerAccountData data = new PlayerAccountModule.PlayerAccountData();
bool found = false;
foreach (var player in PlayerAccountModule.PlayersAccounts) {
if (player.Player == playerName) {
data = player;
found = true;
break;
}
}

if (!found) {
Context.Respond($"Player '{playerName}' does not have a registered account!");
return;
}

if (command.Substring(0, 1) == "-") {
string stringAfterChar = command.Substring(command.IndexOf("-") + 1);
if (data.Permissions.Allowed.Contains(stringAfterChar)) {
data.Permissions.Allowed.Remove(stringAfterChar);
Context.Respond($"Permission to use command '{command}' has been removed from {data.Player}'s account!");
AccModule.UpdatePlayerAccount(data);
return;
}
}

if (!data.Permissions.Allowed.Contains(command)) {
data.Permissions.Allowed.Add(command);
Context.Respond($"Permission to use command '{command}' has been added to {data.Player}'s account!");
AccModule.UpdatePlayerAccount(data);
return;
}

Context.Respond($"The player '{data.Player}' already has permission to use '{command}'");
}

[Command("delplayerperm")]
[Permission(MyPromoteLevel.Admin)]
public void RemovePlayerPermission(string playerName, string command) {
PlayerAccountModule.PlayerAccountData data = new PlayerAccountModule.PlayerAccountData();
bool found = false;
foreach (var player in PlayerAccountModule.PlayersAccounts) {
if (player.Player == playerName) {
data = player;
found = true;
break;
}
}

if (!found) {
Context.Respond($"Player '{playerName}' does not have a registered account!");
return;
}

if (command.Substring(0, 1) == "-") {
string stringAfterChar = command.Substring(command.IndexOf("-") + 1);
if (data.Permissions.Disallowed.Contains(stringAfterChar)) {
data.Permissions.Disallowed.Remove(stringAfterChar);
Context.Respond($"Updated rank");
AccModule.UpdatePlayerAccount(data);
return;
}
}

if (!data.Permissions.Disallowed.Contains(command)) {
data.Permissions.Disallowed.Add(command);
Context.Respond($"Permission to use command '{command}' has been actively revoked from {data.Player}'s account!");
AccModule.UpdatePlayerAccount(data);
return;
}

Context.Respond($"Permission to use command '{command}' is already being actively revoked from {data.Player}'s account!");
}

[Command("listranks")]
[Permission(MyPromoteLevel.None)]
public void ListRanks() {
bool found = false;
string Ranks = "Ranks: ";
foreach (var rank in RanksAndPermissionsModule.Ranks) {
found = true;
Ranks += ($"{rank.RankName},");
}
if(!found) {
Context.Respond("No ranks found");
return;
}
Ranks = Ranks.TrimEnd(',');
Context.Respond(Ranks);
}
}
}
12 changes: 9 additions & 3 deletions Essentials/Essentials.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
Expand Down Expand Up @@ -32,8 +32,11 @@
<Reference Include="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\GameBinaries\netstandard.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog">
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
<HintPath>..\..\..\TEST SERVER\NLog.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="PresentationCore" />
Expand Down Expand Up @@ -137,6 +140,7 @@
<Compile Include="AutoCommand.cs" />
<Compile Include="AutoCommands.cs" />
<Compile Include="Commands\EcoModule.cs" />
<Compile Include="Commands\RanksModule.cs" />
<Compile Include="Commands\VotingModule.cs" />
<Compile Include="Commands\AdminModule.cs" />
<Compile Include="Commands\BlocksModule.cs" />
Expand All @@ -155,7 +159,9 @@
<Compile Include="InfoCommand.cs" />
<Compile Include="Commands\InfoModule.cs" />
<Compile Include="Patches\SessionDownloadPatch.cs" />
<Compile Include="PlayerAccountModule.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RanksAndPermissionsModule.cs" />
<Compile Include="Utilities.cs" />
<Compile Include="Utils\Ownership.cs" />
<Compile Include="Utils\TypedObjectPool.cs" />
Expand All @@ -170,4 +176,4 @@
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
</Project>
16 changes: 16 additions & 0 deletions Essentials/EssentialsConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,22 @@ public EssentialsConfig()
private string _motd;
public string Motd { get => _motd; set => SetValue(ref _motd, value); }

public bool _enableRanks = false;
[Display(Name = "Enable custom ranks", GroupName = "Custom Ranks", Order = 0, Description = "Enable the custom ranks system for this server.")]
public bool EnableRanks { get => _enableRanks; set => SetValue(ref _enableRanks, value); }

public string _defaultRank = "Default";
[Display(Name = "Default rank assignment", GroupName = "Custom Ranks", Order = 1, Description = "The rank users will get when they first join the server.")]
public string DefaultRank { get => _defaultRank; set => SetValue(ref _defaultRank, value); }

public bool _overridePerms = false;
[Display(Name = "Override vanilla Torch/Plugin Permissions", GroupName = "Custom Ranks", Order = 2, Description = "Enabling this will cause the custom rank permissions system to overide any vanilla permissions... MAKE SURE RANKS HAVE PERMS SET BEFORE ENABLING")]
public bool OverrideVanillaPerms { get => _overridePerms; set => SetValue(ref _overridePerms, value); }

private int _maxHomes = 3;
[Display(Name = "Default Max Homes", GroupName = "Custom Ranks", Order = 3, Description = "Default amount of homes a created rank will get")]
public int MaxHomes { get => _maxHomes; set => SetValue(ref _maxHomes, value); }

private string _newUserMotd;
public string NewUserMotd { get => _newUserMotd; set => SetValue(ref _newUserMotd, value); }

Expand Down
Loading