diff --git a/zone/attack.cpp b/zone/attack.cpp index 392a06f4a..a2f80554b 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -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(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 diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index c3da619c8..369bb14d4 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -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 diff --git a/zone/mob.cpp b/zone/mob.cpp index 76e1b72e0..bb85ff6aa 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -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(); diff --git a/zone/mob.h b/zone/mob.h index 76ee9158a..3913c6a8d 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -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;