fix: Fixes NPE crash from "i wish to duel" (#1410)

This commit is contained in:
Gnai 2023-06-05 17:50:15 -03:00 committed by GitHub
parent f2d0f6616e
commit c18d0d23ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -72,11 +72,7 @@ namespace Server.Engines.ConPVP
{ {
private readonly Dictionary<Mobile, PreferencesEntry> m_Table; private readonly Dictionary<Mobile, PreferencesEntry> m_Table;
public Preferences() public Preferences() => m_Table = new Dictionary<Mobile, PreferencesEntry>();
{
m_Table = new Dictionary<Mobile, PreferencesEntry>();
Entries = new List<PreferencesEntry>();
}
public Preferences(IGenericReader reader) public Preferences(IGenericReader reader)
{ {
@ -89,7 +85,6 @@ namespace Server.Engines.ConPVP
var count = reader.ReadEncodedInt(); var count = reader.ReadEncodedInt();
m_Table = new Dictionary<Mobile, PreferencesEntry>(count); m_Table = new Dictionary<Mobile, PreferencesEntry>(count);
Entries = new List<PreferencesEntry>(count);
for (var i = 0; i < count; ++i) for (var i = 0; i < count; ++i)
{ {
@ -98,7 +93,6 @@ namespace Server.Engines.ConPVP
if (entry.Mobile != null) if (entry.Mobile != null)
{ {
m_Table[entry.Mobile] = entry; m_Table[entry.Mobile] = entry;
Entries.Add(entry);
} }
} }
@ -107,16 +101,13 @@ namespace Server.Engines.ConPVP
} }
} }
public List<PreferencesEntry> Entries { get; }
public static Preferences Instance { get; set; } public static Preferences Instance { get; set; }
public PreferencesEntry Find(Mobile mob) public PreferencesEntry Find(Mobile mob)
{ {
if (m_Table.TryGetValue(mob, out var entry)) if (!m_Table.TryGetValue(mob, out var entry))
{ {
m_Table[mob] = entry = new PreferencesEntry(mob); m_Table[mob] = entry = new PreferencesEntry(mob);
Entries.Add(entry);
} }
return entry; return entry;
@ -126,11 +117,12 @@ namespace Server.Engines.ConPVP
{ {
writer.WriteEncodedInt(0); // version; writer.WriteEncodedInt(0); // version;
writer.WriteEncodedInt(Entries.Count); var count = m_Table.Values.Count;
writer.WriteEncodedInt(count);
for (var i = 0; i < Entries.Count; ++i) foreach (var entry in m_Table.Values)
{ {
Entries[i].Serialize(writer); entry.Serialize(writer);
} }
} }
} }