[Quest API/Cleanup] Add several spell methods to Perl/Lua (#3379)

* [Quest API/Cleanup] Add several spell methods to Perl/Lua

- Add `quest::CalculateCorruptionCounters(spell_id)`.
- Add `quest::CalculateCounters(spell_id)`.
- Add `quest::CalculateCurseCounters(spell_id)`.
- Add `quest::CalculateDiseaseCounters(spell_id)`.
- Add `quest::CalculatePoisonCounters(spell_id)`.
- Add `quest::GetSpellEffectDescriptionNumber(spell_id)`.
- Add `quest::GetSpellEffectIndex(spell_id, effect_id)`.
- Add `quest::GetSpellFuriousBash(spell_id)`.
- Add `quest::GetSpellMinimumLevel(spell_id)`.
- Add `quest::GetSpellNimbusEffect(spell_id)`.
- Add `quest::GetSpellPartialMagicRuneAmount(spell_id)`.
- Add `quest::GetSpellPartialMagicRuneReduction(spell_id)`.
- Add `quest::GetSpellPartialMeleeRuneAmount(spell_id)`.
- Add `quest::GetSpellPartialMeleeRuneReduction(spell_id)`.
- Add `quest::GetSpellProcLimitTimer(spell_id)`.
- Add `quest::GetSpellResistType(spell_id)`.
- Add `quest::GetSpellResurrectionSicknessCheck(spell_id_one, spell_id_two)`.
- Add `quest::GetSpellTargetType(spell_id)`.
- Add `quest::GetSpellTriggerSpellID(spell_id)`.
- Add `quest::GetSpellViralMaximumSpreadTime(spell_id)`.
- Add `quest::GetSpellViralMinimumSpreadTime(spell_id)`.
- Add `quest::GetSpellViralSpreadRange(spell_id)`.
- Add `quest::IsAEDurationSpell(spell_id)`.
- Add `quest::IsAENukeSpell(spell_id)`.
- Add `quest::IsAERainNukeSpell(spell_id)`.
- Add `quest::IsAllianceSpell(spell_id)`.
- Add `quest::IsBardOnlyStackEffect(effect_id)`.
- Add `quest::IsBardSong(spell_id)`.
- Add `quest::IsBlankSpellEffect(spell_id, effect_index)`.
- Add `quest::IsBlindSpell(spell_id)`.
- Add `quest::IsBuffSpell(spell_id)`.
- Add `quest::IsCastNotStandingSpell(spell_id)`.
- Add `quest::IsCastOnFadeDurationSpell(spell_id)`.
- Add `quest::IsCastRestrictedSpell(spell_id)`.
- Add `quest::IsCastTimeReductionSpell(spell_id)`.
- Add `quest::IsCastWhileInvisibleSpell(spell_id)`.
- Add `quest::IsCharmSpell(spell_id)`.
- Add `quest::IsCombatSkill(spell_id)`.
- Add `quest::IsCompleteHealDurationSpell(spell_id)`.
- Add `quest::IsCompleteHealSpell(spell_id)`.
- Add `quest::IsCureSpell(spell_id)`.
- Add `quest::IsDamageSpell(spell_id)`.
- Add `quest::IsDeathSaveSpell(spell_id)`.
- Add `quest::IsDebuffSpell(spell_id)`.
- Add `quest::IsDetrimentalSpell(spell_id)`.
- Add `quest::IsDiscipline(spell_id)`.
- Add `quest::IsDisciplineBuff(spell_id)`.
- Add `quest::IsDiseaseCounterSpell(spell_id)`.
- Add `quest::IsDistanceModifierSpell(spell_id)`.
- Add `quest::IsEffectIgnoredInStacking(effect_id)`.
- Add `quest::IsFastHealSpell(spell_id)`.
- Add `quest::IsFearSpell(spell_id)`.
- Add `quest::IsFocusLimit(effect_id)`.
- Add `quest::IsFullDeathSaveSpell(spell_id)`.
- Add `quest::IsGateSpell(spell_id)`.
- Add `quest::IsImprovedDamageSpell(spell_id)`.
- Add `quest::IsImprovedHealingSpell(spell_id)`.
- Add `quest::IsIncreaseDurationSpell(spell_id)`.
- Add `quest::IsIncreaseRangeSpell(spell_id)`.
- Add `quest::IsInstrumentModifierAppliedToSpellEffect(spell_id, effect_id)`.
- Add `quest::IsInvisibleSpell(spell_id)`.
- Add `quest::IsInvulnerabilitySpell(spell_id)`.
- Add `quest::IsLDoNObjectSpell(spell_id)`.
- Add `quest::IsLifetapSpell(spell_id)`.
- Add `quest::IsMagicRuneSpell(spell_id)`.
- Add `quest::IsManaCostReductionSpell(spell_id)`.
- Add `quest::IsManaTapSpell(spell_id)`.
- Add `quest::IsMesmerizeSpell(spell_id)`.
- Add `quest::IsNoDetrimentalSpellAggroSpell(spell_id)`.
- Add `quest::IsPBAENukeSpell(spell_id)`.
- Add `quest::IsPartialDeathSaveSpell(spell_id)`.
- Add `quest::IsPartialResistableSpell(spell_id)`.
- Add `quest::IsPercentalHealSpell(spell_id)`.
- Add `quest::IsPersistDeathSpell(spell_id)`.
- Add `quest::IsPetSpell(spell_id)`.
- Add `quest::IsPoisonCounterSpell(spell_id)`.
- Add `quest::IsPulsingBardSong(spell_id)`.
- Add `quest::IsPureNukeSpell(spell_id)`.
- Add `quest::IsRegularGroupHealSpell(spell_id)`.
- Add `quest::IsRegularSingleTargetHealSpell(spell_id)`.
- Add `quest::IsResistDebuffSpell(spell_id)`.
- Add `quest::IsResistableSpell(spell_id)`.
- Add `quest::IsRestAllowedSpell(spell_id)`.
- Add `quest::IsResurrectionEffects(spell_id)`.
- Add `quest::IsRuneSpell(spell_id)`.
- Add `quest::IsRunning(spell_id)`.
- Add `quest::IsSacrificeSpell(spell_id)`.
- Add `quest::IsSelfConversionSpell(spell_id)`.
- Add `quest::IsShadowStepSpell(spell_id)`.
- Add `quest::IsShortDurationBuff(spell_id)`.
- Add `quest::IsSpellUsableInThisZoneType(spell_id)`.
- Add `quest::IsSpellUsableInThisZoneType(spell_id, zone_type)`.
- Add `quest::IsStackableDOT(spell_id)`.
- Add `quest::IsStunSpell(spell_id)`.
- Add `quest::IsSuccorSpell(spell_id)`.
- Add `quest::IsSummonItemSpell(spell_id)`.
- Add `quest::IsSummonPCSpell(spell_id)`.
- Add `quest::IsSummonPetSpell(spell_id)`.
- Add `quest::IsSummonSkeletonSpell(spell_id)`.
- Add `quest::IsSummonSpell(spell_id)`.
- Add `quest::IsSuspendableSpell(spell_id)`.
- Add `quest::IsTargetRequiredForSpell(spell_id)`.
- Add `quest::IsTargetableAESpell(spell_id)`.
- Add `quest::IsTeleportSpell(spell_id)`.
- Add `quest::IsTranslocateSpell(spell_id)`.
- Add `quest::IsValidSpell(spell_id)`.
- Add `quest::IsVeryFastHealSpell(spell_id)`.
- Add `quest::IsVirusSpell(spell_id)`.

- Add `eq.calculate_corruption_counters(spell_id)`.
- Add `eq.calculate_counters(spell_id)`.
- Add `eq.calculate_curse_counters(spell_id)`.
- Add `eq.calculate_disease_counters(spell_id)`.
- Add `eq.calculate_poison_counters(spell_id)`.
- Add `eq.get_spell_effect_description_number(spell_id)`.
- Add `eq.get_spell_effect_index(spell_id, effect_id)`.
- Add `eq.get_spell_furious_bash(spell_id)`.
- Add `eq.get_spell_level(spell_id, class_id)`.
- Add `eq.get_spell_minimum_level(spell_id)`.
- Add `eq.get_spell_nimbus_effect(spell_id)`.
- Add `eq.get_spell_partial_magic_rune_amount(spell_id)`.
- Add `eq.get_spell_partial_magic_rune_reduction(spell_id)`.
- Add `eq.get_spell_partial_melee_rune_amount(spell_id)`.
- Add `eq.get_spell_partial_melee_rune_reduction(spell_id)`.
- Add `eq.get_spell_proc_limit_timer(spell_id)`.
- Add `eq.get_spell_resist_type(spell_id)`.
- Add `eq.get_spell_resurrection_sickness_check(spell_id_one, spell_id_two)`.
- Add `eq.get_spell_target_type(spell_id)`.
- Add `eq.get_spell_trigger_spell_id(spell_id)`.
- Add `eq.get_spell_viral_maximum_spread_time(spell_id)`.
- Add `eq.get_spell_viral_minimum_spread_time(spell_id)`.
- Add `eq.get_spell_viral_spread_range(spell_id)`.
- Add `eq.is_ae_duration_spell(spell_id)`.
- Add `eq.is_ae_nuke_spell(spell_id)`.
- Add `eq.is_ae_rain_nuke_spell(spell_id)`.
- Add `eq.is_alliance_spell(spell_id)`.
- Add `eq.is_bard_only_stack_effect(spell_id)`.
- Add `eq.is_bard_song(spell_id)`.
- Add `eq.is_beneficial_spell(spell_id)`.
- Add `eq.is_blank_spell_effect(spell_id)`.
- Add `eq.is_blind_spell(spell_id)`.
- Add `eq.is_buff_spell(spell_id)`.
- Add `eq.is_cast_not_standing_spell(spell_id)`.
- Add `eq.is_cast_on_fade_duration_spell(spell_id)`.
- Add `eq.is_cast_restricted_spell(spell_id)`.
- Add `eq.is_cast_time_reduction_spell(spell_id)`.
- Add `eq.is_cast_while_invisible_spell(spell_id)`.
- Add `eq.is_charm_spell(spell_id)`.
- Add `eq.is_combat_skill(spell_id)`.
- Add `eq.is_complete_heal_duration_spell(spell_id)`.
- Add `eq.is_complete_heal_spell(spell_id)`.
- Add `eq.is_cure_spell(spell_id)`.
- Add `eq.is_damage_spell(spell_id)`.
- Add `eq.is_death_save_spell(spell_id)`.
- Add `eq.is_debuff_spell(spell_id)`.
- Add `eq.is_detrimental_spell(spell_id)`.
- Add `eq.is_discipline(spell_id)`.
- Add `eq.is_discipline_buff(spell_id)`.
- Add `eq.is_disease_counter_spell(spell_id)`.
- Add `eq.is_distance_modifier_spell(spell_id)`.
- Add `eq.is_effect_ignored_in_stacking(effect_id)`.
- Add `eq.is_effect_in_spell(spell_id, effect_id)`.
- Add `eq.is_fast_heal_spell(spell_id)`.
- Add `eq.is_fear_spell(spell_id)`.
- Add `eq.is_focus_limit(effect_id)`.
- Add `eq.is_full_death_save_spell(spell_id)`.
- Add `eq.is_gate_spell(spell_id)`.
- Add `eq.is_group_complete_heal_spell(spell_id)`.
- Add `eq.is_group_heal_over_time_spell(spell_id)`.
- Add `eq.is_group_only_spell(spell_id)`.
- Add `eq.is_group_spell(spell_id)`.
- Add `eq.is_harmony_spell(spell_id)`.
- Add `eq.is_haste_spell(spell_id)`.
- Add `eq.is_heal_over_time_spell(spell_id)`.
- Add `eq.is_health_spell(spell_id)`.
- Add `eq.is_illusion_spell(spell_id)`.
- Add `eq.is_improved_damage_spell(spell_id)`.
- Add `eq.is_improved_healing_spell(spell_id)`.
- Add `eq.is_increase_duration_spell(spell_id)`.
- Add `eq.is_increase_range_spell(spell_id)`.
- Add `eq.is_instrument_modifier_applied_to_spell_effect(spell_id, effect_id)`.
- Add `eq.is_invisible_spell(spell_id)`.
- Add `eq.is_invulnerability_spell(spell_id)`.
- Add `eq.is_ldon_object_spell(spell_id)`.
- Add `eq.is_lifetap_spell(spell_id)`.
- Add `eq.is_magic_rune_spell(spell_id)`.
- Add `eq.is_mana_cost_reduction_spell(spell_id)`.
- Add `eq.is_mana_tap_spell(spell_id)`.
- Add `eq.is_mesmerize_spell(spell_id)`.
- Add `eq.is_no_detrimental_spell_aggro_spell(spell_id)`.
- Add `eq.is_partial_death_save_spell(spell_id)`.
- Add `eq.is_partial_resistable_spell(spell_id)`.
- Add `eq.is_pbae_nuke_spell(spell_id)`.
- Add `eq.is_percental_heal_spell(spell_id)`.
- Add `eq.is_persist_death_spell(spell_id)`.
- Add `eq.is_pet_spell(spell_id)`.
- Add `eq.is_poison_counter_spell(spell_id)`.
- Add `eq.is_pulsing_bard_song(spell_id)`.
- Add `eq.is_pure_nuke_spell(spell_id)`.
- Add `eq.is_regular_group_heal_spell(spell_id)`.
- Add `eq.is_regular_single_target_heal_spell(spell_id)`.
- Add `eq.is_resist_debuff_spell(spell_id)`.
- Add `eq.is_resistable_spell(spell_id)`.
- Add `eq.is_rest_allowed_spell(spell_id)`.
- Add `eq.is_resurrection_effects(spell_id)`.
- Add `eq.is_rune_spell(spell_id)`.
- Add `eq.is_sacrifice_spell(spell_id)`.
- Add `eq.is_self_conversion_spell(spell_id)`.
- Add `eq.is_shadow_step_spell(spell_id)`.
- Add `eq.is_short_duration_buff(spell_id)`.
- Add `eq.is_spell_usable_in_this_zone_type(spell_id)`.
- Add `eq.is_spell_usable_in_this_zone_type(spell_id, zone_type)`.
- Add `eq.is_stackable_dot(spell_id)`.
- Add `eq.is_stun_spell(spell_id)`.
- Add `eq.is_succor_spell(spell_id)`.
- Add `eq.is_summon_item_spell(spell_id)`.
- Add `eq.is_summon_pc_spell(spell_id)`.
- Add `eq.is_summon_pet_spell(spell_id)`.
- Add `eq.is_summon_skeleton_spell(spell_id)`.
- Add `eq.is_summon_spell(spell_id)`.
- Add `eq.is_suspendable_spell(spell_id)`.
- Add `eq.is_target_required_for_spell(spell_id)`.
- Add `eq.is_targetable_ae_spell(spell_id)`.
- Add `eq.is_teleport_spell(spell_id)`.
- Add `eq.is_tgb_compatible_spell(spell_id)`.
- Add `eq.is_translocate_spell(spell_id)`.
- Add `eq.is_valid_spell(spell_id)`.
- Add `eq.is_very_fast_heal_spell(spell_id)`.
- Add `eq.is_virus_spell(spell_id)`.

- A lot of cleanup in the logic and naming of these methods was done.
- Missing GM restricted spells like Guide spells and GM Health buffs were added as defines.
- Good effect values were added as defines.
- Resurrection effects non-stacking value was added as a define.
- Max fast heal casting time and max very fast heal casting time were added as defines.
- `SE_Display` was uncommented so we could use it instead of the magic number `425`.
- `IsEvacSpell(spell_id)` was removed as it was unnecessary since `IsSuccorSpell(spell_id)` checks for `SE_Succor` as well.
- `GetMorphTrigger(spell_id)` was removed as it was unused.
- `GroupOnlySpell(spell_id)` was removed as it was unnecessary since `IsGroupOnlySpell(spell_id)` exists.
- `CanUseSpell(spell_id)` was removed as it was unnecessary since `GetSpellLevel(spell_id, class_id)` exists.
- `BeneficialSpell(spell_id)` was removed as it was unnecessary since `IsBeneficialSpell(spell_id)` exists.

* Update spell_effects.cpp

* Update spdat.cpp
This commit is contained in:
Alex King 2023-06-12 20:27:22 -04:00 committed by GitHub
parent c5c575b028
commit 756e835144
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 2740 additions and 833 deletions

File diff suppressed because it is too large Load Diff

View File

@ -171,6 +171,37 @@
#define SPELL_ILLUSION_MALE 1732 #define SPELL_ILLUSION_MALE 1732
#define SPELL_UNSUMMON_SELF 892 #define SPELL_UNSUMMON_SELF 892
#define SPELL_ANCIENT_LIFEBANE 2115 #define SPELL_ANCIENT_LIFEBANE 2115
#define SPELL_GMHP25K 6817
#define SPELL_GMHP50K 6818
#define SPELL_GMHP100K 6819
#define SPELL_GMHP225K 6820
#define SPELL_GMHP475K 6821
#define SPELL_GMHP925K 6822
#define SPELL_GMHP2M 6823
#define SPELL_GMHP3M 6824
#define SPELL_GMHP5M 39851
#define SPELL_GUIDE_ACTING_ONE 778
#define SPELL_GUIDE_ALLIANCE_ONE 810
#define SPELL_GUIDE_CANCEL_MAGIC_ONE 811
#define SPELL_GUIDE_JOURNEY_ONE 813
#define SPELL_GUIDE_VISION_ONE 814
#define SPELL_GUIDE_HEALTH_ONE 815
#define SPELL_GUIDE_INVULNERABILITY_ONE 816
#define SPELL_GUIDE_BOLT_ONE 817
#define SPELL_GUIDE_MEMORY_BLUR_ONE 818
#define SPELL_GUIDE_ACTING_TWO 1209
#define SPELL_GUIDE_CANCEL_MAGIC_TWO 1211
#define SPELL_GUIDE_JOURNEY_TWO 1212
#define SPELL_GUIDE_VISION_TWO 1213
#define SPELL_GUIDE_HEALTH_TWO 1214
#define SPELL_GUIDE_INVULNERABILITY_TWO 1215
#define SPELL_GUIDE_BOLT_TWO 1216
#define SPELL_GUIDE_MEMORY_BLUR_TWO 1217
#define SPELL_GUIDE_ALLIANCE_TWO 1219
#define SPELL_GUIDE_EVACUATION 3921
#define SPELL_GUIDE_LEVITATION 39852
#define SPELL_GUIDE_SPELL_HASTE 39853
#define SPELL_GUIDE_HASTE 39854
//spellgroup ids //spellgroup ids
#define SPELLGROUP_FRENZIED_BURNOUT 2754 #define SPELLGROUP_FRENZIED_BURNOUT 2754
@ -202,11 +233,22 @@
#define INSTRUMENT_HORN 13012 #define INSTRUMENT_HORN 13012
//option types for the rule Spells:ResurrectionEffectBlock //option types for the rule Spells:ResurrectionEffectBlock
#define RES_EFFECTS_CANNOT_STACK -1
#define NO_RES_EFFECTS_BLOCK 0 #define NO_RES_EFFECTS_BLOCK 0
#define RES_EFFECTS_BLOCK 1 #define RES_EFFECTS_BLOCK 1
#define RES_EFFECTS_BLOCK_WITH_BUFFS 2 #define RES_EFFECTS_BLOCK_WITH_BUFFS 2
#define MOVE_NEW_SLOT 2 #define MOVE_NEW_SLOT 2
#define PARTIAL_DEATH_SAVE 1
#define FULL_DEATH_SAVE 2
#define MAX_FAST_HEAL_CASTING_TIME 2000
#define MAX_VERY_FAST_HEAL_CASTING_TIME 1000
#define DETRIMENTAL_EFFECT 0
#define BENEFICIAL_EFFECT 1
#define BENEFICIAL_EFFECT_GROUP_ONLY 2
const uint32 MobAISpellRange=100; // max range of buffs const uint32 MobAISpellRange=100; // max range of buffs
enum FocusLimitIncludes { enum FocusLimitIncludes {
@ -1163,7 +1205,7 @@ typedef enum {
#define SE_LimitUseMin 422 // implemented, @Ff Minium amount of numhits for a spell to be focused, base: numhit amt #define SE_LimitUseMin 422 // implemented, @Ff Minium amount of numhits for a spell to be focused, base: numhit amt
#define SE_LimitUseType 423 // implemented, @Ff Focus will only affect if has this numhits type, base: numhit type #define SE_LimitUseType 423 // implemented, @Ff Focus will only affect if has this numhits type, base: numhit type
#define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace #define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace
//#define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626) #define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626)
#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window #define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window
#define SE_SkillProcAttempt 427 // implemented - chance to proc when using a skill(ie taunt) #define SE_SkillProcAttempt 427 // implemented - chance to proc when using a skill(ie taunt)
#define SE_LimitToSkill 428 // implemented, @Procs, limits what combat skills will effect a skill proc, base: skill value, limit: none, max: none #define SE_LimitToSkill 428 // implemented, @Procs, limits what combat skills will effect a skill proc, base: skill value, limit: none, max: none
@ -1446,7 +1488,7 @@ extern int32 SPDAT_RECORDS;
bool IsTargetableAESpell(uint16 spell_id); bool IsTargetableAESpell(uint16 spell_id);
bool IsSacrificeSpell(uint16 spell_id); bool IsSacrificeSpell(uint16 spell_id);
bool IsLifetapSpell(uint16 spell_id); bool IsLifetapSpell(uint16 spell_id);
bool IsMezSpell(uint16 spell_id); bool IsMesmerizeSpell(uint16 spell_id);
bool IsStunSpell(uint16 spell_id); bool IsStunSpell(uint16 spell_id);
bool IsSlowSpell(uint16 spell_id); bool IsSlowSpell(uint16 spell_id);
bool IsHasteSpell(uint16 spell_id); bool IsHasteSpell(uint16 spell_id);
@ -1455,22 +1497,23 @@ bool IsPercentalHealSpell(uint16 spell_id);
bool IsGroupOnlySpell(uint16 spell_id); bool IsGroupOnlySpell(uint16 spell_id);
bool IsBeneficialSpell(uint16 spell_id); bool IsBeneficialSpell(uint16 spell_id);
bool IsDetrimentalSpell(uint16 spell_id); bool IsDetrimentalSpell(uint16 spell_id);
bool IsInvisSpell(uint16 spell_id); bool IsInvisibleSpell(uint16 spell_id);
bool IsInvulnerabilitySpell(uint16 spell_id); bool IsInvulnerabilitySpell(uint16 spell_id);
bool IsCHDurationSpell(uint16 spell_id); bool IsCompleteHealDurationSpell(uint16 spell_id);
bool IsPoisonCounterSpell(uint16 spell_id); bool IsPoisonCounterSpell(uint16 spell_id);
bool IsDiseaseCounterSpell(uint16 spell_id); bool IsDiseaseCounterSpell(uint16 spell_id);
bool IsSummonItemSpell(uint16 spell_id); bool IsSummonItemSpell(uint16 spell_id);
bool IsSummonSkeletonSpell(uint16 spell_id); bool IsSummonSkeletonSpell(uint16 spell_id);
bool IsSummonPetSpell(uint16 spell_id); bool IsSummonPetSpell(uint16 spell_id);
bool IsSummonPCSpell(uint16 spell_id); bool IsSummonPCSpell(uint16 spell_id);
bool IsPetSpell(uint16 spell_id);
bool IsCharmSpell(uint16 spell_id); bool IsCharmSpell(uint16 spell_id);
bool IsBlindSpell(uint16 spell_id); bool IsBlindSpell(uint16 spell_id);
bool IsEffectHitpointsSpell(uint16 spell_id); bool IsHealthSpell(uint16 spell_id);
bool IsReduceCastTimeSpell(uint16 spell_id); bool IsCastTimeReductionSpell(uint16 spell_id);
bool IsIncreaseDurationSpell(uint16 spell_id); bool IsIncreaseDurationSpell(uint16 spell_id);
bool IsReduceManaSpell(uint16 spell_id); bool IsManaCostReductionSpell(uint16 spell_id);
bool IsExtRangeSpell(uint16 spell_id); bool IsIncreaseRangeSpell(uint16 spell_id);
bool IsImprovedHealingSpell(uint16 spell_id); bool IsImprovedHealingSpell(uint16 spell_id);
bool IsImprovedDamageSpell(uint16 spell_id); bool IsImprovedDamageSpell(uint16 spell_id);
bool IsAEDurationSpell(uint16 spell_id); bool IsAEDurationSpell(uint16 spell_id);
@ -1478,26 +1521,22 @@ bool IsPureNukeSpell(uint16 spell_id);
bool IsAENukeSpell(uint16 spell_id); bool IsAENukeSpell(uint16 spell_id);
bool IsPBAENukeSpell(uint16 spell_id); bool IsPBAENukeSpell(uint16 spell_id);
bool IsAERainNukeSpell(uint16 spell_id); bool IsAERainNukeSpell(uint16 spell_id);
bool IsPartialCapableSpell(uint16 spell_id); bool IsPartialResistableSpell(uint16 spell_id);
bool IsResistableSpell(uint16 spell_id); bool IsResistableSpell(uint16 spell_id);
bool IsGroupSpell(uint16 spell_id); bool IsGroupSpell(uint16 spell_id);
bool IsTGBCompatibleSpell(uint16 spell_id); bool IsTGBCompatibleSpell(uint16 spell_id);
bool IsBardSong(uint16 spell_id); bool IsBardSong(uint16 spell_id);
bool IsEffectInSpell(uint16 spellid, int effect); bool IsEffectInSpell(uint16 spell_id, int effect_id);
uint16 GetTriggerSpellID(uint16 spell_id, uint32 effect); uint16 GetSpellTriggerSpellID(uint16 spell_id, int effect_id);
bool IsBlankSpellEffect(uint16 spellid, int effect_index); bool IsBlankSpellEffect(uint16 spell_id, int effect_index);
bool IsValidSpell(uint32 spellid); bool IsValidSpell(uint32 spell_id);
bool IsSummonSpell(uint16 spellid); bool IsSummonSpell(uint16 spell_id);
bool IsEvacSpell(uint16 spellid); bool IsDamageSpell(uint16 spell_id);
bool IsDamageSpell(uint16 spellid); bool IsFearSpell(uint16 spell_id);
bool IsFearSpell(uint16 spellid); bool IsCureSpell(uint16 spell_id);
bool IsCureSpell(uint16 spellid); int GetSpellEffectIndex(uint16 spell_id, int effect_id);
bool BeneficialSpell(uint16 spell_id); uint8 GetSpellMinimumLevel(uint16 spell_id);
bool GroupOnlySpell(uint16 spell_id); uint8 GetSpellLevel(uint16 spell_id, uint8 class_id);
int GetSpellEffectIndex(uint16 spell_id, int effect);
int CanUseSpell(uint16 spellid, int classa, int level);
int GetMinLevel(uint16 spell_id);
int GetSpellLevel(uint16 spell_id, int classa);
int CalcBuffDuration_formula(int level, int formula, int duration); int CalcBuffDuration_formula(int level, int formula, int duration);
int32 CalculatePoisonCounters(uint16 spell_id); int32 CalculatePoisonCounters(uint16 spell_id);
int32 CalculateDiseaseCounters(uint16 spell_id); int32 CalculateDiseaseCounters(uint16 spell_id);
@ -1508,11 +1547,11 @@ bool IsDisciplineBuff(uint16 spell_id);
bool IsDiscipline(uint16 spell_id); bool IsDiscipline(uint16 spell_id);
bool IsCombatSkill(uint16 spell_id); bool IsCombatSkill(uint16 spell_id);
bool IsResurrectionEffects(uint16 spell_id); bool IsResurrectionEffects(uint16 spell_id);
int8 GetResurrectionSicknessCheck(uint16 spell_id1, uint16 spell_id2); int8 GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two);
bool IsRuneSpell(uint16 spell_id); bool IsRuneSpell(uint16 spell_id);
bool IsMagicRuneSpell(uint16 spell_id); bool IsMagicRuneSpell(uint16 spell_id);
bool IsManaTapSpell(uint16 spell_id); bool IsManaTapSpell(uint16 spell_id);
bool IsAllianceSpellLine(uint16 spell_id); bool IsAllianceSpell(uint16 spell_id);
bool IsDeathSaveSpell(uint16 spell_id); bool IsDeathSaveSpell(uint16 spell_id);
bool IsFullDeathSaveSpell(uint16 spell_id); bool IsFullDeathSaveSpell(uint16 spell_id);
bool IsPartialDeathSaveSpell(uint16 spell_id); bool IsPartialDeathSaveSpell(uint16 spell_id);
@ -1521,10 +1560,10 @@ bool IsSuccorSpell(uint16 spell_id);
bool IsTeleportSpell(uint16 spell_id); bool IsTeleportSpell(uint16 spell_id);
bool IsTranslocateSpell(uint16 spell_id); bool IsTranslocateSpell(uint16 spell_id);
bool IsGateSpell(uint16 spell_id); bool IsGateSpell(uint16 spell_id);
bool IsPlayerIllusionSpell(uint16 spell_id); // seveian 2008-09-23 bool IsIllusionSpell(uint16 spell_id);
bool IsLDoNObjectSpell(uint16 spell_id); bool IsLDoNObjectSpell(uint16 spell_id);
int32 GetSpellResistType(uint16 spell_id); int GetSpellResistType(uint16 spell_id);
int32 GetSpellTargetType(uint16 spell_id); int GetSpellTargetType(uint16 spell_id);
bool IsHealOverTimeSpell(uint16 spell_id); bool IsHealOverTimeSpell(uint16 spell_id);
bool IsCompleteHealSpell(uint16 spell_id); bool IsCompleteHealSpell(uint16 spell_id);
bool IsFastHealSpell(uint16 spell_id); bool IsFastHealSpell(uint16 spell_id);
@ -1539,37 +1578,36 @@ bool IsSelfConversionSpell(uint16 spell_id);
bool IsBuffSpell(uint16 spell_id); bool IsBuffSpell(uint16 spell_id);
bool IsPersistDeathSpell(uint16 spell_id); bool IsPersistDeathSpell(uint16 spell_id);
bool IsSuspendableSpell(uint16 spell_id); bool IsSuspendableSpell(uint16 spell_id);
uint32 GetMorphTrigger(uint32 spell_id); bool IsCastOnFadeDurationSpell(uint16 spell_id);
bool IsCastonFadeDurationSpell(uint16 spell_id); bool IsDistanceModifierSpell(uint16 spell_id);
bool IsPowerDistModSpell(uint16 spell_id); int GetSpellPartialMeleeRuneReduction(uint16 spell_id);
uint32 GetPartialMeleeRuneReduction(uint32 spell_id); int GetSpellPartialMagicRuneReduction(uint16 spell_id);
uint32 GetPartialMagicRuneReduction(uint32 spell_id); int GetSpellPartialMeleeRuneAmount(uint16 spell_id);
uint32 GetPartialMeleeRuneAmount(uint32 spell_id); int GetSpellPartialMagicRuneAmount(uint16 spell_id);
uint32 GetPartialMagicRuneAmount(uint32 spell_id); bool IsNoDetrimentalSpellAggroSpell(uint16 spell_id);
bool NoDetrimentalSpellAggro(uint16 spell_id); bool IsStackableDOT(uint16 spell_id);
bool IsStackableDot(uint16 spell_id); bool IsBardOnlyStackEffect(int effect_id);
bool IsBardOnlyStackEffect(int effect); bool IsCastWhileInvisibleSpell(uint16 spell_id);
bool IsCastWhileInvis(uint16 spell_id); bool IsEffectIgnoredInStacking(int effect_id);
bool IsEffectIgnoredInStacking(int spa); bool IsFocusLimit(int effect_id);
bool IsFocusLimit(int spa); bool IsTargetRequiredForSpell(uint16 spell_id);
bool SpellRequiresTarget(int target_type); bool IsVirusSpell(uint16 spell_id);
bool IsVirusSpell(int32 spell_id); int GetSpellViralMinimumSpreadTime(uint16 spell_id);
int GetViralMinSpreadTime(int32 spell_id); int GetSpellViralMaximumSpreadTime(uint16 spell_id);
int GetViralMaxSpreadTime(int32 spell_id); int GetSpellViralSpreadRange(uint16 spell_id);
int GetViralSpreadRange(int32 spell_id); bool IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id);
bool IsInstrumentModAppliedToSpellEffect(int32 spell_id, int effect); bool IsPulsingBardSong(uint16 spell_id);
bool IsPulsingBardSong(int32 spell_id); int GetSpellProcLimitTimer(uint16 spell_id, int proc_type);
uint32 GetProcLimitTimer(int32 spell_id, int proc_type); bool IsCastNotStandingSpell(uint16 spell_id);
bool IgnoreCastingRestriction(int32 spell_id); int GetSpellEffectDescriptionNumber(uint16 spell_id);
int GetSpellEffectDescNum(uint16 spell_id); DmgShieldType GetDamageShieldType(uint16 spell_id, int damage_shield_type = 0);
DmgShieldType GetDamageShieldType(uint16 spell_id, int32 DSType = 0); bool IsRestAllowedSpell(uint16 spell_id);
bool DetrimentalSpellAllowsRest(uint16 spell_id); int GetSpellNimbusEffect(uint16 spell_id);
uint32 GetNimbusEffect(uint16 spell_id); int GetSpellFuriousBash(uint16 spell_id);
int32 GetFuriousBash(uint16 spell_id);
bool IsShortDurationBuff(uint16 spell_id); bool IsShortDurationBuff(uint16 spell_id);
bool IsSpellUsableThisZoneType(uint16 spell_id, uint8 zone_type); bool IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type);
const char *GetSpellName(uint16 spell_id); const char *GetSpellName(uint16 spell_id);
int GetSpellStatValue(uint32 spell_id, const char* stat_identifier, uint8 slot = 0); int GetSpellStatValue(uint16 spell_id, const char* stat_identifier, uint8 slot = 0);
bool CastRestrictedSpell(int spellid); bool IsCastRestrictedSpell(uint16 spell_id);
#endif #endif

View File

@ -1320,7 +1320,7 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) {
timer_duration = 0; timer_duration = 0;
} }
if (!IsCastWhileInvis(rank->spell)) if (!IsCastWhileInvisibleSpell(rank->spell))
CommonBreakInvisible(); CommonBreakInvisible();
if (spells[rank->spell].sneak && (!hidden || (hidden && (Timer::GetCurrentTime() - tmHidden) < 4000))) { if (spells[rank->spell].sneak && (!hidden || (hidden && (Timer::GetCurrentTime() - tmHidden) < 4000))) {
@ -1333,7 +1333,7 @@ void Client::ActivateAlternateAdvancementAbility(int rank_id, int target_id) {
target_id = GetPetID(); target_id = GetPetID();
// extra handling for cast_not_standing spells // extra handling for cast_not_standing spells
if (!IgnoreCastingRestriction(rank->spell)) { if (!IsCastNotStandingSpell(rank->spell)) {
if (GetAppearance() == eaSitting) // we need to stand! if (GetAppearance() == eaSitting) // we need to stand!
SetAppearance(eaStanding, false); SetAppearance(eaStanding, false);

View File

@ -1161,7 +1161,7 @@ bool Mob::CheckLosFN(glm::vec3 posWatcher, float sizeWatcher, glm::vec3 posTarge
//offensive spell aggro //offensive spell aggro
int32 Mob::CheckAggroAmount(uint16 spell_id, Mob *target, bool isproc) int32 Mob::CheckAggroAmount(uint16 spell_id, Mob *target, bool isproc)
{ {
if (NoDetrimentalSpellAggro(spell_id)) if (IsNoDetrimentalSpellAggroSpell(spell_id))
return 0; return 0;
int32 AggroAmount = 0; int32 AggroAmount = 0;

View File

@ -2958,7 +2958,7 @@ void Mob::AddToHateList(Mob* other, int64 hate /*= 0*/, int64 damage /*= 0*/, bo
if (GetSpecialAbility(IMMUNE_AGGRO_CLIENT) && other->IsClient()) if (GetSpecialAbility(IMMUNE_AGGRO_CLIENT) && other->IsClient())
return; return;
if (IsValidSpell(spell_id) && NoDetrimentalSpellAggro(spell_id)) if (IsValidSpell(spell_id) && IsNoDetrimentalSpellAggroSpell(spell_id))
return; return;
if (other == myowner) if (other == myowner)

View File

@ -259,7 +259,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to
const SPDat_Spell_Struct& spell = spells[buffs[j1].spellid]; const SPDat_Spell_Struct& spell = spells[buffs[j1].spellid];
if (int NimbusEffect = GetNimbusEffect(buffs[j1].spellid); NimbusEffect && !IsNimbusEffectActive(NimbusEffect)) { if (int NimbusEffect = GetSpellNimbusEffect(buffs[j1].spellid); NimbusEffect && !IsNimbusEffectActive(NimbusEffect)) {
SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true);
} }
@ -4890,7 +4890,7 @@ void Bot::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 max
if (botweapon->ItemType == EQ::item::ItemTypeShield) if (botweapon->ItemType == EQ::item::ItemTypeShield)
hate += botweapon->AC; hate += botweapon->AC;
hate = (hate * (100 + GetFuriousBash(botweapon->Focus.Effect)) / 100); hate = (hate * (100 + GetSpellFuriousBash(botweapon->Focus.Effect)) / 100);
} }
} }
@ -5536,7 +5536,7 @@ int32 Bot::GetActSpellDuration(uint16 spell_id, int32 duration) {
increase += 20; increase += 20;
} }
if (IsMezSpell(spell_id)) if (IsMesmerizeSpell(spell_id))
tic_inc += GetAA(aaMesmerizationMastery); tic_inc += GetAA(aaMesmerizationMastery);
return (((duration * increase) / 100) + tic_inc); return (((duration * increase) / 100) + tic_inc);
@ -6326,7 +6326,7 @@ void Bot::CalcRestState() {
for (unsigned int j = 0; j < buff_count; j++) { for (unsigned int j = 0; j < buff_count; j++) {
if (IsValidSpell(buffs[j].spellid)) { if (IsValidSpell(buffs[j].spellid)) {
if (IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) if (IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0))
if (!DetrimentalSpellAllowsRest(buffs[j].spellid)) if (!IsRestAllowedSpell(buffs[j].spellid))
return; return;
} }
} }

View File

@ -110,7 +110,7 @@ bool Bot::BotCastSong(Mob* tar, uint8 botLevel) {
continue; continue;
if (!CheckSpellRecastTimers(this, iter.SpellIndex)) if (!CheckSpellRecastTimers(this, iter.SpellIndex))
continue; continue;
if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType()))
continue; continue;
switch (spells[iter.SpellId].target_type) { switch (spells[iter.SpellId].target_type) {
case ST_AEBard: case ST_AEBard:
@ -144,7 +144,7 @@ bool Bot::BotCastCombatSong(Mob* tar, uint8 botLevel) {
continue; continue;
if (!CheckSpellRecastTimers(this, iter.SpellIndex)) if (!CheckSpellRecastTimers(this, iter.SpellIndex))
continue; continue;
if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType()))
continue; continue;
switch (spells[iter.SpellId].target_type) { switch (spells[iter.SpellId].target_type) {
case ST_AEBard: case ST_AEBard:
@ -176,7 +176,7 @@ bool Bot::BotCastHateReduction(Mob* tar, uint8 botLevel, const BotSpell& botSpel
continue; continue;
if (!CheckSpellRecastTimers(this, iter.SpellIndex)) if (!CheckSpellRecastTimers(this, iter.SpellIndex))
continue; continue;
if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType()))
continue; continue;
if (spells[iter.SpellId].target_type != ST_Target) if (spells[iter.SpellId].target_type != ST_Target)
continue; continue;
@ -316,7 +316,7 @@ bool Bot::BotCastSlow(Mob* tar, uint8 botLevel, uint8 botClass, BotSpell& botSpe
continue; continue;
} }
if (!IsSpellUsableThisZoneType(iter.SpellId, zone->GetZoneType())) { if (!IsSpellUsableInThisZoneType(iter.SpellId, zone->GetZoneType())) {
continue; continue;
} }
@ -582,7 +582,7 @@ bool Bot::BotCastCombatBuff(Mob* tar, uint8 botLevel, uint8 botClass) {
if ( if (
((IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) || ((IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) ||
(IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor())) && (IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor())) &&
(botClass != BARD || !IsSpellUsableThisZoneType(s.SpellId, zone->GetZoneType())) (botClass != BARD || !IsSpellUsableInThisZoneType(s.SpellId, zone->GetZoneType()))
) { ) {
continue; continue;
} }
@ -892,7 +892,7 @@ bool Bot::BotCastBuff(Mob* tar, uint8 botLevel, uint8 botClass) {
(IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) || (IsEffectInSpell(s.SpellId, SE_Levitate) && !zone->CanLevitate()) ||
(IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor()) (IsEffectInSpell(s.SpellId, SE_MovementSpeed) && !zone->CanCastOutdoor())
) && ) &&
(botClass != BARD || !IsSpellUsableThisZoneType(s.SpellId, zone->GetZoneType())) (botClass != BARD || !IsSpellUsableInThisZoneType(s.SpellId, zone->GetZoneType()))
) { ) {
continue; continue;
} }
@ -1902,7 +1902,7 @@ std::list<BotSpell> Bot::GetBotSpellsForSpellEffect(Bot* botCaster, int spellEff
continue; continue;
} }
if (IsEffectInSpell(botSpellList[i].spellid, spellEffect) || GetTriggerSpellID(botSpellList[i].spellid, spellEffect)) { if (IsEffectInSpell(botSpellList[i].spellid, spellEffect) || GetSpellTriggerSpellID(botSpellList[i].spellid, spellEffect)) {
BotSpell botSpell; BotSpell botSpell;
botSpell.SpellId = botSpellList[i].spellid; botSpell.SpellId = botSpellList[i].spellid;
botSpell.SpellIndex = i; botSpell.SpellIndex = i;
@ -1940,7 +1940,7 @@ std::list<BotSpell> Bot::GetBotSpellsForSpellEffectAndTargetType(Bot* botCaster,
if ( if (
( (
IsEffectInSpell(botSpellList[i].spellid, spellEffect) || IsEffectInSpell(botSpellList[i].spellid, spellEffect) ||
GetTriggerSpellID(botSpellList[i].spellid, spellEffect) GetSpellTriggerSpellID(botSpellList[i].spellid, spellEffect)
) && ) &&
spells[botSpellList[i].spellid].target_type == targetType spells[botSpellList[i].spellid].target_type == targetType
) { ) {
@ -2313,7 +2313,7 @@ BotSpell Bot::GetBestBotSpellForMez(Bot* botCaster) {
for (std::list<BotSpell>::iterator botSpellListItr = botSpellList.begin(); botSpellListItr != botSpellList.end(); ++botSpellListItr) { for (std::list<BotSpell>::iterator botSpellListItr = botSpellList.begin(); botSpellListItr != botSpellList.end(); ++botSpellListItr) {
// Assuming all the spells have been loaded into this list by level and in descending order // Assuming all the spells have been loaded into this list by level and in descending order
if ( if (
IsMezSpell(botSpellListItr->SpellId) && IsMesmerizeSpell(botSpellListItr->SpellId) &&
CheckSpellRecastTimers(botCaster, botSpellListItr->SpellIndex) CheckSpellRecastTimers(botCaster, botSpellListItr->SpellIndex)
) { ) {
result.SpellId = botSpellListItr->SpellId; result.SpellId = botSpellListItr->SpellId;
@ -2388,7 +2388,7 @@ BotSpell Bot::GetBestBotSpellForDiseaseBasedSlow(Bot* botCaster) {
Mob* Bot::GetFirstIncomingMobToMez(Bot* botCaster, BotSpell botSpell) { Mob* Bot::GetFirstIncomingMobToMez(Bot* botCaster, BotSpell botSpell) {
Mob* result = 0; Mob* result = 0;
if (botCaster && IsMezSpell(botSpell.SpellId)) { if (botCaster && IsMesmerizeSpell(botSpell.SpellId)) {
std::list<NPC*> npc_list; std::list<NPC*> npc_list;
entity_list.GetNPCList(npc_list); entity_list.GetNPCList(npc_list);

View File

@ -656,7 +656,7 @@ void Client::CompleteConnect()
const SPDat_Spell_Struct &spell = spells[buffs[j1].spellid]; const SPDat_Spell_Struct &spell = spells[buffs[j1].spellid];
int NimbusEffect = GetNimbusEffect(buffs[j1].spellid); int NimbusEffect = GetSpellNimbusEffect(buffs[j1].spellid);
if (NimbusEffect) { if (NimbusEffect) {
if (!IsNimbusEffectActive(NimbusEffect)) if (!IsNimbusEffectActive(NimbusEffect))
SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true);
@ -721,17 +721,17 @@ void Client::CompleteConnect()
case SE_AddMeleeProc: case SE_AddMeleeProc:
case SE_WeaponProc: case SE_WeaponProc:
{ {
AddProcToWeapon(GetProcID(buffs[j1].spellid, x1), false, 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); AddProcToWeapon(GetProcID(buffs[j1].spellid, x1), false, 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC));
break; break;
} }
case SE_DefensiveProc: case SE_DefensiveProc:
{ {
AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC));
break; break;
} }
case SE_RangedProc: case SE_RangedProc:
{ {
AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC));
break; break;
} }
} }
@ -9233,7 +9233,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
return; return;
} }
if (i == 0) { if (i == 0) {
if (!IsCastWhileInvis(item->Click.Effect)) { if (!IsCastWhileInvisibleSpell(item->Click.Effect)) {
CommonBreakInvisible(); // client can't do this for us :( CommonBreakInvisible(); // client can't do this for us :(
} }
if (GetClass() == BARD){ if (GetClass() == BARD){
@ -9305,7 +9305,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
} }
if (i == 0) { if (i == 0) {
if (!IsCastWhileInvis(augitem->Click.Effect)) { if (!IsCastWhileInvisibleSpell(augitem->Click.Effect)) {
CommonBreakInvisible(); // client can't do this for us :( CommonBreakInvisible(); // client can't do this for us :(
} }
if (GetClass() == BARD) { if (GetClass() == BARD) {

View File

@ -1035,7 +1035,7 @@ void Client::OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 I
BuffFadeNonPersistDeath(); BuffFadeNonPersistDeath();
} }
int SpellEffectDescNum = GetSpellEffectDescNum(SpellID); int SpellEffectDescNum = GetSpellEffectDescriptionNumber(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(RuleB(Character, UseResurrectionSickness) && SpellEffectDescNum == 82 || SpellEffectDescNum == 39067) { if(RuleB(Character, UseResurrectionSickness) && SpellEffectDescNum == 82 || SpellEffectDescNum == 39067) {
SetHP(GetMaxHP() / 5); SetHP(GetMaxHP() / 5);
@ -1968,7 +1968,7 @@ void Client::CalcRestState()
for (unsigned int j = 0; j < buff_count; j++) { for (unsigned int j = 0; j < buff_count; j++) {
if(IsValidSpell(buffs[j].spellid)) { if(IsValidSpell(buffs[j].spellid)) {
if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0))
if(!DetrimentalSpellAllowsRest(buffs[j].spellid)) if(!IsRestAllowedSpell(buffs[j].spellid))
return; return;
} }
} }

View File

@ -810,9 +810,9 @@ void Client::SendDisciplineUpdate() {
bool Client::UseDiscipline(uint32 spell_id, uint32 target) { bool Client::UseDiscipline(uint32 spell_id, uint32 target) {
// Dont let client waste a reuse timer if they can't use the disc // Dont let client waste a reuse timer if they can't use the disc
if ((IsStunned() && !IgnoreCastingRestriction(spell_id))|| if ((IsStunned() && !IsCastNotStandingSpell(spell_id))||
IsFeared() || IsFeared() ||
(IsMezzed() && !IgnoreCastingRestriction(spell_id)) || (IsMezzed() && !IsCastNotStandingSpell(spell_id)) ||
IsAmnesiad() || IsAmnesiad() ||
IsPet()) IsPet())
{ {
@ -837,7 +837,7 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) {
return false; return false;
} }
if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { if (DivineAura() && !IsCastNotStandingSpell(spell_id)) {
return false; return false;
} }

View File

@ -528,10 +528,10 @@ std::string Perl__getspellname(uint32 spell_id)
return quest_manager.getspellname(spell_id); return quest_manager.getspellname(spell_id);
} }
int Perl__get_spell_level(uint32_t spell_id, int class_id) uint8 Perl__get_spell_level(uint16 spell_id, uint8 class_id)
{ {
int spell_level = IsValidSpell(spell_id) ? GetSpellLevel(spell_id, class_id) : 0; const auto spell_level = GetSpellLevel(spell_id, class_id);
return (spell_level > RuleI(Character, MaxLevel)) ? 0 : spell_level; return spell_level > RuleI(Character, MaxLevel) ? UINT8_MAX : spell_level;
} }
std::string Perl__getskillname(int skill_id) std::string Perl__getskillname(int skill_id)
@ -1695,14 +1695,489 @@ bool Perl__IsRunning()
return quest_manager.IsRunning(); return quest_manager.IsRunning();
} }
bool Perl__IsEffectInSpell(uint32 spell_id, uint32 effect_id) bool Perl__IsEffectInSpell(uint16 spell_id, int effect_id)
{ {
return IsEffectInSpell(spell_id, effect_id); return IsEffectInSpell(spell_id, effect_id);
} }
bool Perl__IsBeneficialSpell(uint16 spell_id) bool Perl__IsBeneficialSpell(uint16 spell_id)
{ {
return BeneficialSpell(spell_id); return IsBeneficialSpell(spell_id);
}
bool Perl__IsDetrimentalSpell(uint16 spell_id)
{
return IsDetrimentalSpell(spell_id);
}
bool Perl__IsTargetableAESpell(uint16 spell_id)
{
return IsTargetableAESpell(spell_id);
}
bool Perl__IsSacrificeSpell(uint16 spell_id)
{
return IsSacrificeSpell(spell_id);
}
bool Perl__IsLifetapSpell(uint16 spell_id)
{
return IsLifetapSpell(spell_id);
}
bool Perl__IsMesmerizeSpell(uint16 spell_id)
{
return IsMesmerizeSpell(spell_id);
}
bool Perl__IsStunSpell(uint16 spell_id)
{
return IsStunSpell(spell_id);
}
bool Perl__IsSummonSpell(uint16 spell_id)
{
return IsSummonSpell(spell_id);
}
bool Perl__IsDamageSpell(uint16 spell_id)
{
return IsDamageSpell(spell_id);
}
bool Perl__IsFearSpell(uint16 spell_id)
{
return IsFearSpell(spell_id);
}
bool Perl__IsCureSpell(uint16 spell_id)
{
return IsCureSpell(spell_id);
}
bool Perl__IsHasteSpell(uint16 spell_id)
{
return IsHasteSpell(spell_id);
}
bool Perl__IsHarmonySpell(uint16 spell_id)
{
return IsHarmonySpell(spell_id);
}
bool Perl__IsPercentalHealSpell(uint16 spell_id)
{
return IsPercentalHealSpell(spell_id);
}
bool Perl__IsGroupOnlySpell(uint16 spell_id)
{
return IsGroupOnlySpell(spell_id);
}
bool Perl__IsInvisibleSpell(uint16 spell_id)
{
return IsInvisibleSpell(spell_id);
}
bool Perl__IsInvulnerabilitySpell(uint16 spell_id)
{
return IsInvulnerabilitySpell(spell_id);
}
bool Perl__IsCompleteHealDurationSpell(uint16 spell_id)
{
return IsCompleteHealDurationSpell(spell_id);
}
bool Perl__IsPoisonCounterSpell(uint16 spell_id)
{
return IsPoisonCounterSpell(spell_id);
}
bool Perl__IsDiseaseCounterSpell(uint16 spell_id)
{
return IsDiseaseCounterSpell(spell_id);
}
bool Perl__IsSummonItemSpell(uint16 spell_id)
{
return IsSummonItemSpell(spell_id);
}
bool Perl__IsSummonSkeletonSpell(uint16 spell_id)
{
return IsSummonSkeletonSpell(spell_id);
}
bool Perl__IsSummonPetSpell(uint16 spell_id)
{
return IsSummonPetSpell(spell_id);
}
bool Perl__IsPetSpell(uint16 spell_id)
{
return IsPetSpell(spell_id);
}
bool Perl__IsSummonPCSpell(uint16 spell_id)
{
return IsSummonPCSpell(spell_id);
}
bool Perl__IsCharmSpell(uint16 spell_id)
{
return IsCharmSpell(spell_id);
}
bool Perl__IsBlindSpell(uint16 spell_id)
{
return IsBlindSpell(spell_id);
}
bool Perl__IsHealthSpell(uint16 spell_id)
{
return IsHealthSpell(spell_id);
}
bool Perl__IsCastTimeReductionSpell(uint16 spell_id)
{
return IsCastTimeReductionSpell(spell_id);
}
bool Perl__IsIncreaseDurationSpell(uint16 spell_id)
{
return IsIncreaseDurationSpell(spell_id);
}
bool Perl__IsManaCostReductionSpell(uint16 spell_id)
{
return IsManaCostReductionSpell(spell_id);
}
bool Perl__IsIncreaseRangeSpell(uint16 spell_id)
{
return IsIncreaseRangeSpell(spell_id);
}
bool Perl__IsImprovedHealingSpell(uint16 spell_id)
{
return IsImprovedHealingSpell(spell_id);
}
bool Perl__IsImprovedDamageSpell(uint16 spell_id)
{
return IsImprovedDamageSpell(spell_id);
}
bool Perl__IsAEDurationSpell(uint16 spell_id)
{
return IsAEDurationSpell(spell_id);
}
bool Perl__IsPureNukeSpell(uint16 spell_id)
{
return IsPureNukeSpell(spell_id);
}
bool Perl__IsAENukeSpell(uint16 spell_id)
{
return IsAENukeSpell(spell_id);
}
bool Perl__IsPBAENukeSpell(uint16 spell_id)
{
return IsPBAENukeSpell(spell_id);
}
bool Perl__IsAERainNukeSpell(uint16 spell_id)
{
return IsAERainNukeSpell(spell_id);
}
bool Perl__IsPartialResistableSpell(uint16 spell_id)
{
return IsPartialResistableSpell(spell_id);
}
bool Perl__IsResistableSpell(uint16 spell_id)
{
return IsResistableSpell(spell_id);
}
bool Perl__IsGroupSpell(uint16 spell_id)
{
return IsGroupSpell(spell_id);
}
bool Perl__IsTGBCompatibleSpell(uint16 spell_id)
{
return IsTGBCompatibleSpell(spell_id);
}
bool Perl__IsBardSong(uint16 spell_id)
{
return IsBardSong(spell_id);
}
bool Perl__IsPulsingBardSong(uint16 spell_id)
{
return IsPulsingBardSong(spell_id);
}
bool Perl__IsDisciplineBuff(uint16 spell_id)
{
return IsDisciplineBuff(spell_id);
}
bool Perl__IsDiscipline(uint16 spell_id)
{
return IsDiscipline(spell_id);
}
bool Perl__IsCombatSkill(uint16 spell_id)
{
return IsCombatSkill(spell_id);
}
bool Perl__IsResurrectionEffects(uint16 spell_id)
{
return IsResurrectionEffects(spell_id);
}
bool Perl__IsRuneSpell(uint16 spell_id)
{
return IsRuneSpell(spell_id);
}
bool Perl__IsMagicRuneSpell(uint16 spell_id)
{
return IsMagicRuneSpell(spell_id);
}
bool Perl__IsManaTapSpell(uint16 spell_id)
{
return IsManaTapSpell(spell_id);
}
bool Perl__IsAllianceSpell(uint16 spell_id)
{
return IsAllianceSpell(spell_id);
}
bool Perl__IsDeathSaveSpell(uint16 spell_id)
{
return IsDeathSaveSpell(spell_id);
}
bool Perl__IsPartialDeathSaveSpell(uint16 spell_id)
{
return IsPartialDeathSaveSpell(spell_id);
}
bool Perl__IsFullDeathSaveSpell(uint16 spell_id)
{
return IsFullDeathSaveSpell(spell_id);
}
bool Perl__IsShadowStepSpell(uint16 spell_id)
{
return IsShadowStepSpell(spell_id);
}
bool Perl__IsSuccorSpell(uint16 spell_id)
{
return IsSuccorSpell(spell_id);
}
bool Perl__IsTeleportSpell(uint16 spell_id)
{
return IsTeleportSpell(spell_id);
}
bool Perl__IsTranslocateSpell(uint16 spell_id)
{
return IsTranslocateSpell(spell_id);
}
bool Perl__IsGateSpell(uint16 spell_id)
{
return IsGateSpell(spell_id);
}
bool Perl__IsIllusionSpell(uint16 spell_id)
{
return IsIllusionSpell(spell_id);
}
bool Perl__IsLDoNObjectSpell(uint16 spell_id)
{
return IsLDoNObjectSpell(spell_id);
}
bool Perl__IsHealOverTimeSpell(uint16 spell_id)
{
return IsHealOverTimeSpell(spell_id);
}
bool Perl__IsCompleteHealSpell(uint16 spell_id)
{
return IsCompleteHealSpell(spell_id);
}
bool Perl__IsFastHealSpell(uint16 spell_id)
{
return IsFastHealSpell(spell_id);
}
bool Perl__IsVeryFastHealSpell(uint16 spell_id)
{
return IsVeryFastHealSpell(spell_id);
}
bool Perl__IsRegularSingleTargetHealSpell(uint16 spell_id)
{
return IsRegularSingleTargetHealSpell(spell_id);
}
bool Perl__IsRegularGroupHealSpell(uint16 spell_id)
{
return IsRegularGroupHealSpell(spell_id);
}
bool Perl__IsGroupCompleteHealSpell(uint16 spell_id)
{
return IsGroupCompleteHealSpell(spell_id);
}
bool Perl__IsGroupHealOverTimeSpell(uint16 spell_id)
{
return IsGroupHealOverTimeSpell(spell_id);
}
bool Perl__IsDebuffSpell(uint16 spell_id)
{
return IsDebuffSpell(spell_id);
}
bool Perl__IsResistDebuffSpell(uint16 spell_id)
{
return IsResistDebuffSpell(spell_id);
}
bool Perl__IsSelfConversionSpell(uint16 spell_id)
{
return IsSelfConversionSpell(spell_id);
}
bool Perl__IsBuffSpell(uint16 spell_id)
{
return IsBuffSpell(spell_id);
}
bool Perl__IsPersistDeathSpell(uint16 spell_id)
{
return IsPersistDeathSpell(spell_id);
}
bool Perl__IsSuspendableSpell(uint16 spell_id)
{
return IsSuspendableSpell(spell_id);
}
bool Perl__IsCastOnFadeDurationSpell(uint16 spell_id)
{
return IsCastOnFadeDurationSpell(spell_id);
}
bool Perl__IsDistanceModifierSpell(uint16 spell_id)
{
return IsDistanceModifierSpell(spell_id);
}
bool Perl__IsRestAllowedSpell(uint16 spell_id)
{
return IsRestAllowedSpell(spell_id);
}
bool Perl__IsNoDetrimentalSpellAggroSpell(uint16 spell_id)
{
return IsNoDetrimentalSpellAggroSpell(spell_id);
}
bool Perl__IsStackableDOT(uint16 spell_id)
{
return IsStackableDOT(spell_id);
}
bool Perl__IsShortDurationBuff(uint16 spell_id)
{
return IsShortDurationBuff(spell_id);
}
bool Perl__IsTargetRequiredForSpell(uint16 spell_id)
{
return IsTargetRequiredForSpell(spell_id);
}
bool Perl__IsVirusSpell(uint16 spell_id)
{
return IsVirusSpell(spell_id);
}
bool Perl__IsValidSpell(uint16 spell_id)
{
return IsValidSpell(spell_id);
}
bool Perl__IsEffectIgnoredInStacking(int effect_id)
{
return IsEffectIgnoredInStacking(effect_id);
}
bool Perl__IsFocusLimit(int effect_id)
{
return IsFocusLimit(effect_id);
}
bool Perl__IsBardOnlyStackEffect(int effect_id)
{
return IsBardOnlyStackEffect(effect_id);
}
bool Perl__IsCastWhileInvisibleSpell(uint16 spell_id)
{
return IsCastWhileInvisibleSpell(spell_id);
}
bool Perl__IsCastRestrictedSpell(uint16 spell_id)
{
return IsCastRestrictedSpell(spell_id);
}
bool Perl__IsCastNotStandingSpell(uint16 spell_id)
{
return IsCastNotStandingSpell(spell_id);
}
bool Perl__IsInstrumentModifierAppliedToSpellEffect(uint16 spell_id, int effect_id)
{
return IsInstrumentModifierAppliedToSpellEffect(spell_id, effect_id);
}
bool Perl__IsBlankSpellEffect(uint16 spell_id, int effect_index)
{
return IsBlankSpellEffect(spell_id, effect_index);
}
uint16 Perl__GetSpellTriggerSpellID(uint16 spell_id, int effect_id)
{
return GetSpellTriggerSpellID(spell_id, effect_id);
}
uint8 Perl__GetSpellMinimumLevel(uint16 spell_id)
{
return GetSpellMinimumLevel(spell_id);
} }
int Perl__GetSpellResistType(uint16 spell_id) int Perl__GetSpellResistType(uint16 spell_id)
@ -1715,6 +2190,106 @@ int Perl__GetSpellTargetType(uint16 spell_id)
return GetSpellTargetType(spell_id); return GetSpellTargetType(spell_id);
} }
int Perl__GetSpellPartialMeleeRuneReduction(uint16 spell_id)
{
return GetSpellPartialMeleeRuneReduction(spell_id);
}
int Perl__GetSpellPartialMagicRuneReduction(uint16 spell_id)
{
return GetSpellPartialMagicRuneReduction(spell_id);
}
int Perl__GetSpellPartialMeleeRuneAmount(uint16 spell_id)
{
return GetSpellPartialMeleeRuneAmount(spell_id);
}
int Perl__GetSpellPartialMagicRuneAmount(uint16 spell_id)
{
return GetSpellPartialMagicRuneAmount(spell_id);
}
int Perl__GetSpellViralMinimumSpreadTime(uint16 spell_id)
{
return GetSpellViralMinimumSpreadTime(spell_id);
}
int Perl__GetSpellViralMaximumSpreadTime(uint16 spell_id)
{
return GetSpellViralMaximumSpreadTime(spell_id);
}
int Perl__GetSpellViralSpreadRange(uint16 spell_id)
{
return GetSpellViralSpreadRange(spell_id);
}
int Perl__GetSpellProcLimitTimer(uint16 spell_id, int proc_type)
{
return GetSpellProcLimitTimer(spell_id, proc_type);
}
int Perl__GetSpellEffectDescriptionNumber(uint16 spell_id)
{
return GetSpellEffectDescriptionNumber(spell_id);
}
int Perl__GetSpellFuriousBash(uint16 spell_id)
{
return GetSpellFuriousBash(spell_id);
}
bool Perl__IsSpellUsableInThisZoneType(uint16 spell_id)
{
return IsSpellUsableInThisZoneType(spell_id, zone->GetZoneType());
}
bool Perl__IsSpellUsableInThisZoneType(uint16 spell_id, uint8 zone_type)
{
return IsSpellUsableInThisZoneType(spell_id, zone_type);
}
int Perl__GetSpellEffectIndex(uint16 spell_id, int effect_id)
{
return GetSpellEffectIndex(spell_id, effect_id);
}
int Perl__CalculatePoisonCounters(uint16 spell_id)
{
return CalculatePoisonCounters(spell_id);
}
int Perl__CalculateDiseaseCounters(uint16 spell_id)
{
return CalculateDiseaseCounters(spell_id);
}
int Perl__CalculateCurseCounters(uint16 spell_id)
{
return CalculateCurseCounters(spell_id);
}
int Perl__CalculateCorruptionCounters(uint16 spell_id)
{
return CalculateCorruptionCounters(spell_id);
}
int Perl__CalculateCounters(uint16 spell_id)
{
return CalculateCounters(spell_id);
}
int8 Perl__GetSpellResurrectionSicknessCheck(uint16 spell_id_one, uint16 spell_id_two)
{
return GetSpellResurrectionSicknessCheck(spell_id_one, spell_id_two);
}
int Perl__GetSpellNimbusEffect(uint16 spell_id)
{
return GetSpellNimbusEffect(spell_id);
}
void Perl__FlyMode(GravityBehavior flymode) void Perl__FlyMode(GravityBehavior flymode)
{ {
quest_manager.FlyMode(flymode); quest_manager.FlyMode(flymode);
@ -4762,7 +5337,11 @@ void perl_register_quest()
package.add("createbotcount", (int(*)())&Perl__createbotcount); package.add("createbotcount", (int(*)())&Perl__createbotcount);
package.add("createbotcount", (int(*)(uint8))&Perl__createbotcount); package.add("createbotcount", (int(*)(uint8))&Perl__createbotcount);
package.add("createBot", &Perl__createBot); package.add("createBot", &Perl__createBot);
package.add("CalculateCorruptionCounters", &Perl__CalculateCorruptionCounters);
package.add("CalculateCounters", &Perl__CalculateCounters);
package.add("CalculateCurseCounters", &Perl__CalculateCurseCounters);
package.add("CalculateDiseaseCounters", &Perl__CalculateDiseaseCounters);
package.add("CalculatePoisonCounters", &Perl__CalculatePoisonCounters);
package.add("AssignGroupToInstance", &Perl__AssignGroupToInstance); package.add("AssignGroupToInstance", &Perl__AssignGroupToInstance);
package.add("AssignRaidToInstance", &Perl__AssignRaidToInstance); package.add("AssignRaidToInstance", &Perl__AssignRaidToInstance);
package.add("AssignToInstance", &Perl__AssignToInstance); package.add("AssignToInstance", &Perl__AssignToInstance);
@ -4783,8 +5362,23 @@ void perl_register_quest()
package.add("GetInstanceIDsByCharID", &Perl__GetInstanceIDsByCharID); package.add("GetInstanceIDsByCharID", &Perl__GetInstanceIDsByCharID);
package.add("GetInstanceVersionByID", &Perl__GetInstanceVersionByID); package.add("GetInstanceVersionByID", &Perl__GetInstanceVersionByID);
package.add("GetInstanceZoneIDByID", &Perl__GetInstanceZoneIDByID); package.add("GetInstanceZoneIDByID", &Perl__GetInstanceZoneIDByID);
package.add("GetSpellPartialMagicRuneReduction", &Perl__GetSpellPartialMagicRuneReduction);
package.add("GetSpellPartialMagicRuneAmount", &Perl__GetSpellPartialMagicRuneAmount);
package.add("GetSpellPartialMeleeRuneReduction", &Perl__GetSpellPartialMeleeRuneReduction);
package.add("GetSpellPartialMeleeRuneAmount", &Perl__GetSpellPartialMeleeRuneAmount);
package.add("GetSpellProcLimitTimer", &Perl__GetSpellProcLimitTimer);
package.add("GetSpellResurrectionSicknessCheck", &Perl__GetSpellResurrectionSicknessCheck);
package.add("GetSpellEffectDescriptionNumber", &Perl__GetSpellEffectDescriptionNumber);
package.add("GetSpellEffectIndex", &Perl__GetSpellEffectIndex);
package.add("GetSpellFuriousBash", &Perl__GetSpellFuriousBash);
package.add("GetSpellMinimumLevel", &Perl__GetSpellMinimumLevel);
package.add("GetSpellNimbusEffect", &Perl__GetSpellNimbusEffect);
package.add("GetSpellResistType", &Perl__GetSpellResistType); package.add("GetSpellResistType", &Perl__GetSpellResistType);
package.add("GetSpellTargetType", &Perl__GetSpellTargetType); package.add("GetSpellTargetType", &Perl__GetSpellTargetType);
package.add("GetSpellTriggerSpellID", &Perl__GetSpellTriggerSpellID);
package.add("GetSpellViralMaximumSpreadTime", &Perl__GetSpellViralMaximumSpreadTime);
package.add("GetSpellViralMinimumSpreadTime", &Perl__GetSpellViralMinimumSpreadTime);
package.add("GetSpellViralSpreadRange", &Perl__GetSpellViralSpreadRange);
package.add("GetTimeSeconds", &Perl__GetTimeSeconds); package.add("GetTimeSeconds", &Perl__GetTimeSeconds);
package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32))&Perl__GetZoneBypassExpansionCheck); package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32))&Perl__GetZoneBypassExpansionCheck);
package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32, int))&Perl__GetZoneBypassExpansionCheck); package.add("GetZoneBypassExpansionCheck", (int8(*)(uint32, int))&Perl__GetZoneBypassExpansionCheck);
@ -4913,19 +5507,105 @@ void perl_register_quest()
package.add("GetZoneUnderworldTeleportIndex", (int(*)(uint32, int))&Perl__GetZoneUnderworldTeleportIndex); package.add("GetZoneUnderworldTeleportIndex", (int(*)(uint32, int))&Perl__GetZoneUnderworldTeleportIndex);
package.add("GetZoneWalkSpeed", (float(*)(uint32))&Perl__GetZoneWalkSpeed); package.add("GetZoneWalkSpeed", (float(*)(uint32))&Perl__GetZoneWalkSpeed);
package.add("GetZoneWalkSpeed", (float(*)(uint32, int))&Perl__GetZoneWalkSpeed); package.add("GetZoneWalkSpeed", (float(*)(uint32, int))&Perl__GetZoneWalkSpeed);
package.add("set_rule", &Perl__set_rule); package.add("IsAEDurationSpell", &Perl__IsAEDurationSpell);
package.add("get_rule", &Perl__get_rule); package.add("IsAENukeSpell", &Perl__IsAENukeSpell);
package.add("get_data", &Perl__get_data); package.add("IsAERainNukeSpell", &Perl__IsAERainNukeSpell);
package.add("get_data_expires", &Perl__get_data_expires); package.add("IsAllianceSpell", &Perl__IsAllianceSpell);
package.add("get_data_remaining", &Perl__get_data_remaining); package.add("IsBardOnlyStackEffect", &Perl__IsBardOnlyStackEffect);
package.add("set_data", (void(*)(std::string, std::string))&Perl__set_data); package.add("IsBardSong", &Perl__IsBardSong);
package.add("set_data", (void(*)(std::string, std::string, std::string))&Perl__set_data);
package.add("delete_data", &Perl__delete_data);
package.add("IsBeneficialSpell", &Perl__IsBeneficialSpell); package.add("IsBeneficialSpell", &Perl__IsBeneficialSpell);
package.add("IsBlankSpellEffect", &Perl__IsBlankSpellEffect);
package.add("IsBlindSpell", &Perl__IsBlindSpell);
package.add("IsBuffSpell", &Perl__IsBuffSpell);
package.add("IsCastOnFadeDurationSpell", &Perl__IsCastOnFadeDurationSpell);
package.add("IsCastNotStandingSpell", &Perl__IsCastNotStandingSpell);
package.add("IsCastRestrictedSpell", &Perl__IsCastRestrictedSpell);
package.add("IsCastTimeReductionSpell", &Perl__IsCastTimeReductionSpell);
package.add("IsCastWhileInvisibleSpell", &Perl__IsCastWhileInvisibleSpell);
package.add("IsCharmSpell", &Perl__IsCharmSpell);
package.add("IsCombatSkill", &Perl__IsCombatSkill);
package.add("IsCompleteHealSpell", &Perl__IsCompleteHealSpell);
package.add("IsCompleteHealDurationSpell", &Perl__IsCompleteHealDurationSpell);
package.add("IsCureSpell", &Perl__IsCureSpell);
package.add("IsDamageSpell", &Perl__IsDamageSpell);
package.add("IsDeathSaveSpell", &Perl__IsDeathSaveSpell);
package.add("IsDebuffSpell", &Perl__IsDebuffSpell);
package.add("IsDetrimentalSpell", &Perl__IsDetrimentalSpell);
package.add("IsDiscipline", &Perl__IsDiscipline);
package.add("IsDisciplineBuff", &Perl__IsDisciplineBuff);
package.add("IsDiseaseCounterSpell", &Perl__IsDiseaseCounterSpell);
package.add("IsDistanceModifierSpell", &Perl__IsDistanceModifierSpell);
package.add("IsEffectIgnoredInStacking", &Perl__IsEffectIgnoredInStacking);
package.add("IsEffectInSpell", &Perl__IsEffectInSpell); package.add("IsEffectInSpell", &Perl__IsEffectInSpell);
package.add("IsFastHealSpell", &Perl__IsFastHealSpell);
package.add("IsFearSpell", &Perl__IsFearSpell);
package.add("IsFocusLimit", &Perl__IsFocusLimit);
package.add("IsFullDeathSaveSpell", &Perl__IsFullDeathSaveSpell);
package.add("IsGateSpell", &Perl__IsGateSpell);
package.add("IsGroupCompleteHealSpell", &Perl__IsGroupCompleteHealSpell);
package.add("IsGroupHealOverTimeSpell", &Perl__IsGroupHealOverTimeSpell);
package.add("IsGroupOnlySpell", &Perl__IsGroupOnlySpell);
package.add("IsGroupSpell", &Perl__IsGroupSpell);
package.add("IsHarmonySpell", &Perl__IsHarmonySpell);
package.add("IsHasteSpell", &Perl__IsHasteSpell);
package.add("IsHealOverTimeSpell", &Perl__IsHealOverTimeSpell);
package.add("IsHealthSpell", &Perl__IsHealthSpell);
package.add("IsIllusionSpell", &Perl__IsIllusionSpell);
package.add("IsImprovedDamageSpell", &Perl__IsImprovedDamageSpell);
package.add("IsImprovedHealingSpell", &Perl__IsImprovedHealingSpell);
package.add("IsIncreaseDurationSpell", &Perl__IsIncreaseDurationSpell);
package.add("IsIncreaseRangeSpell", &Perl__IsIncreaseRangeSpell);
package.add("IsInstrumentModifierAppliedToSpellEffect", &Perl__IsInstrumentModifierAppliedToSpellEffect);
package.add("IsInvisibleSpell", &Perl__IsInvisibleSpell);
package.add("IsInvulnerabilitySpell", &Perl__IsInvulnerabilitySpell);
package.add("IsLDoNObjectSpell", &Perl__IsLDoNObjectSpell);
package.add("IsLifetapSpell", &Perl__IsLifetapSpell);
package.add("IsMagicRuneSpell", &Perl__IsMagicRuneSpell);
package.add("IsManaCostReductionSpell", &Perl__IsManaCostReductionSpell);
package.add("IsManaTapSpell", &Perl__IsManaTapSpell);
package.add("IsMesmerizeSpell", &Perl__IsMesmerizeSpell);
package.add("IsNoDetrimentalSpellAggroSpell", &Perl__IsNoDetrimentalSpellAggroSpell);
package.add("IsPartialDeathSaveSpell", &Perl__IsPartialDeathSaveSpell);
package.add("IsPartialResistableSpell", &Perl__IsPartialResistableSpell);
package.add("IsPBAENukeSpell", &Perl__IsPBAENukeSpell);
package.add("IsPercentalHealSpell", &Perl__IsPercentalHealSpell);
package.add("IsPersistDeathSpell", &Perl__IsPersistDeathSpell);
package.add("IsPetSpell", &Perl__IsPetSpell);
package.add("IsPoisonCounterSpell", &Perl__IsPoisonCounterSpell);
package.add("IsPulsingBardSong", &Perl__IsPulsingBardSong);
package.add("IsPureNukeSpell", &Perl__IsPureNukeSpell);
package.add("IsRaining", &Perl__IsRaining); package.add("IsRaining", &Perl__IsRaining);
package.add("IsSnowing", &Perl__IsSnowing); package.add("IsRegularGroupHealSpell", &Perl__IsRegularGroupHealSpell);
package.add("IsRegularSingleTargetHealSpell", &Perl__IsRegularSingleTargetHealSpell);
package.add("IsResistableSpell", &Perl__IsResistableSpell);
package.add("IsResistDebuffSpell", &Perl__IsResistDebuffSpell);
package.add("IsRestAllowedSpell", &Perl__IsRestAllowedSpell);
package.add("IsResurrectionEffects", &Perl__IsResurrectionEffects);
package.add("IsRuneSpell", &Perl__IsRuneSpell);
package.add("IsRunning", &Perl__IsRunning); package.add("IsRunning", &Perl__IsRunning);
package.add("IsSacrificeSpell", &Perl__IsSacrificeSpell);
package.add("IsSelfConversionSpell", &Perl__IsSelfConversionSpell);
package.add("IsShadowStepSpell", &Perl__IsShadowStepSpell);
package.add("IsShortDurationBuff", &Perl__IsShortDurationBuff);
package.add("IsSnowing", &Perl__IsSnowing);
package.add("IsSpellUsableInThisZoneType", (bool(*)(uint16))&Perl__IsSpellUsableInThisZoneType);
package.add("IsSpellUsableInThisZoneType", (bool(*)(uint16, uint8))&Perl__IsSpellUsableInThisZoneType);
package.add("IsStackableDOT", &Perl__IsStackableDOT);
package.add("IsStunSpell", &Perl__IsStunSpell);
package.add("IsSuccorSpell", &Perl__IsSuccorSpell);
package.add("IsSummonItemSpell", &Perl__IsSummonItemSpell);
package.add("IsSummonPCSpell", &Perl__IsSummonPCSpell);
package.add("IsSummonPetSpell", &Perl__IsSummonPetSpell);
package.add("IsSummonSkeletonSpell", &Perl__IsSummonSkeletonSpell);
package.add("IsSummonSpell", &Perl__IsSummonSpell);
package.add("IsSuspendableSpell", &Perl__IsSuspendableSpell);
package.add("IsTargetableAESpell", &Perl__IsTargetableAESpell);
package.add("IsTargetRequiredForSpell", &Perl__IsTargetRequiredForSpell);
package.add("IsTeleportSpell", &Perl__IsTeleportSpell);
package.add("IsTranslocateSpell", &Perl__IsTranslocateSpell);
package.add("IsVeryFastHealSpell", &Perl__IsVeryFastHealSpell);
package.add("IsVirusSpell", &Perl__IsVirusSpell);
package.add("IsValidSpell", &Perl__IsValidSpell);
package.add("LearnRecipe", &Perl__LearnRecipe); package.add("LearnRecipe", &Perl__LearnRecipe);
package.add("MerchantCountItem", &Perl__MerchantCountItem); package.add("MerchantCountItem", &Perl__MerchantCountItem);
package.add("MerchantSetItem", (void(*)(uint32, uint32))&Perl__MerchantSetItem); package.add("MerchantSetItem", (void(*)(uint32, uint32))&Perl__MerchantSetItem);
@ -5199,6 +5879,7 @@ void perl_register_quest()
package.add("worldwideupdateactivity", (void(*)(uint32, int, int, uint8, uint8))&Perl__worldwideupdateactivity); package.add("worldwideupdateactivity", (void(*)(uint32, int, int, uint8, uint8))&Perl__worldwideupdateactivity);
package.add("debug", (void(*)(const char*))&Perl__debug); package.add("debug", (void(*)(const char*))&Perl__debug);
package.add("debug", (void(*)(const char*, int))&Perl__debug); package.add("debug", (void(*)(const char*, int))&Perl__debug);
package.add("delete_data", &Perl__delete_data);
package.add("delglobal", &Perl__delglobal); package.add("delglobal", &Perl__delglobal);
package.add("depop", (void(*)())&Perl__depop); package.add("depop", (void(*)())&Perl__depop);
package.add("depop", (void(*)(int))&Perl__depop); package.add("depop", (void(*)(int))&Perl__depop);
@ -5253,6 +5934,9 @@ void perl_register_quest()
package.add("getconsiderlevelname", &Perl__getconsiderlevelname); package.add("getconsiderlevelname", &Perl__getconsiderlevelname);
package.add("gethexcolorcode", &Perl__gethexcolorcode); package.add("gethexcolorcode", &Perl__gethexcolorcode);
package.add("getcurrencyid", &Perl__getcurrencyid); package.add("getcurrencyid", &Perl__getcurrencyid);
package.add("get_data", &Perl__get_data);
package.add("get_data_expires", &Perl__get_data_expires);
package.add("get_data_remaining", &Perl__get_data_remaining);
package.add("get_dz_task_id", &Perl__get_dz_task_id); package.add("get_dz_task_id", &Perl__get_dz_task_id);
package.add("getexpmodifierbycharid", (double(*)(uint32, uint32))&Perl__getexpmodifierbycharid); package.add("getexpmodifierbycharid", (double(*)(uint32, uint32))&Perl__getexpmodifierbycharid);
package.add("getexpmodifierbycharid", (double(*)(uint32, uint32, int16))&Perl__getexpmodifierbycharid); package.add("getexpmodifierbycharid", (double(*)(uint32, uint32, int16))&Perl__getexpmodifierbycharid);
@ -5270,6 +5954,7 @@ void perl_register_quest()
package.add("getlanguagename", &Perl__getlanguagename); package.add("getlanguagename", &Perl__getlanguagename);
package.add("getldonthemename", &Perl__getldonthemename); package.add("getldonthemename", &Perl__getldonthemename);
package.add("getnpcnamebyid", &Perl__getnpcnamebyid); package.add("getnpcnamebyid", &Perl__getnpcnamebyid);
package.add("get_rule", &Perl__get_rule);
package.add("get_spawn_condition", (int(*)(const char*, uint16))&Perl__get_spawn_condition); package.add("get_spawn_condition", (int(*)(const char*, uint16))&Perl__get_spawn_condition);
package.add("get_spawn_condition", (int(*)(const char*, uint32, uint16))&Perl__get_spawn_condition); package.add("get_spawn_condition", (int(*)(const char*, uint32, uint16))&Perl__get_spawn_condition);
package.add("getcharnamebyid", &Perl__getcharnamebyid); package.add("getcharnamebyid", &Perl__getcharnamebyid);
@ -5424,12 +6109,15 @@ void perl_register_quest()
package.add("send_channel_message", (void(*)(Client*, const char*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message); package.add("send_channel_message", (void(*)(Client*, const char*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message);
package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double))&Perl__setaaexpmodifierbycharid); package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double))&Perl__setaaexpmodifierbycharid);
package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double, int16))&Perl__setaaexpmodifierbycharid); package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double, int16))&Perl__setaaexpmodifierbycharid);
package.add("set_data", (void(*)(std::string, std::string))&Perl__set_data);
package.add("set_data", (void(*)(std::string, std::string, std::string))&Perl__set_data);
package.add("set_proximity", (void(*)(float, float, float, float))&Perl__set_proximity); package.add("set_proximity", (void(*)(float, float, float, float))&Perl__set_proximity);
package.add("set_proximity", (void(*)(float, float, float, float, float, float))&Perl__set_proximity); package.add("set_proximity", (void(*)(float, float, float, float, float, float))&Perl__set_proximity);
package.add("set_proximity", (void(*)(float, float, float, float, float, float, bool))&Perl__set_proximity); package.add("set_proximity", (void(*)(float, float, float, float, float, float, bool))&Perl__set_proximity);
package.add("set_proximity_range", (void(*)(float, float))&Perl__set_proximity_range); package.add("set_proximity_range", (void(*)(float, float))&Perl__set_proximity_range);
package.add("set_proximity_range", (void(*)(float, float, float))&Perl__set_proximity_range); package.add("set_proximity_range", (void(*)(float, float, float))&Perl__set_proximity_range);
package.add("set_proximity_range", (void(*)(float, float, float, bool))&Perl__set_proximity_range); package.add("set_proximity_range", (void(*)(float, float, float, bool))&Perl__set_proximity_range);
package.add("set_rule", &Perl__set_rule);
package.add("set_zone_flag", &Perl__set_zone_flag); package.add("set_zone_flag", &Perl__set_zone_flag);
package.add("setallskill", &Perl__setallskill); package.add("setallskill", &Perl__setallskill);
package.add("setanim", &Perl__setanim); package.add("setanim", &Perl__setanim);

