Projekt

Allgemein

Profil

Aktionen

Fehler #19148

geschlossen

Fehler #5667: Petscaling - Hauptticket

[Petscaling] Übersicht zu verwendeten Spells und möglicher Recheck

Von Rushor vor mehr als 8 Jahren hinzugefügt. Vor mehr als 6 Jahren aktualisiert.

Status:
Live
Priorität:
Normal
Zugewiesen an:
-
Kategorie:
Kreaturen
Zielversion:
Beginn:
24.05.2016
Update Text Deutsch:

Allen Pets (u.a.: Geisterwolf, Viper, Verdammniswache) wurde der fehlende AoE Vermeidungszauber hinzugefügt.


Beschreibung

Petscaling:

Folgend eine Liste welche Petscalingauren atm für unsere Pets vergeben werden und eine Liste mit Scalingskripts/Scalingauren welche von Sunwell verwendet werden.

Bitte einmal überprüfen, ob bei bestimmten Pets handlungsbedarf besteht einen bestimmten Scalingstat zu überarbeiten. (Mit Ausnahme von Spellpen, siehe dazu https://redmine.rising-gods.de/issues/5673)

Sollten Fragen bezüglich der Spellscripts sein, in Jabber melden. Sollte aber alles selbsterklärend sein, da meistens auch entsprechende Comments hinzugefügt wurden.

Unter anderem kann hier gleichzeitig überprüft werden, ob auch wirklich alle Pets einen AoE Reduce besitzen. Spellids und Petids sind in enums aufgelistet.

Wie sieht die Vergabe von Scalingspells atm aus? (Istzustand in RG Core)

void Guardian::CastStatAuras(bool firstApply)
{
    RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_DND_RESIST);

    if (!IsHunterPet())
    {
        switch (GetEntry())
        {
            case ENTRY_FELHUNTER:
                RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_11);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_11, true);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_11, true);
            case ENTRY_IMP:
            case ENTRY_VOIDWALKER:
            case ENTRY_SUCCUBUS:
            case ENTRY_FELGUARD:                
            case ENTRY_INFERNAL:
            case ENTRY_DOOMGUARD:
                RemoveAurasDueToSpell(SPELL_WARLOCK_PET_SCALING_05);                
                CastSpell(this, SPELL_WARLOCK_PET_SCALING_05, true);

                // demonic knowlege recast
                if (Unit* owner = GetOwner())
                    if (Aura const* aura = owner->GetAuraOfRankedSpell(SPELL_WARLOCK_DEMONIC_KNOWLEGE_R1, owner->GetGUID()))
                    {
                        int32 basePoints = CalculatePct(aura->GetSpellInfo()->Effects[EFFECT_0].BasePoints * 1.095f, GetStat(STAT_STAMINA) + GetStat(STAT_INTELLECT));
                        CastCustomSpell(this, SPELL_WARLOCK_DEMONIC_KNOWLEGE, &basePoints, NULL, NULL, true);
                    }
                return;

            case ENTRY_GHOUL:
                RemoveAurasDueToSpell(SPELL_DEATH_KNIGHT_PET_SCALING_03);
                RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_10_HASTE);
                RemoveAurasDueToSpell(SPELL_DEATH_KNIGHT_AOEDAMAGE_REDUCE);
                CastSpell(this, SPELL_DEATH_KNIGHT_AOEDAMAGE_REDUCE, true);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_10_HASTE, true);
                CastSpell(this, SPELL_DEATH_KNIGHT_PET_SCALING_03, true);
                return;
            case ENTRY_BLOODWORM:
            case ENTRY_EBON_GARGOYLE:
                RemoveAurasDueToSpell(SPELL_DEATH_KNIGHT_PET_SCALING_03);
                RemoveAurasDueToSpell(SPELL_DEATH_KNIGHT_AOEDAMAGE_REDUCE);
                RemoveAurasDueToSpell(SPELL_DEATH_KNIGHT_PET_SCALING_01);
                CastSpell(this, SPELL_DEATH_KNIGHT_AOEDAMAGE_REDUCE, true);
                CastSpell(this, SPELL_DEATH_KNIGHT_PET_SCALING_03, true);
                CastSpell(this, SPELL_DEATH_KNIGHT_PET_SCALING_01, true);
                ApplySpellImmune(0, IMMUNITY_ID, 2825, true);  // Bloodlust
                ApplySpellImmune(0, IMMUNITY_ID, 32182, true); // Heroism
                return;

                // priest
            case ENTRY_SHADOWNFIEND:
                // hunter
            case ENTRY_TRAP_SNAKE_VENOMUS:
            case ENTRY_TRAP_SNAKE_VIPER:
                // mage
            case ENTRY_MIRROR_IMAGE:
                // shaman
            case ENTRY_FIRE_ELEMENTAL:
            case ENTRY_EARTH_ELEMENTAL:
            case ENTRY_FERAL_SPIRIT:
                RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_08_HIT);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_08_HIT, true);
                return;
                // mage 
            case ENTRY_WATER_ELEMENTAL:
            case ENTRY_WATER_ELEMENTAL_P:
                ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
                RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_08_HIT);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_08_HIT, true);
                return;
                // druid
            case ENTRY_TREANT:
                RemoveAurasDueToSpell(SPELL_TAMED_PET_PASSIVE_08_HIT);
                CastSpell(this, SPELL_TAMED_PET_PASSIVE_08_HIT, true);
                CastSpell(this, SPELL_AVOIDANCE, true);
                return;
        };
    }
    else if (IsHunterPet())
    {
        RemoveAurasDueToSpell(SPELL_HUNTER_PET_SCALING_04);
        CastSpell(this, SPELL_HUNTER_PET_SCALING_04, true);
        return;
    }
    else
        return;
}

