Some Cleanups
This commit is contained in:
@@ -79,7 +79,7 @@ namespace BNetServer
|
||||
|
||||
static bool StartDB()
|
||||
{
|
||||
DatabaseLoader loader = new DatabaseLoader(DatabaseTypeFlags.None);
|
||||
DatabaseLoader loader = new(DatabaseTypeFlags.None);
|
||||
loader.AddDatabase(DB.Login, "Login");
|
||||
|
||||
if (!loader.Load())
|
||||
@@ -111,11 +111,11 @@ namespace BNetServer
|
||||
|
||||
bool hadWarning = false;
|
||||
uint count = 0;
|
||||
SQLTransaction trans = new SQLTransaction();
|
||||
SQLTransaction trans = new();
|
||||
do
|
||||
{
|
||||
uint id = result.Read<uint>(0);
|
||||
(byte[] salt, byte[] verifier) registrationData = SRP6.MakeRegistrationDataFromHash(result.Read<string>(1).ToByteArray());
|
||||
(byte[] salt, byte[] verifier) = SRP6.MakeRegistrationDataFromHash(result.Read<string>(1).ToByteArray());
|
||||
|
||||
if (result.Read<long>(2) != 0 && !hadWarning)
|
||||
{
|
||||
@@ -124,8 +124,8 @@ namespace BNetServer
|
||||
}
|
||||
|
||||
PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_LOGON);
|
||||
stmt.AddValue(0, registrationData.salt);
|
||||
stmt.AddValue(1, registrationData.verifier);
|
||||
stmt.AddValue(0, salt);
|
||||
stmt.AddValue(1, verifier);
|
||||
stmt.AddValue(2, id);
|
||||
trans.Append(stmt);
|
||||
|
||||
|
||||
@@ -1023,6 +1023,7 @@ namespace Framework.Constants
|
||||
PlusMaxLevelForExpansion = 2
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum ContentTuningFlag
|
||||
{
|
||||
DisabledForItem = 0x04,
|
||||
@@ -1679,6 +1680,7 @@ namespace Framework.Constants
|
||||
CooldownExpiresAtDailyReset = 0x08
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum SpellEffectAttributes
|
||||
{
|
||||
None = 0,
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Framework.Constants
|
||||
/// </summary>
|
||||
public const int GTMaxLevel = 100; // All Gt* DBC store data for 100 levels, some by 100 per class/race
|
||||
public const int GTMaxRating = 32; // gtOCTClassCombatRatingScalar.dbc stores data for 32 ratings, look at MAX_COMBAT_RATING for real used amount
|
||||
public const int ReputationCap = 42999;
|
||||
public const int ReputationCap = 42000;
|
||||
public const int ReputationBottom = -42000;
|
||||
public const int MaxClientMailItems = 12; // max number of items a player is allowed to attach
|
||||
public const int MaxMailItems = 16;
|
||||
|
||||
@@ -98,6 +98,7 @@ namespace Framework.Constants
|
||||
Ranged = 2 //hunter range and ranged weapon
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum SpellInterruptFlags
|
||||
{
|
||||
None = 0,
|
||||
|
||||
@@ -744,7 +744,7 @@ namespace Game.Achievements
|
||||
DeleteFromDB(guid);
|
||||
}
|
||||
|
||||
void DeleteFromDB(ObjectGuid guid)
|
||||
public static void DeleteFromDB(ObjectGuid guid)
|
||||
{
|
||||
SQLTransaction trans = new();
|
||||
|
||||
|
||||
@@ -1625,7 +1625,7 @@ namespace Game.Achievements
|
||||
break;
|
||||
case ModifierTreeType.BattlePetAchievementPointsEqualOrGreaterThan: // 76
|
||||
{
|
||||
short getRootAchievementCategory(AchievementRecord achievement)
|
||||
static short getRootAchievementCategory(AchievementRecord achievement)
|
||||
{
|
||||
short category = (short)achievement.Category;
|
||||
do
|
||||
|
||||
@@ -223,7 +223,7 @@ namespace Game.Chat
|
||||
InventoryResult msg = playerTarget.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, template.Value.GetId(), 1);
|
||||
if (msg == InventoryResult.Ok)
|
||||
{
|
||||
List<uint> bonusListIDsForItem = new List<uint>(bonusListIDs); // copy, bonuses for each depending on context might be different for each item
|
||||
List<uint> bonusListIDsForItem = new(bonusListIDs); // copy, bonuses for each depending on context might be different for each item
|
||||
if (itemContext != ItemContext.None && itemContext < ItemContext.Max)
|
||||
{
|
||||
var contextBonuses = Global.DB2Mgr.GetDefaultItemBonusTree(template.Value.GetId(), itemContext);
|
||||
|
||||
@@ -299,7 +299,7 @@ namespace Game.Combat
|
||||
return; // typical causes: bad scripts trying to add threat to GMs, dead targets etc
|
||||
|
||||
// ok, we're now in combat - create the threat list reference and push it to the respective managers
|
||||
ThreatReference newRefe = new ThreatReference(this, target, amount);
|
||||
ThreatReference newRefe = new(this, target, amount);
|
||||
PutThreatListRef(target.GetGUID(), newRefe);
|
||||
target.GetThreatManager().PutThreatenedByMeRef(_owner.GetGUID(), newRefe);
|
||||
if (!newRefe.IsOffline() && !_ownerEngaged)
|
||||
|
||||
@@ -27,6 +27,8 @@ using Framework.Dynamic;
|
||||
|
||||
namespace Game.DataStorage
|
||||
{
|
||||
using static CliDB;
|
||||
|
||||
public class DB2Manager : Singleton<DB2Manager>
|
||||
{
|
||||
DB2Manager()
|
||||
@@ -51,28 +53,28 @@ namespace Game.DataStorage
|
||||
|
||||
public void LoadStores()
|
||||
{
|
||||
foreach (var areaGroupMember in CliDB.AreaGroupMemberStorage.Values)
|
||||
foreach (var areaGroupMember in AreaGroupMemberStorage.Values)
|
||||
_areaGroupMembers.Add(areaGroupMember.AreaGroupID, areaGroupMember.AreaID);
|
||||
|
||||
foreach (ArtifactPowerRecord artifactPower in CliDB.ArtifactPowerStorage.Values)
|
||||
foreach (ArtifactPowerRecord artifactPower in ArtifactPowerStorage.Values)
|
||||
_artifactPowers.Add(artifactPower.ArtifactID, artifactPower);
|
||||
|
||||
foreach (ArtifactPowerLinkRecord artifactPowerLink in CliDB.ArtifactPowerLinkStorage.Values)
|
||||
foreach (ArtifactPowerLinkRecord artifactPowerLink in ArtifactPowerLinkStorage.Values)
|
||||
{
|
||||
_artifactPowerLinks.Add(artifactPowerLink.PowerA, artifactPowerLink.PowerB);
|
||||
_artifactPowerLinks.Add(artifactPowerLink.PowerB, artifactPowerLink.PowerA);
|
||||
}
|
||||
|
||||
foreach (ArtifactPowerRankRecord artifactPowerRank in CliDB.ArtifactPowerRankStorage.Values)
|
||||
foreach (ArtifactPowerRankRecord artifactPowerRank in ArtifactPowerRankStorage.Values)
|
||||
_artifactPowerRanks[Tuple.Create(artifactPowerRank.ArtifactPowerID, artifactPowerRank.RankIndex)] = artifactPowerRank;
|
||||
|
||||
foreach (AzeriteEmpoweredItemRecord azeriteEmpoweredItem in CliDB.AzeriteEmpoweredItemStorage.Values)
|
||||
foreach (AzeriteEmpoweredItemRecord azeriteEmpoweredItem in AzeriteEmpoweredItemStorage.Values)
|
||||
_azeriteEmpoweredItems[azeriteEmpoweredItem.ItemID] = azeriteEmpoweredItem;
|
||||
|
||||
foreach (AzeriteEssencePowerRecord azeriteEssencePower in CliDB.AzeriteEssencePowerStorage.Values)
|
||||
_azeriteEssencePowersByIdAndRank[((uint)azeriteEssencePower.AzeriteEssenceID, (uint)azeriteEssencePower.Tier)] = azeriteEssencePower;
|
||||
foreach (AzeriteEssencePowerRecord azeriteEssencePower in AzeriteEssencePowerStorage.Values)
|
||||
_azeriteEssencePowersByIdAndRank[((uint)azeriteEssencePower.AzeriteEssenceID, azeriteEssencePower.Tier)] = azeriteEssencePower;
|
||||
|
||||
foreach (AzeriteItemMilestonePowerRecord azeriteItemMilestonePower in CliDB.AzeriteItemMilestonePowerStorage.Values)
|
||||
foreach (AzeriteItemMilestonePowerRecord azeriteItemMilestonePower in AzeriteItemMilestonePowerStorage.Values)
|
||||
_azeriteItemMilestonePowers.Add(azeriteItemMilestonePower);
|
||||
|
||||
_azeriteItemMilestonePowers = _azeriteItemMilestonePowers.OrderBy(p => p.RequiredLevel).ToList();
|
||||
@@ -89,11 +91,11 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (AzeritePowerSetMemberRecord azeritePowerSetMember in CliDB.AzeritePowerSetMemberStorage.Values)
|
||||
if (CliDB.AzeritePowerStorage.ContainsKey(azeritePowerSetMember.AzeritePowerID))
|
||||
foreach (AzeritePowerSetMemberRecord azeritePowerSetMember in AzeritePowerSetMemberStorage.Values)
|
||||
if (AzeritePowerStorage.ContainsKey(azeritePowerSetMember.AzeritePowerID))
|
||||
_azeritePowers.Add(azeritePowerSetMember.AzeritePowerSetID, azeritePowerSetMember);
|
||||
|
||||
foreach (AzeriteTierUnlockRecord azeriteTierUnlock in CliDB.AzeriteTierUnlockStorage.Values)
|
||||
foreach (AzeriteTierUnlockRecord azeriteTierUnlock in AzeriteTierUnlockStorage.Values)
|
||||
{
|
||||
var key = (azeriteTierUnlock.AzeriteTierUnlockSetID, (ItemContext)azeriteTierUnlock.ItemCreationContext);
|
||||
|
||||
@@ -104,10 +106,10 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
MultiMap<uint, AzeriteUnlockMappingRecord> azeriteUnlockMappings = new();
|
||||
foreach (AzeriteUnlockMappingRecord azeriteUnlockMapping in CliDB.AzeriteUnlockMappingStorage.Values)
|
||||
foreach (AzeriteUnlockMappingRecord azeriteUnlockMapping in AzeriteUnlockMappingStorage.Values)
|
||||
azeriteUnlockMappings.Add(azeriteUnlockMapping.AzeriteUnlockMappingSetID, azeriteUnlockMapping);
|
||||
|
||||
foreach (BattlemasterListRecord battlemaster in CliDB.BattlemasterListStorage.Values)
|
||||
foreach (BattlemasterListRecord battlemaster in BattlemasterListStorage.Values)
|
||||
{
|
||||
if (battlemaster.MaxLevel < battlemaster.MinLevel)
|
||||
{
|
||||
@@ -121,14 +123,14 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var uiDisplay in CliDB.ChrClassUIDisplayStorage.Values)
|
||||
foreach (var uiDisplay in ChrClassUIDisplayStorage.Values)
|
||||
{
|
||||
Cypher.Assert(uiDisplay.ChrClassesID < (byte)Class.Max);
|
||||
_uiDisplayByClass[uiDisplay.ChrClassesID] = uiDisplay;
|
||||
}
|
||||
|
||||
var powers = new List<ChrClassesXPowerTypesRecord>();
|
||||
foreach (var chrClasses in CliDB.ChrClassesXPowerTypesStorage.Values)
|
||||
foreach (var chrClasses in ChrClassesXPowerTypesStorage.Values)
|
||||
powers.Add(chrClasses);
|
||||
|
||||
powers.Sort(new ChrClassesXPowerTypesRecordComparer());
|
||||
@@ -142,23 +144,23 @@ namespace Game.DataStorage
|
||||
_powersByClass[power.ClassID][power.PowerType] = index;
|
||||
}
|
||||
|
||||
foreach (var customizationChoice in CliDB.ChrCustomizationChoiceStorage.Values)
|
||||
foreach (var customizationChoice in ChrCustomizationChoiceStorage.Values)
|
||||
_chrCustomizationChoicesByOption.Add(customizationChoice.ChrCustomizationOptionID, customizationChoice);
|
||||
|
||||
MultiMap<uint, Tuple<uint, byte>> shapeshiftFormByModel = new();
|
||||
Dictionary<uint, ChrCustomizationDisplayInfoRecord> displayInfoByCustomizationChoice = new();
|
||||
|
||||
// build shapeshift form model lookup
|
||||
foreach (ChrCustomizationElementRecord customizationElement in CliDB.ChrCustomizationElementStorage.Values)
|
||||
foreach (ChrCustomizationElementRecord customizationElement in ChrCustomizationElementStorage.Values)
|
||||
{
|
||||
ChrCustomizationDisplayInfoRecord customizationDisplayInfo = CliDB.ChrCustomizationDisplayInfoStorage.LookupByKey(customizationElement.ChrCustomizationDisplayInfoID);
|
||||
ChrCustomizationDisplayInfoRecord customizationDisplayInfo = ChrCustomizationDisplayInfoStorage.LookupByKey(customizationElement.ChrCustomizationDisplayInfoID);
|
||||
if (customizationDisplayInfo != null)
|
||||
{
|
||||
ChrCustomizationChoiceRecord customizationChoice = CliDB.ChrCustomizationChoiceStorage.LookupByKey(customizationElement.ChrCustomizationChoiceID);
|
||||
ChrCustomizationChoiceRecord customizationChoice = ChrCustomizationChoiceStorage.LookupByKey(customizationElement.ChrCustomizationChoiceID);
|
||||
if (customizationChoice != null)
|
||||
{
|
||||
displayInfoByCustomizationChoice[customizationElement.ChrCustomizationChoiceID] = customizationDisplayInfo;
|
||||
ChrCustomizationOptionRecord customizationOption = CliDB.ChrCustomizationOptionStorage.LookupByKey(customizationChoice.ChrCustomizationOptionID);
|
||||
ChrCustomizationOptionRecord customizationOption = ChrCustomizationOptionStorage.LookupByKey(customizationChoice.ChrCustomizationOptionID);
|
||||
if (customizationOption != null)
|
||||
shapeshiftFormByModel.Add(customizationOption.ChrModelID, Tuple.Create(customizationOption.Id, (byte)customizationDisplayInfo.ShapeshiftFormID));
|
||||
}
|
||||
@@ -166,12 +168,12 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
MultiMap<uint, ChrCustomizationOptionRecord> customizationOptionsByModel = new();
|
||||
foreach (ChrCustomizationOptionRecord customizationOption in CliDB.ChrCustomizationOptionStorage.Values)
|
||||
foreach (ChrCustomizationOptionRecord customizationOption in ChrCustomizationOptionStorage.Values)
|
||||
customizationOptionsByModel.Add(customizationOption.ChrModelID, customizationOption);
|
||||
|
||||
foreach (ChrCustomizationReqChoiceRecord reqChoice in CliDB.ChrCustomizationReqChoiceStorage.Values)
|
||||
foreach (ChrCustomizationReqChoiceRecord reqChoice in ChrCustomizationReqChoiceStorage.Values)
|
||||
{
|
||||
ChrCustomizationChoiceRecord customizationChoice = CliDB.ChrCustomizationChoiceStorage.LookupByKey(reqChoice.ChrCustomizationChoiceID);
|
||||
ChrCustomizationChoiceRecord customizationChoice = ChrCustomizationChoiceStorage.LookupByKey(reqChoice.ChrCustomizationChoiceID);
|
||||
if (customizationChoice != null)
|
||||
{
|
||||
if (!_chrCustomizationRequiredChoices.ContainsKey(reqChoice.ChrCustomizationReqID))
|
||||
@@ -182,13 +184,13 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
Dictionary<uint, uint> parentRaces = new();
|
||||
foreach (ChrRacesRecord chrRace in CliDB.ChrRacesStorage.Values)
|
||||
foreach (ChrRacesRecord chrRace in ChrRacesStorage.Values)
|
||||
if (chrRace.UnalteredVisualRaceID != 0)
|
||||
parentRaces[(uint)chrRace.UnalteredVisualRaceID] = chrRace.Id;
|
||||
|
||||
foreach (ChrRaceXChrModelRecord raceModel in CliDB.ChrRaceXChrModelStorage.Values)
|
||||
foreach (ChrRaceXChrModelRecord raceModel in ChrRaceXChrModelStorage.Values)
|
||||
{
|
||||
ChrModelRecord model = CliDB.ChrModelStorage.LookupByKey(raceModel.ChrModelID);
|
||||
ChrModelRecord model = ChrModelStorage.LookupByKey(raceModel.ChrModelID);
|
||||
if (model != null)
|
||||
{
|
||||
_chrModelsByRaceAndGender[Tuple.Create((byte)raceModel.ChrRacesID, (byte)model.Sex)] = model;
|
||||
@@ -220,7 +222,7 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ChrSpecializationRecord chrSpec in CliDB.ChrSpecializationStorage.Values)
|
||||
foreach (ChrSpecializationRecord chrSpec in ChrSpecializationStorage.Values)
|
||||
{
|
||||
//ASSERT(chrSpec.ClassID < MAX_CLASSES);
|
||||
//ASSERT(chrSpec.OrderIndex < MAX_SPECIALIZATIONS);
|
||||
@@ -237,39 +239,39 @@ namespace Game.DataStorage
|
||||
_chrSpecializationsByIndex[storageIndex][chrSpec.OrderIndex] = chrSpec;
|
||||
}
|
||||
|
||||
foreach (ContentTuningXExpectedRecord contentTuningXExpectedStat in CliDB.ContentTuningXExpectedStorage.Values)
|
||||
foreach (ContentTuningXExpectedRecord contentTuningXExpectedStat in ContentTuningXExpectedStorage.Values)
|
||||
{
|
||||
ExpectedStatModRecord expectedStatMod = CliDB.ExpectedStatModStorage.LookupByKey(contentTuningXExpectedStat.ExpectedStatModID);
|
||||
ExpectedStatModRecord expectedStatMod = ExpectedStatModStorage.LookupByKey(contentTuningXExpectedStat.ExpectedStatModID);
|
||||
if (expectedStatMod != null)
|
||||
_expectedStatModsByContentTuning.Add(contentTuningXExpectedStat.ContentTuningID, expectedStatMod);
|
||||
}
|
||||
|
||||
foreach (CurvePointRecord curvePoint in CliDB.CurvePointStorage.Values)
|
||||
foreach (CurvePointRecord curvePoint in CurvePointStorage.Values)
|
||||
{
|
||||
if (CliDB.CurveStorage.ContainsKey(curvePoint.CurveID))
|
||||
if (CurveStorage.ContainsKey(curvePoint.CurveID))
|
||||
_curvePoints.Add(curvePoint.CurveID, curvePoint);
|
||||
}
|
||||
|
||||
foreach (var key in _curvePoints.Keys.ToList())
|
||||
_curvePoints[key] = _curvePoints[key].OrderBy(point => point.OrderIndex).ToList();
|
||||
|
||||
foreach (EmotesTextSoundRecord emoteTextSound in CliDB.EmotesTextSoundStorage.Values)
|
||||
foreach (EmotesTextSoundRecord emoteTextSound in EmotesTextSoundStorage.Values)
|
||||
_emoteTextSounds[Tuple.Create(emoteTextSound.EmotesTextId, emoteTextSound.RaceId, emoteTextSound.SexId, emoteTextSound.ClassId)] = emoteTextSound;
|
||||
|
||||
foreach (ExpectedStatRecord expectedStat in CliDB.ExpectedStatStorage.Values)
|
||||
foreach (ExpectedStatRecord expectedStat in ExpectedStatStorage.Values)
|
||||
_expectedStatsByLevel[Tuple.Create(expectedStat.Lvl, expectedStat.ExpansionID)] = expectedStat;
|
||||
|
||||
foreach (FactionRecord faction in CliDB.FactionStorage.Values)
|
||||
foreach (FactionRecord faction in FactionStorage.Values)
|
||||
if (faction.ParentFactionID != 0)
|
||||
_factionTeams.Add(faction.ParentFactionID, faction.Id);
|
||||
|
||||
foreach (FriendshipRepReactionRecord friendshipRepReaction in CliDB.FriendshipRepReactionStorage.Values)
|
||||
foreach (FriendshipRepReactionRecord friendshipRepReaction in FriendshipRepReactionStorage.Values)
|
||||
_friendshipRepReactions.Add(friendshipRepReaction.FriendshipRepID, friendshipRepReaction);
|
||||
|
||||
foreach (var key in _friendshipRepReactions.Keys)
|
||||
_friendshipRepReactions[key].Sort(new FriendshipRepReactionRecordComparer());
|
||||
|
||||
foreach (GameObjectDisplayInfoRecord gameObjectDisplayInfo in CliDB.GameObjectDisplayInfoStorage.Values)
|
||||
foreach (GameObjectDisplayInfoRecord gameObjectDisplayInfo in GameObjectDisplayInfoStorage.Values)
|
||||
{
|
||||
if (gameObjectDisplayInfo.GeoBoxMax.X < gameObjectDisplayInfo.GeoBoxMin.X)
|
||||
Extensions.Swap(ref gameObjectDisplayInfo.GeoBox[3], ref gameObjectDisplayInfo.GeoBox[0]);
|
||||
@@ -279,65 +281,65 @@ namespace Game.DataStorage
|
||||
Extensions.Swap(ref gameObjectDisplayInfo.GeoBox[5], ref gameObjectDisplayInfo.GeoBox[2]);
|
||||
}
|
||||
|
||||
foreach (HeirloomRecord heirloom in CliDB.HeirloomStorage.Values)
|
||||
foreach (HeirloomRecord heirloom in HeirloomStorage.Values)
|
||||
_heirlooms[heirloom.ItemID] = heirloom;
|
||||
|
||||
foreach (GlyphBindableSpellRecord glyphBindableSpell in CliDB.GlyphBindableSpellStorage.Values)
|
||||
foreach (GlyphBindableSpellRecord glyphBindableSpell in GlyphBindableSpellStorage.Values)
|
||||
_glyphBindableSpells.Add(glyphBindableSpell.GlyphPropertiesID, (uint)glyphBindableSpell.SpellID);
|
||||
|
||||
foreach (GlyphRequiredSpecRecord glyphRequiredSpec in CliDB.GlyphRequiredSpecStorage.Values)
|
||||
foreach (GlyphRequiredSpecRecord glyphRequiredSpec in GlyphRequiredSpecStorage.Values)
|
||||
_glyphRequiredSpecs.Add(glyphRequiredSpec.GlyphPropertiesID, glyphRequiredSpec.ChrSpecializationID);
|
||||
|
||||
foreach (var bonus in CliDB.ItemBonusStorage.Values)
|
||||
foreach (var bonus in ItemBonusStorage.Values)
|
||||
_itemBonusLists.Add(bonus.ParentItemBonusListID, bonus);
|
||||
|
||||
foreach (ItemBonusListLevelDeltaRecord itemBonusListLevelDelta in CliDB.ItemBonusListLevelDeltaStorage.Values)
|
||||
foreach (ItemBonusListLevelDeltaRecord itemBonusListLevelDelta in ItemBonusListLevelDeltaStorage.Values)
|
||||
_itemLevelDeltaToBonusListContainer[itemBonusListLevelDelta.ItemLevelDelta] = itemBonusListLevelDelta.Id;
|
||||
|
||||
foreach (var bonusTreeNode in CliDB.ItemBonusTreeNodeStorage.Values)
|
||||
foreach (var bonusTreeNode in ItemBonusTreeNodeStorage.Values)
|
||||
_itemBonusTrees.Add(bonusTreeNode.ParentItemBonusTreeID, bonusTreeNode);
|
||||
|
||||
foreach (ItemChildEquipmentRecord itemChildEquipment in CliDB.ItemChildEquipmentStorage.Values)
|
||||
foreach (ItemChildEquipmentRecord itemChildEquipment in ItemChildEquipmentStorage.Values)
|
||||
{
|
||||
//ASSERT(_itemChildEquipment.find(itemChildEquipment.ParentItemID) == _itemChildEquipment.end(), "Item must have max 1 child item.");
|
||||
_itemChildEquipment[itemChildEquipment.ParentItemID] = itemChildEquipment;
|
||||
}
|
||||
|
||||
foreach (ItemClassRecord itemClass in CliDB.ItemClassStorage.Values)
|
||||
foreach (ItemClassRecord itemClass in ItemClassStorage.Values)
|
||||
{
|
||||
//ASSERT(itemClass.ClassID < _itemClassByOldEnum.size());
|
||||
//ASSERT(!_itemClassByOldEnum[itemClass.ClassID]);
|
||||
_itemClassByOldEnum[itemClass.ClassID] = itemClass;
|
||||
}
|
||||
|
||||
foreach (ItemCurrencyCostRecord itemCurrencyCost in CliDB.ItemCurrencyCostStorage.Values)
|
||||
foreach (ItemCurrencyCostRecord itemCurrencyCost in ItemCurrencyCostStorage.Values)
|
||||
_itemsWithCurrencyCost.Add(itemCurrencyCost.ItemID);
|
||||
|
||||
foreach (ItemLimitCategoryConditionRecord condition in CliDB.ItemLimitCategoryConditionStorage.Values)
|
||||
foreach (ItemLimitCategoryConditionRecord condition in ItemLimitCategoryConditionStorage.Values)
|
||||
_itemCategoryConditions.Add(condition.ParentItemLimitCategoryID, condition);
|
||||
|
||||
foreach (ItemLevelSelectorQualityRecord itemLevelSelectorQuality in CliDB.ItemLevelSelectorQualityStorage.Values)
|
||||
foreach (ItemLevelSelectorQualityRecord itemLevelSelectorQuality in ItemLevelSelectorQualityStorage.Values)
|
||||
_itemLevelQualitySelectorQualities.Add(itemLevelSelectorQuality.ParentILSQualitySetID, itemLevelSelectorQuality);
|
||||
|
||||
foreach (var appearanceMod in CliDB.ItemModifiedAppearanceStorage.Values)
|
||||
foreach (var appearanceMod in ItemModifiedAppearanceStorage.Values)
|
||||
{
|
||||
//ASSERT(appearanceMod.ItemID <= 0xFFFFFF);
|
||||
_itemModifiedAppearancesByItem[(uint)((int)appearanceMod.ItemID | (appearanceMod.ItemAppearanceModifierID << 24))] = appearanceMod;
|
||||
}
|
||||
|
||||
foreach (ItemSetSpellRecord itemSetSpell in CliDB.ItemSetSpellStorage.Values)
|
||||
foreach (ItemSetSpellRecord itemSetSpell in ItemSetSpellStorage.Values)
|
||||
_itemSetSpells.Add(itemSetSpell.ItemSetID, itemSetSpell);
|
||||
|
||||
foreach (var itemSpecOverride in CliDB.ItemSpecOverrideStorage.Values)
|
||||
foreach (var itemSpecOverride in ItemSpecOverrideStorage.Values)
|
||||
_itemSpecOverrides.Add(itemSpecOverride.ItemID, itemSpecOverride);
|
||||
|
||||
foreach (var itemBonusTreeAssignment in CliDB.ItemXBonusTreeStorage.Values)
|
||||
foreach (var itemBonusTreeAssignment in ItemXBonusTreeStorage.Values)
|
||||
_itemToBonusTree.Add(itemBonusTreeAssignment.ItemID, itemBonusTreeAssignment.ItemBonusTreeID);
|
||||
|
||||
foreach (var pair in _azeriteEmpoweredItems)
|
||||
LoadAzeriteEmpoweredItemUnlockMappings(azeriteUnlockMappings, pair.Key);
|
||||
|
||||
foreach (MapDifficultyRecord entry in CliDB.MapDifficultyStorage.Values)
|
||||
foreach (MapDifficultyRecord entry in MapDifficultyStorage.Values)
|
||||
{
|
||||
if (!_mapDifficulties.ContainsKey(entry.MapID))
|
||||
_mapDifficulties[entry.MapID] = new Dictionary<uint, MapDifficultyRecord>();
|
||||
@@ -347,31 +349,31 @@ namespace Game.DataStorage
|
||||
_mapDifficulties[0][0] = _mapDifficulties[1][0]; // map 0 is missing from MapDifficulty.dbc so we cheat a bit
|
||||
|
||||
List<MapDifficultyXConditionRecord> mapDifficultyConditions = new();
|
||||
foreach (var mapDifficultyCondition in CliDB.MapDifficultyXConditionStorage.Values)
|
||||
foreach (var mapDifficultyCondition in MapDifficultyXConditionStorage.Values)
|
||||
mapDifficultyConditions.Add(mapDifficultyCondition);
|
||||
|
||||
mapDifficultyConditions = mapDifficultyConditions.OrderBy(p => p.OrderIndex).ToList();
|
||||
|
||||
foreach (var mapDifficultyCondition in mapDifficultyConditions)
|
||||
{
|
||||
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(mapDifficultyCondition.PlayerConditionID);
|
||||
PlayerConditionRecord playerCondition = PlayerConditionStorage.LookupByKey(mapDifficultyCondition.PlayerConditionID);
|
||||
if (playerCondition != null)
|
||||
_mapDifficultyConditions.Add(mapDifficultyCondition.MapDifficultyID, Tuple.Create(mapDifficultyCondition.Id, playerCondition));
|
||||
}
|
||||
|
||||
foreach (var mount in CliDB.MountStorage.Values)
|
||||
foreach (var mount in MountStorage.Values)
|
||||
_mountsBySpellId[mount.SourceSpellID] = mount;
|
||||
|
||||
foreach (MountTypeXCapabilityRecord mountTypeCapability in CliDB.MountTypeXCapabilityStorage.Values)
|
||||
foreach (MountTypeXCapabilityRecord mountTypeCapability in MountTypeXCapabilityStorage.Values)
|
||||
_mountCapabilitiesByType.Add(mountTypeCapability.MountTypeID, mountTypeCapability);
|
||||
|
||||
foreach (var key in _mountCapabilitiesByType.Keys)
|
||||
_mountCapabilitiesByType[key].Sort(new MountTypeXCapabilityRecordComparer());
|
||||
|
||||
foreach (MountXDisplayRecord mountDisplay in CliDB.MountXDisplayStorage.Values)
|
||||
foreach (MountXDisplayRecord mountDisplay in MountXDisplayStorage.Values)
|
||||
_mountDisplays.Add(mountDisplay.MountID, mountDisplay);
|
||||
|
||||
foreach (var entry in CliDB.NameGenStorage.Values)
|
||||
foreach (var entry in NameGenStorage.Values)
|
||||
{
|
||||
if (!_nameGenData.ContainsKey(entry.RaceID))
|
||||
{
|
||||
@@ -383,7 +385,7 @@ namespace Game.DataStorage
|
||||
_nameGenData[entry.RaceID][entry.Sex].Add(entry);
|
||||
}
|
||||
|
||||
foreach (var namesProfanity in CliDB.NamesProfanityStorage.Values)
|
||||
foreach (var namesProfanity in NamesProfanityStorage.Values)
|
||||
{
|
||||
Cypher.Assert(namesProfanity.Language < (int)Locale.Total || namesProfanity.Language == -1);
|
||||
if (namesProfanity.Language != -1)
|
||||
@@ -398,10 +400,10 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var namesReserved in CliDB.NamesReservedStorage.Values)
|
||||
foreach (var namesReserved in NamesReservedStorage.Values)
|
||||
_nameValidators[(int)Locale.Total].Add(namesReserved.Name);
|
||||
|
||||
foreach (var namesReserved in CliDB.NamesReservedLocaleStorage.Values)
|
||||
foreach (var namesReserved in NamesReservedLocaleStorage.Values)
|
||||
{
|
||||
Cypher.Assert(!Convert.ToBoolean(namesReserved.LocaleMask & ~((1 << (int)Locale.Total) - 1)));
|
||||
for (int i = 0; i < (int)Locale.Total; ++i)
|
||||
@@ -414,28 +416,28 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (ParagonReputationRecord paragonReputation in CliDB.ParagonReputationStorage.Values)
|
||||
if (CliDB.FactionStorage.HasRecord(paragonReputation.FactionID))
|
||||
foreach (ParagonReputationRecord paragonReputation in ParagonReputationStorage.Values)
|
||||
if (FactionStorage.HasRecord(paragonReputation.FactionID))
|
||||
_paragonReputations[paragonReputation.FactionID] = paragonReputation;
|
||||
|
||||
foreach (var group in CliDB.PhaseXPhaseGroupStorage.Values)
|
||||
foreach (var group in PhaseXPhaseGroupStorage.Values)
|
||||
{
|
||||
PhaseRecord phase = CliDB.PhaseStorage.LookupByKey(group.PhaseId);
|
||||
PhaseRecord phase = PhaseStorage.LookupByKey(group.PhaseId);
|
||||
if (phase != null)
|
||||
_phasesByGroup.Add(group.PhaseGroupID, phase.Id);
|
||||
}
|
||||
|
||||
foreach (PowerTypeRecord powerType in CliDB.PowerTypeStorage.Values)
|
||||
foreach (PowerTypeRecord powerType in PowerTypeStorage.Values)
|
||||
{
|
||||
Cypher.Assert(powerType.PowerTypeEnum < PowerType.Max);
|
||||
|
||||
_powerTypes[powerType.PowerTypeEnum] = powerType;
|
||||
}
|
||||
|
||||
foreach (PvpItemRecord pvpItem in CliDB.PvpItemStorage.Values)
|
||||
foreach (PvpItemRecord pvpItem in PvpItemStorage.Values)
|
||||
_pvpItemBonus[pvpItem.ItemID] = pvpItem.ItemLevelDelta;
|
||||
|
||||
foreach (PvpTalentSlotUnlockRecord talentUnlock in CliDB.PvpTalentSlotUnlockStorage.Values)
|
||||
foreach (PvpTalentSlotUnlockRecord talentUnlock in PvpTalentSlotUnlockStorage.Values)
|
||||
{
|
||||
Cypher.Assert(talentUnlock.Slot < (1 << PlayerConst.MaxPvpTalentSlots));
|
||||
for (byte i = 0; i < PlayerConst.MaxPvpTalentSlots; ++i)
|
||||
@@ -448,10 +450,10 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (QuestLineXQuestRecord questLineQuest in CliDB.QuestLineXQuestStorage.Values)
|
||||
foreach (QuestLineXQuestRecord questLineQuest in QuestLineXQuestStorage.Values)
|
||||
_questsByQuestLine.Add(questLineQuest.QuestLineID, questLineQuest);
|
||||
|
||||
foreach (QuestPackageItemRecord questPackageItem in CliDB.QuestPackageItemStorage.Values)
|
||||
foreach (QuestPackageItemRecord questPackageItem in QuestPackageItemStorage.Values)
|
||||
{
|
||||
if (!_questPackages.ContainsKey(questPackageItem.PackageID))
|
||||
_questPackages[questPackageItem.PackageID] = Tuple.Create(new List<QuestPackageItemRecord>(), new List<QuestPackageItemRecord>());
|
||||
@@ -462,37 +464,37 @@ namespace Game.DataStorage
|
||||
_questPackages[questPackageItem.PackageID].Item2.Add(questPackageItem);
|
||||
}
|
||||
|
||||
foreach (RewardPackXCurrencyTypeRecord rewardPackXCurrencyType in CliDB.RewardPackXCurrencyTypeStorage.Values)
|
||||
foreach (RewardPackXCurrencyTypeRecord rewardPackXCurrencyType in RewardPackXCurrencyTypeStorage.Values)
|
||||
_rewardPackCurrencyTypes.Add(rewardPackXCurrencyType.RewardPackID, rewardPackXCurrencyType);
|
||||
|
||||
foreach (RewardPackXItemRecord rewardPackXItem in CliDB.RewardPackXItemStorage.Values)
|
||||
foreach (RewardPackXItemRecord rewardPackXItem in RewardPackXItemStorage.Values)
|
||||
_rewardPackItems.Add(rewardPackXItem.RewardPackID, rewardPackXItem);
|
||||
|
||||
foreach (SkillLineRecord skill in CliDB.SkillLineStorage.Values)
|
||||
foreach (SkillLineRecord skill in SkillLineStorage.Values)
|
||||
{
|
||||
if (skill.ParentSkillLineID != 0)
|
||||
_skillLinesByParentSkillLine.Add(skill.ParentSkillLineID, skill);
|
||||
}
|
||||
|
||||
foreach (SkillLineAbilityRecord skillLineAbility in CliDB.SkillLineAbilityStorage.Values)
|
||||
foreach (SkillLineAbilityRecord skillLineAbility in SkillLineAbilityStorage.Values)
|
||||
_skillLineAbilitiesBySkillupSkill.Add(skillLineAbility.SkillupSkillLineID != 0 ? skillLineAbility.SkillupSkillLineID : skillLineAbility.SkillLine, skillLineAbility);
|
||||
|
||||
foreach (SkillRaceClassInfoRecord entry in CliDB.SkillRaceClassInfoStorage.Values)
|
||||
foreach (SkillRaceClassInfoRecord entry in SkillRaceClassInfoStorage.Values)
|
||||
{
|
||||
if (CliDB.SkillLineStorage.ContainsKey(entry.SkillID))
|
||||
if (SkillLineStorage.ContainsKey(entry.SkillID))
|
||||
_skillRaceClassInfoBySkill.Add((uint)entry.SkillID, entry);
|
||||
}
|
||||
|
||||
foreach (var specSpells in CliDB.SpecializationSpellsStorage.Values)
|
||||
foreach (var specSpells in SpecializationSpellsStorage.Values)
|
||||
_specializationSpellsBySpec.Add(specSpells.SpecID, specSpells);
|
||||
|
||||
foreach (SpecSetMemberRecord specSetMember in CliDB.SpecSetMemberStorage.Values)
|
||||
foreach (SpecSetMemberRecord specSetMember in SpecSetMemberStorage.Values)
|
||||
_specsBySpecSet.Add(Tuple.Create((int)specSetMember.SpecSetID, (uint)specSetMember.ChrSpecializationID));
|
||||
|
||||
foreach (SpellClassOptionsRecord classOption in CliDB.SpellClassOptionsStorage.Values)
|
||||
foreach (SpellClassOptionsRecord classOption in SpellClassOptionsStorage.Values)
|
||||
_spellFamilyNames.Add(classOption.SpellClassSet);
|
||||
|
||||
foreach (SpellProcsPerMinuteModRecord ppmMod in CliDB.SpellProcsPerMinuteModStorage.Values)
|
||||
foreach (SpellProcsPerMinuteModRecord ppmMod in SpellProcsPerMinuteModStorage.Values)
|
||||
_spellProcsPerMinuteMods.Add(ppmMod.SpellProcsPerMinuteID, ppmMod);
|
||||
|
||||
for (var i = 0; i < (int)Class.Max; ++i)
|
||||
@@ -507,7 +509,7 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
foreach (TalentRecord talentInfo in CliDB.TalentStorage.Values)
|
||||
foreach (TalentRecord talentInfo in TalentStorage.Values)
|
||||
{
|
||||
//ASSERT(talentInfo.ClassID < MAX_CLASSES);
|
||||
//ASSERT(talentInfo.TierID < MAX_TALENT_TIERS, "MAX_TALENT_TIERS must be at least {0}", talentInfo.TierID);
|
||||
@@ -515,12 +517,12 @@ namespace Game.DataStorage
|
||||
_talentsByPosition[talentInfo.ClassID][talentInfo.TierID][talentInfo.ColumnIndex].Add(talentInfo);
|
||||
}
|
||||
|
||||
foreach (ToyRecord toy in CliDB.ToyStorage.Values)
|
||||
foreach (ToyRecord toy in ToyStorage.Values)
|
||||
_toys.Add(toy.ItemID);
|
||||
|
||||
foreach (TransmogSetItemRecord transmogSetItem in CliDB.TransmogSetItemStorage.Values)
|
||||
foreach (TransmogSetItemRecord transmogSetItem in TransmogSetItemStorage.Values)
|
||||
{
|
||||
TransmogSetRecord set = CliDB.TransmogSetStorage.LookupByKey(transmogSetItem.TransmogSetID);
|
||||
TransmogSetRecord set = TransmogSetStorage.LookupByKey(transmogSetItem.TransmogSetID);
|
||||
if (set == null)
|
||||
continue;
|
||||
|
||||
@@ -537,10 +539,10 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
MultiMap<int, UiMapAssignmentRecord> uiMapAssignmentByUiMap = new();
|
||||
foreach (UiMapAssignmentRecord uiMapAssignment in CliDB.UiMapAssignmentStorage.Values)
|
||||
foreach (UiMapAssignmentRecord uiMapAssignment in UiMapAssignmentStorage.Values)
|
||||
{
|
||||
uiMapAssignmentByUiMap.Add(uiMapAssignment.UiMapID, uiMapAssignment);
|
||||
UiMapRecord uiMap = CliDB.UiMapStorage.LookupByKey(uiMapAssignment.UiMapID);
|
||||
UiMapRecord uiMap = UiMapStorage.LookupByKey(uiMapAssignment.UiMapID);
|
||||
if (uiMap != null)
|
||||
{
|
||||
//ASSERT(uiMap.System < MAX_UI_MAP_SYSTEM, $"MAX_TALENT_TIERS must be at least {uiMap.System + 1}");
|
||||
@@ -556,13 +558,13 @@ namespace Game.DataStorage
|
||||
}
|
||||
|
||||
Dictionary<Tuple<int, uint>, UiMapLinkRecord> uiMapLinks = new();
|
||||
foreach (UiMapLinkRecord uiMapLink in CliDB.UiMapLinkStorage.Values)
|
||||
foreach (UiMapLinkRecord uiMapLink in UiMapLinkStorage.Values)
|
||||
uiMapLinks[Tuple.Create(uiMapLink.ParentUiMapID, (uint)uiMapLink.ChildUiMapID)] = uiMapLink;
|
||||
|
||||
foreach (UiMapRecord uiMap in CliDB.UiMapStorage.Values)
|
||||
foreach (UiMapRecord uiMap in UiMapStorage.Values)
|
||||
{
|
||||
UiMapBounds bounds = new();
|
||||
UiMapRecord parentUiMap = CliDB.UiMapStorage.LookupByKey(uiMap.ParentUiMapID);
|
||||
UiMapRecord parentUiMap = UiMapStorage.LookupByKey(uiMap.ParentUiMapID);
|
||||
if (parentUiMap != null)
|
||||
{
|
||||
if (parentUiMap.GetFlags().HasAnyFlag(UiMapFlag.NoWorldPositions))
|
||||
@@ -629,11 +631,11 @@ namespace Game.DataStorage
|
||||
_uiMapBounds[(int)uiMap.Id] = bounds;
|
||||
}
|
||||
|
||||
foreach (UiMapXMapArtRecord uiMapArt in CliDB.UiMapXMapArtStorage.Values)
|
||||
foreach (UiMapXMapArtRecord uiMapArt in UiMapXMapArtStorage.Values)
|
||||
if (uiMapArt.PhaseID != 0)
|
||||
_uiMapPhases.Add(uiMapArt.PhaseID);
|
||||
|
||||
foreach (WMOAreaTableRecord entry in CliDB.WMOAreaTableStorage.Values)
|
||||
foreach (WMOAreaTableRecord entry in WMOAreaTableStorage.Values)
|
||||
_wmoAreaTableLookup[Tuple.Create((short)entry.WmoID, (sbyte)entry.NameSetID, entry.WmoGroupID)] = entry;
|
||||
}
|
||||
|
||||
@@ -740,7 +742,7 @@ namespace Game.DataStorage
|
||||
public void LoadHotfixOptionalData(BitSet availableDb2Locales)
|
||||
{
|
||||
// Register allowed optional data keys
|
||||
_allowedHotfixOptionalData.Add(CliDB.BroadcastTextStorage.GetTableHash(), Tuple.Create(CliDB.TactKeyStorage.GetTableHash(), (AllowedHotfixOptionalData)ValidateBroadcastTextTactKeyOptionalData));
|
||||
_allowedHotfixOptionalData.Add(BroadcastTextStorage.GetTableHash(), Tuple.Create(TactKeyStorage.GetTableHash(), (AllowedHotfixOptionalData)ValidateBroadcastTextTactKeyOptionalData));
|
||||
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
@@ -833,7 +835,7 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetEmptyAnimStateID()
|
||||
{
|
||||
return (uint)CliDB.AnimationDataStorage.Count;
|
||||
return (uint)AnimationDataStorage.Count;
|
||||
}
|
||||
|
||||
public List<uint> GetAreasForGroup(uint areaGroupId)
|
||||
@@ -848,7 +850,7 @@ namespace Game.DataStorage
|
||||
if (objectAreaId == areaId)
|
||||
return true;
|
||||
|
||||
AreaTableRecord objectArea = CliDB.AreaTableStorage.LookupByKey(objectAreaId);
|
||||
AreaTableRecord objectArea = AreaTableStorage.LookupByKey(objectAreaId);
|
||||
if (objectArea == null)
|
||||
break;
|
||||
|
||||
@@ -880,7 +882,7 @@ namespace Game.DataStorage
|
||||
|
||||
public bool IsAzeriteItem(uint itemId)
|
||||
{
|
||||
return CliDB.AzeriteItemStorage.Any(pair => pair.Value.ItemID == itemId);
|
||||
return AzeriteItemStorage.Any(pair => pair.Value.ItemID == itemId);
|
||||
}
|
||||
|
||||
public AzeriteEssencePowerRecord GetAzeriteEssencePower(uint azeriteEssenceId, uint rank)
|
||||
@@ -915,7 +917,7 @@ namespace Game.DataStorage
|
||||
if (levels != null)
|
||||
return levels[tier];
|
||||
|
||||
AzeriteTierUnlockSetRecord azeriteTierUnlockSet = CliDB.AzeriteTierUnlockSetStorage.LookupByKey(azeriteUnlockSetId);
|
||||
AzeriteTierUnlockSetRecord azeriteTierUnlockSet = AzeriteTierUnlockSetStorage.LookupByKey(azeriteUnlockSetId);
|
||||
if (azeriteTierUnlockSet != null && azeriteTierUnlockSet.Flags.HasAnyFlag(AzeriteTierUnlockSetFlags.Default))
|
||||
{
|
||||
levels = _azeriteTierUnlockLevels.LookupByKey((azeriteUnlockSetId, ItemContext.None));
|
||||
@@ -923,7 +925,7 @@ namespace Game.DataStorage
|
||||
return levels[tier];
|
||||
}
|
||||
|
||||
return (uint)CliDB.AzeriteLevelInfoStorage.Count;
|
||||
return (uint)AzeriteLevelInfoStorage.Count;
|
||||
}
|
||||
|
||||
public string GetBroadcastTextValue(BroadcastTextRecord broadcastText, Locale locale = Locale.enUS, Gender gender = Gender.Male, bool forceGender = false)
|
||||
@@ -950,7 +952,7 @@ namespace Game.DataStorage
|
||||
|
||||
public string GetClassName(Class class_, Locale locale = Locale.enUS)
|
||||
{
|
||||
ChrClassesRecord classEntry = CliDB.ChrClassesStorage.LookupByKey(class_);
|
||||
ChrClassesRecord classEntry = ChrClassesStorage.LookupByKey(class_);
|
||||
if (classEntry == null)
|
||||
return "";
|
||||
|
||||
@@ -987,7 +989,7 @@ namespace Game.DataStorage
|
||||
|
||||
public string GetChrRaceName(Race race, Locale locale = Locale.enUS)
|
||||
{
|
||||
ChrRacesRecord raceEntry = CliDB.ChrRacesStorage.LookupByKey(race);
|
||||
ChrRacesRecord raceEntry = ChrRacesStorage.LookupByKey(race);
|
||||
if (raceEntry == null)
|
||||
return "";
|
||||
|
||||
@@ -1009,14 +1011,14 @@ namespace Game.DataStorage
|
||||
|
||||
public ContentTuningLevels? GetContentTuningData(uint contentTuningId, uint replacementConditionMask, bool forItem = false)
|
||||
{
|
||||
ContentTuningRecord contentTuning = CliDB.ContentTuningStorage.LookupByKey(contentTuningId);
|
||||
ContentTuningRecord contentTuning = ContentTuningStorage.LookupByKey(contentTuningId);
|
||||
if (contentTuning == null)
|
||||
return null;
|
||||
|
||||
if (forItem && contentTuning.GetFlags().HasFlag(ContentTuningFlag.DisabledForItem))
|
||||
return null;
|
||||
|
||||
int getLevelAdjustment(ContentTuningCalcType type) => type switch
|
||||
static int getLevelAdjustment(ContentTuningCalcType type) => type switch
|
||||
{
|
||||
ContentTuningCalcType.PlusOne => 1,
|
||||
ContentTuningCalcType.PlusMaxLevelForExpansion => (int)Global.ObjectMgr.GetMaxLevelForExpansion((Expansion)WorldConfig.GetUIntValue(WorldCfg.Expansion)),
|
||||
@@ -1051,7 +1053,7 @@ namespace Game.DataStorage
|
||||
if (petfamily == CreatureFamily.None)
|
||||
return null;
|
||||
|
||||
CreatureFamilyRecord petFamily = CliDB.CreatureFamilyStorage.LookupByKey(petfamily);
|
||||
CreatureFamilyRecord petFamily = CreatureFamilyStorage.LookupByKey(petfamily);
|
||||
if (petFamily == null)
|
||||
return "";
|
||||
|
||||
@@ -1096,7 +1098,7 @@ namespace Game.DataStorage
|
||||
if (points.Empty())
|
||||
return 0.0f;
|
||||
|
||||
CurveRecord curve = CliDB.CurveStorage.LookupByKey(curveId);
|
||||
CurveRecord curve = CurveStorage.LookupByKey(curveId);
|
||||
switch (DetermineCurveType(curve, points))
|
||||
{
|
||||
case CurveInterpolationMode.Linear:
|
||||
@@ -1135,7 +1137,7 @@ namespace Game.DataStorage
|
||||
if (pointIndex == 1)
|
||||
return points[1].Pos.Y;
|
||||
if (pointIndex >= points.Count - 1)
|
||||
return points[points.Count - 2].Pos.Y;
|
||||
return points[^2].Pos.Y;
|
||||
float xDiff = points[pointIndex].Pos.X - points[pointIndex - 1].Pos.X;
|
||||
if (xDiff == 0.0)
|
||||
return points[pointIndex].Pos.Y;
|
||||
@@ -1224,16 +1226,16 @@ namespace Game.DataStorage
|
||||
switch (unitClass)
|
||||
{
|
||||
case Class.Warrior:
|
||||
classMod = CliDB.ExpectedStatModStorage.LookupByKey(4);
|
||||
classMod = ExpectedStatModStorage.LookupByKey(4);
|
||||
break;
|
||||
case Class.Paladin:
|
||||
classMod = CliDB.ExpectedStatModStorage.LookupByKey(2);
|
||||
classMod = ExpectedStatModStorage.LookupByKey(2);
|
||||
break;
|
||||
case Class.Rogue:
|
||||
classMod = CliDB.ExpectedStatModStorage.LookupByKey(3);
|
||||
classMod = ExpectedStatModStorage.LookupByKey(3);
|
||||
break;
|
||||
case Class.Mage:
|
||||
classMod = CliDB.ExpectedStatModStorage.LookupByKey(1);
|
||||
classMod = ExpectedStatModStorage.LookupByKey(1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1326,7 +1328,7 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetGlobalCurveId(GlobalCurve globalCurveType)
|
||||
{
|
||||
foreach (var globalCurveEntry in CliDB.GlobalCurveStorage.Values)
|
||||
foreach (var globalCurveEntry in GlobalCurveStorage.Values)
|
||||
if (globalCurveEntry.Type == globalCurveType)
|
||||
return globalCurveEntry.CurveID;
|
||||
|
||||
@@ -1376,7 +1378,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
List<uint> bonusListIDs = new();
|
||||
|
||||
ItemSparseRecord proto = CliDB.ItemSparseStorage.LookupByKey(itemId);
|
||||
ItemSparseRecord proto = ItemSparseStorage.LookupByKey(itemId);
|
||||
if (proto == null)
|
||||
return bonusListIDs;
|
||||
|
||||
@@ -1413,7 +1415,7 @@ namespace Game.DataStorage
|
||||
}
|
||||
});
|
||||
}
|
||||
ItemLevelSelectorRecord selector = CliDB.ItemLevelSelectorStorage.LookupByKey(itemLevelSelectorId);
|
||||
ItemLevelSelectorRecord selector = ItemLevelSelectorStorage.LookupByKey(itemLevelSelectorId);
|
||||
if (selector != null)
|
||||
{
|
||||
short delta = (short)(selector.MinItemLevel - proto.ItemLevel);
|
||||
@@ -1422,7 +1424,7 @@ namespace Game.DataStorage
|
||||
if (bonus != 0)
|
||||
bonusListIDs.Add(bonus);
|
||||
|
||||
ItemLevelSelectorQualitySetRecord selectorQualitySet = CliDB.ItemLevelSelectorQualitySetStorage.LookupByKey(selector.ItemLevelSelectorQualitySetID);
|
||||
ItemLevelSelectorQualitySetRecord selectorQualitySet = ItemLevelSelectorQualitySetStorage.LookupByKey(selector.ItemLevelSelectorQualitySetID);
|
||||
if (selectorQualitySet != null)
|
||||
{
|
||||
var itemSelectorQualities = _itemLevelQualitySelectorQualities.LookupByKey(selector.ItemLevelSelectorQualitySetID);
|
||||
@@ -1465,7 +1467,7 @@ namespace Game.DataStorage
|
||||
|
||||
public List<uint> GetAllItemBonusTreeBonuses(uint itemBonusTreeId)
|
||||
{
|
||||
List<uint> bonusListIDs = new List<uint>();
|
||||
List<uint> bonusListIDs = new();
|
||||
VisitItemBonusTree(itemBonusTreeId, true, bonusTreeNode =>
|
||||
{
|
||||
if (bonusTreeNode.ChildItemBonusListID != 0)
|
||||
@@ -1486,7 +1488,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
if (bonusTreeNode.ChildItemBonusListID == 0 && bonusTreeNode.ChildItemLevelSelectorID != 0)
|
||||
{
|
||||
ItemLevelSelectorRecord selector = CliDB.ItemLevelSelectorStorage.LookupByKey(bonusTreeNode.ChildItemLevelSelectorID);
|
||||
ItemLevelSelectorRecord selector = ItemLevelSelectorStorage.LookupByKey(bonusTreeNode.ChildItemLevelSelectorID);
|
||||
if (selector == null)
|
||||
return;
|
||||
|
||||
@@ -1531,7 +1533,7 @@ namespace Game.DataStorage
|
||||
ItemModifiedAppearanceRecord modifiedAppearance = GetItemModifiedAppearance(itemId, appearanceModId);
|
||||
if (modifiedAppearance != null)
|
||||
{
|
||||
ItemAppearanceRecord itemAppearance = CliDB.ItemAppearanceStorage.LookupByKey(modifiedAppearance.ItemAppearanceID);
|
||||
ItemAppearanceRecord itemAppearance = ItemAppearanceStorage.LookupByKey(modifiedAppearance.ItemAppearanceID);
|
||||
if (itemAppearance != null)
|
||||
return itemAppearance.ItemDisplayInfoID;
|
||||
}
|
||||
@@ -1573,7 +1575,7 @@ namespace Game.DataStorage
|
||||
|
||||
public LFGDungeonsRecord GetLfgDungeon(uint mapId, Difficulty difficulty)
|
||||
{
|
||||
foreach (LFGDungeonsRecord dungeon in CliDB.LFGDungeonsStorage.Values)
|
||||
foreach (LFGDungeonsRecord dungeon in LFGDungeonsStorage.Values)
|
||||
if (dungeon.MapID == mapId && dungeon.DifficultyID == difficulty)
|
||||
return dungeon;
|
||||
|
||||
@@ -1582,7 +1584,7 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetDefaultMapLight(uint mapId)
|
||||
{
|
||||
foreach (var light in CliDB.LightStorage.Values.Reverse())
|
||||
foreach (var light in LightStorage.Values.Reverse())
|
||||
{
|
||||
if (light.ContinentID == mapId && light.GameCoords.X == 0.0f && light.GameCoords.Y == 0.0f && light.GameCoords.Z == 0.0f)
|
||||
return light.Id;
|
||||
@@ -1593,7 +1595,7 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetLiquidFlags(uint liquidType)
|
||||
{
|
||||
LiquidTypeRecord liq = CliDB.LiquidTypeStorage.LookupByKey(liquidType);
|
||||
LiquidTypeRecord liq = LiquidTypeStorage.LookupByKey(liquidType);
|
||||
if (liq != null)
|
||||
return 1u << liq.SoundBank;
|
||||
|
||||
@@ -1616,7 +1618,7 @@ namespace Game.DataStorage
|
||||
|
||||
foreach (var pair in dicMapDiff)
|
||||
{
|
||||
DifficultyRecord difficultyEntry = CliDB.DifficultyStorage.LookupByKey(pair.Key);
|
||||
DifficultyRecord difficultyEntry = DifficultyStorage.LookupByKey(pair.Key);
|
||||
if (difficultyEntry == null)
|
||||
continue;
|
||||
|
||||
@@ -1647,7 +1649,7 @@ namespace Game.DataStorage
|
||||
|
||||
public MapDifficultyRecord GetDownscaledMapDifficultyData(uint mapId, ref Difficulty difficulty)
|
||||
{
|
||||
DifficultyRecord diffEntry = CliDB.DifficultyStorage.LookupByKey(difficulty);
|
||||
DifficultyRecord diffEntry = DifficultyStorage.LookupByKey(difficulty);
|
||||
if (diffEntry == null)
|
||||
return GetDefaultMapDifficulty(mapId, ref difficulty);
|
||||
|
||||
@@ -1656,7 +1658,7 @@ namespace Game.DataStorage
|
||||
while (mapDiff == null)
|
||||
{
|
||||
tmpDiff = (Difficulty)diffEntry.FallbackDifficultyID;
|
||||
diffEntry = CliDB.DifficultyStorage.LookupByKey(tmpDiff);
|
||||
diffEntry = DifficultyStorage.LookupByKey(tmpDiff);
|
||||
if (diffEntry == null)
|
||||
return GetDefaultMapDifficulty(mapId, ref difficulty);
|
||||
|
||||
@@ -1680,7 +1682,7 @@ namespace Game.DataStorage
|
||||
|
||||
public MountRecord GetMountById(uint id)
|
||||
{
|
||||
return CliDB.MountStorage.LookupByKey(id);
|
||||
return MountStorage.LookupByKey(id);
|
||||
}
|
||||
|
||||
public List<MountTypeXCapabilityRecord> GetMountCapabilities(uint mountType)
|
||||
@@ -1722,20 +1724,17 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetNumTalentsAtLevel(uint level, Class playerClass)
|
||||
{
|
||||
NumTalentsAtLevelRecord numTalentsAtLevel = CliDB.NumTalentsAtLevelStorage.LookupByKey(level);
|
||||
NumTalentsAtLevelRecord numTalentsAtLevel = NumTalentsAtLevelStorage.LookupByKey(level);
|
||||
if (numTalentsAtLevel == null)
|
||||
numTalentsAtLevel = CliDB.NumTalentsAtLevelStorage.LastOrDefault().Value;
|
||||
numTalentsAtLevel = NumTalentsAtLevelStorage.LastOrDefault().Value;
|
||||
if (numTalentsAtLevel != null)
|
||||
{
|
||||
switch (playerClass)
|
||||
return playerClass switch
|
||||
{
|
||||
case Class.Deathknight:
|
||||
return numTalentsAtLevel.NumTalentsDeathKnight;
|
||||
case Class.DemonHunter:
|
||||
return numTalentsAtLevel.NumTalentsDemonHunter;
|
||||
default:
|
||||
return numTalentsAtLevel.NumTalents;
|
||||
}
|
||||
Class.Deathknight => numTalentsAtLevel.NumTalentsDeathKnight,
|
||||
Class.DemonHunter => numTalentsAtLevel.NumTalentsDemonHunter,
|
||||
_ => numTalentsAtLevel.NumTalents,
|
||||
};
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1748,7 +1747,7 @@ namespace Game.DataStorage
|
||||
public PvpDifficultyRecord GetBattlegroundBracketByLevel(uint mapid, uint level)
|
||||
{
|
||||
PvpDifficultyRecord maxEntry = null; // used for level > max listed level case
|
||||
foreach (var entry in CliDB.PvpDifficultyStorage.Values)
|
||||
foreach (var entry in PvpDifficultyStorage.Values)
|
||||
{
|
||||
// skip unrelated and too-high brackets
|
||||
if (entry.MapID != mapid || entry.MinLevel > level)
|
||||
@@ -1768,7 +1767,7 @@ namespace Game.DataStorage
|
||||
|
||||
public PvpDifficultyRecord GetBattlegroundBracketById(uint mapid, BattlegroundBracketId id)
|
||||
{
|
||||
foreach (var entry in CliDB.PvpDifficultyStorage.Values)
|
||||
foreach (var entry in PvpDifficultyStorage.Values)
|
||||
if (entry.MapID == mapid && entry.GetBracketId() == id)
|
||||
return entry;
|
||||
|
||||
@@ -1824,7 +1823,7 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetQuestUniqueBitFlag(uint questId)
|
||||
{
|
||||
QuestV2Record v2 = CliDB.QuestV2Storage.LookupByKey(questId);
|
||||
QuestV2Record v2 = QuestV2Storage.LookupByKey(questId);
|
||||
if (v2 == null)
|
||||
return 0;
|
||||
|
||||
@@ -1846,7 +1845,7 @@ namespace Game.DataStorage
|
||||
|
||||
public PowerTypeRecord GetPowerTypeByName(string name)
|
||||
{
|
||||
foreach (PowerTypeRecord powerType in CliDB.PowerTypeStorage.Values)
|
||||
foreach (PowerTypeRecord powerType in PowerTypeStorage.Values)
|
||||
{
|
||||
string powerName = powerType.NameGlobalStringTag;
|
||||
if (powerName.ToLower() == name)
|
||||
@@ -1938,10 +1937,10 @@ namespace Game.DataStorage
|
||||
if (itemTotemCategoryId == 0)
|
||||
return false;
|
||||
|
||||
TotemCategoryRecord itemEntry = CliDB.TotemCategoryStorage.LookupByKey(itemTotemCategoryId);
|
||||
TotemCategoryRecord itemEntry = TotemCategoryStorage.LookupByKey(itemTotemCategoryId);
|
||||
if (itemEntry == null)
|
||||
return false;
|
||||
TotemCategoryRecord reqEntry = CliDB.TotemCategoryStorage.LookupByKey(requiredTotemCategoryId);
|
||||
TotemCategoryRecord reqEntry = TotemCategoryStorage.LookupByKey(requiredTotemCategoryId);
|
||||
if (reqEntry == null)
|
||||
return false;
|
||||
|
||||
@@ -2027,7 +2026,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
while (areaId != uiMapAssignment.AreaID)
|
||||
{
|
||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(areaId);
|
||||
AreaTableRecord areaEntry = AreaTableStorage.LookupByKey(areaId);
|
||||
if (areaEntry != null)
|
||||
{
|
||||
areaId = areaEntry.ParentAreaID;
|
||||
@@ -2047,7 +2046,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
if (mapId != uiMapAssignment.MapID)
|
||||
{
|
||||
MapRecord mapEntry = CliDB.MapStorage.LookupByKey(mapId);
|
||||
MapRecord mapEntry = MapStorage.LookupByKey(mapId);
|
||||
if (mapEntry != null)
|
||||
{
|
||||
if (mapEntry.ParentMapID == uiMapAssignment.MapID)
|
||||
@@ -2112,16 +2111,16 @@ namespace Game.DataStorage
|
||||
iterateUiMapAssignments(_uiMapAssignmentByWmoGroup[(int)system], wmoGroupId);
|
||||
iterateUiMapAssignments(_uiMapAssignmentByWmoDoodadPlacement[(int)system], wmoDoodadPlacementId);
|
||||
|
||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(areaId);
|
||||
AreaTableRecord areaEntry = AreaTableStorage.LookupByKey(areaId);
|
||||
while (areaEntry != null)
|
||||
{
|
||||
iterateUiMapAssignments(_uiMapAssignmentByArea[(int)system], (int)areaEntry.Id);
|
||||
areaEntry = CliDB.AreaTableStorage.LookupByKey(areaEntry.ParentAreaID);
|
||||
areaEntry = AreaTableStorage.LookupByKey(areaEntry.ParentAreaID);
|
||||
}
|
||||
|
||||
if (mapId > 0)
|
||||
{
|
||||
MapRecord mapEntry = CliDB.MapStorage.LookupByKey(mapId);
|
||||
MapRecord mapEntry = MapStorage.LookupByKey(mapId);
|
||||
if (mapEntry != null)
|
||||
{
|
||||
iterateUiMapAssignments(_uiMapAssignmentByMap[(int)system], (int)mapEntry.Id);
|
||||
@@ -2137,7 +2136,7 @@ namespace Game.DataStorage
|
||||
|
||||
Vector2 CalculateGlobalUiMapPosition(int uiMapID, Vector2 uiPosition)
|
||||
{
|
||||
UiMapRecord uiMap = CliDB.UiMapStorage.LookupByKey(uiMapID);
|
||||
UiMapRecord uiMap = UiMapStorage.LookupByKey(uiMapID);
|
||||
while (uiMap != null)
|
||||
{
|
||||
if (uiMap.Type <= UiMapType.Continent)
|
||||
@@ -2150,7 +2149,7 @@ namespace Game.DataStorage
|
||||
uiPosition.X = ((1.0f - uiPosition.X) * bounds.Bounds[1]) + (bounds.Bounds[3] * uiPosition.X);
|
||||
uiPosition.Y = ((1.0f - uiPosition.Y) * bounds.Bounds[0]) + (bounds.Bounds[2] * uiPosition.Y);
|
||||
|
||||
uiMap = CliDB.UiMapStorage.LookupByKey(uiMap.ParentUiMapID);
|
||||
uiMap = UiMapStorage.LookupByKey(uiMap.ParentUiMapID);
|
||||
}
|
||||
|
||||
return uiPosition;
|
||||
@@ -2158,14 +2157,12 @@ namespace Game.DataStorage
|
||||
|
||||
public bool GetUiMapPosition(float x, float y, float z, int mapId, int areaId, int wmoDoodadPlacementId, int wmoGroupId, UiMapSystem system, bool local, out Vector2 newPos)
|
||||
{
|
||||
int throwaway;
|
||||
return GetUiMapPosition(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system, local, out throwaway, out newPos);
|
||||
return GetUiMapPosition(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system, local, out _, out newPos);
|
||||
}
|
||||
|
||||
public bool GetUiMapPosition(float x, float y, float z, int mapId, int areaId, int wmoDoodadPlacementId, int wmoGroupId, UiMapSystem system, bool local, out int uiMapId)
|
||||
{
|
||||
Vector2 throwaway;
|
||||
return GetUiMapPosition(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system, local, out uiMapId, out throwaway);
|
||||
return GetUiMapPosition(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system, local, out uiMapId, out _);
|
||||
}
|
||||
|
||||
public bool GetUiMapPosition(float x, float y, float z, int mapId, int areaId, int wmoDoodadPlacementId, int wmoGroupId, UiMapSystem system, bool local, out int uiMapId, out Vector2 newPos)
|
||||
@@ -2198,7 +2195,7 @@ namespace Game.DataStorage
|
||||
|
||||
public void Zone2MapCoordinates(uint areaId, ref float x, ref float y)
|
||||
{
|
||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(areaId);
|
||||
AreaTableRecord areaEntry = AreaTableStorage.LookupByKey(areaId);
|
||||
if (areaEntry == null)
|
||||
return;
|
||||
|
||||
@@ -2554,19 +2551,6 @@ namespace Game.DataStorage
|
||||
}
|
||||
}
|
||||
|
||||
class ItemLevelSelectorQualityRecordComparator : IComparer<ItemLevelSelectorQualityRecord>
|
||||
{
|
||||
public bool Compare(ItemLevelSelectorQualityRecord left, ItemQuality quality)
|
||||
{
|
||||
return left.Quality < (byte)quality;
|
||||
}
|
||||
|
||||
public int Compare(ItemLevelSelectorQualityRecord left, ItemLevelSelectorQualityRecord right)
|
||||
{
|
||||
return left.Quality.CompareTo(right.Quality);
|
||||
}
|
||||
}
|
||||
|
||||
public struct ContentTuningLevels
|
||||
{
|
||||
public short MinLevel;
|
||||
|
||||
@@ -2078,7 +2078,7 @@ namespace Game.Entities
|
||||
|
||||
PhasingHandler.InheritPhaseShift(trigger, this);
|
||||
|
||||
CastSpellExtraArgs args = new CastSpellExtraArgs(triggered);
|
||||
CastSpellExtraArgs args = new(triggered);
|
||||
Unit owner = GetOwner();
|
||||
if (owner)
|
||||
{
|
||||
|
||||
@@ -1398,7 +1398,7 @@ namespace Game.Entities
|
||||
if (auraId == 0)
|
||||
return;
|
||||
|
||||
CastSpellExtraArgs args = new CastSpellExtraArgs(TriggerCastFlags.FullMask);
|
||||
CastSpellExtraArgs args = new(TriggerCastFlags.FullMask);
|
||||
|
||||
if (auraId == 35696) // Demonic Knowledge
|
||||
args.SpellValueOverrides.Add(SpellValueMod.BasePoint0, MathFunctions.CalculatePct(aura.GetDamage(), GetStat(Stats.Stamina) + GetStat(Stats.Intellect)));
|
||||
|
||||
@@ -1367,7 +1367,7 @@ namespace Game.Entities
|
||||
continue;
|
||||
}
|
||||
|
||||
WorldLocation location = new WorldLocation(result.Read<uint>(1), result.Read<float>(2), result.Read<float>(3), result.Read<float>(4), result.Read<float>(5));
|
||||
WorldLocation location = new(result.Read<uint>(1), result.Read<float>(2), result.Read<float>(3), result.Read<float>(4), result.Read<float>(5));
|
||||
if (!GridDefines.IsValidMapCoord(location))
|
||||
{
|
||||
Log.outError(LogFilter.Spells, $"Player._LoadStoredAuraTeleportLocations: Player {GetName()} ({GetGUID()}) spell (ID: {spellId}) has invalid position on map {location.GetMapId()}, {location}.");
|
||||
|
||||
@@ -5134,7 +5134,7 @@ namespace Game.Entities
|
||||
}
|
||||
else if (apply)
|
||||
{
|
||||
CastSpellExtraArgs args = new CastSpellExtraArgs(TriggerCastFlags.FullMask);
|
||||
CastSpellExtraArgs args = new(TriggerCastFlags.FullMask);
|
||||
args.CastItem = artifact;
|
||||
if (artifactPowerRank.AuraPointsOverride != 0)
|
||||
for (int i = 0; i < SpellConst.MaxEffects; ++i)
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace Game
|
||||
{
|
||||
foreach (var hotfixRecord in hotfixRecords)
|
||||
{
|
||||
HotfixConnect.HotfixData hotfixData = new HotfixConnect.HotfixData();
|
||||
HotfixConnect.HotfixData hotfixData = new();
|
||||
hotfixData.Record = hotfixRecord;
|
||||
if (hotfixRecord.HotfixStatus == HotfixRecord.Status.Valid)
|
||||
{
|
||||
|
||||
@@ -261,7 +261,7 @@ namespace Game.Loots
|
||||
|
||||
// Process currency items
|
||||
uint max_slot = GetMaxSlotInLootFor(player);
|
||||
LootItem item = null;
|
||||
LootItem item;
|
||||
int itemsSize = items.Count;
|
||||
for (byte i = 0; i < max_slot; ++i)
|
||||
{
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace Game.Loots
|
||||
do
|
||||
{
|
||||
ulong key = result.Read<ulong>(0);
|
||||
var itr = _lootItemStorage.LookupByKey(key);
|
||||
if (!_lootItemStorage.ContainsKey(key))
|
||||
_lootItemStorage[key] = new StoredLootContainer(key);
|
||||
|
||||
@@ -252,15 +251,12 @@ namespace Game.Loots
|
||||
stmt.AddValue(9, lootItem.randomBonusListId);
|
||||
stmt.AddValue(10, (uint)lootItem.context);
|
||||
|
||||
foreach (uint token in lootItem.BonusListIDs)
|
||||
{
|
||||
StringBuilder bonusListIDs = new();
|
||||
foreach (int bonusListID in lootItem.BonusListIDs)
|
||||
bonusListIDs.Append(bonusListID + ' ');
|
||||
StringBuilder bonusListIDs = new();
|
||||
foreach (int bonusListID in lootItem.BonusListIDs)
|
||||
bonusListIDs.Append(bonusListID + ' ');
|
||||
|
||||
stmt.AddValue(11, bonusListIDs.ToString());
|
||||
trans.Append(stmt);
|
||||
}
|
||||
stmt.AddValue(11, bonusListIDs.ToString());
|
||||
trans.Append(stmt);
|
||||
}
|
||||
|
||||
public void AddMoney(uint money, SQLTransaction trans)
|
||||
|
||||
+26
-28
@@ -43,35 +43,33 @@ namespace Game.Maps
|
||||
if (!File.Exists(filename))
|
||||
return LoadResult.FileNotFound;
|
||||
|
||||
using (BinaryReader reader = new(new FileStream(filename, FileMode.Open, FileAccess.Read)))
|
||||
using BinaryReader reader = new(new FileStream(filename, FileMode.Open, FileAccess.Read));
|
||||
MapFileHeader header = reader.Read<MapFileHeader>();
|
||||
if (header.mapMagic != MapConst.MapMagic || (header.versionMagic != MapConst.MapVersionMagic && header.versionMagic != MapConst.MapVersionMagic2)) // Hack for some different extractors using v2.0 header
|
||||
{
|
||||
MapFileHeader header = reader.Read<MapFileHeader>();
|
||||
if (header.mapMagic != MapConst.MapMagic || (header.versionMagic != MapConst.MapVersionMagic && header.versionMagic != MapConst.MapVersionMagic2)) // Hack for some different extractors using v2.0 header
|
||||
{
|
||||
Log.outError(LogFilter.Maps, $"Map file '{filename}' is from an incompatible map version. Please recreate using the mapextractor.");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.areaMapOffset != 0 && !LoadAreaData(reader, header.areaMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map area data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.heightMapOffset != 0 && !LoadHeightData(reader, header.heightMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map height data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.liquidMapOffset != 0 && !LoadLiquidData(reader, header.liquidMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map liquids data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
return LoadResult.Success;
|
||||
Log.outError(LogFilter.Maps, $"Map file '{filename}' is from an incompatible map version. Please recreate using the mapextractor.");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.areaMapOffset != 0 && !LoadAreaData(reader, header.areaMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map area data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.heightMapOffset != 0 && !LoadHeightData(reader, header.heightMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map height data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
if (header.liquidMapOffset != 0 && !LoadLiquidData(reader, header.liquidMapOffset))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Error loading map liquids data");
|
||||
return LoadResult.ReadFromFileFailed;
|
||||
}
|
||||
|
||||
return LoadResult.Success;
|
||||
}
|
||||
|
||||
public void UnloadData()
|
||||
@@ -450,7 +448,7 @@ namespace Game.Maps
|
||||
float gx = x - ((int)gridCoord.X_coord - MapConst.CenterGridId + 1) * MapConst.SizeofGrids;
|
||||
float gy = y - ((int)gridCoord.Y_coord - MapConst.CenterGridId + 1) * MapConst.SizeofGrids;
|
||||
|
||||
uint quarterIndex = 0;
|
||||
uint quarterIndex;
|
||||
if (Convert.ToBoolean(doubleGridY & 1))
|
||||
{
|
||||
if (Convert.ToBoolean(doubleGridX & 1))
|
||||
|
||||
@@ -2156,7 +2156,7 @@ namespace Game.Maps
|
||||
{
|
||||
me = creature;
|
||||
m_range = (dist == 0 ? 9999 : dist);
|
||||
m_force = (dist == 0 ? false : true);
|
||||
m_force = (dist != 0);
|
||||
}
|
||||
|
||||
public bool Invoke(Unit u)
|
||||
|
||||
@@ -82,8 +82,8 @@ namespace Game.Maps
|
||||
if (GetId() != mapId || player == null)
|
||||
return null;
|
||||
|
||||
Map map = null;
|
||||
uint newInstanceId = 0; // instanceId of the resulting map
|
||||
Map map;
|
||||
uint newInstanceId; // instanceId of the resulting map
|
||||
|
||||
if (IsBattlegroundOrArena())
|
||||
{
|
||||
@@ -124,7 +124,7 @@ namespace Game.Maps
|
||||
return (map && map.GetId() == GetId()) ? map : null; // is this check necessary? or does MapInstanced only find instances of itself?
|
||||
}
|
||||
|
||||
InstanceBind groupBind = null;
|
||||
InstanceBind groupBind;
|
||||
Group group = player.GetGroup();
|
||||
// use the player's difficulty setting (it may not be the same as the group's)
|
||||
if (group)
|
||||
|
||||
@@ -57,31 +57,29 @@ namespace Game
|
||||
return false;
|
||||
}
|
||||
|
||||
using (BinaryReader reader = new(new FileStream(filename, FileMode.Open, FileAccess.Read), Encoding.UTF8))
|
||||
using BinaryReader reader = new(new FileStream(filename, FileMode.Open, FileAccess.Read), Encoding.UTF8);
|
||||
Detour.dtNavMeshParams Params = new();
|
||||
Params.orig[0] = reader.ReadSingle();
|
||||
Params.orig[1] = reader.ReadSingle();
|
||||
Params.orig[2] = reader.ReadSingle();
|
||||
|
||||
Params.tileWidth = reader.ReadSingle();
|
||||
Params.tileHeight = reader.ReadSingle();
|
||||
Params.maxTiles = reader.ReadInt32();
|
||||
Params.maxPolys = reader.ReadInt32();
|
||||
|
||||
Detour.dtNavMesh mesh = new();
|
||||
if (Detour.dtStatusFailed(mesh.init(Params)))
|
||||
{
|
||||
Detour.dtNavMeshParams Params = new();
|
||||
Params.orig[0] = reader.ReadSingle();
|
||||
Params.orig[1] = reader.ReadSingle();
|
||||
Params.orig[2] = reader.ReadSingle();
|
||||
|
||||
Params.tileWidth = reader.ReadSingle();
|
||||
Params.tileHeight = reader.ReadSingle();
|
||||
Params.maxTiles = reader.ReadInt32();
|
||||
Params.maxPolys = reader.ReadInt32();
|
||||
|
||||
Detour.dtNavMesh mesh = new();
|
||||
if (Detour.dtStatusFailed(mesh.init(Params)))
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMapData: Failed to initialize dtNavMesh for mmap {0:D4} from file {1}", mapId, filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.Maps, "MMAP:loadMapData: Loaded {0:D4}.mmap", mapId);
|
||||
|
||||
// store inside our map list
|
||||
loadedMMaps[mapId] = new MMapData(mesh);
|
||||
return true;
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMapData: Failed to initialize dtNavMesh for mmap {0:D4} from file {1}", mapId, filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.Maps, "MMAP:loadMapData: Loaded {0:D4}.mmap", mapId);
|
||||
|
||||
// store inside our map list
|
||||
loadedMMaps[mapId] = new MMapData(mesh);
|
||||
return true;
|
||||
}
|
||||
|
||||
uint PackTileID(uint x, uint y)
|
||||
@@ -133,38 +131,36 @@ namespace Game
|
||||
return false;
|
||||
}
|
||||
|
||||
using (BinaryReader reader = new(new FileStream(fileName, FileMode.Open, FileAccess.Read)))
|
||||
using BinaryReader reader = new(new FileStream(fileName, FileMode.Open, FileAccess.Read));
|
||||
MmapTileHeader fileHeader = reader.Read<MmapTileHeader>();
|
||||
if (fileHeader.mmapMagic != MapConst.mmapMagic)
|
||||
{
|
||||
MmapTileHeader fileHeader = reader.Read<MmapTileHeader>();
|
||||
if (fileHeader.mmapMagic != MapConst.mmapMagic)
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: Bad header in mmap {0:D4}{1:D2}{2:D2}.mmtile", mapId, x, y);
|
||||
return false;
|
||||
}
|
||||
if (fileHeader.mmapVersion != MapConst.mmapVersion)
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: {0:D4}{1:D2}{2:D2}.mmtile was built with generator v{3}, expected v{4}",
|
||||
mapId, x, y, fileHeader.mmapVersion, MapConst.mmapVersion);
|
||||
return false;
|
||||
}
|
||||
|
||||
var bytes = reader.ReadBytes((int)fileHeader.size);
|
||||
Detour.dtRawTileData data = new();
|
||||
data.FromBytes(bytes, 0);
|
||||
|
||||
ulong tileRef = 0;
|
||||
// memory allocated for data is now managed by detour, and will be deallocated when the tile is removed
|
||||
if (Detour.dtStatusSucceed(mmap.navMesh.addTile(data, 1, 0, ref tileRef)))
|
||||
{
|
||||
mmap.loadedTileRefs.Add(packedGridPos, tileRef);
|
||||
++loadedTiles;
|
||||
Log.outInfo(LogFilter.Maps, "MMAP:loadMap: Loaded mmtile {0:D4}[{1:D2}, {2:D2}]", mapId, x, y);
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: Could not load {0:D4}{1:D2}{2:D2}.mmtile into navmesh", mapId, x, y);
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: Bad header in mmap {0:D4}{1:D2}{2:D2}.mmtile", mapId, x, y);
|
||||
return false;
|
||||
}
|
||||
if (fileHeader.mmapVersion != MapConst.mmapVersion)
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: {0:D4}{1:D2}{2:D2}.mmtile was built with generator v{3}, expected v{4}",
|
||||
mapId, x, y, fileHeader.mmapVersion, MapConst.mmapVersion);
|
||||
return false;
|
||||
}
|
||||
|
||||
var bytes = reader.ReadBytes((int)fileHeader.size);
|
||||
Detour.dtRawTileData data = new();
|
||||
data.FromBytes(bytes, 0);
|
||||
|
||||
ulong tileRef = 0;
|
||||
// memory allocated for data is now managed by detour, and will be deallocated when the tile is removed
|
||||
if (Detour.dtStatusSucceed(mmap.navMesh.addTile(data, 1, 0, ref tileRef)))
|
||||
{
|
||||
mmap.loadedTileRefs.Add(packedGridPos, tileRef);
|
||||
++loadedTiles;
|
||||
Log.outInfo(LogFilter.Maps, "MMAP:loadMap: Loaded mmtile {0:D4}[{1:D2}, {2:D2}]", mapId, x, y);
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.outError(LogFilter.Maps, "MMAP:loadMap: Could not load {0:D4}{1:D2}{2:D2}.mmtile into navmesh", mapId, x, y);
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool LoadMapInstance(string basePath, uint mapId, uint instanceId)
|
||||
@@ -235,8 +231,7 @@ namespace Game
|
||||
ulong tileRef = mmap.loadedTileRefs[packedGridPos];
|
||||
|
||||
// unload, and mark as non loaded
|
||||
Detour.dtRawTileData data;
|
||||
if (Detour.dtStatusFailed(mmap.navMesh.removeTile(tileRef, out data)))
|
||||
if (Detour.dtStatusFailed(mmap.navMesh.removeTile(tileRef, out _)))
|
||||
{
|
||||
// this is technically a memory leak
|
||||
// if the grid is later reloaded, dtNavMesh.addTile will return error but no extra memory is used
|
||||
@@ -270,8 +265,7 @@ namespace Game
|
||||
{
|
||||
uint x = (i.Key >> 16);
|
||||
uint y = (i.Key & 0x0000FFFF);
|
||||
Detour.dtRawTileData data;
|
||||
if (Detour.dtStatusFailed(mmap.navMesh.removeTile(i.Value, out data)))
|
||||
if (Detour.dtStatusFailed(mmap.navMesh.removeTile(i.Value, out _)))
|
||||
Log.outError(LogFilter.Maps, "MMAP:unloadMap: Could not unload {0:D4}{1:D2}{2:D2}.mmtile from navmesh", mapId, x, y);
|
||||
else
|
||||
{
|
||||
|
||||
+18
-23
@@ -119,20 +119,18 @@ namespace Game.Maps
|
||||
// tile list is optional
|
||||
if (File.Exists(tileListName))
|
||||
{
|
||||
using (var reader = new BinaryReader(new FileStream(tileListName, FileMode.Open, FileAccess.Read)))
|
||||
using var reader = new BinaryReader(new FileStream(tileListName, FileMode.Open, FileAccess.Read));
|
||||
var mapMagic = reader.ReadUInt32();
|
||||
var versionMagic = reader.ReadUInt32();
|
||||
if (mapMagic == MapConst.MapMagic && versionMagic == MapConst.MapVersionMagic)
|
||||
{
|
||||
var mapMagic = reader.ReadUInt32();
|
||||
var versionMagic = reader.ReadUInt32();
|
||||
if (mapMagic == MapConst.MapMagic && versionMagic == MapConst.MapVersionMagic)
|
||||
{
|
||||
var build = reader.ReadUInt32();
|
||||
byte[] tilesData = reader.ReadArray<byte>(MapConst.MaxGrids * MapConst.MaxGrids);
|
||||
for (uint gx = 0; gx < MapConst.MaxGrids; ++gx)
|
||||
for (uint gy = 0; gy < MapConst.MaxGrids; ++gy)
|
||||
i_gridFileExists[(int)(gx * MapConst.MaxGrids + gy)] = tilesData[(int)(gx * MapConst.MaxGrids + gy)] == 49; // char of 1
|
||||
var build = reader.ReadUInt32();
|
||||
byte[] tilesData = reader.ReadArray<byte>(MapConst.MaxGrids * MapConst.MaxGrids);
|
||||
for (uint gx = 0; gx < MapConst.MaxGrids; ++gx)
|
||||
for (uint gy = 0; gy < MapConst.MaxGrids; ++gy)
|
||||
i_gridFileExists[(int)(gx * MapConst.MaxGrids + gy)] = tilesData[(int)(gx * MapConst.MaxGrids + gy)] == 49; // char of 1
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,17 +157,15 @@ namespace Game.Maps
|
||||
return false;
|
||||
}
|
||||
|
||||
using (var reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read)))
|
||||
using var reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read));
|
||||
var header = reader.Read<MapFileHeader>();
|
||||
if (header.mapMagic != MapConst.MapMagic || (header.versionMagic != MapConst.MapVersionMagic && header.versionMagic != MapConst.MapVersionMagic2)) // Hack for some different extractors using v2.0 header
|
||||
{
|
||||
var header = reader.Read<MapFileHeader>();
|
||||
if (header.mapMagic != MapConst.MapMagic || (header.versionMagic != MapConst.MapVersionMagic && header.versionMagic != MapConst.MapVersionMagic2)) // Hack for some different extractors using v2.0 header
|
||||
{
|
||||
Log.outError(LogFilter.Maps, "Map file '{0}' is from an incompatible map version ({1}), {2} is expected. Please recreate using the mapextractor.",
|
||||
fileName, header.versionMagic, MapConst.MapVersionMagic);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
Log.outError(LogFilter.Maps, "Map file '{0}' is from an incompatible map version ({1}), {2} is expected. Please recreate using the mapextractor.",
|
||||
fileName, header.versionMagic, MapConst.MapVersionMagic);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool ExistVMap(uint mapid, uint gx, uint gy)
|
||||
@@ -1004,7 +1000,7 @@ namespace Game.Maps
|
||||
bool CheckGridIntegrity<T>(T obj, bool moved) where T : WorldObject
|
||||
{
|
||||
Cell cur_cell = obj.GetCurrentCell();
|
||||
Cell xy_cell = new Cell(obj.GetPositionX(), obj.GetPositionY());
|
||||
Cell xy_cell = new(obj.GetPositionX(), obj.GetPositionY());
|
||||
if (xy_cell != cur_cell)
|
||||
{
|
||||
//$"grid[{GetGridX()}, {GetGridY()}]cell[{GetCellX()}, {GetCellY()}]";
|
||||
@@ -4966,7 +4962,6 @@ namespace Game.Maps
|
||||
public Dictionary<ulong, CreatureGroup> CreatureGroupHolder = new();
|
||||
internal uint i_InstanceId;
|
||||
long i_gridExpiry;
|
||||
List<WorldObject> i_objects = new();
|
||||
bool i_scriptLock;
|
||||
|
||||
public int m_VisibilityNotifyPeriod;
|
||||
|
||||
@@ -259,7 +259,7 @@ namespace Game.Entities
|
||||
MapRecord mEntry = CliDB.MapStorage.LookupByKey(mapid);
|
||||
|
||||
if (startUp)
|
||||
return mEntry != null ? true : false;
|
||||
return mEntry != null;
|
||||
else
|
||||
return mEntry != null && (!mEntry.IsDungeon() || Global.ObjectMgr.GetInstanceTemplate(mapid) != null);
|
||||
|
||||
|
||||
@@ -110,8 +110,8 @@ namespace Game.Maps
|
||||
|
||||
// Add extra points to allow derivative calculations for all path nodes
|
||||
allPoints.Insert(0, allPoints.First().lerp(allPoints[1], -0.2f));
|
||||
allPoints.Add(allPoints.Last().lerp(allPoints[allPoints.Count - 2], -0.2f));
|
||||
allPoints.Add(allPoints.Last().lerp(allPoints[allPoints.Count - 2], -1.0f));
|
||||
allPoints.Add(allPoints.Last().lerp(allPoints[^2], -0.2f));
|
||||
allPoints.Add(allPoints.Last().lerp(allPoints[^2], -1.0f));
|
||||
|
||||
SplineRawInitializer initer = new(allPoints);
|
||||
Spline orientationSpline = new();
|
||||
@@ -204,7 +204,7 @@ namespace Game.Maps
|
||||
int extra = !keyFrames[i - 1].Teleport ? 1 : 0;
|
||||
Spline spline = new();
|
||||
Span<Vector3> span = splinePath.ToArray();
|
||||
spline.InitSpline(span.Slice(start), i - start + extra, Spline.EvaluationMode.Catmullrom);
|
||||
spline.InitSpline(span[start..], i - start + extra, Spline.EvaluationMode.Catmullrom);
|
||||
spline.InitLengths();
|
||||
for (int j = start; j < i + extra; ++j)
|
||||
{
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace Game.Movement
|
||||
if (!nodes.Empty())
|
||||
{
|
||||
TaxiPathNodeRecord start = nodes[0];
|
||||
TaxiPathNodeRecord end = nodes[nodes.Length - 1];
|
||||
TaxiPathNodeRecord end = nodes[^1];
|
||||
bool passedPreviousSegmentProximityCheck = false;
|
||||
for (uint i = 0; i < nodes.Length; ++i)
|
||||
{
|
||||
@@ -83,7 +83,7 @@ namespace Game.Movement
|
||||
else
|
||||
{
|
||||
_path.RemoveAt(_path.Count - 1);
|
||||
_pointsForPathSwitch[_pointsForPathSwitch.Count - 1].PathIndex -= 1;
|
||||
_pointsForPathSwitch[^1].PathIndex -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,7 +468,7 @@ namespace Game.Movement
|
||||
{
|
||||
float[] pathPoints = new float[74 * 3];
|
||||
int pointCount = 0;
|
||||
uint dtResult = Detour.DT_FAILURE;
|
||||
uint dtResult;
|
||||
|
||||
if (_straightLine)
|
||||
{
|
||||
@@ -556,7 +556,7 @@ namespace Game.Movement
|
||||
if (Dist3DSqr(GetActualEndPosition(), GetEndPosition()) < 0.3f * Dist3DSqr(GetStartPosition(), GetEndPosition()))
|
||||
{
|
||||
SetActualEndPosition(GetEndPosition());
|
||||
_pathPoints[_pathPoints.Length - 1] = GetEndPosition();
|
||||
_pathPoints[^1] = GetEndPosition();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -636,7 +636,7 @@ namespace Game.Movement
|
||||
Span<float> span = steerPath;
|
||||
// Stop at Off-Mesh link or when point is further than slop away.
|
||||
if ((steerPathFlags[ns].HasAnyFlag((byte)Detour.dtStraightPathFlags.DT_STRAIGHTPATH_OFFMESH_CONNECTION) ||
|
||||
!InRangeYZX(span.Slice((int)ns * 3).ToArray(), startPos, minTargetDist, 1000.0f)))
|
||||
!InRangeYZX(span[((int)ns * 3)..].ToArray(), startPos, minTargetDist, 1000.0f)))
|
||||
break;
|
||||
ns++;
|
||||
}
|
||||
@@ -678,11 +678,7 @@ namespace Game.Movement
|
||||
while (npolys != 0 && nsmoothPath < maxSmoothPathSize)
|
||||
{
|
||||
// Find location to steer towards.
|
||||
float[] steerPos;
|
||||
Detour.dtStraightPathFlags steerPosFlag;
|
||||
ulong steerPosRef = 0;
|
||||
|
||||
if (!GetSteerTarget(iterPos, targetPos, 0.3f, polys, npolys, out steerPos, out steerPosFlag, out steerPosRef))
|
||||
if (!GetSteerTarget(iterPos, targetPos, 0.3f, polys, npolys, out float[] steerPos, out Detour.dtStraightPathFlags steerPosFlag, out ulong steerPosRef))
|
||||
break;
|
||||
|
||||
bool endOfPath = steerPosFlag.HasAnyFlag(Detour.dtStraightPathFlags.DT_STRAIGHTPATH_END);
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Game.Movement
|
||||
return (uint)init.Launch();
|
||||
}
|
||||
|
||||
void SendSplineFor(Unit me, int index, uint toNext)
|
||||
void SendSplineFor(Unit me, int index, ref uint toNext)
|
||||
{
|
||||
Cypher.Assert(index < _chainSize);
|
||||
Log.outDebug(LogFilter.Movement, "{0}: Sending spline for {1}.", me.GetGUID().ToString(), index);
|
||||
@@ -90,7 +90,7 @@ namespace Game.Movement
|
||||
_nextFirstWP = (byte)(thisLink.Points.Count - 1);
|
||||
}
|
||||
Span<Vector3> span = thisLink.Points.ToArray();
|
||||
SendPathSpline(me, span.Slice(_nextFirstWP - 1));
|
||||
SendPathSpline(me, span[(_nextFirstWP - 1)..]);
|
||||
Log.outDebug(LogFilter.Movement, "{0}: Resumed spline chain generator from resume state.", me.GetGUID().ToString());
|
||||
++_nextIndex;
|
||||
if (_nextIndex >= _chainSize)
|
||||
@@ -102,7 +102,7 @@ namespace Game.Movement
|
||||
else
|
||||
{
|
||||
_msToNext = Math.Max(_chain[_nextIndex].TimeToNext, 1u);
|
||||
SendSplineFor(me, _nextIndex, _msToNext);
|
||||
SendSplineFor(me, _nextIndex, ref _msToNext);
|
||||
++_nextIndex;
|
||||
if (_nextIndex >= _chainSize)
|
||||
_msToNext = 0;
|
||||
@@ -141,7 +141,7 @@ namespace Game.Movement
|
||||
// Send next spline
|
||||
Log.outDebug(LogFilter.Movement, "{0}: Should send spline {1} ({2} ms late).", me.GetGUID().ToString(), _nextIndex, diff - _msToNext);
|
||||
_msToNext = Math.Max(_chain[_nextIndex].TimeToNext, 1u);
|
||||
SendSplineFor(me, _nextIndex, _msToNext);
|
||||
SendSplineFor(me, _nextIndex, ref _msToNext);
|
||||
++_nextIndex;
|
||||
if (_nextIndex >= _chainSize)
|
||||
{
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace Game.Movement
|
||||
init.Launch();
|
||||
|
||||
// inform formation
|
||||
creature.SignalFormationMovement(formationDest, waypoint.id, waypoint.moveType, (waypoint.orientation != 0 && waypoint.delay != 0) ? true : false);
|
||||
creature.SignalFormationMovement(formationDest, waypoint.id, waypoint.moveType, (waypoint.orientation != 0 && waypoint.delay != 0));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ namespace Game.Movement
|
||||
|
||||
public override void Pause(uint timer = 0)
|
||||
{
|
||||
_stalled = timer != 0 ? false : true;
|
||||
_stalled = timer == 0;
|
||||
_nextMoveTime.Reset(timer != 0 ? (int)timer : 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace Game.Movement
|
||||
{
|
||||
int point = point_Idx_offset + point_Idx - spline.First() + (Finalized() ? 1 : 0);
|
||||
if (IsCyclic())
|
||||
point = point % (spline.Last() - spline.First());
|
||||
point %= (spline.Last() - spline.First());
|
||||
return point;
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ namespace Game.Movement
|
||||
}
|
||||
|
||||
if (splineflags.HasFlag(SplineFlag.Backward))
|
||||
orientation = orientation - (float)Math.PI;
|
||||
orientation -= (float)Math.PI;
|
||||
}
|
||||
|
||||
return new Vector4(c.X, c.Y, c.Z, orientation);
|
||||
@@ -274,7 +274,7 @@ namespace Game.Movement
|
||||
if (spline.IsCyclic())
|
||||
{
|
||||
point_Idx = spline.First();
|
||||
time_passed = time_passed % Duration();
|
||||
time_passed %= Duration();
|
||||
result = UpdateResult.NextCycle;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -64,13 +64,13 @@ namespace Game.Movement
|
||||
void EvaluateCatmullRom(int index, float t, out Vector3 result)
|
||||
{
|
||||
Span<Vector3> span = points;
|
||||
C_Evaluate(span.Slice(index - 1), t, s_catmullRomCoeffs, out result);
|
||||
C_Evaluate(span[(index - 1)..], t, s_catmullRomCoeffs, out result);
|
||||
}
|
||||
void EvaluateBezier3(int index, float t, out Vector3 result)
|
||||
{
|
||||
index *= (int)3u;
|
||||
Span<Vector3> span = points;
|
||||
C_Evaluate(span.Slice(index), t, s_Bezier3Coeffs, out result);
|
||||
C_Evaluate(span[index..], t, s_Bezier3Coeffs, out result);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -192,13 +192,13 @@ namespace Game.Movement
|
||||
void EvaluateDerivativeCatmullRom(int index, float t, out Vector3 result)
|
||||
{
|
||||
Span<Vector3> span = points;
|
||||
C_Evaluate_Derivative(span.Slice(index - 1), t, s_catmullRomCoeffs, out result);
|
||||
C_Evaluate_Derivative(span[(index - 1)..], t, s_catmullRomCoeffs, out result);
|
||||
}
|
||||
void EvaluateDerivativeBezier3(int index, float t, out Vector3 result)
|
||||
{
|
||||
index *= (int)3u;
|
||||
Span<Vector3> span = points;
|
||||
C_Evaluate_Derivative(span.Slice(index), t, s_Bezier3Coeffs, out result);
|
||||
C_Evaluate_Derivative(span[index..], t, s_Bezier3Coeffs, out result);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -225,7 +225,7 @@ namespace Game.Movement
|
||||
{
|
||||
Vector3 nextPos;
|
||||
Span<Vector3> p = points.AsSpan(index - 1);
|
||||
Vector3 curPos = nextPos = p[1];
|
||||
Vector3 curPos = p[1];
|
||||
|
||||
int i = 1;
|
||||
double length = 0;
|
||||
@@ -329,7 +329,8 @@ namespace Game.Movement
|
||||
{
|
||||
int i = index_lo;
|
||||
Array.Resize(ref lengths, index_hi+1);
|
||||
int prev_length = 0, new_length = 0;
|
||||
int prev_length;
|
||||
int new_length;
|
||||
while (i < index_hi)
|
||||
{
|
||||
new_length = cacher.SetGetTime(this, i);
|
||||
@@ -355,8 +356,8 @@ namespace Game.Movement
|
||||
|
||||
public bool Empty() { return index_lo == index_hi;}
|
||||
|
||||
int[] lengths = new int[0];
|
||||
Vector3[] points = new Vector3[0];
|
||||
int[] lengths = Array.Empty<int>();
|
||||
Vector3[] points = Array.Empty<Vector3>();
|
||||
public EvaluationMode m_mode;
|
||||
bool _cyclic;
|
||||
int index_lo;
|
||||
|
||||
@@ -34,18 +34,16 @@ public class PacketLog
|
||||
if (!string.IsNullOrEmpty(logname))
|
||||
{
|
||||
FullPath = logsDir + @"\" + logname;
|
||||
using (var writer = new BinaryWriter(File.Open(FullPath, FileMode.Create)))
|
||||
{
|
||||
writer.Write(Encoding.ASCII.GetBytes("PKT"));
|
||||
writer.Write((ushort)769);
|
||||
writer.Write(Encoding.ASCII.GetBytes("T"));
|
||||
writer.Write(Global.WorldMgr.GetRealm().Build);
|
||||
writer.Write(Encoding.ASCII.GetBytes("enUS"));
|
||||
writer.Write(new byte[40]);//SessionKey
|
||||
writer.Write((uint)GameTime.GetGameTime());
|
||||
writer.Write(Time.GetMSTime());
|
||||
writer.Write(0);
|
||||
}
|
||||
using var writer = new BinaryWriter(File.Open(FullPath, FileMode.Create));
|
||||
writer.Write(Encoding.ASCII.GetBytes("PKT"));
|
||||
writer.Write((ushort)769);
|
||||
writer.Write(Encoding.ASCII.GetBytes("T"));
|
||||
writer.Write(Global.WorldMgr.GetRealm().Build);
|
||||
writer.Write(Encoding.ASCII.GetBytes("enUS"));
|
||||
writer.Write(new byte[40]);//SessionKey
|
||||
writer.Write((uint)GameTime.GetGameTime());
|
||||
writer.Write(Time.GetMSTime());
|
||||
writer.Write(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,33 +54,31 @@ public class PacketLog
|
||||
|
||||
lock (syncObj)
|
||||
{
|
||||
using (var writer = new BinaryWriter(File.Open(FullPath, FileMode.Append), Encoding.ASCII))
|
||||
{
|
||||
writer.Write(isClientPacket ? 0x47534d43 : 0x47534d53);
|
||||
writer.Write((uint)connectionType);
|
||||
writer.Write(Time.GetMSTime());
|
||||
using var writer = new BinaryWriter(File.Open(FullPath, FileMode.Append), Encoding.ASCII);
|
||||
writer.Write(isClientPacket ? 0x47534d43 : 0x47534d53);
|
||||
writer.Write((uint)connectionType);
|
||||
writer.Write(Time.GetMSTime());
|
||||
|
||||
writer.Write(20);
|
||||
byte[] SocketIPBytes = new byte[16];
|
||||
if (endPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||
Buffer.BlockCopy(endPoint.Address.GetAddressBytes(), 0, SocketIPBytes, 0, 4);
|
||||
else
|
||||
Buffer.BlockCopy(endPoint.Address.GetAddressBytes(), 0, SocketIPBytes, 0, 16);
|
||||
writer.Write(20);
|
||||
byte[] SocketIPBytes = new byte[16];
|
||||
if (endPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||
Buffer.BlockCopy(endPoint.Address.GetAddressBytes(), 0, SocketIPBytes, 0, 4);
|
||||
else
|
||||
Buffer.BlockCopy(endPoint.Address.GetAddressBytes(), 0, SocketIPBytes, 0, 16);
|
||||
|
||||
int size = data.Length;
|
||||
if (isClientPacket)
|
||||
size -= 2;
|
||||
int size = data.Length;
|
||||
if (isClientPacket)
|
||||
size -= 2;
|
||||
|
||||
writer.Write(size + 4);
|
||||
writer.Write(SocketIPBytes);
|
||||
writer.Write(endPoint.Port);
|
||||
writer.Write(opcode);
|
||||
writer.Write(size + 4);
|
||||
writer.Write(SocketIPBytes);
|
||||
writer.Write(endPoint.Port);
|
||||
writer.Write(opcode);
|
||||
|
||||
if (isClientPacket)
|
||||
writer.Write(data, 2, size);
|
||||
else
|
||||
writer.Write(data, 0, size);
|
||||
}
|
||||
if (isClientPacket)
|
||||
writer.Write(data, 2, size);
|
||||
else
|
||||
writer.Write(data, 0, size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -133,12 +133,10 @@ namespace Game.Networking
|
||||
if (packetType == null)
|
||||
return;
|
||||
|
||||
using (var clientPacket = (ClientPacket)Activator.CreateInstance(packetType, packet))
|
||||
{
|
||||
clientPacket.Read();
|
||||
clientPacket.LogPacket(session);
|
||||
methodCaller(session, clientPacket);
|
||||
}
|
||||
using var clientPacket = (ClientPacket)Activator.CreateInstance(packetType, packet);
|
||||
clientPacket.Read();
|
||||
clientPacket.LogPacket(session);
|
||||
methodCaller(session, clientPacket);
|
||||
}
|
||||
|
||||
static Action<WorldSession, ClientPacket> CreateDelegate<P1>(MethodInfo method) where P1 : ClientPacket
|
||||
|
||||
@@ -250,7 +250,7 @@ namespace Game.Networking.Packets
|
||||
violenceLevel = _worldPacket.ReadInt8();
|
||||
}
|
||||
|
||||
sbyte violenceLevel = -1; // 0 - no combat effects, 1 - display some combat effects, 2 - blood, 3 - bloody, 4 - bloodier, 5 - bloodiest
|
||||
public sbyte violenceLevel; // 0 - no combat effects, 1 - display some combat effects, 2 - blood, 3 - bloody, 4 - bloodier, 5 - bloodiest
|
||||
}
|
||||
|
||||
public class TimeSyncRequest : ServerPacket
|
||||
@@ -1155,7 +1155,7 @@ namespace Game.Networking.Packets
|
||||
|
||||
public bool IsFullUpdate;
|
||||
public Dictionary<uint, HeirloomData> Heirlooms = new();
|
||||
int Unk;
|
||||
public int Unk;
|
||||
}
|
||||
|
||||
class MountSpecial : ClientPacket
|
||||
|
||||
@@ -56,8 +56,8 @@ namespace Game.Networking.Packets
|
||||
Reason = _worldPacket.ReadInt32();
|
||||
}
|
||||
|
||||
int ChannelSpell;
|
||||
int Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/AURA_INTERRUPT_FLAG_MOVE, 41 = turning/AURA_INTERRUPT_FLAG_TURNING
|
||||
public int ChannelSpell;
|
||||
public int Reason; // 40 = /run SpellStopCasting(), 16 = movement/AURA_INTERRUPT_FLAG_MOVE, 41 = turning/AURA_INTERRUPT_FLAG_TURNING
|
||||
// does not match SpellCastResult enum
|
||||
}
|
||||
|
||||
@@ -1448,7 +1448,7 @@ namespace Game.Networking.Packets
|
||||
public Optional<int> Duration;
|
||||
public Optional<int> Remaining;
|
||||
Optional<float> TimeMod;
|
||||
public float[] Points = new float[0];
|
||||
public float[] Points = Array.Empty<float>();
|
||||
public List<float> EstimatedPoints = new();
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Game.Networking
|
||||
public WorldSocket(Socket socket) : base(socket)
|
||||
{
|
||||
_connectType = ConnectionType.Realm;
|
||||
_serverChallenge = new byte[0].GenerateRandomKey(16);
|
||||
_serverChallenge = Array.Empty<byte>().GenerateRandomKey(16);
|
||||
_worldCrypt = new WorldCrypt();
|
||||
|
||||
_encryptKey = new byte[16];
|
||||
|
||||
@@ -540,7 +540,7 @@ namespace Game.PvP
|
||||
if (fact_diff == 0.0f)
|
||||
return false;
|
||||
|
||||
Team Challenger = 0;
|
||||
Team Challenger;
|
||||
float maxDiff = m_maxSpeed * diff;
|
||||
|
||||
if (fact_diff < 0)
|
||||
|
||||
@@ -288,6 +288,7 @@ namespace Game
|
||||
public int References;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum PhaseShiftFlags
|
||||
{
|
||||
None = 0x00,
|
||||
@@ -299,6 +300,7 @@ namespace Game
|
||||
NoCosmetic = 0x10 // This flag ignores shared cosmetic phases (two players that both have shared cosmetic phase but no other phase cannot see each other)
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum PhaseFlags : ushort
|
||||
{
|
||||
None = 0x0,
|
||||
|
||||
@@ -1029,9 +1029,8 @@ namespace Game
|
||||
return;
|
||||
}
|
||||
|
||||
uint val = mSpawnedPools[pool_id];
|
||||
if (val > 0)
|
||||
--val;
|
||||
if (mSpawnedPools[pool_id] > 0)
|
||||
--mSpawnedPools[pool_id];
|
||||
}
|
||||
|
||||
public List<ulong> GetActiveQuests() { return mActiveQuests; } // a copy of the set
|
||||
|
||||
@@ -809,7 +809,7 @@ namespace Game
|
||||
public uint Flags2;
|
||||
public float ProgressBarWeight;
|
||||
public string Description;
|
||||
public int[] VisualEffects = new int[0];
|
||||
public int[] VisualEffects = Array.Empty<int>();
|
||||
|
||||
public bool IsStoringValue()
|
||||
{
|
||||
|
||||
@@ -492,7 +492,7 @@ namespace Game
|
||||
var factionEntry = CliDB.FactionStorage.LookupByKey(factionTemplateEntry.Faction);
|
||||
if (factionEntry.Id != 0)
|
||||
// Never show factions of the opposing team
|
||||
if (!Convert.ToBoolean(factionEntry.ReputationRaceMask[1] & SharedConst.GetMaskForRace(_player.GetRace())) && factionEntry.ReputationBase[1] == Reputation_Bottom)
|
||||
if (!Convert.ToBoolean(factionEntry.ReputationRaceMask[1] & SharedConst.GetMaskForRace(_player.GetRace())) && factionEntry.ReputationBase[1] == SharedConst.ReputationBottom)
|
||||
SetVisible(factionEntry);
|
||||
}
|
||||
|
||||
@@ -783,7 +783,7 @@ namespace Game
|
||||
bool _sendFactionIncreased; //! Play visual effect on next SMSG_SET_FACTION_STANDING sent
|
||||
#endregion
|
||||
|
||||
public static int[] ReputationRankThresholds =
|
||||
static int[] ReputationRankThresholds =
|
||||
{
|
||||
-42000,
|
||||
// Hated
|
||||
@@ -803,14 +803,12 @@ namespace Game
|
||||
// Exalted
|
||||
};
|
||||
|
||||
public static CypherStrings[] ReputationRankStrIndex =
|
||||
static CypherStrings[] ReputationRankStrIndex =
|
||||
{
|
||||
CypherStrings.RepHated, CypherStrings.RepHostile, CypherStrings.RepUnfriendly, CypherStrings.RepNeutral,
|
||||
CypherStrings.RepFriendly, CypherStrings.RepHonored, CypherStrings.RepRevered, CypherStrings.RepExalted
|
||||
};
|
||||
|
||||
const int Reputation_Cap = 42000;
|
||||
const int Reputation_Bottom = -42000;
|
||||
SortedDictionary<uint, FactionState> _factions = new();
|
||||
Dictionary<uint, ReputationRank> _forcedReactions = new();
|
||||
}
|
||||
|
||||
@@ -159,7 +159,6 @@ namespace Game.Scenarios
|
||||
return;
|
||||
}
|
||||
|
||||
List<Vector2>[][] POIs = new List<Vector2>[0][];
|
||||
Dictionary<uint, MultiMap<int, ScenarioPOIPoint>> allPoints = new();
|
||||
|
||||
// 0 1 2 3 4
|
||||
|
||||
@@ -1097,15 +1097,15 @@ namespace Game.Scripting
|
||||
|
||||
public override bool _Validate(SpellInfo entry)
|
||||
{
|
||||
foreach (var eff in DoCheckAreaTarget)
|
||||
foreach (var _ in DoCheckAreaTarget)
|
||||
if (!entry.HasAreaAuraEffect() && !entry.HasEffect(SpellEffectName.PersistentAreaAura) && !entry.HasEffect(SpellEffectName.ApplyAura))
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `DoCheckAreaTarget` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
foreach (var eff in OnDispel)
|
||||
foreach (var _ in OnDispel)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `OnDispel` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
foreach (var eff in AfterDispel)
|
||||
foreach (var _ in AfterDispel)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `AfterDispel` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
@@ -1169,7 +1169,7 @@ namespace Game.Scripting
|
||||
if (eff.GetAffectedEffectsMask(entry) == 0)
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` Effect `{1}` of script `{2}` did not match dbc effect data - handler bound to hook `OnEffectSplit` of AuraScript won't be executed", entry.Id, eff.ToString(), m_scriptName);
|
||||
|
||||
foreach (var eff in DoCheckProc)
|
||||
foreach (var _ in DoCheckProc)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `DoCheckProc` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
@@ -1177,15 +1177,15 @@ namespace Game.Scripting
|
||||
if (eff.GetAffectedEffectsMask(entry) == 0)
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` Effect `{1}` of script `{2}` did not match dbc effect data - handler bound to hook `DoCheckEffectProc` of AuraScript won't be executed", entry.Id, eff.ToString(), m_scriptName);
|
||||
|
||||
foreach (var eff in DoPrepareProc)
|
||||
foreach (var _ in DoPrepareProc)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `DoPrepareProc` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
foreach (var eff in OnProc)
|
||||
foreach (var _ in OnProc)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `OnProc` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
foreach (var eff in AfterProc)
|
||||
foreach (var _ in AfterProc)
|
||||
if (!entry.HasEffect(SpellEffectName.ApplyAura) && !entry.HasAreaAuraEffect())
|
||||
Log.outError(LogFilter.Scripts, "Spell `{0}` of script `{1}` does not have apply aura effect - handler bound to hook `AfterProc` of AuraScript won't be executed", entry.Id, m_scriptName);
|
||||
|
||||
|
||||
@@ -1231,7 +1231,7 @@ namespace Game
|
||||
public void Update(uint diff)
|
||||
{
|
||||
///- Update the game time and check for shutdown time
|
||||
_UpdateGameTime();
|
||||
UpdateGameTime();
|
||||
long currentGameTime = GameTime.GetGameTime();
|
||||
|
||||
_worldUpdateTime.UpdateWithDiff(diff);
|
||||
@@ -1731,7 +1731,7 @@ namespace Game
|
||||
return true;
|
||||
}
|
||||
|
||||
void _UpdateGameTime()
|
||||
void UpdateGameTime()
|
||||
{
|
||||
// update the time
|
||||
long lastGameTime = GameTime.GetGameTime();
|
||||
@@ -1899,10 +1899,10 @@ namespace Game
|
||||
{
|
||||
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_COUNT);
|
||||
stmt.AddValue(0, accountId);
|
||||
_queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(_UpdateRealmCharCount));
|
||||
_queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(UpdateRealmCharCount));
|
||||
}
|
||||
|
||||
void _UpdateRealmCharCount(SQLResult result)
|
||||
void UpdateRealmCharCount(SQLResult result)
|
||||
{
|
||||
if (!result.IsEmpty())
|
||||
{
|
||||
@@ -2061,7 +2061,7 @@ namespace Game
|
||||
if (session.GetPlayer() != null)
|
||||
session.GetPlayer().ResetCurrencyWeekCap();
|
||||
|
||||
m_NextCurrencyReset = m_NextCurrencyReset + Time.Day * WorldConfig.GetIntValue(WorldCfg.CurrencyResetInterval);
|
||||
m_NextCurrencyReset += Time.Day * WorldConfig.GetIntValue(WorldCfg.CurrencyResetInterval);
|
||||
SetWorldState(WorldStates.CurrencyResetTime, (ulong)m_NextCurrencyReset);
|
||||
}
|
||||
|
||||
@@ -2095,7 +2095,7 @@ namespace Game
|
||||
if (session.GetPlayer() != null)
|
||||
session.GetPlayer().ResetWeeklyQuestStatus();
|
||||
|
||||
m_NextWeeklyQuestReset = (m_NextWeeklyQuestReset + Time.Week);
|
||||
m_NextWeeklyQuestReset += Time.Week;
|
||||
SetWorldState(WorldStates.WeeklyQuestResetTime, (ulong)m_NextWeeklyQuestReset);
|
||||
|
||||
// change available weeklies
|
||||
@@ -2149,13 +2149,13 @@ namespace Game
|
||||
if (session.GetPlayer())
|
||||
session.GetPlayer().SetRandomWinner(false);
|
||||
|
||||
m_NextRandomBGReset = m_NextRandomBGReset + Time.Day;
|
||||
m_NextRandomBGReset += Time.Day;
|
||||
SetWorldState(WorldStates.BGDailyResetTime, (ulong)m_NextRandomBGReset);
|
||||
}
|
||||
|
||||
void ResetGuildCap()
|
||||
{
|
||||
m_NextGuildReset = (m_NextGuildReset + Time.Day);
|
||||
m_NextGuildReset += Time.Day;
|
||||
SetWorldState(WorldStates.GuildDailyResetTime, (ulong)m_NextGuildReset);
|
||||
ulong week = GetWorldState(WorldStates.GuildWeeklyResetTime);
|
||||
week = week < 7 ? week + 1 : 1;
|
||||
@@ -2532,7 +2532,7 @@ namespace Game
|
||||
if (i_args != null)
|
||||
text = string.Format(text, i_args);
|
||||
|
||||
MultiplePacketSender sender = new MultiplePacketSender();
|
||||
MultiplePacketSender sender = new();
|
||||
|
||||
var lines = new StringArray(text, "\n");
|
||||
for (var i = 0; i < lines.Length; ++i)
|
||||
|
||||
@@ -81,8 +81,7 @@ namespace Game
|
||||
}
|
||||
|
||||
// empty incoming packet queue
|
||||
WorldPacket packet;
|
||||
while (_recvQueue.TryDequeue(out packet)) ;
|
||||
_recvQueue.Clear();
|
||||
|
||||
DB.Login.Execute("UPDATE account SET online = 0 WHERE id = {0};", GetAccountId()); // One-time query
|
||||
}
|
||||
@@ -773,9 +772,6 @@ namespace Game
|
||||
SendPacket(bnetConnected);
|
||||
|
||||
_battlePetMgr.LoadFromDB(holder.GetResult(AccountInfoQueryLoad.BattlePets), holder.GetResult(AccountInfoQueryLoad.BattlePetSlot));
|
||||
|
||||
realmHolder = null;
|
||||
holder = null;
|
||||
}
|
||||
|
||||
public RBACData GetRBACData()
|
||||
@@ -840,10 +836,6 @@ namespace Game
|
||||
public BattlePetMgr GetBattlePetMgr() { return _battlePetMgr; }
|
||||
public CollectionMgr GetCollectionMgr() { return _collectionMgr; }
|
||||
|
||||
void ClearRedirectFlag(SessionFlags flag) { m_flags &= ~flag; }
|
||||
public bool WasRedirected() { return m_flags.HasAnyFlag(SessionFlags.FromRedirect); }
|
||||
bool HasRedirected() { return m_flags.HasAnyFlag(SessionFlags.HasRedirected); }
|
||||
|
||||
// Battlenet
|
||||
public Array<byte> GetRealmListSecret() { return _realmListSecret; }
|
||||
void SetRealmListSecret(Array<byte> secret) { _realmListSecret = secret; }
|
||||
|
||||
@@ -1313,7 +1313,7 @@ namespace Game.Spells
|
||||
if (aurEff != null)
|
||||
{
|
||||
float multiplier = aurEff.GetAmount();
|
||||
CastSpellExtraArgs args = new CastSpellExtraArgs(TriggerCastFlags.FullMask);
|
||||
CastSpellExtraArgs args = new(TriggerCastFlags.FullMask);
|
||||
args.SpellValueOverrides.Add(SpellValueMod.BasePoint0, MathFunctions.CalculatePct(caster.GetMaxPower(PowerType.Mana), multiplier));
|
||||
caster.CastSpell(caster, 47755, args);
|
||||
}
|
||||
@@ -2487,7 +2487,7 @@ namespace Game.Spells
|
||||
if (casterGUID != owner.GetGUID() && spellproto.IsSingleTarget())
|
||||
return null;
|
||||
|
||||
Aura aura = null;
|
||||
Aura aura;
|
||||
switch (owner.GetTypeId())
|
||||
{
|
||||
case TypeId.Unit:
|
||||
|
||||
@@ -5625,7 +5625,7 @@ namespace Game.Spells
|
||||
// on apply cast summon spell
|
||||
if (apply)
|
||||
{
|
||||
CastSpellExtraArgs args = new CastSpellExtraArgs(TriggerCastFlags.FullMask);
|
||||
CastSpellExtraArgs args = new(TriggerCastFlags.FullMask);
|
||||
args.TriggeringAura = this;
|
||||
args.CastDifficulty = triggerSpellInfo.Difficulty;
|
||||
target.CastSpell(target, triggerSpellInfo.Id, args);
|
||||
|
||||
@@ -255,8 +255,8 @@ namespace Game.Spells
|
||||
if (Convert.ToBoolean(implicitTargetMask & (SpellCastTargetFlags.Gameobject | SpellCastTargetFlags.GameobjectItem)))
|
||||
m_targets.SetTargetFlag(SpellCastTargetFlags.Gameobject);
|
||||
|
||||
SelectEffectImplicitTargets(effect.EffectIndex, effect.TargetA, processedAreaEffectsMask);
|
||||
SelectEffectImplicitTargets(effect.EffectIndex, effect.TargetB, processedAreaEffectsMask);
|
||||
SelectEffectImplicitTargets(effect.EffectIndex, effect.TargetA, ref processedAreaEffectsMask);
|
||||
SelectEffectImplicitTargets(effect.EffectIndex, effect.TargetB, ref processedAreaEffectsMask);
|
||||
|
||||
// Select targets of effect based on effect type
|
||||
// those are used when no valid target could be added for spell effect based on spell target type
|
||||
@@ -325,7 +325,7 @@ namespace Game.Spells
|
||||
m_caster.m_Events.ModifyEventTime(_spellEvent, GetDelayStart() + m_delayMoment);
|
||||
}
|
||||
|
||||
void SelectEffectImplicitTargets(uint effIndex, SpellImplicitTargetInfo targetType, uint processedEffectMask)
|
||||
void SelectEffectImplicitTargets(uint effIndex, SpellImplicitTargetInfo targetType, ref uint processedEffectMask)
|
||||
{
|
||||
if (targetType.GetTarget() == 0)
|
||||
return;
|
||||
@@ -2168,7 +2168,7 @@ namespace Game.Spells
|
||||
basePoints[auraSpellEffect.EffectIndex] = (m_spellValue.CustomBasePointsMask & (1 << (int)auraSpellEffect.EffectIndex)) != 0 ?
|
||||
m_spellValue.EffectBasePoints[auraSpellEffect.EffectIndex] : auraSpellEffect.CalcBaseValue(m_originalCaster, unit, m_castItemEntry, m_castItemLevel);
|
||||
|
||||
bool refresh = false;
|
||||
bool refresh;
|
||||
bool resetPeriodicTimer = !_triggeredCastFlags.HasAnyFlag(TriggerCastFlags.DontResetPeriodicTimer);
|
||||
m_spellAura = Aura.TryRefreshStackOrCreate(m_spellInfo, m_castId, effectMask, unit,
|
||||
m_originalCaster, GetCastDifficulty(), out refresh, basePoints, m_CastItem, ObjectGuid.Empty, resetPeriodicTimer, ObjectGuid.Empty, m_castItemEntry, m_castItemLevel);
|
||||
@@ -4822,8 +4822,6 @@ namespace Game.Spells
|
||||
}
|
||||
}
|
||||
|
||||
castResult = SpellCastResult.SpellCastOk;
|
||||
|
||||
// always (except passive spells) check items (focus object can be required for any type casts)
|
||||
if (!m_spellInfo.IsPassive())
|
||||
{
|
||||
|
||||
@@ -1044,7 +1044,7 @@ namespace Game.Spells
|
||||
|
||||
// can the player store the new item?
|
||||
List<ItemPosCount> dest = new();
|
||||
uint no_space = 0;
|
||||
uint no_space;
|
||||
InventoryResult msg = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, newitemid, num_to_add, out no_space);
|
||||
if (msg != InventoryResult.Ok)
|
||||
{
|
||||
|
||||
@@ -1854,7 +1854,7 @@ namespace Game.Entities
|
||||
}
|
||||
|
||||
public void LoadPetDefaultSpells()
|
||||
{
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
mPetDefaultSpellsMap.Clear();
|
||||
@@ -1862,7 +1862,6 @@ namespace Game.Entities
|
||||
uint countCreature = 0;
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loading summonable creature templates...");
|
||||
oldMSTime = Time.GetMSTime();
|
||||
|
||||
// different summon spells
|
||||
foreach (var spellEntry in mSpellInfoMap.Values)
|
||||
|
||||
@@ -19,7 +19,6 @@ using Framework.Constants;
|
||||
using Framework.Dynamic;
|
||||
using Game.DataStorage;
|
||||
using Game.Entities;
|
||||
using Game.Maps;
|
||||
using Game.Networking.Packets;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
||||
@@ -401,7 +401,7 @@ namespace Game
|
||||
if (locale >= Locale.Total)
|
||||
locale = Locale.enUS;
|
||||
|
||||
string baseText = "";
|
||||
string baseText;
|
||||
BroadcastTextRecord bct = CliDB.BroadcastTextStorage.LookupByKey(creatureTextEntry.BroadcastTextId);
|
||||
|
||||
if (bct != null)
|
||||
@@ -499,50 +499,6 @@ namespace Game
|
||||
Dictionary<CreatureTextId, CreatureTextLocale> mLocaleTextMap = new();
|
||||
}
|
||||
|
||||
public class CreatureTextHolder
|
||||
{
|
||||
public CreatureTextHolder(uint entry)
|
||||
{
|
||||
Entry = entry;
|
||||
Groups = new MultiMap<uint, CreatureTextEntry>();
|
||||
}
|
||||
|
||||
public void AddText(uint group, CreatureTextEntry entry)
|
||||
{
|
||||
Groups.Add(group, entry);
|
||||
}
|
||||
|
||||
public List<CreatureTextEntry> GetGroupList(uint group)
|
||||
{
|
||||
return Groups.LookupByKey(group);
|
||||
}
|
||||
|
||||
uint Entry;
|
||||
MultiMap<uint, CreatureTextEntry> Groups;
|
||||
}
|
||||
|
||||
public class CreatureTextRepeatHolder
|
||||
{
|
||||
public CreatureTextRepeatHolder(ulong guid)
|
||||
{
|
||||
Guid = guid;
|
||||
Groups = new MultiMap<byte, byte>();
|
||||
}
|
||||
|
||||
public void AddText(byte group, byte entry)
|
||||
{
|
||||
Groups.Add(group, entry);
|
||||
}
|
||||
|
||||
public List<byte> GetGroupList(byte group)
|
||||
{
|
||||
return Groups.LookupByKey(group);
|
||||
}
|
||||
|
||||
ulong Guid;
|
||||
MultiMap<byte, byte> Groups;
|
||||
}
|
||||
|
||||
public class CreatureTextEntry
|
||||
{
|
||||
public uint creatureId;
|
||||
@@ -558,10 +514,12 @@ namespace Game
|
||||
public uint BroadcastTextId;
|
||||
public CreatureTextRange TextRange;
|
||||
}
|
||||
|
||||
public class CreatureTextLocale
|
||||
{
|
||||
public StringArray Text = new((int)Locale.Total);
|
||||
}
|
||||
|
||||
public class CreatureTextId
|
||||
{
|
||||
public CreatureTextId(uint e, uint g, uint i)
|
||||
@@ -571,9 +529,9 @@ namespace Game
|
||||
textId = i;
|
||||
}
|
||||
|
||||
uint entry;
|
||||
uint textGroup;
|
||||
uint textId;
|
||||
public uint entry;
|
||||
public uint textGroup;
|
||||
public uint textId;
|
||||
}
|
||||
|
||||
public enum CreatureTextRange
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Game
|
||||
_maxUpdateTimeOfCurrentTable = 0;
|
||||
}
|
||||
|
||||
if (_updateTimeDataTable[_updateTimeDataTable.Length - 1] != 0)
|
||||
if (_updateTimeDataTable[^1] != 0)
|
||||
_averageUpdateTime = (uint)(_totalUpdateTime / _updateTimeDataTable.Length);
|
||||
else if (_updateTimeTableIndex != 0)
|
||||
_averageUpdateTime = _totalUpdateTime / _updateTimeTableIndex;
|
||||
|
||||
@@ -153,7 +153,7 @@ namespace Game
|
||||
var hash = sha.ComputeHash(data, 0, (int)length);
|
||||
uint checkSum = 0;
|
||||
for (byte i = 0; i < 5; ++i)
|
||||
checkSum = checkSum ^ BitConverter.ToUInt32(hash, i * 4);
|
||||
checkSum ^= BitConverter.ToUInt32(hash, i * 4);
|
||||
|
||||
return checkSum;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Game
|
||||
o1 = sh.ComputeHash(buff, 0, halfSize);
|
||||
|
||||
sh = SHA1.Create();
|
||||
o2 = sh.ComputeHash(span.Slice(halfSize).ToArray(), 0, buff.Length - halfSize);
|
||||
o2 = sh.ComputeHash(span[halfSize..].ToArray(), 0, buff.Length - halfSize);
|
||||
|
||||
FillUp();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user