View File

@ -21,7 +21,7 @@ void command_castspell(Client *c, const Seperator *sep)
else { else {
uint16 spell_id = Strings::ToUnsignedInt(sep->arg[1]); uint16 spell_id = Strings::ToUnsignedInt(sep->arg[1]);
if (CastRestrictedSpell(spell_id) && c->Admin() < commandCastSpecials) { if (IsCastRestrictedSpell(spell_id) && c->Admin() < commandCastSpecials) {
c->Message(Chat::Red, "Unable to cast spell."); c->Message(Chat::Red, "Unable to cast spell.");
} }
else if (spell_id >= SPDAT_RECORDS) { else if (spell_id >= SPDAT_RECORDS) {

View File

@ -4416,6 +4416,607 @@ void lua_send_channel_message(Lua_Client from, const char* to, uint8 channel_num
quest_manager.SendChannelMessage(from, to, channel_number, guild_id, language_id, language_skill, message); quest_manager.SendChannelMessage(from, to, channel_number, guild_id, language_id, language_skill, message);
} }
uint8 lua_get_spell_level(uint16 spell_id, uint8 class_id)
{
const auto spell_level = GetSpellLevel(spell_id, class_id);
return spell_level > RuleI(Character, MaxLevel) ? UINT8_MAX : spell_level;
}
bool lua_is_effect_in_spell(uint16 spell_id, int effect_id)
{
return IsEffectInSpell(spell_id, effect_id);
}
bool lua_is_beneficial_spell(uint16 spell_id)
{
return IsBeneficialSpell(spell_id);
}
bool lua_is_detrimental_spell(uint16 spell_id)
{
return IsDetrimentalSpell(spell_id);
}
bool lua_is_targetable_ae_spell(uint16 spell_id)
{
return IsTargetableAESpell(spell_id);
}
bool lua_is_sacrifice_spell(uint16 spell_id)
{
return IsSacrificeSpell(spell_id);
}
bool lua_is_lifetap_spell(uint16 spell_id)
{
return IsLifetapSpell(spell_id);
}
bool lua_is_mesmerize_spell(uint16 spell_id)
{
return IsMesmerizeSpell(spell_id);
}
bool lua_is_stun_spell(uint16 spell_id)
{
return IsStunSpell(spell_id);
}
bool lua_is_summon_spell(uint16 spell_id)
{
return IsSummonSpell(spell_id);
}
bool lua_is_damage_spell(uint16 spell_id)
{
return IsDamageSpell(spell_id);
}
bool lua_is_fear_spell(uint16 spell_id)
{
return IsFearSpell(spell_id);
}
bool lua_is_cure_spell(uint16 spell_id)
{
return IsCureSpell(spell_id);
}
bool lua_is_haste_spell(uint16 spell_id)
{
return IsHasteSpell(spell_id);
}
bool lua_is_harmony_spell(uint16 spell_id)
{
return IsHarmonySpell(spell_id);
}
bool lua_is_percental_heal_spell(uint16 spell_id)
{
return IsPercentalHealSpell(spell_id);
}
bool lua_is_group_only_spell(uint16 spell_id)
{
return IsGroupOnlySpell(spell_id);
}
bool lua_is_invisible_spell(uint16 spell_id)
{
return IsInvisibleSpell(spell_id);
}
bool lua_is_invulnerability_spell(uint16 spell_id)
{
return IsInvulnerabilitySpell(spell_id);
}
bool lua_is_complete_heal_duration_spell(uint16 spell_id)
{
return IsCompleteHealDurationSpell(spell_id);
}
bool lua_is_poison_counter_spell(uint16 spell_id)
{
return IsPoisonCounterSpell(spell_id);
}
bool lua_is_disease_counter_spell(uint16 spell_id)
{
return IsDiseaseCounterSpell(spell_id);
}
bool lua_is_summon_item_spell(uint16 spell_id)
{
return IsSummonItemSpell(spell_id);
}
bool lua_is_summon_skeleton_spell(uint16 spell_id)
{
return IsSummonSkeletonSpell(spell_id);
}
bool lua_is_summon_pet_spell(uint16 spell_id)
{
return IsSummonPetSpell(spell_id);
}
bool lua_is_pet_spell(uint16 spell_id)
{
return IsPetSpell(spell_id);
}
bool lua_is_summon_pc_spell(uint16 spell_id)
{
return IsSummonPCSpell(spell_id);
}
bool lua_is_charm_spell(uint16 spell_id)
{
return IsCharmSpell(spell_id);
}
bool lua_is_blind_spell(uint16 spell_id)
{
return IsBlindSpell(spell_id);
}
bool lua_is_health_spell(uint16 spell_id)
{
return IsHealthSpell(spell_id);
}
bool lua_is_cast_time_reduction_spell(uint16 spell_id)
{
return IsCastTimeReductionSpell(spell_id);
}
bool lua_is_increase_duration_spell(uint16 spell_id)
{
return IsIncreaseDurationSpell(spell_id);
}
bool lua_is_mana_cost_reduction_spell(uint16 spell_id)
{
return IsManaCostReductionSpell(spell_id);
}
bool lua_is_increase_range_spell(uint16 spell_id)
{
return IsIncreaseRangeSpell(spell_id);
}
bool lua_is_improved_healing_spell(uint16 spell_id)
{
return IsImprovedHealingSpell(spell_id);
}
bool lua_is_improved_damage_spell(uint16 spell_id)
{
return IsImprovedDamageSpell(spell_id);
}
bool lua_is_ae_duration_spell(uint16 spell_id)
{
return IsAEDurationSpell(spell_id);
}
bool lua_is_pure_nuke_spell(uint16 spell_id)
{
return IsPureNukeSpell(spell_id);
}
bool lua_is_ae_nuke_spell(uint16 spell_id)
{
return IsAENukeSpell(spell_id);
}
bool lua_is_pbae_nuke_spell(uint16 spell_id)
{
return IsPBAENukeSpell(spell_id);
}
bool lua_is_ae_rain_nuke_spell(uint16 spell_id)
{
return IsAERainNukeSpell(spell_id);
}
bool lua_is_partial_resistable_spell(uint16 spell_id)
{
return IsPartialResistableSpell(spell_id);
}
bool lua_is_resistable_spell(uint16 spell_id)
{
return IsResistableSpell(spell_id);
}
bool lua_is_group_spell(uint16 spell_id)
{
return IsGroupSpell(spell_id);
}
bool lua_is_tgb_compatible_spell(uint16 spell_id)
{
return IsTGBCompatibleSpell(spell_id);
}
bool lua_is_bard_song(uint16 spell_id)
{
return IsBardSong(spell_id);
}
bool lua_is_pulsing_bard_song(uint16 spell_id)
{
return IsPulsingBardSong(spell_id);
}
bool lua_is_discipline_buff(uint16 spell_id)
{
return IsDisciplineBuff(spell_id);
}
bool lua_is_discipline(uint16 spell_id)
{
return IsDiscipline(spell_id);
}
bool lua_is_combat_skill(uint16 spell_id)
{
return IsCombatSkill(spell_id);
}
bool lua_is_resurrection_effects(uint16 spell_id)
{
return IsResurrectionEffects(spell_id);
}
bool lua_is_rune_spell(uint16 spell_id)
{
return IsRuneSpell(spell_id);
}
bool lua_is_magic_rune_spell(uint16 spell_id)
{
return IsMagicRuneSpell(spell_id);
}
bool lua_is_mana_tap_spell(uint16 spell_id)
{
return IsManaTapSpell(spell_id);
}
bool lua_is_alliance_spell(uint16 spell_id)
{
return IsAllianceSpell(spell_id);
}
bool lua_is_death_save_spell(uint16 spell_id)
{
return IsDeathSaveSpell(spell_id);
}
bool lua_is_partial_death_save_spell(uint16 spell_id)
{
return IsPartialDeathSaveSpell(spell_id);
}
bool lua_is_full_death_save_spell(uint16 spell_id)
{
return IsFullDeathSaveSpell(spell_id);
}
bool lua_is_shadow_step_spell(uint16 spell_id)
{
return IsShadowStepSpell(spell_id);
}
bool lua_is_succor_spell(uint16 spell_id)
{
return IsSuccorSpell(spell_id);
}
bool lua_is_teleport_spell(uint16 spell_id)
{
return IsTeleportSpell(spell_id);
}
bool lua_is_translocate_spell(uint16 spell_id)
{
return IsTranslocateSpell(spell_id);
}
bool lua_is_gate_spell(uint16 spell_id)
{
return IsGateSpell(spell_id);
}
bool lua_is_illusion_spell(uint16 spell_id)
{
return IsIllusionSpell(spell_id);
}
bool lua_is_ldon_object_spell(uint16 spell_id)
{
return IsLDoNObjectSpell(spell_id);
}
bool lua_is_heal_over_time_spell(uint16 spell_id)
{
return IsHealOverTimeSpell(spell_id);
}
bool lua_is_complete_heal_spell(uint16 spell_id)
{
return IsCompleteHealSpell(spell_id);
}
bool lua_is_fast_heal_spell(uint16 spell_id)
{
return IsFastHealSpell(spell_id);
}
bool lua_is_very_fast_heal_spell(uint16 spell_id)
{
return IsVeryFastHealSpell(spell_id);
}
bool lua_is_regular_single_target_heal_spell(uint16 spell_id)
{
return IsRegularSingleTargetHealSpell(spell_id);
}
bool lua_is_regular_group_heal_spell(uint16 spell_id)
{
return IsRegularGroupHealSpell(spell_id);
}
bool lua_is_group_complete_heal_spell(uint16 spell_id)
{
return IsGroupCompleteHealSpell(spell_id);
}
bool lua_is_group_heal_over_time_spell(uint16 spell_id)
{
return IsGroupHealOverTimeSpell(spell_id);
}
bool lua_is_debuff_spell(uint16 spell_id)
{
return IsDebuffSpell(spell_id);
}
bool lua_is_resist_debuff_spell(uint16 spell_id)
{
return IsResistDebuffSpell(spell_id);
}
bool lua_is_self_conversion_spell(uint16 spell_id)
{
return IsSelfConversionSpell(spell_id);
}
bool lua_is_buff_spell(uint16 spell_id)
{
return IsBuffSpell(spell_id);
}
bool lua_is_persist_death_spell(uint16 spell_id)
{
return IsPersistDeathSpell(spell_id);
}
bool lua_is_suspendable_spell(uint16 spell_id)
{
return IsSuspendableSpell(spell_id);
}
bool lua_is_cast_on_fade_duration_spell(uint16 spell_id)
{
return IsCastOnFadeDurationSpell(spell_id);
}
bool lua_is_distance_modifier_spell(uint16 spell_id)
{
return IsDistanceModifierSpell(spell_id);
}
bool lua_is_rest_allowed_spell(uint16 spell_id)
{
return IsRestAllowedSpell(spell_id);
}
bool lua_is_no_detrimental_spell_aggro_spell(uint16 spell_id)
{
return IsNoDetrimentalSpellAggroSpell(spell_id);
}
bool lua_is_stackable_dot(uint16 spell_id)
{
return IsStackableDOT(spell_id);
}
bool lua_is_short_duration_buff(uint16 spell_id)
{
return IsShortDurationBuff(spell_id);
}
bool lua_is_target_required_for_spell(uint16 spell_id)
{
return IsTargetRequiredForSpell(spell_id);
}
bool lua_is_virus_spell(uint16 spell_id)
{
return IsVirusSpell(spell_id);
}
bool lua_is_valid_spell(uint16 spell_id)
{
return IsValidSpell(spell_id);
}
bool lua_is_effect_ignored_in_stacking(int effect_id)
{
return IsEffectIgnoredInStacking(effect_id);
}
bool lua_is_focus_limit(int effect_id)
{
return IsFocusLimit(effect_id);
}
bool lua_is_bard_only_stack_effect(int effect_id)
{
return IsBardOnlyStackEffect(effect_id);
}
bool lua_is_cast_while_invisible_spell(uint16 spell_id)
{
return IsCastWhileInvisibleSpell(spell_id);
}
bool lua_is_cast_restricted_spell(uint16 spell_id)
{
return IsCastRestrictedSpell(spell_id);
}
bool lua_is_cast_not_standing_spell(uint16 spell_id)
{
return IsCastNotStandingSpell(spell_id);
}
bool lua_is_instrument_modifier_applied_to_spell_effect(uint16 spell_id, int effect_id)
{
return IsInstrumentModifierAppliedToSpellEffect(spell_id, effect_id);
}
bool lua_is_blank_spell_effect(uint16 spell_id, int effect_index)
{
return IsBlankSpellEffect(spell_id, effect_index);
}
uint16 lua_get_spell_trigger_spell_id(uint16 spell_id, int effect_id)
{
return GetSpellTriggerSpellID(spell_id, effect_id);
}
uint8 lua_get_spell_minimum_level(uint16 spell_id)
{
return GetSpellMinimumLevel(spell_id);
}
int lua_get_spell_resist_type(uint16 spell_id)
{
return GetSpellResistType(spell_id);
}
int lua_get_spell_target_type(uint16 spell_id)
{
return GetSpellTargetType(spell_id);
}
int lua_get_spell_partial_melee_rune_reduction(uint16 spell_id)
{
return GetSpellPartialMeleeRuneReduction(spell_id);
}
int lua_get_spell_partial_magic_rune_reduction(uint16 spell_id)
{
return GetSpellPartialMagicRuneReduction(spell_id);
}
int lua_get_spell_partial_melee_rune_amount(uint16 spell_id)
{
return GetSpellPartialMeleeRuneAmount(spell_id);
}
int lua_get_spell_partial_magic_rune_amount(uint16 spell_id)
{
return GetSpellPartialMagicRuneAmount(spell_id);
}
int lua_get_spell_viral_minimum_spread_time(uint16 spell_id)
{
return GetSpellViralMinimumSpreadTime(spell_id);
}
int lua_get_spell_viral_maximum_spread_time(uint16 spell_id)
{
return GetSpellViralMaximumSpreadTime(spell_id);
}
int lua_get_spell_viral_spread_range(uint16 spell_id)
{
return GetSpellViralSpreadRange(spell_id);
}
int lua_get_spell_proc_limit_timer(uint16 spell_id, int proc_type)
{
return GetSpellProcLimitTimer(spell_id, proc_type);
}
int lua_get_spell_effect_description_number(uint16 spell_id)
{
return GetSpellEffectDescriptionNumber(spell_id);
}
int lua_get_spell_furious_bash(uint16 spell_id)
{
return GetSpellFuriousBash(spell_id);
}
bool lua_is_spell_usable_in_this_zone_type(uint16 spell_id)
{
return IsSpellUsableInThisZoneType(spell_id, zone->GetZoneType());
}
bool lua_is_spell_usable_in_this_zone_type(uint16 spell_id, uint8 zone_type)
{
return IsSpellUsableInThisZoneType(spell_id, zone_type);
}
int lua_get_spell_effect_index(uint16 spell_id, int effect_id)
{
return GetSpellEffectIndex(spell_id, effect_id);
}
int lua_calculate_poison_counters(uint16 spell_id)
{
return CalculatePoisonCounters(spell_id);
}
int lua_calculate_disease_counters(uint16 spell_id)
{
return CalculateDiseaseCounters(spell_id);
}
int lua_calculate_curse_counters(uint16 spell_id)
{
return CalculateCurseCounters(spell_id);
}
int lua_calculate_corruption_counters(uint16 spell_id)
{
return CalculateCorruptionCounters(spell_id);
}
int lua_calculate_counters(uint16 spell_id)
{
return CalculateCounters(spell_id);
}
int8 lua_get_spell_resurrection_sickness_check(uint16 spell_id_one, uint16 spell_id_two)
{
return GetSpellResurrectionSicknessCheck(spell_id_one, spell_id_two);
}
int lua_get_spell_nimbus_effect(uint16 spell_id)
{
return GetSpellNimbusEffect(spell_id);
}
#define LuaCreateNPCParse(name, c_type, default_value) do { \ #define LuaCreateNPCParse(name, c_type, default_value) do { \
cur = table[#name]; \ cur = table[#name]; \
if(luabind::type(cur) != LUA_TNIL) { \ if(luabind::type(cur) != LUA_TNIL) { \
@ -5069,6 +5670,126 @@ luabind::scope lua_register_general() {
luabind::def("send_channel_message", (void(*)(uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), luabind::def("send_channel_message", (void(*)(uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message),
luabind::def("send_channel_message", (void(*)(Lua_Client,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), luabind::def("send_channel_message", (void(*)(Lua_Client,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message),
luabind::def("send_channel_message", (void(*)(Lua_Client,const char*,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message), luabind::def("send_channel_message", (void(*)(Lua_Client,const char*,uint8,uint32,uint8,uint8,const char*))&lua_send_channel_message),
luabind::def("get_spell_level", &lua_get_spell_level),
luabind::def("is_effect_in_spell", &lua_is_effect_in_spell),
luabind::def("is_beneficial_spell", &lua_is_beneficial_spell),
luabind::def("is_detrimental_spell", &lua_is_detrimental_spell),
luabind::def("is_targetable_ae_spell", &lua_is_targetable_ae_spell),
luabind::def("is_sacrifice_spell", &lua_is_sacrifice_spell),
luabind::def("is_lifetap_spell", &lua_is_lifetap_spell),
luabind::def("is_mesmerize_spell", &lua_is_mesmerize_spell),
luabind::def("is_stun_spell", &lua_is_stun_spell),
luabind::def("is_summon_spell", &lua_is_summon_spell),
luabind::def("is_damage_spell", &lua_is_damage_spell),
luabind::def("is_fear_spell", &lua_is_fear_spell),
luabind::def("is_cure_spell", &lua_is_cure_spell),
luabind::def("is_haste_spell", &lua_is_haste_spell),
luabind::def("is_harmony_spell", &lua_is_harmony_spell),
luabind::def("is_percental_heal_spell", &lua_is_percental_heal_spell),
luabind::def("is_group_only_spell", &lua_is_group_only_spell),
luabind::def("is_invisible_spell", &lua_is_invisible_spell),
luabind::def("is_invulnerability_spell", &lua_is_invulnerability_spell),
luabind::def("is_complete_heal_duration_spell", &lua_is_complete_heal_duration_spell),
luabind::def("is_poison_counter_spell", &lua_is_poison_counter_spell),
luabind::def("is_disease_counter_spell", &lua_is_disease_counter_spell),
luabind::def("is_summon_item_spell", &lua_is_summon_item_spell),
luabind::def("is_summon_skeleton_spell", &lua_is_summon_skeleton_spell),
luabind::def("is_summon_pet_spell", &lua_is_summon_pet_spell),
luabind::def("is_pet_spell", &lua_is_pet_spell),
luabind::def("is_summon_pc_spell", &lua_is_summon_pc_spell),
luabind::def("is_charm_spell", &lua_is_charm_spell),
luabind::def("is_blind_spell", &lua_is_blind_spell),
luabind::def("is_health_spell", &lua_is_health_spell),
luabind::def("is_cast_time_reduction_spell", &lua_is_cast_time_reduction_spell),
luabind::def("is_increase_duration_spell", &lua_is_increase_duration_spell),
luabind::def("is_mana_cost_reduction_spell", &lua_is_mana_cost_reduction_spell),
luabind::def("is_increase_range_spell", &lua_is_increase_range_spell),
luabind::def("is_improved_healing_spell", &lua_is_improved_healing_spell),
luabind::def("is_improved_damage_spell", &lua_is_improved_damage_spell),
luabind::def("is_ae_duration_spell", &lua_is_ae_duration_spell),
luabind::def("is_pure_nuke_spell", &lua_is_pure_nuke_spell),
luabind::def("is_ae_nuke_spell", &lua_is_ae_nuke_spell),
luabind::def("is_pbae_nuke_spell", &lua_is_pbae_nuke_spell),
luabind::def("is_ae_rain_nuke_spell", &lua_is_ae_rain_nuke_spell),
luabind::def("is_partial_resistable_spell", &lua_is_partial_resistable_spell),
luabind::def("is_resistable_spell", &lua_is_resistable_spell),
luabind::def("is_group_spell", &lua_is_group_spell),
luabind::def("is_tgb_compatible_spell", &lua_is_tgb_compatible_spell),
luabind::def("is_bard_song", &lua_is_bard_song),
luabind::def("is_pulsing_bard_song", &lua_is_pulsing_bard_song),
luabind::def("is_discipline_buff", &lua_is_discipline_buff),
luabind::def("is_discipline", &lua_is_discipline),
luabind::def("is_combat_skill", &lua_is_combat_skill),
luabind::def("is_resurrection_effects", &lua_is_resurrection_effects),
luabind::def("is_rune_spell", &lua_is_rune_spell),
luabind::def("is_magic_rune_spell", &lua_is_magic_rune_spell),
luabind::def("is_mana_tap_spell", &lua_is_mana_tap_spell),
luabind::def("is_alliance_spell", &lua_is_alliance_spell),
luabind::def("is_death_save_spell", &lua_is_death_save_spell),
luabind::def("is_partial_death_save_spell", &lua_is_partial_death_save_spell),
luabind::def("is_full_death_save_spell", &lua_is_full_death_save_spell),
luabind::def("is_shadow_step_spell", &lua_is_shadow_step_spell),
luabind::def("is_succor_spell", &lua_is_succor_spell),
luabind::def("is_teleport_spell", &lua_is_teleport_spell),
luabind::def("is_translocate_spell", &lua_is_translocate_spell),
luabind::def("is_gate_spell", &lua_is_gate_spell),
luabind::def("is_illusion_spell", &lua_is_illusion_spell),
luabind::def("is_ldon_object_spell", &lua_is_ldon_object_spell),
luabind::def("is_heal_over_time_spell", &lua_is_heal_over_time_spell),
luabind::def("is_complete_heal_spell", &lua_is_complete_heal_spell),
luabind::def("is_fast_heal_spell", &lua_is_fast_heal_spell),
luabind::def("is_very_fast_heal_spell", &lua_is_very_fast_heal_spell),
luabind::def("is_regular_single_target_heal_spell", &lua_is_regular_single_target_heal_spell),
luabind::def("is_regular_group_heal_spell", &lua_is_regular_group_heal_spell),
luabind::def("is_group_complete_heal_spell", &lua_is_group_complete_heal_spell),
luabind::def("is_group_heal_over_time_spell", &lua_is_group_heal_over_time_spell),
luabind::def("is_debuff_spell", &lua_is_debuff_spell),
luabind::def("is_resist_debuff_spell", &lua_is_resist_debuff_spell),
luabind::def("is_self_conversion_spell", &lua_is_self_conversion_spell),
luabind::def("is_buff_spell", &lua_is_buff_spell),
luabind::def("is_persist_death_spell", &lua_is_persist_death_spell),
luabind::def("is_suspendable_spell", &lua_is_suspendable_spell),
luabind::def("is_cast_on_fade_duration_spell", &lua_is_cast_on_fade_duration_spell),
luabind::def("is_distance_modifier_spell", &lua_is_distance_modifier_spell),
luabind::def("is_rest_allowed_spell", &lua_is_rest_allowed_spell),
luabind::def("is_no_detrimental_spell_aggro_spell", &lua_is_no_detrimental_spell_aggro_spell),
luabind::def("is_stackable_dot", &lua_is_stackable_dot),
luabind::def("is_short_duration_buff", &lua_is_short_duration_buff),
luabind::def("is_target_required_for_spell", &lua_is_target_required_for_spell),
luabind::def("is_virus_spell", &lua_is_virus_spell),
luabind::def("is_valid_spell", &lua_is_valid_spell),
luabind::def("is_effect_ignored_in_stacking", &lua_is_effect_ignored_in_stacking),
luabind::def("is_focus_limit", &lua_is_focus_limit),
luabind::def("is_bard_only_stack_effect", &lua_is_bard_only_stack_effect),
luabind::def("is_cast_while_invisible_spell", &lua_is_cast_while_invisible_spell),
luabind::def("is_cast_restricted_spell", &lua_is_cast_restricted_spell),
luabind::def("is_cast_not_standing_spell", &lua_is_cast_not_standing_spell),
luabind::def("is_instrument_modifier_applied_to_spell_effect", &lua_is_instrument_modifier_applied_to_spell_effect),
luabind::def("is_blank_spell_effect", &lua_is_blank_spell_effect),
luabind::def("get_spell_trigger_spell_id", &lua_get_spell_trigger_spell_id),
luabind::def("get_spell_minimum_level", &lua_get_spell_minimum_level),
luabind::def("get_spell_resist_type", &lua_get_spell_resist_type),
luabind::def("get_spell_target_type", &lua_get_spell_target_type),
luabind::def("get_spell_partial_melee_rune_reduction", &lua_get_spell_partial_melee_rune_reduction),
luabind::def("get_spell_partial_magic_rune_reduction", &lua_get_spell_partial_magic_rune_reduction),
luabind::def("get_spell_partial_melee_rune_amount", &lua_get_spell_partial_melee_rune_amount),
luabind::def("get_spell_partial_magic_rune_amount", &lua_get_spell_partial_magic_rune_amount),
luabind::def("get_spell_viral_minimum_spread_time", &lua_get_spell_viral_minimum_spread_time),
luabind::def("get_spell_viral_maximum_spread_time", &lua_get_spell_viral_maximum_spread_time),
luabind::def("get_spell_viral_spread_range", &lua_get_spell_viral_spread_range),
luabind::def("get_spell_proc_limit_timer", &lua_get_spell_proc_limit_timer),
luabind::def("get_spell_effect_description_number", &lua_get_spell_effect_description_number),
luabind::def("get_spell_furious_bash", &lua_get_spell_furious_bash),
luabind::def("is_spell_usable_in_this_zone_type", (bool(*)(uint16))&lua_is_spell_usable_in_this_zone_type),
luabind::def("is_spell_usable_in_this_zone_type", (bool(*)(uint16,uint8))&lua_is_spell_usable_in_this_zone_type),
luabind::def("get_spell_effect_index", &lua_get_spell_effect_index),
luabind::def("calculate_poison_counters", &lua_calculate_poison_counters),
luabind::def("calculate_disease_counters", &lua_calculate_disease_counters),
luabind::def("calculate_curse_counters", &lua_calculate_curse_counters),
luabind::def("calculate_corruption_counters", &lua_calculate_corruption_counters),
luabind::def("calculate_counters", &lua_calculate_counters),
luabind::def("get_spell_resurrection_sickness_check", &lua_get_spell_resurrection_sickness_check),
luabind::def("get_spell_nimbus_effect", &lua_get_spell_nimbus_effect),
/* /*
Cross Zone Cross Zone
*/ */

View File

@ -770,7 +770,7 @@ void Merc::CalcRestState() {
for (unsigned int j = 0; j < buff_count; j++) { for (unsigned int j = 0; j < buff_count; j++) {
if(IsValidSpell(buffs[j].spellid)) { if(IsValidSpell(buffs[j].spellid)) {
if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0)) if(IsDetrimentalSpell(buffs[j].spellid) && (buffs[j].ticsremaining > 0))
if(!DetrimentalSpellAllowsRest(buffs[j].spellid)) if(!IsRestAllowedSpell(buffs[j].spellid))
return; return;
} }
} }
@ -4299,7 +4299,7 @@ Merc* Merc::LoadMerc(Client *c, MercTemplate* merc_template, uint32 merchant_id,
if(merc_template) if(merc_template)
{ {
//TODO: Maybe add a way of updating client merc stats in a seperate function? like, for example, on leveling up. //TODO: Maybe add a way of updating client merc stats in a seperate function? like, for example, on leveling up.
const NPCType* npc_type_to_copy = nullptr; const NPCType* npc_type_to_copy = nullptr;
if (c) { if (c) {
npc_type_to_copy = content_db.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel()); npc_type_to_copy = content_db.GetMercType(merc_template->MercNPCID, merc_template->RaceID, c->GetLevel());

View File

@ -4395,7 +4395,7 @@ int Mob::CountDispellableBuffs()
if(buffs[x].counters) if(buffs[x].counters)
continue; continue;
if(spells[buffs[x].spellid].good_effect == 0) if(spells[buffs[x].spellid].good_effect == DETRIMENTAL_EFFECT)
continue; continue;
if(IsValidSpell(buffs[x].spellid) && spells[buffs[x].spellid].buff_duration_formula != DF_Permanent) { if(IsValidSpell(buffs[x].spellid) && spells[buffs[x].spellid].buff_duration_formula != DF_Permanent) {

View File

@ -653,7 +653,7 @@ void Client::AI_SpellCast()
slot_to_use = static_cast<EQ::spells::CastingSlot>(slots[idx]); slot_to_use = static_cast<EQ::spells::CastingSlot>(slots[idx]);
} }
if(IsMezSpell(spell_to_cast) || IsFearSpell(spell_to_cast)) if(IsMesmerizeSpell(spell_to_cast) || IsFearSpell(spell_to_cast))
{ {
Mob *tar = entity_list.GetTargetForMez(this); Mob *tar = entity_list.GetTargetForMez(this);
if(!tar) if(!tar)

View File

@ -1186,7 +1186,7 @@ bool NPC::DatabaseCastAccepted(int spell_id) {
break; break;
} }
default: default:
if(spells[spell_id].good_effect == 1 && !(spells[spell_id].buff_duration == 0 && GetHPRatio() == 100) && !IsEngaged()) if(spells[spell_id].good_effect == BENEFICIAL_EFFECT && !(spells[spell_id].buff_duration == 0 && GetHPRatio() == 100) && !IsEngaged())
return true; return true;
return false; return false;
} }

View File

@ -538,13 +538,13 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) {
case SE_WeaponProc: case SE_WeaponProc:
// We need to reapply buff based procs // We need to reapply buff based procs
// We need to do this here so suspended pets also regain their procs. // We need to do this here so suspended pets also regain their procs.
AddProcToWeapon(GetProcID(buffs[j1].spellid,x1), false, 100+spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC)); AddProcToWeapon(GetProcID(buffs[j1].spellid,x1), false, 100+spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, buffs[j1].casterlevel, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::MELEE_PROC));
break; break;
case SE_DefensiveProc: case SE_DefensiveProc:
AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC)); AddDefensiveProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::DEFENSIVE_PROC));
break; break;
case SE_RangedProc: case SE_RangedProc:
AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC)); AddRangedProc(GetProcID(buffs[j1].spellid, x1), 100 + spells[buffs[j1].spellid].limit_value[x1], buffs[j1].spellid, GetSpellProcLimitTimer(buffs[j1].spellid, ProcType::RANGED_PROC));
break; break;
case SE_Charm: case SE_Charm:
case SE_Rune: case SE_Rune:

View File

@ -241,7 +241,7 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int32 bas
hate += item->GetItem()->AC; hate += item->GetItem()->AC;
} }
const EQ::ItemData *itm = item->GetItem(); const EQ::ItemData *itm = item->GetItem();
auto fbash = GetFuriousBash(itm->Focus.Effect); auto fbash = GetSpellFuriousBash(itm->Focus.Effect);
hate = hate * (100 + fbash) / 100; hate = hate * (100 + fbash) / 100;
if (fbash) if (fbash)
MessageString(Chat::FocusEffect, GLOWS_RED, itm->Name); MessageString(Chat::FocusEffect, GLOWS_RED, itm->Name);
@ -2347,7 +2347,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, int32 weapon_damage, EQ::skills::Ski
hate += item->GetItem()->AC; hate += item->GetItem()->AC;
} }
const EQ::ItemData *itm = item->GetItem(); const EQ::ItemData *itm = item->GetItem();
hate = hate * (100 + GetFuriousBash(itm->Focus.Effect)) / 100; hate = hate * (100 + GetSpellFuriousBash(itm->Focus.Effect)) / 100;
} }
} }

View File

@ -212,11 +212,11 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
viral_timer.Start(1000); viral_timer.Start(1000);
} }
buffs[buffslot].virus_spread_time = zone->random.Int(GetViralMinSpreadTime(spell_id), GetViralMaxSpreadTime(spell_id)); buffs[buffslot].virus_spread_time = zone->random.Int(GetSpellViralMinimumSpreadTime(spell_id), GetSpellViralMaximumSpreadTime(spell_id));
} }
if (!IsPowerDistModSpell(spell_id)) if (!IsDistanceModifierSpell(spell_id))
SetSpellPowerDistanceMod(0); SetSpellPowerDistanceMod(0);
bool spell_trigger_cast_complete = false; //Used with SE_Spell_Trigger and SE_Chance_Best_in_Spell_Grp, true when spell has been triggered. bool spell_trigger_cast_complete = false; //Used with SE_Spell_Trigger and SE_Chance_Best_in_Spell_Grp, true when spell has been triggered.
@ -1331,7 +1331,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
snprintf(effect_desc, _EDLEN, "Blind: %+i", effect_value); snprintf(effect_desc, _EDLEN, "Blind: %+i", effect_value);
#endif #endif
// 'cure blind' // 'cure blind'
if (BeneficialSpell(spell_id) && spells[spell_id].buff_duration == 0) { if (IsBeneficialSpell(spell_id) && spells[spell_id].buff_duration == 0) {
int buff_count = GetMaxBuffSlots(); int buff_count = GetMaxBuffSlots();
for (int slot = 0; slot < buff_count; slot++) { for (int slot = 0; slot < buff_count; slot++) {
if (IsValidSpell(buffs[slot].spellid) && IsEffectInSpell(buffs[slot].spellid, SE_Blind)) { if (IsValidSpell(buffs[slot].spellid) && IsEffectInSpell(buffs[slot].spellid, SE_Blind)) {
@ -1873,7 +1873,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
#ifdef SPELL_EFFECT_SPAM #ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Weapon Proc: %s (id %d)", spells[effect_value].name, procid); snprintf(effect_desc, _EDLEN, "Weapon Proc: %s (id %d)", spells[effect_value].name, procid);
#endif #endif
AddProcToWeapon(procid, false, 100 + spells[spell_id].limit_value[i], spell_id, caster_level, GetProcLimitTimer(spell_id, ProcType::MELEE_PROC)); AddProcToWeapon(procid, false, 100 + spells[spell_id].limit_value[i], spell_id, caster_level, GetSpellProcLimitTimer(spell_id, ProcType::MELEE_PROC));
break; break;
} }
@ -1883,7 +1883,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
#ifdef SPELL_EFFECT_SPAM #ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Ranged Proc: %+i", effect_value); snprintf(effect_desc, _EDLEN, "Ranged Proc: %+i", effect_value);
#endif #endif
AddRangedProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetProcLimitTimer(spell_id, ProcType::RANGED_PROC)); AddRangedProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetSpellProcLimitTimer(spell_id, ProcType::RANGED_PROC));
break; break;
} }
@ -1893,7 +1893,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
#ifdef SPELL_EFFECT_SPAM #ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Defensive Proc: %s (id %d)", spells[effect_value].name, procid); snprintf(effect_desc, _EDLEN, "Defensive Proc: %s (id %d)", spells[effect_value].name, procid);
#endif #endif
AddDefensiveProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetProcLimitTimer(spell_id, ProcType::DEFENSIVE_PROC)); AddDefensiveProc(procid, 100 + spells[spell_id].limit_value[i], spell_id, GetSpellProcLimitTimer(spell_id, ProcType::DEFENSIVE_PROC));
break; break;
} }
@ -3400,7 +3400,7 @@ int64 Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level
// this doesn't actually need to be a song to get mods, just the right skill // this doesn't actually need to be a song to get mods, just the right skill
if (EQ::skills::IsBardInstrumentSkill(spells[spell_id].skill) if (EQ::skills::IsBardInstrumentSkill(spells[spell_id].skill)
&& IsInstrumentModAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) { && IsInstrumentModifierAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) {
oval = effect_value; oval = effect_value;
effect_value = effect_value * static_cast<int>(instrument_mod) / 10; effect_value = effect_value * static_cast<int>(instrument_mod) / 10;
LogSpells("Effect value [{}] altered with bard modifier of [{}] to yeild [{}]", LogSpells("Effect value [{}] altered with bard modifier of [{}] to yeild [{}]",
@ -3959,7 +3959,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster)
} }
case SE_WipeHateList: { case SE_WipeHateList: {
if (IsMezSpell(buff.spellid)) { if (IsMesmerizeSpell(buff.spellid)) {
break; break;
} }
@ -4054,7 +4054,7 @@ void Mob::DoBuffTic(const Buffs_Struct &buff, int slot, Mob *caster)
case SE_InterruptCasting: { case SE_InterruptCasting: {
if (IsCasting()) { if (IsCasting()) {
const auto &spell = spells[casting_spell_id]; const auto &spell = spells[casting_spell_id];
if (!IgnoreCastingRestriction(spell.id) && zone->random.Roll(spells[buff.spellid].base_value[i])) { if (!IsCastNotStandingSpell(spell.id) && zone->random.Roll(spells[buff.spellid].base_value[i])) {
InterruptSpell(); InterruptSpell();
} }
} }
@ -4363,7 +4363,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses)
for (unsigned int j = 0; j < buff_count; j++) { for (unsigned int j = 0; j < buff_count; j++) {
if (IsValidSpell(tar->GetBuffs()[j].spellid)) { if (IsValidSpell(tar->GetBuffs()[j].spellid)) {
auto spell = spells[tar->GetBuffs()[j].spellid]; auto spell = spells[tar->GetBuffs()[j].spellid];
if (spell.good_effect == 0 && IsEffectInSpell(spell.id, SE_CurrentHP) && tar->GetBuffs()[j].casterid == GetID()) { if (spell.good_effect == DETRIMENTAL_EFFECT && IsEffectInSpell(spell.id, SE_CurrentHP) && tar->GetBuffs()[j].casterid == GetID()) {
tar->BuffFadeBySpellID(spell.id); tar->BuffFadeBySpellID(spell.id);
} }
} }
@ -4377,7 +4377,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses)
for (unsigned int j = 0; j < buff_count; j++) { for (unsigned int j = 0; j < buff_count; j++) {
if (IsValidSpell(GetBuffs()[j].spellid )) { if (IsValidSpell(GetBuffs()[j].spellid )) {
auto spell = spells[GetBuffs()[j].spellid]; auto spell = spells[GetBuffs()[j].spellid];
if (spell.good_effect == 0 && IsEffectInSpell(spell.id, SE_CurrentHP)) { if (spell.good_effect == DETRIMENTAL_EFFECT && IsEffectInSpell(spell.id, SE_CurrentHP)) {
BuffFadeBySpellID(spell.id); BuffFadeBySpellID(spell.id);
} }
} }
@ -4785,7 +4785,7 @@ int64 Mob::CalcAAFocus(focusType type, const AA::Rank &rank, uint16 spell_id)
LimitInclude[IncludeExistsSELimitEffect] = true; LimitInclude[IncludeExistsSELimitEffect] = true;
// they use 33 here for all classes ... unsure if the type check is really needed // they use 33 here for all classes ... unsure if the type check is really needed
if (base_value == SE_SummonPet && type == focusReagentCost) { if (base_value == SE_SummonPet && type == focusReagentCost) {
if (IsSummonPetSpell(spell_id) || IsSummonSkeletonSpell(spell_id)) { if (IsPetSpell(spell_id)) {
LimitInclude[IncludeFoundSELimitEffect] = true; LimitInclude[IncludeFoundSELimitEffect] = true;
} }
} }
@ -6262,7 +6262,7 @@ bool Mob::TryTriggerOnCastProc(uint16 focusspellid, uint16 spell_id, uint16 proc
return true; return true;
} }
// Edge cases where proc spell does not require a target such as PBAE, allows proc to still occur even if target potentially dead. Live spells exist with PBAE procs. // Edge cases where proc spell does not require a target such as PBAE, allows proc to still occur even if target potentially dead. Live spells exist with PBAE procs.
else if (!SpellRequiresTarget(proc_spellid)) { else if (!IsTargetRequiredForSpell(proc_spellid)) {
SpellFinished(proc_spellid, this, EQ::spells::CastingSlot::Item, 0, -1, spells[proc_spellid].resist_difficulty); SpellFinished(proc_spellid, this, EQ::spells::CastingSlot::Item, 0, -1, spells[proc_spellid].resist_difficulty);
return true; return true;
} }
@ -9608,7 +9608,7 @@ void Mob::CastSpellOnLand(Mob* caster, int32 spell_id)
void Mob::CalcSpellPowerDistanceMod(uint16 spell_id, float range, Mob* caster) void Mob::CalcSpellPowerDistanceMod(uint16 spell_id, float range, Mob* caster)
{ {
if (IsPowerDistModSpell(spell_id)){ if (IsDistanceModifierSpell(spell_id)){
float distance = 0; float distance = 0;
@ -9959,7 +9959,7 @@ void Mob::VirusEffectProcess()
} }
if (buffs[buffs_i].virus_spread_time <= 0) { if (buffs[buffs_i].virus_spread_time <= 0) {
buffs[buffs_i].virus_spread_time = zone->random.Int(GetViralMinSpreadTime(buffs[buffs_i].spellid), GetViralMaxSpreadTime(buffs[buffs_i].spellid)); buffs[buffs_i].virus_spread_time = zone->random.Int(GetSpellViralMinimumSpreadTime(buffs[buffs_i].spellid), GetSpellViralMaximumSpreadTime(buffs[buffs_i].spellid));
SpreadVirusEffect(buffs[buffs_i].spellid, buffs[buffs_i].casterid, buffs[buffs_i].ticsremaining); SpreadVirusEffect(buffs[buffs_i].spellid, buffs[buffs_i].casterid, buffs[buffs_i].ticsremaining);
stop_timer = false; stop_timer = false;
} }
@ -9982,7 +9982,7 @@ void Mob::SpreadVirusEffect(int32 spell_id, uint32 caster_id, int32 buff_tics_re
std::vector<Mob *> targets_in_range = entity_list.GetTargetsForVirusEffect( std::vector<Mob *> targets_in_range = entity_list.GetTargetsForVirusEffect(
this, this,
caster, caster,
GetViralSpreadRange(spell_id), GetSpellViralSpreadRange(spell_id),
spells[spell_id].pcnpc_only_flag, spells[spell_id].pcnpc_only_flag,
spell_id spell_id
); );

View File

@ -545,7 +545,7 @@ bool Mob::DoCastingChecksOnCaster(int32 spell_id, CastingSlot slot) {
/* /*
Cannot cast if stunned or mezzed, unless spell has 'cast_not_standing' flag. Cannot cast if stunned or mezzed, unless spell has 'cast_not_standing' flag.
*/ */
if ((IsStunned() || IsMezzed()) && !IgnoreCastingRestriction(spell_id)) { if ((IsStunned() || IsMezzed()) && !IsCastNotStandingSpell(spell_id)) {
LogSpells("Spell casting canceled [{}] : can not cast spell when stunned.", spell_id); LogSpells("Spell casting canceled [{}] : can not cast spell when stunned.", spell_id);
return false; return false;
} }
@ -575,7 +575,7 @@ bool Mob::DoCastingChecksOnCaster(int32 spell_id, CastingSlot slot) {
/* /*
Cannot cast under divine aura, unless spell has 'cast_not_standing' flag. Cannot cast under divine aura, unless spell has 'cast_not_standing' flag.
*/ */
if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { if (DivineAura() && !IsCastNotStandingSpell(spell_id)) {
LogSpells("Spell casting canceled [{}] : cannot cast while Divine Aura is in effect.", spell_id); LogSpells("Spell casting canceled [{}] : cannot cast while Divine Aura is in effect.", spell_id);
InterruptSpell(173, 0x121, false); //not sure we need this. InterruptSpell(173, 0x121, false); //not sure we need this.
return false; return false;
@ -873,7 +873,7 @@ bool Mob::DoCastingChecksOnTarget(bool check_on_casting, int32 spell_id, Mob *sp
/* /*
Requires target to be in same group or same raid in order to apply invisible. Requires target to be in same group or same raid in order to apply invisible.
*/ */
if (check_on_casting && RuleB(Spells, InvisRequiresGroup) && IsInvisSpell(spell_id)) { if (check_on_casting && RuleB(Spells, InvisRequiresGroup) && IsInvisibleSpell(spell_id)) {
if (IsClient() && spell_target && spell_target->IsClient()) { if (IsClient() && spell_target && spell_target->IsClient()) {
if (spell_target && spell_target->GetID() != GetID()) { if (spell_target && spell_target->GetID() != GetID()) {
bool cast_failed = true; bool cast_failed = true;
@ -1781,7 +1781,7 @@ bool Mob::DetermineSpellTargets(uint16 spell_id, Mob *&spell_target, Mob *&ae_ce
SpellTargetType targetType = spells[spell_id].target_type; SpellTargetType targetType = spells[spell_id].target_type;
bodyType mob_body = spell_target ? spell_target->GetBodyType() : BT_Humanoid; bodyType mob_body = spell_target ? spell_target->GetBodyType() : BT_Humanoid;
if(IsPlayerIllusionSpell(spell_id) if(IsIllusionSpell(spell_id)
&& spell_target != nullptr // null ptr crash safeguard && spell_target != nullptr // null ptr crash safeguard
&& !spell_target->IsNPC() // still self only if NPC targetted && !spell_target->IsNPC() // still self only if NPC targetted
&& IsClient() && IsClient()
@ -2377,7 +2377,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in
range = spells[spell_id].aoe_range; range = spells[spell_id].aoe_range;
range = GetActSpellRange(spell_id, range); range = GetActSpellRange(spell_id, range);
if(IsClient() && IsPlayerIllusionSpell(spell_id) && (HasProjectIllusion())){ if(IsClient() && IsIllusionSpell(spell_id) && (HasProjectIllusion())){
range = 100; range = 100;
} }
@ -2461,7 +2461,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in
} }
} }
if(IsPlayerIllusionSpell(spell_id) if(IsIllusionSpell(spell_id)
&& IsClient() && IsClient()
&& (HasProjectIllusion())){ && (HasProjectIllusion())){
LogAA("Effect Project Illusion for [{}] on spell id: [{}] was ON", GetName(), spell_id); LogAA("Effect Project Illusion for [{}] on spell id: [{}] was ON", GetName(), spell_id);
@ -2604,7 +2604,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, in
} }
// Set and send the nimbus effect if this spell has one // Set and send the nimbus effect if this spell has one
int NimbusEffect = GetNimbusEffect(spell_id); int NimbusEffect = GetSpellNimbusEffect(spell_id);
if(NimbusEffect) { if(NimbusEffect) {
if(!IsNimbusEffectActive(NimbusEffect)) { if(!IsNimbusEffectActive(NimbusEffect)) {
SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true); SendSpellEffect(NimbusEffect, 500, 0, 1, 3000, true);
@ -2754,7 +2754,7 @@ bool Mob::ApplyBardPulse(int32 spell_id, Mob *spell_target, CastingSlot slot) {
/* /*
If divine aura applied while pulsing, it is not interrupted but does not reapply until DA fades. If divine aura applied while pulsing, it is not interrupted but does not reapply until DA fades.
*/ */
if (DivineAura() && !IgnoreCastingRestriction(spell_id)) { if (DivineAura() && !IsCastNotStandingSpell(spell_id)) {
return true; return true;
} }
/* /*
@ -2931,7 +2931,7 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
return -1; return -1;
} }
if (!IsStackableDot(spellid1) && !IsEffectInSpell(spellid1, SE_ManaBurn)) { // mana burn spells we need to use the stacking command blocks live actually checks those first, we should probably rework to that too if (!IsStackableDOT(spellid1) && !IsEffectInSpell(spellid1, SE_ManaBurn)) { // mana burn spells we need to use the stacking command blocks live actually checks those first, we should probably rework to that too
if (caster_level1 > caster_level2) { // cur buff higher level than new if (caster_level1 > caster_level2) { // cur buff higher level than new
if (IsEffectInSpell(spellid1, SE_ImprovedTaunt)) { if (IsEffectInSpell(spellid1, SE_ImprovedTaunt)) {
LogSpells("SE_ImprovedTaunt level exception, overwriting"); LogSpells("SE_ImprovedTaunt level exception, overwriting");
@ -3005,21 +3005,21 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
if (spellbonuses.BStacker[SBIndex::BUFFSTACKER_EXISTS]) { if (spellbonuses.BStacker[SBIndex::BUFFSTACKER_EXISTS]) {
if ((effect2 == SE_BStacker) && (sp2.effect_id[i] <= spellbonuses.BStacker[SBIndex::BUFFSTACKER_VALUE])) if ((effect2 == SE_BStacker) && (sp2.effect_id[i] <= spellbonuses.BStacker[SBIndex::BUFFSTACKER_VALUE]))
return -1; return -1;
if ((effect2 == SE_AStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_BStacker))) if ((effect2 == SE_AStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_BStacker)))
return -1; return -1;
} }
if (spellbonuses.CStacker[SBIndex::BUFFSTACKER_EXISTS]) { if (spellbonuses.CStacker[SBIndex::BUFFSTACKER_EXISTS]) {
if ((effect2 == SE_CStacker) && (sp2.effect_id[i] <= spellbonuses.CStacker[SBIndex::BUFFSTACKER_VALUE])) if ((effect2 == SE_CStacker) && (sp2.effect_id[i] <= spellbonuses.CStacker[SBIndex::BUFFSTACKER_VALUE]))
return -1; return -1;
if ((effect2 == SE_BStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_CStacker))) if ((effect2 == SE_BStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_CStacker)))
return -1; return -1;
} }
if (spellbonuses.DStacker[SBIndex::BUFFSTACKER_EXISTS]) { if (spellbonuses.DStacker[SBIndex::BUFFSTACKER_EXISTS]) {
if ((effect2 == SE_DStacker) && (sp2.effect_id[i] <= spellbonuses.DStacker[SBIndex::BUFFSTACKER_VALUE])) if ((effect2 == SE_DStacker) && (sp2.effect_id[i] <= spellbonuses.DStacker[SBIndex::BUFFSTACKER_VALUE]))
return -1; return -1;
if ((effect2 == SE_CStacker) && (!IsCastonFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_DStacker))) if ((effect2 == SE_CStacker) && (!IsCastOnFadeDurationSpell(spellid1) && buffs[buffslot].ticsremaining != 1 && IsEffectInSpell(spellid1, SE_DStacker)))
return -1; return -1;
} }
@ -3038,7 +3038,7 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
if(sp1_value < overwrite_below_value) if(sp1_value < overwrite_below_value)
{ {
if (IsResurrectionEffects(spellid1)) { if (IsResurrectionEffects(spellid1)) {
int8 res_effect_check = GetResurrectionSicknessCheck(spellid1, spellid2); int8 res_effect_check = GetSpellResurrectionSicknessCheck(spellid1, spellid2);
if (res_effect_check != 0) { if (res_effect_check != 0) {
return res_effect_check; return res_effect_check;
} }
@ -3169,7 +3169,7 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
sp2_value = 0 - sp2_value; sp2_value = 0 - sp2_value;
if (IsResurrectionEffects(spellid1)) { if (IsResurrectionEffects(spellid1)) {
int8 res_effect_check = GetResurrectionSicknessCheck(spellid1, spellid2); int8 res_effect_check = GetSpellResurrectionSicknessCheck(spellid1, spellid2);
if (res_effect_check != 0) { if (res_effect_check != 0) {
return res_effect_check; return res_effect_check;
} }
@ -3247,7 +3247,7 @@ bool Mob::CheckSpellLevelRestriction(Mob *caster, uint16 spell_id)
} }
if (check_for_restrictions) { if (check_for_restrictions) {
int spell_level = GetMinLevel(spell_id); int spell_level = GetSpellMinimumLevel(spell_id);
// Only check for beneficial buffs // Only check for beneficial buffs
if (IsBuffSpell(spell_id) && IsBeneficialSpell(spell_id)) { if (IsBuffSpell(spell_id) && IsBeneficialSpell(spell_id)) {
@ -3772,7 +3772,7 @@ bool Mob::SpellOnTarget(
if ( if (
(spelltar->GetInvul() && !spelltar->DivineAura()) || (spelltar->GetInvul() && !spelltar->DivineAura()) ||
(spelltar != this && spelltar->DivineAura()) || (spelltar != this && spelltar->DivineAura()) ||
(spelltar == this && spelltar->DivineAura() && !IgnoreCastingRestriction(spell_id)) (spelltar == this && spelltar->DivineAura() && !IsCastNotStandingSpell(spell_id))
) { ) {
LogSpells("Casting spell [{}] on [{}] aborted: they are invulnerable", spell_id, spelltar->GetName()); LogSpells("Casting spell [{}] on [{}] aborted: they are invulnerable", spell_id, spelltar->GetName());
safe_delete(action_packet); safe_delete(action_packet);
@ -3883,7 +3883,7 @@ bool Mob::SpellOnTarget(
} }
if ( if (
(!IsAllianceSpellLine(spell_id) && !IsBeneficialAllowed(spelltar)) || (!IsAllianceSpell(spell_id) && !IsBeneficialAllowed(spelltar)) ||
(IsGroupOnlySpell(spell_id) && (IsGroupOnlySpell(spell_id) &&
!( !(
( (
@ -4115,7 +4115,7 @@ bool Mob::SpellOnTarget(
if ( if (
IsCharmSpell(spell_id) || IsCharmSpell(spell_id) ||
IsMezSpell(spell_id) || IsMesmerizeSpell(spell_id) ||
IsFearSpell(spell_id) IsFearSpell(spell_id)
) { ) {
spell_effectiveness = spelltar->ResistSpell( spell_effectiveness = spelltar->ResistSpell(
@ -4144,7 +4144,7 @@ bool Mob::SpellOnTarget(
} }
if (spell_effectiveness < 100) { if (spell_effectiveness < 100) {
if (spell_effectiveness == 0 || !IsPartialCapableSpell(spell_id)) { if (spell_effectiveness == 0 || !IsPartialResistableSpell(spell_id)) {
LogSpells("Spell [{}] was completely resisted by [{}]", spell_id, spelltar->GetName()); LogSpells("Spell [{}] was completely resisted by [{}]", spell_id, spelltar->GetName());
if (spells[spell_id].resist_type == RESIST_PHYSICAL){ if (spells[spell_id].resist_type == RESIST_PHYSICAL){
@ -4687,7 +4687,7 @@ bool Mob::IsImmuneToSpell(uint16 spell_id, Mob *caster)
if(IsBeneficialSpell(spell_id) && (caster->GetNPCTypeID())) //then skip the rest, stop NPCs aggroing each other with buff spells. 2013-03-05 if(IsBeneficialSpell(spell_id) && (caster->GetNPCTypeID())) //then skip the rest, stop NPCs aggroing each other with buff spells. 2013-03-05
return false; return false;
if(IsMezSpell(spell_id)) if(IsMesmerizeSpell(spell_id))
{ {
if(GetSpecialAbility(UNMEZABLE)) { if(GetSpecialAbility(UNMEZABLE)) {
LogSpells("We are immune to Mez spells"); LogSpells("We are immune to Mez spells");
@ -5150,7 +5150,7 @@ float Mob::ResistSpell(uint8 resist_type, uint16 spell_id, Mob *caster, bool use
{ {
//This is confusing but it's basically right //This is confusing but it's basically right
//It skews partial resists up over 100 more often than not //It skews partial resists up over 100 more often than not
if(!IsPartialCapableSpell(spell_id)) if(!IsPartialResistableSpell(spell_id))
{ {
return 0; return 0;
} }