diff --git a/.gitignore b/.gitignore
index dfcfd56..4d80bef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,6 +30,7 @@ bld/
[Oo]bj/
[Ll]og/
[Ll]ogs/
+[Bb]uild/
# Visual Studio 2015/2017 cache/options directory
.vs/
diff --git a/Vanillafier/Main.cs b/Vanillafier/Main.cs
index 0ee6c63..c067a64 100644
--- a/Vanillafier/Main.cs
+++ b/Vanillafier/Main.cs
@@ -14,6 +14,8 @@ public class Vanillafier : TerrariaPlugin
{
const string ConfirmationCommand = "vanillafy-confirm";
const string GroupName = "Vanillafied";
+ const string DefualtGuestGroupName = "guest";
+ const string DefaultRegistrationGroupName = "default";
static string TShockConfigPath { get { return Path.Combine(TShock.SavePath, "config.json"); } }
public override string Author => "Pryaxis";
@@ -26,10 +28,27 @@ public Vanillafier(Main game) : base(game) { }
public override void Initialize()
{
- Commands.ChatCommands.Add(new Command(Permissions.managegroup, Vanillafy, "vanillafy"));
+ Commands.ChatCommands.Add(new Command(Permissions.managegroup, vanillafy, "vanillafy"));
}
- public void Vanillafy(CommandArgs args)
+ bool checkState()
+ {
+ bool hasGroup = TShock.Groups.GroupExists(GroupName);
+ bool isDefualt = Group.DefaultGroup.Name == GroupName;
+
+ TShockConfig tsConfig = TShock.Config;
+ bool isDefaultOfConfig = tsConfig.Settings.DefaultGuestGroupName == GroupName && tsConfig.Settings.DefaultRegistrationGroupName == GroupName;
+
+ return hasGroup && isDefualt && isDefaultOfConfig;
+ }
+
+ void printVanillafyState(TSPlayer player)
+ {
+ string stateString = checkState() ? "Open" : "Closed";
+ player.SendInfoMessage($"Vanillafy State: {stateString}");
+ }
+
+ void vanillafy(CommandArgs args)
{
var player = args.Player;
if (player == null)
@@ -37,110 +56,158 @@ public void Vanillafy(CommandArgs args)
return;
}
- if (TShock.Groups.GroupExists(GroupName))
+ if (args.Parameters.Count <= 0)
{
- player.SendErrorMessage("The vanillafy command has already been run.");
- player.SendWarningMessage("If you proceed with running this command, your existing vanilla configuration will be reset.");
- }
- else
- {
- player.SendWarningMessage("This command will disable most cheat and grief protection for all non-superadmin users.");
+ printHelp(player);
+ return;
}
- player.SendWarningMessage($"Are you sure you wish to run this command? Use {TShock.Config.Settings.CommandSpecifier}{ConfirmationCommand} to complete configuration.");
- player.AwaitingResponse.Add(ConfirmationCommand, Confirm);
+ switch (args.Parameters[0]) {
+ case "on":
+ if (checkState())
+ {
+ player.SendErrorMessage("The vanillafy command has already been run.");
+ player.SendWarningMessage("If you proceed with running this command, your existing vanilla configuration will be reset.");
+ }
+ else
+ {
+ player.SendWarningMessage("This command will disable most cheat and grief protection for all non-superadmin users.");
+ }
+
+ player.SendWarningMessage($"Are you sure you wish to run this command? Use {TShock.Config.Settings.CommandSpecifier}{ConfirmationCommand} to complete configuration.");
+ player.AwaitingResponse.Add(ConfirmationCommand, trunOnConfirm);
+ break;
+ case "off":
+ if (checkState())
+ {
+ player.SendWarningMessage("Vanilla gameplay will be closed soon.");
+ player.SendWarningMessage($"Are you sure you wish to run this command? Use {TShock.Config.Settings.CommandSpecifier}{ConfirmationCommand} to complete configuration.");
+ player.AwaitingResponse.Add(ConfirmationCommand, trunOffConfirm);
+ }
+ else
+ {
+ player.SendErrorMessage("Server is not yet open vanilla gameplay.");
+ }
+ break;
+ case "state":
+ printVanillafyState(player);
+ break;
+ case "help":
+ default:
+ printHelp(player);
+ break;
+ }
}
- public void Confirm(object obj)
+ void printHelp(TSPlayer player)
{
- if (obj == null)
- {
- return;
- }
-
- CommandArgs args = (CommandArgs)obj;
- var player = args.Player ?? TSPlayer.Server;
+ player.SendInfoMessage("/vanillafy on - Open Vanillafy");
+ player.SendInfoMessage("/vanillafy off - Close Vanillafy");
+ player.SendInfoMessage("/vanillafy state - Get Vanillafy State");
+ player.SendInfoMessage("/vanillafy help - Get Vanillafy Help");
+ }
- //Get the TShock group manager and setup the new vanilla group
- GroupManager gm = TShock.Groups;
- Group group = CreateVanillaGroupObject();
- if (!gm.GroupExists(GroupName))
- {
- gm.AddGroup(name: GroupName, parentname: null, permissions: group.Permissions, chatcolor: Group.defaultChatColor);
- }
- else
- {
- gm.UpdateGroup(name: GroupName, parentname: null, permissions: group.Permissions, chatcolor: Group.defaultChatColor, suffix: null, prefix: null);
- }
- //Retrieve the group again just so that the object state is synced with db state
- group = gm.GetGroupByName(GroupName);
+ void changeState(Group group, string defaultGuestGroupName=DefualtGuestGroupName)
+ {
+ var GroupName = group.Name;
- //Get the TShock user manager, select all non-superadmin groups, and change their group to the new vanilla group
UserAccountManager um = TShock.UserAccounts;
um.GetUserAccounts().Where(u => u.Group != "superadmin" && u.Group != "owner").ForEach(u => um.SetUserGroup(u, GroupName));
- //Update all active player's groups, as long as they're not a superadmin
- foreach (var ply in TShock.Players)
+ foreach (var player in TShock.Players)
{
- if (ply?.Group == null || ply.Group is SuperAdminGroup)
+ if (player?.Group == null || player.Group is SuperAdminGroup)
{
continue;
}
- ply.Group = group;
+ player.Group = group;
}
- //Set the default group for any new guests joining
Group.DefaultGroup = group;
- //Update the TShock config file so all new guest users will be assigned to the vanilla group
TShockConfig tsConfig = TShock.Config;
- tsConfig.Settings.DefaultGuestGroupName = GroupName;
+ tsConfig.Settings.DefaultGuestGroupName = defaultGuestGroupName;
tsConfig.Settings.DefaultRegistrationGroupName = GroupName;
- //Write the config file so that this change persists
tsConfig.Write(TShockConfigPath);
+ }
+
+ void trunOnConfirm(object obj)
+ {
+ if (obj == null)
+ {
+ return;
+ }
+
+ GroupManager groupManager = TShock.Groups;
+ Group group = createVanillaGroupObject();
+ if (!groupManager.GroupExists(GroupName))
+ {
+ groupManager.AddGroup(name: GroupName, parentname: null, permissions: group.Permissions, chatcolor: Group.defaultChatColor);
+ }
+ else
+ {
+ groupManager.UpdateGroup(name: GroupName, parentname: null, permissions: group.Permissions, chatcolor: Group.defaultChatColor, suffix: null, prefix: null);
+ }
+ changeState(groupManager.GetGroupByName(GroupName), GroupName);
+ CommandArgs args = (CommandArgs)obj;
+ var player = args.Player ?? TSPlayer.Server;
player.SendSuccessMessage("Server has successfully been configured for vanilla gameplay.");
}
+
+ void trunOffConfirm(object obj)
+ {
+ if (obj == null)
+ {
+ return;
+ }
+
+ changeState(TShock.Groups.GetGroupByName(DefaultRegistrationGroupName));
+
+ CommandArgs args = (CommandArgs)obj;
+ var player = args.Player ?? TSPlayer.Server;
+ player.SendSuccessMessage("Server has been unconfigured for vanilla gameplay.");
+ }
- Group CreateVanillaGroupObject()
+ Group createVanillaGroupObject()
{
- Group g = new Group(GroupName);
-
- g.AddPermission("tshock.ignore.*");
- g.AddPermission("!tshock.ignore.ssc"); //Allow SSC gameplay
-
- g.AddPermission("tshock.account.*"); //Register, login, logout, change password
-
- g.AddPermission("tshock.npc.hurttown");
- g.AddPermission("tshock.npc.startinvasion");
- g.AddPermission("tshock.npc.startdd2");
- g.AddPermission("tshock.npc.summonboss");
- g.AddPermission("tshock.npc.spawnpets");
-
- g.AddPermission("tshock.tp.rod");
- g.AddPermission("tshock.tp.wormhole");
- g.AddPermission("tshock.tp.pylon");
- g.AddPermission("tshock.tp.tppotion");
- g.AddPermission("tshock.tp.magicconch");
- g.AddPermission("tshock.tp.demonconch");
-
- g.AddPermission("tshock.world.editspawn");
- g.AddPermission("tshock.world.modify");
- g.AddPermission("tshock.world.movenpc");
- g.AddPermission("tshock.world.paint");
- g.AddPermission("tshock.world.time.usesundial");
- g.AddPermission("tshock.world.toggleparty");
+ Group group = new Group(GroupName);
+
+ group.AddPermission("tshock.ignore.*");
+ group.AddPermission("!tshock.ignore.ssc");
+
+ group.AddPermission("tshock.account.*");
+
+ group.AddPermission("tshock.npc.hurttown");
+ group.AddPermission("tshock.npc.startinvasion");
+ group.AddPermission("tshock.npc.startdd2");
+ group.AddPermission("tshock.npc.summonboss");
+ group.AddPermission("tshock.npc.spawnpets");
+
+ group.AddPermission("tshock.tp.rod");
+ group.AddPermission("tshock.tp.wormhole");
+ group.AddPermission("tshock.tp.pylon");
+ group.AddPermission("tshock.tp.tppotion");
+ group.AddPermission("tshock.tp.magicconch");
+ group.AddPermission("tshock.tp.demonconch");
+
+ group.AddPermission("tshock.world.editspawn");
+ group.AddPermission("tshock.world.modify");
+ group.AddPermission("tshock.world.movenpc");
+ group.AddPermission("tshock.world.paint");
+ group.AddPermission("tshock.world.time.usesundial");
+ group.AddPermission("tshock.world.toggleparty");
- g.AddPermission("tshock.canchat");
- g.AddPermission("tshock.partychat");
- g.AddPermission("tshock.thirdperson");
- g.AddPermission("tshock.whisper");
- g.AddPermission("tshock.sendemoji");
+ group.AddPermission("tshock.canchat");
+ group.AddPermission("tshock.partychat");
+ group.AddPermission("tshock.thirdperson");
+ group.AddPermission("tshock.whisper");
+ group.AddPermission("tshock.sendemoji");
- g.AddPermission("tshock.journey.*");
+ group.AddPermission("tshock.journey.*");
- return g;
+ return group;
}
}
}
diff --git a/Vanillafier/Vanillafier.csproj b/Vanillafier/Vanillafier.csproj
index 899250d..1e37db6 100644
--- a/Vanillafier/Vanillafier.csproj
+++ b/Vanillafier/Vanillafier.csproj
@@ -49,9 +49,23 @@
MinimumRecommendedRules.ruleset
-
- False
- refs\OTAPI.dll
+
+ ..\packages\BCrypt.Net.0.1.0\lib\net35\BCrypt.Net.dll
+
+
+ ..\packages\TerrariaServer.TShock.4.5.5\lib\net452\HttpServer.dll
+
+
+ ..\packages\TerrariaServer.TShock.4.5.5\lib\net452\Mono.Data.Sqlite.dll
+
+
+ ..\packages\MySql.Data.6.9.12\lib\net45\MySql.Data.dll
+
+
+ ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+ ..\packages\TerrariaServer.TShock.4.5.5\lib\net452\OTAPI.dll
@@ -61,20 +75,23 @@
-
- False
- refs\TerrariaServer.exe
+
+ ..\packages\TerrariaServer.TShock.4.5.5\lib\net452\TerrariaServer.exe
-
- refs\TShockAPI.dll
+
+ ..\packages\TerrariaServer.TShock.4.5.5\lib\net452\TShockAPI.dll
+
+
+
+
xcopy /y /d "$(TargetPath)" "$(ProjectDir)build\"
-
+
\ No newline at end of file
diff --git a/Vanillafier/app.config b/Vanillafier/app.config
new file mode 100644
index 0000000..c9bc21d
--- /dev/null
+++ b/Vanillafier/app.config
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Vanillafier/build/Vanillafier.dll b/Vanillafier/build/Vanillafier.dll
deleted file mode 100644
index c7acaf1..0000000
Binary files a/Vanillafier/build/Vanillafier.dll and /dev/null differ
diff --git a/Vanillafier/packages.config b/Vanillafier/packages.config
new file mode 100644
index 0000000..f779fa4
--- /dev/null
+++ b/Vanillafier/packages.config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Vanillafier/refs/OTAPI.dll b/Vanillafier/refs/OTAPI.dll
deleted file mode 100644
index 11ccf47..0000000
Binary files a/Vanillafier/refs/OTAPI.dll and /dev/null differ
diff --git a/Vanillafier/refs/TShockAPI.dll b/Vanillafier/refs/TShockAPI.dll
deleted file mode 100644
index b00e027..0000000
Binary files a/Vanillafier/refs/TShockAPI.dll and /dev/null differ
diff --git a/Vanillafier/refs/TerrariaServer.exe b/Vanillafier/refs/TerrariaServer.exe
deleted file mode 100644
index ba1a738..0000000
Binary files a/Vanillafier/refs/TerrariaServer.exe and /dev/null differ