Clean up death messages

This commit is contained in:
Bigjango13 2024-01-30 00:47:07 -05:00
parent ba266db007
commit 19dd4b1d79
1 changed files with 26 additions and 36 deletions

View File

@ -11,63 +11,53 @@ static const char *monster_names[] = {"Zombie", "Creeper", "Skeleton", "Spider",
static std::string get_death_message(Player *player, Entity *cause, bool was_shot = false) { static std::string get_death_message(Player *player, Entity *cause, bool was_shot = false) {
// Prepare Death Message // Prepare Death Message
std::string message = player->username; std::string message = player->username;
// The cause
if (cause) { if (cause) {
// Entity cause // Entity cause
int type_id = cause->vtable->getEntityTypeId(cause); int type_id = cause->vtable->getEntityTypeId(cause);
int aux = cause->vtable->getAuxData(cause); int aux = cause->vtable->getAuxData(cause);
if (cause->vtable->isPlayer(cause)) { bool is_player = cause->vtable->isPlayer(cause);
// Another player if (cause->vtable->getCreatureBaseType(cause) != 0 || is_player) {
// Killed by a creature
if (was_shot) { if (was_shot) {
message += " was shot by "; message += " was shot by ";
} else { } else {
message += " was killed by "; message += " was killed by ";
} }
message += ((Player *) cause)->username; if (is_player) {
} else if (cause->vtable->getCreatureBaseType(cause) == 1) { // Killed by a player
// Killed by a monster message += ((Player *) cause)->username;
if (was_shot) { } else if (32 <= type_id && type_id <= 36) {
message += " was shot by a "; // Normal monster
} else { message += "a ";
message += " was killed by a ";
}
if (32 <= type_id && type_id <= 36) {
message += monster_names[type_id - 32]; message += monster_names[type_id - 32];
} else { } else {
// Unknown monster // Unknown creature
message += "Mysterious Beast"; message += "a Mysterious Beast";
} }
return message;
} else if (aux) { } else if (aux) {
// Throwable with owner // Killed by a throwable with owner
Level *level = player->level; Level *level = player->level;
Entity *shooter = Level_getEntity(level, aux); Entity *shooter = Level_getEntity(level, aux);
return get_death_message(player, shooter, true); return get_death_message(player, shooter, true);
} else if (80 <= type_id || type_id <= 82) {
// Throwable without owner
message += " was shot under mysterious circumstances";
} else if (type_id == 65) { } else if (type_id == 65) {
// TNT // Blown up by TNT
message += " was blown apart"; return message + " was blown apart";
} else if (cause->vtable->isHangingEntity(cause)) { } else if (cause->vtable->isHangingEntity(cause)) {
// Painting? // Painting?
message += " admired too much art"; return message + " admired too much art";
} else {
if (was_shot) {
message += " was shot under mysterious circumstances";
} else {
message += " was killed under mysterious circumstances";
}
} }
}
if (was_shot) {
// Throwable with invalid owner
return message + " was shot under mysterious circumstances";
} else if (cause) {
// Unknown entity
return message + " was killed";
} else { } else {
// Non-entity cause // Anything else
if (was_shot) { return message + " has died";
// Throwable with invalid owner
message += " was shot under mysterious circumstances";
} else {
// Anything else
message += " has died";
}
} }
// Return // Return