diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs
index 24652af5..816f0acb 100644
--- a/TShockAPI/Commands.cs
+++ b/TShockAPI/Commands.cs
@@ -110,75 +110,75 @@ namespace TShockAPI
public static void InitCommands()
{
//When adding new perm in here, add new perm to CommandList in DBEditor
- ChatCommands.Add(new Command("kick", Kick, "kick"));
- ChatCommands.Add(new Command("ban", Ban, "ban"));
- ChatCommands.Add(new Command("ban", BanIP, "banip"));
- ChatCommands.Add(new Command("unban", UnBan, "unban"));
- ChatCommands.Add(new Command("unban", UnBanIP, "unbanip"));
- ChatCommands.Add(new Command("maintenance", ClearBans, "clearbans"));
- ChatCommands.Add(new Command("whitelist", Whitelist, "whitelist"));
- ChatCommands.Add(new Command("maintenance", Off, "off"));
- ChatCommands.Add(new Command("maintenance", OffNoSave, "off-nosave"));
- ChatCommands.Add(new Command("maintenance", CheckUpdates, "checkupdates"));
- ChatCommands.Add(new Command("causeevents", DropMeteor, "dropmeteor"));
- ChatCommands.Add(new Command("causeevents", Star, "star"));
- ChatCommands.Add(new Command("causeevents", Bloodmoon, "bloodmoon"));
- ChatCommands.Add(new Command("causeevents", Invade, "invade"));
- ChatCommands.Add(new Command("spawnboss", Eater, "eater"));
- ChatCommands.Add(new Command("spawnboss", Eye, "eye"));
- ChatCommands.Add(new Command("spawnboss", King, "king"));
- ChatCommands.Add(new Command("spawnboss", Skeletron, "skeletron"));
- ChatCommands.Add(new Command("spawnboss", Hardcore, "hardcore"));
- ChatCommands.Add(new Command("spawnmob", SpawnMob, "spawnmob", "sm"));
- ChatCommands.Add(new Command("tp", Home, "home"));
- ChatCommands.Add(new Command("tp", Spawn, "spawn"));
- ChatCommands.Add(new Command("tp", TP, "tp"));
- ChatCommands.Add(new Command("tphere", TPHere, "tphere"));
- ChatCommands.Add(new Command("warp", UseWarp, "warp"));
- ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp"));
- ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp"));
- ChatCommands.Add(new Command("managewarp", HideWarp, "hidewarp"));
- ChatCommands.Add(new Command("managegroup", AddGroup, "addgroup"));
- ChatCommands.Add(new Command("managegroup", DeleteGroup, "delgroup"));
- ChatCommands.Add(new Command("managegroup", ModifyGroup, "modgroup"));
- ChatCommands.Add(new Command("manageitem", AddItem, "additem"));
- ChatCommands.Add(new Command("manageitem", DeleteItem, "delitem"));
- ChatCommands.Add(new Command("cfg", SetSpawn, "setspawn"));
- ChatCommands.Add(new Command("cfg", Reload, "reload"));
- ChatCommands.Add(new Command("cfg", ShowConfiguration, "showconfig"));
- ChatCommands.Add(new Command("cfg", ServerPassword, "serverpassword"));
- ChatCommands.Add(new Command("cfg", Save, "save"));
- ChatCommands.Add(new Command("cfg", MaxSpawns, "maxspawns"));
- ChatCommands.Add(new Command("cfg", SpawnRate, "spawnrate"));
- ChatCommands.Add(new Command("time", Time, "time"));
- ChatCommands.Add(new Command("pvpfun", Slap, "slap"));
- ChatCommands.Add(new Command("editspawn", ToggleAntiBuild, "antibuild"));
- ChatCommands.Add(new Command("editspawn", ProtectSpawn, "protectspawn"));
- ChatCommands.Add(new Command("manageregion", Region, "region"));
- ChatCommands.Add(new Command("editspawn", DebugRegions, "debugreg"));
+ ChatCommands.Add(new Command( Permissions.kick, Kick, "kick"));
+ ChatCommands.Add(new Command(Permissions.ban, Ban, "ban"));
+ ChatCommands.Add(new Command(Permissions.ban, BanIP, "banip"));
+ ChatCommands.Add(new Command(Permissions.ban, UnBan, "unban"));
+ ChatCommands.Add(new Command(Permissions.ban, UnBanIP, "unbanip"));
+ ChatCommands.Add(new Command(Permissions.maintenance, ClearBans, "clearbans"));
+ ChatCommands.Add(new Command(Permissions.whitelist, Whitelist, "whitelist"));
+ ChatCommands.Add(new Command(Permissions.maintenance, Off, "off"));
+ ChatCommands.Add(new Command(Permissions.maintenance, OffNoSave, "off-nosave"));
+ ChatCommands.Add(new Command(Permissions.maintenance, CheckUpdates, "checkupdates"));
+ ChatCommands.Add(new Command(Permissions.causeevents, DropMeteor, "dropmeteor"));
+ ChatCommands.Add(new Command(Permissions.causeevents, Star, "star"));
+ ChatCommands.Add(new Command(Permissions.causeevents, Bloodmoon, "bloodmoon"));
+ ChatCommands.Add(new Command(Permissions.causeevents, Invade, "invade"));
+ ChatCommands.Add(new Command(Permissions.spawnboss, Eater, "eater"));
+ ChatCommands.Add(new Command(Permissions.spawnboss, Eye, "eye"));
+ ChatCommands.Add(new Command(Permissions.spawnboss, King, "king"));
+ ChatCommands.Add(new Command(Permissions.spawnboss, Skeletron, "skeletron"));
+ ChatCommands.Add(new Command(Permissions.spawnboss, Hardcore, "hardcore"));
+ ChatCommands.Add(new Command(Permissions.spawnmob, SpawnMob, "spawnmob", "sm"));
+ ChatCommands.Add(new Command(Permissions.tp, Home, "home"));
+ ChatCommands.Add(new Command(Permissions.tp, Spawn, "spawn"));
+ ChatCommands.Add(new Command(Permissions.tp, TP, "tp"));
+ ChatCommands.Add(new Command(Permissions.tphere, TPHere, "tphere"));
+ ChatCommands.Add(new Command(Permissions.warp, UseWarp, "warp"));
+ ChatCommands.Add(new Command(Permissions.managewarp, SetWarp, "setwarp"));
+ ChatCommands.Add(new Command(Permissions.managewarp, DeleteWarp, "delwarp"));
+ ChatCommands.Add(new Command(Permissions.managewarp, HideWarp, "hidewarp"));
+ ChatCommands.Add(new Command(Permissions.managewarp, AddGroup, "addgroup"));
+ ChatCommands.Add(new Command(Permissions.managewarp, DeleteGroup, "delgroup"));
+ ChatCommands.Add(new Command(Permissions.managewarp, ModifyGroup, "modgroup"));
+ ChatCommands.Add(new Command(Permissions.manageitem, AddItem, "additem"));
+ ChatCommands.Add(new Command(Permissions.manageitem, DeleteItem, "delitem"));
+ ChatCommands.Add(new Command(Permissions.cfg, SetSpawn, "setspawn"));
+ ChatCommands.Add(new Command(Permissions.cfg, Reload, "reload"));
+ ChatCommands.Add(new Command(Permissions.cfg, ShowConfiguration, "showconfig"));
+ ChatCommands.Add(new Command(Permissions.cfg, ServerPassword, "serverpassword"));
+ ChatCommands.Add(new Command(Permissions.cfg, Save, "save"));
+ ChatCommands.Add(new Command(Permissions.cfg, MaxSpawns, "maxspawns"));
+ ChatCommands.Add(new Command(Permissions.cfg, SpawnRate, "spawnrate"));
+ ChatCommands.Add(new Command(Permissions.time, Time, "time"));
+ ChatCommands.Add(new Command(Permissions.pvpfun, Slap, "slap"));
+ ChatCommands.Add(new Command(Permissions.editspawn, ToggleAntiBuild, "antibuild"));
+ ChatCommands.Add(new Command(Permissions.editspawn, ProtectSpawn, "protectspawn"));
+ ChatCommands.Add(new Command(Permissions.manageregion, Region, "region"));
+ ChatCommands.Add(new Command(Permissions.editspawn, DebugRegions, "debugreg"));
ChatCommands.Add(new Command(Help, "help"));
ChatCommands.Add(new Command(Playing, "playing", "online", "who"));
ChatCommands.Add(new Command(AuthToken, "auth"));
ChatCommands.Add(new Command(ThirdPerson, "me"));
ChatCommands.Add(new Command(PartyChat, "p"));
ChatCommands.Add(new Command(Rules, "rules"));
- ChatCommands.Add(new Command("logs", DisplayLogs, "displaylogs"));
+ ChatCommands.Add(new Command(Permissions.logs, DisplayLogs, "displaylogs"));
ChatCommands.Add(new Command(PasswordUser, "password") { DoLog = false });
ChatCommands.Add(new Command(RegisterUser, "register") { DoLog = false });
- ChatCommands.Add(new Command("root-only", ManageUsers, "user") { DoLog = false });
- ChatCommands.Add(new Command("root-only", GrabUserUserInfo, "userinfo", "ui"));
- ChatCommands.Add(new Command("root-only", AuthVerify, "auth-verify"));
+ ChatCommands.Add(new Command(Permissions.rootonly, ManageUsers, "user") { DoLog = false });
+ ChatCommands.Add(new Command(Permissions.rootonly, GrabUserUserInfo, "userinfo", "ui"));
+ ChatCommands.Add(new Command(Permissions.rootonly, AuthVerify, "auth-verify"));
ChatCommands.Add(new Command(AttemptLogin, "login") { DoLog = false });
- ChatCommands.Add(new Command("cfg", Broadcast, "broadcast", "bc"));
- ChatCommands.Add(new Command("whisper", Whisper, "whisper", "w", "tell"));
- ChatCommands.Add(new Command("whisper", Reply, "reply", "r"));
- ChatCommands.Add(new Command("annoy", Annoy, "annoy"));
- ChatCommands.Add(new Command("cfg", ConvertWaR, "convert"));
- ChatCommands.Add(new Command("kill", Kill, "kill"));
- ChatCommands.Add(new Command("butcher", Butcher, "butcher"));
- ChatCommands.Add(new Command("item", Item, "item", "i"));
- ChatCommands.Add(new Command("item", Give, "give"));
- ChatCommands.Add(new Command("heal", Heal, "heal"));
+ ChatCommands.Add(new Command(Permissions.cfg, Broadcast, "broadcast", "bc"));
+ ChatCommands.Add(new Command(Permissions.whisper, Whisper, "whisper", "w", "tell"));
+ ChatCommands.Add(new Command(Permissions.whisper, Reply, "reply", "r"));
+ ChatCommands.Add(new Command(Permissions.annoy, Annoy, "annoy"));
+ ChatCommands.Add(new Command(Permissions.cfg, ConvertWaR, "convert"));
+ ChatCommands.Add(new Command(Permissions.kill, Kill, "kill"));
+ ChatCommands.Add(new Command(Permissions.butcher, Butcher, "butcher"));
+ ChatCommands.Add(new Command(Permissions.item, Item, "item", "i"));
+ ChatCommands.Add(new Command(Permissions.item, Give, "give"));
+ ChatCommands.Add(new Command(Permissions.heal, Heal, "heal"));
}
public static bool HandleCommand(TSPlayer player, string text)
@@ -1627,7 +1627,7 @@ namespace TShockAPI
{
int.TryParse(args.Parameters[1], out damage);
}
- if (!args.Player.Group.HasPermission("kill"))
+ if (!args.Player.Group.HasPermission(Permissions.kill))
{
damage = Tools.Clamp(damage, 15, 0);
}
diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs
index 20f092aa..07a159b4 100644
--- a/TShockAPI/DB/RegionManager.cs
+++ b/TShockAPI/DB/RegionManager.cs
@@ -316,7 +316,7 @@ namespace TShockAPI.DB
public bool CanBuild(int x, int y, TSPlayer ply)
{
- if (!ply.Group.HasPermission("canbuild"))
+ if (!ply.Group.HasPermission(Permissions.canbuild))
{
return false;
}
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 33dcab37..081de8f7 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -150,7 +150,7 @@ namespace TShockAPI
{
string itemname = Encoding.ASCII.GetString(args.Data.ReadBytes(namelength));
- if (!args.Player.Group.HasPermission("usebanneditem") && TShock.Itembans.ItemIsBanned(itemname))
+ if (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned(itemname))
{
args.Player.Disconnect("Using banned item: " + itemname + ", remove it and rejoin");
}
@@ -299,7 +299,7 @@ namespace TShockAPI
return true;
}
- if (!args.Player.Group.HasPermission("canbuild"))
+ if (!args.Player.Group.HasPermission(Permissions.canbuild))
{
if (!args.Player.HasBeenSpammedWithBuildMessage)
{
@@ -330,7 +330,7 @@ namespace TShockAPI
return Tools.HandleGriefer(args.Player, TShock.Config.RangeCheckBanReason);
}
}
- if (tiletype == 48 && !args.Player.Group.HasPermission("canspike"))
+ if (tiletype == 48 && !args.Player.Group.HasPermission(Permissions.canspike))
{
args.Player.SendMessage("You do not have permission to place spikes.", Color.Red);
Tools.SendLogs(string.Format("{0} tried to place spikes", args.Player.Name), Color.Red);
@@ -338,7 +338,7 @@ namespace TShockAPI
return true;
}
}
- if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y))
{
if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000)
{
@@ -350,7 +350,7 @@ namespace TShockAPI
}
if (TShock.Config.DisableBuild)
{
- if (!args.Player.Group.HasPermission("editspawn"))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn))
{
if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000)
{
@@ -363,7 +363,7 @@ namespace TShockAPI
}
if (TShock.Config.SpawnProtection)
{
- if (!args.Player.Group.HasPermission("editspawn"))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn))
{
var flag = TShock.CheckSpawn(x, y);
if (flag)
@@ -477,7 +477,7 @@ namespace TShockAPI
if (type == 29 || type == 28 || type == 37)
{
Log.Debug(string.Format("Explosive(PlyXY:{0}_{1}, Type:{2})", args.Player.TileX, args.Player.TileY, type));
- if (TShock.Config.DisableExplosives && (!args.Player.Group.HasPermission("useexplosives") || !args.Player.Group.HasPermission("ignoregriefdetection")))
+ if (TShock.Config.DisableExplosives && (!args.Player.Group.HasPermission(Permissions.useexplosives) || !args.Player.Group.HasPermission(Permissions.ignoregriefdetection)))
{
Main.projectile[ident].type = 0;
args.Player.SendData(PacketTypes.ProjectileNew, "", ident);
@@ -536,21 +536,21 @@ namespace TShockAPI
}
}
- if (!args.Player.Group.HasPermission("canbuild"))
+ if (!args.Player.Group.HasPermission(Permissions.canbuild))
{
args.Player.SendMessage("You do not have permission to build!", Color.Red);
args.Player.SendTileSquare(x, y);
return true;
}
- if (lava && !args.Player.Group.HasPermission("canlava"))
+ if (lava && !args.Player.Group.HasPermission(Permissions.canlava))
{
args.Player.SendMessage("You do not have permission to use lava", Color.Red);
Tools.SendLogs(string.Format("{0} tried using lava", args.Player.Name), Color.Red);
args.Player.SendTileSquare(x, y);
return true;
}
- if (!lava && !args.Player.Group.HasPermission("canwater"))
+ if (!lava && !args.Player.Group.HasPermission(Permissions.canwater))
{
args.Player.SendMessage("You do not have permission to use water", Color.Red);
Tools.SendLogs(string.Format("{0} tried using water", args.Player.Name), Color.Red);
@@ -574,7 +574,7 @@ namespace TShockAPI
if (TShock.Config.SpawnProtection)
{
- if (!args.Player.Group.HasPermission("editspawn"))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn))
{
var flag = TShock.CheckSpawn(x, y);
if (flag)
@@ -602,13 +602,13 @@ namespace TShockAPI
Tools.ForceKick(args.Player, string.Format(TShock.Config.TileKillAbuseReason, Main.tile[tilex, tiley].type));
return true;
}
- if (!args.Player.Group.HasPermission("canbuild"))
+ if (!args.Player.Group.HasPermission(Permissions.canbuild))
{
args.Player.SendMessage("You do not have permission to build!", Color.Red);
args.Player.SendTileSquare(tilex, tiley);
return true;
}
- if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(tilex, tiley, args.Player) && TShock.Regions.InArea(tilex, tiley))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(tilex, tiley, args.Player) && TShock.Regions.InArea(tilex, tiley))
{
args.Player.SendMessage("Region protected from changes.", Color.Red);
args.Player.SendTileSquare(tilex, tiley);
@@ -616,7 +616,7 @@ namespace TShockAPI
}
if (TShock.Config.DisableBuild)
{
- if (!args.Player.Group.HasPermission("editspawn"))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn))
{
args.Player.SendMessage("World protected from changes.", Color.Red);
args.Player.SendTileSquare(tilex, tiley);
@@ -625,7 +625,7 @@ namespace TShockAPI
}
if (TShock.Config.SpawnProtection)
{
- if (!args.Player.Group.HasPermission("editspawn"))
+ if (!args.Player.Group.HasPermission(Permissions.editspawn))
{
var flag = TShock.CheckSpawn(tilex, tiley);
if (flag)
diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs
new file mode 100644
index 00000000..b1c592cc
--- /dev/null
+++ b/TShockAPI/Permissions.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+
+namespace TShockAPI
+{
+ public static class Permissions
+ {
+ //Permissions with blank descriptions basically means its described by the commands it gives access to.
+
+ [Description("")]
+ public static readonly string causeevents;
+
+ [Description("Required to be able to build (modify tiles and liquid)")]
+ public static readonly string canbuild;
+
+ [Description("")]
+ public static readonly string kill;
+
+ [Description("Allows you to use banned items")]
+ public static readonly string usebanneditem;
+
+ [Description("Required to be able to place spikes")]
+ public static readonly string canspike;
+
+ [Description("Required to be able to place/pickup water")]
+ public static readonly string canwater;
+
+ [Description("Required to be able to place/pickup lava")]
+ public static readonly string canlava;
+
+ [Description("Allows you to edit the spawn")]
+ public static readonly string editspawn;
+
+ [Description("Prevents you from being kicked")]
+ public static readonly string immunetokick;
+
+ [Description("Prevents you from being banned")]
+ public static readonly string immunetoban;
+
+ [Description("Prevents you from being kicked/banned by TShocks grief detections")]
+ public static readonly string ignoregriefdetection;
+
+ [Description("Prevents you from being kicked/banned by TShocks cheat detections")]
+ public static readonly string ignorecheatdetection;
+
+ [Description("Allows you to use explosives even when they are disabled")]
+ public static readonly string useexplosives;
+
+ [Description("Specific log messages are sent to users with this permission")]
+ public static readonly string logs;
+
+ [Description("User gets the admin prefix/color in chat")]
+ public static readonly string adminchat;
+
+ [Todo]
+ [Description("Not currently working")]
+ public static readonly string reservedslot;
+
+ [Description("User is notified when an update is available")]
+ public static readonly string maintenance;
+
+ [Description("User can kick others")]
+ public static readonly string kick;
+
+ [Description("User can ban others")]
+ public static readonly string ban;
+
+ [Description("User can modify the whitelist")]
+ public static readonly string whitelist;
+
+ [Description("User can spawn bosses")]
+ public static readonly string spawnboss;
+
+ [Description("User can spawn npcs")]
+ public static readonly string spawnmob;
+
+ [Description("User can teleport")]
+ public static readonly string tp;
+
+ [Description("User can teleport people to them")]
+ public static readonly string tphere;
+
+ [Description("User can use warps")]
+ public static readonly string warp;
+
+ [Description("User can manage warps")]
+ public static readonly string managewarp;
+
+ [Description("User can manage item bans")]
+ public static readonly string manageitem;
+
+ [Description("User can edit sevrer configurations")]
+ public static readonly string cfg;
+
+ [Description("")]
+ public static readonly string time;
+
+ [Description("")]
+ public static readonly string pvpfun;
+
+ [Description("User can edit regions")]
+ public static readonly string manageregion;
+
+ [Description("Meant for super admins only")]
+ public static readonly string rootonly;
+
+ [Description("User can whisper to others")]
+ public static readonly string whisper;
+
+ [Description("")]
+ public static readonly string annoy;
+
+ [Description("User can kill all enemy npcs")]
+ public static readonly string butcher;
+
+ [Description("User can spawn items")]
+ public static readonly string item;
+
+ [Description("")]
+ public static readonly string heal;
+
+
+
+
+ static Permissions()
+ {
+ foreach (var field in typeof(Permissions).GetFields())
+ {
+ field.SetValue(null, field.Name);
+ }
+ }
+ }
+
+ [AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
+ public sealed class TodoAttribute : Attribute
+ {
+ public string Info { get; private set; }
+
+ public TodoAttribute(string info)
+ {
+ Info = info;
+
+ }
+ public TodoAttribute()
+ {
+ }
+
+ }
+
+}
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index d246f98b..6693aaa9 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -400,7 +400,7 @@ namespace TShockAPI
player.Group = Users.GetGroupForIP(player.IP);
}
- if (Tools.ActivePlayers() + 1 > Config.MaxSlots && !player.Group.HasPermission("reservedslot"))
+ if (Tools.ActivePlayers() + 1 > Config.MaxSlots && !player.Group.HasPermission(Permissions.reservedslot))
{
Tools.ForceKick(player, Config.ServerFullReason);
handler.Handled = true;
@@ -466,7 +466,7 @@ namespace TShockAPI
return;
}
- if (tsplr.Group.HasPermission("adminchat") && !text.StartsWith("/") && Config.AdminChatEnabled)
+ if (tsplr.Group.HasPermission(Permissions.adminchat) && !text.StartsWith("/") && Config.AdminChatEnabled)
{
Tools.Broadcast(Config.AdminChatPrefix + "<" + tsplr.Name + "> " + text,
tsplr.Group.R, tsplr.Group.G,
@@ -579,7 +579,7 @@ namespace TShockAPI
// Stop accepting updates from player as this player is going to be kicked/banned during OnUpdate (different thread so can produce race conditions)
if ((Config.BanKillTileAbusers || Config.KickKillTileAbusers) &&
- player.TileThreshold >= Config.TileThreshold && !player.Group.HasPermission("ignoregriefdetection"))
+ player.TileThreshold >= Config.TileThreshold && !player.Group.HasPermission(Permissions.ignoregriefdetection))
{
Log.Debug("Rejecting " + type + " from " + player.Name + " as this player is about to be kicked");
e.Handled = true;
@@ -627,7 +627,7 @@ namespace TShockAPI
"PvP is forced! Enable PvP else you can't deal damage to other people. (People can kill you)",
Color.Red);
}
- if (player.Group.HasPermission("causeevents") && Config.InfiniteInvasion)
+ if (player.Group.HasPermission(Permissions.causeevents) && Config.InfiniteInvasion)
{
StartInvasion();
}
diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj
index 9f680956..16c5480d 100644
--- a/TShockAPI/TShockAPI.csproj
+++ b/TShockAPI/TShockAPI.csproj
@@ -118,6 +118,7 @@
+
@@ -181,7 +182,7 @@
-
+