Re-insert existing DialInfo records when they are modified by another content file (Fixes #2170)

report
scrawl 10 years ago
parent 4c1906b999
commit dffa8c6c14

@ -63,6 +63,8 @@ void Dialogue::readInfo(ESMReader &esm, bool merge)
std::map<std::string, ESM::Dialogue::InfoContainer::iterator>::iterator lookup; std::map<std::string, ESM::Dialogue::InfoContainer::iterator>::iterator lookup;
lookup = mLookup.find(id); lookup = mLookup.find(id);
ESM::DialInfo info;
if (lookup != mLookup.end()) if (lookup != mLookup.end())
{ {
it = lookup->second; it = lookup->second;
@ -70,13 +72,17 @@ void Dialogue::readInfo(ESMReader &esm, bool merge)
// Merge with existing record. Only the subrecords that are present in // Merge with existing record. Only the subrecords that are present in
// the new record will be overwritten. // the new record will be overwritten.
it->load(esm); it->load(esm);
return; info = *it;
}
// New record // Since the record merging may have changed the next/prev linked list connection, we need to re-insert the record
ESM::DialInfo info; mInfo.erase(it);
mLookup.erase(lookup);
}
else
{
info.mId = id; info.mId = id;
info.load(esm); info.load(esm);
}
if (info.mNext.empty()) if (info.mNext.empty())
{ {

Loading…
Cancel
Save