You could use table lookups... like this:
local afflictions = {
rightlegbruised = {"right leg", "bruised"},
rightlegmodbruised = {"right leg", "modbruised"},
rightlegcritbruised = {"right leg", "critbruised"},
rightlegbroken = {"right leg", "broken"},
leftlegbruised = {"left leg", "bruised"},
leftlegmodbruised = {"left leg", "modbruised"},
leftlegcritbruised = {"left leg", "critbruised"},
leftlegbroken = {"left leg", "broken"},
rightarmbruised = {"right arm", "bruised"},
rightarmmodbruised = {"right arm", "modbruised"},
rightarmcritbruised = {"right arm", "critbruised"},
rightarmbroken = {"right arm", "broken"},
leftarmbruised = {"left arm", "bruised"},
leftarmmodbruised = {"left arm", "modbruised"},
leftarmcritbruised = {"left arm", "critbruised"},
leftarmbroken = {"left arm", "broken"},
headbruised = {"head", "bruised"},
headmodbruised = {"head", "modbruised"},
headcritbruised = {"head", "critbruised"},
headbroken = {"head", "broken"},
torsobruised = {"torso", "bruised"},
torsomodbruised = {"torso", "modbruised"},
torsocritbruised = {"torso", "critbruised"},
torsobroken = {"torso", "broken"},
}
local part, condition, result
result = afflictions[nextSmash[1]]
part, condition = result[1], result[2]
It is a bit larger in a sense, but it will run very quickly, is easy to debug and to modify as needed. Also, if you are dealing with this same stuff in multiple places, it could potentially save space code wise. Obviously, for the purposes of making it easy to read, I made the table declaration rather spread out, but it could be substantially condensed. Like this:
local afflictions = {}
for k,v in ipairs({"leftleg","leftarm","rightarm","rightleg","head","torso"}) do
for k2, v2 in ipairs({"bruised","modbruised","critbruised","broken"}) do
afflictions[v..v2] = {v:gsub("right","right "):gsub("left","left "), v2}
end
end