mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-10 02:31:03 +00:00
major updates
optimized pet support perl support
This commit is contained in:
+19
-24
@@ -1691,6 +1691,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQ::skills::Skill
|
||||
InterruptSpell();
|
||||
SetPet(0);
|
||||
SetHorseId(0);
|
||||
ShieldAbilityClearVariables();
|
||||
dead = true;
|
||||
|
||||
if (GetMerc()) {
|
||||
@@ -2252,6 +2253,8 @@ bool NPC::Death(Mob* killer_mob, int32 damage, uint16 spell, EQ::skills::SkillTy
|
||||
Log(Logs::Detail, Logs::Attack, "%s Mobs currently Aggro %i", __FUNCTION__, zone->MobsAggroCount());
|
||||
}
|
||||
|
||||
ShieldAbilityClearVariables();
|
||||
|
||||
SetHP(0);
|
||||
SetPet(0);
|
||||
|
||||
@@ -5278,61 +5281,53 @@ 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));
|
||||
|
||||
Shout("Shielder ID [%i]", defender->GetShielderID());
|
||||
|
||||
if (defender->GetShielderID()) {
|
||||
hit.damage_done = hit.damage_done * 50 / 100;//Don't round.
|
||||
DoShieldDamageOnShielder(defender, hit.damage_done, hit.skill);
|
||||
hit.damage_done -= hit.damage_done * defender->GetShieldTargetMitigation() / 100; //Default shielded takes 50 pct damage
|
||||
}
|
||||
|
||||
CheckNumHitsRemaining(NumHit::OutgoingHitSuccess);
|
||||
}
|
||||
|
||||
void Mob::DoShieldDamageOnShielder(Mob* shielder_target, int hit_damage_done, EQ::skills::SkillType skillInUse)
|
||||
void Mob::DoShieldDamageOnShielder(Mob* shield_target, int hit_damage_done, EQ::skills::SkillType skillInUse)
|
||||
{
|
||||
if (!shielder_target) {
|
||||
if (!shield_target) {
|
||||
return;
|
||||
}
|
||||
|
||||
Mob *shielder = entity_list.GetMob(shielder_target->GetShielderID());
|
||||
Mob *shielder = entity_list.GetMob(shield_target->GetShielderID());
|
||||
|
||||
if (!shielder) {
|
||||
return;
|
||||
}
|
||||
|
||||
//AA to increase SPA 230 extended shielding
|
||||
int max_shielder_distance = 15;
|
||||
int distance_mod = aabonuses.ExtendedShielding + itembonuses.ExtendedShielding + spellbonuses.ExtendedShielding;
|
||||
max_shielder_distance += max_shielder_distance * distance_mod / 100;
|
||||
max_shielder_distance = std::max(max_shielder_distance, 0);
|
||||
|
||||
if (shielder_target->CalculateDistance(shielder->GetX(), shielder->GetY(), shielder->GetZ()) > static_cast<float>(max_shielder_distance)) {
|
||||
//Clear variables Shield end
|
||||
Shout("Clear variables shield end");
|
||||
if (shield_target->CalculateDistance(shielder->GetX(), shielder->GetY(), shielder->GetZ()) > static_cast<float>(shielder->GetMaxShielderDistance())) {
|
||||
shielder->SetShieldTargetID(0);
|
||||
shielder_target->SetShielderID(0);
|
||||
shielder->SetShielderMitigation(0);
|
||||
shielder->SetShielerMaxDistance(0);
|
||||
shielder->shield_timer.Disable();
|
||||
shield_target->SetShielderID(0);
|
||||
shield_target->SetShieldTargetMitigation(0);
|
||||
return; //Too far away, no message is given thoughh.
|
||||
}
|
||||
|
||||
int mitigation = 75;
|
||||
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
|
||||
|
||||
if (shielder->HasShieldEquiped() && shielder->IsClient()) {
|
||||
if (shielder->IsClient() && shielder->HasShieldEquiped()) {
|
||||
|
||||
EQ::ItemInstance* inst = CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary);
|
||||
EQ::ItemInstance* inst = shielder->CastToClient()->GetInv().GetItem(EQ::invslot::slotSecondary);
|
||||
|
||||
if (inst) {
|
||||
|
||||
const EQ::ItemData* shield = inst->GetItem();
|
||||
if (shield && shield->ItemType == EQ::item::ItemTypeShield) {
|
||||
mitigation -= shield->AC * 0.50; //1% increase per 2 AC
|
||||
mitigation += shield->AC * 50 / 100; //1% increase per 2 AC
|
||||
std::min(50, mitigation);//50 pct max mitigation bonus from /shield
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mitigation = std::max(mitigation, 50);
|
||||
|
||||
hit_damage_done = hit_damage_done * mitigation / 100;
|
||||
|
||||
hit_damage_done -= hit_damage_done * mitigation / 100;
|
||||
shielder->Damage(this, hit_damage_done, SPELL_UNKNOWN, skillInUse, true, -1, false, m_specialattacks);
|
||||
shielder->CheckNumHitsRemaining(NumHit::OutgoingHitSuccess);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user