[Spells] Update for SPA 403 and 404 (#1482)

* Update for SPA403 and 404

Update
SPA SE_LimitSpellClass: 403
SPA SE_LimitSpellSubclass: 404

Now use spell table values from column 221 and 222 respectively.

Unknown what the values mean in these fields, but at least live spells work properly.

Added FocusLImitInclude Enum to improved focus effect function readability.

* Formatting

Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
KayenEQ 2021-08-01 14:47:17 -04:00 committed by GitHub
parent f01cf74fa6
commit d270670145
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 681 additions and 601 deletions

View File

@ -1883,6 +1883,8 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) {
sp[tempid].override_crit_chance = atoi(row[217]); sp[tempid].override_crit_chance = atoi(row[217]);
sp[tempid].aemaxtargets = atoi(row[218]); sp[tempid].aemaxtargets = atoi(row[218]);
sp[tempid].no_heal_damage_item_mod = atoi(row[219]); sp[tempid].no_heal_damage_item_mod = atoi(row[219]);
sp[tempid].spell_class = atoi(row[221]);
sp[tempid].spell_subclass = atoi(row[222]);
sp[tempid].persistdeath = atoi(row[224]) != 0; sp[tempid].persistdeath = atoi(row[224]) != 0;
sp[tempid].min_dist = atof(row[227]); sp[tempid].min_dist = atof(row[227]);
sp[tempid].min_dist_mod = atof(row[228]); sp[tempid].min_dist_mod = atof(row[228]);

View File

@ -170,6 +170,25 @@ const int Z_AGGRO=10;
const uint32 MobAISpellRange=100; // max range of buffs const uint32 MobAISpellRange=100; // max range of buffs
enum FocusLimitIncludes {
IncludeExistsSELimitResist = 0,
IncludeFoundSELimitResist = 1,
IncludeExistsSELimitSpell = 2,
IncludeFoundSELimitSpell = 3,
IncludeExistsSELimitEffect = 4,
IncludeFoundSELimitEffect = 5,
IncludeExistsSELimitTarget = 6,
IncludeFoundSELimitTarget = 7,
IncludeExistsSELimitSpellGroup = 8,
IncludeFoundSELimitSpellGroup = 9,
IncludeExistsSELimitCastingSkill = 10,
IncludeFoundSELimitCastingSkill = 11,
IncludeExistsSELimitSpellClass = 12,
IncludeFoundSELimitSpellClass = 13,
IncludeExistsSELimitSpellSubclass = 14,
IncludeFoundSELimitSpellSubclass = 15
};
enum SpellTypes : uint32 enum SpellTypes : uint32
{ {
SpellType_Nuke = (1 << 0), SpellType_Nuke = (1 << 0),
@ -746,8 +765,8 @@ typedef enum {
#define SE_HealGroupFromMana 400 // implemented - Drains mana and heals for each point of mana drained #define SE_HealGroupFromMana 400 // implemented - Drains mana and heals for each point of mana drained
#define SE_ManaDrainWithDmg 401 // implemented - Deals damage based on the amount of mana drained #define SE_ManaDrainWithDmg 401 // implemented - Deals damage based on the amount of mana drained
#define SE_EndDrainWithDmg 402 // implemented - Deals damage for the amount of endurance drained #define SE_EndDrainWithDmg 402 // implemented - Deals damage for the amount of endurance drained
#define SE_LimitSpellClass 403 // implemented - Limits to specific types of spells (see CheckSpellCategory) #define SE_LimitSpellClass 403 // implemented, @Ff, 'Spell Category' using table field 'spell_class' that a spell focus can require or exclude, base1: category type, Include: Positive Exclude: Negative
#define SE_LimitSpellSubclass 404 // *not implemented - Limits to specific types of spells (see CheckSpellCategory) [Categories NOT defined yet] #define SE_LimitSpellSubclass 404 // implemented, @Ff, 'Spell Category Subclass' using table field 'spell_subclass' that a spell focus can require or exclude, base1: category type, Include: Positive Exclude: Negative
#define SE_TwoHandBluntBlock 405 // implemented - chance to block attacks when using two hand blunt weapons (similiar to shield block) #define SE_TwoHandBluntBlock 405 // implemented - chance to block attacks when using two hand blunt weapons (similiar to shield block)
#define SE_CastonNumHitFade 406 // implemented - casts a spell when a buff fades due to its numhits being depleted #define SE_CastonNumHitFade 406 // implemented - casts a spell when a buff fades due to its numhits being depleted
#define SE_CastonFocusEffect 407 // implemented - casts a spell if focus limits are met (ie triggers when a focus effects is applied) #define SE_CastonFocusEffect 407 // implemented - casts a spell if focus limits are met (ie triggers when a focus effects is applied)
@ -860,7 +879,7 @@ typedef enum {
//#define SE_Endurance_Max_Percent 514 // //#define SE_Endurance_Max_Percent 514 //
#define SE_AC_Avoidance_Max_Percent 515 // implemented - stackable avoidance modifier #define SE_AC_Avoidance_Max_Percent 515 // implemented - stackable avoidance modifier
#define SE_AC_Mitigation_Max_Percent 516 // implemented - stackable defense modifier #define SE_AC_Mitigation_Max_Percent 516 // implemented - stackable defense modifier
//#define SE_Attack_Offense_Max_Percent 517 // //#define SE_Attack_Offense_Max_Percent 517 //
#define SE_Attack_Accuracy_Max_Percent 518 // implemented - stackable accurary modifer #define SE_Attack_Accuracy_Max_Percent 518 // implemented - stackable accurary modifer
//#define SE_Luck_Amount 519 // //#define SE_Luck_Amount 519 //
//#define SE_Luck_Percent 520 // //#define SE_Luck_Percent 520 //
@ -1018,8 +1037,8 @@ struct SPDat_Spell_Struct
/* 218 */ int aemaxtargets; //Is used for various AE effects -- MAX_TARGETS /* 218 */ int aemaxtargets; //Is used for various AE effects -- MAX_TARGETS
/* 219 */ int no_heal_damage_item_mod; // -- NO_HEAL_DAMAGE_ITEM_MOD /* 219 */ int no_heal_damage_item_mod; // -- NO_HEAL_DAMAGE_ITEM_MOD
/* 220 */ //int caster_requirement_id; // -- CASTER_REQUIREMENT_ID /* 220 */ //int caster_requirement_id; // -- CASTER_REQUIREMENT_ID
/* 221 */ //int spell_class; // -- SPELL_CLASS /* 221 */ int spell_class; // -- SPELL_CLASS
/* 222 */ //int spell_subclass; // -- SPELL_SUBCLASS /* 222 */ int spell_subclass; // -- SPELL_SUBCLASS
/* 223 */ //int ai_valid_targets; // -- AI_VALID_TARGETS /* 223 */ //int ai_valid_targets; // -- AI_VALID_TARGETS
/* 224 */ bool persistdeath; // buff doesn't get stripped on death -- NO_STRIP_ON_DEATH /* 224 */ bool persistdeath; // buff doesn't get stripped on death -- NO_STRIP_ON_DEATH
/* 225 */ //float base_effects_focus_slope; // -- BASE_EFFECTS_FOCUS_SLOPE /* 225 */ //float base_effects_focus_slope; // -- BASE_EFFECTS_FOCUS_SLOPE

View File

@ -349,7 +349,6 @@ public:
bool TrySpellProjectile(Mob* spell_target, uint16 spell_id, float speed = 1.5f); bool TrySpellProjectile(Mob* spell_target, uint16 spell_id, float speed = 1.5f);
void ResourceTap(int32 damage, uint16 spell_id); void ResourceTap(int32 damage, uint16 spell_id);
void TryTriggerThreshHold(int32 damage, int effect_id, Mob* attacker); void TryTriggerThreshHold(int32 damage, int effect_id, Mob* attacker);
bool CheckSpellCategory(uint16 spell_id, int category_id, int effect_id);
void CalcDestFromHeading(float heading, float distance, float MaxZDiff, float StartX, float StartY, float &dX, float &dY, float &dZ); void CalcDestFromHeading(float heading, float distance, float MaxZDiff, float StartX, float StartY, float &dX, float &dY, float &dZ);
void BeamDirectional(uint16 spell_id, int16 resist_adjust); void BeamDirectional(uint16 spell_id, int16 resist_adjust);
void ConeDirectional(uint16 spell_id, int16 resist_adjust); void ConeDirectional(uint16 spell_id, int16 resist_adjust);

File diff suppressed because it is too large Load Diff