Exemplo n.º 1
0
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);
        }));
    }
}
Exemplo n.º 2
0
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);
    }
}