/* * Ascent MMORPG Server * Copyright (C) 2005-2007 Ascent Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //! 4-bit flag enum AURA_FLAGS { AFLAG_EMPTY = 0x0, AFLAG_SET = 0x9 }; enum AUARA_STAE_FLAGS { AURASTATE_FLAG_DODGE_BLOCK = 1,//1 AURASTATE_FLAG_HEALTH20 = 2, //2 AURASTATE_FLAG_BERSERK = 4, //3 AURASTATE_FLAG_JUDGEMENT = 16, //5 AURASTATE_FLAG_PARRY = 64, //7 AURASTATE_FLAG_LASTKILLWITHHONOR = 512, //10 AURASTATE_FLAG_CRITICAL = 1024, //11 AURASTATE_FLAG_HEALTH35 = 4096, //13 AURASTATE_FLAG_IMMOLATE = 8192, //14 AURASTATE_FLAG_REJUVENATE = 16384, //15 //where do i use this ? AURASTATE_FLAG_POISON = 32768, //16 }; enum MOD_TYPES { SPELL_AURA_NONE = 0, // None SPELL_AURA_BIND_SIGHT = 1, // Bind Sight SPELL_AURA_MOD_POSSESS = 2, // Mod Possess SPELL_AURA_PERIODIC_DAMAGE = 3, // Periodic Damage SPELL_AURA_DUMMY = 4, // Script Aura SPELL_AURA_MOD_CONFUSE = 5, // Mod Confuse SPELL_AURA_MOD_CHARM = 6, // Mod Charm SPELL_AURA_MOD_FEAR = 7, // Mod Fear SPELL_AURA_PERIODIC_HEAL = 8, // Periodic Heal SPELL_AURA_MOD_ATTACKSPEED = 9, // Mod Attack Speed SPELL_AURA_MOD_THREAT = 10, // Mod Threat SPELL_AURA_MOD_TAUNT = 11, // Taunt SPELL_AURA_MOD_STUN = 12, // Stun SPELL_AURA_MOD_DAMAGE_DONE = 13, // Mod Damage Done SPELL_AURA_MOD_DAMAGE_TAKEN = 14, // Mod Damage Taken SPELL_AURA_DAMAGE_SHIELD = 15, // Damage Shield SPELL_AURA_MOD_STEALTH = 16, // Mod Stealth SPELL_AURA_MOD_DETECT = 17, // Mod Detect SPELL_AURA_MOD_INVISIBILITY = 18, // Mod Invisibility SPELL_AURA_MOD_INVISIBILITY_DETECTION = 19, // Mod Invisibility Detection SPELL_AURA_MOD_TOTAL_HEALTH_REGEN_PCT = 20, SPELL_AURA_MOD_TOTAL_MANA_REGEN_PCT = 21, SPELL_AURA_MOD_RESISTANCE = 22, // Mod Resistance SPELL_AURA_PERIODIC_TRIGGER_SPELL = 23, // Periodic Trigger SPELL_AURA_PERIODIC_ENERGIZE = 24, // Periodic Energize SPELL_AURA_MOD_PACIFY = 25, // Pacify SPELL_AURA_MOD_ROOT = 26, // Root SPELL_AURA_MOD_SILENCE = 27, // Silence SPELL_AURA_REFLECT_SPELLS = 28, // Reflect Spells % SPELL_AURA_MOD_STAT = 29, // Mod Stat SPELL_AURA_MOD_SKILL = 30, // Mod Skill SPELL_AURA_MOD_INCREASE_SPEED = 31, // Mod Speed SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED = 32, // Mod Speed Mounted SPELL_AURA_MOD_DECREASE_SPEED = 33, // Mod Speed Slow SPELL_AURA_MOD_INCREASE_HEALTH = 34, // Mod Increase Health SPELL_AURA_MOD_INCREASE_ENERGY = 35, // Mod Increase Energy SPELL_AURA_MOD_SHAPESHIFT = 36, // Shapeshift SPELL_AURA_EFFECT_IMMUNITY = 37, // Immune Effect SPELL_AURA_STATE_IMMUNITY = 38, // Immune State SPELL_AURA_SCHOOL_IMMUNITY = 39, // Immune School SPELL_AURA_DAMAGE_IMMUNITY = 40, // Immune Damage SPELL_AURA_DISPEL_IMMUNITY = 41, // Immune Dispel Type SPELL_AURA_PROC_TRIGGER_SPELL = 42, // Proc Trigger Spell SPELL_AURA_PROC_TRIGGER_DAMAGE = 43, // Proc Trigger Damage SPELL_AURA_TRACK_CREATURES = 44, // Track Creatures SPELL_AURA_TRACK_RESOURCES = 45, // Track Resources SPELL_AURA_MOD_PARRY_SKILL = 46, // Mod Parry Skill SPELL_AURA_MOD_PARRY_PERCENT = 47, // Mod Parry Percent SPELL_AURA_MOD_DODGE_SKILL = 48, // Mod Dodge Skill SPELL_AURA_MOD_DODGE_PERCENT = 49, // Mod Dodge Percent SPELL_AURA_MOD_BLOCK_SKILL = 50, // Mod Block Skill SPELL_AURA_MOD_BLOCK_PERCENT = 51, // Mod Block Percent SPELL_AURA_MOD_CRIT_PERCENT = 52, // Mod Crit Percent SPELL_AURA_PERIODIC_LEECH = 53, // Periodic Leech SPELL_AURA_MOD_HIT_CHANCE = 54, // Mod Hit Chance SPELL_AURA_MOD_SPELL_HIT_CHANCE = 55, // Mod Spell Hit Chance SPELL_AURA_TRANSFORM = 56, // Transform SPELL_AURA_MOD_SPELL_CRIT_CHANCE = 57, // Mod Spell Crit Chance SPELL_AURA_MOD_INCREASE_SWIM_SPEED = 58, // Mod Speed Swim SPELL_AURA_MOD_DAMAGE_DONE_CREATURE = 59, // Mod Creature Dmg Done SPELL_AURA_MOD_PACIFY_SILENCE = 60, // Pacify & Silence SPELL_AURA_MOD_SCALE = 61, // Mod Scale SPELL_AURA_PERIODIC_HEALTH_FUNNEL = 62, // Periodic Health Funnel SPELL_AURA_PERIODIC_MANA_FUNNEL = 63, // Periodic Mana Funnel SPELL_AURA_PERIODIC_MANA_LEECH = 64, // Periodic Mana Leech SPELL_AURA_MOD_CASTING_SPEED = 65, // Haste - Spells SPELL_AURA_FEIGN_DEATH = 66, // Feign Death SPELL_AURA_MOD_DISARM = 67, // Disarm SPELL_AURA_MOD_STALKED = 68, // Mod Stalked SPELL_AURA_SCHOOL_ABSORB = 69, // School Absorb SPELL_AURA_EXTRA_ATTACKS = 70, // Extra Attacks SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL = 71, // Mod School Spell Crit Chance SPELL_AURA_MOD_POWER_COST = 72, // Mod Power Cost SPELL_AURA_MOD_POWER_COST_SCHOOL = 73, // Mod School Power Cost SPELL_AURA_REFLECT_SPELLS_SCHOOL = 74, // Reflect School Spells % SPELL_AURA_MOD_LANGUAGE = 75, // Mod Language SPELL_AURA_FAR_SIGHT = 76, // Far Sight SPELL_AURA_MECHANIC_IMMUNITY = 77, // Immune Mechanic SPELL_AURA_MOUNTED = 78, // Mounted SPELL_AURA_MOD_DAMAGE_PERCENT_DONE = 79, // Mod Dmg % SPELL_AURA_MOD_PERCENT_STAT = 80, // Mod Stat % SPELL_AURA_SPLIT_DAMAGE = 81, // Split Damage SPELL_AURA_WATER_BREATHING = 82, // Water Breathing SPELL_AURA_MOD_BASE_RESISTANCE = 83, // Mod Base Resistance SPELL_AURA_MOD_REGEN = 84, // Mod Health Regen SPELL_AURA_MOD_POWER_REGEN = 85, // Mod Power Regen SPELL_AURA_CHANNEL_DEATH_ITEM = 86, // Create Death Item SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN = 87, // Mod Dmg % Taken SPELL_AURA_MOD_PERCENT_REGEN = 88, // Mod Health Regen Percent SPELL_AURA_PERIODIC_DAMAGE_PERCENT = 89, // Periodic Damage Percent SPELL_AURA_MOD_RESIST_CHANCE = 90, // Mod Resist Chance SPELL_AURA_MOD_DETECT_RANGE = 91, // Mod Detect Range SPELL_AURA_PREVENTS_FLEEING = 92, // Prevent Fleeing SPELL_AURA_MOD_UNATTACKABLE = 93, // Mod Uninteractible SPELL_AURA_INTERRUPT_REGEN = 94, // Interrupt Regen SPELL_AURA_GHOST = 95, // Ghost SPELL_AURA_SPELL_MAGNET = 96, // Spell Magnet SPELL_AURA_MANA_SHIELD = 97, // Mana Shield SPELL_AURA_MOD_SKILL_TALENT = 98, // Mod Skill Talent SPELL_AURA_MOD_ATTACK_POWER = 99, // Mod Attack Power SPELL_AURA_AURAS_VISIBLE = 100, // Auras Visible SPELL_AURA_MOD_RESISTANCE_PCT = 101, // Mod Resistance % SPELL_AURA_MOD_CREATURE_ATTACK_POWER = 102, // Mod Creature Attack Power SPELL_AURA_MOD_TOTAL_THREAT = 103, // Mod Total Threat (Fade) SPELL_AURA_WATER_WALK = 104, // Water Walk SPELL_AURA_FEATHER_FALL = 105, // Feather Fall SPELL_AURA_HOVER = 106, // Hover SPELL_AURA_ADD_FLAT_MODIFIER = 107, // Add Flat Modifier SPELL_AURA_ADD_PCT_MODIFIER = 108, // Add % Modifier SPELL_AURA_ADD_TARGET_TRIGGER = 109, // Add Class Target Trigger SPELL_AURA_MOD_POWER_REGEN_PERCENT = 110, // Mod Power Regen % SPELL_AURA_ADD_CASTER_HIT_TRIGGER = 111, // Add Class Caster Hit Trigger SPELL_AURA_OVERRIDE_CLASS_SCRIPTS = 112, // Override Class Scripts SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN = 113, // Mod Ranged Dmg Taken SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT = 114, // Mod Ranged % Dmg Taken SPELL_AURA_MOD_HEALING = 115, // Mod Healing SPELL_AURA_IGNORE_REGEN_INTERRUPT = 116, // Regen During Combat SPELL_AURA_MOD_MECHANIC_RESISTANCE = 117, // Mod Mechanic Resistance SPELL_AURA_MOD_HEALING_PCT = 118, // Mod Healing % SPELL_AURA_SHARE_PET_TRACKING = 119, // Share Pet Tracking SPELL_AURA_UNTRACKABLE = 120, // Untrackable SPELL_AURA_EMPATHY = 121, // Empathy (Lore, whatever) SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT = 122, // Mod Offhand Dmg % SPELL_AURA_MOD_POWER_COST_PCT = 123, // Mod Power Cost % SPELL_AURA_MOD_RANGED_ATTACK_POWER = 124, // Mod Ranged Attack Power SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN = 125, // Mod Melee Dmg Taken SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT = 126, // Mod Melee % Dmg Taken SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS = 127,// Rngd Atk Pwr Attckr Bonus SPELL_AURA_MOD_POSSESS_PET = 128, // Mod Possess Pet SPELL_AURA_MOD_INCREASE_SPEED_ALWAYS = 129, // Mod Speed Always SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS = 130, // Mod Mounted Speed Always SPELL_AURA_MOD_CREATURE_RANGED_ATTACK_POWER = 131, // Mod Creature Ranged Attack Power SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT = 132, // Mod Increase Energy % SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT = 133, // Mod Max Health % SPELL_AURA_MOD_MANA_REGEN_INTERRUPT = 134, // Mod Interrupted Mana Regen SPELL_AURA_MOD_HEALING_DONE = 135, // Mod Healing Done SPELL_AURA_MOD_HEALING_DONE_PERCENT = 136, // Mod Healing Done % SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE = 137, // Mod Total Stat % SPELL_AURA_MOD_HASTE = 138, // Haste - Melee SPELL_AURA_FORCE_REACTION = 139, // Force Reaction SPELL_AURA_MOD_RANGED_HASTE = 140, // Haste - Ranged SPELL_AURA_MOD_RANGED_AMMO_HASTE = 141, // Haste - Ranged (Ammo Only) SPELL_AURA_MOD_BASE_RESISTANCE_PCT = 142, // Mod Base Resistance % SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE = 143, // Mod Resistance Exclusive SPELL_AURA_SAFE_FALL = 144, // Safe Fall SPELL_AURA_CHARISMA = 145, // Charisma SPELL_AURA_PERSUADED = 146, // Persuaded SPELL_AURA_ADD_CREATURE_IMMUNITY = 147, // Add Creature Immunity SPELL_AURA_RETAIN_COMBO_POINTS = 148, // Retain Combo Points SPELL_AURA_RESIST_PUSHBACK = 149, // Resist Pushback SPELL_AURA_MOD_SHIELD_BLOCK_PCT = 150, // Mod Shield Block % SPELL_AURA_TRACK_STEALTHED = 151, // Track Stealthed SPELL_AURA_MOD_DETECTED_RANGE = 152, // Mod Detected Range SPELL_AURA_SPLIT_DAMAGE_FLAT = 153, // Split Damage Flat SPELL_AURA_MOD_STEALTH_LEVEL = 154, // Stealth Level Modifier SPELL_AURA_MOD_WATER_BREATHING = 155, // Mod Water Breathing SPELL_AURA_MOD_REPUTATION_ADJUST = 156, // Mod Reputation Gain SPELL_AURA_PET_DAMAGE_MULTI = 157, // Mod Pet Damage SPELL_AURA_MOD_SHIELD_BLOCK = 158, // Mod Shield Block SPELL_AURA_NO_PVP_CREDIT = 159, // No PVP Credit SPELL_AURA_MOD_SIDE_REAR_PDAE_DAMAGE_TAKEN = 160, // Mod Side/Rear PBAE Damage Taken SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, // Mod Health Regen In Combat SPELL_AURA_POWER_BURN = 162, // Power Burn SPELL_AURA_MOD_CRIT_DAMAGE_BONUS_MELEE = 163, // Mod Critical Damage Bonus (Physical) SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165, // Melee AP Attacker Bonus SPELL_AURA_MOD_ATTACK_POWER_PCT = 166, // Mod Attack Power SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT = 167, // Mod Ranged Attack Power % SPELL_AURA_INCREASE_DAMAGE = 168, // Increase Damage Type SPELL_AURA_INCREASE_CRITICAL = 169, // Increase Critical Type SPELL_AURA_DETECT_AMORE = 170, // Detect Amore SPELL_AURA_INCREASE_MOVEMENT_AND_MOUNTED_SPEED = 172,// Increase Movement and Mounted Speed (Non-Stacking) SPELL_AURA_INCREASE_SPELL_DAMAGE_PCT = 174, // Increase Spell Damage by % Spirit (Spells SPELL_AURA_INCREASE_SPELL_HEALING_PCT = 175, // Increase Spell Healing by % Spirit SPELL_AURA_SPIRIT_OF_REDEMPTION = 176, // Spirit of Redemption Auras SPELL_AURA_AREA_CHARM = 177, // Area Charm SPELL_AURA_INCREASE_ATTACKER_SPELL_CRIT = 179, // Increase Attacker Spell Crit Type SPELL_AURA_INCREASE_SPELL_DAMAGE_VS_TYPE = 180, // Increase Spell Damage Type SPELL_AURA_INCREASE_ARMOR_BASED_ON_INTELLECT_PCT = 182, // Increase Armor based on Intellect SPELL_AURA_DECREASE_CRIT_THREAT = 183, // Decrease Critical Threat by SPELL_AURA_DECREASE_ATTACKER_CHANCE_TO_HIT_MELEE = 184,//Reduces Attacker Chance to Hit with Melee SPELL_AURA_DECREASE_ATTACKER_CHANGE_TO_HIT_RANGED = 185,// Reduces Attacker Chance to Hit with Ranged SPELL_AURA_DECREASE_ATTACKER_CHANGE_TO_HIT_SPELLS = 186,// Reduces Attacker Chance to Hit with Spells SPELL_AURA_DECREASE_ATTACKER_CHANGE_TO_CRIT_MELEE = 187,// Reduces Attacker Chance to Crit with Melee (Ranged?) SPELL_AURA_DECREASE_ATTACKER_CHANGE_TO_CRIT_RANGED = 188,// Reduces Attacker Chance to Crit with Ranged (Melee?) SPELL_AURA_INCREASE_REPUTATION = 190, // Increases reputation from killed creatures SPELL_AURA_SPEED_LIMIT = 191, // speed limit SPELL_AURA_MELEE_SLOW_PCT = 192, SPELL_AURA_INCREASE_TIME_BETWEEN_ATTACKS = 193, SPELL_AURA_INREASE_SPELL_DAMAGE_PCT_OF_INTELLECT = 194, SPELL_AURA_INCREASE_HEALING_PCT_OF_INTELLECT = 195, SPELL_AURA_MOD_ALL_WEAPON_SKILLS = 196, SPELL_AURA_REDUCE_ATTACKER_CRICTICAL_HIT_CHANCE_PCT = 197, SPELL_AURA_INCREASE_SPELL_HIT_PCT = 199, SPELL_AURA_CANNOT_BE_DODGED = 201, SPELL_AURA_REDUCE_ATTACKER_CRICTICAL_HIT_DAMAGE_MELEE_PCT = 203, SPELL_AURA_REDUCE_ATTACKER_CRICTICAL_HIT_DAMAGE_RANGED_PCT = 204, SPELL_AURA_INCREASE_RANGED_ATTACK_POWER_PCT_OF_INTELLECT = 212, SPELL_AURA_INCREASE_RAGE_FROM_DAMAGE_DEALT_PCT = 213, SPELL_AURA_INCREASE_CASTING_TIME_PCT = 216, SPELL_AURA_REGEN_MANA_STAT_PCT=219, SPELL_AURA_HEALING_STAT_PCT=220, SPELL_AURA_INCREASE_MAX_HEALTH=230,//Used by Commanding Shout TOTAL_SPELL_AURAS = 231, }; enum AuraTickFlags { FLAG_PERIODIC_DAMAGE = 2, FLAG_PERIODIC_TRIGGER_SPELL = 4, FLAG_PERIODIC_HEAL = 8, FLAG_PERIODIC_LEECH = 16, FLAG_PERIODIC_ENERGIZE = 32, }; struct Modifier { // uint32 m_actamt; // actual amt, for percent and stuff uint32 m_type; // What does it modify? (str,int,hp) int32 m_amount; // By how much does it mod? int32 m_miscValue; // Misc Value uint32 i; ///needed for per level effect int32 realamount; //need this to store % values or they cannot be reverted corectly (i think :D ) signed int fixed_amount[7]; }; struct ProcTriggerSpellOnSpell { uint32 origId; uint32 spellId; uint64 caster; uint32 procChance; uint32 procFlags; uint32 RemainingCharges; uint32 LastTrigger; void *owner;//mark the owner of this proc to know which one to delete }; struct DamageProc { uint32 m_spellId; uint32 m_damage; // uint64 m_caster;//log is: some reflects x arcane/nature damage to 'attacker' no matter who casted uint32 m_school; uint32 m_flags; void *owner;//mark the owner of this proc to know which one to delete }; struct ProcTriggerSpell { // ProcTriggerSpell() : origId(0), trigger(0), spellId(0), caster(0), procChance(0), procFlags(0), procCharges(0) { } uint32 origId; // uint32 trigger; uint32 spellId; uint64 caster; uint32 procChance; uint32 procFlags; uint32 procCharges; // SpellEntry *ospinfo; // SpellEntry *spinfo; uint32 LastTrigger; bool deleted; }; struct SpellCharge { uint32 spellId; uint32 count; uint32 ProcFlag; uint32 lastproc; uint32 procdiff; bool FromProc; }; typedef set AreaAuraList; class SERVER_DECL Aura : public EventableObject { public: Aura(SpellEntry *proto, int32 duration,Object* caster, Unit *target); void Remove(); void Expire(); void AddMod(uint32 t, int32 a,uint32 miscValue,uint32 i); inline SpellEntry* GetSpellProto() const { return m_spellProto; } inline uint32 GetSpellId() const {return m_spellProto->Id; } inline bool IsPassive(){ if(!m_spellProto) return false; return (m_spellProto->Attributes & 64 && !m_areaAura);} inline int32 GetDuration() const { return m_duration; } void SetDuration(int32 duration) { m_duration = duration; } inline uint8 GetAuraSlot() const { return m_auraSlot; } void SetAuraSlot(uint8 slot) { m_auraSlot = slot; } inline bool IsPositive() { return m_positive; } void SetNegative() { m_positive = false; } void SetPositive() { m_positive = true; } Object* GetCaster(); Unit* GetUnitCaster(); inline Unit* GetTarget() { return m_target; } Aura* StrongerThat(Aura *aur); void ApplyModifiers(bool apply); void AddAuraVisual(); void RemoveAuraVisual(); void EventUpdateAA(float r); void RemoveAA(); inline uint32 GetTimeLeft()//in sec { if(m_duration==-1)return (uint32)-1; int32 n=(time(NULL)-timeleft)*1000; if(n>=m_duration) return 0; else return (m_duration-n); } // Aura Handlers void SpellAuraNULL(bool apply); void SpellAuraBindSight(bool apply); void SpellAuraModPossess(bool apply); void SpellAuraPeriodicDamage(bool apply); void SpellAuraDummy(bool apply); void SpellAuraModConfuse(bool apply); void SpellAuraModCharm(bool apply); void SpellAuraModFear(bool apply); void SpellAuraPeriodicHeal(bool apply); void SpellAuraModAttackSpeed(bool apply); void SpellAuraModThreatGenerated(bool apply); void SpellAuraModTaunt(bool apply); void SpellAuraModStun(bool apply); void SpellAuraModDamageDone(bool apply); void SpellAuraModDamageTaken(bool apply); void SpellAuraDamageShield(bool apply); void SpellAuraModStealth(bool apply); void SpellAuraModDetect(bool apply); void SpellAuraModInvisibility(bool apply); void SpellAuraModInvisibilityDetection(bool apply); void SpellAuraModTotalHealthRegenPct(bool apply); void SpellAuraModTotalManaRegenPct(bool apply); void SpellAuraModResistance(bool apply); void SpellAuraPeriodicTriggerSpell(bool apply); void SpellAuraPeriodicEnergize(bool apply); void SpellAuraModPacify(bool apply); void SpellAuraModRoot(bool apply); void SpellAuraModSilence(bool apply); void SpellAuraReflectSpells(bool apply); void SpellAuraModStat(bool apply); void SpellAuraModSkill(bool apply); void SpellAuraModIncreaseSpeed(bool apply); void SpellAuraModDecreaseSpeed(bool apply); void SpellAuraModIncreaseHealth(bool apply); void SpellAuraModIncreaseEnergy(bool apply); void SpellAuraModShapeshift(bool apply); void SpellAuraModEffectImmunity(bool apply); void SpellAuraModStateImmunity(bool apply); void SpellAuraModSchoolImmunity(bool apply); void SpellAuraModDmgImmunity(bool apply); void SpellAuraModDispelImmunity(bool apply); void SpellAuraProcTriggerSpell(bool apply); void SpellAuraProcTriggerDamage(bool apply); void SpellAuraTrackCreatures(bool apply); void SpellAuraTrackResources(bool apply); void SpellAuraModParryPerc(bool apply); void SpellAuraModDodgePerc(bool apply); void SpellAuraModBlockPerc(bool apply); void SpellAuraModCritPerc(bool apply); void SpellAuraPeriodicLeech(bool apply); void SpellAuraModHitChance(bool apply); void SpellAuraModSpellHitChance(bool apply); void SpellAuraTransform(bool apply); void SpellAuraModSpellCritChance(bool apply); void SpellAuraIncreaseSwimSpeed(bool apply); void SpellAuraModCratureDmgDone(bool apply); void SpellAuraPacifySilence(bool apply); void SpellAuraModScale(bool apply); void SpellAuraPeriodicHealthFunnel(bool apply); void SpellAuraPeriodicManaLeech(bool apply); void SpellAuraModCastingSpeed(bool apply); void SpellAuraFeighDeath(bool apply); void SpellAuraModDisarm(bool apply); void SpellAuraModStalked(bool apply); void SpellAuraSchoolAbsorb(bool apply); void SpellAuraModSpellCritChanceSchool(bool apply); void SpellAuraModPowerCost(bool apply); void SpellAuraModPowerCostSchool(bool apply); void SpellAuraReflectSpellsSchool(bool apply); void SpellAuraModLanguage(bool apply); void SpellAuraAddFarSight(bool apply); void SpellAuraMechanicImmunity(bool apply); void SpellAuraMounted(bool apply); void SpellAuraModDamagePercDone(bool apply); void SpellAuraModPercStat(bool apply); void SpellAuraSplitDamage(bool apply); void SpellAuraWaterBreathing(bool apply); void SpellAuraModBaseResistance(bool apply); void SpellAuraModRegen(bool apply); void SpellAuraModPowerRegen(bool apply); void SpellAuraModHealingPct(bool apply); void SpellAuraChannelDeathItem(bool apply); void SpellAuraModDamagePercTaken(bool apply); void SpellAuraModRegenPercent(bool apply); void SpellAuraPeriodicDamagePercent(bool apply); void SpellAuraModResistChance(bool apply); void SpellAuraModDetectRange(bool apply); void SpellAuraPreventsFleeing(bool apply); void SpellAuraModUnattackable(bool apply); void SpellAuraInterruptRegen(bool apply); void SpellAuraGhost(bool apply); void SpellAuraMagnet(bool apply); void SpellAuraManaShield(bool apply); void SpellAuraSkillTalent(bool apply); void SpellAuraModAttackPower(bool apply); void SpellAuraVisible(bool apply); void SpellAuraModResistancePCT(bool apply); void SpellAuraModCreatureAttackPower(bool apply); void SpellAuraModTotalThreat(bool apply); void SpellAuraWaterWalk(bool apply); void SpellAuraFeatherFall(bool apply); void SpellAuraHover(bool apply); void SpellAuraAddFlatModifier(bool apply); void SpellAuraAddPctMod(bool apply); void SpellAuraAddTargetTrigger(bool apply); void SpellAuraModPowerRegPerc(bool apply); void SpellAuraOverrideClassScripts(bool apply); void SpellAuraModRangedDamageTaken(bool apply); void SpellAuraModHealing(bool apply); void SpellAuraIgnoreRegenInterrupt(bool apply); void SpellAuraModMechanicResistance(bool apply); void SpellAuraModHealingPCT(bool apply); void SpellAuraEmphaty(bool apply); void SpellAuraModOffhandDamagePCT(bool apply); void SpellAuraModPowerCostPCT(bool apply); void SpellAuraModRangedAttackPower(bool apply); void SpellAuraModMeleeDamageTaken(bool apply); void SpellAuraModMeleeDamageTakenPct(bool apply); void SpellAuraRAPAttackerBonus(bool apply); void SpellAuraModIncreaseSpeedAlways(bool apply); void SpellAuraModIncreaseMountedSpeed(bool apply); void SpellAuraModCreatureRangedAttackPower(bool apply); void SpellAuraModIncreaseEnergyPerc(bool apply); void SpellAuraModIncreaseHealthPerc(bool apply); void SpellAuraModManaRegInterrupt(bool apply); void SpellAuraModHealingDone(bool apply); void SpellAuraModHealingDonePct(bool apply); void SpellAuraModTotalStatPerc(bool apply); void SpellAuraModHaste(bool apply); void SpellAuraForceReaction(bool apply); void SpellAuraModRangedHaste(bool apply); void SpellAuraModRangedAmmoHaste(bool apply); void SpellAuraModBaseResistancePerc(bool apply); void SpellAuraModResistanceExclusive(bool apply); void SpellAuraSafeFall(bool apply); void SpellAuraRetainComboPoints(bool apply); void SpellAuraResistPushback(bool apply); void SpellAuraModShieldBlockPCT(bool apply); void SpellAuraTrackStealthed(bool apply); void SpellAuraModDetectedRange(bool apply); void SpellAuraSplitDamageFlat(bool apply); void SpellAuraModStealthLevel(bool apply); void SpellAuraModUnderwaterBreathing(bool apply); void SpellAuraModReputationAdjust(bool apply); void SpellAuraNoPVPCredit(bool apply); void SpellAuraModHealthRegInCombat(bool apply); void SpellAuraPowerBurn(bool apply); void SpellAuraModCritDmgPhysical(bool apply); void SpellAuraModPAttackPower(bool apply); void SpellAuraModRangedAttackPowerPct(bool apply); void SpellAuraAPAttackerBonus(bool apply); void SpellAuraIncreaseDamageTypePCT(bool apply); void SpellAuraIncreaseCricticalTypePCT(bool apply); void SpellAuraIncreasePartySpeed(bool apply); void SpellAuraIncreaseSpellDamageBySpr(bool apply); void SpellAuraIncreaseHealingBySpr(bool apply); void SpellAuraIncreaseArmorByPctInt(bool apply); void SpellAuraReduceAttackerMHitChance(bool apply); void SpellAuraReduceAttackerRHitChance(bool apply); void SpellAuraReduceAttackerSHitChance(bool apply); void SpellAuraReduceEnemyMCritChance(bool apply); void SpellAuraReduceEnemyRCritChance(bool apply); void SpellAuraIncreaseTimeBetweenAttacksPCT(bool apply); void SpellAuraIncreaseSpellDamageByInt(bool apply); void SpellAuraIncreaseHealingByInt(bool apply); void SpellAuraIncreaseAllWeaponSkill(bool apply); void SpellAuraIncreaseHitRate(bool apply); void SpellAuraEnableFlight(bool apply); void SpellAuraEnableFlightWithUnmountedSpeed(bool apply); void SpellAuraIncreaseRageFromDamageDealtPCT(bool apply); void SpellAuraIncreaseFlightSpeed(bool apply); void SpellAuraIncreaseMovementAndMountedSpeed(bool apply); void SpellAuraIncreaseRating(bool apply); void SpellAuraIncreaseCastTimePCT(bool apply); void SpellAuraRegenManaStatPCT(bool apply); void SpellAuraSpellHealingStatPCT(bool apply); void SpellAuraIncreaseMaxHealth(bool apply); void SpellAuraSpiritOfRedemption(bool apply); void SpellAuraIncreaseAttackerSpellCrit(bool apply); void SpellAuraIncreaseRepGainPct(bool apply); void SpellAuraIncreaseRangedAPStatPCT(bool apply); void SpellAuraModRangedDamageTakenPCT(bool apply); void SpellAuraModBlockValue(bool apply); void SendModifierLog(int32 ** m,int32 v,uint32 mask,uint8 type,bool pct = false); void SendDummyModifierLog(std::map * m,SpellEntry * spellInfo,uint32 i,bool apply,bool pct = false); // Events void EventPeriodicDamage(uint32); void EventPeriodicDamagePercent(uint32); void EventPeriodicHeal(uint32); void EventPeriodicTriggerSpell(SpellEntry* spellInfo, uint64 target); void EventPeriodicEnergize(uint32,uint32); void EventPeriodicHeal1(uint32); void EventPeriodicLeech(uint32); void EventPeriodicBurn(uint32,uint32); void EventPeriodicHealthFunnel(uint32); void EventPeriodicManaLeech(uint32); void EventPeriodicHealPct(float); void EventPeriodicManaPct(float); void EventPeriodicRegenManaStatPct(uint32 perc,uint32 stat); void RelocateEvents(); int32 event_GetInstanceID(); inline void SendPeriodicHealAuraLog(uint32 amt) { WorldPacket data(32); data.SetOpcode(SMSG_PERIODICAURALOG); data << m_target->GetNewGUID(); FastGUIDPack(data, m_casterGuid); data << GetSpellProto()->Id; data << uint32(1); data << uint32(FLAG_PERIODIC_HEAL); data << uint32(amt); m_target->SendMessageToSet(&data,true); } // log message's inline void SendPeriodicAuraLog(Unit * Caster, Unit * Target, uint32 SpellID, uint32 School, uint32 Amount, uint32 Flags) { WorldPacket data(SMSG_PERIODICAURALOG, 46); data << Target->GetNewGUID(); // target guid data << Caster->GetNewGUID(); // caster guid data << SpellID; // spellid data << (uint32)1; // unknown? need research? data << uint32(Flags | 0x1); // aura school data << Amount; // amount of done to target / heal / damage data << School; data << uint64(0); Caster->SendMessageToSet(&data, true); } void SendPeriodicAuraLog(const uint64& CasterGuid, Unit * Target, uint32 SpellID, uint32 School, uint32 Amount, uint32 Flags) { WorldPacket data(SMSG_PERIODICAURALOG, 46); data << Target->GetNewGUID(); // target guid FastGUIDPack(data, CasterGuid); // caster guid data << SpellID; // spellid data << (uint32)1; // unknown?? need resource? data << uint32(Flags | 0x1); // aura school data << Amount; // amount of done to target / heal / damage data << School; data << uint64(0); Target->SendMessageToSet(&data, true); } bool WasCastInDuel() { return m_castInDuel; } SpellEntry * m_spellProto; Modifier * mod; AreaAuraList targets;//this is only used for AA uint64 m_casterGuid; uint32 m_auraSlot; uint32 m_castedItemId; bool m_areaAura; // Area aura stuff -> never passive. uint8 m_visualSlot; uint32 pSpellId; //this represents the triggering spell id private: uint32 GetCasterFaction() { return m_casterfaction; } void SetCasterFaction(uint32 faction){ m_casterfaction = faction; } inline bool IsInrange(float x1,float y1, float z1, Object * o,float square_r) { float t; float r; t=x1-o->GetPositionX(); r=t*t; t=y1-o->GetPositionY(); r+=t*t; t=z1-o->GetPositionZ(); r+=t*t; return ( r<=square_r); } Unit* m_target; Player * p_target; uint32 timeleft; int32 m_duration; // in msecs bool m_positive; uint32 m_modcount; Modifier m_modList[3]; uint32 m_dynamicValue; bool m_castInDuel; protected: uint32 m_casterfaction; }; typedef void(Aura::*pSpellAura)(bool apply);