Merged in Glorf/ryzomcore/fix_speed (pull request #141)

Displayed speed is now actual speed, fix #295
This commit is contained in:
C?dric OCHS 2016-10-21 06:15:56 +00:00
commit f1840fc189
85 changed files with 1460 additions and 976 deletions

View file

@ -304,7 +304,7 @@ IF(WITH_QT5)
ADD_QT_LIBRARY(XcbQpa)
ADD_QT_LIBRARY(PlatformSupport)
SET(QT_LIBRARIES ${QT_LIBRARIES} -lX11-xcb -lXi -lSM -lICE -lxcb -lGL)
SET(QT_LIBRARIES ${QT_LIBRARIES} -lX11-xcb -lXi -lSM -lICE -lxcb -lGL -lxcb-glx)
IF(EXISTS "${QT_LIBRARY_DIR}/libxcb-static.a")
SET(QT_LIBRARIES ${QT_LIBRARIES} "${QT_LIBRARY_DIR}/libxcb-static.a")
ENDIF()

View file

@ -40,7 +40,8 @@ MACRO(NL_CONFIGURE_CHECKS)
SET(NL_VERSION "${NL_VERSION_MAJOR}.${NL_VERSION_MINOR}.${NL_VERSION_PATCH}.${REVISION}")
SET(NL_VERSION_RC "${NL_VERSION_MAJOR},${NL_VERSION_MINOR},${NL_VERSION_PATCH},${REVISION}")
SET(RYZOM_VERSION "${RYZOM_VERSION_MAJOR}.${RYZOM_VERSION_MINOR}.${RYZOM_VERSION_PATCH}.${REVISION}")
SET(RYZOM_VERSION_SHORT "${RYZOM_VERSION_MAJOR}.${RYZOM_VERSION_MINOR}.${RYZOM_VERSION_PATCH}")
SET(RYZOM_VERSION "${RYZOM_VERSION_SHORT}.${REVISION}")
SET(RYZOM_VERSION_RC "${RYZOM_VERSION_MAJOR},${RYZOM_VERSION_MINOR},${RYZOM_VERSION_PATCH},${REVISION}")
NOW(BUILD_DATE)

View file

@ -334,6 +334,7 @@ MACRO(NL_SETUP_RYZOM_DEFAULT_OPTIONS)
OPTION(WITH_RYZOM_PATCH "Enable Ryzom in-game patch support" OFF)
OPTION(WITH_RYZOM_CUSTOM_PATCH_SERVER "Only use patch server from CFG file" OFF)
OPTION(WITH_RYZOM_STEAM "Enable Steam features" OFF)
OPTION(WITH_RYZOM_SANDBOX "Enable Sandbox under OS X" OFF)
ENDMACRO(NL_SETUP_RYZOM_DEFAULT_OPTIONS)
MACRO(NL_SETUP_SNOWBALLS_DEFAULT_OPTIONS)

View file

@ -196,18 +196,6 @@ CDriverGL::CDriverGL()
_backBufferHeight = 0;
_backBufferWidth = 0;
// autorelease pool for memory management
_autoreleasePool = [[NSAutoreleasePool alloc] init];
// init the application object
[NSApplication sharedApplication];
// create the menu in the top screen bar
setupApplicationMenu();
// finish the application launching
[NSApp finishLaunching];
#elif defined (NL_OS_UNIX)
_dpy = 0;
@ -373,10 +361,6 @@ CDriverGL::~CDriverGL()
{
H_AUTO_OGL(CDriverGL_CDriverGLDtor)
release();
#if defined(NL_OS_MAC)
[_autoreleasePool release];
#endif
}
// --------------------------------------------------
@ -638,7 +622,7 @@ bool CDriverGL::setupDisplay()
checkForPerPixelLightingSupport();
#ifndef USE_OPENGLES
// if EXTVertexShader is used, bind the standard GL arrays, and allocate constant
// if EXTVertexShader is used, bind the standard GL arrays, and allocate constant
if (!_Extensions.NVVertexProgram && !_Extensions.ARBVertexProgram && _Extensions.EXTVertexShader)
{
_EVSPositionHandle = nglBindParameterEXT(GL_CURRENT_VERTEX_EXT);
@ -942,13 +926,6 @@ bool CDriverGL::swapBuffers()
#elif defined(NL_OS_MAC)
// TODO: maybe do this somewhere else?
if(_DestroyWindow)
{
[_autoreleasePool release];
_autoreleasePool = [[NSAutoreleasePool alloc] init];
}
[_ctx flushBuffer];
#elif defined (NL_OS_UNIX)

View file

@ -343,9 +343,14 @@ bool CDriverGL::init (uintptr_t windowIcon, emptyProc exitFunc)
retrieveATIDriverVersion();
#elif defined(NL_OS_MAC)
// nothing to do
nlunreferenced(windowIcon);
// autorelease pool for memory management
_autoreleasePool = [[NSAutoreleasePool alloc] init];
// init the application object
[NSApplication sharedApplication];
#elif defined (NL_OS_UNIX)
nlunreferenced(windowIcon);
@ -486,6 +491,7 @@ bool CDriverGL::unInit()
#elif defined(NL_OS_MAC)
// nothing to do
[_autoreleasePool release];
#elif defined (NL_OS_UNIX)
@ -1466,6 +1472,12 @@ bool CDriverGL::createWindow(const GfxMode &mode)
#elif defined(NL_OS_MAC)
// create the menu in the top screen bar
setupApplicationMenu();
// finish the application launching
[NSApp finishLaunching];
// describe how the window should look like and behave
unsigned int styleMask = NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask;
@ -1642,6 +1654,7 @@ bool CDriverGL::destroyWindow()
}
#elif defined(NL_OS_MAC)
#elif defined(NL_OS_UNIX)
if (_DestroyWindow && _ctx) // FIXME: _DestroyWindow may need to be removed here as well
@ -1664,6 +1677,8 @@ bool CDriverGL::destroyWindow()
[[containerView() window] release];
[containerView() release];
[_glView release];
[_autoreleasePool release];
}
_ctx = nil;

View file

@ -451,7 +451,6 @@ void CInstanceGroup::serial (NLMISC::IStream& f)
_PointLightArray.clear();
}
if (version >= 2)
f.serial(_GlobalPos);

View file

@ -422,7 +422,7 @@ namespace NLGUI
{
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()));
if (!isTable()) throw ELuaNotATable(NLMISC::toString("Trying to set a value '%" NL_I64 "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);

View file

@ -72,9 +72,6 @@ INelContext::~INelContext()
CInstanceCounterLocalManager::releaseInstance();
// uninit some systems stuff
CSystemUtils::uninit();
_NelContext = NULL;
*(_getInstance()) = NULL;
}
@ -94,9 +91,6 @@ void INelContext::contextReady()
// set numeric locale to C to avoid the use of decimal separators different of a dot
char *locale = setlocale(LC_NUMERIC, "C");
// init some systems stuff
CSystemUtils::init();
// register any pending thinks
// register local instance counter in the global instance counter manager

View file

@ -1082,7 +1082,7 @@ NLMISC_CATEGORISED_COMMAND(nel,displayMeasures, "display hierarchical timer", "[
}
sint depth = 0;
bool hasDepth = (sscanf(args[0].c_str(), "%d", &depth) == 1 || (args.size() > 1 && sscanf(args[1].c_str(), "%d", &depth) == 1));
bool hasDepth = (fromString(args[0], depth) || (args.size() > 1 && fromString(args[1], depth)));
CASE_DISPLAYMEASURES(NoSort, -3)
CASE_DISPLAYMEASURES(TotalTime, -2)

View file

@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "zone_utility.h"
//
//
#include "nel/misc/types_nl.h"
#include "nel/misc/path.h"
#include "nel/misc/file.h"
@ -54,7 +54,7 @@ struct CPatchVertexInfo
uint patchIndex,
uint patchVertex,
const CVector &pos
)
)
: ZoneIndex(zoneIndex),
PatchIndex(patchIndex),
PatchVertex(patchVertex),
@ -95,7 +95,7 @@ static CZone *LoadZone(uint16 xPos, uint16 yPos, std::string zoneExt)
{
std::string zoneName;
::getZoneNameByCoord(xPos, yPos, zoneName);
std::auto_ptr<CZone> zone(new CZone);
std::auto_ptr<CZone> zone(new CZone);
std::string lookedUpZoneName = CPath::lookup(zoneName + zoneExt, false, false, false);
if (lookedUpZoneName.empty()) return NULL;
CIFile iF;
@ -128,7 +128,7 @@ static void GetCandidateVertices(const CVector &pos,
float weldThreshold
)
{
dest.clear();
dest.clear();
CVector half(weldThreshold, weldThreshold, weldThreshold);
qg.select(pos - half, pos + half);
for (TPVQuadGrid::CIterator it = qg.begin(); it != qg.end(); ++it)
@ -146,8 +146,8 @@ static void GetCandidateVertices(const CVector &pos,
//===========================================================================================================================
/** Search a vertex of a patch that can be welded with the given vertex
* return -1 if none
*/
static sint GetWeldableVertex(const CBezierPatch &bp, const CVector &pos, float weldThreshold)
*/
static sint GetWeldableVertex(const CBezierPatch &bp, const CVector &pos, float weldThreshold)
{
for (uint k = 0; k < 4; ++k)
{
@ -166,7 +166,7 @@ static sint GetWeldableVertex(const CBezierPatch &bp, const CVector &pos, float
static uint CheckZone(std::string middleZoneFile, float weldThreshold, float middleEdgeWeldThreshold)
{
uint numErrors = 0;
uint k, l, m, n, p, q; // some loop counters
uint k, l, m, n, p, q; // some loop counters
// This avoid reporting errors twice (for readability)
std::set<CPatchIdentPair> errorPairs;
@ -176,7 +176,7 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
std::auto_ptr<CZone> zones[9];
std::string zoneNames[9];
CZoneInfo zoneInfos[9];
CZoneInfo zoneInfos[9];
uint16 xPos, yPos;
const sint16 posOffs[][2] = { {0, 0}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1} };
@ -201,16 +201,16 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
nlinfo("Zones loading failed : %d", e.what());
return 0;
}
///////////////////////////////
// retrieve datas from zones //
///////////////////////////////
for (k = 0; k < 9; ++k)
{
::getZoneNameByCoord(xPos + posOffs[k][0], yPos + posOffs[k][1], zoneNames[k]);
::getZoneNameByCoord(xPos + posOffs[k][0], yPos + posOffs[k][1], zoneNames[k]);
if (zones[k].get() != NULL) zones[k]->retrieve(zoneInfos[k]);
}
}
// fill the quad grid
CAABBox zoneBBox = zones[0]->getZoneBB().getAABBox();
@ -222,7 +222,7 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
// insert vertices in quadgrid
for (k = 0; k < 9; ++k)
{
{
for (l = 0; l < zoneInfos[k].Patchs.size(); ++l)
{
CPatchInfo &patch = zoneInfos[k].Patchs[l];
@ -236,7 +236,7 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
CVector half(weldThreshold, weldThreshold, weldThreshold);
// yes, insert it in the tree
qg.insert(pos - half, pos + half, CPatchVertexInfo(k, l, m, pos));
}
}
}
}
}
@ -246,11 +246,11 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
/////////////////////////////////////////////////
for (l = 0; l < zoneInfos[0].Patchs.size(); ++l)
{
{
CPatchInfo &patch = zoneInfos[0].Patchs[l];
// deals with each border
for (m = 0; m < 4; ++m)
{
{
// if this border is said to be bound, no need to test..
if (patch.BindEdges[m].NPatchs == 0)
{
@ -271,10 +271,10 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
::GetCandidateVertices(patch.Patch.Vertices[vIndex[q]], qg, verts[q], l, 0, weldThreshold);
}
///////////////////////////
// 1 - 1 connectivity ? //
///////////////////////////
///////////////////////////
// If there is a patch that is present in the 2 lists, then this is a 1-1 error
for (n = 0; n < verts[0].size() && !errorFound; ++n)
{
@ -288,9 +288,9 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
CPatchIdentPair errPair = std::make_pair(pi1, pi2);
//
if (std::find(errorPairs.begin(), errorPairs.end(), errPair) == errorPairs.end()) // error already displayed ?
{
{
nlinfo("**** Patch %d of zone %s has 1 - 1 connectivity error, try binding it with patch %d of zone %s",
l + 1, middleZoneName.c_str(), verts[0][n]->PatchIndex + 1, zoneNames[verts[0][n]->ZoneIndex].c_str());
l + 1, middleZoneName.c_str(), verts[0][n]->PatchIndex + 1, zoneNames[verts[0][n]->ZoneIndex].c_str());
errorPairs.insert(std::make_pair(pi2, pi1));
++numErrors;
}
@ -303,10 +303,10 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
//////////////////////////
// 1 - 2 connectivity ? //
//////////////////////////
// get the position at the middle of that border
CVector middlePos = patch.Patch.eval( 0.5f * (indexToST[vIndex[0]][0] + indexToST[vIndex[1]][0]),
0.5f * (indexToST[vIndex[0]][1] + indexToST[vIndex[1]][1]) );
0.5f * (indexToST[vIndex[0]][1] + indexToST[vIndex[1]][1]) );
// for each vertex of this border
for (q = 0; q < 2 && !errorFound; ++q)
@ -330,24 +330,24 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
CPatchIdentPair errPair = std::make_pair(pi1, pi2);
//
if (std::find(errorPairs.begin(), errorPairs.end(), errPair) == errorPairs.end()) // error already displayed ?
{
{
nlinfo("**** Patch %d of zone %s has 1 - 2 connectivity error, try binding it with patch %d of zone %s",
l + 1, middleZoneName.c_str(), pv.PatchIndex + 1, zoneNames[pv.ZoneIndex].c_str());
l + 1, middleZoneName.c_str(), pv.PatchIndex + 1, zoneNames[pv.ZoneIndex].c_str());
errorPairs.insert(std::make_pair(pi2, pi1));
++numErrors;
++numErrors;
}
errorFound = true;
break;
}
}
}
}
if (errorFound) continue;
if (errorFound) continue;
//////////////////////////
// 1 - 4 connectivity ? //
//////////////////////////
// compute points along the border.
CVector borderPos[5];
float lambda = 0.f;
@ -356,12 +356,12 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
borderPos[n] = patch.Patch.eval((1.f - lambda) * indexToST[vIndex[0]][0] + lambda * indexToST[vIndex[1]][0],
(1.f - lambda) * indexToST[vIndex[0]][1] + lambda * indexToST[vIndex[1]][1]);
lambda += 0.25f;
}
}
// Try to find a patch that shares 2 consecutives vertices
for (k = 0; k < 4 && !errorFound; ++k)
{
::GetCandidateVertices(borderPos[k], qg, verts[0], l, 0, middleEdgeWeldThreshold);
::GetCandidateVertices(borderPos[k], qg, verts[0], l, 0, middleEdgeWeldThreshold);
for (p = 0; p < verts[0].size() && !errorFound; ++p)
{
const CPatchVertexInfo &pv = *(verts[0][p]);
@ -382,16 +382,16 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
CPatchIdentPair errPair = std::make_pair(pi1, pi2);
//
if (std::find(errorPairs.begin(), errorPairs.end(), errPair) == errorPairs.end()) // error already displayed ?
{
{
nlinfo("**** Patch %d of zone %s has 1 - 4 connectivity error, try binding it with patch %d of zone %s",
l + 1, middleZoneName.c_str(), pv.PatchIndex + 1, zoneNames[pv.ZoneIndex].c_str());
l + 1, middleZoneName.c_str(), pv.PatchIndex + 1, zoneNames[pv.ZoneIndex].c_str());
++numErrors;
errorPairs.insert(std::make_pair(pi2, pi1));
}
errorFound = true;
}
}
}
}
}
}
}
@ -406,26 +406,26 @@ static uint CheckZone(std::string middleZoneFile, float weldThreshold, float mid
//=========================================================================================================================
int main(int argc, char* argv[])
{
{
NLMISC::createDebug();
InfoLog->addNegativeFilter("adding the path");
if (argc < 4)
{
std::string appName = CFile::getFilename(std::string(argv[0]));
nlinfo("usage : %s <zonesDirectory><weldTheshold><middleEdgeWeldTheshold>\n", appName.empty() ? "zone_check_bind" : appName.c_str());
nlinfo("usage : %s <zonesDirectory><weldTheshold><middleEdgeWeldTheshold>\n", appName.empty() ? "zone_check_bind" : appName.c_str());
return -1;
}
float weldThreshold, middleEdgeWeldThreshold;
if (::sscanf(argv[2], "%f", &weldThreshold) != 1)
if (!fromString(argv[2], weldThreshold))
{
nlinfo("invalid weldThreshold");
return -1;
}
if (::sscanf(argv[3], "%f", &middleEdgeWeldThreshold) != 1)
if (!fromString(argv[3], middleEdgeWeldThreshold))
{
nlinfo("invalid middleEdgeWeldThreshold");
return -1;
@ -442,10 +442,10 @@ int main(int argc, char* argv[])
// Filter addSearchPath
CPath::addSearchPath(zonePaths);
// Contains all the zone in the directory
std::vector<std::string> zoneNames;
CPath::getPathContent(zonePaths, true, false, true, zoneNames);
uint numErrors = 0;
@ -461,4 +461,4 @@ int main(int argc, char* argv[])
nlinfo("%d errors were found", numErrors);
}

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>

36
code/ryzom/client/macosx/upgd_nl.sh Normal file → Executable file
View file

@ -12,33 +12,21 @@ MACOSPATH=$(dirname "$RYZOM_CLIENT")
SIGNPATH=$CONTENTSPATH/_CodeSignature
# all files of original Bundle are in the same directory
# we have to copy them to the right location
# we have to uncompress them to the right location
# client_default.cfg and ryzom.icns are already in the right location
# PkgInfo usually doesn't change so don't copy it
# uncompress Ryzom
if [ -e "$ROOTPATH/Ryzom.zip" ]
then
unzip -o "$ROOTPATH/Ryzom.zip" -d "$CONTENTSPATH/../.."
fi
# Info.plist contains updated version
cp -p "$ROOTPATH/Info.plist" "$CONTENTSPATH"
cp -p "$ROOTPATH/CodeResources" "$SIGNPATH"
# executable flag for all executables
chmod +x "$ROOTPATH/Ryzom"
chmod +x "$ROOTPATH/CrashReport"
chmod +x "$ROOTPATH/RyzomClientPatcher"
chmod +x "$ROOTPATH/RyzomConfiguration"
# remove previous executables
rm -f "$MACOSPATH/Ryzom"
rm -f "$MACOSPATH/CrashReport"
rm -f "$MACOSPATH/RyzomClientPatcher"
rm -f "$MACOSPATH/RyzomConfiguration"
# copy all binaries in MacOS directory
cp -p "$ROOTPATH/Ryzom" "$MACOSPATH"
cp -p "$ROOTPATH/CrashReport" "$MACOSPATH"
cp -p "$ROOTPATH/RyzomClientPatcher" "$MACOSPATH"
cp -p "$ROOTPATH/RyzomConfiguration" "$MACOSPATH"
# only uncompress Ryzom Installer if found in parent directory
if [ -e "$ROOTPATH/RyzomInstaller.zip" ] && [ -d "$CONTENTSPATH/../../../Ryzom Installer.app" ]
then
rm -rf "$CONTENTSPATH/../../../Ryzom Installer.app"
unzip -o "$ROOTPATH/RyzomInstaller.zip" -d "$CONTENTSPATH/../../.."
fi
exit 0

View file

@ -65,7 +65,7 @@ IF(WITH_RYZOM_CLIENT)
SET(MACOSX_BUNDLE_GUI_IDENTIFIER "com.winchgate.Ryzom")
SET(MACOSX_BUNDLE_LONG_VERSION_STRING ${RYZOM_VERSION})
SET(MACOSX_BUNDLE_BUNDLE_NAME "Ryzom")
SET(MACOSX_BUNDLE_SHORT_VERSION_STRING ${RYZOM_VERSION})
SET(MACOSX_BUNDLE_SHORT_VERSION_STRING ${RYZOM_VERSION_SHORT})
SET(MACOSX_BUNDLE_BUNDLE_VERSION "1.0")
SET(MACOSX_BUNDLE_COPYRIGHT ${COPYRIGHT})
SET(RYZOM_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${MACOSX_BUNDLE_BUNDLE_NAME}.app)
@ -91,6 +91,12 @@ IF(WITH_RYZOM_CLIENT)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp ARGS -RpX ${RYZOM_DATA_DIR} ${RYZOM_RESOURCES_DIR})
ENDIF()
IF(WITH_RYZOM_SANDBOX)
SET(ENTITLEMENTS --entitlements ${MAC_RESOURCES_DIR}/ryzom.entitlements)
ELSE()
SET(ENTITLEMENTS)
ENDIF()
IF(TARGET crash_report)
ADD_DEPENDENCIES(ryzom_client crash_report)
@ -98,7 +104,7 @@ IF(WITH_RYZOM_CLIENT)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/crash_report ${RYZOM_CONTENTS_DIR}/MacOS/CrashReport)
IF(CODESIGN_ALLOCATE AND APPLE_CERTIFICATE)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/CrashReport" COMMENT "Signing CrashReport executable...")
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign ${ENTITLEMENTS} -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/CrashReport" COMMENT "Signing CrashReport executable...")
ENDIF()
ENDIF()
@ -109,7 +115,7 @@ IF(WITH_RYZOM_CLIENT)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ryzom_client_patcher ${RYZOM_CONTENTS_DIR}/MacOS/RyzomClientPatcher)
IF(CODESIGN_ALLOCATE AND APPLE_CERTIFICATE)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/RyzomClientPatcher" COMMENT "Signing RyzomClientPatcher executable...")
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign ${ENTITLEMENTS} -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/RyzomClientPatcher" COMMENT "Signing RyzomClientPatcher executable...")
ENDIF()
ENDIF()
@ -120,7 +126,7 @@ IF(WITH_RYZOM_CLIENT)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND cp -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ryzom_configuration_qt ${RYZOM_CONTENTS_DIR}/MacOS/RyzomConfiguration)
IF(CODESIGN_ALLOCATE AND APPLE_CERTIFICATE)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/RyzomConfiguration" COMMENT "Signing RyzomConfiguration executable...")
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign ${ENTITLEMENTS} -fs "${APPLE_CERTIFICATE}" "${RYZOM_CONTENTS_DIR}/MacOS/RyzomConfiguration" COMMENT "Signing RyzomConfiguration executable...")
ENDIF()
ENDIF()
@ -134,7 +140,7 @@ IF(WITH_RYZOM_CLIENT)
ENDIF()
IF(CODESIGN_ALLOCATE AND APPLE_CERTIFICATE)
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign -fs "${APPLE_CERTIFICATE}" "${RYZOM_OUTPUT_DIR}" COMMENT "Signing Ryzom bundle...")
ADD_CUSTOM_COMMAND(TARGET ryzom_client POST_BUILD COMMAND CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} codesign ${ENTITLEMENTS} -fs "${APPLE_CERTIFICATE}" "${RYZOM_OUTPUT_DIR}" COMMENT "Signing Ryzom bundle...")
ENDIF()
ENDIF()

View file

@ -1148,6 +1148,7 @@ void prelogInit()
Driver->setSwapVBLInterval(0);
// initialize system utils class
CSystemUtils::init();
CSystemUtils::setWindow(Driver->getDisplay());
CLoginProgressPostThread::getInstance().step(CLoginStep(LoginStep_VideoModeSetupHighColor, "login_step_video_mode_setup_high_color"));

View file

