mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 13:16:39 +00:00
Implemented 467,468
Implemented SE_DS_Mitigation_Amount 467 SE_DS_Mitigation_Percentage 468 Reduce incoming DS by amt or percentage. base1 is value, if a reduction is desired it should be set to negative for both.
This commit is contained in:
+3
-3
@@ -809,13 +809,13 @@ typedef enum {
|
|||||||
#define SE_PC_Pet_Rampage 464 // implemented - Base1 % chance to do rampage for base2 % of damage each melee round
|
#define SE_PC_Pet_Rampage 464 // implemented - Base1 % chance to do rampage for base2 % of damage each melee round
|
||||||
//#define SE_PC_Pet_AE_Rampage 465 // Would assume as above but need to confirm.
|
//#define SE_PC_Pet_AE_Rampage 465 // Would assume as above but need to confirm.
|
||||||
#define SE_PC_Pet_Flurry_Chance 466 // implemented - Base1 % chance to do flurry from double attack hit.
|
#define SE_PC_Pet_Flurry_Chance 466 // implemented - Base1 % chance to do flurry from double attack hit.
|
||||||
//#define SE_DS_Mitigation_Amount 467 //
|
#define SE_DS_Mitigation_Amount 467 //
|
||||||
//#define SE_DS_Mitigation_Percentage 468 //
|
#define SE_DS_Mitigation_Percentage 468 //
|
||||||
//#define SE_Chance_Best_in_Spell_Grp 469 //
|
//#define SE_Chance_Best_in_Spell_Grp 469 //
|
||||||
//#define SE_Trigger_Best_in_Spell Grp 470 //
|
//#define SE_Trigger_Best_in_Spell Grp 470 //
|
||||||
//#define SE_Double_Melee_Round 471 //
|
//#define SE_Double_Melee_Round 471 //
|
||||||
//#define SE_Buy_AA_Rank 472 //
|
//#define SE_Buy_AA_Rank 472 //
|
||||||
//#define SE_Double_Backstab_Front 473 //
|
#define SE_Double_Backstab_Front 473 //
|
||||||
//#define SE_Pet_Crit_Melee_Damage_Pct_Owner 474 //
|
//#define SE_Pet_Crit_Melee_Damage_Pct_Owner 474 //
|
||||||
//#define SE_Trigger_Spell_Non_Item 475 //
|
//#define SE_Trigger_Spell_Non_Item 475 //
|
||||||
//#define SE_Weapon_Stance 476 //
|
//#define SE_Weapon_Stance 476 //
|
||||||
|
|||||||
+9
-1
@@ -2902,6 +2902,10 @@ void Mob::DamageShield(Mob* attacker, bool spell_ds) {
|
|||||||
|
|
||||||
DS += aabonuses.DamageShield; //Live AA - coat of thistles. (negative value)
|
DS += aabonuses.DamageShield; //Live AA - coat of thistles. (negative value)
|
||||||
DS -= itembonuses.DamageShield; //+Damage Shield should only work when you already have a DS spell
|
DS -= itembonuses.DamageShield; //+Damage Shield should only work when you already have a DS spell
|
||||||
|
DS -= attacker->aabonuses.DS_Mitigation_Amount + attacker->itembonuses.DS_Mitigation_Amount + attacker->spellbonuses.DS_Mitigation_Amount; //Negative value to reduce
|
||||||
|
//Do not allow flat amount reductions to reduce past 0.
|
||||||
|
if (DS >= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
//Spell data for damage shield mitigation shows a negative value for spells for clients and positive
|
//Spell data for damage shield mitigation shows a negative value for spells for clients and positive
|
||||||
//value for spells that effect pets. Unclear as to why. For now will convert all positive to be consistent.
|
//value for spells that effect pets. Unclear as to why. For now will convert all positive to be consistent.
|
||||||
@@ -2911,7 +2915,11 @@ void Mob::DamageShield(Mob* attacker, bool spell_ds) {
|
|||||||
attacker->aabonuses.DSMitigationOffHand;
|
attacker->aabonuses.DSMitigationOffHand;
|
||||||
DS -= DS*mitigation / 100;
|
DS -= DS*mitigation / 100;
|
||||||
}
|
}
|
||||||
DS -= DS * attacker->itembonuses.DSMitigation / 100;
|
|
||||||
|
int mitigation_pct = attacker->aabonuses.DS_Mitigation_Percentage + attacker->itembonuses.DS_Mitigation_Percentage + attacker->spellbonuses.DS_Mitigation_Percentage; //Negative value to reduce
|
||||||
|
|
||||||
|
// Subtract mitigations b/c mitigation_pct is a negative value when reducing total DS
|
||||||
|
DS -= DS * ((attacker->itembonuses.DSMitigation - mitigation_pct) / 100);
|
||||||
}
|
}
|
||||||
attacker->Damage(this, -DS, spellid, EQ::skills::SkillAbjuration/*hackish*/, false);
|
attacker->Damage(this, -DS, spellid, EQ::skills::SkillAbjuration/*hackish*/, false);
|
||||||
//we can assume there is a spell now
|
//we can assume there is a spell now
|
||||||
|
|||||||
@@ -978,6 +978,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
|
|||||||
case SE_FrontalBackstabChance:
|
case SE_FrontalBackstabChance:
|
||||||
newbon->FrontalBackstabChance += base1;
|
newbon->FrontalBackstabChance += base1;
|
||||||
break;
|
break;
|
||||||
|
case SE_Double_Backstab_Front:
|
||||||
|
newbon->Double_Backstab_Front += base1;
|
||||||
|
break;
|
||||||
case SE_BlockBehind:
|
case SE_BlockBehind:
|
||||||
newbon->BlockBehind += base1;
|
newbon->BlockBehind += base1;
|
||||||
break;
|
break;
|
||||||
@@ -1535,6 +1538,14 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Amount:
|
||||||
|
newbon->DS_Mitigation_Amount += base1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Percentage:
|
||||||
|
newbon->DS_Mitigation_Percentage += base1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
// to do
|
// to do
|
||||||
case SE_PetDiscipline:
|
case SE_PetDiscipline:
|
||||||
@@ -2833,6 +2844,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
|||||||
new_bonus->FrontalBackstabChance += effect_value;
|
new_bonus->FrontalBackstabChance += effect_value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SE_Double_Backstab_Front:
|
||||||
|
new_bonus->Double_Backstab_Front += effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
case SE_ConsumeProjectile:
|
case SE_ConsumeProjectile:
|
||||||
new_bonus->ConsumeProjectile += effect_value;
|
new_bonus->ConsumeProjectile += effect_value;
|
||||||
break;
|
break;
|
||||||
@@ -3363,6 +3378,14 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Amount:
|
||||||
|
new_bonus->DS_Mitigation_Amount += effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Percentage:
|
||||||
|
new_bonus->DS_Mitigation_Percentage += effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
|
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
|
||||||
@@ -4557,6 +4580,12 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
|||||||
itembonuses.FrontalBackstabChance = effect_value;
|
itembonuses.FrontalBackstabChance = effect_value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SE_Double_Backstab_Front:
|
||||||
|
spellbonuses.Double_Backstab_Front = effect_value;
|
||||||
|
aabonuses.Double_Backstab_Front = effect_value;
|
||||||
|
itembonuses.Double_Backstab_Front = effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
case SE_ConsumeProjectile:
|
case SE_ConsumeProjectile:
|
||||||
spellbonuses.ConsumeProjectile = effect_value;
|
spellbonuses.ConsumeProjectile = effect_value;
|
||||||
aabonuses.ConsumeProjectile = effect_value;
|
aabonuses.ConsumeProjectile = effect_value;
|
||||||
@@ -4918,6 +4947,37 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
|||||||
aabonuses.AC_Avoidance_Max_Percent = effect_value;
|
aabonuses.AC_Avoidance_Max_Percent = effect_value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SE_Melee_Damage_Position_Mod:
|
||||||
|
spellbonuses.Melee_Damage_Position_Mod[0] = effect_value;
|
||||||
|
aabonuses.Melee_Damage_Position_Mod[0] = effect_value;
|
||||||
|
itembonuses.Melee_Damage_Position_Mod[0] = effect_value;
|
||||||
|
spellbonuses.Melee_Damage_Position_Mod[1] = effect_value;
|
||||||
|
aabonuses.Melee_Damage_Position_Mod[1] = effect_value;
|
||||||
|
itembonuses.Melee_Damage_Position_Mod[1] = effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SE_Damage_Taken_Position_Mod:
|
||||||
|
spellbonuses.Damage_Taken_Position_Mod[0] = effect_value;
|
||||||
|
aabonuses.Damage_Taken_Position_Mod[0] = effect_value;
|
||||||
|
itembonuses.Damage_Taken_Position_Mod[0] = effect_value;
|
||||||
|
spellbonuses.Damage_Taken_Position_Mod[1] = effect_value;
|
||||||
|
aabonuses.Damage_Taken_Position_Mod[1] = effect_value;
|
||||||
|
itembonuses.Damage_Taken_Position_Mod[1] = effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Amount:
|
||||||
|
spellbonuses.DS_Mitigation_Amount = effect_value;
|
||||||
|
itembonuses.DS_Mitigation_Amount = effect_value;
|
||||||
|
aabonuses.DS_Mitigation_Amount = effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SE_DS_Mitigation_Percentage:
|
||||||
|
spellbonuses.DS_Mitigation_Percentage = effect_value;
|
||||||
|
itembonuses.DS_Mitigation_Percentage = effect_value;
|
||||||
|
aabonuses.DS_Mitigation_Percentage = effect_value;
|
||||||
|
break;
|
||||||
|
|
||||||
case SE_SkillProcSuccess:{
|
case SE_SkillProcSuccess:{
|
||||||
for(int e = 0; e < MAX_SKILL_PROCS; e++)
|
for(int e = 0; e < MAX_SKILL_PROCS; e++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -530,6 +530,9 @@ struct StatBonuses {
|
|||||||
int32 AC_Avoidance_Max_Percent; // Increase AC avoidance by percent
|
int32 AC_Avoidance_Max_Percent; // Increase AC avoidance by percent
|
||||||
int32 Damage_Taken_Position_Mod[2]; // base = percent melee damage reduction base2 0=back 1=front. [0]Back[1]Front
|
int32 Damage_Taken_Position_Mod[2]; // base = percent melee damage reduction base2 0=back 1=front. [0]Back[1]Front
|
||||||
int32 Melee_Damage_Position_Mod[2]; // base = percent melee damage increase base2 0=back 1=front. [0]Back[1]Front
|
int32 Melee_Damage_Position_Mod[2]; // base = percent melee damage increase base2 0=back 1=front. [0]Back[1]Front
|
||||||
|
int32 Double_Backstab_Front; // base = percent chance to double back stab front
|
||||||
|
int32 DS_Mitigation_Amount; // base = flat amt DS mitigation. Negative value to reduce
|
||||||
|
int32 DS_Mitigation_Percentage; // base = percent amt of DS mitigation. Negative value to reduce
|
||||||
|
|
||||||
// AAs
|
// AAs
|
||||||
int8 Packrat; //weight reduction for items, 1 point = 10%
|
int8 Packrat; //weight reduction for items, 1 point = 10%
|
||||||
|
|||||||
@@ -585,6 +585,10 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) {
|
|||||||
if(IsClient())
|
if(IsClient())
|
||||||
CastToClient()->CheckIncreaseSkill(EQ::skills::SkillBackstab, other, 10);
|
CastToClient()->CheckIncreaseSkill(EQ::skills::SkillBackstab, other, 10);
|
||||||
m_specialattacks = eSpecialAttacks::None;
|
m_specialattacks = eSpecialAttacks::None;
|
||||||
|
|
||||||
|
int double_bs_front = aabonuses.Double_Backstab_Front + itembonuses.Double_Backstab_Front + spellbonuses.Double_Backstab_Front;
|
||||||
|
if (double_bs_front && other->GetHP() > 0 && zone->random.Roll(double_bs_front))
|
||||||
|
RogueBackstab(other, false, ReuseTime);
|
||||||
}
|
}
|
||||||
else { //We do a single regular attack if we attack from the front without chaotic stab
|
else { //We do a single regular attack if we attack from the front without chaotic stab
|
||||||
Attack(other, EQ::invslot::slotPrimary);
|
Attack(other, EQ::invslot::slotPrimary);
|
||||||
|
|||||||
@@ -3128,6 +3128,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
case SE_Critical_Melee_Damage_Mod_Max:
|
case SE_Critical_Melee_Damage_Mod_Max:
|
||||||
case SE_Melee_Damage_Position_Mod:
|
case SE_Melee_Damage_Position_Mod:
|
||||||
case SE_Damage_Taken_Position_Mod:
|
case SE_Damage_Taken_Position_Mod:
|
||||||
|
case SE_DS_Mitigation_Amount:
|
||||||
|
case SE_DS_Mitigation_Percentage:
|
||||||
|
case SE_Double_Backstab_Front:
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user