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:
KayenEQ
2014-02-20 01:04:34 -05:00
parent 754d70d513
commit 0caa1fd40b
11 changed files with 215 additions and 133 deletions
+54 -34
View File
@@ -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;