@ -1619,6 +1619,7 @@ void initBloomConfigUI()
bool supportBloom = Driver->supportBloomEffect();
CInterfaceManager *pIM = CInterfaceManager::getInstance();
CCtrlBaseButton* button = dynamic_cast<CCtrlBaseButton*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:game_config:content:fx:bloom_gr:bloom:c"));
if(button)
{
@ -1631,6 +1632,12 @@ void initBloomConfigUI()
button->setFrozen(!supportBloom);
}
button = dynamic_cast<CCtrlBaseButton*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:game_config:content:fx:fxaa:c"));
if (button)
{
button->setFrozen(!supportBloom);
}
CCtrlScroll * scroll = dynamic_cast<CCtrlScroll*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:game_config:content:fx:bloom_gr:density_bloom:c"));
if(scroll)
{

View file

@ -933,7 +933,7 @@ void CPatchManager::createBatchFile(CProductDescriptionForClient &descFile, bool
if (wantRyzomRestart)
{
// wait until client not in memory anymore
contentSuffix += toString("until ! pgrep %s > /dev/null; do sleep 1; done\n", CFile::getFilename(RyzomFilename).c_str());
contentSuffix += toString("until ! pgrep -x \"%s\" > /dev/null; do sleep 1; done\n", CFile::getFilename(RyzomFilename).c_str());
}
// launch upgrade script if present (it'll execute additional steps like moving or deleting files)
@ -948,7 +948,12 @@ void CPatchManager::createBatchFile(CProductDescriptionForClient &descFile, bool
contentSuffix += "cd \"$STARTUPPATH\"\n\n";
// launch new client
contentSuffix += toString("\"$RYZOM_CLIENT\" %s $LOGIN $PASSWORD $SHARDID\n", additionalParams.c_str());
#ifdef NL_OS_MAC
// use exec command under OS X
contentSuffix += toString("exec \"$RYZOM_CLIENT\" %s $LOGIN $PASSWORD $SHARDID\n", additionalParams.c_str());
#else
contentSuffix += toString("\"$RYZOM_CLIENT\" %s $LOGIN $PASSWORD $SHARDID &\n", additionalParams.c_str());
#endif
}
#endif

View file

@ -2756,7 +2756,16 @@ void CNetworkConnection::sendSystemDisconnection()
uint32 length = message.length();
if (_Connection.connected())
_Connection.send (message.buffer(), length);
{
try
{
_Connection.send(message.buffer(), length);
}
catch (const ESocket &e)
{
nlwarning("Socket exception: %s", e.what());
}
}
//sendUDP (&(_Connection), message.buffer(), length);
statsSend(length);

View file

@ -556,6 +556,7 @@ void release()
// restore screensaver state
CSystemUtils::enableScreensaver(LastScreenSaverEnabled);
CSystemUtils::uninit();
// release PACS primitives
deletePrimitiveBlocks();
@ -663,9 +664,6 @@ void release()
NLGUI::CDBManager::release();
CWidgetManager::release();
#if FINAL_VERSION
// openURL ("http://ryzom.com/exit/");
#endif

View file

@ -295,7 +295,7 @@ bool packLZMA(const std::string &srcFileName, const std::string &lzmaFileName)
auto_ptr<uint8> outProps = auto_ptr<uint8>(new uint8[outPropsSize]);
// compress with best compression and other default settings
sint res = LzmaCompress(outBuffer.get(), &outSize, inBuffer.get(), inSize, outProps.get(), &outPropsSize, 9, 1 << 24, 3, 0, 2, 32, 1);
sint res = LzmaCompress(outBuffer.get(), &outSize, inBuffer.get(), inSize, outProps.get(), &outPropsSize, 9, 1 << 27, -1, -1, -1, -1, 1);
switch(res)
{

7
code/ryzom/client/unix/upgd_nl.sh Normal file → Executable file
View file

@ -13,4 +13,11 @@ chmod +x "$ROOTPATH/ryzom_client_patcher"
chmod +x "$ROOTPATH/ryzom_configuration_qt"
chmod +x "$ROOTPATH/ryzom_installer_qt"
# copy Ryzom Installer if present in parent directory
if [ -e "$ROOTPATH/../ryzom_installer_qt" ]
then
rm -f "$ROOTPATH/../ryzom_installer_qt"
cp -a "$ROOTPATH/ryzom_installer_qt" "$ROOTPATH/.."
fi
exit 0

View file

@ -30,6 +30,10 @@ if exist %ROOTPATH%\msvcr100_win64.dll (
if exist %ROOTPATH%\..\ryzom_installer_qt_r.exe (
if exist %ROOTPATH%\..\ryzom_installer_qt_r.exe del %ROOTPATH%\..\ryzom_installer_qt_r.exe
copy /Y %ROOTPATH%\ryzom_installer_qt_r.exe %ROOTPATH%\..
if exist %ROOTPATH%\..\msvcp100.dll del %ROOTPATH%\..\msvcp100.dll
copy /Y %ROOTPATH%\msvcp100.dll %ROOTPATH%\..
if exist %ROOTPATH%\..\msvcr100.dll del %ROOTPATH%\..\msvcr100.dll
copy /Y %ROOTPATH%\msvcr100.dll %ROOTPATH%\..
)
:end

View file

@ -894,7 +894,7 @@ void CObjectInteger::inPlaceCopy(const CObjectInteger &src)
}
std::string CObjectInteger::doToString() const { return NLMISC::toString("%" NL_I64 "d", _Value); }
std::string CObjectInteger::doToString() const { return NLMISC::toString(_Value); }
void CObjectInteger::doSerialize(std::string& out, CSerializeContext& /* context */) const
{

View file

@ -501,7 +501,7 @@ retry_pending_command:
//
// for (uint i=0; i<graphDatas.getDatas().size(); ++i)
// {
// nldebug(" At %10"NL_I64"u %f",
// nldebug(" At %10" NL_I64 "u %f",
// graphDatas.getDatas()[i].getSampleTick(),
// graphDatas.getDatas()[i].getValue());
// }
@ -869,7 +869,7 @@ retry_pending_command:
{
// output this sample
uint32 date = startTime + uint32((buffer.Datas[i].SampleTick - startMilli)/1000);
ret.push_back(toString("%u : %"NL_I64"u : %f %f %f", date, buffer.Datas[i].SampleTick, minSample, meanSample/nbMergedSample, maxSample));
ret.push_back(toString("%u : %" NL_I64 "u : %f %f %f", date, buffer.Datas[i].SampleTick, minSample, meanSample/nbMergedSample, maxSample));
lastSampleTick = buffer.Datas[i].SampleTick;
minSample = DBL_MAX;

View file

@ -1107,7 +1107,7 @@ void CBotNpc::setVisualProperties(std::string input) // AJM
// load val from tail
// accept 64bit hex value
uint64 val;
sscanf( tail.c_str(), "%"NL_I64"x", &val );
sscanf( tail.c_str(), "%" NL_I64 "x", &val );
// can't set into mirror row until bot is spawned, so save away
if( NLMISC::nlstricmp( keyword,"VPA")==0 ) // VisualPropertyA

View file

@ -148,7 +148,7 @@ void CAISActions::execute(uint64 action,const std::vector <CAIActions::CArg> &ar
uint64 id=action;
for (uint j=0;j<8 && ((char*)&id)[j]!=0;++j)
txt+=((char*)&id)[j];
nlwarning("Failed to execute action: %16"NL_I64"x: %s",action,txt.c_str());
nlwarning("Failed to execute action: %16" NL_I64 "x: %s",action,txt.c_str());
}

View file

@ -3122,8 +3122,8 @@ static void setRyzomDebugDate(CRyzomDate &rd)
NLMISC_COMMAND(setDebugHour, "set the current debug hour", "<hour>")
{
if (args.size() != 1) return false;
int hour;
if (sscanf(args[0].c_str(), "%d", &hour) != 1) return false;
sint hour;
if (!fromString(args[0], hour)) return false;
CRyzomDate rd;
getRyzomDebugDate(rd);
rd.Time = fmodf(rd.Time, 1.f) + (float) hour;
@ -3134,8 +3134,8 @@ NLMISC_COMMAND(setDebugHour, "set the current debug hour", "<hour>")
NLMISC_COMMAND(setDebugDayOfYear, "set the current debug day of year (first day has index 1)", "<day>")
{
if (args.size() != 1) return false;
int day;
if (sscanf(args[0].c_str(), "%d", &day) != 1) return false;
sint day;
if (!fromString(args[0], day)) return false;
CRyzomDate rd;
getRyzomDebugDate(rd);
rd.Day = day - 1; // for the user, days start at '1'

View file

@ -1002,7 +1002,7 @@ ENTITY_VARIABLE(Money, "Money")
if (get)
{
value = toString("%"NL_I64"u", c->getMoney());
value = toString(c->getMoney());
}
else
{
@ -1037,7 +1037,7 @@ ENTITY_VARIABLE(Money, "Money")
c->spendMoney(val);
}
nlinfo ("Player %s money is %"NL_I64"u", entity.toString().c_str(),c->getMoney());
nlinfo ("Player %s money is %" NL_I64 "u", entity.toString().c_str(),c->getMoney());
}
}
@ -1054,7 +1054,7 @@ ENTITY_VARIABLE(MoneyGuild, "MoneyGuild")
if (get)
{
value = toString("%"NL_I64"u", guild->getMoney());
value = toString(guild->getMoney());
}
else
{
@ -1090,7 +1090,7 @@ ENTITY_VARIABLE(MoneyGuild, "MoneyGuild")
guild->spendMoney(val);
}
nlinfo ("Player %s guild money is %"NL_I64"u", entity.toString().c_str(),guild->getMoney());
nlinfo ("Player %s guild money is %" NL_I64 "u", entity.toString().c_str(),guild->getMoney());
}
}
@ -4350,7 +4350,7 @@ ENTITY_VARIABLE(Invisible, "Invisibility of a player")
msgout.serial( ignore );
CUnifiedNetwork::getInstance()->send("IOS", msgout);
nlinfo ("%s has now '%"NL_I64"X' in invisibility", entity.toString().c_str(), e->getWhoSeesMe());
nlinfo ("%s has now '%" NL_I64 "X' in invisibility", entity.toString().c_str(), e->getWhoSeesMe());
}
}

View file

@ -1618,7 +1618,7 @@ nlassert(nodeLeaf->getType() == ICDBStructNode::TEXT);
// {
// if( args.size() == 0 )
// return false;
//
//
// NLMEMORY::StatisticsReport( args[0].c_str(), args.size() > 1 );
// return true;
//}
@ -3864,7 +3864,7 @@ NLMISC_COMMAND(displayDatabaseEntry," display a database entry value","<entity i
try
{
sint64 value = e->_PropertyDatabase.x_getProp(entry);
log.displayNL("For player %s, buffer %s : value %"NL_I64"d", id.toString().c_str(), entry.c_str(), value );
log.displayNL("For player %s, buffer %s : value %" NL_I64 "d", id.toString().c_str(), entry.c_str(), value );
}
catch (const CCDBSynchronised::ECDBNotFound &)
{
@ -3873,7 +3873,7 @@ NLMISC_COMMAND(displayDatabaseEntry," display a database entry value","<entity i
}
else
{
log.displayNL("Unknown entity %s ",id.toString().c_str());
log.displayNL("Unknown entity %s ", id.toString().c_str());
}
return true;
}
@ -3904,7 +3904,7 @@ NLMISC_COMMAND( db, "Display or set the value of a property in the database", "<
try
{
sint64 value = e->_PropertyDatabase.x_getProp( entry );
log.displayNL( "%"NL_I64"d", value );
log.displayNL( "%" NL_I64 "d", value );
res = true;
}
catch (const CCDBSynchronised::ECDBNotFound& )
@ -3916,7 +3916,8 @@ NLMISC_COMMAND( db, "Display or set the value of a property in the database", "<
{
// Set
sint64 value;
sscanf( args[2].c_str(), "%"NL_I64"d", &value );
fromString(args[2], value);
if ( (args.size() > 3) && (args[3]!="0") )
{
res = e->_PropertyDatabase.x_setPropButDontSend( entry, value );
@ -4005,7 +4006,7 @@ NLMISC_COMMAND(displayMoney," display_seed","<entity id(id:type:crea:dyn)>")
CCharacter *e = PlayerManager.getChar(id);
if( e )
{
log.displayNL("displayMoney: %"NL_I64"%u", e->getMoney() );
log.displayNL("displayMoney: %" NL_I64 "%u", e->getMoney() );
}
else
{

View file

@ -1180,7 +1180,7 @@ void cbDeleteChar( CMessage& msgin, const std::string &serviceName, NLNET::TServ
CPlayer* player = PlayerManager.getPlayer( userId );
if ( player == NULL )
{
nlwarning("invalid user %"NL_I64"u %u %hu", longUserId,userId,(uint16)characterIndex);
nlwarning("invalid user %" NL_I64 "u %u %hu", longUserId,userId,(uint16)characterIndex);
return;
}

View file

@ -137,7 +137,7 @@ void CGuild::spendMoney(uint64 money)
{
if ( money > _Money )
{
nlwarning( "spendMoney guild %u : money = %"NL_I64"u, max = %"NL_I64"u", _Id, money, _Money);
nlwarning( "spendMoney guild %u : money = %" NL_I64 "u, max = %" NL_I64 "u", _Id, money, _Money);
return;
}
@ -463,7 +463,7 @@ void CGuild::dumpGuildInfos( NLMISC::CLog & log )
getId()>>20 == IService::getInstance()->getShardId() ? "(Local)" : "(Foreign)",
getName().toUtf8().c_str(), getEId().toString().c_str() );
log.displayNL("\tDescription: '%s'", getDescription().toUtf8().c_str() );
log.displayNL("\tMoney: %"NL_I64"u", getMoney() );
log.displayNL("\tMoney: %" NL_I64 "u", getMoney() );
// log.displayNL("\tVillage: %hu", getVillage() );
log.displayNL("\tCreation date: %u", getCreationDate() );
// log.displayNL("\tXP: %u", getXP() );
@ -471,7 +471,7 @@ void CGuild::dumpGuildInfos( NLMISC::CLog & log )
log.displayNL("\tMax bulk: %d", _Inventory->getMaxBulk() );
// log.displayNL("\tCharge points: %u", getChargesPoints() );
log.displayNL("\tRace: %s", EGSPD::CPeople::toString(getRace()).c_str() );
log.displayNL("\tIcon: 0x%016"NL_I64"x", getIcon() );
log.displayNL("\tIcon: 0x%016" NL_I64 "x", getIcon() );
log.displayNL("\tCiv Allegiance: %s", PVP_CLAN::toString(_DeclaredCiv).c_str());
log.displayNL("\tCult Allegiance: %s", PVP_CLAN::toString(_DeclaredCult).c_str());
@ -1146,7 +1146,7 @@ void CGuild::takeMoney( CCharacter * user, uint64 money, uint16 session )
if ( money > _Money )
{
nlwarning( "takeMoney guild %u user %s : money = %"NL_I64"u, max = %"NL_I64"u",_Id,user->getId().toString().c_str(),money,_Money);
nlwarning( "takeMoney guild %u user %s : money = %" NL_I64 "u, max = %" NL_I64 "u",_Id,user->getId().toString().c_str(),money,_Money);
return;
}
if ( ! _GuildInventoryView->checkMoneySession( session ) )
@ -1183,7 +1183,7 @@ void CGuild::putMoney( CCharacter * user, uint64 money, uint16 session )
if ( money > user->getMoney() )
{
nlwarning( "putMoney guild %u user %s : money = %"NL_I64"u, max = %"NL_I64"u",_Id,user->getId().toString().c_str(),money,_Money);
nlwarning( "putMoney guild %u user %s : money = %" NL_I64 "u, max = %" NL_I64 "u",_Id,user->getId().toString().c_str(),money,_Money);
return;
}

View file

@ -396,7 +396,7 @@ NLMISC_COMMAND( guildDB, "Display or set the value of a property in the guild da
}
// sint64 val = guild->getClientDBProp( args[1] );
sint64 val = guild->_DbGroup.Database.x_getProp(args[1]);
log.displayNL( "property value is '%"NL_I64"d'", val );
log.displayNL( "property value is '%" NL_I64 "d'", val );
}
catch (const CCDBSynchronised::ECDBNotFound &e)
{

View file

@ -1011,7 +1011,7 @@ NLMISC_COMMAND(getMoney, "get money of player", "<uid>")
{
GET_ACTIVE_CHARACTER
string value = toString("%"NL_I64"u", c->getMoney());
string value = toString(c->getMoney());
log.displayNL(value.c_str());

View file

@ -757,7 +757,7 @@ void COutpostManager::saveAll()
}
TTime endTime = NLMISC::CTime::getLocalTime();
nldebug("Saved all outposts in %"NL_I64"d ms.", (endTime-startTime));
nldebug("Saved all outposts in %" NL_I64 "d ms.", (endTime-startTime));
}
//----------------------------------------------------------------------------

View file

@ -537,14 +537,14 @@ void CCDBSynchronised::pushDelta( CBitMemStream& s, CCDBStructNodeLeaf *node, ui
s.serialAndLog2( value, 32 );
bitsize += 32;
if ( VerboseDatabase )
nldebug( "CDB: Pushing value %"NL_I64"d (TEXT-32) for index %d prop %s", (sint64)value, index, node->buildTextId().toString().c_str() );
nldebug( "CDB: Pushing value %" NL_I64 "d (TEXT-32) for index %d prop %s", (sint64)value, index, node->buildTextId().toString().c_str() );
}
else
{
s.serialAndLog2( value, (uint)node->type() );
bitsize += (uint32)node->type();
if ( VerboseDatabase )
nldebug( "CDB: Pushing value %"NL_I64"d (%u bits) for index %d prop %s", (sint64)value, (uint32)node->type(), index, node->buildTextId().toString().c_str() );
nldebug( "CDB: Pushing value %" NL_I64 "d (%u bits) for index %d prop %s", (sint64)value, (uint32)node->type(), index, node->buildTextId().toString().c_str() );
}
}
else
@ -571,14 +571,14 @@ void CCDBSynchronised::pushDeltaPermanent( NLMISC::CBitMemStream& s, CCDBStructN
s.serialAndLog2( value, 32 );
bitsize += 32;
if ( VerboseDatabase )
nldebug( "CDB: Pushing permanent value %"NL_I64"d (TEXT-32) for index %d prop %s", (sint64)value, index, node->buildTextId().toString().c_str() );
nldebug( "CDB: Pushing permanent value %" NL_I64 "d (TEXT-32) for index %d prop %s", (sint64)value, index, node->buildTextId().toString().c_str() );
}
else
{
s.serialAndLog2( value, (uint)node->type() );
bitsize += (uint32)node->type();
if ( VerboseDatabase )
nldebug( "CDB: Pushing permanent value %"NL_I64"d (%u bits) for index %d prop %s", (sint64)value, (uint32)node->type(), index, node->buildTextId().toString().c_str() );
nldebug( "CDB: Pushing permanent value %" NL_I64 "d (%u bits) for index %d prop %s", (sint64)value, (uint32)node->type(), index, node->buildTextId().toString().c_str() );
}
}
else
@ -806,7 +806,7 @@ bool CCDBSynchronised::x_setProp( ICDBStructNode * node, sint64 value, bool forc
{
std::string const* pname = node->getName();
std::string name = pname?*pname:"'Unknown'";
nlinfo( "CDB: Set new value %"NL_I64"d for prop %s in atom %s", value, name.c_str(), groupNodeFinder->getParent()?groupNodeFinder->getName()->c_str():"(root)" );
nlinfo( "CDB: Set new value %" NL_I64 "d for prop %s in atom %s", value, name.c_str(), groupNodeFinder->getParent()?groupNodeFinder->getName()->c_str():"(root)" );
}
}
#endif
@ -825,7 +825,7 @@ bool CCDBSynchronised::x_setProp( ICDBStructNode * node, sint64 value, bool forc
{
std::string const* pname = node->getName();
std::string name = pname?*pname:"'Unknown'";
nlinfo( "CDB: Set new value %"NL_I64"d for prop %s", value, name.c_str() );
nlinfo( "CDB: Set new value %" NL_I64 "d for prop %s", value, name.c_str() );
}
#endif
}
@ -874,7 +874,7 @@ bool CCDBSynchronised::x_setPropButDontSend( const std::string& name, sint64 val
#ifdef TRACE_SET_VALUE
if ( VerboseDatabase )
nlinfo("Set value %"NL_I64"d for Prop %s, no change flag", value, name.c_str() );
nlinfo("Set value %" NL_I64 "d for Prop %s, no change flag", value, name.c_str() );
#endif
// Set the property.

View file

@ -5271,7 +5271,7 @@ void CCharacter::teleportCharacter( sint32 x, sint32 y, sint32 z, bool teleportW
uint64 NOT_TELEPORTING_FLAG= (((uint64)0x12345678)<<32)| (uint64)0x87654321;
if ( _WhoSeesMeBeforeTP != NOT_TELEPORTING_FLAG )
{
nlwarning("INVISIBILITY (teleportCharacter) Player %s already being Tp as _WhoSeesMeBeforeTp is = %"NL_I64"u and WhoSeesMe = %"NL_I64"u", _Id.toString().c_str(), _WhoSeesMeBeforeTP, whoSeesMe.getValue() );
nlwarning("INVISIBILITY (teleportCharacter) Player %s already being Tp as _WhoSeesMeBeforeTp is = %" NL_I64 "u and WhoSeesMe = %" NL_I64 "u", _Id.toString().c_str(), _WhoSeesMeBeforeTP, whoSeesMe.getValue() );
nlwarning("INVISIBILITY (teleportCharacter) Current Coordinates :(%d, %d, %d) TP coordinates : (%d, %d, %d)", x,y,z);
}
else
@ -19371,7 +19371,7 @@ bool CCharacter::setGuildId( uint32 guildId )
_GuildId = guildId;
#ifdef HAVE_MONGO
CMongo::update("users", toString("{'game.cid':%"NL_I64"u}", _Id.getShortId()), toString("{$set:{'game.guildId':%d}}", guildId));
CMongo::update("users", toString("{'game.cid':%" NL_I64 "u}", _Id.getShortId()), toString("{$set:{'game.guildId':%d}}", guildId));
#endif
return true;
@ -20375,7 +20375,7 @@ void CCharacter::setIntangibleEndDate(NLMISC::TGameCycle date)
void CCharacter::setWhoSeesMeBeforeTP(const uint64 &whoSeesMe)
{
uint64 NOT_TELEPORTING_FLAG= (((uint64)0x12345678)<<32)| (uint64)0x87654321;
BOMB_IF(_WhoSeesMeBeforeTP != NOT_TELEPORTING_FLAG && whoSeesMe != NOT_TELEPORTING_FLAG , NLMISC::toString("Failing to set _WhoSeesMeBeforeTP old value=%"NL_I64"x new value =%"NL_I64"x", _WhoSeesMeBeforeTP, whoSeesMe), return );
BOMB_IF(_WhoSeesMeBeforeTP != NOT_TELEPORTING_FLAG && whoSeesMe != NOT_TELEPORTING_FLAG , NLMISC::toString("Failing to set _WhoSeesMeBeforeTP old value=%" NL_I64 "x new value =%" NL_I64 "x", _WhoSeesMeBeforeTP, whoSeesMe), return );
_WhoSeesMeBeforeTP= whoSeesMe;
}

View file

@ -1104,7 +1104,7 @@ NLMISC_COMMAND(follow, "follow an entity", "entityId")
uint creatorId;
uint dynamicId;
if (sscanf(args[0].c_str(), "(%"NL_I64"x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
if (sscanf(args[0].c_str(), "(%" NL_I64 "x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
return false;
sid.setShortId( id );

View file

@ -981,7 +981,7 @@ void fillSHEET( TOutBox& outbox, TPropIndex )
TDataSetIndex compressedRow = TVPNodeServer::PrioContext.EntityIndex.getCompressedIndex();
uint64 value = (uint64)sheetValue | (((uint64)compressedRow) << 32);
ap->setValue64( value );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu SHEET at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_SHEET, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu SHEET at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_SHEET, outbox.getPosInBit(), ap->getValue() );
// Add row into the action
ap->packFast( outbox );
@ -1026,7 +1026,7 @@ void fillBEHAVIOUR( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_BEHAVIOUR );
DECLARE_AP(BEHAVIOUR);
caseFillAction( BEHAVIOUR )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu BEHAVIOUR at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_BEHAVIOUR, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu BEHAVIOUR at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_BEHAVIOUR, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1045,7 +1045,7 @@ void fillNAME_STRING_ID( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_NAME_STRING_ID );
DECLARE_AP(NAME_STRING_ID);
caseFillAction( NAME_STRING_ID )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu NAME_STRING_ID at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_NAME_STRING_ID, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu NAME_STRING_ID at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_NAME_STRING_ID, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1166,7 +1166,7 @@ void fillBARS( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_BARS );
DECLARE_AP(BARS);
caseFillAction( BARS )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu BARS at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_BARS, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu BARS at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_BARS, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1189,7 +1189,7 @@ void fillVisualPropertyABC( TOutBox& outbox, TPropIndex propIndex )
DECLARE_AP_INDEX(propIndex);
CMirrorPropValueRO<TYPE_VPA> prop( TheDataset, TVPNodeServer::PrioContext.EntityIndex, propIndex-PROPERTY_VPA+DSPropertyVPA ); \
ap->setValue64( prop() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu %s at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, propIndex, CLFECOMMON::getPropText( propIndex ), outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu %s at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, propIndex, CLFECOMMON::getPropText( propIndex ), outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1208,7 +1208,7 @@ void fillCONTEXTUAL( TOutBox& outbox, TPropIndex propIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_CONTEXTUAL );
DECLARE_AP(CONTEXTUAL);
caseFillAction( CONTEXTUAL )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu CONTEXTUAL at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_CONTEXTUAL, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu CONTEXTUAL at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_CONTEXTUAL, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1226,7 +1226,7 @@ void fillVISUAL_FX( TOutBox& outbox, TPropIndex propIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_VISUAL_FX );
DECLARE_AP(VISUAL_FX);
caseFillAction( VISUAL_FX )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu VISUAL_FX at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_VISUAL_FX, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu VISUAL_FX at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_VISUAL_FX, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1310,7 +1310,7 @@ void fillGUILD_NAME_ID( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_NAME_ID );
DECLARE_AP(GUILD_NAME_ID);
caseFillAction( GUILD_NAME_ID )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu GUILD_NAME_ID at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_NAME_ID, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu GUILD_NAME_ID at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_NAME_ID, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1328,7 +1328,7 @@ void fillGUILD_SYMBOL( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_SYMBOL );
DECLARE_AP(GUILD_SYMBOL);
caseFillAction( GUILD_SYMBOL )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu GUILD_SYMBOL at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_SYMBOL, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu GUILD_SYMBOL at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_GUILD_SYMBOL, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1347,7 +1347,7 @@ void fillEVENT_FACTION_ID( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_EVENT_FACTION_ID );
DECLARE_AP(EVENT_FACTION_ID);
caseFillAction( EVENT_FACTION_ID )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu EVENT_FACTION_ID at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_EVENT_FACTION_ID, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu EVENT_FACTION_ID at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_EVENT_FACTION_ID, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1366,7 +1366,7 @@ void fillPVP_MODE( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_MODE );
DECLARE_AP(PVP_MODE);
caseFillAction( PVP_MODE )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu PVP_MODE at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_MODE, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu PVP_MODE at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_MODE, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1385,7 +1385,7 @@ void fillPVP_CLAN( TOutBox& outbox, TPropIndex )
//CActionSint64 *ap = (CActionSint64*)CActionFactory::getInstance()->createByPropIndex( TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_CLAN );
DECLARE_AP(PVP_CLAN);
caseFillAction( PVP_CLAN )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu PVP_CLAN at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_CLAN, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu PVP_CLAN at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_PVP_CLAN, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
//CActionFactory::getInstance()->remove( (CAction*&)ap );
@ -1403,7 +1403,7 @@ void fillOWNER_PEOPLE( TOutBox& outbox, TPropIndex )
outbox.serialBitAndLog( payloadBit );
DECLARE_AP(OWNER_PEOPLE);
caseFillAction( OWNER_PEOPLE )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu OWNER_PEOPLE at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_OWNER_PEOPLE, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu OWNER_PEOPLE at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_OWNER_PEOPLE, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
REMOVE_AP();
@ -1420,7 +1420,7 @@ void fillOUTPOST_INFOS( TOutBox& outbox, TPropIndex )
outbox.serialBitAndLog( payloadBit );
DECLARE_AP(OUTPOST_INFOS);
caseFillAction( OUTPOST_INFOS )
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu OUTPOST_INFOS at bitpos %d - value %"NL_I64"u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_OUTPOST_INFOS, outbox.getPosInBit(), ap->getValue() );
LOG_WHAT_IS_SENT( "%u: Filling buffer for C%hu S%hu P%hu OUTPOST_INFOS at bitpos %d - value %" NL_I64 "u", CTickEventHandler::getGameCycle(), TVPNodeServer::PrioContext.ClientId, (uint16)TVPNodeServer::PrioContext.Slot, PROPERTY_OUTPOST_INFOS, outbox.getPosInBit(), ap->getValue() );
ap->packFast( outbox );
CFrontEndService::instance()->history()->store( TVPNodeServer::PrioContext.ClientId, TVPNodeServer::PrioContext.ClientHost->sendNumber(), ap );
REMOVE_AP();

View file

@ -589,7 +589,7 @@ public:
{
if (entry.HasValue)
{
//nldebug( "History for C%hu - slot %hu - prop %hu: %"NL_I64"u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
//nldebug( "History for C%hu - slot %hu - prop %hu: %" NL_I64 "u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
return (currentValue().getIndex() != *((TDataSetIndex*)&(entry.LastSent)));
}
else
@ -621,7 +621,7 @@ public:
if (entry.HasValue)
{
//nldebug( "History for C%hu - slot %hu - prop %hu: %"NL_I64"u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
//nldebug( "History for C%hu - slot %hu - prop %hu: %" NL_I64 "u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
CMirrorPropValueRO<T> currentValue( TheDataset, TVPNodeServer::PrioContext.EntityIndex, dsPropertyIndex );
#ifdef NL_DEBUG
@ -661,7 +661,7 @@ public:
if (entry.HasValue)
{
//nldebug( "History for C%hu - slot %hu - prop %hu: %"NL_I64"u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
//nldebug( "History for C%hu - slot %hu - prop %hu: %" NL_I64 "u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
CMirrorPropValueRO<TEntityIndex> currentValue( TheDataset, TVPNodeServer::PrioContext.EntityIndex, dsPropertyIndex );
return (currentValue().getIndex() != *((TDataSetIndex*)&(entry.LastSent)));
@ -688,7 +688,7 @@ public:
if (entry.HasValue)
{
//nldebug( "History for C%hu - slot %hu - prop %hu: %"NL_I64"u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
//nldebug( "History for C%hu - slot %hu - prop %hu: %" NL_I64 "u", TVPNodeServer::PrioContext.ClientHost->clientId(), (uint16)TVPNodeServer::PrioContext.Slot, propIndex, lastsent_value );
NLMISC::TGameCycle mirrorCycle = TheDataset.getChangeTimestamp( dsPropertyIndex, TVPNodeServer::PrioContext.EntityIndex );
return (mirrorCycle != entry.LastSent);

View file

@ -425,7 +425,7 @@ void CEntity::displayProperties( const TEntityIndex& entityIndex, NLMISC::CLog *
lsSheet = histohasvalue ? toString( "%u", (uint32)lastsent_value ) : "NOT SENT YET";
dispDist(lsSheet,THRESHOLD_SHEET);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_BEHAVIOUR, histohasvalue ).LastSent;
lsBehav = histohasvalue ? toString( "%"NL_I64"u", (uint64)lastsent_value ) : "NOT SENT YET";
lsBehav = histohasvalue ? toString( "%" NL_I64 "u", (uint64)lastsent_value ) : "NOT SENT YET";
dispDist(lsBehav,THRESHOLD_BEHAVIOUR);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_NAME_STRING_ID, histohasvalue ).LastSent;
lsName = histohasvalue ? toString( "%u", (uint32)lastsent_value ) : "NOT SENT YET";
@ -437,13 +437,13 @@ void CEntity::displayProperties( const TEntityIndex& entityIndex, NLMISC::CLog *
lsMode = histohasvalue ? toString( "%hu", (uint32)lastsent_value ) : "NOT SENT YET";
dispDist(lsMode,THRESHOLD_MODE);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_VPA, histohasvalue ).LastSent;
lsVPA = histohasvalue ? toString( "%"NL_I64"u", lastsent_value ) : "NOT SENT YET";
lsVPA = histohasvalue ? toString( "%" NL_I64 "u", lastsent_value ) : "NOT SENT YET";
dispDist(lsVPA,THRESHOLD_VPA);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_VPB, histohasvalue ).LastSent;
lsVPB = histohasvalue ? toString( "%"NL_I64"u", lastsent_value ) : "NOT SENT YET";
lsVPB = histohasvalue ? toString( "%" NL_I64 "u", lastsent_value ) : "NOT SENT YET";
dispDist(lsVPB,THRESHOLD_VPB);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_VPC, histohasvalue ).LastSent;
lsVPC = histohasvalue ? toString( "%"NL_I64"u", lastsent_value ) : "NOT SENT YET";
lsVPC = histohasvalue ? toString( "%" NL_I64 "u", lastsent_value ) : "NOT SENT YET";
dispDist(lsVPC,THRESHOLD_VPC);
lastsent_value = history->getPropertyEntry( optClientId, optSlot, PROPERTY_ENTITY_MOUNTED_ID, histohasvalue ).LastSent;
lsMount = histohasvalue ? toString( "%d", (uint32)lastsent_value ) : "NOT SENT YET";
@ -486,9 +486,9 @@ void CEntity::displayProperties( const TEntityIndex& entityIndex, NLMISC::CLog *
TDataSetIndex target = (TDataSetIndex)PV(PROPERTY_TARGET_ID), mount = (TDataSetIndex)PV(PROPERTY_ENTITY_MOUNTED_ID), rider = (TDataSetIndex)PV(PROPERTY_RIDER_ENTITY_ID);
log->displayNL( "| Target %d \t %s", target, lsTarget.c_str() );
log->displayNL( "| Mode %hu \t %s", (uint8)PV(PROPERTY_MODE), lsMode.c_str() );
log->displayNL( "| VPA %"NL_I64"u \t %s", PV(PROPERTY_VPA), lsVPA.c_str() );
log->displayNL( "| VPB %"NL_I64"u \t %s", PV(PROPERTY_VPB), lsVPB.c_str() );
log->displayNL( "| VPC %"NL_I64"u \t %s", PV(PROPERTY_VPC), lsVPC.c_str() );
log->displayNL( "| VPA %" NL_I64 "u \t %s", PV(PROPERTY_VPA), lsVPA.c_str() );
log->displayNL( "| VPB %" NL_I64 "u \t %s", PV(PROPERTY_VPB), lsVPB.c_str() );
log->displayNL( "| VPC %" NL_I64 "u \t %s", PV(PROPERTY_VPC), lsVPC.c_str() );
log->displayNL( "| Mount %d \t %s", mount, lsMount.c_str() );
log->displayNL( "| Rider %d \t \t %s", rider, lsRider.c_str() );
log->displayNL( "| Contextual %hu \t %s", (uint16)PV(PROPERTY_CONTEXTUAL), lsContextual.c_str() );

View file

@ -316,7 +316,7 @@ inline TCoord CVisionProvider::calcDistance( CClientHost *client, TCLEntityId sl
//{
// pos2x = getAbsoluteCoordinateFrom64( vlastposx );
// pos2y = getAbsoluteCoordinateFrom64( vlastposy );
// //nlinfo( "lastpos: %d %d, vlastpos: %"NL_I64"u %"NL_I64"u", pos2x, pos2y, vlastposx, vlastposy );
// //nlinfo( "lastpos: %d %d, vlastpos: %" NL_I64 "u %" NL_I64 "u", pos2x, pos2y, vlastposx, vlastposy );
/*#ifdef NL_DEBUG
TCoord d = (TCoord)(abs(pos1x-pos2x) + abs(pos1y-pos2y));
if ( d < 0 )
@ -757,7 +757,7 @@ NLMISC_COMMAND( displayEntityInfoById, "Display the properties of an entity, by
uint type;
uint creatorId;
uint dynamicId;
if (sscanf(args[0].c_str(), "(%"NL_I64"x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
if (sscanf(args[0].c_str(), "(%" NL_I64 "x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
return false;
eid.setShortId( id );
eid.setType( type );

View file

@ -602,7 +602,7 @@ NLMISC_COMMAND(trackEntity, "get track of an entity position", "id")
uint creatorId;
uint dynamicId;
if (sscanf(args[0].c_str(), "(%"NL_I64"x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
if (sscanf(args[0].c_str(), "(%" NL_I64 "x:%x:%x:%x)", &id, &type, &creatorId, &dynamicId) != 4)
return false;
eid.setShortId( id );

View file

@ -328,7 +328,7 @@ void CWorldEntity::createPrimitive(NLPACS::UMoveContainer *pMoveContainer, uint8
return;
}
primitive->UserData = ((uint64)(Index.getIndex()) << 16);
//nldebug("Set entity E%u to %"NL_I64"d", Index.getIndex(), primitive->UserData);
//nldebug("Set entity E%u to %" NL_I64 "d", Index.getIndex(), primitive->UserData);
primitive->setPrimitiveType( UMovePrimitive::_2DOrientedCylinder );
primitive->setReactionType( UMovePrimitive::Slide );
primitive->setTriggerType( UMovePrimitive::NotATrigger );

View file

@ -572,7 +572,7 @@ void CWorldPositionManager::processPacsTriggers(UMoveContainer *moveContainer)
uint64 trigger = info.Object0;
uint64 entity = info.Object1;
//nldebug("In processPacsTriggers: %"NL_I64"d versus %"NL_I64"d", entity, trigger);
//nldebug("In processPacsTriggers: %" NL_I64 "d versus %" NL_I64 "d", entity, trigger);
if ((entity&0xffff) != 0)
swap(trigger, entity);

View file

@ -115,7 +115,7 @@ static void cbSyncFromMaster(CMessage& msgin, const std::string &serviceName, TS
CTickProxy::setGameCycle( gameCycle );
//nldebug( "TCK-%u: Master Sync", gameCycle );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Master Sync", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, gameCycle );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Master Sync", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, gameCycle );
// user callback
onSync();
@ -257,7 +257,7 @@ void CTickProxy::receiveTockFromClient( CMessage& msgin, TServiceId senderId, bo
//nldebug( "TCK-%u: %hu tocking", getGameCycle(), senderId );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: %hu tocking", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), senderId.get() );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: %hu tocking", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), senderId.get() );
++_NbTocked;
_TockedServices.push_back( senderId );
@ -276,7 +276,7 @@ void CTickProxy::masterTickUpdate( TServiceId serviceId )
//nldebug( "TCK-%u: Master Tick", getGameCycle() );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Master Tick", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle() );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Master Tick", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle() );
//nldebug( "--GC-%u-->", _GameCycle );
@ -298,7 +298,7 @@ void CTickProxy::sendSyncToClient( TServiceId serviceId )
CUnifiedNetwork::getInstance()->send( serviceId, msgout );
//nldebug( "TCK-%u: Sync %hu", getGameCycle(), serviceId );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Sync %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), serviceId.get() );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Sync %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), serviceId.get() );
}
void CTickProxy::sendSyncs()
@ -313,7 +313,7 @@ void CTickProxy::sendSyncs()
CUnifiedNetwork::getInstance()->send( (*its), msgout );
//nldebug( "TCK-%u: Sync %hu", getGameCycle(), *its );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Sync %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), its->get());
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Sync %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), its->get());
}
}
@ -329,7 +329,7 @@ void CTickProxy::sendTicks()
//nldebug( "TCK-%u: Tick %hu", getGameCycle(), *its );
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Tick %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), its->get() );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Tick %hu", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle(), its->get() );
}
// nldebug( "Now expecting local tocks" );
State = ExpectingLocalTocks;
@ -391,7 +391,7 @@ void CTickProxy::sendTockBack( TServiceId serviceId )
nlwarning( "Tocked master twice in the same tick!" );
prev = getGameCycle();
//time_t t; time( &t );
_QuickLog.displayNL( "%"NL_I64"u: TCK-%u: Tocked Master", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle() );
_QuickLog.displayNL( "%" NL_I64 "u: TCK-%u: Tocked Master", getPerfTime() /*IDisplayer::dateToHumanString( t )*/, getGameCycle() );
}

View file

@ -109,7 +109,7 @@ CMySQLResult::CMySQLResult(MYSQL_RES* res)
/// Constructor
CMySQLResult::CMySQLResult(MYSQL* database)
{
{
_Result = mysql_store_result(database);
}
/// Destructor
@ -174,7 +174,7 @@ MYSQL_ROW CMySQLResult::fetchRow()
/* ***************************************************************************
Doc :
When an entity is added in the service mirror, the service checks if its name is in the name cache. If
When an entity is added in the service mirror, the service checks if its name is in the name cache. If
the string ID is not known, the server ask the IOS for the string.
When the IOS sends back a string, the server broadcasts this string to the connected clients.
@ -275,7 +275,7 @@ void clientWantsToConnect ( TSockId from, void *arg )
nlinfo ("Add client %d", Clients.size());
Clients.push_back (new CMonitorClient(from));
CMonitorService &ms = getMonitorService();
// send params about this sever the client
@ -284,7 +284,7 @@ void clientWantsToConnect ( TSockId from, void *arg )
uint32 version = 0;
msgout.serial(version);
msgout.serial(ms.LoginRequired);
Server->send(msgout, from);
Server->send(msgout, from);
Clients.back()->Authentificated = !ms.LoginRequired;
@ -333,7 +333,7 @@ void clientSetWindow (CMessage &msgin, TSockId from, CCallbackNetBase &netbase)
for (uint i = 0; i < Clients.size(); ++i)
{
if (Clients[i]->getSock() == from && Clients[i]->Authentificated)
{
{
nlinfo ("Client %d sets window (%.0f,%.0f) (%.0f,%.0f)", i, xmin, ymin, xmax, ymax);
Clients[i]->setWindow(xmin,ymin,xmax,ymax);
Clients[i]->resetVision();
@ -377,17 +377,21 @@ void clientAuthentication(CMessage &msgin, TSockId from, CCallbackNetBase &netba
{
if (!Clients[i]->Authentificated && Clients[i]->getSock() == from)
{
if (!Clients[i]->BadLogin) // don't allow new login attempt while thisflag is set
if (!Clients[i]->BadLogin) // don't allow new login attempt while this flag is set
{
// escape login
char escapedLogin[100];
size_t len = mysql_real_escape_string(DatabaseConnection, escapedLogin, login.c_str(), login.length());
// make a db request to to db to see if password is valid
std::string queryStr = toString("SELECT Password FROM user where Login='%s'", login.c_str());
std::string queryStr = toString("SELECT Password FROM user where Login='%s'", escapedLogin);
int result = mysql_query(DatabaseConnection, queryStr.c_str());
if (result == 0)
{
CMySQLResult sqlResult(DatabaseConnection);
if (sqlResult.success() && sqlResult.numRows() == 1)
{
MYSQL_ROW row = sqlResult.fetchRow();
MYSQL_ROW row = sqlResult.fetchRow();
if (sqlResult.numFields() == 1)
{
if (strlen(row[0]) > 2)
@ -407,19 +411,19 @@ void clientAuthentication(CMessage &msgin, TSockId from, CCallbackNetBase &netba
Clients[i]->Authentificated = true;
// password is good
CMessage msgout;
msgout.setType("AUTHENT_VALID");
msgout.setType("AUTHENT_VALID");
Server->send(msgout, from);
return;
}
}
}
}
}
}
// fail the authentication
// Do not send result immediatly to avoid a potential hacker
// to try a dictionnary or that dort of things
BadLoginClients.insert(std::pair<NLMISC::TTime, NLMISC::CRefPtr<CMonitorClient> >(
NLMISC::CTime::getLocalTime() + LOGIN_RETRY_DELAY_IN_MILLISECONDS,
NLMISC::CTime::getLocalTime() + LOGIN_RETRY_DELAY_IN_MILLISECONDS,
(NLMISC::CRefPtr<CMonitorClient>)Clients[i]));
Clients[i]->BadLogin =true;
return;
@ -527,9 +531,9 @@ void CMonitorService::init ()
// ***************************************************************************
void CMonitorService::release ()
void CMonitorService::release ()
{
disconnectFromDatabase();
disconnectFromDatabase();
// release sub systems
// CMessages::release();
CMirrors::release();
@ -568,7 +572,7 @@ bool CMonitorService::update ()
client.update();
}
}
// Sent bad login msg to clients at the right time
NLMISC::TTime currentTime = NLMISC::CTime::getLocalTime();
while (!BadLoginClients.empty() && BadLoginClients.begin()->first <= currentTime)
@ -577,9 +581,9 @@ bool CMonitorService::update ()
if (client != NULL)
{
CMessage msgout;
msgout.setType("AUTHENT_INVALID");
msgout.setType("AUTHENT_INVALID");
Server->send(msgout, client->getSock());
client->BadLogin = false; // allow to accept login again for that client
client->BadLogin = false; // allow to accept login again for that client
}
BadLoginClients.erase(BadLoginClients.begin());
}

View file

@ -765,7 +765,7 @@ void CPDSLib::allocateRow(TTableIndex table, TRowIndex row, uint64 key)
{
// send to PDS alloc(table, row, key);
if (PDVerbose)
nlinfo("CPDSLib: %12s index=%u:%u, key=%016"NL_I64"X", "allocrow", table, row, key);
nlinfo("CPDSLib: %12s index=%u:%u, key=%016" NL_I64 "X", "allocrow", table, row, key);
CDbMessage& msg = nextMessage((uint8)table, row);
msg.allocRow(key);
@ -787,7 +787,7 @@ void CPDSLib::allocateRow(TTableIndex table, TRowIndex row, uint64 key, const NL
{
// send to PDS alloc(table, row, key);
if (PDVerbose)
nlinfo("CPDSLib: %12s index=%u:%u, key=%016"NL_I64"X", "allocrow", table, row, key);
nlinfo("CPDSLib: %12s index=%u:%u, key=%016" NL_I64 "X", "allocrow", table, row, key);
CDbMessage& msg = nextMessage((uint8)table, row);
msg.allocRow(key, id);
@ -857,7 +857,7 @@ void CPDSLib::notifyFetchFailure(NLMISC::IStream &f)
if (table >= _FetchFailures.size() || _FetchFailures[table] == NULL)
{
nlwarning("CPDSLib: Unable to notify fetch failure of %d:%016"NL_I64"X, callback not set.", table, key);
nlwarning("CPDSLib: Unable to notify fetch failure of %d:%016" NL_I64 "X, callback not set.", table, key);
return;
}
@ -947,14 +947,14 @@ uint CPDSLib::getMessageQueueSize()
void CPDSLib::erase(TTableIndex table, uint64 key)
{
if (PDVerbose)
nlinfo("CPDSLib: %12s table=%u, key=%016"NL_I64"X", "erase", table, key);
nlinfo("CPDSLib: %12s table=%u, key=%016" NL_I64 "X", "erase", table, key);
}
// Load a row and its dependent rows from a mapped table
void CPDSLib::load(TTableIndex table, uint64 key)
{
if (PDVerbose)
nlinfo("CPDSLib: %12s table=%u, key=%016"NL_I64"X", "load", table, key);
nlinfo("CPDSLib: %12s table=%u, key=%016" NL_I64 "X", "load", table, key);
if (!_UsePDS)
{

View file

@ -247,7 +247,7 @@ void CDbMessage::getHRContent(const CDBDescriptionParser& description, std::stri
if (getTable() >= db.Tables.size())
return;
const CTableNode& table = db.Tables[getTable()];
result = NLMISC::toString("%-12s: %s %"NL_I64"X %s", "LoadRow", table.Name.c_str(), asUint64(), asEntityId().toString().c_str());
result = NLMISC::toString("%-12s: %s %" NL_I64 "X %s", "LoadRow", table.Name.c_str(), asUint64(), asEntityId().toString().c_str());
}
break;

View file

@ -642,7 +642,7 @@ inline bool CRowMapper::map(TKey key, const RY_PDS::CObjectIndex& index)
if (_KeyMap.find(key) != _KeyMap.end())
{
nlwarning("CRowMapper::map(): cannot map '%016"NL_I64"X' to '%d', already mapped", key, index.toString().c_str());
nlwarning("CRowMapper::map(): cannot map '%016" NL_I64 "X' to '%d', already mapped", key, index.toString().c_str());
return false;
}
@ -678,7 +678,7 @@ inline RY_PDS::CObjectIndex CRowMapper::get(TKey key) const
if (it == _KeyMap.end())
{
PDS_LOG_DEBUG(1)("CRowMapper::get(): key '%016"NL_I64"X' not mapped", key);
PDS_LOG_DEBUG(1)("CRowMapper::get(): key '%016" NL_I64 "X' not mapped", key);
return RY_PDS::CObjectIndex::null();
}
@ -699,7 +699,7 @@ inline bool CRowMapper::unmap(TKey key)
if (it == _KeyMap.end())
{
nlwarning("CRowMapper::unmap(): key '%016"NL_I64"X' not mapped", key);
nlwarning("CRowMapper::unmap(): key '%016" NL_I64 "X' not mapped", key);
return false;
}

View file

@ -789,11 +789,11 @@ bool CTableBuffer::processRow(CAccessor& accessor)
// already mapped
if (!RY_PDS::ResolveDoubleMappedRows)
{
PDS_WARNING("processRow(): key '%016"NL_I64"X' already mapped to '%s', failed", header->getKey(), prevMap.toString().c_str());
PDS_WARNING("processRow(): key '%016" NL_I64 "X' already mapped to '%s', failed", header->getKey(), prevMap.toString().c_str());
return false;
}
PDS_WARNING("processRow(): key '%016"NL_I64"X' already mapped to '%s'", header->getKey(), prevMap.toString().c_str());
PDS_WARNING("processRow(): key '%016" NL_I64 "X' already mapped to '%s'", header->getKey(), prevMap.toString().c_str());
if (RY_PDS::ResolveDoubleMappedKeepOlder)
{
@ -932,7 +932,7 @@ bool CTableBuffer::mapRow(const RY_PDS::CObjectIndex &index, uint64 key)
if (!_RowMapper.map(key, index))
{
PDS_WARNING("mapRow(): failed to map row '%d' to key '%016"NL_I64"X'", index.row(), key);
PDS_WARNING("mapRow(): failed to map row '%d' to key '%016" NL_I64 "X'", index.row(), key);
return false;
}
@ -971,7 +971,7 @@ bool CTableBuffer::unmapRow(const RY_PDS::CObjectIndex &index, uint64 key)
if (!_RowMapper.unmap(key))
{
PDS_WARNING("unmapRow(): failed to unmap row '%d' from key '%016"NL_I64"X", index.row(), key);
PDS_WARNING("unmapRow(): failed to unmap row '%d' from key '%016" NL_I64 "X", index.row(), key);
return false;
}
@ -980,7 +980,7 @@ bool CTableBuffer::unmapRow(const RY_PDS::CObjectIndex &index, uint64 key)
if (header->getKey() != key)
{
PDS_WARNING("unmapRow(): row '%d' is mapped to '%016"NL_I64"X', unmap row anyway, system may not recover object", index.row(), key);
PDS_WARNING("unmapRow(): row '%d' is mapped to '%016" NL_I64 "X', unmap row anyway, system may not recover object", index.row(), key);
}
header->setKey(0);

View file

@ -395,7 +395,7 @@ bool CDbManager::mapRow(TDatabaseId id, const RY_PDS::CObjectIndex &index, uint6
CDatabase* db = getDatabase(id);
if (db == NULL)
{
nlwarning("Unable to mapRow() '%016"NL_I64"X' to row '%d':'%d' in db '%d' , not created yet", key, index.table(), index.row(), id);
nlwarning("Unable to mapRow() '%016" NL_I64 "X' to row '%d':'%d' in db '%d' , not created yet", key, index.table(), index.row(), id);
return false;
}
@ -415,7 +415,7 @@ bool CDbManager::unmapRow(TDatabaseId id, RY_PDS::TTableIndex tableIndex, uint64
CDatabase* db = getDatabase(id);
if (db == NULL)
{
nlwarning("Unable to unmapRow() '%016"NL_I64"X' in '%d':'%d' in db '%d' , not created yet", key, tableIndex, id);
nlwarning("Unable to unmapRow() '%016" NL_I64 "X' in '%d':'%d' in db '%d' , not created yet", key, tableIndex, id);
return false;
}
@ -1054,7 +1054,7 @@ NLMISC_COMMAND(mapRow, "map a row in a table of a given database with a 64bits k
RY_PDS::TRowIndex rowId;
NLMISC::fromString(args[2], rowId);
uint64 key;
sscanf(args[3].c_str(), "%"NL_I64"X", &key);
sscanf(args[3].c_str(), "%" NL_I64 "X", &key);
CDatabase* database = CDbManager::getDatabase(databaseId);
@ -1079,7 +1079,7 @@ NLMISC_COMMAND(unmapRow, "unmap a row in a table of a given database with a 64bi
NLMISC::fromString(args[0], databaseId);
const std::string& tableName = args[1];
uint64 key;
sscanf(args[2].c_str(), "%"NL_I64"X", &key);
sscanf(args[2].c_str(), "%" NL_I64 "X", &key);
CDatabase* database = CDbManager::getDatabase(databaseId);
@ -1217,7 +1217,7 @@ NLMISC_COMMAND(dumpToXml, "dump the content of an object into an xml file", "<da
if (id == NLMISC::CEntityId::Unknown)
{
if (sscanf(args[1].c_str(), "%"NL_I64"u", &key) != 1)
if (!fromString(args[1], key))
{
log.displayNL("id '%s' is not recognized as an EntityId, an ObjectIndex nor a 64 bits raw key", args[1].c_str());
return false;

View file

@ -129,7 +129,7 @@ public:
void display(NLMISC::CLog* log = NLMISC::InfoLog)
{
log->displayNL("%d messages, %d submessages, %"NL_I64"d message bytes, %"NL_I64"d header bytes", NumMessages, NumSubMessages, TotalMessagesSize, TotalHeaderSize);
log->displayNL("%d messages, %d submessages, %" NL_I64 "d message bytes, %" NL_I64 "d header bytes", NumMessages, NumSubMessages, TotalMessagesSize, TotalHeaderSize);
log->displayNL("%.1f bytes avg per submessage, %.1f bytes avg per submessage header", (double)TotalMessagesSize/(double)NumSubMessages, (double)TotalHeaderSize/(double)NumSubMessages);
log->displayNL("%d updates, %d values updated, %d column updated, %d row updated", NumUpdateSubMessages, UpdateRowMap.size(), UpdateMap.size(), UpdateTableRowMap.size());
}

View file

@ -349,7 +349,7 @@ string CDatabase::getValue(const CLocatePath::TLocatePath &path)
if (path[node].Name[0] == '$')
{
uint64 key;
if (sscanf(path[node].Name.c_str()+1, "%"NL_I64"X", &key) != 1)
if (sscanf(path[node].Name.c_str()+1, "%" NL_I64 "X", &key) != 1)
{
PDS_WARNING("getValue(): unable to select mapped row '%s'", path[node].Name.c_str());
return "";
@ -575,7 +575,7 @@ bool CDatabase::mapRow(const RY_PDS::CObjectIndex &index, uint64 key)
bool success = table->mapRow(index, key);
if (success)
PDS_FULL_DEBUG("mapped '%016"NL_I64"X' to '%s' successfully", key, index.toString().c_str());
PDS_FULL_DEBUG("mapped '%016" NL_I64 "X' to '%s' successfully", key, index.toString().c_str());
return success;
}
@ -605,7 +605,7 @@ bool CDatabase::unmapRow(RY_PDS::TTableIndex tableIndex, uint64 key)
bool success = table->unmapRow(key);
if (success)
PDS_FULL_DEBUG("unmapped '%016"NL_I64"X' successfully", key);
PDS_FULL_DEBUG("unmapped '%016" NL_I64 "X' successfully", key);
return success;
}
@ -890,7 +890,7 @@ bool CDatabase::set(RY_PDS::TTableIndex table, RY_PDS::TRowIndex row, RY_PDS::TC
case PDS_sint64:
{
uint64 data;
sscanf(value.c_str(), "%016"NL_I64"d", &data);
sscanf(value.c_str(), "%016" NL_I64 "d", &data);
return set(table, row, column, sizeof(data), &data);
}
break;

View file

@ -268,7 +268,7 @@ void CTable::displayRow(RY_PDS::TRowIndex row, NLMISC::CLog* log, bool displayHe
(rowaccess.mapped() ? ", mapped" : ""),
(rowaccess.dirty() ? ", dirty" : ""));
log->displayNL("row %d: %d bytes, flags=[%s] (map=%016"NL_I64"X, dirtstamp=%08X)", row, _RowSize, flagstr.c_str(), (rowaccess.mapped() ? rowaccess.key() : (uint64)0), rowaccess.dirtyStamp());
log->displayNL("row %d: %d bytes, flags=[%s] (map=%016" NL_I64 "X, dirtstamp=%08X)", row, _RowSize, flagstr.c_str(), (rowaccess.mapped() ? rowaccess.key() : (uint64)0), rowaccess.dirtyStamp());
if (displayHeader)
{
@ -495,11 +495,11 @@ bool CTable::mapRow(const RY_PDS::CObjectIndex &index, uint64 key)
if (!_TableBuffer.mapRow(index, key))
{
PDS_WARNING("mapRow(): failed to map '%s' to '%016"NL_I64"X'", index.toString().c_str(), key);
PDS_WARNING("mapRow(): failed to map '%s' to '%016" NL_I64 "X'", index.toString().c_str(), key);
return false;
}
PDS_FULL_DEBUG("Mapped '%s' to key '%016"NL_I64"X'", index.toString().c_str(), key);
PDS_FULL_DEBUG("Mapped '%s' to key '%016" NL_I64 "X'", index.toString().c_str(), key);
return true;
}
@ -535,11 +535,11 @@ bool CTable::unmapRow(uint64 key)
if (!_TableBuffer.unmapRow(index, key))
{
PDS_WARNING("mapRow(): failed to unmap '%s' to '%016"NL_I64"X'", index.toString().c_str(), key);
PDS_WARNING("mapRow(): failed to unmap '%s' to '%016" NL_I64 "X'", index.toString().c_str(), key);
return false;
}
PDS_FULL_DEBUG("Unmapped '%s' of key '%016"NL_I64"X'", index.toString().c_str(), key);
PDS_FULL_DEBUG("Unmapped '%s' of key '%016" NL_I64 "X'", index.toString().c_str(), key);
return true;
}

View file

@ -418,7 +418,7 @@ void CTickService::checkTockReceived()
_TickSendTime = oldTime + dt;
}
//nlinfo( " %"NL_I64"u %"NL_I64"u", (TTime)((_TickSendTime-oldTime)*1000), (TTime)((d2-oldTime)*1000) );
//nlinfo( " %" NL_I64 "u %" NL_I64 "u", (TTime)((_TickSendTime-oldTime)*1000), (TTime)((d2-oldTime)*1000) );
// broadcast the tick
broadcastTick();

View file

@ -177,6 +177,11 @@ void CClientConfigDialog::onClickPlay()
clientFullPath += "ryzom_client";
#endif
#ifndef Q_OS_WIN32
// fix executable permissions under UNIX
QFile::setPermissions(clientFullPath, QFile::permissions(clientFullPath) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
#endif
started = QProcess::startDetached(clientFullPath, arguments);
onClickOK();

View file

@ -1,9 +1,9 @@
version=3
version=4
[common]
installation_directory=
installer_filename_windows=ryzom_installer_qt_r.exe
installer_filename_osx=RyzomInstaller.app/Contents/MacOS/RyzomInstaller
installer_filename_osx="Ryzom Installer.app/Contents/MacOS/Ryzom Installer"
installer_filename_linux=ryzom_installer_qt
[product]

View file

@ -106,22 +106,35 @@ bool CConfigFile::load(const QString &filename)
m_productHelpUrl = settings.value("url_help").toString();
m_productComments = settings.value("comments").toString();
settings.endGroup();
}
settings.beginGroup("servers");
int serversCount = settings.value("size").toInt();
m_defaultServerIndex = settings.value("default").toInt();
settings.endGroup();
settings.beginGroup("servers");
int serversCount = settings.value("size").toInt();
m_defaultServerIndex = settings.value("default").toInt();
settings.endGroup();
m_servers.resize(serversCount);
// only resize if added servers in local ryzom_installer.ini
CServers defaultServers = m_servers;
for (int i = 0; i < serversCount; ++i)
m_servers.resize(serversCount);
for (int i = 0; i < serversCount; ++i)
{
settings.beginGroup(QString("server_%1").arg(i));
CServer &server = m_servers[i];
if (useDefaultValues)
{
CServer &server = m_servers[i];
settings.beginGroup(QString("server_%1").arg(i));
server.loadFromSettings(settings);
settings.endGroup();
// search server with same ID and use these values
server.loadFromServers(defaultServers);
}
else
{
server.loadFromSettings(settings);
}
settings.endGroup();
}
// custom choices, always keep them
@ -307,7 +320,16 @@ QString CConfigFile::getDesktopDirectory() const
QString CConfigFile::getMenuDirectory() const
{
return QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + "/" + QApplication::applicationName();
QString applicationLocation;
#ifdef Q_OS_MAC
// QStandardPaths::ApplicationsLocation returns read-only location so fix it, will be installed in ~/Applications
applicationLocation = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/Applications";
#else
applicationLocation = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation);
#endif
return applicationLocation + "/" + QApplication::applicationName();
}
bool CConfigFile::has64bitsOS()
@ -483,11 +505,6 @@ QString CConfigFile::getParentDirectory()
return current.absolutePath();
}
QString CConfigFile::getApplicationDirectory()
{
return QApplication::applicationDirPath();
}
QString CConfigFile::getOldInstallationDirectory()
{
// HKEY_CURRENT_USER/SOFTWARE/Nevrax/RyzomInstall/InstallId=1917716796 (string)
@ -718,21 +735,28 @@ bool CConfigFile::shouldCreateMenuShortcut() const
return !shortcutExists(profile.getClientMenuShortcutFullPath());
}
bool CConfigFile::shouldCopyInstaller() const
int CConfigFile::compareInstallersVersion() const
{
// returns 0 if same version, 1 if current installer is more recent, -1 if installed installer is more recent
QString installerDst = getInstallationDirectory() + "/" + m_installerFilename;
// if installer not found in installation directory, extract it from BNP
if (!QFile::exists(installerDst)) return true;
// if installer not found in installation directory
if (!QFile::exists(installerDst)) return 1;
QString installedVersion = getVersionFromExecutable(installerDst);
nlinfo("%s version is %s", Q2C(installerDst), Q2C(installedVersion));
QString newVersion = QApplication::applicationVersion();
QVersionNumber installedVer = QVersionNumber::fromString(installedVersion);
QVersionNumber newVer = QVersionNumber::fromString(newVersion);
// if version is greater, copy it
return newVer > installedVer;
// same version
if (newVer == installedVer) return 0;
// if version is greater or lower
return newVer > installedVer ? 1:-1;
}
QString CConfigFile::getInstallerCurrentFilePath() const
@ -744,15 +768,30 @@ QString CConfigFile::getInstallerCurrentFilePath() const
QString CConfigFile::getInstallerCurrentDirPath() const
{
// installer is always run from TEMP under Windows
return QApplication::applicationDirPath();
QString appDir = QApplication::applicationDirPath();
#ifdef Q_OS_MAC
QDir dir(appDir);
dir.cdUp(); // .. = Contents
dir.cdUp(); // .. = .app
dir.cdUp(); // .. = <parent>
// return absolute path
appDir = dir.absolutePath();
#endif
return appDir;
}
QString CConfigFile::getInstallerOriginalFilePath() const
QString CConfigFile::getInstallerInstalledFilePath() const
{
return getInstallerOriginalDirPath() + "/" + QFileInfo(QApplication::applicationFilePath()).fileName();
// return an empty string, if no Installer filename in config
if (m_installerFilename.isEmpty()) return "";
return getInstallerInstalledDirPath() + "/" + m_installerFilename;
}
QString CConfigFile::getInstallerOriginalDirPath() const
QString CConfigFile::getInstallerInstalledDirPath() const
{
return m_installationDirectory;
}
@ -802,7 +841,7 @@ QStringList CConfigFile::getInstallerRequiredFiles() const
#endif
// include current executable
files << QFileInfo(QApplication::applicationFilePath()).fileName();
files << QFileInfo(getInstallerCurrentFilePath()).fileName();
#elif defined(Q_OS_MAC)
// everything is in a directory
files << "Ryzom Installer.app";
@ -811,7 +850,7 @@ QStringList CConfigFile::getInstallerRequiredFiles() const
files << "ryzom_installer.png";
// include current executable
files << QFileInfo(QApplication::applicationFilePath()).fileName();
files << QFileInfo(getInstallerCurrentFilePath()).fileName();
#endif
return files;
@ -859,7 +898,7 @@ OperationStep CConfigFile::getInstallNextStep() const
if (!isRyzomInstalledIn(currentDirectory))
{
// Ryzom is in the same directory as Ryzom Installer
currentDirectory = getApplicationDirectory();
currentDirectory = getInstallerCurrentDirPath();
if (!isRyzomInstalledIn(currentDirectory))
{
@ -947,7 +986,8 @@ OperationStep CConfigFile::getInstallNextStep() const
}
}
if (shouldCopyInstaller()) return CopyInstaller;
// current installer more recent than installed one
if (compareInstallersVersion() == 1) return CopyInstaller;
// no default profile
if (profile.id.isEmpty())
@ -990,6 +1030,31 @@ OperationStep CConfigFile::getInstallNextStep() const
}
}
// current installer more recent than installed one
switch (compareInstallersVersion())
{
// current installer more recent, copy it
case 1: break;
// current installer older, launch the more recent installer
case -1: return LaunchInstalledInstaller;
// continue only if 0 and launched Installer is the installed one
default:
{
#ifdef Q_OS_WIN32
QString tempPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
// check if launched from TEMP directory
bool rightPath = getInstallerCurrentDirPath().startsWith(tempPath);
#else
bool rightPath = false;
#endif
if (!rightPath && getInstallerCurrentFilePath() != getInstallerInstalledFilePath() && QFile::exists(getInstallerInstalledFilePath())) return LaunchInstalledInstaller;
}
}
return Done;
}

View file

@ -90,7 +90,6 @@ public:
// default directories
static QString getCurrentDirectory();
static QString getParentDirectory();
static QString getApplicationDirectory();
static QString getOldInstallationDirectory();
static QString getNewInstallationDirectory();
static QString getOldInstallationLanguage();
@ -104,7 +103,7 @@ public:
bool foundTemporaryFiles(const QString &directory) const;
bool shouldCreateDesktopShortcut() const;
bool shouldCreateMenuShortcut() const;
bool shouldCopyInstaller() const;
int compareInstallersVersion() const;
// installation choices
bool use64BitsClient() const;
@ -124,8 +123,8 @@ public:
QString getInstallerCurrentFilePath() const;
QString getInstallerCurrentDirPath() const;
QString getInstallerOriginalFilePath() const;
QString getInstallerOriginalDirPath() const;
QString getInstallerInstalledFilePath() const;
QString getInstallerInstalledDirPath() const;
QString getInstallerMenuShortcutFullPath() const;
QString getInstallerDesktopShortcutFullPath() const;

View file

@ -17,6 +17,7 @@
#include "stdpch.h"
#include "operation.h"
#include "downloader.h"
#include "utils.h"
#include "nel/misc/system_info.h"
#include "nel/misc/path.h"
@ -25,7 +26,7 @@
#define new DEBUG_NEW
#endif
CDownloader::CDownloader(QObject *parent, IOperationProgressListener *listener):QObject(parent), m_listener(listener), m_manager(NULL), m_reply(NULL), m_timer(NULL),
CDownloader::CDownloader(QObject *parent, IOperationProgressListener *listener):QObject(parent), m_listener(listener), m_manager(NULL), m_timer(NULL),
m_offset(0), m_size(0), m_supportsAcceptRanges(false), m_supportsContentRange(false),
m_downloadAfterHead(false), m_file(NULL)
{
@ -46,7 +47,7 @@ bool CDownloader::getHtmlPageContent(const QString &url)
if (url.isEmpty()) return false;
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::UserAgentHeader, "Ryzom Installer/1.0");
request.setHeader(QNetworkRequest::UserAgentHeader, QString("Ryzom Installer/%1").arg(QApplication::applicationVersion()));
QNetworkReply *reply = m_manager->get(request);
@ -75,7 +76,7 @@ bool CDownloader::getFile()
{
if (m_fullPath.isEmpty() || m_url.isEmpty())
{
qDebug() << "You forget to call prepareFile before";
nlwarning("You forget to call prepareFile before");
return false;
}
@ -168,10 +169,10 @@ void CDownloader::getFileHead()
request.setRawHeader("Range", QString("bytes=%1-").arg(m_offset).toLatin1());
}
m_reply = m_manager->head(request);
QNetworkReply *reply = m_manager->head(request);
connect(m_reply, SIGNAL(finished()), SLOT(onHeadFinished()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(onError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(finished()), SLOT(onHeadFinished()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(onError(QNetworkReply::NetworkError)));
startTimer();
}
@ -180,6 +181,16 @@ void CDownloader::downloadFile()
{
qint64 freeSpace = NLMISC::CSystemInfo::availableHDSpace(m_fullPath.toUtf8().constData());
if (freeSpace == 0)
{
if (m_listener)
{
QString error = qFromUtf8(NLMISC::formatErrorMessage(NLMISC::getLastError()));
m_listener->operationFail(tr("Error '%1' occured when trying to check free disk space on %2.").arg(error).arg(m_fullPath));
}
return;
}
if (freeSpace < m_size - m_offset)
{
// we have not enough free disk space to continue download
@ -201,12 +212,12 @@ void CDownloader::downloadFile()
request.setRawHeader("Range", QString("bytes=%1-%2").arg(m_offset).arg(m_size-1).toLatin1());
}
m_reply = m_manager->get(request);
QNetworkReply *reply = m_manager->get(request);
connect(m_reply, SIGNAL(finished()), SLOT(onDownloadFinished()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(onError(QNetworkReply::NetworkError)));
connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), SLOT(onDownloadProgress(qint64, qint64)));
connect(m_reply, SIGNAL(readyRead()), SLOT(onDownloadRead()));
connect(reply, SIGNAL(finished()), SLOT(onDownloadFinished()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(onError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), SLOT(onDownloadProgress(qint64, qint64)));
connect(reply, SIGNAL(readyRead()), SLOT(onDownloadRead()));
if (m_listener) m_listener->operationStart();
@ -222,7 +233,7 @@ bool CDownloader::checkDownloadedFile()
void CDownloader::onTimeout()
{
qDebug() << "Timeout";
nlwarning("Timeout");
if (m_listener) m_listener->operationFail(tr("Timeout"));
}
@ -243,24 +254,35 @@ void CDownloader::onHeadFinished()
{
stopTimer();
int status = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
QString redirection = m_reply->header(QNetworkRequest::LocationHeader).toString();
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString url = reply->url().toString();
m_size = m_reply->header(QNetworkRequest::ContentLengthHeader).toInt();
m_lastModified = m_reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toUTC();
QString redirection = reply->header(QNetworkRequest::LocationHeader).toString();
QString acceptRanges = QString::fromLatin1(m_reply->rawHeader("Accept-Ranges"));
QString contentRange = QString::fromLatin1(m_reply->rawHeader("Content-Range"));
m_size = reply->header(QNetworkRequest::ContentLengthHeader).toInt();
m_lastModified = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toUTC();
m_reply->deleteLater();
m_reply = NULL;
QString acceptRanges = QString::fromLatin1(reply->rawHeader("Accept-Ranges"));
QString contentRange = QString::fromLatin1(reply->rawHeader("Content-Range"));
reply->deleteLater();
nlinfo("HTTP status code %d on HEAD for %s", status, Q2C(url));
if (!redirection.isEmpty())
{
nlinfo("Redirected to %s", Q2C(redirection));
}
// redirection
if (status == 302)
if (status == 302 || status == 307)
{
if (redirection.isEmpty())
{
nlwarning("No redirection defined");
if (m_listener) m_listener->operationFail(tr("Redirection URL is not defined"));
return;
}
@ -287,6 +309,8 @@ void CDownloader::onHeadFinished()
if (!m_supportsAcceptRanges && acceptRanges == "bytes")
{
nlinfo("Server supports resume for %s", Q2C(url));
// server supports resume, part 1
m_supportsAcceptRanges = true;
@ -298,6 +322,7 @@ void CDownloader::onHeadFinished()
// server doesn't support resume or
// we requested range, but server always returns 200
// download from the beginning
nlwarning("Server doesn't support resume, download %s from the beginning", Q2C(url));
}
// we requested with a range
@ -316,20 +341,15 @@ void CDownloader::onHeadFinished()
// update offset and size
if (m_listener) m_listener->operationInit(m_offset, m_size);
nlinfo("Server supports resume for %s: offset %" NL_I64 "d, size %" NL_I64 "d", Q2C(url), m_offset, m_size);
}
else
{
qDebug() << "Unable to parse";
nlwarning("Unable to parse %s", Q2C(contentRange));
}
}
// error when download is not yet ready
else if (status == 307)
{
if (m_listener) m_listener->operationFail(tr("File is not available, please retry later (status code: %1)").arg(status));
return;
}
// other status
else
{
@ -341,7 +361,7 @@ void CDownloader::onHeadFinished()
{
if (checkDownloadedFile())
{
qDebug() << "same date and size";
nlwarning("Same date and size");
}
else
{
@ -356,8 +376,14 @@ void CDownloader::onHeadFinished()
void CDownloader::onDownloadFinished()
{
m_reply->deleteLater();
m_reply = NULL;
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString url = reply->url().toString();
reply->deleteLater();
nlwarning("Download finished with HTTP status code %d when downloading %s", status, Q2C(url));
closeFile();
@ -367,26 +393,37 @@ void CDownloader::onDownloadFinished()
}
else
{
bool ok = NLMISC::CFile::setFileModificationDate(m_fullPath.toUtf8().constData(), m_lastModified.toTime_t());
if (QFileInfo(m_fullPath).size() == m_size)
{
bool ok = NLMISC::CFile::setFileModificationDate(m_fullPath.toUtf8().constData(), m_lastModified.toTime_t());
if (m_listener) m_listener->operationSuccess(m_size);
if (m_listener) m_listener->operationSuccess(m_size);
emit downloadDone();
emit downloadDone();
}
else if (status == 206)
{
if (m_listener) m_listener->operationContinue();
}
else
{
if (m_listener) m_listener->operationFail(tr("HTTP error: %1").arg(status));
}
}
}
void CDownloader::onError(QNetworkReply::NetworkError error)
{
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
nlwarning("Network error %s (%d) when downloading %s", Q2C(reply->errorString()), error, Q2C(m_url));
if (!m_listener) return;
if (error == QNetworkReply::OperationCanceledError)
{
m_listener->operationStop();
}
else
{
m_listener->operationFail(tr("Network error: %1").arg(error));
}
}
void CDownloader::onDownloadProgress(qint64 current, qint64 total)
@ -395,13 +432,17 @@ void CDownloader::onDownloadProgress(qint64 current, qint64 total)
if (!m_listener) return;
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
m_listener->operationProgress(m_offset + current, m_url);
// abort download
if (m_listener->operationShouldStop() && m_reply) m_reply->abort();
if (m_listener->operationShouldStop() && reply) reply->abort();
}
void CDownloader::onDownloadRead()
{
if (m_file) m_file->write(m_reply->readAll());
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (m_file && reply) m_file->write(reply->readAll());
}

View file

@ -76,7 +76,6 @@ protected:
bool checkDownloadedFile();
QNetworkAccessManager *m_manager;
QNetworkReply *m_reply;
QTimer *m_timer;
QString m_url;

View file

@ -63,71 +63,72 @@ bool CFilesCopier::exec()
FilesToCopy files;
// create the list of files to copy
CFilesCopier::getFilesList(files);
// copy them
return copyFiles(files);
}
void CFilesCopier::getFilesList(FilesToCopy &files)
void CFilesCopier::getFile(const QFileInfo &fileInfo, const QDir &srcDir, FilesToCopy &files) const
{
QDir dir(m_sourceDirectory);
// full path to file
QString fullPath = fileInfo.absoluteFilePath();
QFileInfoList entries = dir.entryInfoList(m_includeFilter);
QString relativePath = srcDir.relativeFilePath(fullPath);
QFileInfo relativeFileInfo(relativePath);
// correct absolute path
if (relativeFileInfo.isAbsolute())
{
relativePath = relativeFileInfo.fileName();
}
// full path where to copy file
QString dstPath = m_destinationDirectory + "/" + relativePath;
if (fileInfo.isDir())
{
// create directory
QDir().mkpath(dstPath);
QDir subDir(fullPath);
// get list of all files in directory
QFileInfoList entries = subDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot);
// proces seach file recursively
foreach(const QFileInfo &entry, entries)
{
getFile(entry, srcDir, files);
}
}
else
{
// add the file to list with all useful information
FileToCopy file;
file.filename = fileInfo.fileName();
file.src = fileInfo.filePath();
file.dst = dstPath;
file.size = fileInfo.size();
file.date = fileInfo.lastModified().toTime_t();
file.permissions = fileInfo.permissions();
files << file;
}
}
void CFilesCopier::getFilesList(FilesToCopy &files) const
{
QDir srcDir(m_sourceDirectory);
// only copy all files from filter
QFileInfoList entries = srcDir.entryInfoList(m_includeFilter);
foreach(const QFileInfo &entry, entries)
{
QString fullPath = entry.absoluteFilePath();
QString dstPath = m_destinationDirectory + "/" + dir.relativeFilePath(fullPath);
if (entry.isDir())
{
QDir().mkpath(dstPath);
QDir subDir(fullPath);
QDirIterator it(subDir, QDirIterator::Subdirectories);
while (it.hasNext())
{
fullPath = it.next();
if (it.fileName().startsWith('.')) continue;
QFileInfo fileInfo = it.fileInfo();
dstPath = m_destinationDirectory + "/" + dir.relativeFilePath(fullPath);
if (fileInfo.isDir())
{
QDir().mkpath(dstPath);
}
else
{
FileToCopy file;
file.filename = it.fileName();
file.src = it.filePath();
file.dst = dstPath;
file.size = it.fileInfo().size();
file.date = it.fileInfo().lastModified().toTime_t();
file.permissions = it.fileInfo().permissions();
files << file;
}
}
}
else
{
FileToCopy file;
file.filename = entry.fileName();
file.src = entry.filePath();
file.dst = dstPath;
file.size = entry.size();
file.date = entry.lastModified().toTime_t();
file.permissions = entry.permissions();
files << file;
}
getFile(entry, srcDir, files);
}
// copy additional files
@ -135,18 +136,7 @@ void CFilesCopier::getFilesList(FilesToCopy &files)
{
QFileInfo fileInfo(fullpath);
if (fileInfo.isFile())
{
FileToCopy file;
file.filename = fileInfo.fileName();
file.src = fileInfo.filePath();
file.dst = m_destinationDirectory + "/" + fileInfo.fileName();
file.size = fileInfo.size();
file.date = fileInfo.lastModified().toTime_t();
file.permissions = fileInfo.permissions();
files << file;
}
getFile(fileInfo, srcDir, files);
}
}
@ -186,7 +176,7 @@ bool CFilesCopier::copyFiles(const FilesToCopy &files)
if (!QFile::copy(file.src, file.dst))
{
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to copy file %1").arg(file.src));
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to copy file %1 to %2").arg(file.src).arg(file.dst));
return false;
}

View file

@ -54,7 +54,9 @@ protected:
typedef QList<FileToCopy> FilesToCopy;
void getFilesList(FilesToCopy &files);
void getFile(const QFileInfo &info, const QDir &srcDir, FilesToCopy &files) const;
void getFilesList(FilesToCopy &files) const;
bool copyFiles(const FilesToCopy &files);
IOperationProgressListener *m_listener;

View file

@ -91,6 +91,8 @@
bool Set7zFileAttrib(const QString &filename, uint32 fileAttributes)
{
if (filename.isEmpty()) return false;
bool attrReadOnly = (fileAttributes & FILE_ATTRIBUTE_READONLY) != 0;
bool attrHidden = (fileAttributes & FILE_ATTRIBUTE_HIDDEN) != 0;
bool attrSystem = (fileAttributes & FILE_ATTRIBUTE_SYSTEM) != 0;
@ -114,7 +116,7 @@ bool Set7zFileAttrib(const QString &filename, uint32 fileAttributes)
#ifdef Q_OS_WIN
SetFileAttributesW((wchar_t*)filename.utf16(), windowsAttributes);
#else
const char *name = filename.toUtf8().constData();
std::string name = filename.toUtf8().constData();
mode_t current_umask = umask(0); // get and set the umask
umask(current_umask); // restore the umask
@ -122,9 +124,9 @@ bool Set7zFileAttrib(const QString &filename, uint32 fileAttributes)
struct stat stat_info;
if (lstat(name, &stat_info) != 0)
if (lstat(name.c_str(), &stat_info) != 0)
{
nlwarning("Unable to get file attributes for %s", name);
nlwarning("Unable to get file attributes for %s", name.c_str());
return false;
}
@ -137,13 +139,13 @@ bool Set7zFileAttrib(const QString &filename, uint32 fileAttributes)
{
if (S_ISREG(stat_info.st_mode))
{
chmod(name, stat_info.st_mode & mask);
chmod(name.c_str(), stat_info.st_mode & mask);
}
else if (S_ISDIR(stat_info.st_mode))
{
// user/7za must be able to create files in this directory
stat_info.st_mode |= (S_IRUSR | S_IWUSR | S_IXUSR);
chmod(name, stat_info.st_mode & mask);
chmod(name.c_str(), stat_info.st_mode & mask);
}
}
}
@ -156,7 +158,7 @@ bool Set7zFileAttrib(const QString &filename, uint32 fileAttributes)
// octal!, clear write permission bits
stat_info.st_mode &= ~0222;
chmod(name, stat_info.st_mode & mask);
chmod(name.c_str(), stat_info.st_mode & mask);
}
#endif
@ -406,67 +408,99 @@ bool CFilesExtractor::extract7z()
QString path = QString::fromUtf16(temp);
QString filename = QFileInfo(path).fileName();
if (!isDir)
{
if (m_listener) m_listener->operationProgress(totalUncompressed, filename);
res = SzArEx_Extract(&db, &lookStream.s, i, &blockIndex, &outBuffer, &outBufferSize,
&offset, &outSizeProcessed, &allocImp, &allocTempImp);
if (res != SZ_OK) break;
}
QString destPath = m_destinationDirectory + '/' + path;
QDir dir;
// get uncompressed size
quint64 uncompressedSize = SzArEx_GetFileSize(&db, i);
// get modification time
quint32 modificationTime = 0;
if (SzBitWithVals_Check(&db.MTime, i))
{
modificationTime = convertWindowsFileTimeToUnixTimestamp(db.MTime.Vals[i]);
}
if (isDir)
{
dir.mkpath(destPath);
QDir().mkpath(destPath);
continue;
}
dir.mkpath(QFileInfo(destPath).absolutePath());
// check if file exists
if (QFile::exists(destPath))
{
QFileInfo currentFileInfo(destPath);
// skip file if same size and same modification date
if (currentFileInfo.lastModified().toTime_t() == modificationTime && currentFileInfo.size() == uncompressedSize)
{
// update progress
totalUncompressed += uncompressedSize;
if (m_listener) m_listener->operationProgress(totalUncompressed, filename);
continue;
}
}
if (m_listener) m_listener->operationProgress(totalUncompressed, filename);
res = SzArEx_Extract(&db, &lookStream.s, i, &blockIndex, &outBuffer, &outBufferSize,
&offset, &outSizeProcessed, &allocImp, &allocTempImp);
if (res != SZ_OK) break;
// create file directory
QDir().mkpath(QFileInfo(destPath).absolutePath());
// create file
QFile outFile(destPath);
if (!outFile.open(QFile::WriteOnly))
{
error = QApplication::tr("Unable to open output file");
error = QApplication::tr("Unable to open output file %1").arg(destPath);
res = SZ_ERROR_FAIL;
break;
}
size_t processedSize = outFile.write((const char*)(outBuffer + offset), outSizeProcessed);
if (processedSize != outSizeProcessed)
qint64 currentSizeToProcess = outSizeProcessed;
do
{
error = QApplication::tr("Unable to write output file");
qint64 currentProcessedSize = outFile.write((const char*)(outBuffer + offset), currentSizeToProcess);
// errors only occur when returned size is -1
if (currentProcessedSize < 0) break;
offset += currentProcessedSize;
currentSizeToProcess -= currentProcessedSize;
}
while (currentSizeToProcess > 0);
if (offset != outSizeProcessed)
{
error = QApplication::tr("Unable to write output file %1 (%2 bytes written but expecting %3 bytes)").arg(destPath).arg(offset).arg(outSizeProcessed);
res = SZ_ERROR_FAIL;
break;
}
outFile.close();
totalUncompressed += SzArEx_GetFileSize(&db, i);
totalUncompressed += uncompressedSize;
if (m_listener) m_listener->operationProgress(totalUncompressed, filename);
// set attrinbutes
// set attributes
if (SzBitWithVals_Check(&db.Attribs, i))
{
Set7zFileAttrib(destPath, db.Attribs.Vals[i]);
}
// set modification time
if (SzBitWithVals_Check(&db.MTime, i))
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(destPath), modificationTime))
{
char buffer[1024];
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(destPath), convertWindowsFileTimeToUnixTimestamp(db.MTime.Vals[i])))
{
qDebug() << "Unable to change date of " << destPath;
}
qDebug() << "Unable to change date of " << destPath;
}
}

View file

@ -21,6 +21,7 @@
#include "nel/misc/system_info.h"
#include "nel/misc/common.h"
#include "nel/misc/debug.h"
#ifdef DEBUG_NEW
#define new DEBUG_NEW
@ -40,7 +41,9 @@ CInstallDialog::CInstallDialog():QDialog()
clientArchGroupBox->setVisible(false);
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#else
#elif defined(Q_OS_WIN32)
// both 32 and 64 bits are working under Windows 64 bits
// check whether OS architecture is 32 or 64 bits
if (CConfigFile::has64bitsOS())
{
@ -55,7 +58,22 @@ CInstallDialog::CInstallDialog():QDialog()
clientArchGroupBox->setVisible(false);
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
}
}
#else
// only use the current architecture for Linux
clientArchGroupBox->setVisible(false);
#ifdef _LP64
// only 64 bits is available
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#else
// only 32 bits is available
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
#endif
#endif
const CServer &server = CConfigFile::getInstance()->getServer();
@ -114,9 +132,18 @@ void CInstallDialog::accept()
// check free disk space
qint64 freeSpace = NLMISC::CSystemInfo::availableHDSpace(m_dstDirectory.toUtf8().constData());
// shouldn't happen
if (freeSpace == 0)
{
int error = NLMISC::getLastError();
nlwarning("Error '%s' (%d) occured when trying to check free disk space on %s, continue anyway", NLMISC::formatErrorMessage(error).c_str(), error, Q2C(m_dstDirectory));
}
const CServer &server = CConfigFile::getInstance()->getServer();
if (freeSpace < server.dataUncompressedSize)
// compare with exact size of current directory
if (freeSpace && freeSpace < server.dataUncompressedSize)
{
QMessageBox::StandardButton res = QMessageBox::warning(this, tr("Not enough free disk space"), tr("You don't have enough free space on this disk, please make more space or choose a directory on another disk."));
return;

View file

@ -144,9 +144,17 @@ int main(int argc, char *argv[])
// instanciate ConfigFile
CConfigFile config;
OperationStep step = config.load() ? config.getInstallNextStep():DisplayNoServerError;
if (step == DisplayNoServerError)
bool res = config.load();
// init log
CLogHelper logHelper(config.getInstallationDirectory());
nlinfo("Launched %s", Q2C(config.getInstallerCurrentFilePath()));
OperationStep step = res ? config.getInstallNextStep():DisplayNoServerError;
if (res == DisplayNoServerError)
{
QMessageBox::critical(NULL, QApplication::tr("Error"), QApplication::tr("Unable to find ryzom_installer.ini"));
return 1;
@ -157,8 +165,10 @@ int main(int argc, char *argv[])
QString tempPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
// check if launched from TEMP directory
if (step == Done && !QApplication::applicationDirPath().startsWith(tempPath))
if (step == Done && !config.getInstallerCurrentDirPath().startsWith(tempPath))
{
nlinfo("Not launched from TEMP directory");
// try to delete all temporary installers
QDir tempDir(tempPath);
@ -173,17 +183,25 @@ int main(int argc, char *argv[])
QDir dirToRemove(tempDir);
dirToRemove.cd(dir);
dirToRemove.removeRecursively();
nlinfo("Delete directory %s", Q2C(dir));
}
tempPath += QString("/ryzom_installer_%1").arg(QDateTime::currentMSecsSinceEpoch());
nlinfo("Creating directory %s", Q2C(tempPath));
// copy installer and required files to TEMP directory
if (QDir().mkdir(tempPath) && copyInstallerFiles(config.getInstallerRequiredFiles(), tempPath))
{
QString tempFile = tempPath + "/" + QFileInfo(QApplication::applicationFilePath()).fileName();
QString tempFile = tempPath + "/" + QFileInfo(config.getInstallerCurrentFilePath()).fileName();
nlinfo("Launching %s", Q2C(tempFile));
// launch copy in TEMP directory with same arguments
if (QProcess::startDetached(tempFile, QApplication::arguments())) return 0;
nlwarning("Unable to launch %s", Q2C(tempFile));
}
}
#endif
@ -193,6 +211,8 @@ int main(int argc, char *argv[])
if (parser.isSet(uninstallOption))
{
nlinfo("Uninstalling...");
SComponents components;
// add all servers by default
@ -227,6 +247,8 @@ int main(int argc, char *argv[])
if (step == ShowMigrateWizard)
{
nlinfo("Display migration dialog");
CMigrateDialog dialog;
if (!dialog.exec()) return 1;
@ -235,12 +257,18 @@ int main(int argc, char *argv[])
}
else if (step == ShowInstallWizard)
{
nlinfo("Display installation dialog");
CInstallDialog dialog;
if (!dialog.exec()) return 1;
step = config.getInstallNextStep();
}
nlinfo("Next step is %s", Q2C(stepToString(step)));
bool restartInstaller = false;
if (step != Done)
{
@ -252,15 +280,36 @@ int main(int argc, char *argv[])
step = config.getInstallNextStep();
if (step == Done)
nlinfo("Last step is %s", Q2C(stepToString(step)));
if (step == LaunchInstalledInstaller)
{
// restart more recent installed Installer version
restartInstaller = true;
}
else if (step == Done)
{
#if defined(Q_OS_WIN) && !defined(_DEBUG)
// restart Installer, so it could be copied in TEMP and allowed to update itself
if (QProcess::startDetached(QApplication::applicationFilePath(), QApplication::arguments())) return 0;
restartInstaller = true;
#endif
}
}
if (restartInstaller)
{
#ifndef _DEBUG
nlinfo("Restart Installer %s", Q2C(config.getInstallerInstalledFilePath()));
#ifndef Q_OS_WIN32
// fix executable permissions under UNIX
QFile::setPermissions(config.getInstallerInstalledFilePath(), QFile::permissions(config.getInstallerInstalledFilePath()) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
#endif
if (QProcess::startDetached(config.getInstallerInstalledFilePath())) return 0;
#endif
}
CMainWindow mainWindow;
mainWindow.show();

View file

@ -137,11 +137,19 @@ void CMainWindow::onPlayClicked()
arguments << profile.id;
arguments << profile.arguments.split(' ');
#ifndef Q_OS_WIN32
QFile::setPermissions(executable, QFile::permissions(executable) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
#endif
// launch the game with all arguments and from server root directory (to use right data)
bool started = QProcess::startDetached(executable, arguments, server.getDirectory());
// define this profile as default one
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
if (started)
{
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
CConfigFile::getInstance()->save();
}
}
void CMainWindow::onConfigureClicked()
@ -164,9 +172,17 @@ void CMainWindow::onConfigureClicked()
arguments << "-p";
arguments << profile.id;
#ifndef Q_OS_WIN32
QFile::setPermissions(executable, QFile::permissions(executable) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
#endif
bool started = QProcess::startDetached(executable, arguments);
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
if (started)
{
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
CConfigFile::getInstance()->save();
}
}
void CMainWindow::onProfiles()

View file

@ -38,7 +38,7 @@ CMigrateDialog::CMigrateDialog():QDialog()
if (!CConfigFile::getInstance()->isRyzomInstalledIn(m_currentDirectory))
{
// Ryzom is in the same directory as Ryzom Installer
m_currentDirectory = CConfigFile::getInstance()->getApplicationDirectory();
m_currentDirectory = CConfigFile::getInstance()->getInstallerCurrentDirPath();
if (!CConfigFile::getInstance()->isRyzomInstalledIn(m_currentDirectory))
{
@ -54,7 +54,9 @@ CMigrateDialog::CMigrateDialog():QDialog()
clientArchGroupBox->setVisible(false);
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#else
#elif defined(Q_OS_WIN32)
// both 32 and 64 bits are working under Windows 64 bits
// check whether OS architecture is 32 or 64 bits
if (CConfigFile::has64bitsOS())
{
@ -70,6 +72,21 @@ CMigrateDialog::CMigrateDialog():QDialog()
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
}
#else
// only use the current architecture for Linux
clientArchGroupBox->setVisible(false);
#ifdef _LP64
// only 64 bits is available
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#else
// only 32 bits is available
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
#endif
#endif
const CServer &server = CConfigFile::getInstance()->getServer();
@ -130,8 +147,16 @@ void CMigrateDialog::accept()
// check free disk space
qint64 freeSpace = NLMISC::CSystemInfo::availableHDSpace(m_dstDirectory.toUtf8().constData());
// shouldn't happen
if (freeSpace == 0)
{
int error = NLMISC::getLastError();
nlwarning("Error '%s' (%d) occured when trying to check free disk space on %s, continue anyway", NLMISC::formatErrorMessage(error).c_str(), error, Q2C(m_dstDirectory));
}
// compare with exact size of current directory
if (freeSpace < getDirectorySize(m_currentDirectory, true))
if (freeSpace && freeSpace < getDirectorySize(m_currentDirectory, true))
{
QMessageBox::StandardButton res = QMessageBox::warning(this, tr("Not enough free disk space"), tr("You don't have enough free space on this disk, please make more space or choose a directory on another disk."));
return;

View file

@ -0,0 +1,55 @@
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdpch.h"
#include "operation.h"
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif
QString stepToString(OperationStep step)
{
static QStringList s_operations;
if (s_operations.isEmpty())
{
s_operations << "DisplayNoServerError"
<< "ShowInstallWizard"
<< "ShowMigrateWizard"
<< "DownloadData"
<< "ExtractDownloadedData"
<< "DownloadClient"
<< "ExtractDownloadedClient"
<< "CopyDataFiles"
<< "CopyProfileFiles"
<< "CleanFiles"
<< "ExtractBnpClient"
<< "CopyInstaller"
<< "LaunchInstalledInstaller"
<< "UninstallOldClient"
<< "CreateProfile"
<< "CreateProfileShortcuts"
<< "CreateAddRemoveEntry"
<< "Done";
}
QString res;
if (step >= 0 && step < s_operations.size()) res += s_operations[step];
return QString("%1 (%2)").arg(res).arg(step);
}

View file

@ -31,6 +31,7 @@ public:
virtual void operationProgress(qint64 current, const QString &filename) =0;
virtual void operationSuccess(qint64 total) =0;
virtual void operationFail(const QString &error) =0;
virtual void operationContinue() = 0;
virtual bool operationShouldStop() =0;
};
@ -64,6 +65,7 @@ enum OperationStep
CleanFiles,
ExtractBnpClient,
CopyInstaller,
LaunchInstalledInstaller,
UninstallOldClient,
CreateProfile,
CreateProfileShortcuts,
@ -71,6 +73,8 @@ enum OperationStep
Done
};
QString stepToString(OperationStep);
enum OperationType
{
OperationNone,

View file

@ -199,6 +199,7 @@ void COperationDialog::processInstallNextStep()
break;
case Done:
case LaunchInstalledInstaller:
acceptDelayed();
break;
@ -724,24 +725,26 @@ void COperationDialog::copyInstaller()
m_currentOperation = tr("Copying installer to new location...");
QString destinationDirectory = config->getInstallationDirectory();
QString newInstallerFullPath = config->getInstallerInstalledFilePath();
// rename old client to installer
QString newInstallerFilename = config->getInstallerFilename();
if (!newInstallerFilename.isEmpty())
if (!newInstallerFullPath.isEmpty())
{
QString oldInstallerFullPath = QApplication::applicationFilePath();
QString newInstallerFullPath = config->getInstallationDirectory() + "/" + newInstallerFilename;
QString destinationDirectory = config->getInstallationDirectory();
QString oldInstallerFullPath = config->getInstallerCurrentFilePath();
QString srcDir = config->getInstallerCurrentDirPath();
// always copy new installers
CFilesCopier copier(this);
copier.setIncludeFilter(config->getInstallerRequiredFiles());
#ifndef Q_OS_MAC
copier.addFile(oldInstallerFullPath);
copier.setSourceDirectory(config->getSrcServerDirectory().isEmpty() ? QApplication::applicationDirPath():config->getSrcServerDirectory());
#endif
copier.setSourceDirectory(srcDir);
copier.setDestinationDirectory(config->getInstallationDirectory());
copier.exec();
if (!copier.exec()) return;
#ifndef Q_OS_MAC
// copied file
oldInstallerFullPath = config->getInstallationDirectory() + "/" + QFileInfo(oldInstallerFullPath).fileName();
@ -754,6 +757,7 @@ void COperationDialog::copyInstaller()
// rename new installer with final name
QFile::rename(oldInstallerFullPath, newInstallerFullPath);
}
#endif
// create menu directory if defined
QString path = config->getMenuDirectory();
@ -931,36 +935,31 @@ bool COperationDialog::createAddRemoveEntry()
{
CConfigFile *config = CConfigFile::getInstance();
QString newInstallerFilename = config->getInstallerFilename();
QString newInstallerFullPath = config->getInstallerInstalledFilePath();
if (!newInstallerFilename.isEmpty())
if (!newInstallerFullPath.isEmpty() && QFile::exists(newInstallerFullPath))
{
QString newInstallerFullPath = config->getInstallationDirectory() + "/" + newInstallerFilename;
if (QFile::exists(newInstallerFullPath))
{
#ifdef Q_OS_WIN
QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Ryzom", QSettings::NativeFormat);
QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Ryzom", QSettings::NativeFormat);
QString nativeFullPath = QDir::toNativeSeparators(newInstallerFullPath);
QString nativeFullPath = QDir::toNativeSeparators(newInstallerFullPath);
settings.setValue("Comments", config->getProductComments());
settings.setValue("DisplayIcon", nativeFullPath + ",0");
settings.setValue("DisplayName", QApplication::applicationName());
settings.setValue("InstallDate", QDateTime::currentDateTime().toString("Ymd"));
settings.setValue("InstallLocation", config->getInstallationDirectory());
settings.setValue("NoModify", 0);
settings.setValue("NoRemove", 0);
settings.setValue("NoRepair", 0);
if (!config->getProductPublisher().isEmpty()) settings.setValue("Publisher", config->getProductPublisher());
settings.setValue("QuietUninstallString", nativeFullPath + " -u -s");
settings.setValue("UninstallString", nativeFullPath + " -u");
if (!config->getProductUpdateUrl().isEmpty()) settings.setValue("URLUpdateInfo", config->getProductUpdateUrl());
if (!config->getProductAboutUrl().isEmpty()) settings.setValue("URLInfoAbout", config->getProductAboutUrl());
if (!config->getProductHelpUrl().isEmpty()) settings.setValue("HelpLink", config->getProductHelpUrl());
// ModifyPath
settings.setValue("Comments", config->getProductComments());
settings.setValue("DisplayIcon", nativeFullPath + ",0");
settings.setValue("DisplayName", QApplication::applicationName());
settings.setValue("InstallDate", QDateTime::currentDateTime().toString("Ymd"));
settings.setValue("InstallLocation", config->getInstallationDirectory());
settings.setValue("NoModify", 0);
settings.setValue("NoRemove", 0);
settings.setValue("NoRepair", 0);
if (!config->getProductPublisher().isEmpty()) settings.setValue("Publisher", config->getProductPublisher());
settings.setValue("QuietUninstallString", nativeFullPath + " -u -s");
settings.setValue("UninstallString", nativeFullPath + " -u");
if (!config->getProductUpdateUrl().isEmpty()) settings.setValue("URLUpdateInfo", config->getProductUpdateUrl());
if (!config->getProductAboutUrl().isEmpty()) settings.setValue("URLInfoAbout", config->getProductAboutUrl());
if (!config->getProductHelpUrl().isEmpty()) settings.setValue("HelpLink", config->getProductHelpUrl());
// ModifyPath
#endif
}
}
updateAddRemoveEntry();
@ -974,27 +973,24 @@ bool COperationDialog::updateAddRemoveEntry()
{
CConfigFile *config = CConfigFile::getInstance();
QString newInstallerFilename = config->getInstallerFilename();
QString newInstallerFullPath = config->getInstallerInstalledFilePath();
if (!newInstallerFilename.isEmpty())
if (!newInstallerFullPath.isEmpty() && QFile::exists(newInstallerFullPath))
{
QString newInstallerFullPath = config->getInstallationDirectory() + "/" + newInstallerFilename;
QString newInstallerFilename = config->getInstallerFilename();
if (QFile::exists(newInstallerFullPath))
{
#ifdef Q_OS_WIN
QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Ryzom", QSettings::NativeFormat);
QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Ryzom", QSettings::NativeFormat);
QString version = QApplication::applicationVersion();
QString version = QApplication::applicationVersion();
settings.setValue("DisplayVersion", version);
settings.setValue("EstimatedSize", (quint32)(getDirectorySize(config->getInstallationDirectory(), true) / 1024)); // size if in KiB
settings.setValue("DisplayVersion", version);
settings.setValue("EstimatedSize", (quint32)(getDirectorySize(config->getInstallationDirectory(), true) / 1024)); // size if in KiB
QStringList versionTokens = version.split('.');
settings.setValue("MajorVersion", versionTokens[0].toInt());
settings.setValue("MinorVersion", versionTokens[1].toInt());
QStringList versionTokens = version.split('.');
settings.setValue("MajorVersion", versionTokens[0].toInt());
settings.setValue("MinorVersion", versionTokens[1].toInt());
#endif
}
}
return true;
@ -1161,7 +1157,7 @@ void COperationDialog::deleteComponentsInstaller()
dir.removeRecursively();
}
path = config->getInstallerOriginalDirPath();
path = config->getInstallerInstalledDirPath();
QStringList files = config->getInstallerRequiredFiles();
foreach(const QString &file, files)
@ -1268,6 +1264,11 @@ void COperationDialog::operationFail(const QString &error)
emit fail(error);
}
void COperationDialog::operationContinue()
{
emit done();
}
bool COperationDialog::operationShouldStop()
{
QMutexLocker locker(&m_abortingMutex);

View file

@ -129,6 +129,7 @@ protected:
virtual void operationProgress(qint64 current, const QString &filename);
virtual void operationSuccess(qint64 total);
virtual void operationFail(const QString &error);
virtual void operationContinue();
virtual bool operationShouldStop();

View file

@ -269,7 +269,18 @@ void CProfilesDialog::onExecutableBrowseClicked()
if (executable.isEmpty()) executable = defaultExecutable;
executable = QFileDialog::getOpenFileName(this, tr("Please choose Ryzom client executable to launch"), executable, tr("Executables (*.exe)"));
QString filter;
#ifdef Q_OS_WIN32
filter = tr("Executables (*.exe)");
#else
filter = tr("Executables (*)");
#endif
QFileDialog open;
open.setFilter(QDir::Executable | QDir::NoDotAndDotDot | QDir::Files);
executable = open.getOpenFileName(this, tr("Please choose Ryzom client executable to launch"), executable, filter);
if (executable.isEmpty()) return;

View file

@ -52,6 +52,38 @@ void CServer::loadFromSettings(const QSettings &settings)
comments = settings.value("comments").toString();
}
void CServer::loadFromServers(const CServers &servers)
{
foreach(const CServer &server, servers)
{
if (server.id == id)
{
// found the same server
loadFromServer(server);
break;
}
}
}
void CServer::loadFromServer(const CServer &server)
{
// copy all members
id = server.id;
name = server.name;
displayUrl = server.displayUrl;
filesListUrl = server.filesListUrl;
dataDownloadUrl = server.dataDownloadUrl;
dataDownloadFilename = server.dataDownloadFilename;
dataCompressedSize = server.dataCompressedSize;
dataUncompressedSize = server.dataUncompressedSize;
clientDownloadUrl = server.clientDownloadUrl;
clientDownloadFilename = server.clientDownloadFilename;
clientFilename = server.clientFilename;
clientFilenameOld = server.clientFilenameOld;
configurationFilename = server.configurationFilename;
comments = server.comments;
}
void CServer::saveToSettings(QSettings &settings) const
{
settings.setValue("id", id);

View file

@ -19,6 +19,10 @@
#include "operation.h"
class CServer;
typedef QVector<CServer> CServers;
class CServer
{
public:
@ -44,6 +48,8 @@ public:
QString comments;
void loadFromSettings(const QSettings &settings);
void loadFromServers(const CServers &servers);
void loadFromServer(const CServer &server);
void saveToSettings(QSettings &settings) const;
// helpers
@ -55,6 +61,4 @@ public:
extern const CServer NoServer;
typedef QVector<CServer> CServers;
#endif

View file

@ -54,8 +54,10 @@
#include <string>
#include <nel/misc/types_nl.h>
#include <nel/misc/config_file.h>
#include "nel/misc/types_nl.h"
#include "nel/misc/debug.h"
#include "nel/misc/path.h"
#include "nel/misc/system_info.h"
#endif

View file

@ -408,6 +408,14 @@ QString appendShortcutExtension(const QString &shortcut)
QString getVersionFromExecutable(const QString &path)
{
// check if file exists
if (!QFile::exists(path)) return "";
#ifndef Q_OS_WIN32
// fix executable permissions under UNIX
QFile::setPermissions(path, QFile::permissions(path) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
#endif
// launch executable with --version argument
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
@ -555,3 +563,51 @@ CCOMHelper::~CCOMHelper()
if (m_mustUninit) CoUninitialize();
#endif
}
CLogHelper::CLogHelper(const QString &logPath)
{
// disable nldebug messages in logs in Release
#ifdef NL_RELEASE
NLMISC::DisableNLDebug = true;
#endif
// don't create a file for the moment, we'll create it manually
NLMISC::createDebug(NULL, false);
// ryzom_installer.Log displayer
NLMISC::CFileDisplayer *LogDisplayer = new NLMISC::CFileDisplayer(qToUtf8(logPath) + "/ryzom_installer.log", true, "DEFAULT_FD");
NLMISC::DebugLog->addDisplayer(LogDisplayer);
NLMISC::InfoLog->addDisplayer(LogDisplayer);
NLMISC::WarningLog->addDisplayer(LogDisplayer);
NLMISC::ErrorLog->addDisplayer(LogDisplayer);
NLMISC::AssertLog->addDisplayer(LogDisplayer);
std::string type;
#ifdef NL_RELEASE
type = "RELEASE";
#else
type = "DEBUG";
#endif
// Display installer version
nlinfo("RYZOM INSTALLER VERSION: %s (%s)", Q2C(QApplication::applicationVersion()), type.c_str());
nlinfo("Memory: %s/%s", NLMISC::bytesToHumanReadable(NLMISC::CSystemInfo::availablePhysicalMemory()).c_str(), NLMISC::bytesToHumanReadable(NLMISC::CSystemInfo::totalPhysicalMemory()).c_str());
nlinfo("OS: %s", NLMISC::CSystemInfo::getOS().c_str());
nlinfo("Processor: %s", NLMISC::CSystemInfo::getProc().c_str());
}
CLogHelper::~CLogHelper()
{
NLMISC::IDisplayer *LogDisplayer = NLMISC::ErrorLog->getDisplayer("DEFAULT_FD");
if (LogDisplayer)
{
NLMISC::DebugLog->removeDisplayer(LogDisplayer);
NLMISC::InfoLog->removeDisplayer(LogDisplayer);
NLMISC::WarningLog->removeDisplayer(LogDisplayer);
NLMISC::ErrorLog->removeDisplayer(LogDisplayer);
NLMISC::AssertLog->removeDisplayer(LogDisplayer);
delete LogDisplayer;
}
}

View file

@ -58,6 +58,8 @@ QString qFromWide(const wchar_t *str);
// convert an QString to wchar_t*
wchar_t* qToWide(const QString &str);
#define Q2C(x) qToUtf8(x).c_str()
// check if a shortcut already exists (the extension will be added)
bool shortcutExists(const QString &shortcut);
@ -92,4 +94,12 @@ public:
~CCOMHelper();
};
// a little helper class to init/uninit log
class CLogHelper
{
public:
CLogHelper(const QString &logPath);
~CLogHelper();
};
#endif

View file

@ -39,85 +39,82 @@
<translation>Falscher Status-Code: %1</translation>
</message>
<message>
<location filename="../src/downloader.cpp" line="388"/>
<location filename="../src/downloader.cpp" line="382"/>
<source>HTTP error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Network error: %1</source>
<translation>Netzwerk-Fehler: %1</translation>
<translation type="vanished">Netzwerk-Fehler: %1</translation>
</message>
</context>
<context>
<name>CInstallDialog</name>
<message>
<location filename="../src/installdialog.cpp" line="45"/>
<source>Old installation: %1</source>
<translation>Alte Installation: %1</translation>
<translation type="vanished">Alte Installation: %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="69"/>
<source>Internet (%1 to download)</source>
<translation>Internet (%1 herunterzuladen)</translation>
<translation type="vanished">Internet (%1 herunterzuladen)</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="70"/>
<location filename="../src/installdialog.cpp" line="80"/>
<source>Files will be installed to (requires %1):</source>
<translation>Dateien werden installiert nach (benötigt %1):</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="103"/>
<source>Please choose directory where Ryzom is currently installed.</source>
<translation>Bitte wähle das Verzeichnis, in dem Ryzom momentan installiert ist.</translation>
<translation type="vanished">Bitte wähle das Verzeichnis, in dem Ryzom momentan installiert ist.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom</source>
<translation>Ryzom konnte nicht gefunden werden</translation>
<translation type="vanished">Ryzom konnte nicht gefunden werden</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom in selected directory. Please choose another one or cancel.</source>
<translation>Ryzom konnte im gewählten Verzeichnis nicht gefunden werden. Wähle bitte ein anderes Verzeichnis oder brich ab.</translation>
<translation type="vanished">Ryzom konnte im gewählten Verzeichnis nicht gefunden werden. Wähle bitte ein anderes Verzeichnis oder brich ab.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="129"/>
<location filename="../src/installdialog.cpp" line="115"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Bitte wähle ein Verzeichnis, in dem Ryzom installiert werden soll.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Another location: %1</source>
<translation>Ein anderer Ort: %1</translation>
<translation type="vanished">Ein anderer Ort: %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Undefined</source>
<translation>Undefiniert</translation>
<translation type="vanished">Undefiniert</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>Not enough free disk space</source>
<translation>Nicht genügend freier Festplattenspeicher</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Auf diesem Laufwerk ist nicht genügend freier Speicher verfügbar, bitte schaffe mehr Platz oder wähle ein Verzeichnis auf einem anderen Laufwerk.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>Unable to write in directory</source>
<translation>In das Verzeichnis konnte nicht geschrieben werden</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>Du hast nicht die Berechtigungen, um mit deinem derzeitigen Benutzer-Konto in dieses Verzeichnis zu schreiben, bitte wähle ein anderes Verzeichnis.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>Directory not empty</source>
<translation>Verzeichnist ist nicht leer</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Dieses Verzeichnis ist nicht leer, bitte wähle ein anderes.</translation>
</message>
@ -125,27 +122,27 @@
<context>
<name>CMainWindow</name>
<message>
<location filename="../src/mainwindow.cpp" line="268"/>
<location filename="../src/mainwindow.cpp" line="270"/>
<source>About %1</source>
<translation>Über %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="270"/>
<location filename="../src/mainwindow.cpp" line="272"/>
<source>Program to install, download and manage Ryzom profiles.</source>
<translation>Programm, um Ryzom-Profile zu installieren, herunterzuladen und zu verwalten.</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="274"/>
<source>Author: %1</source>
<translation>Autor: %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="273"/>
<location filename="../src/mainwindow.cpp" line="275"/>
<source>Copyright: %1</source>
<translation>Copyright: %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="274"/>
<location filename="../src/mainwindow.cpp" line="276"/>
<source>Support: %1</source>
<translation>Support: %1</translation>
</message>
@ -153,42 +150,42 @@
<context>
<name>CMigrateDialog</name>
<message>
<location filename="../src/migratedialog.cpp" line="66"/>
<location filename="../src/migratedialog.cpp" line="94"/>
<source>Files will be installed to (requires %1):</source>
<translation>Dateien werden installiert nach (benötigt %1):</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="103"/>
<location filename="../src/migratedialog.cpp" line="131"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Bitte wähle ein Verzeichnis, in dem Ryzom installiert werden soll.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>Not enough free disk space</source>
<translation>Nicht genügend freier Festplattenspeicher</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Auf diesem Laufwerk ist nicht genügend freier Speicher verfügbar, bitte schaffe mehr Platz oder wähle ein Verzeichnis auf einem anderen Laufwerk.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>Unable to write in directory</source>
<translation>Kann nicht in dieses Verzeichnis schreiben</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>Du hast nicht die Berechtigungen, mit deinem derzeitigen Benutzer-Konto in dieses Verzeichnis zu schreiben, bitte wähle ein anderes Verzeichnis.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>Directory not empty</source>
<translation>Verzeichnis ist nicht leer</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Dieses Verzeichnis ist nicht leer, bitte wähle ein anderes.</translation>
</message>
@ -200,109 +197,109 @@
<translation type="vanished">Profile aktualisieren</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="261"/>
<location filename="../src/operationdialog.cpp" line="275"/>
<source>Updating profiles...</source>
<translation>Aktualisiere Profile...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Confirmation</source>
<translation>Bestätigung</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Warning, this server doesn&apos;t support resume! If you stop download now, you won&apos;t be able to resume it later.
Are you sure to abort download?</source>
<translation>Warnung: dieser Server unterstützt kein Fortsetzen! Wenn du jetzt den Download abbrichst, wirst du nicht in der Lage sein, ihn später wieder fortzusetzen.
Willst du den Download wirklich abbrechen?</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="437"/>
<location filename="../src/operationdialog.cpp" line="453"/>
<source>%p% (%v/%m KiB)</source>
<translation>%p% (%v/%m KiB)</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="497"/>
<location filename="../src/operationdialog.cpp" line="513"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="518"/>
<location filename="../src/operationdialog.cpp" line="534"/>
<source>Downloading data required by server %1...</source>
<translation>Herunterzuladende Daten benötigt von Server %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="529"/>
<location filename="../src/operationdialog.cpp" line="545"/>
<source>Extracting data required by server %1...</source>
<translation>Zu extrahierende Daten benötigt von Server %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="551"/>
<location filename="../src/operationdialog.cpp" line="569"/>
<source>Downloading client required by server %1...</source>
<translation>Herunterzuladender Client benötigt von Server %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="562"/>
<location filename="../src/operationdialog.cpp" line="580"/>
<source>Extracting client required by server %1...</source>
<translation>Zu extrahierender Client benötigt von Server %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="589"/>
<location filename="../src/operationdialog.cpp" line="602"/>
<source>Copying data required by server %1...</source>
<translation>Zu kopierende Daten benötigt von Server %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="623"/>
<location filename="../src/operationdialog.cpp" line="631"/>
<source>Copying old profile to new location...</source>
<translation>Kopiere alte Profile zum neuen Zielort...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="658"/>
<location filename="../src/operationdialog.cpp" line="661"/>
<source>Extracting client to new location...</source>
<translation>Extrahiere Client an neuem Zielort...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="725"/>
<location filename="../src/operationdialog.cpp" line="726"/>
<source>Copying installer to new location...</source>
<translation>Kopiere Installer zum neuen Zielort...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="844"/>
<location filename="../src/operationdialog.cpp" line="847"/>
<source>Cleaning obsolete files...</source>
<translation>Bereinige überholte Dateien...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="859"/>
<location filename="../src/operationdialog.cpp" line="862"/>
<source>Creating default profile...</source>
<translation>Erstelle Standard-Profile...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="918"/>
<location filename="../src/operationdialog.cpp" line="921"/>
<source>Creating shortcuts for profile %1...</source>
<translation>Erstelle Verknüpfungen für Profile %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1022"/>
<location filename="../src/operationdialog.cpp" line="1007"/>
<source>Deleting client...</source>
<translation>Lösche Client...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1079"/>
<location filename="../src/operationdialog.cpp" line="1067"/>
<source>Adding profiles...</source>
<translation>Füge Profile hinzu...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1099"/>
<location filename="../src/operationdialog.cpp" line="1087"/>
<source>Deleting profiles...</source>
<translation>Lösche Profile...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1149"/>
<location filename="../src/operationdialog.cpp" line="1140"/>
<source>Deleting installer...</source>
<translation>Lösche Installer...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1191"/>
<location filename="../src/operationdialog.cpp" line="1192"/>
<source>Deleting downloaded files...</source>
<translation>Lösche heruntergeladene Dateien...</translation>
</message>
@ -352,12 +349,12 @@ Willst du den Download wirklich abbrechen?</translation>
<translation type="vanished">Kopiere Installer an neuen Ort</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>Uninstall old client</source>
<translation>Deinstalliere alten Client</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>An old version of Ryzom has been detected on this system, would you like to uninstall it to save space disk?</source>
<translation>Eine ältere Version von Ryzom wurde auf diesem System gefunden, möchtest du sie deinstallieren, um Festplattenspeicher zu sparen?</translation>
</message>
@ -382,7 +379,7 @@ Willst du den Download wirklich abbrechen?</translation>
<translation type="vanished">Lösche Client-Dateien</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1052"/>
<location filename="../src/operationdialog.cpp" line="1037"/>
<source>Unable to delete files for client %1</source>
<translation>Dateien für Client %1 konnten nicht gelöscht werden</translation>
</message>
@ -403,7 +400,7 @@ Willst du den Download wirklich abbrechen?</translation>
<translation type="vanished">Lösche Profil %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1128"/>
<location filename="../src/operationdialog.cpp" line="1116"/>
<source>Unable to delete files for profile %1</source>
<translation>Dateien für Profil %1 konnten nicht gelöscht werden</translation>
</message>
@ -419,24 +416,34 @@ Willst du den Download wirklich abbrechen?</translation>
<context>
<name>CProfilesDialog</name>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="69"/>
<source>Error</source>
<translation type="unfinished">Fehler</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>Confirmation</source>
<translation>Bestätigung</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>You&apos;re going to delete a profile, files won&apos;t be deleted and you&apos;ll have to do that manually.
Are you sure to delete this profile?</source>
<translation>Du bist dabei, ein Profil zu löschen. Es werden keine Dateien gelöscht, das musst du manuell tun.
Bist du sicher, dass du dieses Profil löschen willst?</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="277"/>
<source>Executables (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="283"/>
<source>Please choose Ryzom client executable to launch</source>
<translation>Bitte wähle die ausführbare Datei, um den Ryzom-Client zu starten</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="275"/>
<source>Executables (*.exe)</source>
<translation>Ausführbare Dateien (*.exe)</translation>
</message>
@ -516,9 +523,8 @@ Folge den verschiedenen Schritten und wähle aus den Optionen, die dir angeboten
<translation>Zeige erweiterte Parameter (Experte)</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="97"/>
<source>Files will be installed from:</source>
<translation>Dateien werden installiert von:</translation>
<translation type="vanished">Dateien werden installiert von:</translation>
</message>
<message>
<source>Old installation: %1</source>
@ -529,8 +535,7 @@ Folge den verschiedenen Schritten und wähle aus den Optionen, die dir angeboten
<translation type="vanished">Ein anderer Ort: %1</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="128"/>
<location filename="../ui/installdialog.ui" line="167"/>
<location filename="../ui/installdialog.ui" line="111"/>
<source>Browse...</source>
<translation>Durchsuchen...</translation>
</message>
@ -547,22 +552,22 @@ Folge den verschiedenen Schritten und wähle aus den Optionen, die dir angeboten
<translation type="vanished">c:\</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="160"/>
<location filename="../ui/installdialog.ui" line="104"/>
<source>Default</source>
<translation>Standard</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="177"/>
<location filename="../ui/installdialog.ui" line="121"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Möchtest du einen 64 bit oder 32 bit-Client verwenden?</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="183"/>
<location filename="../ui/installdialog.ui" line="127"/>
<source>64 bit (recommended)</source>
<translation>64 bit (empfohlen)</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="193"/>
<location filename="../ui/installdialog.ui" line="137"/>
<source>32 bit</source>
<translation>32 bit</translation>
</message>
@ -587,53 +592,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="86"/>
<location filename="../ui/mainwindow.ui" line="80"/>
<source>Atys</source>
<translation>Atys</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="94"/>
<location filename="../ui/mainwindow.ui" line="88"/>
<source>Play</source>
<translation>Spielen</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="101"/>
<location filename="../ui/mainwindow.ui" line="95"/>
<source>Configure</source>
<translation>Konfigurieren</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="121"/>
<location filename="../ui/mainwindow.ui" line="156"/>
<location filename="../ui/mainwindow.ui" line="115"/>
<location filename="../ui/mainwindow.ui" line="150"/>
<source>&amp;Settings</source>
<translation>&amp;Einstellungen</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="131"/>
<location filename="../ui/mainwindow.ui" line="125"/>
<source>&amp;Help</source>
<translation>&amp;Hilfe</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="141"/>
<location filename="../ui/mainwindow.ui" line="135"/>
<source>About Qt</source>
<translation>Über Qt</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="146"/>
<location filename="../ui/mainwindow.ui" line="140"/>
<source>About...</source>
<translation>Über...</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="151"/>
<location filename="../ui/mainwindow.ui" line="145"/>
<source>&amp;Profiles</source>
<translation>&amp;Profile</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="161"/>
<location filename="../ui/mainwindow.ui" line="155"/>
<source>&amp;Quit</source>
<translation>&amp;Beenden</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="166"/>
<location filename="../ui/mainwindow.ui" line="160"/>
<source>&amp;Uninstall</source>
<translation>&amp;Deinstallieren</translation>
</message>
@ -672,37 +677,37 @@ Drücke Weiter und folge den verschiedenen Schritten bis zum Ende.</translation>
<translation type="vanished">c:\</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="107"/>
<location filename="../ui/migratedialog.ui" line="101"/>
<source>Default</source>
<translation>Standard</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="114"/>
<location filename="../ui/migratedialog.ui" line="108"/>
<source>Browse...</source>
<translation>Durchsuchen...</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="124"/>
<location filename="../ui/migratedialog.ui" line="118"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Möchtest du einen 64 bit oder 32 bit-Client verwenden?</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="130"/>
<location filename="../ui/migratedialog.ui" line="124"/>
<source>64 bit (recommended)</source>
<translation>64 bit (empfohlen)</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="140"/>
<location filename="../ui/migratedialog.ui" line="134"/>
<source>32 bit</source>
<translation>32 bit</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="168"/>
<location filename="../ui/migratedialog.ui" line="162"/>
<source>Continue</source>
<translation>Weiter</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="175"/>
<location filename="../ui/migratedialog.ui" line="169"/>
<source>Quit</source>
<translation>Beenden</translation>
</message>
@ -873,69 +878,74 @@ Drücke Weiter und folge den verschiedenen Schritten bis zum Ende.</translation>
<translation>Selbstinstallation</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="300"/>
<location filename="../src/filesextractor.cpp" line="540"/>
<location filename="../src/filesextractor.cpp" line="322"/>
<location filename="../src/filesextractor.cpp" line="580"/>
<source>Unable to open %1</source>
<translation>%1 konnte nicht geöffnet werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="415"/>
<location filename="../src/filesextractor.cpp" line="437"/>
<source>Unable to open output file</source>
<translation>Ausgabe-Datei konnte nicht geöffnet werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="424"/>
<location filename="../src/filesextractor.cpp" line="446"/>
<source>Unable to write output file</source>
<translation>Ausgabe-Datei konnte nicht geschrieben werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="459"/>
<location filename="../src/filesextractor.cpp" line="467"/>
<location filename="../src/filesextractor.cpp" line="495"/>
<location filename="../src/filesextractor.cpp" line="503"/>
<source>7zip decoder doesn&apos;t support this archive</source>
<translation>7zip-Decoder unterstützt dieses Archiv nicht</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="463"/>
<location filename="../src/filesextractor.cpp" line="499"/>
<source>Unable to allocate memory</source>
<translation>Speicher konnte nicht zugewiesen werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="475"/>
<location filename="../src/filesextractor.cpp" line="507"/>
<source>File %1 is corrupted, unable to uncompress it</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="515"/>
<source>Error %1</source>
<translation>Fehler %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="502"/>
<location filename="../src/filesextractor.cpp" line="542"/>
<source>Unable to create directory %1</source>
<translation>Verzeichnis %1 konnte nicht erstellt werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="508"/>
<location filename="../src/filesextractor.cpp" line="548"/>
<source>Unable to set permissions of %1</source>
<translation>Berechtigungen für %1 konnten nicht gesetzt werden</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="617"/>
<location filename="../src/filesextractor.cpp" line="663"/>
<source>disk full</source>
<translation>Festplatte voll</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="621"/>
<location filename="../src/filesextractor.cpp" line="667"/>
<source>unable to write %1</source>
<translation>Konnte %1 nicht schreiben</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="625"/>
<location filename="../src/filesextractor.cpp" line="671"/>
<source>unable to read %1</source>
<translation>Konnte %1 nicht lesen</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="629"/>
<location filename="../src/filesextractor.cpp" line="675"/>
<source>failed (%1)</source>
<translation>Fehlgeschlagen (%1)</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="632"/>
<location filename="../src/filesextractor.cpp" line="678"/>
<source>Unable to unpack %1 to %2: %3</source>
<translation>Konnte %1 nicht nach %2 entpacken: %3</translation>
</message>
@ -944,36 +954,46 @@ Drücke Weiter und folge den verschiedenen Schritten bis zum Ende.</translation>
<source>Unable to copy file %1</source>
<translation>Konnte Datei %1 nicht kopieren</translation>
</message>
<message>
<location filename="../src/profile.cpp" line="58"/>
<source>Profile ID %1 is using invalid characters (only lowercase letters, numbers and underscore are allowed)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profile.cpp" line="68"/>
<source>Profile name %1 is using invalid character %2 at position %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/utils.cpp" line="30"/>
<location filename="../src/utils.cpp" line="33"/>
<source>B</source>
<translation>B</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="31"/>
<location filename="../src/utils.cpp" line="34"/>
<source>KiB</source>
<translation>KiB</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="32"/>
<location filename="../src/utils.cpp" line="35"/>
<source>MiB</source>
<translation>MiB</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="33"/>
<location filename="../src/utils.cpp" line="36"/>
<source>GiB</source>
<translation>GiB</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="34"/>
<location filename="../src/utils.cpp" line="37"/>
<source>TiB</source>
<translation>TiB</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="35"/>
<location filename="../src/utils.cpp" line="38"/>
<source>PiB</source>
<translation>PiB</translation>
</message>

View file

@ -39,85 +39,50 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/downloader.cpp" line="388"/>
<source>Network error: %1</source>
<location filename="../src/downloader.cpp" line="382"/>
<source>HTTP error: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CInstallDialog</name>
<message>
<location filename="../src/installdialog.cpp" line="45"/>
<source>Old installation: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="69"/>
<source>Internet (%1 to download)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="70"/>
<location filename="../src/installdialog.cpp" line="80"/>
<source>Files will be installed to (requires %1):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="103"/>
<source>Please choose directory where Ryzom is currently installed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom in selected directory. Please choose another one or cancel.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="129"/>
<location filename="../src/installdialog.cpp" line="115"/>
<source>Please choose directory to install Ryzom in</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Another location: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Undefined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>Not enough free disk space</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>Unable to write in directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>Directory not empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>This directory is not empty, please choose another one.</source>
<translation type="unfinished"></translation>
</message>
@ -125,27 +90,27 @@
<context>
<name>CMainWindow</name>
<message>
<location filename="../src/mainwindow.cpp" line="268"/>
<location filename="../src/mainwindow.cpp" line="270"/>
<source>About %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="270"/>
<location filename="../src/mainwindow.cpp" line="272"/>
<source>Program to install, download and manage Ryzom profiles.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="274"/>
<source>Author: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="273"/>
<location filename="../src/mainwindow.cpp" line="275"/>
<source>Copyright: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="274"/>
<location filename="../src/mainwindow.cpp" line="276"/>
<source>Support: %1</source>
<translation type="unfinished"></translation>
</message>
@ -153,42 +118,42 @@
<context>
<name>CMigrateDialog</name>
<message>
<location filename="../src/migratedialog.cpp" line="66"/>
<location filename="../src/migratedialog.cpp" line="94"/>
<source>Files will be installed to (requires %1):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="103"/>
<location filename="../src/migratedialog.cpp" line="131"/>
<source>Please choose directory to install Ryzom in</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>Not enough free disk space</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>Unable to write in directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>Directory not empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>This directory is not empty, please choose another one.</source>
<translation type="unfinished"></translation>
</message>
@ -196,128 +161,128 @@
<context>
<name>COperationDialog</name>
<message>
<location filename="../src/operationdialog.cpp" line="261"/>
<location filename="../src/operationdialog.cpp" line="275"/>
<source>Updating profiles...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Confirmation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Warning, this server doesn&apos;t support resume! If you stop download now, you won&apos;t be able to resume it later.
Are you sure to abort download?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="437"/>
<location filename="../src/operationdialog.cpp" line="453"/>
<source>%p% (%v/%m KiB)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="497"/>
<location filename="../src/operationdialog.cpp" line="513"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="518"/>
<location filename="../src/operationdialog.cpp" line="534"/>
<source>Downloading data required by server %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="529"/>
<location filename="../src/operationdialog.cpp" line="545"/>
<source>Extracting data required by server %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="551"/>
<location filename="../src/operationdialog.cpp" line="569"/>
<source>Downloading client required by server %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="562"/>
<location filename="../src/operationdialog.cpp" line="580"/>
<source>Extracting client required by server %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="589"/>
<location filename="../src/operationdialog.cpp" line="602"/>
<source>Copying data required by server %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="623"/>
<location filename="../src/operationdialog.cpp" line="631"/>
<source>Copying old profile to new location...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="658"/>
<location filename="../src/operationdialog.cpp" line="661"/>
<source>Extracting client to new location...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="725"/>
<location filename="../src/operationdialog.cpp" line="726"/>
<source>Copying installer to new location...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="844"/>
<location filename="../src/operationdialog.cpp" line="847"/>
<source>Cleaning obsolete files...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="859"/>
<location filename="../src/operationdialog.cpp" line="862"/>
<source>Creating default profile...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="918"/>
<location filename="../src/operationdialog.cpp" line="921"/>
<source>Creating shortcuts for profile %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1022"/>
<location filename="../src/operationdialog.cpp" line="1007"/>
<source>Deleting client...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1079"/>
<location filename="../src/operationdialog.cpp" line="1067"/>
<source>Adding profiles...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1099"/>
<location filename="../src/operationdialog.cpp" line="1087"/>
<source>Deleting profiles...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1149"/>
<location filename="../src/operationdialog.cpp" line="1140"/>
<source>Deleting installer...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1191"/>
<location filename="../src/operationdialog.cpp" line="1192"/>
<source>Deleting downloaded files...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>Uninstall old client</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>An old version of Ryzom has been detected on this system, would you like to uninstall it to save space disk?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1052"/>
<location filename="../src/operationdialog.cpp" line="1037"/>
<source>Unable to delete files for client %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1128"/>
<location filename="../src/operationdialog.cpp" line="1116"/>
<source>Unable to delete files for profile %1</source>
<translation type="unfinished"></translation>
</message>
@ -325,23 +290,33 @@ Are you sure to abort download?</source>
<context>
<name>CProfilesDialog</name>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="69"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>Confirmation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>You&apos;re going to delete a profile, files won&apos;t be deleted and you&apos;ll have to do that manually.
Are you sure to delete this profile?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="277"/>
<source>Executables (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="283"/>
<source>Please choose Ryzom client executable to launch</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="275"/>
<source>Executables (*.exe)</source>
<translation type="unfinished"></translation>
</message>
@ -417,33 +392,27 @@ Just follow the different steps and make your choice between the options presen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="97"/>
<source>Files will be installed from:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="128"/>
<location filename="../ui/installdialog.ui" line="167"/>
<location filename="../ui/installdialog.ui" line="111"/>
<source>Browse...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="160"/>
<location filename="../ui/installdialog.ui" line="104"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="177"/>
<location filename="../ui/installdialog.ui" line="121"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="183"/>
<location filename="../ui/installdialog.ui" line="127"/>
<source>64 bit (recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="193"/>
<location filename="../ui/installdialog.ui" line="137"/>
<source>32 bit</source>
<translation type="unfinished"></translation>
</message>
@ -456,53 +425,53 @@ Just follow the different steps and make your choice between the options presen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="86"/>
<location filename="../ui/mainwindow.ui" line="80"/>
<source>Atys</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="94"/>
<location filename="../ui/mainwindow.ui" line="88"/>
<source>Play</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="101"/>
<location filename="../ui/mainwindow.ui" line="95"/>
<source>Configure</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="121"/>
<location filename="../ui/mainwindow.ui" line="156"/>
<location filename="../ui/mainwindow.ui" line="115"/>
<location filename="../ui/mainwindow.ui" line="150"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="131"/>
<location filename="../ui/mainwindow.ui" line="125"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="141"/>
<location filename="../ui/mainwindow.ui" line="135"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="146"/>
<location filename="../ui/mainwindow.ui" line="140"/>
<source>About...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="151"/>
<location filename="../ui/mainwindow.ui" line="145"/>
<source>&amp;Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="161"/>
<location filename="../ui/mainwindow.ui" line="155"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="166"/>
<location filename="../ui/mainwindow.ui" line="160"/>
<source>&amp;Uninstall</source>
<translation type="unfinished"></translation>
</message>
@ -529,37 +498,37 @@ Just press Continue button and follow the different steps until everything is do
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="107"/>
<location filename="../ui/migratedialog.ui" line="101"/>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="114"/>
<location filename="../ui/migratedialog.ui" line="108"/>
<source>Browse...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="124"/>
<location filename="../ui/migratedialog.ui" line="118"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="130"/>
<location filename="../ui/migratedialog.ui" line="124"/>
<source>64 bit (recommended)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="140"/>
<location filename="../ui/migratedialog.ui" line="134"/>
<source>32 bit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="168"/>
<location filename="../ui/migratedialog.ui" line="162"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="175"/>
<location filename="../ui/migratedialog.ui" line="169"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
@ -718,69 +687,74 @@ Just press Continue button and follow the different steps until everything is do
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="300"/>
<location filename="../src/filesextractor.cpp" line="540"/>
<location filename="../src/filesextractor.cpp" line="322"/>
<location filename="../src/filesextractor.cpp" line="580"/>
<source>Unable to open %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="415"/>
<location filename="../src/filesextractor.cpp" line="437"/>
<source>Unable to open output file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="424"/>
<location filename="../src/filesextractor.cpp" line="446"/>
<source>Unable to write output file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="459"/>
<location filename="../src/filesextractor.cpp" line="467"/>
<location filename="../src/filesextractor.cpp" line="495"/>
<location filename="../src/filesextractor.cpp" line="503"/>
<source>7zip decoder doesn&apos;t support this archive</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="463"/>
<location filename="../src/filesextractor.cpp" line="499"/>
<source>Unable to allocate memory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="475"/>
<location filename="../src/filesextractor.cpp" line="507"/>
<source>File %1 is corrupted, unable to uncompress it</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="515"/>
<source>Error %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="502"/>
<location filename="../src/filesextractor.cpp" line="542"/>
<source>Unable to create directory %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="508"/>
<location filename="../src/filesextractor.cpp" line="548"/>
<source>Unable to set permissions of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="617"/>
<location filename="../src/filesextractor.cpp" line="663"/>
<source>disk full</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="621"/>
<location filename="../src/filesextractor.cpp" line="667"/>
<source>unable to write %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="625"/>
<location filename="../src/filesextractor.cpp" line="671"/>
<source>unable to read %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="629"/>
<location filename="../src/filesextractor.cpp" line="675"/>
<source>failed (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="632"/>
<location filename="../src/filesextractor.cpp" line="678"/>
<source>Unable to unpack %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -789,36 +763,46 @@ Just press Continue button and follow the different steps until everything is do
<source>Unable to copy file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profile.cpp" line="58"/>
<source>Profile ID %1 is using invalid characters (only lowercase letters, numbers and underscore are allowed)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profile.cpp" line="68"/>
<source>Profile name %1 is using invalid character %2 at position %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/utils.cpp" line="30"/>
<location filename="../src/utils.cpp" line="33"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="31"/>
<location filename="../src/utils.cpp" line="34"/>
<source>KiB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="32"/>
<location filename="../src/utils.cpp" line="35"/>
<source>MiB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="33"/>
<location filename="../src/utils.cpp" line="36"/>
<source>GiB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="34"/>
<location filename="../src/utils.cpp" line="37"/>
<source>TiB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/utils.cpp" line="35"/>
<location filename="../src/utils.cpp" line="38"/>
<source>PiB</source>
<translation type="unfinished"></translation>
</message>

View file

@ -39,85 +39,82 @@
<translation>Code de statut incorrect : %1</translation>
</message>
<message>
<location filename="../src/downloader.cpp" line="388"/>
<location filename="../src/downloader.cpp" line="382"/>
<source>HTTP error: %1</source>
<translation>Errreur HTTP : %1</translation>
</message>
<message>
<source>Network error: %1</source>
<translation>Erreur réseau : %1</translation>
<translation type="vanished">Erreur réseau : %1</translation>
</message>
</context>
<context>
<name>CInstallDialog</name>
<message>
<location filename="../src/installdialog.cpp" line="45"/>
<source>Old installation: %1</source>
<translation>Ancienne installation : %1</translation>
<translation type="vanished">Ancienne installation : %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="69"/>
<source>Internet (%1 to download)</source>
<translation>Internet (%1 à télécharger)</translation>
<translation type="vanished">Internet (%1 à télécharger)</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="70"/>
<location filename="../src/installdialog.cpp" line="80"/>
<source>Files will be installed to (requires %1):</source>
<translation>Les fichiers seront installés dans (%1 nécessaires) :</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="103"/>
<source>Please choose directory where Ryzom is currently installed.</source>
<translation>Veuillez choisir le répertoire Ryzom est actuellement installé.</translation>
<translation type="vanished">Veuillez choisir le répertoire Ryzom est actuellement installé.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom</source>
<translation>Impossible de trouver Ryzom</translation>
<translation type="vanished">Impossible de trouver Ryzom</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom in selected directory. Please choose another one or cancel.</source>
<translation>Impossible de trouver Ryzom dans le répertoire sélectionné. Veuillez en choisir un autre ou annuler.</translation>
<translation type="vanished">Impossible de trouver Ryzom dans le répertoire sélectionné. Veuillez en choisir un autre ou annuler.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="129"/>
<location filename="../src/installdialog.cpp" line="115"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Veuillez choisir le répertoire Ryzom sera installé</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Another location: %1</source>
<translation>Autre emplacement : %1</translation>
<translation type="vanished">Autre emplacement : %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Undefined</source>
<translation>Non défini</translation>
<translation type="vanished">Non défini</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>Not enough free disk space</source>
<translation>Espace disque insuffisant</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Vous ne disposez pas assez d&apos;espace libre sur ce disque, veuillez en libérer ou choisir un répertoire sur un autre disque.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>Unable to write in directory</source>
<translation>Impossible d&apos;écrire dans le répertoire</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>Vous n&apos;avez pas la permission d&apos;écrire dans ce répertoire avec votre compte utilisateur courant, veuillez en choisir un autre.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>Directory not empty</source>
<translation>Répertoire non vide</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Ce répertoire n&apos;est pas vide, veuillez en choisir un autre.</translation>
</message>
@ -129,27 +126,27 @@
<context>
<name>CMainWindow</name>
<message>
<location filename="../src/mainwindow.cpp" line="268"/>
<location filename="../src/mainwindow.cpp" line="270"/>
<source>About %1</source>
<translation>À propos de %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="270"/>
<location filename="../src/mainwindow.cpp" line="272"/>
<source>Program to install, download and manage Ryzom profiles.</source>
<translation>Programme pour installer, télécharger et gérer les profils de Ryzom.</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="274"/>
<source>Author: %1</source>
<translation>Auteur : %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="273"/>
<location filename="../src/mainwindow.cpp" line="275"/>
<source>Copyright: %1</source>
<translation>Copyright : %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="274"/>
<location filename="../src/mainwindow.cpp" line="276"/>
<source>Support: %1</source>
<translation>Assistance : %1</translation>
</message>
@ -157,42 +154,42 @@
<context>
<name>CMigrateDialog</name>
<message>
<location filename="../src/migratedialog.cpp" line="66"/>
<location filename="../src/migratedialog.cpp" line="94"/>
<source>Files will be installed to (requires %1):</source>
<translation>Les fichiers seront installés dans (%1 nécessaires) :</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="103"/>
<location filename="../src/migratedialog.cpp" line="131"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Veuillez choisir le répertoire installer Ryzom</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>Not enough free disk space</source>
<translation>Espace disque insuffisant</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Vous ne disposez pas assez d&apos;espace libre sur ce disque, veuillez en libérer ou choisir un répertoire sur un autre disque.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>Unable to write in directory</source>
<translation>Impossible d&apos;écrire dans le répertoire</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>Vous n&apos;avez pas la permission d&apos;écrire dans ce répertoire avec votre compte utilisateur courant, veuillez en choisir un autre.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>Directory not empty</source>
<translation>Répertoire non vide</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Ce répertoire n&apos;est pas vide, veuillez en choisir un autre.</translation>
</message>
@ -208,109 +205,109 @@
<translation type="vanished">Mettre à jour les profils</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="261"/>
<location filename="../src/operationdialog.cpp" line="275"/>
<source>Updating profiles...</source>
<translation>Mise à jour des profils...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Confirmation</source>
<translation>Confirmation</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Warning, this server doesn&apos;t support resume! If you stop download now, you won&apos;t be able to resume it later.
Are you sure to abort download?</source>
<translation>Attention, ce serveur ne supporte pas la reprise de téléchargement ! Si vous arrêtez le téléchargement maintenant, vous ne pourrez pas le poursuivre ultérieurement.
Êtes-vous sûr d&apos;interrompre le téléchargement ?</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="437"/>
<location filename="../src/operationdialog.cpp" line="453"/>
<source>%p% (%v/%m KiB)</source>
<translation>%p% (%v/%m Kio)</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="497"/>
<location filename="../src/operationdialog.cpp" line="513"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="518"/>
<location filename="../src/operationdialog.cpp" line="534"/>
<source>Downloading data required by server %1...</source>
<translation>Téléchargement des données nécessaires pour le serveur %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="529"/>
<location filename="../src/operationdialog.cpp" line="545"/>
<source>Extracting data required by server %1...</source>
<translation>Extraction des données nécessaires pour le serveur %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="551"/>
<location filename="../src/operationdialog.cpp" line="569"/>
<source>Downloading client required by server %1...</source>
<translation>Téléchargement du client nécessaire pour le serveur %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="562"/>
<location filename="../src/operationdialog.cpp" line="580"/>
<source>Extracting client required by server %1...</source>
<translation>Extraction du client nécessaire pour le serveur %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="589"/>
<location filename="../src/operationdialog.cpp" line="602"/>
<source>Copying data required by server %1...</source>
<translation>Copie des données nécessaires pour le serveur %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="623"/>
<location filename="../src/operationdialog.cpp" line="631"/>
<source>Copying old profile to new location...</source>
<translation>Copie de l&apos;ancien profil vers un nouvel emplacement...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="658"/>
<location filename="../src/operationdialog.cpp" line="661"/>
<source>Extracting client to new location...</source>
<translation>Extraction du client vers un nouvel emplacement...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="725"/>
<location filename="../src/operationdialog.cpp" line="726"/>
<source>Copying installer to new location...</source>
<translation>Copie de l&apos;installateur vers un nouvel emplacement...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="844"/>
<location filename="../src/operationdialog.cpp" line="847"/>
<source>Cleaning obsolete files...</source>
<translation>Nettoyage des fichiers obsolètes...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="859"/>
<location filename="../src/operationdialog.cpp" line="862"/>
<source>Creating default profile...</source>
<translation>Création du profil par défaut...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="918"/>
<location filename="../src/operationdialog.cpp" line="921"/>
<source>Creating shortcuts for profile %1...</source>
<translation>Création des raccourcis pour le profil %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1022"/>
<location filename="../src/operationdialog.cpp" line="1007"/>
<source>Deleting client...</source>
<translation>Suppression du client...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1079"/>
<location filename="../src/operationdialog.cpp" line="1067"/>
<source>Adding profiles...</source>
<translation>Ajout des profils...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1099"/>
<location filename="../src/operationdialog.cpp" line="1087"/>
<source>Deleting profiles...</source>
<translation>Suppression des profils...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1149"/>
<location filename="../src/operationdialog.cpp" line="1140"/>
<source>Deleting installer...</source>
<translation>Suppression de l&apos;installateur...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1191"/>
<location filename="../src/operationdialog.cpp" line="1192"/>
<source>Deleting downloaded files...</source>
<translation>Suppression des fichiers téléchargés...</translation>
</message>
@ -359,12 +356,12 @@ Are you sure to abort download?</source>
<translation type="vanished">Copier l&apos;installateur vers un nouvel emplacement</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>Uninstall old client</source>
<translation>Désinstaller l&apos;ancien client</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>An old version of Ryzom has been detected on this system, would you like to uninstall it to save space disk?</source>
<translation>Une ancienne version de Ryzom a é détectée sur ce système, souhaitez-vous la désinstaller afin de libérer de l&apos;espace disque ?</translation>
</message>
@ -389,7 +386,7 @@ Are you sure to abort download?</source>
<translation type="vanished">Supprimer les fichiers du client</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1052"/>
<location filename="../src/operationdialog.cpp" line="1037"/>
<source>Unable to delete files for client %1</source>
<translation>Impossible de supprimer les fichiers du client %1</translation>
</message>
@ -410,7 +407,7 @@ Are you sure to abort download?</source>
<translation type="vanished">Suppression du profil %1 en cours...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1128"/>
<location filename="../src/operationdialog.cpp" line="1116"/>
<source>Unable to delete files for profile %1</source>
<translation>Impossible de supprimer les fichiers du profil %1</translation>
</message>
@ -426,24 +423,34 @@ Are you sure to abort download?</source>
<context>
<name>CProfilesDialog</name>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="69"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>Confirmation</source>
<translation>Confirmation</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>You&apos;re going to delete a profile, files won&apos;t be deleted and you&apos;ll have to do that manually.
Are you sure to delete this profile?</source>
<translation>Vous êtes sur le point de supprimer un profil, les fichiers ne seront pas supprimés et vous devrez le faire manuellement.
Êtes-vous sûr de supprimer ce profil ?</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="277"/>
<source>Executables (*)</source>
<translation>Exécutables (*)</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="283"/>
<source>Please choose Ryzom client executable to launch</source>
<translation>Veuillez choisir l&apos;exécutable du client de Ryzom à lancer</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="275"/>
<source>Executables (*.exe)</source>
<translation>Exécutables (*.exe)</translation>
</message>
@ -523,9 +530,8 @@ Vous n&apos;avez qu&apos;à suivre les différentes étapes et faire un choix en
<translation>Afficher les paramètres avancés (expert)</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="97"/>
<source>Files will be installed from:</source>
<translation>Les fichiers seront installés à partir de :</translation>
<translation type="vanished">Les fichiers seront installés à partir de :</translation>
</message>
<message>
<source>Old installation: %1</source>
@ -536,8 +542,7 @@ Vous n&apos;avez qu&apos;à suivre les différentes étapes et faire un choix en
<translation type="vanished">Autre emplacement : %1</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="128"/>
<location filename="../ui/installdialog.ui" line="167"/>
<location filename="../ui/installdialog.ui" line="111"/>
<source>Browse...</source>
<translation>Parcourir...</translation>
</message>
@ -558,22 +563,22 @@ Vous n&apos;avez qu&apos;à suivre les différentes étapes et faire un choix en
<translation type="vanished">c:\</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="160"/>
<location filename="../ui/installdialog.ui" line="104"/>
<source>Default</source>
<translation>Défaut</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="177"/>
<location filename="../ui/installdialog.ui" line="121"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Préférez-vous utiliser un client 64 ou 32 bits ?</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="183"/>
<location filename="../ui/installdialog.ui" line="127"/>
<source>64 bit (recommended)</source>
<translation>64 bits (recommandé)</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="193"/>
<location filename="../ui/installdialog.ui" line="137"/>
<source>32 bit</source>
<translation>32 bits</translation>
</message>
@ -598,53 +603,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="86"/>
<location filename="../ui/mainwindow.ui" line="80"/>
<source>Atys</source>
<translation>Atys</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="94"/>
<location filename="../ui/mainwindow.ui" line="88"/>
<source>Play</source>
<translation>Jouer</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="101"/>
<location filename="../ui/mainwindow.ui" line="95"/>
<source>Configure</source>
<translation>Configurer</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="121"/>
<location filename="../ui/mainwindow.ui" line="156"/>
<location filename="../ui/mainwindow.ui" line="115"/>
<location filename="../ui/mainwindow.ui" line="150"/>
<source>&amp;Settings</source>
<translation>&amp;Préférences</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="131"/>
<location filename="../ui/mainwindow.ui" line="125"/>
<source>&amp;Help</source>
<translation>&amp;Aide</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="141"/>
<location filename="../ui/mainwindow.ui" line="135"/>
<source>About Qt</source>
<translation>À propos de Qt</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="146"/>
<location filename="../ui/mainwindow.ui" line="140"/>
<source>About...</source>
<translation>À propos de...</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="151"/>
<location filename="../ui/mainwindow.ui" line="145"/>
<source>&amp;Profiles</source>
<translation>&amp;Profils</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="161"/>
<location filename="../ui/mainwindow.ui" line="155"/>
<source>&amp;Quit</source>
<translation>&amp;Quitter</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="166"/>
<location filename="../ui/mainwindow.ui" line="160"/>
<source>&amp;Uninstall</source>
<translation>&amp;Désinstaller</translation>
</message>
@ -683,37 +688,37 @@ Vous n&apos;avez qu&apos;à cliquer sur Suivant et suivre les différentes étap
<translation type="vanished">c:\</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="107"/>
<location filename="../ui/migratedialog.ui" line="101"/>
<source>Default</source>
<translation>Défaut</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="114"/>
<location filename="../ui/migratedialog.ui" line="108"/>
<source>Browse...</source>
<translation>Parcourir...</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="124"/>
<location filename="../ui/migratedialog.ui" line="118"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Préférez-vous utiliser un client 64 ou 32 bits ?</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="130"/>
<location filename="../ui/migratedialog.ui" line="124"/>
<source>64 bit (recommended)</source>
<translation>64 bits (recommandé)</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="140"/>
<location filename="../ui/migratedialog.ui" line="134"/>
<source>32 bit</source>
<translation>32 bits</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="168"/>
<location filename="../ui/migratedialog.ui" line="162"/>
<source>Continue</source>
<translation>Suivant</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="175"/>
<location filename="../ui/migratedialog.ui" line="169"/>
<source>Quit</source>
<translation>Quitter</translation>
</message>
@ -884,69 +889,74 @@ Vous n&apos;avez qu&apos;à cliquer sur Suivant et suivre les différentes étap
<translation>S&apos;auto-installer</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="300"/>
<location filename="../src/filesextractor.cpp" line="540"/>
<location filename="../src/filesextractor.cpp" line="322"/>
<location filename="../src/filesextractor.cpp" line="580"/>
<source>Unable to open %1</source>
<translation>Impossible d&apos;ouvrir %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="415"/>
<location filename="../src/filesextractor.cpp" line="437"/>
<source>Unable to open output file</source>
<translation>Impossible d&apos;ouvrir le fichier de sortie</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="424"/>
<location filename="../src/filesextractor.cpp" line="446"/>
<source>Unable to write output file</source>
<translation>Impossible d&apos;écrire le fichier de sortie</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="459"/>
<location filename="../src/filesextractor.cpp" line="467"/>
<location filename="../src/filesextractor.cpp" line="495"/>
<location filename="../src/filesextractor.cpp" line="503"/>
<source>7zip decoder doesn&apos;t support this archive</source>
<translation>Le décodeur 7zip n&apos;est pas compatible avec cette archive</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="463"/>
<location filename="../src/filesextractor.cpp" line="499"/>
<source>Unable to allocate memory</source>
<translation>Impossible d&apos;allouer la mémoire</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="475"/>
<location filename="../src/filesextractor.cpp" line="507"/>
<source>File %1 is corrupted, unable to uncompress it</source>
<translation>Le fichier %1 est corrompu, impossible de le décompresser</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="515"/>
<source>Error %1</source>
<translation>Erreur %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="502"/>
<location filename="../src/filesextractor.cpp" line="542"/>
<source>Unable to create directory %1</source>
<translation>Impossible de créer le répertoire %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="508"/>
<location filename="../src/filesextractor.cpp" line="548"/>
<source>Unable to set permissions of %1</source>
<translation>Impossible de définir les permissions de %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="617"/>
<location filename="../src/filesextractor.cpp" line="663"/>
<source>disk full</source>
<translation>disque plein</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="621"/>
<location filename="../src/filesextractor.cpp" line="667"/>
<source>unable to write %1</source>
<translation>impossible d&apos;écrire %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="625"/>
<location filename="../src/filesextractor.cpp" line="671"/>
<source>unable to read %1</source>
<translation>impossible de lire %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="629"/>
<location filename="../src/filesextractor.cpp" line="675"/>
<source>failed (%1)</source>
<translation>échec (%1)</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="632"/>
<location filename="../src/filesextractor.cpp" line="678"/>
<source>Unable to unpack %1 to %2: %3</source>
<translation>Impossible d&apos;extraire %1 vers %2 : %3 </translation>
</message>
@ -955,36 +965,46 @@ Vous n&apos;avez qu&apos;à cliquer sur Suivant et suivre les différentes étap
<source>Unable to copy file %1</source>
<translation>Impossible de copier le fichier %1</translation>
</message>
<message>
<location filename="../src/profile.cpp" line="58"/>
<source>Profile ID %1 is using invalid characters (only lowercase letters, numbers and underscore are allowed)</source>
<translation>L&apos;identifiant du profil %1 utilise des caractères invalides (seuls les lettres, chiffres et underscore sont autorisés)l</translation>
</message>
<message>
<location filename="../src/profile.cpp" line="68"/>
<source>Profile name %1 is using invalid character %2 at position %3</source>
<translation>Le nom du profil %1 utilise un caractère invalide %2 à la position %3</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/utils.cpp" line="30"/>
<location filename="../src/utils.cpp" line="33"/>
<source>B</source>
<translation>o</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="31"/>
<location filename="../src/utils.cpp" line="34"/>
<source>KiB</source>
<translation>Kio</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="32"/>
<location filename="../src/utils.cpp" line="35"/>
<source>MiB</source>
<translation>Mio</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="33"/>
<location filename="../src/utils.cpp" line="36"/>
<source>GiB</source>
<translation>Gio</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="34"/>
<location filename="../src/utils.cpp" line="37"/>
<source>TiB</source>
<translation>Tio</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="35"/>
<location filename="../src/utils.cpp" line="38"/>
<source>PiB</source>
<translation>Pio</translation>
</message>

View file

@ -39,85 +39,82 @@
<translation>Некорректный код состояния: %1</translation>
</message>
<message>
<location filename="../src/downloader.cpp" line="388"/>
<location filename="../src/downloader.cpp" line="382"/>
<source>HTTP error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Network error: %1</source>
<translation>Ошибка сети: %1</translation>
<translation type="vanished">Ошибка сети: %1</translation>
</message>
</context>
<context>
<name>CInstallDialog</name>
<message>
<location filename="../src/installdialog.cpp" line="45"/>
<source>Old installation: %1</source>
<translation>Предыдущая установка: %1</translation>
<translation type="vanished">Предыдущая установка: %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="69"/>
<source>Internet (%1 to download)</source>
<translation>Интернет (%1 для загрузки)</translation>
<translation type="vanished">Интернет (%1 для загрузки)</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="70"/>
<location filename="../src/installdialog.cpp" line="80"/>
<source>Files will be installed to (requires %1):</source>
<translation>Файлы будут установлены в (требуется %1):</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="103"/>
<source>Please choose directory where Ryzom is currently installed.</source>
<translation>Пожалуйста, выберите директорию, в которой установен Ryzom.</translation>
<translation type="vanished">Пожалуйста, выберите директорию, в которой установен Ryzom.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom</source>
<translation>Невозможно найти Ryzom</translation>
<translation type="vanished">Невозможно найти Ryzom</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="109"/>
<source>Unable to find Ryzom in selected directory. Please choose another one or cancel.</source>
<translation>Невозможно найти Ryzom в выбранной директории. Пожалуйста, выберите другую директорию или отмену.</translation>
<translation type="vanished">Невозможно найти Ryzom в выбранной директории. Пожалуйста, выберите другую директорию или отмену.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="129"/>
<location filename="../src/installdialog.cpp" line="115"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Пожалуйста, выберите директорию для установки Ryzom</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Another location: %1</source>
<translation>Другое местоположение: %1</translation>
<translation type="vanished">Другое местоположение: %1</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="140"/>
<source>Undefined</source>
<translation>Не определено</translation>
<translation type="vanished">Не определено</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>Not enough free disk space</source>
<translation>Недостаточно свободного места</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="157"/>
<location filename="../src/installdialog.cpp" line="138"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Недостаточно свободного места на выбранном диске, пожалуйста освободите место на диске или выберите директорию на другом диске.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>Unable to write in directory</source>
<translation>Невозможно осуществить запись в директорию</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="185"/>
<location filename="../src/installdialog.cpp" line="157"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>У вашего текущего пользоввателя нет права записи в эту директорию, пожалуйста, выберите другую директорию.</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>Directory not empty</source>
<translation>Директория не является пустой</translation>
</message>
<message>
<location filename="../src/installdialog.cpp" line="191"/>
<location filename="../src/installdialog.cpp" line="166"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Эта директория не является пустой, пожалуйста, выберите другую.</translation>
</message>
@ -125,27 +122,27 @@
<context>
<name>CMainWindow</name>
<message>
<location filename="../src/mainwindow.cpp" line="268"/>
<location filename="../src/mainwindow.cpp" line="270"/>
<source>About %1</source>
<translation>О %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="270"/>
<location filename="../src/mainwindow.cpp" line="272"/>
<source>Program to install, download and manage Ryzom profiles.</source>
<translation>Программа для установки, загрузки и управления профилями Ryzom.</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="274"/>
<source>Author: %1</source>
<translation>Автор: %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="273"/>
<location filename="../src/mainwindow.cpp" line="275"/>
<source>Copyright: %1</source>
<translation>Копирайт: %1</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="274"/>
<location filename="../src/mainwindow.cpp" line="276"/>
<source>Support: %1</source>
<translation>Поддержка: %1</translation>
</message>
@ -153,42 +150,42 @@
<context>
<name>CMigrateDialog</name>
<message>
<location filename="../src/migratedialog.cpp" line="66"/>
<location filename="../src/migratedialog.cpp" line="94"/>
<source>Files will be installed to (requires %1):</source>
<translation>Файлы будут установлены в (требуется %1):</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="103"/>
<location filename="../src/migratedialog.cpp" line="131"/>
<source>Please choose directory to install Ryzom in</source>
<translation>Пожалуйста, выберете директорию для установки Ryzom</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>Not enough free disk space</source>
<translation>Недостаточно свободного места</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="126"/>
<location filename="../src/migratedialog.cpp" line="153"/>
<source>You don&apos;t have enough free space on this disk, please make more space or choose a directory on another disk.</source>
<translation>Недостаточно свободного места на выбранном диске, пожалуйста освободите место на диске или выберите директорию на другом диске.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>Unable to write in directory</source>
<translation>Невозможно осуществить запись в директорию</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="154"/>
<location filename="../src/migratedialog.cpp" line="172"/>
<source>You don&apos;t have the permission to write in this directory with your current user account, please choose another directory.</source>
<translation>У вашего текущего пользоввателя нет права записи в эту директорию, пожалуйста, выберите другую директорию.</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>Directory not empty</source>
<translation>Директория не является пустой</translation>
</message>
<message>
<location filename="../src/migratedialog.cpp" line="160"/>
<location filename="../src/migratedialog.cpp" line="181"/>
<source>This directory is not empty, please choose another one.</source>
<translation>Эта директория не является пустой, пожалуйста, выберите другую.</translation>
</message>
@ -196,108 +193,108 @@
<context>
<name>COperationDialog</name>
<message>
<location filename="../src/operationdialog.cpp" line="261"/>
<location filename="../src/operationdialog.cpp" line="275"/>
<source>Updating profiles...</source>
<translation>Обновление профилей...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Confirmation</source>
<translation>Подтверждение</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="412"/>
<location filename="../src/operationdialog.cpp" line="428"/>
<source>Warning, this server doesn&apos;t support resume! If you stop download now, you won&apos;t be able to resume it later.
Are you sure to abort download?</source>
<translation>Внимание, данный сервер не поддерживает возобновление загрузки! Если вы сейчас прервете загрузку, вы не сможете возобновить ее позднее. Вы уверены, что хотите прервать загрузку?</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="437"/>
<location filename="../src/operationdialog.cpp" line="453"/>
<source>%p% (%v/%m KiB)</source>
<translation>%p% (%v/%m Кб)</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="497"/>
<location filename="../src/operationdialog.cpp" line="513"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="518"/>
<location filename="../src/operationdialog.cpp" line="534"/>
<source>Downloading data required by server %1...</source>
<translation>Загрузка данных, необходимых серверу %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="529"/>
<location filename="../src/operationdialog.cpp" line="545"/>
<source>Extracting data required by server %1...</source>
<translation>Извлечение данных, необходимых серверу %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="551"/>
<location filename="../src/operationdialog.cpp" line="569"/>
<source>Downloading client required by server %1...</source>
<translation>Загрузка клиента, необходимого серверу %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="562"/>
<location filename="../src/operationdialog.cpp" line="580"/>
<source>Extracting client required by server %1...</source>
<translation>Извлечение файлов клиента, необходимых серверу %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="589"/>
<location filename="../src/operationdialog.cpp" line="602"/>
<source>Copying data required by server %1...</source>
<translation>Копирование данных, необходимых серверу %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="623"/>
<location filename="../src/operationdialog.cpp" line="631"/>
<source>Copying old profile to new location...</source>
<translation>Копирование предыдущего профиля в новое местоположение...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="658"/>
<location filename="../src/operationdialog.cpp" line="661"/>
<source>Extracting client to new location...</source>
<translation>Извлечение файлов клиента в новое местоположение...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="725"/>
<location filename="../src/operationdialog.cpp" line="726"/>
<source>Copying installer to new location...</source>
<translation>Копирование инсталлятора в новое местоположение...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="844"/>
<location filename="../src/operationdialog.cpp" line="847"/>
<source>Cleaning obsolete files...</source>
<translation>Удаление устаревших файлов...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="859"/>
<location filename="../src/operationdialog.cpp" line="862"/>
<source>Creating default profile...</source>
<translation>Создание профиля по умолчанию...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="918"/>
<location filename="../src/operationdialog.cpp" line="921"/>
<source>Creating shortcuts for profile %1...</source>
<translation>Создание ярлыков для профиля %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1022"/>
<location filename="../src/operationdialog.cpp" line="1007"/>
<source>Deleting client...</source>
<translation>Удаление клиента...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1079"/>
<location filename="../src/operationdialog.cpp" line="1067"/>
<source>Adding profiles...</source>
<translation>Добавление профилей...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1099"/>
<location filename="../src/operationdialog.cpp" line="1087"/>
<source>Deleting profiles...</source>
<translation>Удаление профилей...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1149"/>
<location filename="../src/operationdialog.cpp" line="1140"/>
<source>Deleting installer...</source>
<translation>Удаление инсталлятора...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1191"/>
<location filename="../src/operationdialog.cpp" line="1192"/>
<source>Deleting downloaded files...</source>
<translation>Удаление загруженных файлов...</translation>
</message>
@ -334,12 +331,12 @@ Are you sure to abort download?</source>
<translation type="vanished">Копирование %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>Uninstall old client</source>
<translation>Удалить предыдущую версию клиента</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="809"/>
<location filename="../src/operationdialog.cpp" line="812"/>
<source>An old version of Ryzom has been detected on this system, would you like to uninstall it to save space disk?</source>
<translation>В системе обнаружена предыдущая версия Ryzom, вы хотите удалить ее чтобы освободить место на диске?</translation>
</message>
@ -360,7 +357,7 @@ Are you sure to abort download?</source>
<translation type="vanished">Удалить файлы клиента</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1052"/>
<location filename="../src/operationdialog.cpp" line="1037"/>
<source>Unable to delete files for client %1</source>
<translation>Невозможно удалить файлы клиента %1</translation>
</message>
@ -381,7 +378,7 @@ Are you sure to abort download?</source>
<translation type="vanished">Удаление профиля %1...</translation>
</message>
<message>
<location filename="../src/operationdialog.cpp" line="1128"/>
<location filename="../src/operationdialog.cpp" line="1116"/>
<source>Unable to delete files for profile %1</source>
<translation>Невозможно удалить файлы профиля %1</translation>
</message>
@ -397,23 +394,33 @@ Are you sure to abort download?</source>
<context>
<name>CProfilesDialog</name>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="69"/>
<source>Error</source>
<translation type="unfinished">Ошибка</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>Confirmation</source>
<translation>Подтверждение</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="71"/>
<location filename="../src/profilesdialog.cpp" line="86"/>
<source>You&apos;re going to delete a profile, files won&apos;t be deleted and you&apos;ll have to do that manually.
Are you sure to delete this profile?</source>
<translation>Вы собираетесь удалить профиль, файлы профиля не будут удалены автоматически и их необходимо удалить вручную. Вы уверены, что хотите удалить этот профиль?</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="277"/>
<source>Executables (*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="283"/>
<source>Please choose Ryzom client executable to launch</source>
<translation>Пожалуйста, выберете исполняемый файл для запуска клиента Ryzom</translation>
</message>
<message>
<location filename="../src/profilesdialog.cpp" line="257"/>
<location filename="../src/profilesdialog.cpp" line="275"/>
<source>Executables (*.exe)</source>
<translation>Исполняемые файлы (*.exe)</translation>
</message>
@ -493,9 +500,8 @@ Just follow the different steps and make your choice between the options presen
<translation>Показать расширенные параметры</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="97"/>
<source>Files will be installed from:</source>
<translation>Файлы будут установлены из:</translation>
<translation type="vanished">Файлы будут установлены из:</translation>
</message>
<message>
<source>Old installation: %1</source>
@ -506,8 +512,7 @@ Just follow the different steps and make your choice between the options presen
<translation type="vanished">Другое местоположение: %1</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="128"/>
<location filename="../ui/installdialog.ui" line="167"/>
<location filename="../ui/installdialog.ui" line="111"/>
<source>Browse...</source>
<translation>Открыть...</translation>
</message>
@ -524,22 +529,22 @@ Just follow the different steps and make your choice between the options presen
<translation type="vanished">C:\</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="160"/>
<location filename="../ui/installdialog.ui" line="104"/>
<source>Default</source>
<translation>По умолчанию</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="177"/>
<location filename="../ui/installdialog.ui" line="121"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Вы предпочитаете использовать 64-битный или 32-битный клиент?</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="183"/>
<location filename="../ui/installdialog.ui" line="127"/>
<source>64 bit (recommended)</source>
<translation>64-битный (рекомендуемый)</translation>
</message>
<message>
<location filename="../ui/installdialog.ui" line="193"/>
<location filename="../ui/installdialog.ui" line="137"/>
<source>32 bit</source>
<translation>32-битный</translation>
</message>
@ -564,53 +569,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="86"/>
<location filename="../ui/mainwindow.ui" line="80"/>
<source>Atys</source>
<translation>Atys</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="94"/>
<location filename="../ui/mainwindow.ui" line="88"/>
<source>Play</source>
<translation>Играть</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="101"/>
<location filename="../ui/mainwindow.ui" line="95"/>
<source>Configure</source>
<translation>Настроить</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="121"/>
<location filename="../ui/mainwindow.ui" line="156"/>
<location filename="../ui/mainwindow.ui" line="115"/>
<location filename="../ui/mainwindow.ui" line="150"/>
<source>&amp;Settings</source>
<translation>&amp;Настройки</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="131"/>
<location filename="../ui/mainwindow.ui" line="125"/>
<source>&amp;Help</source>
<translation>&amp;Помощь</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="141"/>
<location filename="../ui/mainwindow.ui" line="135"/>
<source>About Qt</source>
<translation>О Qt</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="146"/>
<location filename="../ui/mainwindow.ui" line="140"/>
<source>About...</source>
<translation>О...</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="151"/>
<location filename="../ui/mainwindow.ui" line="145"/>
<source>&amp;Profiles</source>
<translation>&amp;Профили</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="161"/>
<location filename="../ui/mainwindow.ui" line="155"/>
<source>&amp;Quit</source>
<translation>&amp;Выход</translation>
</message>
<message>
<location filename="../ui/mainwindow.ui" line="166"/>
<location filename="../ui/mainwindow.ui" line="160"/>
<source>&amp;Uninstall</source>
<translation>&amp;Удалить</translation>
</message>
@ -649,37 +654,37 @@ Just press Continue button and follow the different steps until everything is do
<translation type="vanished">C:\</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="107"/>
<location filename="../ui/migratedialog.ui" line="101"/>
<source>Default</source>
<translation>По умолчанию</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="114"/>
<location filename="../ui/migratedialog.ui" line="108"/>
<source>Browse...</source>
<translation>Открыть...</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="124"/>
<location filename="../ui/migratedialog.ui" line="118"/>
<source>Do you prefer to use a 64 or 32 bit client?</source>
<translation>Вы предпочитаете использовать 64-битный или 32-битный клиент?</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="130"/>
<location filename="../ui/migratedialog.ui" line="124"/>
<source>64 bit (recommended)</source>
<translation>64-битный (рекомендуемый)</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="140"/>
<location filename="../ui/migratedialog.ui" line="134"/>
<source>32 bit</source>
<translation>32-битный</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="168"/>
<location filename="../ui/migratedialog.ui" line="162"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../ui/migratedialog.ui" line="175"/>
<location filename="../ui/migratedialog.ui" line="169"/>
<source>Quit</source>
<translation>Выход</translation>
</message>
@ -850,69 +855,74 @@ Just press Continue button and follow the different steps until everything is do
<translation>Установится</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="300"/>
<location filename="../src/filesextractor.cpp" line="540"/>
<location filename="../src/filesextractor.cpp" line="322"/>
<location filename="../src/filesextractor.cpp" line="580"/>
<source>Unable to open %1</source>
<translation>Невозможно открыть %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="415"/>
<location filename="../src/filesextractor.cpp" line="437"/>
<source>Unable to open output file</source>
<translation>Невозможно открыть выходной файл</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="424"/>
<location filename="../src/filesextractor.cpp" line="446"/>
<source>Unable to write output file</source>
<translation>Невозможно записать выходной файл</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="459"/>
<location filename="../src/filesextractor.cpp" line="467"/>
<location filename="../src/filesextractor.cpp" line="495"/>
<location filename="../src/filesextractor.cpp" line="503"/>
<source>7zip decoder doesn&apos;t support this archive</source>
<translation>Архиватор 7zip не поддерживает данный тип архива</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="463"/>
<location filename="../src/filesextractor.cpp" line="499"/>
<source>Unable to allocate memory</source>
<translation>Невозможно выделить память</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="475"/>
<location filename="../src/filesextractor.cpp" line="507"/>
<source>File %1 is corrupted, unable to uncompress it</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="515"/>
<source>Error %1</source>
<translation>Ошибка %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="502"/>
<location filename="../src/filesextractor.cpp" line="542"/>
<source>Unable to create directory %1</source>
<translation>Невозможно создать директорию %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="508"/>
<location filename="../src/filesextractor.cpp" line="548"/>
<source>Unable to set permissions of %1</source>
<translation>Невозможно назначить права объекта %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="617"/>
<location filename="../src/filesextractor.cpp" line="663"/>
<source>disk full</source>
<translation>диск переполнен</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="621"/>
<location filename="../src/filesextractor.cpp" line="667"/>
<source>unable to write %1</source>
<translation>невозможно записать %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="625"/>
<location filename="../src/filesextractor.cpp" line="671"/>
<source>unable to read %1</source>
<translation>невозможно прочитать %1</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="629"/>
<location filename="../src/filesextractor.cpp" line="675"/>
<source>failed (%1)</source>
<translation>неуспешно (%1)</translation>
</message>
<message>
<location filename="../src/filesextractor.cpp" line="632"/>
<location filename="../src/filesextractor.cpp" line="678"/>
<source>Unable to unpack %1 to %2: %3</source>
<translation>Невозможно разархивировать %1 в %2: %3</translation>
</message>
@ -921,36 +931,46 @@ Just press Continue button and follow the different steps until everything is do
<source>Unable to copy file %1</source>
<translation>Невозможно скопировать файл %1</translation>
</message>
<message>
<location filename="../src/profile.cpp" line="58"/>
<source>Profile ID %1 is using invalid characters (only lowercase letters, numbers and underscore are allowed)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/profile.cpp" line="68"/>
<source>Profile name %1 is using invalid character %2 at position %3</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../src/utils.cpp" line="30"/>
<location filename="../src/utils.cpp" line="33"/>
<source>B</source>
<translation>Б</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="31"/>
<location filename="../src/utils.cpp" line="34"/>
<source>KiB</source>
<translation>КиБ</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="32"/>
<location filename="../src/utils.cpp" line="35"/>
<source>MiB</source>
<translation>МиБ</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="33"/>
<location filename="../src/utils.cpp" line="36"/>
<source>GiB</source>
<translation>ГиБ</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="34"/>
<location filename="../src/utils.cpp" line="37"/>
<source>TiB</source>
<translation>ТиБ</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="35"/>
<location filename="../src/utils.cpp" line="38"/>
<source>PiB</source>
<translation>ПиБ</translation>
</message>

View file

@ -69,12 +69,6 @@ Just follow the different steps and make your choice between the options presen
</item>
<item>
<widget class="QFrame" name="advancedFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="advancedMainLayout">
<property name="spacing">
<number>6</number>

View file

@ -57,12 +57,6 @@ p, li { white-space: pre-wrap; }
</item>
<item>
<widget class="QFrame" name="configurationFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="configurationLayout" stretch="1,0,0">
<property name="leftMargin">
<number>0</number>

View file

@ -66,12 +66,6 @@ Just press Continue button and follow the different steps until everything is do
</item>
<item>
<widget class="QFrame" name="advancedFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="advancedMainLayout">
<property name="spacing">
<number>6</number>

View file

@ -66,6 +66,9 @@
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="profileLabel">
<property name="text">