mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
Implemented new table 'npc_spells_effects' and 'npc_spells_effects_entires'.
Implemented new field in 'npc_spell_effects_id' in npc_types. These are used to directly apply spell effect bonuses to NPC's without requirings spells/buffs. Example: Allow an npc to spawn with an innate 50 pt damage shield and a 5% chance to critical hit. Please see the wiki page: http://wiki.eqemulator.org/p?npc_spell_effects_entries for details. *NPC's can now do critical heals / damage spells if bonus is applied from table. Required SQL: utils/sql/git/required/2014_04_27_AISpellEffects.sql Note: 30 examples of spell effects have been included by default in this sql. Edited/removed as needed.
This commit is contained in:
+30
-12
@@ -1158,14 +1158,20 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case SE_SpellEffectResistChance:
|
||||
{
|
||||
for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2)
|
||||
{
|
||||
if(!newbon->SEResist[e] || ((newbon->SEResist[e] = base2) && (newbon->SEResist[e+1] < base1)) ){
|
||||
newbon->SEResist[e] = base2;
|
||||
newbon->SEResist[e+1] = base1;
|
||||
break;
|
||||
if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < base1)){
|
||||
newbon->SEResist[e] = base2; //Spell Effect ID
|
||||
newbon->SEResist[e+1] = base1; //Resist Chance
|
||||
break;
|
||||
}
|
||||
else if (!newbon->SEResist[e+1]){
|
||||
newbon->SEResist[e] = base2; //Spell Effect ID
|
||||
newbon->SEResist[e+1] = base1; //Resist Chance
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1791,10 +1797,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
newbon->MeleeLifetap += spells[spell_id].base[i];
|
||||
|
||||
else if((effect_value < 0) && (newbon->MeleeLifetap > effect_value))
|
||||
newbon->MeleeLifetap = spells[spell_id].base[i];
|
||||
newbon->MeleeLifetap = effect_value;
|
||||
|
||||
else if(newbon->MeleeLifetap < spells[spell_id].base[i])
|
||||
newbon->MeleeLifetap = spells[spell_id].base[i];
|
||||
else if(newbon->MeleeLifetap < effect_value)
|
||||
newbon->MeleeLifetap = effect_value;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2494,10 +2500,14 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
{
|
||||
for(int e = 0; e < MAX_RESISTABLE_EFFECTS*2; e+=2)
|
||||
{
|
||||
if(!newbon->SEResist[e] &&
|
||||
((newbon->SEResist[e] = base2) && (newbon->SEResist[e+1] < effect_value)) ){
|
||||
newbon->SEResist[e] = base2;
|
||||
newbon->SEResist[e+1] = effect_value;
|
||||
if(newbon->SEResist[e+1] && (newbon->SEResist[e] == base2) && (newbon->SEResist[e+1] < effect_value)){
|
||||
newbon->SEResist[e] = base2; //Spell Effect ID
|
||||
newbon->SEResist[e+1] = effect_value; //Resist Chance
|
||||
break;
|
||||
}
|
||||
else if (!newbon->SEResist[e+1]){
|
||||
newbon->SEResist[e] = base2; //Spell Effect ID
|
||||
newbon->SEResist[e+1] = effect_value; //Resist Chance
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2598,7 +2608,15 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
case SE_Screech:
|
||||
newbon->Screech = effect_value;
|
||||
break;
|
||||
|
||||
|
||||
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
|
||||
if (IsAISpellEffect) {
|
||||
|
||||
//Non-Focused Effect to modify incomming spell damage by resist type.
|
||||
case SE_FcSpellVulnerability:
|
||||
ModVulnerability(base2, effect_value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user