Consolidated a number of world event commands into one master command
`worldevent` is now the root for the following: Meteor, fullmoon, bloodmoon, eclipse, invasions, sandstorm, rain. Added a new set of permission nodes to represent world events: `tshock.world.events.*`
This commit is contained in:
parent
a178b31333
commit
6ecdf8545f
2 changed files with 204 additions and 111 deletions
|
|
@ -400,10 +400,6 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
HelpText = "Renames an NPC."
|
HelpText = "Renames an NPC."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.invade, Invade, "invade")
|
|
||||||
{
|
|
||||||
HelpText = "Starts an NPC invasion."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.maxspawns, MaxSpawns, "maxspawns")
|
add(new Command(Permissions.maxspawns, MaxSpawns, "maxspawns")
|
||||||
{
|
{
|
||||||
HelpText = "Sets the maximum number of NPCs."
|
HelpText = "Sets the maximum number of NPCs."
|
||||||
|
|
@ -478,23 +474,11 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
HelpText = "Toggles build protection."
|
HelpText = "Toggles build protection."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.bloodmoon, Bloodmoon, "tbloodmoon")
|
|
||||||
{
|
|
||||||
HelpText = "Sets a blood moon."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.grow, Grow, "grow")
|
add(new Command(Permissions.grow, Grow, "grow")
|
||||||
{
|
{
|
||||||
AllowServer = false,
|
AllowServer = false,
|
||||||
HelpText = "Grows plants at your location."
|
HelpText = "Grows plants at your location."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.dropmeteor, DropMeteor, "dropmeteor")
|
|
||||||
{
|
|
||||||
HelpText = "Drops a meteor somewhere in the world."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.eclipse, Eclipse, "eclipse")
|
|
||||||
{
|
|
||||||
HelpText = "Sets an eclipse."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.halloween, ForceHalloween, "forcehalloween")
|
add(new Command(Permissions.halloween, ForceHalloween, "forcehalloween")
|
||||||
{
|
{
|
||||||
HelpText = "Toggles halloween mode (goodie bags, pumpkins, etc)."
|
HelpText = "Toggles halloween mode (goodie bags, pumpkins, etc)."
|
||||||
|
|
@ -503,9 +487,9 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
HelpText = "Toggles christmas mode (present spawning, santa, etc)."
|
HelpText = "Toggles christmas mode (present spawning, santa, etc)."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.fullmoon, Fullmoon, "fullmoon")
|
add(new Command(Permissions.manageevents, ManageWorldEvent, "worldevent")
|
||||||
{
|
{
|
||||||
HelpText = "Sets a full moon."
|
HelpText = "Enables starting and stopping various world events."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.hardmode, Hardmode, "hardmode")
|
add(new Command(Permissions.hardmode, Hardmode, "hardmode")
|
||||||
{
|
{
|
||||||
|
|
@ -515,14 +499,6 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
HelpText = "Toggles spawn protection."
|
HelpText = "Toggles spawn protection."
|
||||||
});
|
});
|
||||||
add(new Command(Permissions.sandstorm, Sandstorm, "sandstorm")
|
|
||||||
{
|
|
||||||
HelpText = "Toggles sandstorms."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.rain, Rain, "rain")
|
|
||||||
{
|
|
||||||
HelpText = "Toggles the rain."
|
|
||||||
});
|
|
||||||
add(new Command(Permissions.worldsave, Save, "save")
|
add(new Command(Permissions.worldsave, Save, "save")
|
||||||
{
|
{
|
||||||
HelpText = "Saves the world file."
|
HelpText = "Saves the world file."
|
||||||
|
|
@ -1978,6 +1954,118 @@ namespace TShockAPI
|
||||||
|
|
||||||
#region Cause Events and Spawn Monsters Commands
|
#region Cause Events and Spawn Monsters Commands
|
||||||
|
|
||||||
|
static readonly List<string> _validEvents = new List<string>()
|
||||||
|
{
|
||||||
|
"meteor",
|
||||||
|
"fullmoon",
|
||||||
|
"bloodmoon",
|
||||||
|
"eclipse",
|
||||||
|
"invasion",
|
||||||
|
"sandstorm",
|
||||||
|
"rain"
|
||||||
|
};
|
||||||
|
static readonly List<string> _validInvasions = new List<string>()
|
||||||
|
{
|
||||||
|
"goblins",
|
||||||
|
"snowmen",
|
||||||
|
"pirates",
|
||||||
|
"pumpkinmoon",
|
||||||
|
"frostmoon"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static void ManageWorldEvent(CommandArgs args)
|
||||||
|
{
|
||||||
|
if (args.Parameters.Count < 1)
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}worldevent <event type>", Specifier);
|
||||||
|
args.Player.SendErrorMessage("Valid event types: {0}", String.Join(", ", _validEvents));
|
||||||
|
args.Player.SendErrorMessage("Valid invasion types if spawning an invasion: {0}", String.Join(", ", _validInvasions));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var eventType = args.Parameters[0].ToLowerInvariant();
|
||||||
|
|
||||||
|
void FailedPermissionCheck()
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage("You do not have sufficient permissions to start the {0} event.", eventType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (eventType)
|
||||||
|
{
|
||||||
|
case "meteor":
|
||||||
|
if (!args.Player.HasPermission(Permissions.dropmeteor) && !args.Player.HasPermission(Permissions.managemeteorevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DropMeteor(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "fullmoon":
|
||||||
|
case "full moon":
|
||||||
|
if (!args.Player.HasPermission(Permissions.fullmoon) && !args.Player.HasPermission(Permissions.managefullmoonevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Fullmoon(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "bloodmoon":
|
||||||
|
case "blood moon":
|
||||||
|
if (!args.Player.HasPermission(Permissions.bloodmoon) && !args.Player.HasPermission(Permissions.managebloodmoonevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Bloodmoon(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "eclipse":
|
||||||
|
if (!args.Player.HasPermission(Permissions.eclipse) && !args.Player.HasPermission(Permissions.manageeclipseevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Eclipse(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "invade":
|
||||||
|
case "invasion":
|
||||||
|
if (!args.Player.HasPermission(Permissions.invade) && !args.Player.HasPermission(Permissions.manageinvasionevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Invade(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "sandstorm":
|
||||||
|
if (!args.Player.HasPermission(Permissions.sandstorm) && !args.Player.HasPermission(Permissions.managesandstormevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Sandstorm(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case "rain":
|
||||||
|
if (!args.Player.HasPermission(Permissions.rain) && !args.Player.HasPermission(Permissions.managerainevent))
|
||||||
|
{
|
||||||
|
FailedPermissionCheck();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Rain(args);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
args.Player.SendErrorMessage("Invalid event type! Valid event types: {0}", String.Join(", ", _validEvents));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void DropMeteor(CommandArgs args)
|
private static void DropMeteor(CommandArgs args)
|
||||||
{
|
{
|
||||||
WorldGen.spawnMeteor = false;
|
WorldGen.spawnMeteor = false;
|
||||||
|
|
@ -2035,14 +2123,15 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
if (Main.invasionSize <= 0)
|
if (Main.invasionSize <= 0)
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count < 1)
|
if (args.Parameters.Count < 2)
|
||||||
{
|
{
|
||||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}invade <invasion type> [wave]", Specifier);
|
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}worldevent invasion [invasion type] [invasion wave]", Specifier);
|
||||||
|
args.Player.SendErrorMessage("Valid invasion types: {0}", String.Join(", ", _validInvasions));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wave = 1;
|
int wave = 1;
|
||||||
switch (args.Parameters[0].ToLower())
|
switch (args.Parameters[1].ToLowerInvariant())
|
||||||
{
|
{
|
||||||
case "goblin":
|
case "goblin":
|
||||||
case "goblins":
|
case "goblins":
|
||||||
|
|
@ -2064,9 +2153,9 @@ namespace TShockAPI
|
||||||
|
|
||||||
case "pumpkin":
|
case "pumpkin":
|
||||||
case "pumpkinmoon":
|
case "pumpkinmoon":
|
||||||
if (args.Parameters.Count > 1)
|
if (args.Parameters.Count > 2)
|
||||||
{
|
{
|
||||||
if (!int.TryParse(args.Parameters[1], out wave) || wave <= 0)
|
if (!int.TryParse(args.Parameters[2], out wave) || wave <= 0)
|
||||||
{
|
{
|
||||||
args.Player.SendErrorMessage("Invalid wave!");
|
args.Player.SendErrorMessage("Invalid wave!");
|
||||||
break;
|
break;
|
||||||
|
|
@ -2082,9 +2171,9 @@ namespace TShockAPI
|
||||||
|
|
||||||
case "frost":
|
case "frost":
|
||||||
case "frostmoon":
|
case "frostmoon":
|
||||||
if (args.Parameters.Count > 1)
|
if (args.Parameters.Count > 2)
|
||||||
{
|
{
|
||||||
if (!int.TryParse(args.Parameters[1], out wave) || wave <= 0)
|
if (!int.TryParse(args.Parameters[2], out wave) || wave <= 0)
|
||||||
{
|
{
|
||||||
args.Player.SendErrorMessage("Invalid wave!");
|
args.Player.SendErrorMessage("Invalid wave!");
|
||||||
return;
|
return;
|
||||||
|
|
@ -2103,6 +2192,10 @@ namespace TShockAPI
|
||||||
TSPlayer.All.SendInfoMessage("{0} has started a martian invasion.", args.Player.Name);
|
TSPlayer.All.SendInfoMessage("{0} has started a martian invasion.", args.Player.Name);
|
||||||
TShock.Utils.StartInvasion(4);
|
TShock.Utils.StartInvasion(4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
args.Player.SendErrorMessage("Invalid invasion type! Valid invasion types: {0}", String.Join(", ", _validInvasions));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (DD2Event.Ongoing)
|
else if (DD2Event.Ongoing)
|
||||||
|
|
@ -2117,6 +2210,71 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void Sandstorm(CommandArgs args)
|
||||||
|
{
|
||||||
|
if (Terraria.GameContent.Events.Sandstorm.Happening)
|
||||||
|
{
|
||||||
|
Terraria.GameContent.Events.Sandstorm.StopSandstorm();
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} stopped the sandstorm.", args.Player.Name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Terraria.GameContent.Events.Sandstorm.StartSandstorm();
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} started a sandstorm.", args.Player.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Rain(CommandArgs args)
|
||||||
|
{
|
||||||
|
bool slime = false;
|
||||||
|
if (args.Parameters.Count > 1 && args.Parameters[1].ToLowerInvariant() == "slime")
|
||||||
|
{
|
||||||
|
slime = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!slime)
|
||||||
|
{
|
||||||
|
args.Player.SendInfoMessage("Use \"{0}worldevent rain slime\" to start slime rain!", Specifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slime && Main.raining) //Slime rain cannot be activated during normal rain
|
||||||
|
{
|
||||||
|
args.Player.SendErrorMessage("You should stop the current downpour before beginning a slimier one!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slime && Main.slimeRain) //Toggle slime rain off
|
||||||
|
{
|
||||||
|
Main.StopSlimeRain(false);
|
||||||
|
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} ended the slimey downpour.", args.Player.Name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slime && !Main.slimeRain) //Toggle slime rain on
|
||||||
|
{
|
||||||
|
Main.StartSlimeRain(false);
|
||||||
|
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} caused it to rain slime.", args.Player.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Main.raining && !slime) //Toggle rain off
|
||||||
|
{
|
||||||
|
Main.StopRain();
|
||||||
|
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} ended the downpour.", args.Player.Name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Main.raining && !slime) //Toggle rain on
|
||||||
|
{
|
||||||
|
Main.StartRain();
|
||||||
|
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
||||||
|
TSPlayer.All.SendInfoMessage("{0} caused it to rain.", args.Player.Name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void ClearAnglerQuests(CommandArgs args)
|
private static void ClearAnglerQuests(CommandArgs args)
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count > 0)
|
if (args.Parameters.Count > 0)
|
||||||
|
|
@ -2148,8 +2306,8 @@ namespace TShockAPI
|
||||||
{ "normal", 0 },
|
{ "normal", 0 },
|
||||||
{ "expert", 1 },
|
{ "expert", 1 },
|
||||||
{ "master", 2 },
|
{ "master", 2 },
|
||||||
{ "creative", 3 },
|
{ "journey", 3 },
|
||||||
{ "journey", 3 }
|
{ "creative", 3 }
|
||||||
};
|
};
|
||||||
|
|
||||||
private static void ChangeWorldMode(CommandArgs args)
|
private static void ChangeWorldMode(CommandArgs args)
|
||||||
|
|
@ -2182,7 +2340,7 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.GameMode = mode;
|
Main.GameMode = mode;
|
||||||
args.Player.SendSuccessMessage("World mode set to {0}", _worldModes.Keys.ElementAt(mode - 1));
|
args.Player.SendSuccessMessage("World mode set to {0}", _worldModes.Keys.ElementAt(mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Hardmode(CommandArgs args)
|
private static void Hardmode(CommandArgs args)
|
||||||
|
|
@ -4053,81 +4211,6 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Sandstorm(CommandArgs args)
|
|
||||||
{
|
|
||||||
if (args.Parameters.Count < 1)
|
|
||||||
{
|
|
||||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}sandstorm <stop/start>", Specifier);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.Parameters[0].ToLowerInvariant())
|
|
||||||
{
|
|
||||||
case "start":
|
|
||||||
Terraria.GameContent.Events.Sandstorm.StartSandstorm();
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} started a sandstorm.", args.Player.Name);
|
|
||||||
break;
|
|
||||||
case "stop":
|
|
||||||
Terraria.GameContent.Events.Sandstorm.StopSandstorm();
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} stopped the sandstorm.", args.Player.Name);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}sandstorm <stop/start>", Specifier);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void Rain(CommandArgs args)
|
|
||||||
{
|
|
||||||
if (args.Parameters.Count < 1 || args.Parameters.Count > 2)
|
|
||||||
{
|
|
||||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}rain [slime] <stop/start>", Specifier);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int switchIndex = 0;
|
|
||||||
if (args.Parameters.Count == 2 && args.Parameters[0].ToLowerInvariant() == "slime")
|
|
||||||
{
|
|
||||||
switchIndex = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.Parameters[switchIndex].ToLower())
|
|
||||||
{
|
|
||||||
case "start":
|
|
||||||
if (switchIndex == 1)
|
|
||||||
{
|
|
||||||
Main.StartSlimeRain(false);
|
|
||||||
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} caused it to rain slime.", args.Player.Name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Main.StartRain();
|
|
||||||
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} caused it to rain.", args.Player.Name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "stop":
|
|
||||||
if (switchIndex == 1)
|
|
||||||
{
|
|
||||||
Main.StopSlimeRain(false);
|
|
||||||
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} ended the slimey downpour.", args.Player.Name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Main.StopRain();
|
|
||||||
TSPlayer.All.SendData(PacketTypes.WorldInfo);
|
|
||||||
TSPlayer.All.SendInfoMessage("{0} ended the downpour.", args.Player.Name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: {0}rain [slime] <stop/start>", Specifier);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void Slap(CommandArgs args)
|
private static void Slap(CommandArgs args)
|
||||||
{
|
{
|
||||||
if (args.Parameters.Count < 1 || args.Parameters.Count > 2)
|
if (args.Parameters.Count < 1 || args.Parameters.Count > 2)
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,16 @@ namespace TShockAPI
|
||||||
|
|
||||||
// tshock.world nodes
|
// tshock.world nodes
|
||||||
|
|
||||||
|
[Description("User can use the 'worldevent' command")]
|
||||||
|
public static readonly string manageevents = "tshock.world.events";
|
||||||
|
public static readonly string managebloodmoonevent = "tshock.world.events.bloodmoon";
|
||||||
|
public static readonly string managefullmoonevent = "tshock.world.events.fullmoon";
|
||||||
|
public static readonly string manageinvasionevent = "tshock.world.events.invasion";
|
||||||
|
public static readonly string managemeteorevent = "tshock.world.events.meteor";
|
||||||
|
public static readonly string manageeclipseevent = "tshock.world.events.eclipse";
|
||||||
|
public static readonly string managesandstormevent = "tshock.world.events.sandstorm";
|
||||||
|
public static readonly string managerainevent = "tshock.world.events.rain";
|
||||||
|
|
||||||
[Description("User can change expert state.")]
|
[Description("User can change expert state.")]
|
||||||
public static readonly string toggleexpert = "tshock.world.toggleexpert";
|
public static readonly string toggleexpert = "tshock.world.toggleexpert";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue