mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 14:41:28 +00:00
Fix for ModSkillDmgTaken to once again work with (-1 = ALL skills)
Fix for perl GetModSkillDmgTaken
This commit is contained in:
parent
e15ee6e320
commit
7851f272e5
@ -171,6 +171,8 @@ enum SkillUseTypes
|
||||
|
||||
// temporary until it can be sorted out...
|
||||
#define HIGHEST_SKILL SkillFrenzy
|
||||
// Spell Effects use this value to determine if an effect applies to all skills.
|
||||
#define ALL_SKILLS -1
|
||||
|
||||
// server profile does not reflect this yet..so, prefixed with 'PACKET_'
|
||||
#define PACKET_SKILL_ARRAY_SIZE 100
|
||||
|
||||
@ -701,7 +701,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
{
|
||||
//Note: AA effects that use accuracy are skill limited, while spell effect is not.
|
||||
case SE_Accuracy:
|
||||
if ((base2 == -1) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1))
|
||||
if ((base2 == ALL_SKILLS) && (newbon->Accuracy[HIGHEST_SKILL+1] < base1))
|
||||
newbon->Accuracy[HIGHEST_SKILL+1] = base1;
|
||||
else if (newbon->Accuracy[base2] < base1)
|
||||
newbon->Accuracy[base2] += base1;
|
||||
@ -1043,7 +1043,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_HitChance:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->HitChanceEffect[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->HitChanceEffect[base2] += base1;
|
||||
@ -1099,7 +1099,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_CriticalHitChance:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->CriticalHitChance[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->CriticalHitChance[base2] += base1;
|
||||
@ -1109,7 +1109,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
case SE_CriticalDamageMob:
|
||||
{
|
||||
// base1 = effect value, base2 = skill restrictions(-1 for all)
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->CritDmgMob[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->CritDmgMob[base2] += base1;
|
||||
@ -1137,7 +1137,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_SkillDamageAmount:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->SkillDamageAmount[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->SkillDamageAmount[base2] += base1;
|
||||
@ -1154,7 +1154,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_DamageModifier:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->DamageModifier[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->DamageModifier[base2] += base1;
|
||||
@ -1163,7 +1163,7 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_DamageModifier2:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
newbon->DamageModifier2[HIGHEST_SKILL+1] += base1;
|
||||
else
|
||||
newbon->DamageModifier2[base2] += base1;
|
||||
@ -1873,7 +1873,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
case SE_CriticalHitChance:
|
||||
{
|
||||
if (AdditiveWornBonus) {
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->CriticalHitChance[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->CriticalHitChance[base2] += effect_value;
|
||||
@ -1881,16 +1881,16 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
else if(effect_value < 0) {
|
||||
|
||||
if(base2 == -1 && new_bonus->CriticalHitChance[HIGHEST_SKILL+1] > effect_value)
|
||||
if(base2 == ALL_SKILLS && new_bonus->CriticalHitChance[HIGHEST_SKILL+1] > effect_value)
|
||||
new_bonus->CriticalHitChance[HIGHEST_SKILL+1] = effect_value;
|
||||
else if(base2 != -1 && new_bonus->CriticalHitChance[base2] > effect_value)
|
||||
else if(base2 != ALL_SKILLS && new_bonus->CriticalHitChance[base2] > effect_value)
|
||||
new_bonus->CriticalHitChance[base2] = effect_value;
|
||||
}
|
||||
|
||||
|
||||
else if(base2 == -1 && new_bonus->CriticalHitChance[HIGHEST_SKILL+1] < effect_value)
|
||||
else if(base2 == ALL_SKILLS && new_bonus->CriticalHitChance[HIGHEST_SKILL+1] < effect_value)
|
||||
new_bonus->CriticalHitChance[HIGHEST_SKILL+1] = effect_value;
|
||||
else if(base2 != -1 && new_bonus->CriticalHitChance[base2] < effect_value)
|
||||
else if(base2 != ALL_SKILLS && new_bonus->CriticalHitChance[base2] < effect_value)
|
||||
new_bonus->CriticalHitChance[base2] = effect_value;
|
||||
|
||||
break;
|
||||
@ -2068,7 +2068,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
{
|
||||
if(new_bonus->MeleeSkillCheck < effect_value) {
|
||||
new_bonus->MeleeSkillCheck = effect_value;
|
||||
new_bonus->MeleeSkillCheckSkill = base2==-1?255:base2;
|
||||
new_bonus->MeleeSkillCheckSkill = base2==ALL_SKILLS?255:base2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -2077,13 +2077,13 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
{
|
||||
|
||||
if (AdditiveWornBonus){
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->HitChanceEffect[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->HitChanceEffect[base2] += effect_value;
|
||||
}
|
||||
|
||||
else if(base2 == -1){
|
||||
else if(base2 == ALL_SKILLS){
|
||||
|
||||
if ((effect_value < 0) && (new_bonus->HitChanceEffect[HIGHEST_SKILL+1] > effect_value))
|
||||
new_bonus->HitChanceEffect[HIGHEST_SKILL+1] = effect_value;
|
||||
@ -2109,7 +2109,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_DamageModifier:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->DamageModifier[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->DamageModifier[base2] += effect_value;
|
||||
@ -2118,7 +2118,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_DamageModifier2:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->DamageModifier2[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->DamageModifier2[base2] += effect_value;
|
||||
@ -2127,7 +2127,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_MinDamageModifier:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->MinDamageModifier[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->MinDamageModifier[base2] += effect_value;
|
||||
@ -2225,14 +2225,14 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
{
|
||||
//When using npc_spells_effects if MAX value set, use stackable quest based modifier.
|
||||
if (IsAISpellEffect && max){
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
SkillDmgTaken_Mod[HIGHEST_SKILL+1] = effect_value;
|
||||
else
|
||||
SkillDmgTaken_Mod[base2] = effect_value;
|
||||
}
|
||||
else {
|
||||
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->SkillDmgTaken[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->SkillDmgTaken[base2] += effect_value;
|
||||
@ -2341,7 +2341,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_CriticalDamageMob:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->CritDmgMob[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->CritDmgMob[base2] += effect_value;
|
||||
@ -2357,7 +2357,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_SkillDamageAmount:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->SkillDamageAmount[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->SkillDamageAmount[base2] += effect_value;
|
||||
@ -2462,7 +2462,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
|
||||
case SE_SkillDamageAmount2:
|
||||
{
|
||||
if(base2 == -1)
|
||||
if(base2 == ALL_SKILLS)
|
||||
new_bonus->SkillDamageAmount2[HIGHEST_SKILL+1] += effect_value;
|
||||
else
|
||||
new_bonus->SkillDamageAmount2[base2] += effect_value;
|
||||
|
||||
26
zone/mob.cpp
26
zone/mob.cpp
@ -3550,17 +3550,14 @@ int16 Mob::GetSkillDmgTaken(const SkillUseTypes skill_used)
|
||||
{
|
||||
int skilldmg_mod = 0;
|
||||
|
||||
int16 MeleeVuln = spellbonuses.MeleeVulnerability + itembonuses.MeleeVulnerability + aabonuses.MeleeVulnerability;
|
||||
|
||||
// All skill dmg mod + Skill specific
|
||||
skilldmg_mod += itembonuses.SkillDmgTaken[HIGHEST_SKILL+1] + spellbonuses.SkillDmgTaken[HIGHEST_SKILL+1] +
|
||||
itembonuses.SkillDmgTaken[skill_used] + spellbonuses.SkillDmgTaken[skill_used];
|
||||
|
||||
|
||||
//Innate SetSkillDamgeTaken(skill,value)
|
||||
if ((SkillDmgTaken_Mod[skill_used]) || (SkillDmgTaken_Mod[HIGHEST_SKILL+1]))
|
||||
skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[HIGHEST_SKILL+1];
|
||||
skilldmg_mod += SkillDmgTaken_Mod[skill_used] + SkillDmgTaken_Mod[HIGHEST_SKILL+1];
|
||||
|
||||
skilldmg_mod += MeleeVuln;
|
||||
skilldmg_mod += spellbonuses.MeleeVulnerability + itembonuses.MeleeVulnerability + aabonuses.MeleeVulnerability;
|
||||
|
||||
if(skilldmg_mod < -100)
|
||||
skilldmg_mod = -100;
|
||||
@ -4643,22 +4640,21 @@ void Mob::SetBodyType(bodyType new_body, bool overwrite_orig) {
|
||||
|
||||
void Mob::ModSkillDmgTaken(SkillUseTypes skill_num, int value)
|
||||
{
|
||||
if (skill_num <= HIGHEST_SKILL)
|
||||
SkillDmgTaken_Mod[skill_num] = value;
|
||||
|
||||
|
||||
else if (skill_num == 255 || skill_num == -1)
|
||||
if (skill_num == ALL_SKILLS)
|
||||
SkillDmgTaken_Mod[HIGHEST_SKILL+1] = value;
|
||||
|
||||
else if (skill_num >= 0 && skill_num <= HIGHEST_SKILL)
|
||||
SkillDmgTaken_Mod[skill_num] = value;
|
||||
}
|
||||
|
||||
int16 Mob::GetModSkillDmgTaken(const SkillUseTypes skill_num)
|
||||
{
|
||||
if (skill_num <= HIGHEST_SKILL)
|
||||
return SkillDmgTaken_Mod[skill_num];
|
||||
|
||||
else if (skill_num == 255 || skill_num == -1)
|
||||
if (skill_num == ALL_SKILLS)
|
||||
return SkillDmgTaken_Mod[HIGHEST_SKILL+1];
|
||||
|
||||
else if (skill_num >= 0 && skill_num <= HIGHEST_SKILL)
|
||||
return SkillDmgTaken_Mod[skill_num];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -7783,7 +7783,7 @@ XS(XS_Mob_GetModSkillDmgTaken)
|
||||
Perl_croak(aTHX_ "Usage: Mob::GetModSkillDmgTaken(THIS, skill_num)");
|
||||
{
|
||||
Mob * THIS;
|
||||
uint32 RETVAL;
|
||||
int16 RETVAL;
|
||||
dXSTARG;
|
||||
SkillUseTypes skill_num = (SkillUseTypes)SvUV(ST(1));
|
||||
|
||||
@ -7797,7 +7797,7 @@ XS(XS_Mob_GetModSkillDmgTaken)
|
||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||
|
||||
RETVAL = THIS->GetModSkillDmgTaken(skill_num);
|
||||
XSprePUSH; PUSHu((UV)RETVAL);
|
||||
XSprePUSH; PUSHi((IV)RETVAL);
|
||||
}
|
||||
XSRETURN(1);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user