optimization

This commit is contained in:
KayenEQ
2021-08-13 19:45:11 -04:00
parent 3e046233b5
commit 27e11e758b
4 changed files with 34 additions and 33 deletions
+5 -5
View File
@@ -5281,7 +5281,7 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac
hit.damage_done += (hit.damage_done * pct_damage_reduction / 100) + (defender->GetFcDamageAmtIncoming(this, 0, true, hit.skill)) + defender->GetPositionalDmgTakenAmt(this);
if (defender->GetShielderID()) {
if (defender->GetShielder()) {
DoShieldDamageOnShielder(defender, hit.damage_done, hit.skill);
hit.damage_done -= hit.damage_done * defender->GetShieldTargetMitigation() / 100; //Default shielded takes 50 pct damage
}
@@ -5295,20 +5295,20 @@ void Mob::DoShieldDamageOnShielder(Mob* shield_target, int hit_damage_done, EQ::
return;
}
Mob *shielder = entity_list.GetMob(shield_target->GetShielderID());
Mob *shielder = shield_target->GetShielder();
if (!shielder) {
return;
}
if (shield_target->CalculateDistance(shielder->GetX(), shielder->GetY(), shielder->GetZ()) > static_cast<float>(shielder->GetMaxShielderDistance())) {
shielder->SetShieldTargetID(0);
shielder->SetShieldTarget(nullptr);
shielder->SetShielderMitigation(0);
shielder->SetShielerMaxDistance(0);
shielder->shield_timer.Disable();
shield_target->SetShielderID(0);
shield_target->SetShielder(nullptr);
shield_target->SetShieldTargetMitigation(0);
return; //Too far away, no message is given thoughh.
return; //Too far away, no message is given thoughh.
}
int mitigation = shielder->GetShielderMitigation(); //Default shielder mitigates 25 pct of damage taken, this can be increased up to max 50 by equiping a shield item
+5 -5
View File
@@ -12862,15 +12862,15 @@ void Client::Handle_OP_Shielding(const EQApplicationPacket *app)
if (shield_target->GetID() == GetID()) { //Client will give message "You can not shield yourself"
return;
}
//You are a 'Shield Target' already have a 'Shielder'
if (GetShielderID() || shield_target->GetShielderID()) {
if (GetShielder() || shield_target->GetShielder()) {
MessageString(Chat::White, ALREADY_SHIELDED);
return;
}
//You are being shielded or already have a 'Shield Target'
if (GetShieldTargetID() || shield_target->GetShieldTargetID()) {
if (GetShieldTarget() || shield_target->GetShieldTarget()) {
MessageString(Chat::White, ALREADY_SHIELDING);
return;
}
@@ -12886,11 +12886,11 @@ void Client::Handle_OP_Shielding(const EQApplicationPacket *app)
entity_list.MessageCloseString(this, false, 100, 0, START_SHIELDING, GetName(), shield_target->GetName());
SetShieldTargetID(shield_target->GetID());
SetShieldTarget(shield_target);
SetShielderMitigation(25);
SetShielerMaxDistance(shielder_max_distance);
shield_target->SetShielderID(GetID());
shield_target->SetShielder(this);
shield_target->SetShieldTargetMitigation(50);
//Calculate AA for adding time SPA 255 extend shield duration
+17 -17
View File
@@ -377,8 +377,8 @@ Mob::Mob(
inWater = false;
shield_timer.Disable();
m_shield_target_id = 0;
m_shielder_id = 0;
m_shield_target = nullptr;
m_shielder = nullptr;
m_shield_target_mitigation = 0;
m_shielder_mitigation = 0;
m_shielder_max_distance = 0;
@@ -6211,7 +6211,7 @@ void Mob::ShieldAbility(uint32 target_id, int max_shielder_distance, int shield_
}
//You have a shielder, or your 'Shield Target' already has a 'Shielder'
if (GetShielderID() || shield_target->GetShielderID()) {
if (GetShielder() || shield_target->GetShielder()) {
if (IsClient()) {
MessageString(Chat::White, ALREADY_SHIELDED);
@@ -6220,7 +6220,7 @@ void Mob::ShieldAbility(uint32 target_id, int max_shielder_distance, int shield_
}
//You are being shielded or already have a 'Shield Target'
if (GetShieldTargetID() || shield_target->GetShieldTargetID()) {
if (GetShieldTarget() || shield_target->GetShieldTarget()) {
if (IsClient()) {
MessageString(Chat::White, ALREADY_SHIELDING);
@@ -6237,11 +6237,11 @@ void Mob::ShieldAbility(uint32 target_id, int max_shielder_distance, int shield_
entity_list.MessageCloseString(this, false, 100, 0, START_SHIELDING, GetCleanName(), shield_target->GetCleanName());
SetShieldTargetID(shield_target->GetID());
SetShieldTarget(shield_target);
SetShielderMitigation(shield_target_mitigation);
SetShielerMaxDistance(max_shielder_distance);
shield_target->SetShielderID(GetID());
shield_target->SetShielder(this);
shield_target->SetShieldTargetMitigation(shield_target_mitigation);
shield_timer.Start(shield_duration);
@@ -6249,14 +6249,14 @@ void Mob::ShieldAbility(uint32 target_id, int max_shielder_distance, int shield_
void Mob::ShieldAbilityFinish()
{
Mob* shield_target = entity_list.GetMob(GetShieldTargetID());
Mob* shield_target = GetShieldTarget();
if (shield_target) {
entity_list.MessageCloseString(this, false, 100, 0, END_SHIELDING, GetCleanName(), shield_target->GetCleanName());
shield_target->SetShielderID(0);
shield_target->SetShielder(nullptr);
shield_target->SetShieldTargetMitigation(0);
}
SetShieldTargetID(0);
SetShieldTarget(nullptr);
SetShielderMitigation(0);
SetShielerMaxDistance(0);
shield_timer.Disable();
@@ -6265,30 +6265,30 @@ void Mob::ShieldAbilityFinish()
void Mob::ShieldAbilityClearVariables()
{
//If 'shield target' dies
if (GetShielderID()){
if (GetShielder()){
Mob* shielder = entity_list.GetMob(GetShielderID());
Mob* shielder = GetShielder();
if (shielder) {
shielder->SetShieldTargetID(0);
shielder->SetShieldTarget(nullptr);
shielder->SetShielderMitigation(0);
shielder->SetShielerMaxDistance(0);
shielder->shield_timer.Disable();
}
SetShielderID(0);
SetShielder(nullptr);
SetShieldTargetMitigation(0);
}
//If 'shielder' dies
if (GetShieldTargetID()) {
if (GetShieldTarget()) {
Mob* shield_target = entity_list.GetMob(GetShieldTargetID());
Mob* shield_target = GetShieldTarget();
if (shield_target) {
shield_target->SetShielderID(0);
shield_target->SetShielder(nullptr);
shield_target->SetShieldTargetMitigation(0);
}
SetShieldTargetID(0);
SetShieldTarget(nullptr);
SetShielderMitigation(0);
SetShielerMaxDistance(0);
shield_timer.Disable();
+7 -6
View File
@@ -1137,10 +1137,11 @@ public:
void DoShieldDamageOnShielder(Mob* shield_target, int hit_damage_done, EQ::skills::SkillType skillInUse);
void ShieldAbilityFinish();
void ShieldAbilityClearVariables();
inline uint32 GetShielderID() const { return m_shielder_id; }
inline void SetShielderID(uint32 val) { m_shielder_id = val; }
inline uint32 GetShieldTargetID() const { return m_shield_target_id; }
inline void SetShieldTargetID(uint32 val) { m_shield_target_id = val; }
inline Mob* GetShielder() const { return m_shielder; }
virtual void SetShielder(Mob* mob) { m_shielder = mob; }
inline Mob* GetShieldTarget() const { return m_shield_target; }
virtual void SetShieldTarget(Mob* mob) { m_shield_target = mob; }
inline int GetShieldTargetMitigation() const { return m_shield_target_mitigation; }
inline void SetShieldTargetMitigation(int val) { m_shield_target_mitigation = val; }
inline int GetShielderMitigation() const { return m_shielder_mitigation; }
@@ -1453,8 +1454,8 @@ protected:
Timer focus_proc_limit_timer;
Timer shield_timer;
uint32 m_shield_target_id;
uint32 m_shielder_id;
Mob* m_shield_target;
Mob* m_shielder;
int m_shield_target_mitigation;
int m_shielder_mitigation;
int m_shielder_max_distance;