Core: Properly handle pet killing critters and also remove some old code - fixes a few issues:

- make pets return home after killing a critter (they refused to return to player on critter death)
- kills of an OLD bug : make critters lootable if they have loot (for quests). Fixes issue #1950.
Thanks to linencloth for the help on finding this bugger.

--HG--
branch : trunk
This commit is contained in:
click
2010-09-13 18:22:16 +02:00
parent 88f378e7ae
commit a48923ee8c
+2 -24
View File
@@ -650,29 +650,6 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
return 0; return 0;
} }
// no xp,health if type 8 /critters/
if (pVictim->GetTypeId() != TYPEID_PLAYER && pVictim->GetCreatureType() == CREATURE_TYPE_CRITTER)
{
// allow loot only if has loot_id in creature_template
if (damage >= pVictim->GetHealth())
{
pVictim->setDeathState(JUST_DIED);
CreatureInfo const* cInfo = pVictim->ToCreature()->GetCreatureInfo();
if (cInfo && cInfo->lootid)
pVictim->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
// some critters required for quests (need normal entry instead possible heroic in any cases)
if (GetTypeId() == TYPEID_PLAYER)
if (CreatureInfo const* normalInfo = sObjectMgr.GetCreatureTemplate(pVictim->GetEntry()))
this->ToPlayer()->KilledMonster(normalInfo,pVictim->GetGUID());
}
else
pVictim->ModifyHealth(- (int32)damage);
return damage;
}
sLog.outStaticDebug("DealDamageStart"); sLog.outStaticDebug("DealDamageStart");
uint32 health = pVictim->GetHealth(); uint32 health = pVictim->GetHealth();
@@ -15254,6 +15231,7 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss)
if (Unit *owner = GetOwner()) if (Unit *owner = GetOwner())
owner->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_NONE, PROC_EX_NONE, 0); owner->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_NONE, PROC_EX_NONE, 0);
if (pVictim->GetCreatureType() != CREATURE_TYPE_CRITTER)
ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0);
// Proc auras on death - must be before aura/combat remove // Proc auras on death - must be before aura/combat remove
@@ -15302,7 +15280,7 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss)
// only if not player and not controlled by player pet. And not at BG // only if not player and not controlled by player pet. And not at BG
if ((durabilityLoss && !player && !pVictim->ToPlayer()->InBattleground()) || (player && sWorld.getBoolConfig(CONFIG_DURABILITY_LOSS_IN_PVP))) if ((durabilityLoss && !player && !pVictim->ToPlayer()->InBattleground()) || (player && sWorld.getBoolConfig(CONFIG_DURABILITY_LOSS_IN_PVP)))
{ {
sLog.outStaticDebug("We are dead, losing %f percent durability", sWorld.getRate(RATE_DURABILITY_LOSS_ON_DEATH)); sLog.outStaticDebug("We are dead, loosing %f percent durability", sWorld.getRate(RATE_DURABILITY_LOSS_ON_DEATH));
pVictim->ToPlayer()->DurabilityLossAll(sWorld.getRate(RATE_DURABILITY_LOSS_ON_DEATH),false); pVictim->ToPlayer()->DurabilityLossAll(sWorld.getRate(RATE_DURABILITY_LOSS_ON_DEATH),false);
// durability lost message // durability lost message
WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0); WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0);