[Performance] Don't process ProjectileAttack checks for NPC's that are not engaged in any combat

This commit is contained in:
Akkadius 2017-03-28 03:05:46 -05:00
parent f931ef7bcb
commit d777b1048d
4 changed files with 34 additions and 33 deletions

View File

@ -6,6 +6,7 @@ Akkadius: [Performance] Fixed a large overhead issue where every single NPC in a
Akkadius: [Performance] Removed a timer where clients would constantly calculate light amount on equipment every 600ms, instead Akkadius: [Performance] Removed a timer where clients would constantly calculate light amount on equipment every 600ms, instead
clients will update light when changing equipment or entering a zone clients will update light when changing equipment or entering a zone
Akkadius: [Performance] Disabled enraged timer checks for NPC's that do not actually have enrage as a special attack Akkadius: [Performance] Disabled enraged timer checks for NPC's that do not actually have enrage as a special attack
Akkadius: [Performance] Don't process ProjectileAttack checks for NPC's that are not engaged in any combat
== 03/27/2017 == == 03/27/2017 ==
Akkadius: [Performance] Reworked how client to NPC aggro checks are made Akkadius: [Performance] Reworked how client to NPC aggro checks are made

View File

@ -1011,8 +1011,8 @@ void Mob::AI_Process() {
CastToNPC()->CheckSignal(); CastToNPC()->CheckSignal();
} }
if (engaged) if (engaged) {
{
if (!(m_PlayerState & static_cast<uint32>(PlayerState::Aggressive))) if (!(m_PlayerState & static_cast<uint32>(PlayerState::Aggressive)))
SendAddPlayerState(PlayerState::Aggressive); SendAddPlayerState(PlayerState::Aggressive);
// we are prevented from getting here if we are blind and don't have a target in range // we are prevented from getting here if we are blind and don't have a target in range
@ -1039,8 +1039,7 @@ void Mob::AI_Process() {
if (!target) if (!target)
return; return;
if (target->IsCorpse()) if (target->IsCorpse()) {
{
RemoveFromHateList(this); RemoveFromHateList(this);
return; return;
} }
@ -1057,6 +1056,8 @@ void Mob::AI_Process() {
if (DivineAura()) if (DivineAura())
return; return;
ProjectileAttack();
auto npcSpawnPoint = CastToNPC()->GetSpawnPoint(); auto npcSpawnPoint = CastToNPC()->GetSpawnPoint();
if (GetSpecialAbility(TETHER)) { if (GetSpecialAbility(TETHER)) {
float tether_range = static_cast<float>(GetSpecialAbilityParam(TETHER, 0)); float tether_range = static_cast<float>(GetSpecialAbilityParam(TETHER, 0));
@ -1255,6 +1256,7 @@ void Mob::AI_Process() {
} }
AI_EngagedCastCheck(); AI_EngagedCastCheck();
} //end is within combat rangepet } //end is within combat rangepet
else { else {
//we cannot reach our target... //we cannot reach our target...

View File

@ -587,8 +587,7 @@ void NPC::RemoveCash() {
bool NPC::Process() bool NPC::Process()
{ {
if (IsStunned() && stunned_timer.Check()) if (IsStunned() && stunned_timer.Check()) {
{
Mob::UnStun(); Mob::UnStun();
this->spun_timer.Disable(); this->spun_timer.Disable();
} }
@ -608,58 +607,60 @@ bool NPC::Process()
SpellProcess(); SpellProcess();
if(tic_timer.Check()) if (tic_timer.Check()) {
{
parse->EventNPC(EVENT_TICK, this, nullptr, "", 0); parse->EventNPC(EVENT_TICK, this, nullptr, "", 0);
BuffProcess(); BuffProcess();
if(currently_fleeing) if (currently_fleeing)
ProcessFlee(); ProcessFlee();
uint32 bonus = 0; uint32 bonus = 0;
if(GetAppearance() == eaSitting) if (GetAppearance() == eaSitting)
bonus+=3; bonus += 3;
int32 OOCRegen = 0; int32 OOCRegen = 0;
if(oocregen > 0){ //should pull from Mob class if (oocregen > 0) { //should pull from Mob class
OOCRegen += GetMaxHP() * oocregen / 100; OOCRegen += GetMaxHP() * oocregen / 100;
} }
//Lieka Edit:Fixing NPC regen.NPCs should regen to full during a set duration, not based on their HPs.Increase NPC's HPs by % of total HPs / tick. //Lieka Edit:Fixing NPC regen.NPCs should regen to full during a set duration, not based on their HPs.Increase NPC's HPs by % of total HPs / tick.
if((GetHP() < GetMaxHP()) && !IsPet()) { if ((GetHP() < GetMaxHP()) && !IsPet()) {
if(!IsEngaged()) {//NPC out of combat if (!IsEngaged()) {//NPC out of combat
if(GetNPCHPRegen() > OOCRegen) if (GetNPCHPRegen() > OOCRegen)
SetHP(GetHP() + GetNPCHPRegen()); SetHP(GetHP() + GetNPCHPRegen());
else else
SetHP(GetHP() + OOCRegen); SetHP(GetHP() + OOCRegen);
} else }
SetHP(GetHP()+GetNPCHPRegen());
} else if(GetHP() < GetMaxHP() && GetOwnerID() !=0) {
if(!IsEngaged()) //pet
SetHP(GetHP()+GetNPCHPRegen()+bonus+(GetLevel()/5));
else else
SetHP(GetHP()+GetNPCHPRegen()+bonus); SetHP(GetHP() + GetNPCHPRegen());
} else }
SetHP(GetHP()+GetNPCHPRegen()); else if (GetHP() < GetMaxHP() && GetOwnerID() != 0) {
if (!IsEngaged()) //pet
SetHP(GetHP() + GetNPCHPRegen() + bonus + (GetLevel() / 5));
else
SetHP(GetHP() + GetNPCHPRegen() + bonus);
}
else
SetHP(GetHP() + GetNPCHPRegen());
if(GetMana() < GetMaxMana()) { if (GetMana() < GetMaxMana()) {
SetMana(GetMana()+mana_regen+bonus); SetMana(GetMana() + mana_regen + bonus);
} }
if(zone->adv_data && !p_depop) if (zone->adv_data && !p_depop)
{ {
ServerZoneAdventureDataReply_Struct* ds = (ServerZoneAdventureDataReply_Struct*)zone->adv_data; ServerZoneAdventureDataReply_Struct* ds = (ServerZoneAdventureDataReply_Struct*)zone->adv_data;
if(ds->type == Adventure_Rescue && ds->data_id == GetNPCTypeID()) if (ds->type == Adventure_Rescue && ds->data_id == GetNPCTypeID())
{ {
Mob *o = GetOwner(); Mob *o = GetOwner();
if(o && o->IsClient()) if (o && o->IsClient())
{ {
float x_diff = ds->dest_x - GetX(); float x_diff = ds->dest_x - GetX();
float y_diff = ds->dest_y - GetY(); float y_diff = ds->dest_y - GetY();
float z_diff = ds->dest_z - GetZ(); float z_diff = ds->dest_z - GetZ();
float dist = ((x_diff * x_diff) + (y_diff * y_diff) + (z_diff * z_diff)); float dist = ((x_diff * x_diff) + (y_diff * y_diff) + (z_diff * z_diff));
if(dist < RuleR(Adventure, DistanceForRescueComplete)) if (dist < RuleR(Adventure, DistanceForRescueComplete))
{ {
zone->DoAdventureCountIncrease(); zone->DoAdventureCountIncrease();
Say("You don't know what this means to me. Thank you so much for finding and saving me from" Say("You don't know what this means to me. Thank you so much for finding and saving me from"
@ -693,8 +694,6 @@ bool NPC::Process()
viral_timer_counter = 0; viral_timer_counter = 0;
} }
ProjectileAttack();
if(spellbonuses.GravityEffect == 1) { if(spellbonuses.GravityEffect == 1) {
if(gravity_timer.Check()) if(gravity_timer.Check())
DoGravityEffect(); DoGravityEffect();

View File

@ -956,7 +956,6 @@ void Mob::ProjectileAttack()
{ {
if (!HasProjectileAttack()) if (!HasProjectileAttack())
return; return;
;
Mob *target = nullptr; Mob *target = nullptr;
bool disable = true; bool disable = true;