diff options
| -rw-r--r-- | sql/updates/world/wotlk_classic/2024_01_09_01_world_2023_12_28_05_world.sql | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 129 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 11 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/Formulas.h | 2 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 18 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 75 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 42 | ||||
| -rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 163 | 
14 files changed, 258 insertions, 198 deletions
diff --git a/sql/updates/world/wotlk_classic/2024_01_09_01_world_2023_12_28_05_world.sql b/sql/updates/world/wotlk_classic/2024_01_09_01_world_2023_12_28_05_world.sql new file mode 100644 index 00000000000..43c067d7162 --- /dev/null +++ b/sql/updates/world/wotlk_classic/2024_01_09_01_world_2023_12_28_05_world.sql @@ -0,0 +1,2 @@ +ALTER TABLE `creature_template` +  CHANGE COLUMN `rank` `Classification` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `scale`; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 562ad95aafe..7ee64d90cdd 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -193,7 +193,7 @@ WorldPacket CreatureTemplate::BuildQueryData(LocaleConstant loc, Difficulty diff      stats.CreatureType = type;      stats.CreatureFamily = family; -    stats.Classification = rank; +    stats.Classification = uint32(Classification);      stats.PetSpellDataId = PetSpellDataID;      for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i) @@ -1109,19 +1109,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); @@ -1568,11 +1574,11 @@ void Creature::SelectLevel()  void Creature::UpdateLevelDependantStats()  {      CreatureTemplate const* cInfo = GetCreatureTemplate(); -    uint32 rank = IsPet() ? 0 : cInfo->rank; +    CreatureClassifications classification = IsPet() ? CreatureClassifications::Normal : cInfo->Classification;      CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(GetLevel(), cInfo->unit_class);      // health -    float healthmod = _GetHealthMod(rank); +    float healthmod = GetHealthMod(classification);      uint32 basehp = stats->GenerateHealth(m_creatureDifficulty);      uint32 health = uint32(basehp * healthmod); @@ -1634,22 +1640,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);      }  } @@ -1659,41 +1669,49 @@ void Creature::LowerPlayerDamageReq(uint64 unDamage)          m_PlayerDamageReq > unDamage ? m_PlayerDamageReq -= unDamage : m_PlayerDamageReq = 0;  } -float Creature::_GetDamageMod(int32 Rank) -{ -    switch (Rank)                                           // define rates for each elite rank -    { -        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); +float Creature::GetDamageMod(CreatureClassifications classification) +{ +    switch (classification) +    { +        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);      }  } @@ -1941,7 +1959,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;          } @@ -2437,13 +2455,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 diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 15902806b85..e051458e820 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -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;          uint8 GetLevelForTarget(WorldObject const* target) const override; @@ -197,7 +200,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); @@ -355,7 +358,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; @@ -425,7 +428,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; diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 1cca1bdea22..74c0a4bfd86 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -517,7 +517,7 @@ struct TC_GAME_API CreatureTemplate      float   speed_walk;      float   speed_run;      float   scale; -    uint32  rank; +    CreatureClassifications  Classification;      uint32  dmgschool;      uint32  BaseAttackTime;      uint32  RangeAttackTime; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 8389edbab1a..fe40abcf830 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -905,7 +905,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)      {          // remove elite bonuses included in DB values          CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class); -        float healthmod = _GetHealthMod(cinfo->rank); +        float healthmod = GetHealthMod(cinfo->Classification);          uint32 basehp = stats->GenerateHealth(m_creatureDifficulty);          uint32 health = uint32(basehp * healthmod);          uint32 mana = stats->GenerateMana(m_creatureDifficulty); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 1b00f4bd425..a748b08bd51 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -1016,7 +1016,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; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 292c3373dda..a4b6d67eab2 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6629,7 +6629,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()) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a0b0131d53b..725c993c021 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -424,7 +424,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(); @@ -971,7 +971,7 @@ void ObjectMgr::LoadCreatureTemplateDifficulty()              CreatureStaticFlags6(fields[22].GetUInt32()), CreatureStaticFlags7(fields[23].GetUInt32()),  CreatureStaticFlags8(fields[24].GetUInt32()));          // TODO: Check if this still applies -        creatureDifficulty.DamageModifier *= Creature::_GetDamageMod(itr->second.rank); +        creatureDifficulty.DamageModifier *= Creature::GetDamageMod(itr->second.Classification);          if (creatureDifficulty.MinLevel == 0 || creatureDifficulty.MaxLevel == 0)          { diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index b6b99a8f329..36b414ef51a 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -207,7 +207,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()) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index f9c8b69a155..1bc01278355 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -4729,15 +4729,15 @@ enum CreatureTypeFlags2      CREATURE_TYPE_FLAG_2_UNK8 = 0x00000080  }; -enum CreatureEliteType -{ -    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 +enum class CreatureClassifications : uint32 +{ +    Normal                    = 0, +    Elite                     = 1, +    RareElite                 = 2, +    Obsolete                  = 3, +    Rare                      = 4, +    Trivial                   = 5, +    MinusMob                  = 6  };  // Holidays.dbc (9.0.2.37176) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1898c064607..3914b9b384c 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3847,7 +3847,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);          }      }  } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index ec97769bf1d..5bede5835b1 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -657,36 +657,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]); @@ -1289,11 +1295,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); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index a377701631b..8329ce50d5b 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -327,10 +327,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, @@ -487,21 +489,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, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index efe0b7d74e6..ab209054792 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -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) - -Corpse.Decay.NORMAL    = 300 -Corpse.Decay.RARE      = 300 -Corpse.Decay.ELITE     = 300 -Corpse.Decay.RAREELITE = 300 -Corpse.Decay.WORLDBOSS = 3600 +#        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.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) -# - -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.Normal.SpellDamage -#    Rate.Creature.Elite.Elite.SpellDamage -#    Rate.Creature.Elite.RARE.SpellDamage -#    Rate.Creature.Elite.RAREELITE.SpellDamage -#    Rate.Creature.Elite.WORLDBOSS.SpellDamage +#        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.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.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.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.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.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.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) - -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.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.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 +#        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.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  | 