Definitionen (RG Stand)

enum PetTypes
{
    // hunter
    ENTRY_TRAP_SNAKE_VENOMUS    = 19833,
    ENTRY_TRAP_SNAKE_VIPER      = 19921,
    // warlock
    ENTRY_FELGUARD              = 17252,
    ENTRY_VOIDWALKER            = 1860,
    ENTRY_FELHUNTER             = 417,
    ENTRY_SUCCUBUS              = 1863,
    ENTRY_IMP                   = 416,
    ENTRY_INFERNAL              = 89,
    ENTRY_DOOMGUARD             = 11859,
    // mage
    ENTRY_WATER_ELEMENTAL       = 510,
    ENTRY_WATER_ELEMENTAL_P     = 37994,
    ENTRY_MIRROR_IMAGE          = 31216,
    // druid
    ENTRY_TREANT                = 1964,
    // shaman
    ENTRY_EARTH_ELEMENTAL       = 15352,
    ENTRY_FIRE_ELEMENTAL        = 15438,
    // deathknight
    ENTRY_GHOUL                 = 26125,
    ENTRY_EBON_GARGOYLE         = 27829,
    ENTRY_BLOODWORM             = 28017,
    ENTRY_ARMY_OF_DEAD_GHOUL    = 24207,
    ENTRY_DANCING_RUNE_WEAPON   = 27893,
    // shaman
    ENTRY_FERAL_SPIRIT          = 29264,
    // priest
    ENTRY_SHADOWNFIEND          = 19668,
};

enum GeneralPetCalculate
{
    SPELL_TAMED_PET_PASSIVE_08_HIT     = 34666,
    SPELL_TAMED_PET_PASSIVE_11         = 55566, // is removed from pet
    SPELL_TAMED_PET_PASSIVE_DND_RESIST = 19007, // is removed from pet

    // unused
    SPELL_TAMED_PET_PASSIVE_06         = 19591,
    SPELL_TAMED_PET_PASSIVE_07         = 20784,
    SPELL_TAMED_PET_PASSIVE_09         = 34667,
};

