From 433da7f65a9c51ecb1b015d7f1d4d0d3018ed12b Mon Sep 17 00:00:00 2001 From: kervala Date: Fri, 6 Nov 2015 15:47:58 +0100 Subject: [PATCH] More checks before to get a pointer on a CCDBNodeLeaf, fixes #251 --- .../src/interface_v3/interface_manager.cpp | 10 ++- code/ryzom/client/src/net_manager.cpp | 85 +++++++++++++------ 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/code/ryzom/client/src/interface_v3/interface_manager.cpp b/code/ryzom/client/src/interface_v3/interface_manager.cpp index 70be8abe4..a218d4de1 100644 --- a/code/ryzom/client/src/interface_v3/interface_manager.cpp +++ b/code/ryzom/client/src/interface_v3/interface_manager.cpp @@ -1950,8 +1950,14 @@ void CInterfaceManager::drawViews(NL3D::UCamera camera) nlctassert(CHARACTERISTICS::NUM_CHARACTERISTICS==8); for (uint i=0; igetDbProp(toString("SERVER:CHARACTER_INFO:CHARACTERISTICS%d:VALUE", i), false)); + if (!_CurrentPlayerCharacLeaf[i]) + _CurrentPlayerCharacLeaf[i] = NLGUI::CDBManager::getInstance()->getDbProp(toString("SERVER:CHARACTER_INFO:CHARACTERISTICS%d:VALUE", i), false); + + NLMISC::CCDBNodeLeaf *node = NULL; + + if (_CurrentPlayerCharacLeaf[i]) + node = &*_CurrentPlayerCharacLeaf[i]; + _CurrentPlayerCharac[i] = node ? node->getValue32() : 0; } diff --git a/code/ryzom/client/src/net_manager.cpp b/code/ryzom/client/src/net_manager.cpp index ecadce14e..9e4e398bd 100644 --- a/code/ryzom/client/src/net_manager.cpp +++ b/code/ryzom/client/src/net_manager.cpp @@ -3883,30 +3883,67 @@ bool CNetManager::update() CInterfaceManager *im = CInterfaceManager::getInstance(); if (im) { - CCDBNodeLeaf *node = m_PingLeaf ? &*m_PingLeaf - : &*(m_PingLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:PING", false)); - if (node) - node->setValue32(getPing()); - node = m_UploadLeaf ? &*m_UploadLeaf - : &*(m_UploadLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:UPLOAD", false)); - if (node) - node->setValue32((sint32)(getMeanUpload()*1024.f/8.f)); - node = m_DownloadLeaf ? &*m_DownloadLeaf - : &*(m_DownloadLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:DOWNLOAD", false)); - if (node) - node->setValue32((sint32)(getMeanDownload()*1024.f/8.f)); - node = m_PacketLostLeaf ? &* m_PacketLostLeaf - : &*(m_PacketLostLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:PACKETLOST", false)); - if (node) - node->setValue32((sint32)getMeanPacketLoss()); - node = m_ServerStateLeaf ? &*m_ServerStateLeaf - : &*(m_ServerStateLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:SERVERSTATE", false)); - if (node) - node->setValue32((sint32)getConnectionState()); - node = m_ConnectionQualityLeaf ? &*m_ConnectionQualityLeaf - : &*(m_ConnectionQualityLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:CONNECTION_QUALITY", false)); - if (node) - node->setValue32((sint32)getConnectionQuality()); + CCDBNodeLeaf *node = NULL; + + if (!m_PingLeaf) + m_PingLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:PING", false); + + if (m_PingLeaf) + { + node = &*m_PingLeaf; + if (node) + node->setValue32(getPing()); + } + + if (!m_UploadLeaf) + m_UploadLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:UPLOAD", false); + + if (m_UploadLeaf) + { + node = &*m_UploadLeaf; + if (node) + node->setValue32((sint32)(getMeanUpload()*1024.f/8.f)); + } + + if (!m_DownloadLeaf) + m_DownloadLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:DOWNLOAD", false); + + if (m_DownloadLeaf) + { + node = &*m_DownloadLeaf; + if (node) + node->setValue32((sint32)(getMeanDownload()*1024.f/8.f)); + } + + if (!m_PacketLostLeaf) + m_PacketLostLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:PACKETLOST", false); + + if (m_PacketLostLeaf) + { + node = &*m_PacketLostLeaf; + if (node) + node->setValue32((sint32)getMeanPacketLoss()); + } + + if (!m_ServerStateLeaf) + m_ServerStateLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:SERVERSTATE", false); + + if (m_ServerStateLeaf) + { + node = &*m_ServerStateLeaf; + if (node) + node->setValue32((sint32)getConnectionState()); + } + + if (!m_ConnectionQualityLeaf) + m_ConnectionQualityLeaf = NLGUI::CDBManager::getInstance()->getDbProp("UI:VARIABLES:CONNECTION_QUALITY", false); + + if (m_ConnectionQualityLeaf) + { + node = &*m_ConnectionQualityLeaf; + if (node) + node->setValue32((sint32)getConnectionQuality()); + } } }