Misc Fixes

This commit is contained in:
hondacrx
2021-01-08 20:45:13 -05:00
parent 21edaf9993
commit 65855d1f22
8 changed files with 56 additions and 47 deletions
+4 -4
View File
@@ -938,11 +938,11 @@ namespace Game.AI
Creature creature = target.ToCreature();
if (creature != null)
{
SmartAI smartAI = (SmartAI)creature.GetAI();
if (smartAI != null)
CreatureAI smartAI = creature.GetAI();
if (smartAI != null && smartAI is SmartAI)
{
smartAI.SetDespawnTime(respawnDelay);
smartAI.StartDespawn();
((SmartAI)smartAI).SetDespawnTime(respawnDelay);
((SmartAI)smartAI).StartDespawn();
}
else
creature.DespawnOrUnsummon(respawnDelay);
+40 -35
View File
@@ -114,79 +114,84 @@ namespace Game.Collision
return LoadResult.ReadFromFileFailed;
}
LoadResult result = LoadResult.FileNotFound;
TileFileOpenResult fileResult = OpenMapTileFile(VMapManager.VMapPath, iMapID, tileX, tileY, vm);
if (fileResult.File != null)
{
result = LoadResult.Success;
using (BinaryReader reader = new BinaryReader(fileResult.File))
{
if (reader.ReadStringFromChars(8) != MapConst.VMapMagic)
return LoadResult.VersionMismatch;
result = LoadResult.VersionMismatch;
uint numSpawns = reader.ReadUInt32();
for (uint i = 0; i < numSpawns; ++i)
if (result == LoadResult.Success)
{
// read model spawns
if (ModelSpawn.ReadFromFile(reader, out ModelSpawn spawn))
uint numSpawns = reader.ReadUInt32();
for (uint i = 0; i < numSpawns && result == LoadResult.Success; ++i)
{
// acquire model instance
WorldModel model = vm.AcquireModelInstance(spawn.name, spawn.flags);
if (model == null)
Log.outError(LogFilter.Server, "StaticMapTree.LoadMapTile() : could not acquire WorldModel [{0}, {1}]", tileX, tileY);
// update tree
if (iSpawnIndices.ContainsKey(spawn.Id))
// read model spawns
if (ModelSpawn.ReadFromFile(reader, out ModelSpawn spawn))
{
uint referencedVal = iSpawnIndices[spawn.Id];
if (!iLoadedSpawns.ContainsKey(referencedVal))
// acquire model instance
WorldModel model = vm.AcquireModelInstance(spawn.name, spawn.flags);
if (model == null)
Log.outError(LogFilter.Server, "StaticMapTree.LoadMapTile() : could not acquire WorldModel [{0}, {1}]", tileX, tileY);
// update tree
if (iSpawnIndices.ContainsKey(spawn.Id))
{
if (referencedVal >= iNTreeValues)
uint referencedVal = iSpawnIndices[spawn.Id];
if (!iLoadedSpawns.ContainsKey(referencedVal))
{
Log.outError(LogFilter.Maps, "StaticMapTree.LoadMapTile() : invalid tree element ({0}/{1}) referenced in tile {2}", referencedVal, iNTreeValues, fileResult.Name);
continue;
}
if (referencedVal >= iNTreeValues)
{
Log.outError(LogFilter.Maps, "StaticMapTree.LoadMapTile() : invalid tree element ({0}/{1}) referenced in tile {2}", referencedVal, iNTreeValues, fileResult.Name);
continue;
}
iTreeValues[referencedVal] = new ModelInstance(spawn, model);
iLoadedSpawns[referencedVal] = 1;
iTreeValues[referencedVal] = new ModelInstance(spawn, model);
iLoadedSpawns[referencedVal] = 1;
}
else
++iLoadedSpawns[referencedVal];
}
else if (iMapID == fileResult.UsedMapId)
{
// unknown parent spawn might appear in because it overlaps multiple tiles
// in case the original tile is swapped but its neighbour is now (adding this spawn)
// we want to not mark it as loading error and just skip that model
Log.outError(LogFilter.Maps, $"StaticMapTree.LoadMapTile() : invalid tree element (spawn {spawn.Id}) referenced in tile fileResult.Name{fileResult.Name} by map {iMapID}");
result = LoadResult.ReadFromFileFailed;
}
else
++iLoadedSpawns[referencedVal];
}
else if (iMapID == fileResult.UsedMapId)
{
// unknown parent spawn might appear in because it overlaps multiple tiles
// in case the original tile is swapped but its neighbour is now (adding this spawn)
// we want to not mark it as loading error and just skip that model
Log.outError(LogFilter.Maps, $"StaticMapTree.LoadMapTile() : invalid tree element (spawn {spawn.Id}) referenced in tile fileResult.Name{fileResult.Name} by map {iMapID}");
return LoadResult.ReadFromFileFailed;
}
else
{
Log.outError(LogFilter.Maps, $"StaticMapTree.LoadMapTile() : cannot read model from file (spawn index {i}) referenced in tile {fileResult.Name} by map {iMapID}");
return LoadResult.ReadFromFileFailed;
result = LoadResult.ReadFromFileFailed;
}
}
}
iLoadedTiles[PackTileID(tileX, tileY)] = true;
}
iLoadedTiles[PackTileID(tileX, tileY)] = true;
}
else
{
iLoadedTiles[PackTileID(tileX, tileY)] = false;
}
return LoadResult.Success;
return result;
}
public void UnloadMapTile(uint tileX, uint tileY, VMapManager vm)
{
uint tileID = PackTileID(tileX, tileY);
var tile = iLoadedTiles.LookupByKey(tileID);
if (!iLoadedTiles.ContainsKey(tileID))
{
Log.outError(LogFilter.Server, "StaticMapTree.UnloadMapTile() : trying to unload non-loaded tile - Map:{0} X:{1} Y:{2}", iMapID, tileX, tileY);
return;
}
if (tile) // file associated with tile
if (iLoadedTiles[tileID]) // file associated with tile
{
TileFileOpenResult fileResult = OpenMapTileFile(VMapManager.VMapPath, iMapID, tileX, tileY, vm);
if (fileResult.File != null)
+1 -1
View File
@@ -60,7 +60,7 @@ namespace Game.DataStorage
ArtifactStorage = ReadDB2<ArtifactRecord>("Artifact.db2", HotfixStatements.SEL_ARTIFACT, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
ArtifactAppearanceStorage = ReadDB2<ArtifactAppearanceRecord>("ArtifactAppearance.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE, HotfixStatements.SEL_ARTIFACT_APPEARANCE_LOCALE);
ArtifactAppearanceSetStorage = ReadDB2<ArtifactAppearanceSetRecord>("ArtifactAppearanceSet.db2", HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET, HotfixStatements.SEL_ARTIFACT_APPEARANCE_SET_LOCALE);
ArtifactCategoryStorage = ReadDB2<ArtifactCategoryRecord>("ArtifactCategory.db2", HotfixStatements.SEL_ARTIFACT_CATEGORY);
//ArtifactCategoryStorage = ReadDB2<ArtifactCategoryRecord>("ArtifactCategory.db2", HotfixStatements.SEL_ARTIFACT_CATEGORY);
ArtifactPowerStorage = ReadDB2<ArtifactPowerRecord>("ArtifactPower.db2", HotfixStatements.SEL_ARTIFACT_POWER);
ArtifactPowerLinkStorage = ReadDB2<ArtifactPowerLinkRecord>("ArtifactPowerLink.db2", HotfixStatements.SEL_ARTIFACT_POWER_LINK);
ArtifactPowerPickerStorage = ReadDB2<ArtifactPowerPickerRecord>("ArtifactPowerPicker.db2", HotfixStatements.SEL_ARTIFACT_POWER_PICKER);
+7 -1
View File
@@ -75,9 +75,13 @@ namespace Game.DataStorage
foreach (AzeriteEmpoweredItemRecord azeriteEmpoweredItem in CliDB.AzeriteEmpoweredItemStorage.Values)
_azeriteEmpoweredItems[azeriteEmpoweredItem.ItemID] = azeriteEmpoweredItem;
CliDB.AzeriteEmpoweredItemStorage.Clear();
foreach (AzeriteEssencePowerRecord azeriteEssencePower in CliDB.AzeriteEssencePowerStorage.Values)
_azeriteEssencePowersByIdAndRank[((uint)azeriteEssencePower.AzeriteEssenceID, (uint)azeriteEssencePower.Tier)] = azeriteEssencePower;
CliDB.AzeriteEssencePowerStorage.Clear();
foreach (AzeriteItemMilestonePowerRecord azeriteItemMilestonePower in CliDB.AzeriteItemMilestonePowerStorage.Values)
_azeriteItemMilestonePowers.Add(azeriteItemMilestonePower);
@@ -99,6 +103,8 @@ namespace Game.DataStorage
if (CliDB.AzeritePowerStorage.ContainsKey(azeritePowerSetMember.AzeritePowerID))
_azeritePowers.Add(azeritePowerSetMember.AzeritePowerSetID, azeritePowerSetMember);
CliDB.AzeritePowerSetMemberStorage.Clear();
foreach (AzeriteTierUnlockRecord azeriteTierUnlock in CliDB.AzeriteTierUnlockStorage.Values)
{
var key = (azeriteTierUnlock.AzeriteTierUnlockSetID, (ItemContext)azeriteTierUnlock.ItemCreationContext);
@@ -2295,7 +2301,7 @@ namespace Game.DataStorage
Dictionary<short, uint> _itemLevelDeltaToBonusListContainer = new Dictionary<short, uint>();
MultiMap<uint, ItemBonusTreeNodeRecord> _itemBonusTrees = new MultiMap<uint, ItemBonusTreeNodeRecord>();
Dictionary<uint, ItemChildEquipmentRecord> _itemChildEquipment = new Dictionary<uint, ItemChildEquipmentRecord>();
Array<ItemClassRecord> _itemClassByOldEnum = new Array<ItemClassRecord>(19);
ItemClassRecord[] _itemClassByOldEnum = new ItemClassRecord[19];
List<uint> _itemsWithCurrencyCost = new List<uint>();
MultiMap<uint, ItemLimitCategoryConditionRecord> _itemCategoryConditions = new MultiMap<uint, ItemLimitCategoryConditionRecord>();
MultiMap<uint, ItemLevelSelectorQualityRecord> _itemLevelQualitySelectorQualities = new MultiMap<uint, ItemLevelSelectorQualityRecord>();
@@ -2627,7 +2627,6 @@ namespace Game.Entities
Log.outError(LogFilter.Player, "GetQuestObjectiveData: called for quest {0} with invalid StorageIndex {1} (objective data is not tracked)", quest.Id, storageIndex);
var status = m_QuestStatus.LookupByKey(quest.Id);
if (status == null)
{
Log.outError(LogFilter.Player, "GetQuestObjectiveData: player {0} ({1}) doesn't have quest status data for quest {2}", GetName(), GetGUID().ToString(), quest.Id);
-1
View File
@@ -2196,7 +2196,6 @@ namespace Game.Entities
minDamage = Math.Max(0.0f, minDamage);
maxDamage = Math.Max(0.0f, maxDamage);
if (minDamage > maxDamage)
{
minDamage = minDamage + maxDamage;
@@ -111,12 +111,12 @@ namespace Game.Networking.Packets
uint Count = _worldPacket.ReadUInt32();
Target = _worldPacket.ReadPackedGuid();
for (uint i = 0; i < Count; ++i)
for (int i = 0; i < Count; ++i)
{
LootRequest lootRequest = new LootRequest();
lootRequest.Object = _worldPacket.ReadPackedGuid();
lootRequest.LootListID = _worldPacket.ReadUInt8();
Loot.Add(lootRequest);
Loot[i] = lootRequest;
}
}
@@ -151,7 +151,7 @@ namespace Game.Networking.Packets
{
uint size = _worldPacket.ReadUInt32();
for (int i = 0; i < size; ++i)
Talents[i].Read(_worldPacket);
Talents[i] = new PvPTalent(_worldPacket);
}
public Array<PvPTalent> Talents = new Array<PvPTalent>(4);
@@ -182,7 +182,7 @@ namespace Game.Networking.Packets
public ushort PvPTalentID;
public byte Slot;
public void Read(WorldPacket data)
public PvPTalent(WorldPacket data)
{
PvPTalentID = data.ReadUInt16();
Slot = data.ReadUInt8();