mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Fix 2 crash cases during AIN build
This commit is contained in:
parent
5a2cbaf40a
commit
05b37bf111
@ -91,33 +91,37 @@ void CAI_NetworkBuilder::SaveNetworkGraph(CAI_Network* pNetwork)
|
|||||||
|
|
||||||
timer.Start();
|
timer.Start();
|
||||||
DevMsg(eDLL_T::SERVER, "+- Writing node positions...\n");
|
DevMsg(eDLL_T::SERVER, "+- Writing node positions...\n");
|
||||||
for (int i = 0; i < pNetwork->m_iNumNodes; i++)
|
|
||||||
|
if (pNetwork->m_pAInode)
|
||||||
{
|
{
|
||||||
// Construct on-disk node struct.
|
for (int i = 0; i < pNetwork->m_iNumNodes; i++)
|
||||||
CAI_NodeDisk diskNode{};
|
|
||||||
diskNode.m_vOrigin.x = pNetwork->m_pAInode[i]->m_vOrigin.x;
|
|
||||||
diskNode.m_vOrigin.y = pNetwork->m_pAInode[i]->m_vOrigin.y;
|
|
||||||
diskNode.m_vOrigin.z = pNetwork->m_pAInode[i]->m_vOrigin.z;
|
|
||||||
diskNode.m_flYaw = pNetwork->m_pAInode[i]->m_flYaw;
|
|
||||||
memcpy(diskNode.hulls, pNetwork->m_pAInode[i]->m_fHulls, sizeof(diskNode.hulls));
|
|
||||||
diskNode.unk0 = static_cast<char>(pNetwork->m_pAInode[i]->unk0);
|
|
||||||
diskNode.unk1 = pNetwork->m_pAInode[i]->unk1;
|
|
||||||
|
|
||||||
for (int j = 0; j < MAX_HULLS; j++)
|
|
||||||
{
|
{
|
||||||
diskNode.unk2[j] = static_cast<short>(pNetwork->m_pAInode[i]->unk2[j]);
|
// Construct on-disk node struct.
|
||||||
|
CAI_NodeDisk diskNode{};
|
||||||
|
diskNode.m_vOrigin.x = pNetwork->m_pAInode[i]->m_vOrigin.x;
|
||||||
|
diskNode.m_vOrigin.y = pNetwork->m_pAInode[i]->m_vOrigin.y;
|
||||||
|
diskNode.m_vOrigin.z = pNetwork->m_pAInode[i]->m_vOrigin.z;
|
||||||
|
diskNode.m_flYaw = pNetwork->m_pAInode[i]->m_flYaw;
|
||||||
|
memcpy(diskNode.hulls, pNetwork->m_pAInode[i]->m_fHulls, sizeof(diskNode.hulls));
|
||||||
|
diskNode.unk0 = static_cast<char>(pNetwork->m_pAInode[i]->unk0);
|
||||||
|
diskNode.unk1 = pNetwork->m_pAInode[i]->unk1;
|
||||||
|
|
||||||
|
for (int j = 0; j < MAX_HULLS; j++)
|
||||||
|
{
|
||||||
|
diskNode.unk2[j] = static_cast<short>(pNetwork->m_pAInode[i]->unk2[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(diskNode.unk3, pNetwork->m_pAInode[i]->unk3, sizeof(diskNode.unk3));
|
||||||
|
diskNode.unk4 = pNetwork->m_pAInode[i]->unk6;
|
||||||
|
diskNode.unk5 = -1; // aiNetwork->nodes[i]->unk8; // This field is wrong, however it's always -1 in original navmeshes anyway.
|
||||||
|
memcpy(diskNode.unk6, pNetwork->m_pAInode[i]->unk10, sizeof(diskNode.unk6));
|
||||||
|
|
||||||
|
|
||||||
|
DevMsg(eDLL_T::SERVER, " |-- Copying node '%d' from '%p' to '0x%llx'\n", pNetwork->m_pAInode[i]->m_nIndex, reinterpret_cast<void*>(pNetwork->m_pAInode[i]), static_cast<size_t>(writeStream.tellp()));
|
||||||
|
writeStream.write(reinterpret_cast<char*>(&diskNode), sizeof(CAI_NodeDisk));
|
||||||
|
|
||||||
|
nCalculatedLinkcount += pNetwork->m_pAInode[i]->m_nNumLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(diskNode.unk3, pNetwork->m_pAInode[i]->unk3, sizeof(diskNode.unk3));
|
|
||||||
diskNode.unk4 = pNetwork->m_pAInode[i]->unk6;
|
|
||||||
diskNode.unk5 = -1; // aiNetwork->nodes[i]->unk8; // This field is wrong, however it's always -1 in original navmeshes anyway.
|
|
||||||
memcpy(diskNode.unk6, pNetwork->m_pAInode[i]->unk10, sizeof(diskNode.unk6));
|
|
||||||
|
|
||||||
|
|
||||||
DevMsg(eDLL_T::SERVER, " |-- Copying node '%d' from '%p' to '0x%llx'\n", pNetwork->m_pAInode[i]->m_nIndex, reinterpret_cast<void*>(pNetwork->m_pAInode[i]), static_cast<size_t>(writeStream.tellp()));
|
|
||||||
writeStream.write(reinterpret_cast<char*>(&diskNode), sizeof(CAI_NodeDisk));
|
|
||||||
|
|
||||||
nCalculatedLinkcount += pNetwork->m_pAInode[i]->m_nNumLinks;
|
|
||||||
}
|
}
|
||||||
timer.End();
|
timer.End();
|
||||||
DevMsg(eDLL_T::SERVER, "...done writing node positions. %lf seconds\n", timer.GetDuration().GetSeconds());
|
DevMsg(eDLL_T::SERVER, "...done writing node positions. %lf seconds\n", timer.GetDuration().GetSeconds());
|
||||||
@ -138,24 +142,28 @@ void CAI_NetworkBuilder::SaveNetworkGraph(CAI_Network* pNetwork)
|
|||||||
}
|
}
|
||||||
|
|
||||||
writeStream.write(reinterpret_cast<char*>(&nCalculatedLinkcount), sizeof(int));
|
writeStream.write(reinterpret_cast<char*>(&nCalculatedLinkcount), sizeof(int));
|
||||||
for (int i = 0; i < pNetwork->m_iNumNodes; i++)
|
|
||||||
|
if (pNetwork->m_pAInode)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < pNetwork->m_pAInode[i]->m_nNumLinks; j++)
|
for (int i = 0; i < pNetwork->m_iNumNodes; i++)
|
||||||
{
|
{
|
||||||
// Skip links that don't originate from current node.
|
for (int j = 0; j < pNetwork->m_pAInode[i]->m_nNumLinks; j++)
|
||||||
if (pNetwork->m_pAInode[i]->links[j]->m_iSrcID != pNetwork->m_pAInode[i]->m_nIndex)
|
|
||||||
{
|
{
|
||||||
continue;
|
// Skip links that don't originate from current node.
|
||||||
|
if (pNetwork->m_pAInode[i]->links[j]->m_iSrcID != pNetwork->m_pAInode[i]->m_nIndex)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
CAI_NodeLinkDisk diskLink{};
|
||||||
|
diskLink.m_iSrcID = pNetwork->m_pAInode[i]->links[j]->m_iSrcID;
|
||||||
|
diskLink.m_iDestID = pNetwork->m_pAInode[i]->links[j]->m_iDestID;
|
||||||
|
diskLink.unk0 = pNetwork->m_pAInode[i]->links[j]->unk1;
|
||||||
|
memcpy(diskLink.m_bHulls, pNetwork->m_pAInode[i]->links[j]->m_bHulls, sizeof(diskLink.m_bHulls));
|
||||||
|
|
||||||
|
DevMsg(eDLL_T::SERVER, " |-- Writing link '%d' => '%d' to '0x%llx'\n", diskLink.m_iSrcID, diskLink.m_iDestID, static_cast<size_t>(writeStream.tellp()));
|
||||||
|
writeStream.write(reinterpret_cast<char*>(&diskLink), sizeof(CAI_NodeLinkDisk));
|
||||||
}
|
}
|
||||||
|
|
||||||
CAI_NodeLinkDisk diskLink{};
|
|
||||||
diskLink.m_iSrcID = pNetwork->m_pAInode[i]->links[j]->m_iSrcID;
|
|
||||||
diskLink.m_iDestID = pNetwork->m_pAInode[i]->links[j]->m_iDestID;
|
|
||||||
diskLink.unk0 = pNetwork->m_pAInode[i]->links[j]->unk1;
|
|
||||||
memcpy(diskLink.m_bHulls, pNetwork->m_pAInode[i]->links[j]->m_bHulls, sizeof(diskLink.m_bHulls));
|
|
||||||
|
|
||||||
DevMsg(eDLL_T::SERVER, " |-- Writing link '%d' => '%d' to '0x%llx'\n", diskLink.m_iSrcID, diskLink.m_iDestID, static_cast<size_t>(writeStream.tellp()));
|
|
||||||
writeStream.write(reinterpret_cast<char*>(&diskLink), sizeof(CAI_NodeLinkDisk));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user