enum HunterPetCalculate
{
     SPELL_HUNTER_PET_SCALING_04        = 61017,

     // unused
     SPELL_HUNTER_PET_SCALING_01        = 34902,
     SPELL_HUNTER_PET_SCALING_02        = 34903,
     SPELL_HUNTER_PET_SCALING_03        = 34904,
     SPELL_HUNTER_ANIMAL_HANDLER        = 34453,
};

enum WarlockPetCalculate
{
    SPELL_WARLOCK_PET_SCALING_05       = 61013,

    SPELL_WARLOCK_DEMONIC_KNOWLEGE_R1  = 35691,
    SPELL_WARLOCK_DEMONIC_KNOWLEGE     = 35696,

    // unused
    SPELL_PET_PASSIVE_CRIT             = 35695,
    SPELL_PET_PASSIVE_DAMAGE_TAKEN     = 35697,
    SPELL_WARLOCK_PET_SCALING_01       = 34947,
    SPELL_WARLOCK_PET_SCALING_02       = 34956,
    SPELL_WARLOCK_PET_SCALING_03       = 34957,
    SPELL_WARLOCK_PET_SCALING_04       = 34958,
    SPELL_WARLOCK_GLYPH_OF_VOIDWALKER  = 56247,
};

enum DKPetCalculate
{
    SPELL_DEATH_KNIGHT_PET_SCALING_03   = 61697,
    SPELL_TAMED_PET_PASSIVE_10_HASTE    = 34675,
    SPELL_DEATH_KNIGHT_AOEDAMAGE_REDUCE = 62137,
    SPELL_NIGHT_OF_THE_DEAD             = 55620,
    SPELL_DEATH_KNIGHT_PET_SCALING_01   = 54566,

    // unused
    SPELL_DEATH_KNIGHT_RUNE_WEAPON_02   = 51906,    
    SPELL_DEATH_KNIGHT_PET_SCALING_02   = 51996,
};

enum ShamanPetCalculate
{
    SPELL_FERAL_SPIRIT_PET_SCALING_04  = 61783,
};

enum MiscPetCalculate
{
    SPELL_MAGE_PET_PASSIVE_ELEMENTAL   = 44559,
    SPELL_PET_HEALTH_SCALING           = 61679,
    SPELL_PET_UNK_01                   = 67561,
    SPELL_PET_UNK_02                   = 67557,
};

enum PetMisc
{
    MAP_ICC                            = 631,
    SPELL_HELLSCREAM_WARSONG_5         = 73816,
    SPELL_STRENGTH_OF_WRYNN_5          = 73762,
    SPELL_HELLSCREAM_WARSONG_10        = 73818,
    SPELL_STRENGTH_OF_WRYNN_10         = 73824,
    SPELL_AVOIDANCE                    = 32233
};

Welche Auren könnten verwendet werden? (Diese Auren werden im SunwellCore verwendet)

enum PetScalingSpells
{
    SPELL_PET_AVOIDANCE                    = 32233,

    SPELL_HUNTER_PET_SCALING_01            = 34902,
    SPELL_HUNTER_PET_SCALING_02            = 34903,
    SPELL_HUNTER_PET_SCALING_03            = 34904,
    SPELL_HUNTER_PET_SCALING_04            = 61017, // Hit / Expertise

    // Warlock
    SPELL_WARLOCK_PET_SCALING_01        = 34947,
    SPELL_WARLOCK_PET_SCALING_02        = 34956,
    SPELL_WARLOCK_PET_SCALING_03        = 34957,
    SPELL_WARLOCK_PET_SCALING_04        = 34958,
    SPELL_WARLOCK_PET_SCALING_05        = 61013, // Hit / Expertise
    SPELL_GLYPH_OF_FELGUARD                = 56246,
    SPELL_INFERNAL_SCALING_01            = 36186,
    SPELL_INFERNAL_SCALING_02            = 36188,
    SPELL_INFERNAL_SCALING_03            = 36189,
    SPELL_INFERNAL_SCALING_04            = 36190,
    SPELL_RITUAL_ENSLAVEMENT            = 22987,

