Core/Creatures: Refactor CreatureEliteType (#29525)

* Turn into enum class with official names
This commit is contained in:
Teleqraph
2023-12-28 19:11:54 +01:00
committed by GitHub
parent 9c24f3ecd3
commit bfbda8dcce
14 changed files with 247 additions and 187 deletions
@@ -0,0 +1,2 @@
ALTER TABLE `creature_template`
CHANGE COLUMN `rank` `Classification` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `scale`;
+71 -54
View File
@@ -192,7 +192,7 @@ WorldPacket CreatureTemplate::BuildQueryData(LocaleConstant loc, Difficulty diff
stats.CreatureType = type;
stats.CreatureFamily = family;
stats.Classification = rank;
stats.Classification = uint32(Classification);
for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i)
stats.ProxyCreatureID[i] = KillCredit[i];
@@ -1114,19 +1114,25 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, Posit
if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS && map->IsDungeon())
m_respawnDelay = 0; // special value, prevents respawn for dungeon bosses unless overridden
switch (cinfo->rank)
switch (GetCreatureClassification())
{
case CREATURE_ELITE_RARE:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_RARE);
break;
case CREATURE_ELITE_ELITE:
case CreatureClassifications::Elite:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_ELITE);
break;
case CREATURE_ELITE_RAREELITE:
case CreatureClassifications::RareElite:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_RAREELITE);
break;
case CREATURE_ELITE_WORLDBOSS:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_WORLDBOSS);
case CreatureClassifications::Obsolete:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_OBSOLETE);
break;
case CreatureClassifications::Rare:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_RARE);
break;
case CreatureClassifications::Trivial:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_TRIVIAL);
break;
case CreatureClassifications::MinusMob:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_MINUSMOB);
break;
default:
m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_NORMAL);
@@ -1574,12 +1580,12 @@ void Creature::SelectLevel()
void Creature::UpdateLevelDependantStats()
{
CreatureTemplate const* cInfo = GetCreatureTemplate();
uint32 rank = IsPet() ? 0 : cInfo->rank;
CreatureClassifications classification = IsPet() ? CreatureClassifications::Normal : cInfo->Classification;
uint8 level = GetLevel();
CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(level, cInfo->unit_class);
// health
float healthmod = _GetHealthMod(rank);
float healthmod = GetHealthMod(classification);
uint32 basehp = GetMaxHealthByLevel(level);
uint32 health = uint32(basehp * healthmod);
@@ -1641,22 +1647,26 @@ void Creature::SelectWildBattlePetLevel()
}
}
float Creature::_GetHealthMod(int32 Rank)
float Creature::GetHealthMod(CreatureClassifications classification)
{
switch (Rank) // define rates for each elite rank
switch (classification)
{
case CREATURE_ELITE_NORMAL:
return sWorld->getRate(RATE_CREATURE_NORMAL_HP);
case CREATURE_ELITE_ELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
case CREATURE_ELITE_RAREELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_RAREELITE_HP);
case CREATURE_ELITE_WORLDBOSS:
return sWorld->getRate(RATE_CREATURE_ELITE_WORLDBOSS_HP);
case CREATURE_ELITE_RARE:
return sWorld->getRate(RATE_CREATURE_ELITE_RARE_HP);
case CreatureClassifications::Normal:
return sWorld->getRate(RATE_CREATURE_HP_NORMAL);
case CreatureClassifications::Elite:
return sWorld->getRate(RATE_CREATURE_HP_ELITE);
case CreatureClassifications::RareElite:
return sWorld->getRate(RATE_CREATURE_HP_RAREELITE);
case CreatureClassifications::Obsolete:
return sWorld->getRate(RATE_CREATURE_HP_OBSOLETE);
case CreatureClassifications::Rare:
return sWorld->getRate(RATE_CREATURE_HP_RARE);
case CreatureClassifications::Trivial:
return sWorld->getRate(RATE_CREATURE_HP_TRIVIAL);
case CreatureClassifications::MinusMob:
return sWorld->getRate(RATE_CREATURE_HP_MINUSMOB);
default:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_HP);
return sWorld->getRate(RATE_CREATURE_HP_ELITE);
}
}
@@ -1666,41 +1676,49 @@ void Creature::LowerPlayerDamageReq(uint64 unDamage)
m_PlayerDamageReq > unDamage ? m_PlayerDamageReq -= unDamage : m_PlayerDamageReq = 0;
}
float Creature::_GetDamageMod(int32 Rank)
float Creature::GetDamageMod(CreatureClassifications classification)
{
switch (Rank) // define rates for each elite rank
switch (classification)
{
case CREATURE_ELITE_NORMAL:
return sWorld->getRate(RATE_CREATURE_NORMAL_DAMAGE);
case CREATURE_ELITE_ELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_DAMAGE);
case CREATURE_ELITE_RAREELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_RAREELITE_DAMAGE);
case CREATURE_ELITE_WORLDBOSS:
return sWorld->getRate(RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE);
case CREATURE_ELITE_RARE:
return sWorld->getRate(RATE_CREATURE_ELITE_RARE_DAMAGE);
case CreatureClassifications::Normal:
return sWorld->getRate(RATE_CREATURE_DAMAGE_NORMAL);
case CreatureClassifications::Elite:
return sWorld->getRate(RATE_CREATURE_DAMAGE_ELITE);
case CreatureClassifications::RareElite:
return sWorld->getRate(RATE_CREATURE_DAMAGE_RAREELITE);
case CreatureClassifications::Obsolete:
return sWorld->getRate(RATE_CREATURE_DAMAGE_OBSOLETE);
case CreatureClassifications::Rare:
return sWorld->getRate(RATE_CREATURE_DAMAGE_RARE);
case CreatureClassifications::Trivial:
return sWorld->getRate(RATE_CREATURE_DAMAGE_TRIVIAL);
case CreatureClassifications::MinusMob:
return sWorld->getRate(RATE_CREATURE_DAMAGE_MINUSMOB);
default:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_DAMAGE);
return sWorld->getRate(RATE_CREATURE_DAMAGE_ELITE);
}
}
float Creature::GetSpellDamageMod(int32 Rank) const
float Creature::GetSpellDamageMod(CreatureClassifications classification) const
{
switch (Rank) // define rates for each elite rank
switch (classification)
{
case CREATURE_ELITE_NORMAL:
return sWorld->getRate(RATE_CREATURE_NORMAL_SPELLDAMAGE);
case CREATURE_ELITE_ELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE);
case CREATURE_ELITE_RAREELITE:
return sWorld->getRate(RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE);
case CREATURE_ELITE_WORLDBOSS:
return sWorld->getRate(RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE);
case CREATURE_ELITE_RARE:
return sWorld->getRate(RATE_CREATURE_ELITE_RARE_SPELLDAMAGE);
case CreatureClassifications::Normal:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_NORMAL);
case CreatureClassifications::Elite:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_ELITE);
case CreatureClassifications::RareElite:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_RAREELITE);
case CreatureClassifications::Obsolete:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_OBSOLETE);
case CreatureClassifications::Rare:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_RARE);
case CreatureClassifications::Trivial:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_TRIVIAL);
case CreatureClassifications::MinusMob:
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_MINUSMOB);
default:
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE);
return sWorld->getRate(RATE_CREATURE_SPELLDAMAGE_ELITE);
}
}
@@ -1948,7 +1966,7 @@ void Creature::SetSpawnHealth()
curhealth = m_creatureData->curhealth;
if (curhealth)
{
curhealth = uint32(curhealth*_GetHealthMod(GetCreatureTemplate()->rank));
curhealth = uint32(curhealth*GetHealthMod(GetCreatureTemplate()->Classification));
if (curhealth < 1)
curhealth = 1;
}
@@ -2444,13 +2462,12 @@ bool Creature::IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInf
return Unit::IsImmunedToSpellEffect(spellInfo, spellEffectInfo, caster, requireImmunityPurgesEffectAttribute);
}
bool Creature::isElite() const
bool Creature::IsElite() const
{
if (IsPet())
return false;
uint32 rank = GetCreatureTemplate()->rank;
return rank != CREATURE_ELITE_NORMAL && rank != CREATURE_ELITE_RARE;
return HasClassification(CreatureClassifications::Elite) || HasClassification(CreatureClassifications::RareElite);
}
bool Creature::isWorldBoss() const
+7 -4
View File
@@ -129,6 +129,9 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
MovementGeneratorType GetDefaultMovementType() const override { return m_defaultMovementType; }
void SetDefaultMovementType(MovementGeneratorType mgt) { m_defaultMovementType = mgt; }
CreatureClassifications GetCreatureClassification() const { return GetCreatureTemplate()->Classification; }
bool HasClassification(CreatureClassifications classification) const { return GetCreatureTemplate()->Classification == classification; }
bool IsDungeonBoss() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS) != 0; }
bool IsAffectedByDiminishingReturns() const override { return Unit::IsAffectedByDiminishingReturns() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH) != 0; }
@@ -157,7 +160,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool CanCreatureAttack(Unit const* victim, bool force = true) const;
void LoadTemplateImmunities();
bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
bool isElite() const;
bool IsElite() const;
bool isWorldBoss() const;
bool HasScalableLevels() const;
@@ -208,7 +211,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
uint8 GetCurrentEquipmentId() const { return m_equipmentId; }
void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; }
float GetSpellDamageMod(int32 Rank) const;
float GetSpellDamageMod(CreatureClassifications classification) const;
VendorItemData const* GetVendorItems() const;
uint32 GetVendorItemCurrentCount(VendorItem const* vItem);
@@ -366,7 +369,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
void SetRespawnCompatibilityMode(bool mode = true) { m_respawnCompatibilityMode = mode; }
bool GetRespawnCompatibilityMode() { return m_respawnCompatibilityMode; }
static float _GetDamageMod(int32 Rank);
static float GetDamageMod(CreatureClassifications classification);
float m_SightDistance, m_CombatDistance;
@@ -436,7 +439,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
// vendor items
VendorItemCounts m_vendorItemCounts;
static float _GetHealthMod(int32 Rank);
static float GetHealthMod(CreatureClassifications classification);
GuidUnorderedSet m_tapList;
bool m_dontClearTapListOnEvade;
@@ -518,7 +518,7 @@ struct TC_GAME_API CreatureTemplate
float speed_walk;
float speed_run;
float scale;
uint32 rank;
CreatureClassifications Classification;
uint32 dmgschool;
uint32 BaseAttackTime;
uint32 RangeAttackTime;
+1 -1
View File
@@ -908,7 +908,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
ApplyLevelScaling();
CreatureDifficulty const* creatureDifficulty = GetCreatureDifficulty();
SetCreateHealth(std::max(sDB2Manager.EvaluateExpectedStat(ExpectedStatType::CreatureHealth, petlevel, creatureDifficulty->GetHealthScalingExpansion(), m_unitData->ContentTuningID, Classes(cinfo->unit_class), 0) * creatureDifficulty->HealthModifier * _GetHealthMod(cinfo->rank), 1.0f));
SetCreateHealth(std::max(sDB2Manager.EvaluateExpectedStat(ExpectedStatType::CreatureHealth, petlevel, creatureDifficulty->GetHealthScalingExpansion(), m_unitData->ContentTuningID, Classes(cinfo->unit_class), 0) * creatureDifficulty->HealthModifier * GetHealthMod(cinfo->Classification), 1.0f));
SetCreateMana(stats->BaseMana);
SetCreateStat(STAT_STRENGTH, 22);
SetCreateStat(STAT_AGILITY, 22);
+1 -1
View File
@@ -1034,7 +1034,7 @@ void Creature::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized,
float basePct = GetPctModifierValue(unitMod, BASE_PCT) * attackSpeedMulti;
float totalValue = GetFlatModifierValue(unitMod, TOTAL_VALUE);
float totalPct = addTotalPct ? GetPctModifierValue(unitMod, TOTAL_PCT) : 1.0f;
float dmgMultiplier = GetCreatureDifficulty()->DamageModifier; // = DamageModifier * _GetDamageMod(rank);
float dmgMultiplier = GetCreatureDifficulty()->DamageModifier; // = DamageModifier * GetDamageMod(rank);
minDamage = ((weaponMinDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
maxDamage = ((weaponMaxDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
+1 -1
View File
@@ -6635,7 +6635,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage
// Pet damage?
if (GetTypeId() == TYPEID_UNIT && !IsPet())
DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->rank);
DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->Classification);
// Versatility
if (Player* modOwner = GetSpellModOwner())
+2 -2
View File
@@ -427,7 +427,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.speed_walk = fields[12].GetFloat();
creatureTemplate.speed_run = fields[13].GetFloat();
creatureTemplate.scale = fields[14].GetFloat();
creatureTemplate.rank = uint32(fields[15].GetUInt8());
creatureTemplate.Classification = CreatureClassifications(fields[15].GetUInt8());
creatureTemplate.dmgschool = uint32(fields[16].GetInt8());
creatureTemplate.BaseAttackTime = fields[17].GetUInt32();
creatureTemplate.RangeAttackTime = fields[18].GetUInt32();
@@ -973,7 +973,7 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()
CreatureStaticFlags6(fields[23].GetUInt32()), CreatureStaticFlags7(fields[24].GetUInt32()), CreatureStaticFlags8(fields[25].GetUInt32()));
// TODO: Check if this still applies
creatureDifficulty.DamageModifier *= Creature::_GetDamageMod(itr->second.rank);
creatureDifficulty.DamageModifier *= Creature::GetDamageMod(itr->second.Classification);
if (creatureDifficulty.HealthScalingExpansion < EXPANSION_LEVEL_CURRENT || creatureDifficulty.HealthScalingExpansion >= MAX_EXPANSIONS)
{
+1 -1
View File
@@ -191,7 +191,7 @@ namespace Trinity
if ((uint32(creature->GetCreatureDifficulty()->GetHealthScalingExpansion()) < GetExpansionForLevel(player->GetLevel())))
gain = uint32(round(gain / 10.0f));
if (creature->isElite())
if (creature->IsElite())
{
// Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus.
if (u->GetMap()->IsDungeon())
@@ -4727,15 +4727,15 @@ enum CreatureTypeFlags2
CREATURE_TYPE_FLAG_2_UNK8 = 0x00000080
};
enum CreatureEliteType
enum class CreatureClassifications : uint32
{
CREATURE_ELITE_NORMAL = 0,
CREATURE_ELITE_ELITE = 1,
CREATURE_ELITE_RAREELITE = 2,
CREATURE_ELITE_WORLDBOSS = 3,
CREATURE_ELITE_RARE = 4,
CREATURE_ELITE_TRIVIAL = 5, // found in 2.2.3 for 2 mobs
CREATURE_WEAK = 6
Normal = 0,
Elite = 1,
RareElite = 2,
Obsolete = 3,
Rare = 4,
Trivial = 5,
MinusMob = 6
};
// Holidays.dbc (9.0.2.37176)
+1 -1
View File
@@ -3832,7 +3832,7 @@ void Spell::EffectSkinning()
if (uint32 pureSkillValue = player->GetPureSkillValue(skinningSkill))
{
// Double chances for elites
player->UpdateGatherSkill(skinningSkill, pureSkillValue, reqValue, creature->isElite() ? 2 : 1);
player->UpdateGatherSkill(skinningSkill, pureSkillValue, reqValue, creature->IsElite() ? 2 : 1);
}
}
}
+41 -34
View File
@@ -659,36 +659,42 @@ void World::LoadConfigSettings(bool reload)
TC_LOG_ERROR("server.loading", "Rate.RepairCost ({}) must be >=0. Using 0.0 instead.", rate_values[RATE_REPAIRCOST]);
rate_values[RATE_REPAIRCOST] = 0.0f;
}
rate_values[RATE_REPUTATION_GAIN] = sConfigMgr->GetFloatDefault("Rate.Reputation.Gain", 1.0f);
rate_values[RATE_REPUTATION_LOWLEVEL_KILL] = sConfigMgr->GetFloatDefault("Rate.Reputation.LowLevel.Kill", 1.0f);
rate_values[RATE_REPUTATION_LOWLEVEL_QUEST] = sConfigMgr->GetFloatDefault("Rate.Reputation.LowLevel.Quest", 1.0f);
rate_values[RATE_REPUTATION_GAIN] = sConfigMgr->GetFloatDefault("Rate.Reputation.Gain", 1.0f);
rate_values[RATE_REPUTATION_LOWLEVEL_KILL] = sConfigMgr->GetFloatDefault("Rate.Reputation.LowLevel.Kill", 1.0f);
rate_values[RATE_REPUTATION_LOWLEVEL_QUEST] = sConfigMgr->GetFloatDefault("Rate.Reputation.LowLevel.Quest", 1.0f);
rate_values[RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS] = sConfigMgr->GetFloatDefault("Rate.Reputation.RecruitAFriendBonus", 0.1f);
rate_values[RATE_CREATURE_NORMAL_DAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Normal.Damage", 1.0f);
rate_values[RATE_CREATURE_ELITE_ELITE_DAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.Elite.Damage", 1.0f);
rate_values[RATE_CREATURE_ELITE_RAREELITE_DAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RAREELITE.Damage", 1.0f);
rate_values[RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.WORLDBOSS.Damage", 1.0f);
rate_values[RATE_CREATURE_ELITE_RARE_DAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RARE.Damage", 1.0f);
rate_values[RATE_CREATURE_NORMAL_HP] = sConfigMgr->GetFloatDefault("Rate.Creature.Normal.HP", 1.0f);
rate_values[RATE_CREATURE_ELITE_ELITE_HP] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.Elite.HP", 1.0f);
rate_values[RATE_CREATURE_ELITE_RAREELITE_HP] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RAREELITE.HP", 1.0f);
rate_values[RATE_CREATURE_ELITE_WORLDBOSS_HP] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.WORLDBOSS.HP", 1.0f);
rate_values[RATE_CREATURE_ELITE_RARE_HP] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RARE.HP", 1.0f);
rate_values[RATE_CREATURE_NORMAL_SPELLDAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Normal.SpellDamage", 1.0f);
rate_values[RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.Elite.SpellDamage", 1.0f);
rate_values[RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RAREELITE.SpellDamage", 1.0f);
rate_values[RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.WORLDBOSS.SpellDamage", 1.0f);
rate_values[RATE_CREATURE_ELITE_RARE_SPELLDAMAGE] = sConfigMgr->GetFloatDefault("Rate.Creature.Elite.RARE.SpellDamage", 1.0f);
rate_values[RATE_CREATURE_AGGRO] = sConfigMgr->GetFloatDefault("Rate.Creature.Aggro", 1.0f);
rate_values[RATE_REST_INGAME] = sConfigMgr->GetFloatDefault("Rate.Rest.InGame", 1.0f);
rate_values[RATE_REST_OFFLINE_IN_TAVERN_OR_CITY] = sConfigMgr->GetFloatDefault("Rate.Rest.Offline.InTavernOrCity", 1.0f);
rate_values[RATE_REST_OFFLINE_IN_WILDERNESS] = sConfigMgr->GetFloatDefault("Rate.Rest.Offline.InWilderness", 1.0f);
rate_values[RATE_DAMAGE_FALL] = sConfigMgr->GetFloatDefault("Rate.Damage.Fall", 1.0f);
rate_values[RATE_AUCTION_TIME] = sConfigMgr->GetFloatDefault("Rate.Auction.Time", 1.0f);
rate_values[RATE_AUCTION_DEPOSIT] = sConfigMgr->GetFloatDefault("Rate.Auction.Deposit", 1.0f);
rate_values[RATE_AUCTION_CUT] = sConfigMgr->GetFloatDefault("Rate.Auction.Cut", 1.0f);
rate_values[RATE_HONOR] = sConfigMgr->GetFloatDefault("Rate.Honor", 1.0f);
rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetFloatDefault("Rate.InstanceResetTime", 1.0f);
rate_values[RATE_TALENT] = sConfigMgr->GetFloatDefault("Rate.Talent", 1.0f);
rate_values[RATE_CREATURE_HP_NORMAL] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.Normal", 1.0f);
rate_values[RATE_CREATURE_HP_ELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.Elite", 1.0f);
rate_values[RATE_CREATURE_HP_RAREELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.RareElite", 1.0f);
rate_values[RATE_CREATURE_HP_OBSOLETE] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.Obsolete", 1.0f);
rate_values[RATE_CREATURE_HP_RARE] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.Rare", 1.0f);
rate_values[RATE_CREATURE_HP_TRIVIAL] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.Trivial", 1.0f);
rate_values[RATE_CREATURE_HP_MINUSMOB] = sConfigMgr->GetFloatDefault("Rate.Creature.HP.MinusMob", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_NORMAL] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.Normal", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_ELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.Elite", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_RAREELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.RareElite", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_OBSOLETE] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.Obsolete", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_RARE] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.Rare", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_TRIVIAL] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.Trivial", 1.0f);
rate_values[RATE_CREATURE_DAMAGE_MINUSMOB] = sConfigMgr->GetFloatDefault("Rate.Creature.Damage.MinusMob", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_NORMAL] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.Normal", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_ELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.Elite", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_RAREELITE] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.RareElite", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_OBSOLETE] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.Obsolete", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_RARE] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.Rare", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_TRIVIAL] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.Trivial", 1.0f);
rate_values[RATE_CREATURE_SPELLDAMAGE_MINUSMOB] = sConfigMgr->GetFloatDefault("Rate.Creature.SpellDamage.MinusMob", 1.0f);
rate_values[RATE_CREATURE_AGGRO] = sConfigMgr->GetFloatDefault("Rate.Creature.Aggro", 1.0f);
rate_values[RATE_REST_INGAME] = sConfigMgr->GetFloatDefault("Rate.Rest.InGame", 1.0f);
rate_values[RATE_REST_OFFLINE_IN_TAVERN_OR_CITY] = sConfigMgr->GetFloatDefault("Rate.Rest.Offline.InTavernOrCity", 1.0f);
rate_values[RATE_REST_OFFLINE_IN_WILDERNESS] = sConfigMgr->GetFloatDefault("Rate.Rest.Offline.InWilderness", 1.0f);
rate_values[RATE_DAMAGE_FALL] = sConfigMgr->GetFloatDefault("Rate.Damage.Fall", 1.0f);
rate_values[RATE_AUCTION_TIME] = sConfigMgr->GetFloatDefault("Rate.Auction.Time", 1.0f);
rate_values[RATE_AUCTION_DEPOSIT] = sConfigMgr->GetFloatDefault("Rate.Auction.Deposit", 1.0f);
rate_values[RATE_AUCTION_CUT] = sConfigMgr->GetFloatDefault("Rate.Auction.Cut", 1.0f);
rate_values[RATE_HONOR] = sConfigMgr->GetFloatDefault("Rate.Honor", 1.0f);
rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetFloatDefault("Rate.InstanceResetTime", 1.0f);
rate_values[RATE_TALENT] = sConfigMgr->GetFloatDefault("Rate.Talent", 1.0f);
if (rate_values[RATE_TALENT] < 0.0f)
{
TC_LOG_ERROR("server.loading", "Rate.Talent ({}) must be > 0. Using 1 instead.", rate_values[RATE_TALENT]);
@@ -1291,11 +1297,12 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY] = sConfigMgr->GetIntDefault("ChatStrictLinkChecking.Severity", 0);
m_int_configs[CONFIG_CHAT_STRICT_LINK_CHECKING_KICK] = sConfigMgr->GetIntDefault("ChatStrictLinkChecking.Kick", 0);
m_int_configs[CONFIG_CORPSE_DECAY_NORMAL] = sConfigMgr->GetIntDefault("Corpse.Decay.NORMAL", 60);
m_int_configs[CONFIG_CORPSE_DECAY_RARE] = sConfigMgr->GetIntDefault("Corpse.Decay.RARE", 300);
m_int_configs[CONFIG_CORPSE_DECAY_ELITE] = sConfigMgr->GetIntDefault("Corpse.Decay.ELITE", 300);
m_int_configs[CONFIG_CORPSE_DECAY_RAREELITE] = sConfigMgr->GetIntDefault("Corpse.Decay.RAREELITE", 300);
m_int_configs[CONFIG_CORPSE_DECAY_WORLDBOSS] = sConfigMgr->GetIntDefault("Corpse.Decay.WORLDBOSS", 3600);
m_int_configs[CONFIG_CORPSE_DECAY_NORMAL] = sConfigMgr->GetIntDefault("Corpse.Decay.Normal", 60);
m_int_configs[CONFIG_CORPSE_DECAY_ELITE] = sConfigMgr->GetIntDefault("Corpse.Decay.Elite", 300);
m_int_configs[CONFIG_CORPSE_DECAY_RAREELITE] = sConfigMgr->GetIntDefault("Corpse.Decay.RareElite", 300);
m_int_configs[CONFIG_CORPSE_DECAY_OBSOLETE] = sConfigMgr->GetIntDefault("Corpse.Decay.Obsolete", 3600);
m_int_configs[CONFIG_CORPSE_DECAY_TRIVIAL] = sConfigMgr->GetIntDefault("Corpse.Decay.Trivial", 300);
m_int_configs[CONFIG_CORPSE_DECAY_MINUSMOB] = sConfigMgr->GetIntDefault("Corpse.Decay.MinusMob", 150);
m_int_configs[CONFIG_DEATH_SICKNESS_LEVEL] = sConfigMgr->GetIntDefault ("Death.SicknessLevel", 11);
m_bool_configs[CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP] = sConfigMgr->GetBoolDefault("Death.CorpseReclaimDelay.PvP", true);
+25 -17
View File
@@ -326,10 +326,12 @@ enum WorldIntConfigs
CONFIG_AUCTION_LEVEL_REQ,
CONFIG_MAIL_LEVEL_REQ,
CONFIG_CORPSE_DECAY_NORMAL,
CONFIG_CORPSE_DECAY_RARE,
CONFIG_CORPSE_DECAY_ELITE,
CONFIG_CORPSE_DECAY_RAREELITE,
CONFIG_CORPSE_DECAY_WORLDBOSS,
CONFIG_CORPSE_DECAY_OBSOLETE,
CONFIG_CORPSE_DECAY_RARE,
CONFIG_CORPSE_DECAY_TRIVIAL,
CONFIG_CORPSE_DECAY_MINUSMOB,
CONFIG_DEATH_SICKNESS_LEVEL,
CONFIG_INSTANT_LOGOUT,
CONFIG_DISABLE_BREATHING,
@@ -486,21 +488,27 @@ enum Rates
RATE_REPUTATION_LOWLEVEL_KILL,
RATE_REPUTATION_LOWLEVEL_QUEST,
RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS,
RATE_CREATURE_NORMAL_HP,
RATE_CREATURE_ELITE_ELITE_HP,
RATE_CREATURE_ELITE_RAREELITE_HP,
RATE_CREATURE_ELITE_WORLDBOSS_HP,
RATE_CREATURE_ELITE_RARE_HP,
RATE_CREATURE_NORMAL_DAMAGE,
RATE_CREATURE_ELITE_ELITE_DAMAGE,
RATE_CREATURE_ELITE_RAREELITE_DAMAGE,
RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE,
RATE_CREATURE_ELITE_RARE_DAMAGE,
RATE_CREATURE_NORMAL_SPELLDAMAGE,
RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE,
RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE,
RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE,
RATE_CREATURE_ELITE_RARE_SPELLDAMAGE,
RATE_CREATURE_HP_NORMAL,
RATE_CREATURE_HP_ELITE,
RATE_CREATURE_HP_RAREELITE,
RATE_CREATURE_HP_OBSOLETE,
RATE_CREATURE_HP_RARE,
RATE_CREATURE_HP_TRIVIAL,
RATE_CREATURE_HP_MINUSMOB,
RATE_CREATURE_DAMAGE_NORMAL,
RATE_CREATURE_DAMAGE_ELITE,
RATE_CREATURE_DAMAGE_RAREELITE,
RATE_CREATURE_DAMAGE_OBSOLETE,
RATE_CREATURE_DAMAGE_RARE,
RATE_CREATURE_DAMAGE_TRIVIAL,
RATE_CREATURE_DAMAGE_MINUSMOB,
RATE_CREATURE_SPELLDAMAGE_NORMAL,
RATE_CREATURE_SPELLDAMAGE_ELITE,
RATE_CREATURE_SPELLDAMAGE_RAREELITE,
RATE_CREATURE_SPELLDAMAGE_OBSOLETE,
RATE_CREATURE_SPELLDAMAGE_RARE,
RATE_CREATURE_SPELLDAMAGE_TRIVIAL,
RATE_CREATURE_SPELLDAMAGE_MINUSMOB,
RATE_CREATURE_AGGRO,
RATE_REST_INGAME,
RATE_REST_OFFLINE_IN_TAVERN_OR_CITY,
+85 -62
View File
@@ -1787,23 +1787,29 @@ CreatureFamilyFleeDelay = 7000
WorldBossLevelDiff = 3
#
# Corpse.Decay.NORMAL
# Corpse.Decay.RARE
# Corpse.Decay.ELITE
# Corpse.Decay.RAREELITE
# Corpse.Decay.WORLDBOSS
# Corpse.Decay.Normal
# Corpse.Decay.Elite
# Corpse.Decay.RareElite
# Corpse.Decay.Obsolete
# Corpse.Decay.Rare
# Corpse.Decay.Trivial
# Corpse.Decay.MinusMob
# Description: Time (in seconds) until creature corpse will decay if not looted or skinned.
# Default: 300 - (5 Minutes, Corpse.Decay.NORMAL)
# 300 - (5 Minutes, Corpse.Decay.RARE)
# 300 - (5 Minutes, Corpse.Decay.ELITE)
# 300 - (5 Minutes, Corpse.Decay.RAREELITE)
# 3600 - (1 Hour, Corpse.Decay.WORLDBOSS)
# Default: 300 - (5 Minutes, Corpse.Decay.Normal)
# 300 - (5 Minutes, Corpse.Decay.Elite)
# 300 - (5 Minutes, Corpse.Decay.RareElite)
# 3600 - (1 Hour, Corpse.Decay.Obsolete)
# 300 - (5 Minutes, Corpse.Decay.Rare)
# 300 - (5 Minutes, Corpse.Decay.Trivial)
# 150 - (2.5 Minutes, Corpse.Decay.MinusMob)
Corpse.Decay.NORMAL = 300
Corpse.Decay.RARE = 300
Corpse.Decay.ELITE = 300
Corpse.Decay.RAREELITE = 300
Corpse.Decay.WORLDBOSS = 3600
Corpse.Decay.Normal = 300
Corpse.Decay.Elite = 300
Corpse.Decay.RareElite = 300
Corpse.Decay.Obsolete = 3600
Corpse.Decay.Rare = 300
Corpse.Decay.Trivial = 300
Corpse.Decay.MinusMob = 150
#
# Rate.Corpse.Decay.Looted
@@ -1814,62 +1820,79 @@ Corpse.Decay.WORLDBOSS = 3600
Rate.Corpse.Decay.Looted = 0.5
#
# Rate.Creature.Normal.Damage
# Rate.Creature.Elite.Elite.Damage
# Rate.Creature.Elite.RARE.Damage
# Rate.Creature.Elite.RAREELITE.Damage
# Rate.Creature.Elite.WORLDBOSS.Damage
# Rate.Creature.Damage.Normal
# Rate.Creature.Damage.Elite
# Rate.Creature.Damage.RareElite
# Rate.Creature.Damage.Obsolete
# Rate.Creature.Damage.Rare
# Rate.Creature.Damage.Trivial
# Rate.Creature.Damage.MinusMob
# Description: Multiplier for creature melee damage.
# Default: 1 - (Rate.Creature.Normal.Damage)
# 1 - (Rate.Creature.Elite.Elite.Damage)
# 1 - (Rate.Creature.Elite.RARE.Damage)
# 1 - (Rate.Creature.Elite.RAREELITE.Damage)
# 1 - (Rate.Creature.Elite.WORLDBOSS.Damage)
#
# Default: 1 - (Rate.Creature.Damage.Normal)
# 1 - (Rate.Creature.Damage.Elite)
# 1 - (Rate.Creature.Damage.RareElite)
# 1 - (Rate.Creature.Damage.Obsolete)
# 1 - (Rate.Creature.Damage.Rare)
# 1 - (Rate.Creature.Damage.Trivial)
# 1 - (Rate.Creature.Damage.MinusMob)
Rate.Creature.Normal.Damage = 1
Rate.Creature.Elite.Elite.Damage = 1
Rate.Creature.Elite.RARE.Damage = 1
Rate.Creature.Elite.RAREELITE.Damage = 1
Rate.Creature.Elite.WORLDBOSS.Damage = 1
Rate.Creature.Damage.Normal = 1
Rate.Creature.Damage.Elite = 1
Rate.Creature.Damage.RareElite = 1
Rate.Creature.Damage.Obsolete = 1
Rate.Creature.Damage.Rare = 1
Rate.Creature.Damage.Trivial = 1
Rate.Creature.Damage.MinusMob = 1
#
# Rate.Creature.Normal.SpellDamage
# Rate.Creature.Elite.Elite.SpellDamage
# Rate.Creature.Elite.RARE.SpellDamage
# Rate.Creature.Elite.RAREELITE.SpellDamage
# Rate.Creature.Elite.WORLDBOSS.SpellDamage
# Rate.Creature.SpellDamage.Normal
# Rate.Creature.SpellDamage.Elite
# Rate.Creature.SpellDamage.RareElite
# Rate.Creature.SpellDamage.Obsolete
# Rate.Creature.SpellDamage.Rare
# Rate.Creature.SpellDamage.Trivial
# Rate.Creature.SpellDamage.MinusMob
# Description: Multiplier for creature spell damage.
# Default: 1 - (Rate.Creature.Normal.SpellDamage)
# 1 - (Rate.Creature.Elite.Elite.SpellDamage)
# 1 - (Rate.Creature.Elite.RARE.SpellDamage)
# 1 - (Rate.Creature.Elite.RAREELITE.SpellDamage)
# 1 - (Rate.Creature.Elite.WORLDBOSS.SpellDamage)
# Default: 1 - (Rate.Creature.SpellDamage.Normal)
# 1 - (Rate.Creature.SpellDamage.Elite)
# 1 - (Rate.Creature.SpellDamage.RareElite)
# 1 - (Rate.Creature.SpellDamage.Obsolete)
# 1 - (Rate.Creature.SpellDamage.Rare)
# 1 - (Rate.Creature.SpellDamage.Trivial)
# 1 - (Rate.Creature.SpellDamage.MinusMob)
Rate.Creature.Normal.SpellDamage = 1
Rate.Creature.Elite.Elite.SpellDamage = 1
Rate.Creature.Elite.RARE.SpellDamage = 1
Rate.Creature.Elite.RAREELITE.SpellDamage = 1
Rate.Creature.Elite.WORLDBOSS.SpellDamage = 1
Rate.Creature.SpellDamage.Normal = 1
Rate.Creature.SpellDamage.Elite = 1
Rate.Creature.SpellDamage.RareElite = 1
Rate.Creature.SpellDamage.Obsolete = 1
Rate.Creature.SpellDamage.Rare = 1
Rate.Creature.SpellDamage.Trivial = 1
Rate.Creature.SpellDamage.MinusMob = 1
#
# Rate.Creature.Normal.HP
# Rate.Creature.Elite.Elite.HP
# Rate.Creature.Elite.RARE.HP
# Rate.Creature.Elite.RAREELITE.HP
# Rate.Creature.Elite.WORLDBOSS.HP
# Description: Multiplier for creature health.
# Default: 1 - (Rate.Creature.Normal.HP)
# 1 - (Rate.Creature.Elite.Elite.HP)
# 1 - (Rate.Creature.Elite.RARE.HP)
# 1 - (Rate.Creature.Elite.RAREELITE.HP)
# 1 - (Rate.Creature.Elite.WORLDBOSS.HP)
# Rate.Creature.HP.Normal
# Rate.Creature.HP.Elite
# Rate.Creature.HP.RareElite
# Rate.Creature.HP.Obsolete
# Rate.Creature.HP.Rare
# Rate.Creature.HP.Trivial
# Rate.Creature.HP.MinusMob
# Description: Multiplier for creature spell damage.
# Default: 1 - (Rate.Creature.HP.Normal)
# 1 - (Rate.Creature.HP.Elite)
# 1 - (Rate.Creature.HP.RareElite)
# 1 - (Rate.Creature.HP.Obsolete)
# 1 - (Rate.Creature.HP.Rare)
# 1 - (Rate.Creature.HP.Trivial)
# 1 - (Rate.Creature.HP.MinusMob)
Rate.Creature.Normal.HP = 1
Rate.Creature.Elite.Elite.HP = 1
Rate.Creature.Elite.RARE.HP = 1
Rate.Creature.Elite.RAREELITE.HP = 1
Rate.Creature.Elite.WORLDBOSS.HP = 1
Rate.Creature.HP.Normal = 1
Rate.Creature.HP.Elite = 1
Rate.Creature.HP.RareElite = 1
Rate.Creature.HP.Obsolete = 1
Rate.Creature.HP.Rare = 1
Rate.Creature.HP.Trivial = 1
Rate.Creature.HP.MinusMob = 1
#
# Creature.PickPocketRefillDelay