Yes, if you're not familiar with applying patches, you can manually enter the code.
Just take the lines beginning with '-' and delete them..then add the lines beginning with '+'
Essentially, you will end up with this:
Code:
void EntityList::CheckSpawnQueue()
{
// Send the stuff if the oldest packet on the queue is older than 50ms -Quagmire
if (tsFirstSpawnOnQueue != 0xFFFFFFFF && (Timer::GetCurrentTime() - tsFirstSpawnOnQueue) > 50) {
LinkedListIterator<NewSpawn_Struct *> iterator(SpawnQueue);
EQApplicationPacket *outapp = 0;
iterator.Reset();
NewSpawn_Struct *ns;
while(iterator.MoreElements()) {
outapp = new EQApplicationPacket;
ns = iterator.GetData();
Mob::CreateSpawnPacket(outapp, ns);
QueueClients(0, outapp);
auto it = npc_list.find(ns->spawn.spawnId);
if (it == npc_list.end()) {
Log.Out(Logs::General, Logs::Error, "Error in EntityList::CheckSpawnQueue: Unable to find NPC for spawnId '%u'", ns->spawn.spawnId);
}
else {
NPC *pnpc = it->second;
pnpc->SendArmorAppearance();
pnpc->SetAppearance(pnpc->GetGuardPointAnim(),false);
}
safe_delete(outapp);
iterator.RemoveCurrent();
}
tsFirstSpawnOnQueue = 0xFFFFFFFF;
NumSpawnsOnQueue = 0;
}
}
Note: I replaced the '%i' with '%u' in the log message code above.
What is happening is that we're calling a deference on (npc_list::iterator<unsigned short, NPC *>)it when we say 'it->second'
For some reason, npc_list is returning npc_list::end() when we assign 'it = npc_list.find(ns->spawn.spawnId)'
And since npc_list::end() is not dereferenceable, we get an assertion failure and the 'std::_Debug_message' call.
Again, not knowing the cause of this, you may have players being attacked by unseen and/or untargetable mobs..so,
be careful and watchful when your problem zones are active.
I've been looking at this from an downcast issue (uint32 -> uint16 with loss of data.)
One of the other dev's pointed out that it might be an empty npc_list..or some other queue-based issue.
Your results will help point which direction to go with this.