mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-22 11:11:30 +00:00
Support for spells_new field 'uninterruptable'
This commit is contained in:
parent
aab3cac29c
commit
2aec190afc
@ -1710,7 +1710,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) {
|
|||||||
for (y = 0; y < 16; y++)
|
for (y = 0; y < 16; y++)
|
||||||
sp[tempid].deities[y]=atoi(row[126+y]);
|
sp[tempid].deities[y]=atoi(row[126+y]);
|
||||||
|
|
||||||
sp[tempid].uninterruptable=atoi(row[146]);
|
sp[tempid].uninterruptable=atoi(row[146]) != 0;
|
||||||
sp[tempid].ResistDiff=atoi(row[147]);
|
sp[tempid].ResistDiff=atoi(row[147]);
|
||||||
sp[tempid].dot_stacking_exempt=atoi(row[148]);
|
sp[tempid].dot_stacking_exempt=atoi(row[148]);
|
||||||
sp[tempid].RecourseLink = atoi(row[150]);
|
sp[tempid].RecourseLink = atoi(row[150]);
|
||||||
|
|||||||
@ -2711,7 +2711,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
|||||||
if (buffslot >= 0)
|
if (buffslot >= 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if(IsCasting() && MakeRandomInt(0, 100) <= spells[spell_id].base[i])
|
if(!spells[spell_id].uninterruptable && IsCasting() && MakeRandomInt(0, 100) <= spells[spell_id].base[i])
|
||||||
InterruptSpell();
|
InterruptSpell();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -1034,7 +1034,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, uint16 slot,
|
|||||||
|
|
||||||
mlog(SPELLS__CASTING, "Checking Interruption: spell x: %f spell y: %f cur x: %f cur y: %f channelchance %f channeling skill %d\n", GetSpellX(), GetSpellY(), GetX(), GetY(), channelchance, GetSkill(SkillChanneling));
|
mlog(SPELLS__CASTING, "Checking Interruption: spell x: %f spell y: %f cur x: %f cur y: %f channelchance %f channeling skill %d\n", GetSpellX(), GetSpellY(), GetX(), GetY(), channelchance, GetSkill(SkillChanneling));
|
||||||
|
|
||||||
if(MakeRandomFloat(0, 100) > channelchance) {
|
if(!spells[spell_id].uninterruptable && MakeRandomFloat(0, 100) > channelchance) {
|
||||||
mlog(SPELLS__CASTING_ERR, "Casting of %d canceled: interrupted.", spell_id);
|
mlog(SPELLS__CASTING_ERR, "Casting of %d canceled: interrupted.", spell_id);
|
||||||
InterruptSpell();
|
InterruptSpell();
|
||||||
return;
|
return;
|
||||||
@ -4684,7 +4684,7 @@ void Mob::Stun(int duration)
|
|||||||
if(stunned && stunned_timer.GetRemainingTime() > uint32(duration))
|
if(stunned && stunned_timer.GetRemainingTime() > uint32(duration))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(casting_spell_id) {
|
if(IsValidSpell(casting_spell_id) && !spells[casting_spell_id].uninterruptable) {
|
||||||
int persistent_casting = spellbonuses.PersistantCasting + itembonuses.PersistantCasting;
|
int persistent_casting = spellbonuses.PersistantCasting + itembonuses.PersistantCasting;
|
||||||
if(IsClient())
|
if(IsClient())
|
||||||
persistent_casting += aabonuses.PersistantCasting;
|
persistent_casting += aabonuses.PersistantCasting;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user