mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-19 21:48:25 +00:00
new spell effects
buff struct/tables - required sql Removed: death_save_chance and deathsave_aa_chance (no longer used) Added: dot_rune, caston_x, caston_y, caston_z minor fixes
This commit is contained in:
+54
-34
@@ -1284,6 +1284,12 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_MitigateDotDamage:
|
||||
{
|
||||
buffs[buffslot].dot_rune = spells[spell_id].max[i];
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_TriggerMeleeThreshold:
|
||||
{
|
||||
buffs[buffslot].melee_rune = spells[spell_id].base2[i];
|
||||
@@ -1296,7 +1302,14 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case SE_DistanceRemoval:
|
||||
{
|
||||
buffs[buffslot].caston_x = int(GetX());
|
||||
buffs[buffslot].caston_y = int(GetY());
|
||||
buffs[buffslot].caston_z = int(GetZ());
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_Levitate:
|
||||
{
|
||||
#ifdef SPELL_EFFECT_SPAM
|
||||
@@ -2361,30 +2374,6 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_DeathSave: {
|
||||
#ifdef SPELL_EFFECT_SPAM
|
||||
snprintf(effect_desc, _EDLEN, "Death Save: %+i", effect_value);
|
||||
#endif
|
||||
uint8 BonusChance = 0;
|
||||
if(caster) {
|
||||
|
||||
BonusChance = caster->aabonuses.UnfailingDivinity +
|
||||
caster->itembonuses.UnfailingDivinity +
|
||||
caster->spellbonuses.UnfailingDivinity;
|
||||
}
|
||||
|
||||
#ifdef SPELL_EFFECT_SPAM
|
||||
//snprintf(effect_desc, _EDLEN, "Death Save Chance: %+i", SuccessChance);
|
||||
#endif
|
||||
//buffs[buffslot].deathSaveSuccessChance = SuccessChance;
|
||||
//buffs[buffslot].deathsaveCasterAARank = caster->GetAA(aaUnfailingDivinity);
|
||||
buffs[buffslot].deathsaveCasterAARank = BonusChance;
|
||||
//SetDeathSaveChance(true);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_SummonAndResAllCorpses:
|
||||
{
|
||||
if(IsClient())
|
||||
@@ -2763,7 +2752,6 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
case SE_MitigateDamageShield:
|
||||
case SE_FcBaseEffects:
|
||||
case SE_LimitClass:
|
||||
case SE_LimitSpellSubclass:
|
||||
case SE_BlockBehind:
|
||||
case SE_ShieldBlock:
|
||||
case SE_PetCriticalHit:
|
||||
@@ -2816,6 +2804,8 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
case SE_IncreaseChanceMemwipe:
|
||||
case SE_CriticalMend:
|
||||
case SE_LimitCastTimeMax:
|
||||
case SE_DeathSave:
|
||||
case SE_TriggerOnReqCaster:
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -3378,6 +3368,26 @@ void Mob::DoBuffTic(uint16 spell_id, int slot, uint32 ticsremaining, uint8 caste
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_DistanceRemoval:
|
||||
{
|
||||
if (spellbonuses.DistanceRemoval){
|
||||
|
||||
int distance = sqrt(
|
||||
((int(GetX()) - buffs[slot].caston_x) * (int(GetX()) - buffs[slot].caston_x)) +
|
||||
((int(GetY()) - buffs[slot].caston_y) * (int(GetY()) - buffs[slot].caston_y)) +
|
||||
((int(GetZ()) - buffs[slot].caston_z) * (int(GetZ()) - buffs[slot].caston_z))
|
||||
);
|
||||
|
||||
if (distance > spells[spell_id].base[i]){
|
||||
|
||||
if(!TryFadeEffect(slot))
|
||||
BuffFadeBySlot(slot , true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// do we need to do anyting here?
|
||||
@@ -5249,9 +5259,14 @@ bool Mob::TryDeathSave() {
|
||||
|
||||
int SuccessChance = 0;
|
||||
int buffSlot = spellbonuses.DeathSave[1];
|
||||
uint8 UD_HealMod = buffs[buffSlot].deathsaveCasterAARank; //Contains value of UD heal modifier.
|
||||
int16 UD_HealMod = 0;
|
||||
uint32 HealAmt = 300; //Death Pact max Heal
|
||||
|
||||
Mob* caster = entity_list.GetMobID(buffs[buffSlot].casterid);
|
||||
|
||||
if (caster)
|
||||
UD_HealMod = caster->spellbonuses.UnfailingDivinity + caster->itembonuses.UnfailingDivinity + caster->aabonuses.UnfailingDivinity;
|
||||
|
||||
if(buffSlot >= 0){
|
||||
|
||||
SuccessChance = ( (GetCHA() * (RuleI(Spells, DeathSaveCharismaMod))) + 1) / 10; //(CHA Mod Default = 3)
|
||||
@@ -5580,19 +5595,24 @@ bool Mob::TryDispel(uint8 caster_level, uint8 buff_level, int level_modifier){
|
||||
|
||||
bool Mob::ImprovedTaunt(){
|
||||
|
||||
if (spellbonuses.ImprovedTaunt[2]){
|
||||
if (spellbonuses.ImprovedTaunt[0]){
|
||||
|
||||
if (GetLevel() > spellbonuses.ImprovedTaunt[0])
|
||||
return false;
|
||||
|
||||
target = entity_list.GetMob(buffs[spellbonuses.ImprovedTaunt[2]].casterid);
|
||||
if (spellbonuses.ImprovedTaunt[2] >= 0){
|
||||
|
||||
if (target){
|
||||
SetTarget(target);
|
||||
return true;
|
||||
target = entity_list.GetMob(buffs[spellbonuses.ImprovedTaunt[2]].casterid);
|
||||
|
||||
if (target){
|
||||
SetTarget(target);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
if(!TryFadeEffect(spellbonuses.ImprovedTaunt[2]))
|
||||
BuffFadeBySlot(spellbonuses.ImprovedTaunt[2], true); //If caster killed removed effect.
|
||||
}
|
||||
}
|
||||
else
|
||||
BuffFadeBySlot(spellbonuses.ImprovedTaunt[2]); //If caster killed removed effect.
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user