mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 08:21:28 +00:00
Implement persist death spell field
This commit is contained in:
parent
8a04d8e2b7
commit
50caef0086
@ -1733,6 +1733,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) {
|
|||||||
sp[tempid].powerful_flag=atoi(row[209]);
|
sp[tempid].powerful_flag=atoi(row[209]);
|
||||||
sp[tempid].CastRestriction = atoi(row[211]);
|
sp[tempid].CastRestriction = atoi(row[211]);
|
||||||
sp[tempid].AllowRest = atoi(row[212]) != 0;
|
sp[tempid].AllowRest = atoi(row[212]) != 0;
|
||||||
|
sp[tempid].persistdeath = atoi(row[224]) != 0;
|
||||||
sp[tempid].DamageShieldType = 0;
|
sp[tempid].DamageShieldType = 0;
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
|
|||||||
@ -966,6 +966,14 @@ bool IsBuffSpell(uint16 spell_id)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsPersistDeathSpell(uint16 spell_id)
|
||||||
|
{
|
||||||
|
if (IsValidSpell(spell_id) && spells[spell_id].persistdeath)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 GetMorphTrigger(uint32 spell_id)
|
uint32 GetMorphTrigger(uint32 spell_id)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < EFFECT_COUNT; ++i)
|
for (int i = 0; i < EFFECT_COUNT; ++i)
|
||||||
|
|||||||
@ -710,11 +710,22 @@ struct SPDat_Spell_Struct
|
|||||||
/* 193 */ int NimbusEffect;
|
/* 193 */ int NimbusEffect;
|
||||||
/* 194 */ float directional_start;
|
/* 194 */ float directional_start;
|
||||||
/* 195 */ float directional_end;
|
/* 195 */ float directional_end;
|
||||||
|
/* 196 - 199 */
|
||||||
|
/* 200 */ //bool suspendable; // buff is suspended in suspended buff zones
|
||||||
|
/* 201 - 202 */
|
||||||
|
/* 203 */ //int songcap; // individual song cap (how live currently does it, not implemented)
|
||||||
|
/* 204 - 206 */
|
||||||
/* 207 */ int spellgroup;
|
/* 207 */ int spellgroup;
|
||||||
|
/* 208 */
|
||||||
/* 209 */ int powerful_flag; // Need more investigation to figure out what to call this, for now we know -1 makes charm spells not break before their duration is complete, it does alot more though
|
/* 209 */ int powerful_flag; // Need more investigation to figure out what to call this, for now we know -1 makes charm spells not break before their duration is complete, it does alot more though
|
||||||
|
/* 210 */
|
||||||
/* 211 */ int CastRestriction; //Various restriction categories for spells most seem targetable race related but have also seen others for instance only castable if target hp 20% or lower or only if target out of combat
|
/* 211 */ int CastRestriction; //Various restriction categories for spells most seem targetable race related but have also seen others for instance only castable if target hp 20% or lower or only if target out of combat
|
||||||
/* 212 */ bool AllowRest;
|
/* 212 */ bool AllowRest;
|
||||||
/* 219 */ //int maxtargets; // not in DB yet, is used for beam and ring spells for target # limits
|
/* 213 - 218 */
|
||||||
|
/* 219 */ //int maxtargets; // is used for beam and ring spells for target # limits (not implemented)
|
||||||
|
/* 220 - 223 */
|
||||||
|
/* 224 */ bool persistdeath; // buff doesn't get stripped on death
|
||||||
|
/* 225 - 236 */
|
||||||
uint8 DamageShieldType; // This field does not exist in spells_us.txt
|
uint8 DamageShieldType; // This field does not exist in spells_us.txt
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -809,6 +820,7 @@ bool IsDebuffSpell(uint16 spell_id);
|
|||||||
bool IsResistDebuffSpell(uint16 spell_id);
|
bool IsResistDebuffSpell(uint16 spell_id);
|
||||||
bool IsSelfConversionSpell(uint16 spell_id);
|
bool IsSelfConversionSpell(uint16 spell_id);
|
||||||
bool IsBuffSpell(uint16 spell_id);
|
bool IsBuffSpell(uint16 spell_id);
|
||||||
|
bool IsPersistDeathSpell(uint16 spell_id);
|
||||||
uint32 GetMorphTrigger(uint32 spell_id);
|
uint32 GetMorphTrigger(uint32 spell_id);
|
||||||
uint32 GetPartialMeleeRuneReduction(uint32 spell_id);
|
uint32 GetPartialMeleeRuneReduction(uint32 spell_id);
|
||||||
uint32 GetPartialMagicRuneReduction(uint32 spell_id);
|
uint32 GetPartialMagicRuneReduction(uint32 spell_id);
|
||||||
|
|||||||
@ -1601,7 +1601,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, SkillUseTypes att
|
|||||||
}
|
}
|
||||||
|
|
||||||
//this generates a lot of 'updates' to the client that the client does not need
|
//this generates a lot of 'updates' to the client that the client does not need
|
||||||
BuffFadeAll();
|
BuffFadeNonPersistDeath();
|
||||||
if((GetClientVersionBit() & BIT_SoFAndLater) && RuleB(Character, RespawnFromHover))
|
if((GetClientVersionBit() & BIT_SoFAndLater) && RuleB(Character, RespawnFromHover))
|
||||||
UnmemSpellAll(true);
|
UnmemSpellAll(true);
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1139,7 +1139,7 @@ void Client::OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 I
|
|||||||
this->name, (uint16)spells[SpellID].base[0],
|
this->name, (uint16)spells[SpellID].base[0],
|
||||||
SpellID, ZoneID, InstanceID);
|
SpellID, ZoneID, InstanceID);
|
||||||
|
|
||||||
this->BuffFadeAll();
|
this->BuffFadeNonPersistDeath();
|
||||||
int SpellEffectDescNum = GetSpellEffectDescNum(SpellID);
|
int SpellEffectDescNum = GetSpellEffectDescNum(SpellID);
|
||||||
// Rez spells with Rez effects have this DescNum (first is Titanium, second is 6.2 Client)
|
// Rez spells with Rez effects have this DescNum (first is Titanium, second is 6.2 Client)
|
||||||
if((SpellEffectDescNum == 82) || (SpellEffectDescNum == 39067)) {
|
if((SpellEffectDescNum == 82) || (SpellEffectDescNum == 39067)) {
|
||||||
|
|||||||
@ -213,6 +213,7 @@ public:
|
|||||||
void BuffFadeBySpellID(uint16 spell_id);
|
void BuffFadeBySpellID(uint16 spell_id);
|
||||||
void BuffFadeByEffect(int effectid, int skipslot = -1);
|
void BuffFadeByEffect(int effectid, int skipslot = -1);
|
||||||
void BuffFadeAll();
|
void BuffFadeAll();
|
||||||
|
void BuffFadeNonPersistDeath();
|
||||||
void BuffFadeDetrimental();
|
void BuffFadeDetrimental();
|
||||||
void BuffFadeBySlot(int slot, bool iRecalcBonuses = true);
|
void BuffFadeBySlot(int slot, bool iRecalcBonuses = true);
|
||||||
void BuffFadeDetrimentalByCaster(Mob *caster);
|
void BuffFadeDetrimentalByCaster(Mob *caster);
|
||||||
|
|||||||
@ -3752,6 +3752,17 @@ void Mob::BuffFadeAll()
|
|||||||
CalcBonuses();
|
CalcBonuses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mob::BuffFadeNonPersistDeath()
|
||||||
|
{
|
||||||
|
uint32 buff_count = GetMaxTotalSlots();
|
||||||
|
for (int j = 0; j < buff_count; j++) {
|
||||||
|
if (buffs[j].spellid != SPELL_UNKNOWN && !IsPersistDeathSpell(buffs[j].spellid))
|
||||||
|
BuffFadeBySlot(j, false);
|
||||||
|
}
|
||||||
|
//we tell BuffFadeBySlot not to recalc, so we can do it only once when were done
|
||||||
|
CalcBonuses();
|
||||||
|
}
|
||||||
|
|
||||||
void Mob::BuffFadeDetrimental() {
|
void Mob::BuffFadeDetrimental() {
|
||||||
uint32 buff_count = GetMaxTotalSlots();
|
uint32 buff_count = GetMaxTotalSlots();
|
||||||
for (int j = 0; j < buff_count; j++) {
|
for (int j = 0; j < buff_count; j++) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user