diff --git a/code/nel/include/nel/gui/group_html.h b/code/nel/include/nel/gui/group_html.h
index 590c43a89..a78e203c0 100644
--- a/code/nel/include/nel/gui/group_html.h
+++ b/code/nel/include/nel/gui/group_html.h
@@ -115,6 +115,9 @@ namespace NLGUI
// Browse error
void browseError (const char *msg);
+ // Error message with html content
+ void browseErrorHtml(const std::string &html);
+
bool isBrowsing();
// Update coords
diff --git a/code/nel/src/gui/group_html.cpp b/code/nel/src/gui/group_html.cpp
index e88bdfbc5..ae8722592 100644
--- a/code/nel/src/gui/group_html.cpp
+++ b/code/nel/src/gui/group_html.cpp
@@ -2642,6 +2642,17 @@ namespace NLGUI
invalidateCoords();
}
+ void CGroupHTML::browseErrorHtml(const std::string &html)
+ {
+ releaseDownloads();
+ removeContent();
+
+ renderHtmlString(html);
+
+ updateRefreshButton();
+ invalidateCoords();
+ }
+
// ***************************************************************************
bool CGroupHTML::isBrowsing()
@@ -3964,11 +3975,22 @@ namespace NLGUI
{
if (!success)
{
+ CUrlParser uri(_CurlWWW->Url);
+
+ // potentially unwanted chars
+ std::string url = _CurlWWW->Url;
+ url = strFindReplaceAll(url, string("<"), string("%3C"));
+ url = strFindReplaceAll(url, string(">"), string("%3E"));
+ url = strFindReplaceAll(url, string("\""), string("%22"));
+ url = strFindReplaceAll(url, string("'"), string("%27"));
+
std::string err;
- err = "Connection failed with cURL error: ";
+ err = "
cURL error";
+ err += "Connection failed with cURL error
";
err += error;
- err += "\nURL '" + _CurlWWW->Url + "'";
- browseError(err.c_str());
+ err += "
(" + uri.scheme + "://" + uri.host + ") reload";
+ err += "";
+ browseErrorHtml(err);
return;
}
diff --git a/code/ryzom/client/src/client.cpp b/code/ryzom/client/src/client.cpp
index e824f6529..4e933b6da 100644
--- a/code/ryzom/client/src/client.cpp
+++ b/code/ryzom/client/src/client.cpp
@@ -180,6 +180,7 @@ int main(int argc, char **argv)
Args.setVersion(getDisplayVersion());
Args.setDescription("Ryzom client");
+ Args.addArg("n", "nopatch", "value", "Use this to not use patch system");
Args.addArg("p", "profile", "id", "Use this profile to determine what directory to use by default");
Args.addAdditionalArg("login", "Login to use", true, false);
Args.addAdditionalArg("password", "Password to use", true, false);
diff --git a/code/ryzom/client/src/far_tp.cpp b/code/ryzom/client/src/far_tp.cpp
index 0a594e540..1c2a6e612 100644
--- a/code/ryzom/client/src/far_tp.cpp
+++ b/code/ryzom/client/src/far_tp.cpp
@@ -49,12 +49,12 @@
#include "login_progress_post_thread.h"
#include "interface_v3/action_handler_base.h"
#include "item_group_manager.h"
+#include "nel/misc/cmd_args.h"
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
-
using namespace NLMISC;
using namespace NLNET;
using namespace NL3D;
@@ -210,6 +210,7 @@ extern bool IsInRingSession;
extern void selectTipsOfTheDay (uint tips);
#define BAR_STEP_TP 2
+extern NLMISC::CCmdArgs Args;
CLoginStateMachine::TEvent CLoginStateMachine::waitEvent()
{
@@ -462,12 +463,14 @@ void CLoginStateMachine::run()
case st_check_patch:
/// check the data to check if patch needed
CLoginProgressPostThread::getInstance().step(CLoginStep(LoginStep_PostLogin, "login_step_post_login"));
- if (!ClientCfg.PatchWanted)
+
+ if (!ClientCfg.PatchWanted || (Args.haveArg("n") && Args.getLongArg("nopatch").front() == "1"))
{
// client don't want to be patched !
_CurrentState = st_display_eula;
break;
}
+
initPatchCheck();
SM_BEGIN_EVENT_TABLE
if (isBGDownloadEnabled())
@@ -1517,4 +1520,3 @@ void CFarTP::farTPmainLoop()
if(welcomeWindow)
initWelcomeWindow();
}
-
diff --git a/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp b/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp
index 7b188742c..9485cb2b7 100644
--- a/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp
+++ b/code/ryzom/client/src/interface_v3/dbctrl_sheet.cpp
@@ -1086,6 +1086,7 @@ void CDBCtrlSheet::clearIconBuffs()
{
_EnchantIcons.clear();
_BuffIcons.clear();
+ _BoostIcons.clear();
}
// ***************************************************************************
@@ -1118,8 +1119,15 @@ void CDBCtrlSheet::infoReceived()
if (brick)
{
if (!brick->isRoot() && !brick->isCredit() && !brick->isParameter())
+ if (brick->BrickFamily == BRICK_FAMILIES::BSGMCB) // Boost of Allegories, use it as boost icon
{
if (!haveRoot)
+ _BoostIcons.push_back(SBuffIcon(rVR.getTextureIdFromName(brick->getIcon()), brick->IconColor));
+ rVR.getTextureSizeFromId(_BoostIcons.back().TextureId, _BoostIcons.back().IconW, _BoostIcons.back().IconH);
+ }
+ else if (!brick->isRoot() && !brick->isCredit() && !brick->isParameter())
+ {
+ if (!haveRoot && !brick->getIconBack().empty())
{
_EnchantIcons.push_back(SBuffIcon(rVR.getTextureIdFromName(brick->getIconBack()), brick->IconBackColor));
rVR.getTextureSizeFromId(_EnchantIcons.back().TextureId, _EnchantIcons.back().IconW, _EnchantIcons.back().IconH);
@@ -2444,10 +2452,18 @@ void CDBCtrlSheet::drawSheet (sint32 x, sint32 y, bool draging, bool showSelecti
}
yIcon -= hIcon;
rVR.drawRotFlipBitmap(_RenderLayer + 1, xIcon, yIcon, wIcon, hIcon, 0, false, _EnchantIcons[0].TextureId, fastMulRGB(curSheetColor, _EnchantIcons[0].Color));
- rVR.drawRotFlipBitmap(_RenderLayer+1, xIcon, yIcon, wIcon, hIcon, 0, false, _EnchantIcons[i].TextureId, fastMulRGB(curSheetColor, _EnchantIcons[i].Color));
+ rVR.drawRotFlipBitmap(_RenderLayer + 1, xIcon, yIcon, wIcon, hIcon, 0, false, _EnchantIcons[i].TextureId, fastMulRGB(curSheetColor, _EnchantIcons[i].Color));
+
+
+ if ((i - 1) < _BoostIcons.size()) {
+ nlinfo("Boost icon = %s", rVR.getTextureNameFromId(_BoostIcons[i-1].TextureId).c_str());
+ rVR.drawRotFlipBitmap(_RenderLayer + 2, xIcon+wIcon-_BoostIcons[i-1].IconW, yIcon, _BoostIcons[i-1].IconW, _BoostIcons[i-1].IconH, 0, false, _BoostIcons[i-1].TextureId, fastMulRGB(curSheetColor, _BoostIcons[i-1].Color));
+ }
}
}
+
+
// Draw Quality. -1 for lookandfeel. Draw it with global color
if (_DispQuality != -1)
{
@@ -3804,6 +3820,7 @@ void CDBCtrlSheet::resetAllTexIDs()
_ItemInfoChanged = true;
_EnchantIcons.clear();
_BuffIcons.clear();
+ _BoostIcons.clear();
}
diff --git a/code/ryzom/client/src/interface_v3/dbctrl_sheet.h b/code/ryzom/client/src/interface_v3/dbctrl_sheet.h
index f9a85dd05..0052335fb 100644
--- a/code/ryzom/client/src/interface_v3/dbctrl_sheet.h
+++ b/code/ryzom/client/src/interface_v3/dbctrl_sheet.h
@@ -682,6 +682,7 @@ protected:
};
std::vector _BuffIcons;
std::vector _EnchantIcons;
+ std::vector _BoostIcons;
// Level Brick or Quality
union
diff --git a/code/ryzom/client/src/network_connection.cpp b/code/ryzom/client/src/network_connection.cpp
index 731677043..4778641c0 100644
--- a/code/ryzom/client/src/network_connection.cpp
+++ b/code/ryzom/client/src/network_connection.cpp
@@ -680,6 +680,7 @@ bool CNetworkConnection::connect(string &result)
_LatestLoginTime = ryzomGetLocalTime ();
_LatestSyncTime = _LatestLoginTime;
_LatestProbeTime = _LatestLoginTime;
+ m_LoginAttempts = 0;
nlinfo("CNET[%p]: Client connected to shard, attempting login", this);
return true;
@@ -1091,6 +1092,17 @@ bool CNetworkConnection::stateLogin()
{
sendSystemLogin();
_LatestLoginTime = _UpdateTime;
+ if (m_LoginAttempts > 24)
+ {
+ m_LoginAttempts = 0;
+ disconnect(); // will send disconnection message
+ nlwarning("CNET[%p]: Too many LOGIN attempts, connection problem", this);
+ return false; // exit now from loop, don't expect a new state
+ }
+ else
+ {
+ ++m_LoginAttempts;
+ }
}
return false;
@@ -2308,6 +2320,7 @@ bool CNetworkConnection::stateProbe()
else
{
nlwarning("CNET[%p]: received normal in state Probe", this);
+ _LatestProbeTime = _UpdateTime;
}
}
}
diff --git a/code/ryzom/client/src/network_connection.h b/code/ryzom/client/src/network_connection.h
index d11702682..84bb26d43 100644
--- a/code/ryzom/client/src/network_connection.h
+++ b/code/ryzom/client/src/network_connection.h
@@ -822,6 +822,7 @@ private:
void sendSystemLogin();
bool stateLogin();
NLMISC::TTime _LatestLoginTime;
+ int m_LoginAttempts;
//
void receiveSystemSync(NLMISC::CBitMemStream &msgin);
diff --git a/code/ryzom/common/src/game_share/brick_families.cpp b/code/ryzom/common/src/game_share/brick_families.cpp
index 684eb0d25..c36593da0 100644
--- a/code/ryzom/common/src/game_share/brick_families.cpp
+++ b/code/ryzom/common/src/game_share/brick_families.cpp
@@ -558,6 +558,7 @@ namespace BRICK_FAMILIES
NL_STRING_CONVERSION_TABLE_ENTRY(BSCMC)
NL_STRING_CONVERSION_TABLE_ENTRY(BSCMD)
NL_STRING_CONVERSION_TABLE_ENTRY(BSGMC)
+ NL_STRING_CONVERSION_TABLE_ENTRY(BSGMCB)
NL_STRING_CONVERSION_TABLE_ENTRY(BSXCA)
diff --git a/code/ryzom/common/src/game_share/brick_families.h b/code/ryzom/common/src/game_share/brick_families.h
index 49a73fbaa..7903f6e5e 100644
--- a/code/ryzom/common/src/game_share/brick_families.h
+++ b/code/ryzom/common/src/game_share/brick_families.h
@@ -675,7 +675,8 @@ namespace BRICK_FAMILIES
BSCMD, // heal Focus
EndPowerParameter = BSCMD,
- BSGMC, // jewels s2e0
+ BSGMC, // allegories
+ BSGMCB, // boost allegories
BeginMagicPowerCredit,
BSXCA = BeginMagicPowerCredit, // recast time
diff --git a/code/ryzom/common/src/game_share/fame.cpp b/code/ryzom/common/src/game_share/fame.cpp
index 19c3cbb80..03bf10e45 100644
--- a/code/ryzom/common/src/game_share/fame.cpp
+++ b/code/ryzom/common/src/game_share/fame.cpp
@@ -633,7 +633,7 @@ sint32 CStaticFames::getStaticFameIndexed(uint factionIndex1, uint factionIndex2
if (factionIndex1 >= _FameTableSize || factionIndex2 >= _FameTableSize)
{
- nlwarning("FAME: CStaticFames::getStaticFame invalid faction, return 0");
+ //nlwarning("FAME: CStaticFames::getStaticFame invalid faction, return 0");
return 0;
}