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
This commit is contained in:
Lucas Nicodemus 2021-11-22 22:14:55 -08:00
parent a01b48ead5
commit e303071dce
2 changed files with 41 additions and 37 deletions

View file

@ -14,6 +14,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
## Upcoming changes ## Upcoming changes
* Removed `TShockAPI/DB/DBTools.cs`. This appears to have been dead code and not used by anything. (@hakusaro, @DeathCradle) * 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 ## TShock 4.5.7
* Fixed the `/respawn` command to permit respawning players from the console. (@hakusaro, @Kojirremer) * Fixed the `/respawn` command to permit respawning players from the console. (@hakusaro, @Kojirremer)

View file

@ -5546,44 +5546,47 @@ namespace TShockAPI
user.SendMultipleMatchError(players.Select(p => p.Name)); user.SendMultipleMatchError(players.Select(p => p.Name));
else else
{ {
int type = 0; int type = ProjectileID.RocketFireworkRed;
switch (args.Parameters[1].ToLower()) if (args.Parameters.Count > 1)
{ {
case "red": switch (args.Parameters[1].ToLower())
case "r": {
type = ProjectileID.RocketFireworkRed; case "red":
break; case "r":
case "green": type = ProjectileID.RocketFireworkRed;
case "g": break;
type = ProjectileID.RocketFireworkGreen; case "green":
break; case "g":
case "blue": type = ProjectileID.RocketFireworkGreen;
case "b": break;
type = ProjectileID.RocketFireworkBlue; case "blue":
break; case "b":
case "yellow": type = ProjectileID.RocketFireworkBlue;
case "y": break;
type = ProjectileID.RocketFireworkYellow; case "yellow":
break; case "y":
case "r2": type = ProjectileID.RocketFireworkYellow;
case "star": break;
type = ProjectileID.RocketFireworksBoxRed; case "r2":
break; case "star":
case "g2": type = ProjectileID.RocketFireworksBoxRed;
case "spiral": break;
type = ProjectileID.RocketFireworksBoxGreen; case "g2":
break; case "spiral":
case "b2": type = ProjectileID.RocketFireworksBoxGreen;
case "rings": break;
type = ProjectileID.RocketFireworksBoxBlue; case "b2":
break; case "rings":
case "y2": type = ProjectileID.RocketFireworksBoxBlue;
case "flower": break;
type = ProjectileID.RocketFireworksBoxYellow; case "y2":
break; case "flower":
default: type = ProjectileID.RocketFireworksBoxYellow;
type = ProjectileID.RocketFireworkRed; break;
break; default:
type = ProjectileID.RocketFireworkRed;
break;
}
} }
var target = players[0]; var target = players[0];
int p = Projectile.NewProjectile(Projectile.GetNoneSource(), target.TPlayer.position.X, target.TPlayer.position.Y - 64f, 0f, -8f, type, 0, 0); int p = Projectile.NewProjectile(Projectile.GetNoneSource(), target.TPlayer.position.X, target.TPlayer.position.Y - 64f, 0f, -8f, type, 0, 0);