mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-21 23:02:26 +00:00
[Performance] Don't process ProjectileAttack checks for NPC's that are not engaged in any combat
This commit is contained in:
parent
f931ef7bcb
commit
d777b1048d
@ -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
|
||||||
|
|||||||
@ -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...
|
||||||
|
|||||||
53
zone/npc.cpp
53
zone/npc.cpp
@ -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();
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user