From 1f9360948aad38347e014b3c27b1fc06cda655c5 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 14 Nov 2015 18:19:58 +0100 Subject: [PATCH] Changed: Support for integer types in Lua 5.3, fixes #253 --- code/nel/include/nel/gui/lua_object.h | 3 + code/nel/src/gui/lua_object.cpp | 42 +++++++ .../client/src/interface_v3/lua_ihm_ryzom.cpp | 14 +-- .../ryzom/client/src/session_browser_impl.cpp | 104 +++++++++--------- 4 files changed, 105 insertions(+), 58 deletions(-) diff --git a/code/nel/include/nel/gui/lua_object.h b/code/nel/include/nel/gui/lua_object.h index 4ea052ef7..1d3b0d64c 100644 --- a/code/nel/include/nel/gui/lua_object.h +++ b/code/nel/include/nel/gui/lua_object.h @@ -125,6 +125,9 @@ namespace NLGUI void setValue(const char *key, bool value) throw(ELuaNotATable); void setValue(const char *key, TLuaWrappedFunction value) throw(ELuaNotATable); void setValue(const char *key, double value) throw(ELuaNotATable); + void setValue(const char *key, uint32 value) throw(ELuaNotATable); + void setValue(const char *key, sint32 value) throw(ELuaNotATable); + void setValue(const char *key, sint64 value) throw(ELuaNotATable); void setValue(const std::string &key, const std::string &value) throw(ELuaNotATable) { setValue(key.c_str(), value); } void setNil(const char *key) throw(ELuaNotATable); void setNil(const std::string &key) throw(ELuaNotATable) { setNil(key.c_str()); } diff --git a/code/nel/src/gui/lua_object.cpp b/code/nel/src/gui/lua_object.cpp index 5b44f32e2..622157ed9 100644 --- a/code/nel/src/gui/lua_object.cpp +++ b/code/nel/src/gui/lua_object.cpp @@ -389,6 +389,48 @@ namespace NLGUI _LuaState->pop(); } + // ************************************************* + void CLuaObject::setValue(const char *key, uint32 value) throw(ELuaNotATable) + { + nlassert(key); + nlassert(isValid()); + if (!isTable()) throw ELuaNotATable(NLMISC::toString("Trying to set a value '%u' at key %s on object '%s' of type %s (not a table).", value, key, getId().c_str(), getTypename())); + CLuaStackChecker lsc(_LuaState); + push(); + _LuaState->push(key); + _LuaState->push(value); + _LuaState->setTable(-3); + _LuaState->pop(); + } + + // ************************************************* + void CLuaObject::setValue(const char *key, sint32 value) throw(ELuaNotATable) + { + nlassert(key); + nlassert(isValid()); + if (!isTable()) throw ELuaNotATable(NLMISC::toString("Trying to set a value '%d' at key %s on object '%s' of type %s (not a table).", value, key, getId().c_str(), getTypename())); + CLuaStackChecker lsc(_LuaState); + push(); + _LuaState->push(key); + _LuaState->push(value); + _LuaState->setTable(-3); + _LuaState->pop(); + } + + // ************************************************* + void CLuaObject::setValue(const char *key, sint64 value) throw(ELuaNotATable) + { + nlassert(key); + nlassert(isValid()); + if (!isTable()) throw ELuaNotATable(NLMISC::toString("Trying to set a value '%d"NL_I64"' at key %s on object '%s' of type %s (not a table).", value, key, getId().c_str(), getTypename())); + CLuaStackChecker lsc(_LuaState); + push(); + _LuaState->push(key); + _LuaState->push(value); + _LuaState->setTable(-3); + _LuaState->pop(); + } + // ************************************************* void CLuaObject::eraseValue(const char *key) throw(ELuaNotATable) { diff --git a/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp b/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp index 34339e53a..87ee0c44d 100644 --- a/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp +++ b/code/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp @@ -1427,7 +1427,7 @@ int CLuaIHMRyzom::getClientCfgVar(CLuaState &ls) } for(uint i = 0; iIntValues.size(); i++) { - result.setValue(toString(count).c_str(), (double)v->IntValues[i]); + result.setValue(toString(count).c_str(), (sint32)v->IntValues[i]); count++; } for(uint i = 0; iRealValues.size(); i++) @@ -1752,10 +1752,10 @@ int CLuaIHMRyzom::getCompleteIslands(CLuaState &ls) ls.newTable(); CLuaObject islandTable(ls); islandTable.setValue("continent", island->Continent); - islandTable.setValue("xmin", (double)island->XMin); - islandTable.setValue("ymin", (double)island->YMin); - islandTable.setValue("xmax", (double)island->XMax); - islandTable.setValue("ymax", (double)island->YMax); + islandTable.setValue("xmin", island->XMin); + islandTable.setValue("ymin", island->YMin); + islandTable.setValue("xmax", island->XMax); + islandTable.setValue("ymax", island->YMax); ls.newTable(); CLuaObject entrypointsTable(ls); @@ -1765,8 +1765,8 @@ int CLuaIHMRyzom::getCompleteIslands(CLuaState &ls) const CScenarioEntryPoints::CShortEntryPoint & entryPoint = island->EntryPoints[e]; ls.newTable(); CLuaObject entrypointTable(ls); - entrypointTable.setValue("x", (double)entryPoint.X); - entrypointTable.setValue("y", (double)entryPoint.Y); + entrypointTable.setValue("x", entryPoint.X); + entrypointTable.setValue("y", entryPoint.Y); entrypointsTable.setValue(entryPoint.Location, entrypointTable); } diff --git a/code/ryzom/client/src/session_browser_impl.cpp b/code/ryzom/client/src/session_browser_impl.cpp index c5e0fdcc3..52063e132 100644 --- a/code/ryzom/client/src/session_browser_impl.cpp +++ b/code/ryzom/client/src/session_browser_impl.cpp @@ -373,34 +373,36 @@ void CSessionBrowserImpl::fill(const std::vector &session const RSMGR::TSessionDesc &sd = sessions[k]; _Lua->newTable(); CLuaObject session(*_Lua); - session.setValue("Id", (double) sd.getSessionId().asInt()); - session.setValue("Owner", sd.getOwnerName()); - session.setValue("Title", sd.getTitle()); - session.setValue("Desc", sd.getDescription()); - session.setValue("Level", (double) sd.getSessionLevel().getValue()); - session.setValue("Language", sd.getLanguage()); + session.setValue("Id", sd.getSessionId().asInt()); + session.setValue("Owner", sd.getOwnerName()); + session.setValue("Title", sd.getTitle()); + session.setValue("Desc", sd.getDescription()); + session.setValue("Level", (uint32) sd.getSessionLevel().getValue()); + session.setValue("Language", sd.getLanguage()); + uint flags = (sd.getAnimMode().getValue() == RSMGR::TAnimMode::am_dm ? (uint) 1 : 0) | (sd.getRequesterCharInvited() ? (uint) 2 : 0); if(sd.getRequesterCharKicked()) flags = (uint) 4; - session.setValue("Flags", (double) flags); - session.setValue("PlayerCount", (double) sd.getNbConnectedPlayer()); - session.setValue("AllowFreeTrial", (double) sd.getAllowFreeTrial()); - session.setValue("NbRating", (double) sd.getNbRating()); - session.setValue("RateFun", (double) sd.getRateFun()); - session.setValue("RateDifficulty", (double) sd.getRateDifficulty()); - session.setValue("RateAccessibility", (double) sd.getRateAccessibility()); - session.setValue("RateOriginality", (double) sd.getRateOriginality()); - session.setValue("RateDirection", (double) sd.getRateDirection()); + session.setValue("Flags", flags); + session.setValue("PlayerCount", sd.getNbConnectedPlayer()); + session.setValue("AllowFreeTrial", sd.getAllowFreeTrial()); - session.setValue("ScenarioRRPTotal", (double) sd.getScenarioRRPTotal()); + session.setValue("NbRating", sd.getNbRating()); + session.setValue("RateFun", sd.getRateFun()); + session.setValue("RateDifficulty", sd.getRateDifficulty()); + session.setValue("RateAccessibility", sd.getRateAccessibility()); + session.setValue("RateOriginality", sd.getRateOriginality()); + session.setValue("RateDirection", sd.getRateDirection()); - session.setValue("AuthorRating", (double) _LastAuthorRating); + session.setValue("ScenarioRRPTotal", sd.getScenarioRRPTotal()); + + session.setValue("AuthorRating", _LastAuthorRating); if(sd.getAnimMode().getValue() == RSMGR::TAnimMode::am_dm) - session.setValue("OwnerRating", (double) _LastAMRating); + session.setValue("OwnerRating", _LastAMRating); else - session.setValue("OwnerRating", (double) _LastMasterlessRating); + session.setValue("OwnerRating", _LastMasterlessRating); // calculate the difference between local time and gmt time_t rawtime; @@ -418,9 +420,9 @@ void CSessionBrowserImpl::fill(const std::vector &session // convert GMT time value from server to local time time_t adjustedTime= sd.getLaunchDate() + localTime - gmtTime; - session.setValue("LaunchDate", (double) adjustedTime); + session.setValue("LaunchDate", (sint64)adjustedTime); - session.setValue("ScenarioType", (double) sd.getOrientation().getValue()); + session.setValue("ScenarioType", (uint32)sd.getOrientation().getValue()); session.push(); _Lua->rawSetI(-2, k +1); // set in session list } @@ -442,12 +444,12 @@ void CSessionBrowserImpl::playerRatingFill(bool scenarioRated, uint32 rateFun, u _Lua->newTable(); CLuaObject scores(*_Lua); - scores.setValue("ScenarioRated", (double) scenarioRated); - scores.setValue("RateFun", (double) rateFun); - scores.setValue("RateDifficulty", (double) rateDifficulty); - scores.setValue("RateAccessibility", (double) rateAccessibility); - scores.setValue("RateOriginality", (double) rateOriginality); - scores.setValue("RateDirection", (double) rateDirection); + scores.setValue("ScenarioRated", scenarioRated); + scores.setValue("RateFun", rateFun); + scores.setValue("RateDifficulty", rateDifficulty); + scores.setValue("RateAccessibility", rateAccessibility); + scores.setValue("RateOriginality", rateOriginality); + scores.setValue("RateDirection", rateDirection); scores.push(); @@ -469,13 +471,13 @@ void CSessionBrowserImpl::averageScoresFill(bool scenarioRated, uint32 rateFun, _Lua->newTable(); CLuaObject scores(*_Lua); - scores.setValue("ScenarioRated", (double) scenarioRated); - scores.setValue("RateFun", (double) rateFun); - scores.setValue("RateDifficulty", (double) rateDifficulty); - scores.setValue("RateAccessibility", (double) rateAccessibility); - scores.setValue("RateOriginality", (double) rateOriginality); - scores.setValue("RateDirection", (double) rateDirection); - scores.setValue("RRPTotal", (double) rrpTotal); + scores.setValue("ScenarioRated", scenarioRated); + scores.setValue("RateFun", rateFun); + scores.setValue("RateDifficulty", rateDifficulty); + scores.setValue("RateAccessibility", rateAccessibility); + scores.setValue("RateOriginality", rateOriginality); + scores.setValue("RateDirection", rateDirection); + scores.setValue("RRPTotal", rrpTotal); scores.push(); @@ -560,13 +562,13 @@ void CSessionBrowserImpl::on_scenarioAverageScores(NLNET::TSockId /* from */, bo _Lua->newTable(); CLuaObject scores(*_Lua); - scores.setValue("ScenarioRated", (double) scenarioRated); - scores.setValue("RateFun", (double) rateFun); - scores.setValue("RateDifficulty", (double) rateDifficulty); - scores.setValue("RateAccessibility", (double) rateAccessibility); - scores.setValue("RateOriginality", (double) rateOriginality); - scores.setValue("RateDirection", (double) rateDirection); - scores.setValue("RRPTotal", (double) rrpTotal); + scores.setValue("ScenarioRated", scenarioRated); + scores.setValue("RateFun", rateFun); + scores.setValue("RateDifficulty", rateDifficulty); + scores.setValue("RateAccessibility", rateAccessibility); + scores.setValue("RateOriginality", rateOriginality); + scores.setValue("RateDirection", rateDirection); + scores.setValue("RRPTotal", rrpTotal); scores.push(); @@ -612,11 +614,11 @@ void CSessionBrowserImpl::charsFill(const std::vector &chars { _Lua->newTable(); CLuaObject luaChar(*_Lua); - luaChar.setValue("Id", (double) cd.getCharId()); + luaChar.setValue("Id", cd.getCharId()); luaChar.setValue("Char", cd.getCharName()); luaChar.setValue("Guild", cd.getGuildName()); - luaChar.setValue("Race", (double) cd.getRace().getValue()); - luaChar.setValue("Religion", (double) cd.getCult().getValue()); + luaChar.setValue("Race", (uint32) cd.getRace().getValue()); + luaChar.setValue("Religion", (uint32) cd.getCult().getValue()); string shardName = toString(cd.getShardId()); for(uint l = 0; l < Mainlands.size(); ++l) @@ -630,7 +632,7 @@ void CSessionBrowserImpl::charsFill(const std::vector &chars luaChar.setValue("Shard", shardName); // note: we do 'level-1' because the TSessionLevel enum starts at 1 - luaChar.setValue("Level", (double) (cd.getLevel().getValue()-1)); + luaChar.setValue("Level", (uint32) (cd.getLevel().getValue()-1)); /* uint32 flags = 0; if (cd.getConnected()) { flags += 1; } @@ -639,7 +641,7 @@ void CSessionBrowserImpl::charsFill(const std::vector &chars uint32 flags = cd.getConnected(); if (cd.getKicked()){ flags = 2; } - luaChar.setValue("Flags", (double) flags); + luaChar.setValue("Flags", flags); luaChar.push(); _Lua->rawSetI(-2, k +1); // set in chars list } @@ -655,14 +657,14 @@ void CSessionBrowserImpl::charsFill(const std::vector &chars // **************************************************************************** -inline double ecoRingPoints(const std::string & ecoPoints, const char * c) +inline uint32 ecoRingPoints(const std::string & ecoPoints, const char * c) { std::string::size_type cPlace = ecoPoints.find(c); if(cPlace==string::npos) return 0; std::string::size_type sepPlace = ecoPoints.find(":", cPlace); std::string points = ecoPoints.substr(cPlace+1, sepPlace); - double ret; + uint32 ret; fromString(points, ret); return ret; } @@ -678,9 +680,9 @@ void CSessionBrowserImpl::ringStatsFill() CLuaObject luaRingPoints(*_Lua); - luaRingPoints.setValue("AuthorRating", (double) _LastAuthorRating); - luaRingPoints.setValue("AMRating", (double) _LastAMRating); - luaRingPoints.setValue("MasterlessRating", (double) _LastMasterlessRating); + luaRingPoints.setValue("AuthorRating", _LastAuthorRating); + luaRingPoints.setValue("AMRating", _LastAMRating); + luaRingPoints.setValue("MasterlessRating", _LastMasterlessRating); luaRingPoints.setValue("MaxBasicRingPoints", ecoRingPoints(_LastMaxRingPoints, "A")); luaRingPoints.setValue("BasicRingPoints", ecoRingPoints(_LastRingPoints, "A"));