CDespawnState::CDespawnState(CBaseEntity* _PEntity, duration spawnTime) : CState(_PEntity, _PEntity->targid), m_spawnTime(spawnTime) { //TODO: BEHAVIOUR_NO_DESPAWN if (_PEntity->status != STATUS_DISAPPEAR) { _PEntity->loc.zone->PushPacket(_PEntity, CHAR_INRANGE, new CEntityAnimationPacket(_PEntity, CEntityAnimationPacket::Fade_Out)); _PEntity->PAI->QueueAction(queueAction_t(3s, false, [](CBaseEntity* PEntity) { PEntity->FadeOut(); //#event despawn luautils::OnMobDespawn(PEntity); PEntity->PAI->EventHandler.triggerListener("DESPAWN", PEntity); })); } }
void CMobEntity::Die() { m_THLvl = PEnmityContainer->GetHighestTH(); PEnmityContainer->Clear(); PAI->ClearStateStack(); if (PPet != nullptr && PPet->isAlive() && GetMJob() == JOB_SMN) { PPet->Die(); } PAI->Internal_Die(15s); CBattleEntity::Die(); PAI->QueueAction(queueAction_t(std::chrono::milliseconds(m_DropItemTime), false, [this](CBaseEntity* PEntity) { DropItems(); })); if (PMaster && PMaster->PPet == this && PMaster->objtype == TYPE_PC) { petutils::DetachPet(PMaster); } }