From e303071dce8d49a4e5f512b4940567f8de9464ba Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Mon, 22 Nov 2021 22:14:55 -0800 Subject: [PATCH] Fix firework command failing without color After updates to the firework command, a guard was lost, allowing the switch statement that selected the color to execute on a parameter that was empty. A guard was added to prevent falling into the switch statement without enough arguments to match a color. The default type of firework was manually set to a red firework. Fixes #2507 --- CHANGELOG.md | 1 + TShockAPI/Commands.cs | 77 ++++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 160e40b4..46cd481e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin ## Upcoming changes * Removed `TShockAPI/DB/DBTools.cs`. This appears to have been dead code and not used by anything. (@hakusaro, @DeathCradle) +* Fixed the `/firework` command not sending fireworks when specified without a firework color. The firework command now correctly sends red fireworks to a target if a color is not specified. (@hakusaro, @Kojirremer) ## TShock 4.5.7 * Fixed the `/respawn` command to permit respawning players from the console. (@hakusaro, @Kojirremer) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b03805ab..dac563e4 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -5546,44 +5546,47 @@ namespace TShockAPI user.SendMultipleMatchError(players.Select(p => p.Name)); else { - int type = 0; - switch (args.Parameters[1].ToLower()) + int type = ProjectileID.RocketFireworkRed; + if (args.Parameters.Count > 1) { - case "red": - case "r": - type = ProjectileID.RocketFireworkRed; - break; - case "green": - case "g": - type = ProjectileID.RocketFireworkGreen; - break; - case "blue": - case "b": - type = ProjectileID.RocketFireworkBlue; - break; - case "yellow": - case "y": - type = ProjectileID.RocketFireworkYellow; - break; - case "r2": - case "star": - type = ProjectileID.RocketFireworksBoxRed; - break; - case "g2": - case "spiral": - type = ProjectileID.RocketFireworksBoxGreen; - break; - case "b2": - case "rings": - type = ProjectileID.RocketFireworksBoxBlue; - break; - case "y2": - case "flower": - type = ProjectileID.RocketFireworksBoxYellow; - break; - default: - type = ProjectileID.RocketFireworkRed; - break; + switch (args.Parameters[1].ToLower()) + { + case "red": + case "r": + type = ProjectileID.RocketFireworkRed; + break; + case "green": + case "g": + type = ProjectileID.RocketFireworkGreen; + break; + case "blue": + case "b": + type = ProjectileID.RocketFireworkBlue; + break; + case "yellow": + case "y": + type = ProjectileID.RocketFireworkYellow; + break; + case "r2": + case "star": + type = ProjectileID.RocketFireworksBoxRed; + break; + case "g2": + case "spiral": + type = ProjectileID.RocketFireworksBoxGreen; + break; + case "b2": + case "rings": + type = ProjectileID.RocketFireworksBoxBlue; + break; + case "y2": + case "flower": + type = ProjectileID.RocketFireworksBoxYellow; + break; + default: + type = ProjectileID.RocketFireworkRed; + break; + } } var target = players[0]; int p = Projectile.NewProjectile(Projectile.GetNoneSource(), target.TPlayer.position.X, target.TPlayer.position.Y - 64f, 0f, -8f, type, 0, 0);