Fixes a crash in server startup.
This commit is contained in:
@@ -691,7 +691,7 @@ namespace Game.DataStorage
|
||||
return;
|
||||
}
|
||||
|
||||
Dictionary<Tuple<uint, int>, bool> deletedRecords = new Dictionary<Tuple<uint, int>, bool>();
|
||||
Dictionary<(uint tableHash, int recordId), bool> deletedRecords = new Dictionary<(uint tableHash, int recordId), bool>();
|
||||
|
||||
uint count = 0;
|
||||
do
|
||||
@@ -702,8 +702,7 @@ namespace Game.DataStorage
|
||||
bool deleted = result.Read<bool>(3);
|
||||
if (!deleted && !_storage.ContainsKey(tableHash))
|
||||
{
|
||||
var key = Tuple.Create(tableHash, recordId);
|
||||
if (!_hotfixBlob.Any(p => p.ContainsKey(key)))
|
||||
if (!_hotfixBlob.Any(p => p.ContainsKey((tableHash, recordId))))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table `hotfix_data` references unknown DB2 store by hash 0x{tableHash:X} and has no reference to `hotfix_blob` in hotfix id {id} with RecordID: {recordId}");
|
||||
continue;
|
||||
@@ -715,7 +714,7 @@ namespace Game.DataStorage
|
||||
hotfixRecord.RecordID = recordId;
|
||||
hotfixRecord.HotfixID = id;
|
||||
_hotfixData.Add(hotfixRecord);
|
||||
deletedRecords[Tuple.Create(tableHash, recordId)] = deleted;
|
||||
deletedRecords[(tableHash, recordId)] = deleted;
|
||||
|
||||
++count;
|
||||
} while (result.NextRow());
|
||||
@@ -724,9 +723,9 @@ namespace Game.DataStorage
|
||||
{
|
||||
if (itr.Value)
|
||||
{
|
||||
var store = _storage.LookupByKey(itr.Key.Item1);
|
||||
var store = _storage.LookupByKey(itr.Key.tableHash);
|
||||
if (store != null)
|
||||
store.EraseRecord((uint)itr.Key.Item2);
|
||||
store.EraseRecord((uint)itr.Key.recordId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -859,7 +858,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
Cypher.Assert(SharedConst.IsValidLocale(locale), "Locale {locale} is invalid locale");
|
||||
|
||||
return _hotfixBlob[(int)locale].LookupByKey(Tuple.Create(tableHash, recordId));
|
||||
return _hotfixBlob[(int)locale].LookupByKey((tableHash, recordId));
|
||||
}
|
||||
|
||||
public List<HotfixOptionalData> GetHotfixOptionalData(uint tableHash, uint recordId, Locale locale)
|
||||
@@ -2244,9 +2243,9 @@ namespace Game.DataStorage
|
||||
|
||||
Dictionary<uint, IDB2Storage> _storage = new Dictionary<uint, IDB2Storage>();
|
||||
List<HotfixRecord> _hotfixData = new List<HotfixRecord>();
|
||||
Dictionary<(uint tableHas, int recordId), byte[]>[] _hotfixBlob = new Dictionary<(uint tableHas, int recordId), byte[]>[(int)Locale.Total];
|
||||
Dictionary<(uint tableHash, int recordId), byte[]>[] _hotfixBlob = new Dictionary<(uint tableHash, int recordId), byte[]>[(int)Locale.Total];
|
||||
MultiMap<uint, Tuple<uint, AllowedHotfixOptionalData>> _allowedHotfixOptionalData = new MultiMap<uint, Tuple<uint, AllowedHotfixOptionalData>>();
|
||||
MultiMap<(uint tableHas, int recordId), HotfixOptionalData>[]_hotfixOptionalData = new MultiMap<(uint tableHas, int recordId), HotfixOptionalData>[(int)Locale.Total];
|
||||
MultiMap<(uint tableHash, int recordId), HotfixOptionalData>[]_hotfixOptionalData = new MultiMap<(uint tableHash, int recordId), HotfixOptionalData>[(int)Locale.Total];
|
||||
|
||||
MultiMap<uint, uint> _areaGroupMembers = new MultiMap<uint, uint>();
|
||||
MultiMap<uint, ArtifactPowerRecord> _artifactPowers = new MultiMap<uint, ArtifactPowerRecord>();
|
||||
|
||||
@@ -431,7 +431,7 @@ namespace Game
|
||||
}
|
||||
else if ((int)Values[WorldCfg.StartDemonHunterPlayerLevel] > (int)Values[WorldCfg.MaxPlayerLevel])
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "StartDemonHunterPlayerLevel ({0}) must be in range 98..MaxPlayerLevel({1}). Set to {2}.",
|
||||
Log.outError(LogFilter.ServerLoading, "StartDemonHunterPlayerLevel ({0}) must be in range 1..MaxPlayerLevel({1}). Set to {2}.",
|
||||
Values[WorldCfg.StartDemonHunterPlayerLevel], Values[WorldCfg.MaxPlayerLevel], Values[WorldCfg.MaxPlayerLevel]);
|
||||
Values[WorldCfg.StartDemonHunterPlayerLevel] = Values[WorldCfg.MaxPlayerLevel];
|
||||
}
|
||||
@@ -439,12 +439,12 @@ namespace Game
|
||||
Values[WorldCfg.StartAlliedRaceLevel] = GetDefaultValue("StartAlliedRacePlayerLevel", 10);
|
||||
if ((int)Values[WorldCfg.StartAlliedRaceLevel] < 1)
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, $"StartDemonHunterPlayerLevel ({Values[WorldCfg.StartAlliedRaceLevel]}) must be in range 1..MaxPlayerLevel({Values[WorldCfg.MaxPlayerLevel]}). Set to 1.");
|
||||
Log.outError(LogFilter.ServerLoading, $"StartAlliedRaceLevel ({Values[WorldCfg.StartAlliedRaceLevel]}) must be in range 1..MaxPlayerLevel({Values[WorldCfg.MaxPlayerLevel]}). Set to 1.");
|
||||
Values[WorldCfg.StartAlliedRaceLevel] = 1;
|
||||
}
|
||||
else if ((int)Values[WorldCfg.StartAlliedRaceLevel] > (int)Values[WorldCfg.MaxPlayerLevel])
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, $"StartDemonHunterPlayerLevel ({Values[WorldCfg.StartAlliedRaceLevel]}) must be in range 1..MaxPlayerLevel({Values[WorldCfg.MaxPlayerLevel]}). Set to {Values[WorldCfg.MaxPlayerLevel]}.");
|
||||
Log.outError(LogFilter.ServerLoading, $"StartAlliedRaceLevel ({Values[WorldCfg.StartAlliedRaceLevel]}) must be in range 1..MaxPlayerLevel({Values[WorldCfg.MaxPlayerLevel]}). Set to {Values[WorldCfg.MaxPlayerLevel]}.");
|
||||
Values[WorldCfg.StartAlliedRaceLevel] = Values[WorldCfg.MaxPlayerLevel];
|
||||
}
|
||||
|
||||
@@ -507,12 +507,12 @@ namespace Game
|
||||
}
|
||||
Values[WorldCfg.CurrencyMaxJusticePoints] = (int)Values[WorldCfg.CurrencyMaxJusticePoints] * 100; //precision mod
|
||||
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel] = GetDefaultValue("RecruitAFriend.MaxLevel", 85);
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel] = GetDefaultValue("RecruitAFriend.MaxLevel", 60);
|
||||
if ((int)Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel] > (int)Values[WorldCfg.MaxPlayerLevel])
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "RecruitAFriend.MaxLevel ({0}) must be in the range 0..MaxLevel({1}). Set to {2}.",
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel], Values[WorldCfg.MaxPlayerLevel], 85);
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel] = 85;
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel], Values[WorldCfg.MaxPlayerLevel], 60);
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevel] = 60;
|
||||
}
|
||||
|
||||
Values[WorldCfg.MaxRecruitAFriendBonusPlayerLevelDifference] = GetDefaultValue("RecruitAFriend.MaxDifference", 4);
|
||||
|
||||
Reference in New Issue
Block a user