From a46f98642bba5a1243aac098ea9a4a4c28b2137f Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 4 Feb 2024 14:42:40 -0500 Subject: [PATCH] Core/Creatures: Refactor CreatureEliteType Port From (https://github.com/TrinityCore/TrinityCore/commit/bfbda8dcce8d19dda0ee3d8f96d176901902e102) --- Source/Framework/Constants/CreatureConst.cs | 7 +- Source/Framework/Constants/SharedConst.cs | 40 +++-- .../Database/Databases/WorldDatabase.cs | 2 +- Source/Game/Entities/Creature/Creature.cs | 125 ++++++++------- Source/Game/Entities/Creature/CreatureData.cs | 4 +- Source/Game/Entities/TemporarySummon.cs | 2 +- Source/Game/Entities/Unit/Unit.Spells.cs | 2 +- Source/Game/Globals/ObjectManager.cs | 4 +- Source/Game/Server/WorldConfig.cs | 48 +++--- Source/WorldServer/WorldServer.conf.dist | 144 ++++++++++-------- 10 files changed, 218 insertions(+), 160 deletions(-) diff --git a/Source/Framework/Constants/CreatureConst.cs b/Source/Framework/Constants/CreatureConst.cs index c70074438..7c1dcc6f4 100644 --- a/Source/Framework/Constants/CreatureConst.cs +++ b/Source/Framework/Constants/CreatureConst.cs @@ -22,14 +22,15 @@ namespace Framework.Constants Destory = 4 // used on object destroy (NOT used in client packet handler) } - public enum CreatureEliteType + public enum CreatureClassifications { Normal = 0, Elite = 1, RareElite = 2, - WorldBoss = 3, + Obsolete = 3, Rare = 4, - EliteTrivial = 5 // found in 2.2.3 for 2 mobs + Trivial = 5, + MinusMob = 6 } [Flags] diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 5dc0cc50c..d0362bfa2 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -1583,10 +1583,12 @@ namespace Framework.Constants CommunityClubsEnabled, Compression, CorpseDecayElite, + CorpseDecayMinusMob, CorpseDecayNormal, + CorpseDecayObsolete, CorpseDecayRare, CorpseDecayRareelite, - CorpseDecayWorldboss, + CorpseDecayTrivial, CreatureCheckInvalidPostion, CreatureFamilyAssistanceDelay, CreatureFamilyAssistanceRadius, @@ -1713,21 +1715,27 @@ namespace Framework.Constants RateAuctionTime, RateCorpseDecayLooted, RateCreatureAggro, - RateCreatureEliteEliteDamage, - RateCreatureEliteEliteHp, - RateCreatureEliteEliteSpelldamage, - RateCreatureEliteRareDamage, - RateCreatureEliteRareHp, - RateCreatureEliteRareSpelldamage, - RateCreatureEliteRareeliteDamage, - RateCreatureEliteRareeliteHp, - RateCreatureEliteRareeliteSpelldamage, - RateCreatureEliteWorldbossDamage, - RateCreatureEliteWorldbossHp, - RateCreatureEliteWorldbossSpelldamage, - RateCreatureNormalDamage, - RateCreatureNormalHp, - RateCreatureNormalSpelldamage, + RateCreatureDamageElite, + RateCreatureDamageMinusmob, + RateCreatureDamageNormal, + RateCreatureDamageObsolete, + RateCreatureDamageRare, + RateCreatureDamageRareelite, + RateCreatureDamageTrivial, + RateCreatureHpElite, + RateCreatureHpMinusmob, + RateCreatureHpNormal, + RateCreatureHpObsolete, + RateCreatureHpRare, + RateCreatureHpRareelite, + RateCreatureHpTrivial, + RateCreatureSpelldamageElite, + RateCreatureSpelldamageMinusmob, + RateCreatureSpelldamageNormal, + RateCreatureSpelldamageObsolete, + RateCreatureSpelldamageRare, + RateCreatureSpelldamageRareelite, + RateCreatureSpelldamageTrivial, RateDamageFall, RateDropItemArtifact, RateDropItemEpic, diff --git a/Source/Framework/Database/Databases/WorldDatabase.cs b/Source/Framework/Database/Databases/WorldDatabase.cs index 0ab3e3ee0..b8a5ad7dd 100644 --- a/Source/Framework/Database/Databases/WorldDatabase.cs +++ b/Source/Framework/Database/Databases/WorldDatabase.cs @@ -45,7 +45,7 @@ namespace Framework.Database PrepareStatement(WorldStatements.SEL_CREATURE_ADDON_BY_GUID, "SELECT guid FROM creature_addon WHERE guid = ?"); PrepareStatement(WorldStatements.DEL_CREATURE, "DELETE FROM creature WHERE guid = ?"); PrepareStatement(WorldStatements.SEL_COMMANDS, "SELECT name, help FROM command"); - PrepareStatement(WorldStatements.SEL_CREATURE_TEMPLATE, "SELECT entry, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, family, trainer_class, type, VehicleId, AIName, MovementType, ctm.Ground, ctm.Swim, ctm.Flight, ctm.Rooted, ctm.Chase, ctm.Random, ctm.InteractionPauseTimer, ExperienceModifier, RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName, StringId FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ? OR 1 = ?"); + PrepareStatement(WorldStatements.SEL_CREATURE_TEMPLATE, "SELECT entry, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, Classification, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, family, trainer_class, type, VehicleId, AIName, MovementType, ctm.Ground, ctm.Swim, ctm.Flight, ctm.Rooted, ctm.Chase, ctm.Random, ctm.InteractionPauseTimer, ExperienceModifier, RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName, StringId FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ? OR 1 = ?"); PrepareStatement(WorldStatements.SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?"); PrepareStatement(WorldStatements.SEL_GAMEOBJECT_NEAREST, "SELECT guid, id, position_x, position_y, position_z, map, (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) AS order_ FROM gameobject WHERE map = ? AND (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) <= ? ORDER BY order_"); PrepareStatement(WorldStatements.SEL_CREATURE_NEAREST, "SELECT guid, id, position_x, position_y, position_z, map, (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) AS order_ FROM creature WHERE map = ? AND (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) <= ? ORDER BY order_"); diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 5eb356a5d..d14383ab9 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -833,22 +833,25 @@ namespace Game.Entities if (cinfo.FlagsExtra.HasAnyFlag(CreatureFlagsExtra.DungeonBoss) && map.IsDungeon()) m_respawnDelay = 0; // special value, prevents respawn for dungeon bosses unless overridden - switch (cinfo.Rank) + switch (GetCreatureClassification()) { - case CreatureEliteType.Rare: - m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayRare); - break; - case CreatureEliteType.Elite: + case CreatureClassifications.Elite: m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayElite); break; - case CreatureEliteType.RareElite: + case CreatureClassifications.RareElite: m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayRareelite); break; - case CreatureEliteType.WorldBoss: - m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayWorldboss); + case CreatureClassifications.Obsolete: + m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayObsolete); break; - default: - m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayNormal); + case CreatureClassifications.Rare: + m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayRare); + break; + case CreatureClassifications.Trivial: + m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayTrivial); + break; + case CreatureClassifications.MinusMob: + m_corpseDelay = WorldConfig.GetUIntValue(WorldCfg.CorpseDecayMinusMob); break; } @@ -1458,12 +1461,12 @@ namespace Game.Entities void UpdateLevelDependantStats() { CreatureTemplate cInfo = GetCreatureTemplate(); - CreatureEliteType rank = IsPet() ? 0 : cInfo.Rank; + CreatureClassifications classification = IsPet() ? CreatureClassifications.Normal : cInfo.Classification; uint level = GetLevel(); CreatureBaseStats stats = Global.ObjectMgr.GetCreatureBaseStats(level, cInfo.UnitClass); // health - float healthmod = GetHealthMod(rank); + float healthmod = GetHealthMod(classification); uint basehp = (uint)GetMaxHealthByLevel(level); uint health = (uint)(basehp * healthmod); @@ -1526,22 +1529,26 @@ namespace Game.Entities } } - public float GetHealthMod(CreatureEliteType Rank) + public float GetHealthMod(CreatureClassifications classification) { - switch (Rank) // define rates for each elite rank + switch (classification) // define rates for each elite rank { - case CreatureEliteType.Normal: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureNormalHp); - case CreatureEliteType.Elite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteEliteHp); - case CreatureEliteType.RareElite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareeliteHp); - case CreatureEliteType.WorldBoss: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteWorldbossHp); - case CreatureEliteType.Rare: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareHp); + case CreatureClassifications.Normal: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpNormal); + case CreatureClassifications.Elite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpElite); + case CreatureClassifications.RareElite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpRareelite); + case CreatureClassifications.Obsolete: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpObsolete); + case CreatureClassifications.Rare: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpRare); + case CreatureClassifications.Trivial: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpTrivial); + case CreatureClassifications.MinusMob: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpMinusmob); default: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareeliteHp); + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureHpElite); } } @@ -1556,41 +1563,49 @@ namespace Game.Entities } } - public static float _GetDamageMod(CreatureEliteType Rank) + public static float GetDamageMod(CreatureClassifications classification) { - switch (Rank) // define rates for each elite rank + switch (classification) { - case CreatureEliteType.Normal: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureNormalDamage); - case CreatureEliteType.Elite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteEliteDamage); - case CreatureEliteType.RareElite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareeliteDamage); - case CreatureEliteType.WorldBoss: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteWorldbossDamage); - case CreatureEliteType.Rare: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareDamage); + case CreatureClassifications.Normal: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageNormal); + case CreatureClassifications.Elite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageElite); + case CreatureClassifications.RareElite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageRareelite); + case CreatureClassifications.Obsolete: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageObsolete); + case CreatureClassifications.Rare: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageRare); + case CreatureClassifications.Trivial: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageTrivial); + case CreatureClassifications.MinusMob: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageMinusmob); default: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteEliteDamage); + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureDamageElite); } } - public float GetSpellDamageMod(CreatureEliteType Rank) + public float GetSpellDamageMod(CreatureClassifications classification) { - switch (Rank) // define rates for each elite rank + switch (classification) // define rates for each elite rank { - case CreatureEliteType.Normal: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureNormalSpelldamage); - case CreatureEliteType.Elite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteEliteSpelldamage); - case CreatureEliteType.RareElite: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareeliteSpelldamage); - case CreatureEliteType.WorldBoss: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteWorldbossSpelldamage); - case CreatureEliteType.Rare: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteRareSpelldamage); + case CreatureClassifications.Normal: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageNormal); + case CreatureClassifications.Elite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageElite); + case CreatureClassifications.RareElite: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageRareelite); + case CreatureClassifications.Obsolete: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageObsolete); + case CreatureClassifications.Rare: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageRare); + case CreatureClassifications.Trivial: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageTrivial); + case CreatureClassifications.MinusMob: + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageMinusmob); default: - return WorldConfig.GetFloatValue(WorldCfg.RateCreatureEliteEliteSpelldamage); + return WorldConfig.GetFloatValue(WorldCfg.RateCreatureSpelldamageElite); } } @@ -1729,7 +1744,7 @@ namespace Game.Entities curhealth = m_creatureData.curhealth; if (curhealth != 0) { - curhealth = (uint)(curhealth * GetHealthMod(GetCreatureTemplate().Rank)); + curhealth = (uint)(curhealth * GetHealthMod(GetCreatureTemplate().Classification)); if (curhealth < 1) curhealth = 1; } @@ -2205,8 +2220,7 @@ namespace Game.Entities if (IsPet()) return false; - var rank = GetCreatureTemplate().Rank; - return rank != CreatureEliteType.Elite && rank != CreatureEliteType.RareElite; + return HasClassification(CreatureClassifications.Elite) || HasClassification(CreatureClassifications.RareElite); } public bool IsWorldBoss() @@ -3449,6 +3463,9 @@ namespace Game.Entities public override MovementGeneratorType GetDefaultMovementType() { return DefaultMovementType; } public void SetDefaultMovementType(MovementGeneratorType mgt) { DefaultMovementType = mgt; } + public CreatureClassifications GetCreatureClassification() { return GetCreatureTemplate().Classification; } + public bool HasClassification(CreatureClassifications classification) { return GetCreatureTemplate().Classification == classification; } + public long GetRespawnTime() { return m_respawnTime; } public void SetRespawnTime(uint respawn) { m_respawnTime = respawn != 0 ? GameTime.GetGameTime() + respawn : 0; } diff --git a/Source/Game/Entities/Creature/CreatureData.cs b/Source/Game/Entities/Creature/CreatureData.cs index 7918616bf..b31cea5a8 100644 --- a/Source/Game/Entities/Creature/CreatureData.cs +++ b/Source/Game/Entities/Creature/CreatureData.cs @@ -30,7 +30,7 @@ namespace Game.Entities public float SpeedWalk; public float SpeedRun; public float Scale; - public CreatureEliteType Rank; + public CreatureClassifications Classification; public uint DmgSchool; public uint BaseAttackTime; public uint RangeAttackTime; @@ -165,7 +165,7 @@ namespace Game.Entities stats.CreatureType = (int)CreatureType; stats.CreatureFamily = (int)Family; - stats.Classification = (int)Rank; + stats.Classification = (int)Classification; for (uint i = 0; i < SharedConst.MaxCreatureKillCredit; ++i) stats.ProxyCreatureID[i] = KillCredit[i]; diff --git a/Source/Game/Entities/TemporarySummon.cs b/Source/Game/Entities/TemporarySummon.cs index f32e9ca97..d4665a585 100644 --- a/Source/Game/Entities/TemporarySummon.cs +++ b/Source/Game/Entities/TemporarySummon.cs @@ -654,7 +654,7 @@ namespace Game.Entities ApplyLevelScaling(); CreatureDifficulty creatureDifficulty = GetCreatureDifficulty(); - SetCreateHealth((uint)Math.Max(Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.CreatureHealth, petlevel, creatureDifficulty.GetHealthScalingExpansion(), m_unitData.ContentTuningID, (Class)cinfo.UnitClass, 0) * creatureDifficulty.HealthModifier * GetHealthMod(cinfo.Rank), 1.0f)); + SetCreateHealth((uint)Math.Max(Global.DB2Mgr.EvaluateExpectedStat(ExpectedStatType.CreatureHealth, petlevel, creatureDifficulty.GetHealthScalingExpansion(), m_unitData.ContentTuningID, (Class)cinfo.UnitClass, 0) * creatureDifficulty.HealthModifier * GetHealthMod(cinfo.Classification), 1.0f)); SetCreateMana(stats.BaseMana); SetCreateStat(Stats.Strength, 22); diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 33619dbaa..039628985 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -176,7 +176,7 @@ namespace Game.Entities // Pet damage? if (IsTypeId(TypeId.Unit) && !IsPet()) - DoneTotalMod *= ToCreature().GetSpellDamageMod(ToCreature().GetCreatureTemplate().Rank); + DoneTotalMod *= ToCreature().GetSpellDamageMod(ToCreature().GetCreatureTemplate().Classification); // Versatility Player modOwner = GetSpellModOwner(); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 096325203..a2ad234cb 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -1791,7 +1791,7 @@ namespace Game creature.SpeedWalk = fields.Read(12); creature.SpeedRun = fields.Read(13); creature.Scale = fields.Read(14); - creature.Rank = (CreatureEliteType)fields.Read(15); + creature.Classification = (CreatureClassifications)fields.Read(15); creature.DmgSchool = fields.Read(16); creature.BaseAttackTime = fields.Read(17); creature.RangeAttackTime = fields.Read(18); @@ -2727,7 +2727,7 @@ namespace Game creatureDifficulty.StaticFlags = new(result.Read(18), result.Read(19), result.Read(20), result.Read(21), result.Read(22), result.Read(23), result.Read(24), result.Read(25)); // TODO: Check if this still applies - creatureDifficulty.DamageModifier *= Creature._GetDamageMod(template.Rank); + creatureDifficulty.DamageModifier *= Creature.GetDamageMod(template.Classification); if (creatureDifficulty.HealthScalingExpansion < (int)Expansion.LevelCurrent || creatureDifficulty.HealthScalingExpansion >= (int)Expansion.Max) { diff --git a/Source/Game/Server/WorldConfig.cs b/Source/Game/Server/WorldConfig.cs index 3a7041fe1..f854582d9 100644 --- a/Source/Game/Server/WorldConfig.cs +++ b/Source/Game/Server/WorldConfig.cs @@ -86,21 +86,27 @@ namespace Game Values[WorldCfg.RateReputationLowLevelKill] = GetDefaultValue("Rate.Reputation.LowLevel.Kill", 1.0f); Values[WorldCfg.RateReputationLowLevelQuest] = GetDefaultValue("Rate.Reputation.LowLevel.Quest", 1.0f); Values[WorldCfg.RateReputationRecruitAFriendBonus] = GetDefaultValue("Rate.Reputation.RecruitAFriendBonus", 0.1f); - Values[WorldCfg.RateCreatureNormalDamage] = GetDefaultValue("Rate.Creature.Normal.Damage", 1.0f); - Values[WorldCfg.RateCreatureEliteEliteDamage] = GetDefaultValue("Rate.Creature.Elite.Elite.Damage", 1.0f); - Values[WorldCfg.RateCreatureEliteRareeliteDamage] = GetDefaultValue("Rate.Creature.Elite.RAREELITE.Damage", 1.0f); - Values[WorldCfg.RateCreatureEliteWorldbossDamage] = GetDefaultValue("Rate.Creature.Elite.WORLDBOSS.Damage", 1.0f); - Values[WorldCfg.RateCreatureEliteRareDamage] = GetDefaultValue("Rate.Creature.Elite.RARE.Damage", 1.0f); - Values[WorldCfg.RateCreatureNormalHp] = GetDefaultValue("Rate.Creature.Normal.HP", 1.0f); - Values[WorldCfg.RateCreatureEliteEliteHp] = GetDefaultValue("Rate.Creature.Elite.Elite.HP", 1.0f); - Values[WorldCfg.RateCreatureEliteRareeliteHp] = GetDefaultValue("Rate.Creature.Elite.RAREELITE.HP", 1.0f); - Values[WorldCfg.RateCreatureEliteWorldbossHp] = GetDefaultValue("Rate.Creature.Elite.WORLDBOSS.HP", 1.0f); - Values[WorldCfg.RateCreatureEliteRareHp] = GetDefaultValue("Rate.Creature.Elite.RARE.HP", 1.0f); - Values[WorldCfg.RateCreatureNormalSpelldamage] = GetDefaultValue("Rate.Creature.Normal.SpellDamage", 1.0f); - Values[WorldCfg.RateCreatureEliteEliteSpelldamage] = GetDefaultValue("Rate.Creature.Elite.Elite.SpellDamage", 1.0f); - Values[WorldCfg.RateCreatureEliteRareeliteSpelldamage] = GetDefaultValue("Rate.Creature.Elite.RAREELITE.SpellDamage", 1.0f); - Values[WorldCfg.RateCreatureEliteWorldbossSpelldamage] = GetDefaultValue("Rate.Creature.Elite.WORLDBOSS.SpellDamage", 1.0f); - Values[WorldCfg.RateCreatureEliteRareSpelldamage] = GetDefaultValue("Rate.Creature.Elite.RARE.SpellDamage", 1.0f); + Values[WorldCfg.RateCreatureHpNormal] = GetDefaultValue("Rate.Creature.HP.Normal", 1.0f); + Values[WorldCfg.RateCreatureHpElite] = GetDefaultValue("Rate.Creature.HP.Elite", 1.0f); + Values[WorldCfg.RateCreatureHpRareelite] = GetDefaultValue("Rate.Creature.HP.RareElite", 1.0f); + Values[WorldCfg.RateCreatureHpObsolete] = GetDefaultValue("Rate.Creature.HP.Obsolete", 1.0f); + Values[WorldCfg.RateCreatureHpRare] = GetDefaultValue("Rate.Creature.HP.Rare", 1.0f); + Values[WorldCfg.RateCreatureHpTrivial] = GetDefaultValue("Rate.Creature.HP.Trivial", 1.0f); + Values[WorldCfg.RateCreatureHpMinusmob] = GetDefaultValue("Rate.Creature.HP.MinusMob", 1.0f); + Values[WorldCfg.RateCreatureDamageNormal] = GetDefaultValue("Rate.Creature.Damage.Normal", 1.0f); + Values[WorldCfg.RateCreatureDamageElite] = GetDefaultValue("Rate.Creature.Damage.Elite", 1.0f); + Values[WorldCfg.RateCreatureDamageRareelite] = GetDefaultValue("Rate.Creature.Damage.RareElite", 1.0f); + Values[WorldCfg.RateCreatureDamageObsolete] = GetDefaultValue("Rate.Creature.Damage.Obsolete", 1.0f); + Values[WorldCfg.RateCreatureDamageRare] = GetDefaultValue("Rate.Creature.Damage.Rare", 1.0f); + Values[WorldCfg.RateCreatureDamageTrivial] = GetDefaultValue("Rate.Creature.Damage.Trivial", 1.0f); + Values[WorldCfg.RateCreatureDamageMinusmob] = GetDefaultValue("Rate.Creature.Damage.MinusMob", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageNormal] = GetDefaultValue("Rate.Creature.SpellDamage.Normal", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageElite] = GetDefaultValue("Rate.Creature.SpellDamage.Elite", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageRareelite] = GetDefaultValue("Rate.Creature.SpellDamage.RareElite", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageObsolete] = GetDefaultValue("Rate.Creature.SpellDamage.Obsolete", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageRare] = GetDefaultValue("Rate.Creature.SpellDamage.Rare", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageTrivial] = GetDefaultValue("Rate.Creature.SpellDamage.Trivial", 1.0f); + Values[WorldCfg.RateCreatureSpelldamageMinusmob] = GetDefaultValue("Rate.Creature.SpellDamage.MinusMob", 1.0f); Values[WorldCfg.RateCreatureAggro] = GetDefaultValue("Rate.Creature.Aggro", 1.0f); Values[WorldCfg.RateRestIngame] = GetDefaultValue("Rate.Rest.InGame", 1.0f); Values[WorldCfg.RateRestOfflineInTavernOrCity] = GetDefaultValue("Rate.Rest.Offline.InTavernOrCity", 1.0f); @@ -688,11 +694,13 @@ namespace Game Values[WorldCfg.ChatStrictLinkCheckingSeverity] = GetDefaultValue("ChatStrictLinkChecking.Severity", 0); Values[WorldCfg.ChatStrictLinkCheckingKick] = GetDefaultValue("ChatStrictLinkChecking.Kick", 0); - Values[WorldCfg.CorpseDecayNormal] = GetDefaultValue("Corpse.Decay.NORMAL", 60); - Values[WorldCfg.CorpseDecayRare] = GetDefaultValue("Corpse.Decay.RARE", 300); - Values[WorldCfg.CorpseDecayElite] = GetDefaultValue("Corpse.Decay.ELITE", 300); - Values[WorldCfg.CorpseDecayRareelite] = GetDefaultValue("Corpse.Decay.RAREELITE", 300); - Values[WorldCfg.CorpseDecayWorldboss] = GetDefaultValue("Corpse.Decay.WORLDBOSS", 3600); + Values[WorldCfg.CorpseDecayNormal] = GetDefaultValue("Corpse.Decay.Normal", 60); + Values[WorldCfg.CorpseDecayElite] = GetDefaultValue("Corpse.Decay.Elite", 300); + Values[WorldCfg.CorpseDecayRareelite] = GetDefaultValue("Corpse.Decay.RareElite", 300); + Values[WorldCfg.CorpseDecayObsolete] = GetDefaultValue("Corpse.Decay.Obsolete", 3600); + Values[WorldCfg.CorpseDecayRare] = GetDefaultValue("Corpse.Decay.Rare", 300); + Values[WorldCfg.CorpseDecayTrivial] = GetDefaultValue("Corpse.Decay.Trivial", 300); + Values[WorldCfg.CorpseDecayMinusMob] = GetDefaultValue("Corpse.Decay.MinusMob", 150); Values[WorldCfg.DeathSicknessLevel] = GetDefaultValue("Death.SicknessLevel", 11); Values[WorldCfg.DeathCorpseReclaimDelayPvp] = GetDefaultValue("Death.CorpseReclaimDelay.PvP", true); diff --git a/Source/WorldServer/WorldServer.conf.dist b/Source/WorldServer/WorldServer.conf.dist index 2c6cc1c97..c48e9fa42 100644 --- a/Source/WorldServer/WorldServer.conf.dist +++ b/Source/WorldServer/WorldServer.conf.dist @@ -1665,23 +1665,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 Minute, 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 @@ -1692,62 +1698,80 @@ 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 +# 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 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) +# 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