From 384709661283526a34e4833706b45a865f1a2a85 Mon Sep 17 00:00:00 2001
From: D-AIRY <admin@ds-servers.com>
Date: Tue, 24 Dec 2024 14:05:45 +0300
Subject: [PATCH] Prevent spawning proxy object when target is not found

---
 source/terrax/terrax.cpp | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/source/terrax/terrax.cpp b/source/terrax/terrax.cpp
index 56df65475..3c256fea7 100644
--- a/source/terrax/terrax.cpp
+++ b/source/terrax/terrax.cpp
@@ -1278,28 +1278,33 @@ int main(int argc, char **argv)
 								}
 
 								CProxyObject *pProxy = new CProxyObject(guid);
-								pProxy->setDstObject(guidTarget);
-
-								for(UINT k = 0, kl = pSArr->size(); k < kl; ++k)
+								if(pProxy->setDstObject(guidTarget))
 								{
-									szGUID = pSArr->at(k)->getString();
-									if(!szGUID || !XGUIDFromString(&guid, szGUID))
+									for(UINT k = 0, kl = pSArr->size(); k < kl; ++k)
 									{
-										LibReport(REPORT_MSG_LEVEL_ERROR, "Invalid model '%u' guid in proxy '%u' in '%s'. '%s'\n", k, j, szFile, szGUID ? szGUID : "");
-										continue;
+										szGUID = pSArr->at(k)->getString();
+										if(!szGUID || !XGUIDFromString(&guid, szGUID))
+										{
+											LibReport(REPORT_MSG_LEVEL_ERROR, "Invalid model '%u' guid in proxy '%u' in '%s'. '%s'\n", k, j, szFile, szGUID ? szGUID : "");
+											continue;
+										}
+
+										pProxy->addSrcModel(guid);
 									}
 
-									pProxy->addSrcModel(guid);
-								}
-
-								g_apProxies.push_back(pProxy);
+									g_apProxies.push_back(pProxy);
 
-								//pProxy->build();
+									//pProxy->build();
 
-								add_ref(pProxy);
-								g_pLevelObjects.push_back(pProxy);
+									add_ref(pProxy);
+									g_pLevelObjects.push_back(pProxy);
 
-								isLoaded = true;
+									isLoaded = true;
+								}
+								else
+								{
+									mem_release(pProxy);
+								}
 							}
 						}
 					}
@@ -1849,7 +1854,7 @@ void XRender3D()
 			pvData = NULL;
 
 			XEnumerateObjects([&](IXEditorObject *pObj, bool isProxy, ICompoundObject *pParent){
-				float3_t vPos = pObj->getPos();
+				//float3_t vPos = pObj->getPos();
 				TODO("Add visibility check");
 				/*if(fViewportBorders.x > vPos.x || fViewportBorders.z < vPos.x || fViewportBorders.y < vPos.z) // not visible
 				{
-- 
GitLab