    // Shaman
    SPELL_FERAL_SPIRIT_SPIRIT_HUNT        = 58877,
    SPELL_FERAL_SPIRIT_SCALING_01        = 35674,
    SPELL_FERAL_SPIRIT_SCALING_02        = 35675,
    SPELL_FERAL_SPIRIT_SCALING_03        = 35676,
    SPELL_FIRE_ELEMENTAL_SCALING_01        = 35665,
    SPELL_FIRE_ELEMENTAL_SCALING_02        = 35666,
    SPELL_FIRE_ELEMENTAL_SCALING_03        = 35667,
    SPELL_FIRE_ELEMENTAL_SCALING_04        = 35668,
    SPELL_EARTH_ELEMENTAL_SCALING_01    = 65225,
    SPELL_EARTH_ELEMENTAL_SCALING_02    = 65226,
    SPELL_EARTH_ELEMENTAL_SCALING_03    = 65227,
    SPELL_EARTH_ELEMENTAL_SCALING_04    = 65228,

    // Priest
    SPELL_SHADOWFIEND_SCALING_01        = 35661,
    SPELL_SHADOWFIEND_SCALING_02        = 35662,
    SPELL_SHADOWFIEND_SCALING_03        = 35663,
    SPELL_SHADOWFIEND_SCALING_04        = 35664,

    // Druid
    SPELL_TREANT_SCALING_01                = 35669,
    SPELL_TREANT_SCALING_02                = 35670,
    SPELL_TREANT_SCALING_03                = 35671,
    SPELL_TREANT_SCALING_04                = 35672,

    // Mage
    SPELL_MAGE_PET_SCALING_01            = 35657,
    SPELL_MAGE_PET_SCALING_02            = 35658,
    SPELL_MAGE_PET_SCALING_03            = 35659,
    SPELL_MAGE_PET_SCALING_04            = 35660,

    // Death Knight
    SPELL_ORC_RACIAL_COMMAND            = 65221,
    SPELL_NIGHT_OF_THE_DEAD_AVOIDANCE    = 62137,
    SPELL_DK_PET_SCALING_01                = 51996,
    SPELL_DK_PET_SCALING_02                = 54566,
    SPELL_DK_PET_SCALING_03                = 61697

};

Wie werden die Auren aufgetragen? (Istzustand im Sunwellcore)

