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