Fehler #19148
geschlossenFehler #5667: Petscaling - Hauptticket
[Petscaling] Übersicht zu verwendeten Spells und möglicher Recheck
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