bool Guardian::InitStatsForLevel(uint8 petlevel)
{ 
    CreatureTemplate const* cinfo = GetCreatureTemplate();
    ASSERT(cinfo);

    SetLevel(petlevel);
    SetCanModifyStats(true);

    Unit *m_owner = GetOwner();
    if (!m_owner) // just to be sure, asynchronous now
    {
        DespawnOrUnsummon(1000);
        return false;
    }

    //Determine pet type
    PetType petType = MAX_PET_TYPE;
    if (IsPet() && m_owner->GetTypeId() == TYPEID_PLAYER)
    {
        if (m_owner->getClass() == CLASS_WARLOCK ||
            m_owner->getClass() == CLASS_SHAMAN ||            // Fire Elemental
            m_owner->getClass() == CLASS_DEATH_KNIGHT ||    // Risen Ghoul
            m_owner->getClass() == CLASS_MAGE)                // Water Elemental with glyph
            petType = SUMMON_PET;
        else if (m_owner->getClass() == CLASS_HUNTER)
        {
            petType = HUNTER_PET;
            m_unitTypeMask |= UNIT_MASK_HUNTER_PET;
        }
        else
            sLog->outError("Unknown type pet %u is summoned by player class %u", GetEntry(), m_owner->getClass());
    }

    uint32 creature_ID = (petType == HUNTER_PET) ? 1 : cinfo->Entry;

    SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool));

    SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(petlevel*50));

    uint32 attackTime = BASE_ATTACK_TIME;
    if (m_owner->getClass() != CLASS_HUNTER && cinfo->baseattacktime >= 1000)
        attackTime = cinfo->baseattacktime;

    SetAttackTime(BASE_ATTACK, attackTime);
    SetAttackTime(OFF_ATTACK, attackTime);
    SetAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME);

    SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);

    //scale
    CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(cinfo->family);
    if (cFamily && cFamily->minScale > 0.0f && petType == HUNTER_PET)
    {
        float scale;
        if (getLevel() >= cFamily->maxScaleLevel)
            scale = 1.0f;
        else if (getLevel() <= cFamily->minScaleLevel)
            scale = 0.5f;
        else
            scale = 0.5f + 0.5f * float(getLevel() - cFamily->minScaleLevel) / float(cFamily->maxScaleLevel  - cFamily->minScaleLevel);

        SetObjectScale(scale);
    }

    // Resistance
    // xinef: hunter pets should not inherit template resistances
    if (!IsHunterPet())
        for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
            SetModifierValue(UnitMods(UNIT_MOD_RESISTANCE_START + i), BASE_VALUE, float(cinfo->resistance[i]));

    //health, mana, armor and resistance
    PetLevelInfo const* pInfo = sObjectMgr->GetPetLevelInfo(creature_ID, petlevel);
    if (pInfo)                                      // exist in DB
    {
        SetCreateHealth(pInfo->health);
        SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)pInfo->health);
        if (petType != HUNTER_PET) //hunter pet use focus
        {
            SetCreateMana(pInfo->mana);
            SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, (float)pInfo->mana);
        }

        if (pInfo->armor > 0)
            SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(pInfo->armor));

        for (uint8 stat = 0; stat < MAX_STATS; ++stat)
            SetCreateStat(Stats(stat), float(pInfo->stats[stat]));
    }
    else                                            // not exist in DB, use some default fake data
    {
        // remove elite bonuses included in DB values
        CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class);
        // xinef: multiply base values by creature_template factors!
        float factorHealth = m_owner->GetTypeId() == TYPEID_PLAYER ? std::min(1.0f, cinfo->ModHealth) : cinfo->ModHealth;
        float factorMana = m_owner->GetTypeId() == TYPEID_PLAYER ? std::min(1.0f, cinfo->ModMana) : cinfo->ModMana;

        SetCreateHealth(std::max<uint32>(1, stats->BaseHealth[cinfo->expansion]*factorHealth));
        SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, GetCreateHealth());
        SetCreateMana(stats->BaseMana*factorMana);
        SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, GetCreateMana());

        // xinef: added some multipliers so debuffs can affect pets in any way...
        SetCreateStat(STAT_STRENGTH, 22 + 2*petlevel);
        SetCreateStat(STAT_AGILITY, 22 + 1.5f*petlevel);
        SetCreateStat(STAT_STAMINA, 25 + 2*petlevel);
        SetCreateStat(STAT_INTELLECT, 28 + 2*petlevel);
        SetCreateStat(STAT_SPIRIT, 27 + 1.5f*petlevel);
    }

    switch (petType)
    {
        case HUNTER_PET:
        {
            SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
            SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
            SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR));
            break;
        }
        case SUMMON_PET:
        {
            SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
            SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));

            switch(GetEntry())
            {
                case NPC_FELGUARD:
                {
                    float highAmt = petlevel / 11.0f;
                    float lowAmt = petlevel / 12.0f;

                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, lowAmt*lowAmt*lowAmt);
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, highAmt*highAmt*highAmt);

                    // xinef: Glyph of Felguard, so ugly im crying... no appropriate spell
                    if (AuraEffect* aurEff = m_owner->GetAuraEffectDummy(SPELL_GLYPH_OF_FELGUARD))
                        SetModifierValue(UNIT_MOD_ATTACK_POWER, TOTAL_PCT, 1.0f + float(aurEff->GetAmount() / 100.0f));

                    break;
                }
                case NPC_WATER_ELEMENTAL_PERM:
                {
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_MAGE_PET_SCALING_01, this);
                    AddAura(SPELL_MAGE_PET_SCALING_02, this);
                    AddAura(SPELL_MAGE_PET_SCALING_03, this);
                    AddAura(SPELL_MAGE_PET_SCALING_04, this);
                    ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
                    break;
                }
            }
            break;
        }
        default:
        {
            switch (GetEntry())
            {
                case NPC_FIRE_ELEMENTAL:
                {
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 3.5f - petlevel));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 3.5f + petlevel));
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_FIRE_ELEMENTAL_SCALING_01, this);
                    AddAura(SPELL_FIRE_ELEMENTAL_SCALING_02, this);
                    AddAura(SPELL_FIRE_ELEMENTAL_SCALING_03, this);
                    AddAura(SPELL_FIRE_ELEMENTAL_SCALING_04, this);
                    break;
                }
                case NPC_EARTH_ELEMENTAL:
                {
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.0f - petlevel));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.0f + petlevel));
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_EARTH_ELEMENTAL_SCALING_01, this);
                    AddAura(SPELL_EARTH_ELEMENTAL_SCALING_02, this);
                    AddAura(SPELL_EARTH_ELEMENTAL_SCALING_03, this);
                    AddAura(SPELL_EARTH_ELEMENTAL_SCALING_04, this);
                    break;
                }
                case NPC_INFERNAL:
                {
                    float highAmt = petlevel / 11.0f;
                    float lowAmt = petlevel / 12.0f;
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, lowAmt*lowAmt*lowAmt);
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, highAmt*highAmt*highAmt);

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_05, this);
                    AddAura(SPELL_INFERNAL_SCALING_01, this);
                    AddAura(SPELL_INFERNAL_SCALING_02, this);
                    AddAura(SPELL_INFERNAL_SCALING_03, this);
                    AddAura(SPELL_INFERNAL_SCALING_04, this);
                    break;
                }
                case NPC_DOOMGUARD:
                {
                    float highAmt = petlevel / 11.0f;
                    float lowAmt = petlevel / 12.0f;
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, lowAmt*lowAmt*lowAmt);
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, highAmt*highAmt*highAmt);

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_01, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_02, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_03, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_04, this);
                    AddAura(SPELL_WARLOCK_PET_SCALING_05, this);
                    break;
                }
                case NPC_WATER_ELEMENTAL_TEMP:
                {
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_MAGE_PET_SCALING_01, this);
                    AddAura(SPELL_MAGE_PET_SCALING_02, this);
                    AddAura(SPELL_MAGE_PET_SCALING_03, this);
                    AddAura(SPELL_MAGE_PET_SCALING_04, this);
                    ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
                    break;
                }
                case NPC_TREANT: //force of nature
                {
                    if (!pInfo)
                        SetCreateHealth(30 + 30*petlevel);

                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.5f - petlevel));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.5f + petlevel));

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_TREANT_SCALING_01, this);
                    AddAura(SPELL_TREANT_SCALING_02, this);
                    AddAura(SPELL_TREANT_SCALING_03, this);
                    AddAura(SPELL_TREANT_SCALING_04, this);
                    break;
                }
                case NPC_SHADOWFIEND:
                {
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.5f - petlevel));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.5f + petlevel));

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_SHADOWFIEND_SCALING_01, this);
                    AddAura(SPELL_SHADOWFIEND_SCALING_02, this);
                    AddAura(SPELL_SHADOWFIEND_SCALING_03, this);
                    AddAura(SPELL_SHADOWFIEND_SCALING_04, this);
                    break;
                }
                case NPC_FERAL_SPIRIT:
                {
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 4.0f - petlevel));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 4.0f + petlevel));

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_FERAL_SPIRIT_SPIRIT_HUNT, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_FERAL_SPIRIT_SCALING_01, this);
                    AddAura(SPELL_FERAL_SPIRIT_SCALING_02, this);
                    AddAura(SPELL_FERAL_SPIRIT_SCALING_03, this);
                    break;
                }
                case NPC_MIRROR_IMAGE: // Mirror Image
                {
                    SetDisplayId(m_owner->GetDisplayId());
                    if (!pInfo)
                    {
                        SetCreateMana(28 + 30*petlevel);
                        SetCreateHealth(28 + 10*petlevel);
                    }

                    AddAura(SPELL_PET_AVOIDANCE, this);
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_MAGE_PET_SCALING_01, this);
                    AddAura(SPELL_MAGE_PET_SCALING_02, this);
                    AddAura(SPELL_MAGE_PET_SCALING_03, this);
                    AddAura(SPELL_MAGE_PET_SCALING_04, this);
                    break;
                }
                case NPC_EBON_GARGOYLE: // Ebon Gargoyle
                {
                    if (!pInfo)
                    {
                        SetCreateMana(28 + 10*petlevel);
                        SetCreateHealth(28 + 30*petlevel);
                    }

                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_DK_PET_SCALING_01, this);
                    AddAura(SPELL_DK_PET_SCALING_02, this);
                    AddAura(SPELL_DK_PET_SCALING_03, this);
                    break;
                }
                case NPC_BLOODWORM:
                {
                    // Xinef: Hit / Expertise scaling
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    SetCreateHealth(4 * petlevel);
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - 30 - (petlevel / 4) + m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.006f));
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel - 30 + (petlevel / 4) + m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.006f));
                    break;
                }
                case NPC_ARMY_OF_THE_DEAD:
                {
                    AddAura(SPELL_HUNTER_PET_SCALING_04, this);
                    AddAura(SPELL_DK_PET_SCALING_01, this);
                    AddAura(SPELL_PET_AVOIDANCE, this);
                    break;
                }
                case NPC_GENERIC_IMP:
                case NPC_GENERIC_VOIDWALKER:
                { 
                    SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); 
                    SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); 
                    break; 
                }
            }
            break;
        }
    }

    // Can be summon and guardian
    if (GetEntry() == NPC_RISEN_GHOUL)
    {
        // xinef: fixes orc death knight command racial
        if (m_owner->getRace() == RACE_ORC)
            CastSpell(this, SPELL_ORC_RACIAL_COMMAND, true, NULL, NULL, m_owner->GetGUID());

        // Avoidance, Night of the Dead
        if (Aura *aur = AddAura(SPELL_NIGHT_OF_THE_DEAD_AVOIDANCE, this))
            if (AuraEffect *aurEff = m_owner->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_DEATHKNIGHT, 2718, 0))
                if (aur->GetEffect(0))
                    aur->GetEffect(0)->SetAmount(-aurEff->GetSpellInfo()->Effects[EFFECT_2].CalcValue());

        AddAura(SPELL_HUNTER_PET_SCALING_04, this);
        // Added to perm ghoul by default
        if (!IsPet())
        {
            AddAura(SPELL_DK_PET_SCALING_01, this);
            AddAura(SPELL_DK_PET_SCALING_02, this);
        }
    }

    UpdateAllStats();

    SetFullHealth();
    SetPower(POWER_MANA, GetMaxPower(POWER_MANA));
    return true;
}


Wie sieht das Skipt zu den Spells aus? (Istzustand im SunwellCore)

https://paste.rising-gods.de/view/f18ef1b9

Durchsuchen entsprechend mit Strg + F :P

Aktionen

Auch abrufbar als: Atom PDF