uint32 CMobEntity::GetRandomGil() { int16 min = getMobMod(MOBMOD_GIL_MIN); int16 max = getMobMod(MOBMOD_GIL_MAX); if(min && max) { // make sure divide won't crash server if(max <= min) { max = min+2; } if(max-min < 2) { max = min+2; ShowWarning("CMobEntity::GetRandomGil Max value is set too low, defauting\n"); } return rand()%(max-min)+min; } float gil = pow(GetMLevel(), 1.05f); if(gil < 1){ gil = 1; } uint16 highGil = (float)(gil) / 3 + 4; if(max) { highGil = max; } if(highGil < 2){ highGil = 2; } // randomize it gil += rand()%highGil; // NMs get more gil if((m_Type & MOBTYPE_NOTORIOUS) == MOBTYPE_NOTORIOUS){ gil *= 10; } // thfs drop more gil if(GetMJob() == JOB_THF){ gil = (float)gil * 1.5; } if(min && gil < min) { gil = min; } return gil; }
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); } }