This commit is contained in:
Nimetu 2014-01-03 18:03:11 +02:00
commit 308721ed3c
45 changed files with 879 additions and 542 deletions

View file

@ -226,6 +226,7 @@ code\ryzom\tools\server\ryzom_ams\old
# AMS ignore
code/ryzom/tools/server/ryzom_ams/www/config.php
code/ryzom/tools/server/ryzom_ams/www/is_installed
#tools and external dir's
external

View file

@ -595,7 +595,7 @@ MACRO(NL_SETUP_BUILD)
SET(NL_DEBUG_CFLAGS "/Zi /MDd /RTC1 /D_DEBUG ${DEBUG_CFLAGS} ${NL_DEBUG_CFLAGS}")
SET(NL_RELEASE_CFLAGS "/MD /DNDEBUG ${RELEASE_CFLAGS} ${NL_RELEASE_CFLAGS}")
SET(NL_DEBUG_LINKFLAGS "/DEBUG /OPT:NOREF /OPT:NOICF /NODEFAULTLIB:msvcrt /INCREMENTAL:YES ${NL_DEBUG_LINKFLAGS}")
SET(NL_DEBUG_LINKFLAGS "/DEBUG /OPT:NOREF /OPT:NOICF /NODEFAULTLIB:msvcrt ${MSVC_INCREMENTAL_YES_FLAG} ${NL_DEBUG_LINKFLAGS}")
SET(NL_RELEASE_LINKFLAGS "/OPT:REF /OPT:ICF /INCREMENTAL:NO ${NL_RELEASE_LINKFLAGS}")
IF(WITH_WARNINGS)
@ -789,12 +789,7 @@ MACRO(NL_SETUP_BUILD)
SET(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} ${XARCH}-Wl,-macosx_version_min,${CMAKE_OSX_DEPLOYMENT_TARGET}")
ENDIF(CMAKE_IOS_SIMULATOR_SYSROOT AND TARGET_X86)
ELSE(IOS)
IF(CMAKE_OSX_SYSROOT)
ADD_PLATFORM_FLAGS("-isysroot ${CMAKE_OSX_SYSROOT}")
ENDIF(CMAKE_OSX_SYSROOT)
# Always force -mmacosx-version-min to override environement variable
ADD_PLATFORM_FLAGS("-mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
SET(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,-macosx_version_min,${CMAKE_OSX_DEPLOYMENT_TARGET}")
ENDIF(IOS)

View file

@ -12,7 +12,7 @@ each other so you can use only the parts you really need in your project.
If you want know more about the library content and functionalities, you
should take a look on the documents present in the doc directory.
Ryzom Core is currently developped and tested under GNU/Linux and Windows
Ryzom Core is currently developed and tested under GNU/Linux and Windows
environments.
@ -29,4 +29,7 @@ file for for more details on license terms and other legal issues.
Installation
------------
Please visit http://dev.ryzom.com for more information.
Please visit https://ryzomcore.atlassian.net/wiki/display/RC/Ryzom+Core+Home for more information.
In particular the Getting Started section on the right side of the webpage includes build
instructions for Windows, Linux and Mac.

View file

@ -128,7 +128,7 @@ inline uint32 CPSAttribMakerBinOp<uint32>::getMinValue(void) const
{
uint32 lhs = _Arg[0]->getMinValue();
uint32 rhs = _Arg[1]->getMaxValue();
return lhs > rhs ? 0 : lhs - rhs;
return rhs > lhs ? 0 : lhs - rhs;
}
break;
default:
@ -153,7 +153,7 @@ inline uint32 CPSAttribMakerBinOp<uint32>::getMaxValue(void) const
{
uint32 lhs = _Arg[0]->getMaxValue();
uint32 rhs = _Arg[1]->getMinValue();
return lhs > rhs ? 0 : lhs - rhs;
return rhs > lhs ? 0 : lhs - rhs;
}
break;
default:

View file

@ -586,7 +586,7 @@ template<class T, class U> inline T type_cast(U o)
#ifdef NL_ISO_CPP0X_AVAILABLE
# define nlctassert(cond) static_assert(cond, "Compile time assert in "#cond)
#else
# define nlctassert(cond) sizeof(uint[(cond) ? 1 : 0])
# define nlctassert(cond) (void)sizeof(uint[(cond) ? 1 : 0])
#endif
/**

View file

@ -2191,6 +2191,7 @@ void CDriverGL::setSwapVBLInterval(uint interval)
res = nwglSwapIntervalEXT(_Interval) == TRUE;
}
#elif defined(NL_OS_MAC)
[_ctx setValues:(GLint*)&interval forParameter:NSOpenGLCPSwapInterval];
#elif defined(NL_OS_UNIX)
if (_win && _Extensions.GLXEXTSwapControl)
{
@ -2251,6 +2252,8 @@ void CDriverGL::enablePolygonSmoothing(bool smooth)
{
H_AUTO_OGL(CDriverGL_enablePolygonSmoothing);
if (_PolygonSmooth == smooth) return;
#ifndef USE_OPENGLES
if(smooth)
glEnable(GL_POLYGON_SMOOTH);

View file

@ -202,24 +202,21 @@ namespace NLGUI
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_normal" );
if (prop)
{
string TxName = (const char *) prop;
TxName = strlwr(TxName);
string TxName = NLMISC::toLower((const char *) prop);
_TextureIdNormal.setTexture(TxName.c_str());
}
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_pushed" );
if (prop)
{
string TxName = (const char *) prop;
TxName = strlwr(TxName);
string TxName = NLMISC::toLower((const char *) prop);
_TextureIdPushed.setTexture(TxName.c_str());
}
prop = (char*) xmlGetProp( cur, (xmlChar*)"tx_over" );
if (prop)
{
string TxName = (const char *) prop;
TxName = strlwr(TxName);
string TxName = NLMISC::toLower((const char *) prop);
_TextureIdOver.setTexture(TxName.c_str());
}

View file

@ -2051,10 +2051,10 @@ namespace NLGUI
// Clear all structures used only for init
//NLMISC::contReset (_ParentPositionsMap);
//NLMISC::contReset (_ParentSizesMap);
//NLMISC::contReset (_ParentSizesMaxMap);
//NLMISC::contReset (_LuaClassAssociation);
NLMISC::contReset (_ParentPositionsMap);
NLMISC::contReset (_ParentSizesMap);
NLMISC::contReset (_ParentSizesMaxMap);
NLMISC::contReset (_LuaClassAssociation);
return true;
}

View file

@ -2880,7 +2880,7 @@ namespace NLGUI
bool CWidgetManager::serializeTreeData( xmlNodePtr parentNode ) const
{
if( parentNode == NULL )
return NULL;
return false;
std::vector< SMasterGroup >::size_type i;
for( i = 0; i < _MasterGroups.size(); i++ )

View file

@ -138,7 +138,7 @@ namespace GUIEditor
info.description = value.toUtf8().constData();
else
if( key == "icon" )
info.icon == value.toUtf8().constData();
info.icon = value.toUtf8().constData();
else
if( key == "abstract" )
{

View file

@ -85,7 +85,7 @@ void ZoneBuilder::actionLigoTile(const LigoData &data, const ZonePosition &zoneP
return;
checkBeginMacro();
// nlinfo(QString("%1 %2 %3 (%4 %5)").arg(data.zoneName.c_str()).arg(zonePos.x).arg(zonePos.y).arg(data.posX).arg(data.posY).toStdString().c_str());
// nlinfo(QString("%1 %2 %3 (%4 %5)").arg(data.zoneName.c_str()).arg(zonePos.x).arg(zonePos.y).arg(data.posX).arg(data.posY).toUtf8().constData());
m_zonePositionList.push_back(zonePos);
m_undoStack->push(new LigoTileCommand(data, zonePos, this, m_landscapeScene));
}
@ -105,7 +105,7 @@ void ZoneBuilder::actionLigoResize(uint index, sint32 newMinX, sint32 newMaxX, s
return;
checkBeginMacro();
// nlinfo(QString("minX=%1 maxX=%2 minY=%3 maxY=%4").arg(newMinX).arg(newMaxX).arg(newMinY).arg(newMaxY).toStdString().c_str());
// nlinfo(QString("minX=%1 maxX=%2 minY=%3 maxY=%4").arg(newMinX).arg(newMaxX).arg(newMinY).arg(newMaxY).toUtf8().constData());
m_undoStack->push(new LigoResizeCommand(index, newMinX, newMaxX, newMinY, newMaxY, this));
}
@ -119,7 +119,7 @@ void ZoneBuilder::addZone(sint32 posX, sint32 posY)
return;
// Check zone name
std::string zoneName = m_listZonesWidget->currentZoneName().toStdString();
std::string zoneName = m_listZonesWidget->currentZoneName().toUtf8().constData();
if (zoneName.empty())
return;
@ -161,7 +161,7 @@ void ZoneBuilder::addTransition(const sint32 posX, const sint32 posY)
m_createdAction = false;
m_zonePositionList.clear();
nlinfo(QString("trans %1,%2").arg(posX).arg(posY).toStdString().c_str());
nlinfo(QString("trans %1,%2").arg(posX).arg(posY).toUtf8().constData());
sint32 x = (sint32)floor(float(posX) / m_landscapeScene->cellSize());
sint32 y = (sint32)floor(float(posY) / m_landscapeScene->cellSize());
@ -271,7 +271,7 @@ int ZoneBuilder::createZoneRegion(const QString &fileName)
{
LandscapeItem landItem;
landItem.zoneRegionObject = new ZoneRegionObject();
landItem.zoneRegionObject->load(fileName.toStdString());
landItem.zoneRegionObject->load(fileName.toUtf8().constData());
if (checkOverlaps(landItem.zoneRegionObject->ligoZoneRegion()))
{
@ -382,8 +382,8 @@ bool ZoneBuilder::initZoneBank (const QString &pathName)
std::string error;
Q_FOREACH(QString file, listFiles)
{
//nlinfo(file.toStdString().c_str());
if (!m_zoneBank.addElement((pathName + file).toStdString(), error))
//nlinfo(file.toUtf8().constData());
if (!m_zoneBank.addElement((pathName + file).toUtf8().constData(), error))
QMessageBox::critical(0, QObject::tr("Landscape editor"), QString(error.c_str()), QMessageBox::Ok);
}
delete dir;

View file

@ -81,7 +81,7 @@ int ZoneBuilderBase::loadZoneRegion(const QString &fileName, int defaultId)
{
LandscapeItem landItem;
landItem.zoneRegionObject = new ZoneRegionObject();
landItem.zoneRegionObject->load(fileName.toStdString());
landItem.zoneRegionObject->load(fileName.toUtf8().constData());
if (!checkOverlaps(landItem.zoneRegionObject->ligoZoneRegion()))
{
@ -138,8 +138,8 @@ bool ZoneBuilderBase::initZoneBank (const QString &pathName)
std::string error;
Q_FOREACH(QString file, listFiles)
{
//nlinfo(file.toStdString().c_str());
if (!m_zoneBank.addElement((pathName + file).toStdString(), error))
//nlinfo(file.toUtf8().constData());
if (!m_zoneBank.addElement((pathName + file).toUtf8().constData(), error))
QMessageBox::critical(0, QObject::tr("Landscape editor"), QString(error.c_str()), QMessageBox::Ok);
}
delete dir;

View file

@ -311,7 +311,7 @@ void LandscapeEditorWindow::saveLandscape(int row, bool force)
tr("NeL Ligo land file (*.land)"));
if (!fileName.isEmpty())
{
regionObject->setFileName(fileName.toStdString());
regionObject->setFileName(fileName.toUtf8().constData());
regionObject->save();
regionObject->setModified(false);
item->setText(fileName);

View file

@ -128,7 +128,7 @@ QPixmap *ListZonesModel::getPixmap(const QString &zoneName) const
{
QPixmap *result = 0;
if (!m_pixmapMap.contains(zoneName))
nlwarning("QPixmap %s not found", zoneName.toStdString().c_str());
nlwarning("QPixmap %s not found", zoneName.toUtf8().constData());
else
result = m_pixmapMap.value(zoneName);
return result;

View file

@ -191,7 +191,7 @@ void ListZonesWidget::updateFilters_1(const QString &value)
{
disableSignals(true);
std::vector<std::string> allCategoryValues;
m_zoneBuilder->getZoneBank().getCategoryValues(value.toStdString(), allCategoryValues);
m_zoneBuilder->getZoneBank().getCategoryValues(value.toUtf8().constData(), allCategoryValues);
m_ui.categoryValueComboBox_1->clear();
for(size_t i = 0; i < allCategoryValues.size(); ++i)
m_ui.categoryValueComboBox_1->addItem(QString(allCategoryValues[i].c_str()));
@ -204,7 +204,7 @@ void ListZonesWidget::updateFilters_2(const QString &value)
{
disableSignals(true);
std::vector<std::string> allCategoryValues;
m_zoneBuilder->getZoneBank().getCategoryValues(value.toStdString(), allCategoryValues);
m_zoneBuilder->getZoneBank().getCategoryValues(value.toUtf8().constData(), allCategoryValues);
m_ui.categoryValueComboBox_2->clear();
for(size_t i = 0; i < allCategoryValues.size(); ++i)
@ -218,7 +218,7 @@ void ListZonesWidget::updateFilters_3(const QString &value)
{
disableSignals(true);
std::vector<std::string> allCategoryValues;
m_zoneBuilder->getZoneBank().getCategoryValues(value.toStdString(), allCategoryValues);
m_zoneBuilder->getZoneBank().getCategoryValues(value.toUtf8().constData(), allCategoryValues);
m_ui.categoryValueComboBox_3->clear();
for(size_t i = 0; i < allCategoryValues.size(); ++i)
@ -232,7 +232,7 @@ void ListZonesWidget::updateFilters_4(const QString &value)
{
disableSignals(true);
std::vector<std::string> allCategoryValues;
m_zoneBuilder->getZoneBank().getCategoryValues(value.toStdString(), allCategoryValues);
m_zoneBuilder->getZoneBank().getCategoryValues(value.toUtf8().constData(), allCategoryValues);
m_ui.categoryValueComboBox_4->clear();
for(size_t i = 0; i < allCategoryValues.size(); ++i)
@ -249,37 +249,37 @@ void ListZonesWidget::updateListZones()
zoneBank.resetSelection ();
if(m_ui.categoryTypeComboBox_1->currentIndex() > 0 )
zoneBank.addOrSwitch (m_ui.categoryTypeComboBox_1->currentText().toStdString()
, m_ui.categoryValueComboBox_1->currentText().toStdString());
zoneBank.addOrSwitch (m_ui.categoryTypeComboBox_1->currentText().toUtf8().constData()
, m_ui.categoryValueComboBox_1->currentText().toUtf8().constData());
if(m_ui.categoryTypeComboBox_2->currentIndex() > 0 )
{
if (m_ui.logicComboBox_2->currentIndex() == 0) // AND switch wanted
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_2->currentText().toStdString()
,m_ui.categoryValueComboBox_2->currentText().toStdString());
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_2->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_2->currentText().toUtf8().constData());
else // OR switch wanted
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_2->currentText().toStdString()
,m_ui.categoryValueComboBox_2->currentText().toStdString());
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_2->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_2->currentText().toUtf8().constData());
}
if(m_ui.categoryTypeComboBox_3->currentIndex() > 0 )
{
if (m_ui.logicComboBox_3->currentIndex() == 0) // AND switch wanted
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_3->currentText().toStdString()
,m_ui.categoryValueComboBox_3->currentText().toStdString());
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_3->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_3->currentText().toUtf8().constData());
else // OR switch wanted
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_3->currentText().toStdString()
,m_ui.categoryValueComboBox_3->currentText().toStdString());
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_3->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_3->currentText().toUtf8().constData());
}
if(m_ui.categoryTypeComboBox_4->currentIndex() > 0 )
{
if (m_ui.logicComboBox_4->currentIndex() == 0) // AND switch wanted
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_4->currentText().toStdString()
,m_ui.categoryValueComboBox_4->currentText().toStdString());
zoneBank.addAndSwitch(m_ui.categoryTypeComboBox_4->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_4->currentText().toUtf8().constData());
else // OR switch wanted
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_4->currentText().toStdString()
,m_ui.categoryValueComboBox_4->currentText().toStdString());
zoneBank.addOrSwitch(m_ui.categoryTypeComboBox_4->currentText().toUtf8().constData()
,m_ui.categoryValueComboBox_4->currentText().toUtf8().constData());
}
std::vector<NLLIGO::CZoneBankElement *> currentSelection;

View file

@ -96,7 +96,7 @@ bool PixmapDatabase::loadPixmaps(const QString &zonePath, NLLIGO::CZoneBank &zon
painter.end();
delete pixmap;
m_pixmapMap.insert(zonePixmapName, emptyPixmap);
nlwarning(QString("not found " + zonePath + zonePixmapName + ".png").toStdString().c_str());
nlwarning(QString("not found " + zonePath + zonePixmapName + ".png").toUtf8().constData());
}
// All pixmaps must be have same size
else if (pixmap->width() != sizeX * m_textureSize)
@ -140,7 +140,7 @@ QPixmap *PixmapDatabase::pixmap(const QString &zoneName) const
{
QPixmap *result = m_errorPixmap;
if (!m_pixmapMap.contains(zoneName))
nlwarning("QPixmap %s not found", zoneName.toStdString().c_str());
nlwarning("QPixmap %s not found", zoneName.toUtf8().constData());
else
result = m_pixmapMap.value(zoneName);
return result;

View file

@ -205,7 +205,7 @@ void PrimitivesView::save()
if (node->data(Constants::PRIMITIVE_FILE_IS_CREATED).toBool())
{
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), node->fileName().toStdString()))
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), node->fileName().toUtf8().constData()))
QMessageBox::warning(this, "World Editor Qt", tr("Error writing output file: %1").arg(node->fileName()));
else
node->setData(Constants::PRIMITIVE_IS_MODIFIED, false);
@ -230,7 +230,7 @@ void PrimitivesView::saveAs()
RootPrimitiveNode *node = static_cast<RootPrimitiveNode *>(index.internalPointer());
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), fileName.toStdString()))
if (!NLLIGO::saveXmlPrimitiveFile(*node->primitives(), fileName.toUtf8().constData()))
QMessageBox::warning(this, "World Editor Qt", tr("Error writing output file: %1").arg(fileName));
else
{

View file

@ -1,434 +1,434 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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/>.
// Project includes
#include "property_editor_widget.h"
#include "world_editor_misc.h"
// NeL includes
#include <nel/misc/debug.h>
// STL includes
#include <vector>
#include <string>
// Qt includes
#include <QtCore/QModelIndex>
namespace WorldEditor
{
PropertyEditorWidget::PropertyEditorWidget(QWidget *parent)
: QWidget(parent)
{
m_ui.setupUi(this);
m_stringManager = new QtStringPropertyManager(this);
m_boolManager = new QtBoolPropertyManager(this);
m_enumManager = new QtEnumPropertyManager(this);
m_stringArrayManager = new QtTextPropertyManager(this);
QtLineEditFactory *lineEditFactory = new QtLineEditFactory(this);
QtCheckBoxFactory *boolFactory = new QtCheckBoxFactory(this);
QtEnumEditorFactory *enumFactory = new QtEnumEditorFactory(this);
QtTextEditorFactory *textFactory = new QtTextEditorFactory(this);
m_ui.treePropertyBrowser->setFactoryForManager(m_stringManager, lineEditFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_boolManager, boolFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_enumManager, enumFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_stringArrayManager, textFactory);
m_groupManager = new QtGroupPropertyManager(this);
connect(m_stringManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_boolManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_enumManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_stringArrayManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_boolManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_stringManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_enumManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_stringArrayManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
}
PropertyEditorWidget::~PropertyEditorWidget()
{
}
void PropertyEditorWidget::clearProperties()
{
m_ui.treePropertyBrowser->clear();
}
void PropertyEditorWidget::updateSelection(Node *node)
{
clearProperties();
if ((node == 0) || (node->type() != Node::PrimitiveNodeType))
return;
blockSignalsOfProperties(true);
// The parameter list
std::list<NLLIGO::CPrimitiveClass::CParameter> parameterList;
PrimitiveNode *primNode = static_cast<PrimitiveNode *>(node);
const NLLIGO::IPrimitive *primitive = primNode->primitive();
const NLLIGO::CPrimitiveClass *primClass = primNode->primitiveClass();
// Use the class or not ?
if (primClass)
{
// For each properties of the class
for (uint p = 0; p < primClass->Parameters.size(); p++)
{
// Is the parameter visible ?
if (primClass->Parameters[p].Visible)
{
if (primClass->Parameters[p].Name == "name")
parameterList.push_front(primClass->Parameters[p]);
else
parameterList.push_back(primClass->Parameters[p]);
}
}
}
else
{
// For each primitive property
uint numProp = primitive->getNumProperty();
for (uint p = 0; p < numProp; p++)
{
// Get the property
std::string propertyName;
const NLLIGO::IProperty *prop;
nlverify(primitive->getProperty(p, propertyName, prop));
// Add a default property
NLLIGO::CPrimitiveClass::CParameter defProp(*prop, propertyName.c_str());
if (defProp.Name == "name")
parameterList.push_front(defProp);
else
parameterList.push_back(defProp);
}
}
// Remove property class
std::list<NLLIGO::CPrimitiveClass::CParameter>::iterator ite = parameterList.begin ();
while (ite != parameterList.end ())
{
std::list<NLLIGO::CPrimitiveClass::CParameter>::iterator next = ite;
next++;
if (ite->Name == "class")
{
parameterList.erase(ite);
}
ite = next;
}
QtProperty *groupNode;
groupNode = m_groupManager->addProperty(QString("%1(%2)").arg(node->data(Qt::DisplayRole).toString()).arg(primClass->Name.c_str()));
m_ui.treePropertyBrowser->addProperty(groupNode);
ite = parameterList.begin();
while (ite != parameterList.end())
{
NLLIGO::CPrimitiveClass::CParameter &parameter = (*ite);
QtProperty *prop;
NLLIGO::IProperty *ligoProperty = 0;
primitive->getPropertyByName(parameter.Name.c_str(), ligoProperty);
if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::ConstString)
prop = addConstStringProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::String)
prop = addStringProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::StringArray)
prop = addStringArrayProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::ConstStringArray)
prop = addConstStringArrayProperty(ligoProperty, parameter, primitive);
else
prop = addBoolProperty(ligoProperty, parameter, primitive);
// Default value ?
if ((ligoProperty == NULL) || (ligoProperty->Default))
prop->setModified(false);
else
prop->setModified(true);
bool staticChildSelected = Utils::ligoConfig()->isStaticChild(*primitive);
if (parameter.ReadOnly || (staticChildSelected && (parameter.Name == "name")))
prop->setEnabled(false);
// File ?
if (parameter.Filename && (parameter.FileExtension.empty() || parameter.Type != NLLIGO::CPrimitiveClass::CParameter::StringArray))
{
// TODO: Create an edit box
// CHECK: only for ConstString
}
groupNode->addSubProperty(prop);
ite++;
}
blockSignalsOfProperties(false);
}
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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/>.
// Project includes
#include "property_editor_widget.h"
#include "world_editor_misc.h"
// NeL includes
#include <nel/misc/debug.h>
// STL includes
#include <vector>
#include <string>
// Qt includes
#include <QtCore/QModelIndex>
namespace WorldEditor
{
PropertyEditorWidget::PropertyEditorWidget(QWidget *parent)
: QWidget(parent)
{
m_ui.setupUi(this);
m_stringManager = new QtStringPropertyManager(this);
m_boolManager = new QtBoolPropertyManager(this);
m_enumManager = new QtEnumPropertyManager(this);
m_stringArrayManager = new QtTextPropertyManager(this);
QtLineEditFactory *lineEditFactory = new QtLineEditFactory(this);
QtCheckBoxFactory *boolFactory = new QtCheckBoxFactory(this);
QtEnumEditorFactory *enumFactory = new QtEnumEditorFactory(this);
QtTextEditorFactory *textFactory = new QtTextEditorFactory(this);
m_ui.treePropertyBrowser->setFactoryForManager(m_stringManager, lineEditFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_boolManager, boolFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_enumManager, enumFactory);
m_ui.treePropertyBrowser->setFactoryForManager(m_stringArrayManager, textFactory);
m_groupManager = new QtGroupPropertyManager(this);
connect(m_stringManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_boolManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_enumManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_stringArrayManager, SIGNAL(propertyChanged(QtProperty *)), this, SLOT(propertyChanged(QtProperty *)));
connect(m_boolManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_stringManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_enumManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
connect(m_stringArrayManager, SIGNAL(resetProperty(QtProperty *)), this, SLOT(resetProperty(QtProperty *)));
}
PropertyEditorWidget::~PropertyEditorWidget()
{
}
void PropertyEditorWidget::clearProperties()
{
m_ui.treePropertyBrowser->clear();
}
void PropertyEditorWidget::updateSelection(Node *node)
{
clearProperties();
if ((node == 0) || (node->type() != Node::PrimitiveNodeType))
return;
blockSignalsOfProperties(true);
// The parameter list
std::list<NLLIGO::CPrimitiveClass::CParameter> parameterList;
PrimitiveNode *primNode = static_cast<PrimitiveNode *>(node);
const NLLIGO::IPrimitive *primitive = primNode->primitive();
const NLLIGO::CPrimitiveClass *primClass = primNode->primitiveClass();
// Use the class or not ?
if (primClass)
{
// For each properties of the class
for (uint p = 0; p < primClass->Parameters.size(); p++)
{
// Is the parameter visible ?
if (primClass->Parameters[p].Visible)
{
if (primClass->Parameters[p].Name == "name")
parameterList.push_front(primClass->Parameters[p]);
else
parameterList.push_back(primClass->Parameters[p]);
}
}
}
else
{
// For each primitive property
uint numProp = primitive->getNumProperty();
for (uint p = 0; p < numProp; p++)
{
// Get the property
std::string propertyName;
const NLLIGO::IProperty *prop;
nlverify(primitive->getProperty(p, propertyName, prop));
// Add a default property
NLLIGO::CPrimitiveClass::CParameter defProp(*prop, propertyName.c_str());
if (defProp.Name == "name")
parameterList.push_front(defProp);
else
parameterList.push_back(defProp);
}
}
// Remove property class
std::list<NLLIGO::CPrimitiveClass::CParameter>::iterator ite = parameterList.begin ();
while (ite != parameterList.end ())
{
std::list<NLLIGO::CPrimitiveClass::CParameter>::iterator next = ite;
next++;
if (ite->Name == "class")
{
parameterList.erase(ite);
}
ite = next;
}
QtProperty *groupNode;
groupNode = m_groupManager->addProperty(QString("%1(%2)").arg(node->data(Qt::DisplayRole).toString()).arg(primClass->Name.c_str()));
m_ui.treePropertyBrowser->addProperty(groupNode);
ite = parameterList.begin();
while (ite != parameterList.end())
{
NLLIGO::CPrimitiveClass::CParameter &parameter = (*ite);
QtProperty *prop;
NLLIGO::IProperty *ligoProperty = 0;
primitive->getPropertyByName(parameter.Name.c_str(), ligoProperty);
if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::ConstString)
prop = addConstStringProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::String)
prop = addStringProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::StringArray)
prop = addStringArrayProperty(ligoProperty, parameter, primitive);
else if (parameter.Type == NLLIGO::CPrimitiveClass::CParameter::ConstStringArray)
prop = addConstStringArrayProperty(ligoProperty, parameter, primitive);
else
prop = addBoolProperty(ligoProperty, parameter, primitive);
// Default value ?
if ((ligoProperty == NULL) || (ligoProperty->Default))
prop->setModified(false);
else
prop->setModified(true);
bool staticChildSelected = Utils::ligoConfig()->isStaticChild(*primitive);
if (parameter.ReadOnly || (staticChildSelected && (parameter.Name == "name")))
prop->setEnabled(false);
// File ?
if (parameter.Filename && (parameter.FileExtension.empty() || parameter.Type != NLLIGO::CPrimitiveClass::CParameter::StringArray))
{
// TODO: Create an edit box
// CHECK: only for ConstString
}
groupNode->addSubProperty(prop);
ite++;
}
blockSignalsOfProperties(false);
}
void PropertyEditorWidget::propertyChanged(QtProperty *property)
{
nlinfo(QString("property %1 changed").arg(property->propertyName()).toStdString().c_str());
nlinfo(QString("property %1 changed").arg(property->propertyName()).toUtf8().constData());
}
void PropertyEditorWidget::resetProperty(QtProperty *property)
{
nlinfo(QString("property %1 reset").arg(property->propertyName()).toStdString().c_str());
}
QtProperty *PropertyEditorWidget::addBoolProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
primitive->getPropertyByName(name.c_str(), value);
QtProperty *prop = m_boolManager->addProperty(name.c_str());
// if (Default)
{
//DialogProperties->setDefaultValue (this, value);
m_boolManager->setValue(prop, bool((value=="true")?1:0));
}
return prop;
}
QtProperty *PropertyEditorWidget::addConstStringProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
// Get current value
primitive->getPropertyByName(name.c_str(), value);
// Create qt property
QtProperty *prop = m_enumManager->addProperty(parameter.Name.c_str());
QStringList listEnums = getComboValues(parameter);
if (listEnums.isEmpty())
{
listEnums << QString(value.c_str()) + tr(" (WRN: Check leveldesign!)");
m_enumManager->setEnumNames(prop, listEnums);
m_enumManager->setValue(prop, 0);
prop->setEnabled(false);
}
else
{
// TODO: check this logic
if (parameter.DefaultValue.empty() || (parameter.DefaultValue[0].Name.empty()))
listEnums.prepend("");
// Fill qt property
m_enumManager->setEnumNames(prop, listEnums);
// Find index of current value
for (int i = 0; i < listEnums.size(); i++)
{
if (value == listEnums[i].toStdString())
{
m_enumManager->setValue(prop, i);
break;
}
}
}
return prop;
}
QtProperty *PropertyEditorWidget::addStringProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
primitive->getPropertyByName(name.c_str(), value);
QtProperty *prop = m_stringManager->addProperty(parameter.Name.c_str());
m_stringManager->setValue(prop, QString(value.c_str()));
return prop;
}
QtProperty *PropertyEditorWidget::addStringArrayProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string name = parameter.Name.c_str();
QtProperty *prop = m_stringArrayManager->addProperty(parameter.Name.c_str());
const NLLIGO::IProperty *ligoProperty;
std::vector<std::string> vectString;
if (primitive->getPropertyByName(parameter.Name.c_str (), ligoProperty))
{
const NLLIGO::CPropertyStringArray *const propStringArray = dynamic_cast<const NLLIGO::CPropertyStringArray *> (ligoProperty);
if (propStringArray)
{
const std::vector<std::string> &vectString = propStringArray->StringArray;
if (!vectString.empty())
{
std::string temp;
for (size_t i = 0; i < vectString.size(); i++)
{
temp += vectString[i];
if (i != (vectString.size() - 1))
temp += '\n';
}
m_stringArrayManager->setValue(prop, temp.c_str());
prop->setToolTip(temp.c_str());
}
}
else
{
m_stringArrayManager->setValue(prop, "StringArray :(");
}
}
// Create an "EDIT" button if the text is editable (FileExtension != "")
if (parameter.FileExtension != "")
{
// Create an edit box
// TODO:
}
return prop;
}
QtProperty *PropertyEditorWidget::addConstStringArrayProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
// Get current value
primitive->getPropertyByName(name.c_str(), value);
// Create qt property
// QtProperty *prop = m_enumManager->addProperty(parameter.Name.c_str());
QtProperty *prop = m_stringArrayManager->addProperty(parameter.Name.c_str());
QStringList listEnums = getComboValues(parameter);
if (listEnums.isEmpty())
{
// listEnums << QString(value.c_str()) + tr(" (WRN: Check leveldesign!)");
// m_enumManager->setEnumNames(prop, listEnums);
// m_enumManager->setValue(prop, 0);
prop->setEnabled(false);
}
else
{
// Fill qt property
m_enumManager->setEnumNames(prop, listEnums);
// Find index of current value
//for (int i = 0; i < listEnums.size(); i++)
//{
// if (value == listEnums[i].toStdString())
// {
// m_enumManager->setValue(prop, i);
// break;
// }
//}
const NLLIGO::IProperty *ligoProperty;
std::vector<std::string> vectString;
if (primitive->getPropertyByName (parameter.Name.c_str(), ligoProperty))
{
const NLLIGO::CPropertyStringArray *const propStringArray = dynamic_cast<const NLLIGO::CPropertyStringArray *> (ligoProperty);
if (propStringArray)
{
const std::vector<std::string> &vectString = propStringArray->StringArray;
if (!vectString.empty())
{
std::string temp;
for (size_t i = 0; i < vectString.size(); i++)
{
temp += vectString[i];
if (i != (vectString.size() - 1))
temp += '\n';
}
m_stringArrayManager->setValue(prop, temp.c_str());
prop->setToolTip(temp.c_str());
}
}
else
{
m_stringArrayManager->setValue(prop, "StringArray :(");
}
}
m_enumManager->setValue(prop, 0);
}
return prop;
}
QStringList PropertyEditorWidget::getComboValues(const NLLIGO::CPrimitiveClass::CParameter &parameter)
{
// TODO: get context value from dialog
std::string context("jungle");
std::string defaultContext("default");
std::vector<std::string> listContext;
if (context != defaultContext)
listContext.push_back(context);
listContext.push_back(defaultContext);
QStringList listEnums;
// Correct fill properties with *both* contexts if the current context is not default and is valid.
for (size_t j = 0; j < listContext.size(); j++)
{
std::map<std::string, NLLIGO::CPrimitiveClass::CParameter::CConstStringValue>::const_iterator ite = parameter.ComboValues.find(listContext[j].c_str());
if (ite != parameter.ComboValues.end())
{
std::vector<std::string> pathList;
// Fill pathList
ite->second.appendFilePath(pathList);
if (parameter.SortEntries)
std::sort(pathList.begin(), pathList.end());
for (size_t i = 0; i < pathList.size(); ++i)
listEnums.append(pathList[i].c_str());
}
}
return listEnums;
}
{
nlinfo(QString("property %1 reset").arg(property->propertyName()).toUtf8().constData());
}
QtProperty *PropertyEditorWidget::addBoolProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
primitive->getPropertyByName(name.c_str(), value);
QtProperty *prop = m_boolManager->addProperty(name.c_str());
// if (Default)
{
//DialogProperties->setDefaultValue (this, value);
m_boolManager->setValue(prop, bool((value=="true")?1:0));
}
return prop;
}
QtProperty *PropertyEditorWidget::addConstStringProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
// Get current value
primitive->getPropertyByName(name.c_str(), value);
// Create qt property
QtProperty *prop = m_enumManager->addProperty(parameter.Name.c_str());
QStringList listEnums = getComboValues(parameter);
if (listEnums.isEmpty())
{
listEnums << QString(value.c_str()) + tr(" (WRN: Check leveldesign!)");
m_enumManager->setEnumNames(prop, listEnums);
m_enumManager->setValue(prop, 0);
prop->setEnabled(false);
}
else
{
// TODO: check this logic
if (parameter.DefaultValue.empty() || (parameter.DefaultValue[0].Name.empty()))
listEnums.prepend("");
// Fill qt property
m_enumManager->setEnumNames(prop, listEnums);
// Find index of current value
for (int i = 0; i < listEnums.size(); i++)
{
if (value == std::string(listEnums[i].toUtf8().constData()))
{
m_enumManager->setValue(prop, i);
break;
}
}
}
return prop;
}
QtProperty *PropertyEditorWidget::addStringProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
primitive->getPropertyByName(name.c_str(), value);
QtProperty *prop = m_stringManager->addProperty(parameter.Name.c_str());
m_stringManager->setValue(prop, QString(value.c_str()));
return prop;
}
QtProperty *PropertyEditorWidget::addStringArrayProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string name = parameter.Name.c_str();
QtProperty *prop = m_stringArrayManager->addProperty(parameter.Name.c_str());
const NLLIGO::IProperty *ligoProperty;
std::vector<std::string> vectString;
if (primitive->getPropertyByName(parameter.Name.c_str (), ligoProperty))
{
const NLLIGO::CPropertyStringArray *const propStringArray = dynamic_cast<const NLLIGO::CPropertyStringArray *> (ligoProperty);
if (propStringArray)
{
const std::vector<std::string> &vectString = propStringArray->StringArray;
if (!vectString.empty())
{
std::string temp;
for (size_t i = 0; i < vectString.size(); i++)
{
temp += vectString[i];
if (i != (vectString.size() - 1))
temp += '\n';
}
m_stringArrayManager->setValue(prop, temp.c_str());
prop->setToolTip(temp.c_str());
}
}
else
{
m_stringArrayManager->setValue(prop, "StringArray :(");
}
}
// Create an "EDIT" button if the text is editable (FileExtension != "")
if (parameter.FileExtension != "")
{
// Create an edit box
// TODO:
}
return prop;
}
QtProperty *PropertyEditorWidget::addConstStringArrayProperty(const NLLIGO::IProperty *property,
const NLLIGO::CPrimitiveClass::CParameter &parameter,
const NLLIGO::IPrimitive *primitive)
{
std::string value;
std::string name = parameter.Name.c_str();
// Get current value
primitive->getPropertyByName(name.c_str(), value);
// Create qt property
// QtProperty *prop = m_enumManager->addProperty(parameter.Name.c_str());
QtProperty *prop = m_stringArrayManager->addProperty(parameter.Name.c_str());
QStringList listEnums = getComboValues(parameter);
if (listEnums.isEmpty())
{
// listEnums << QString(value.c_str()) + tr(" (WRN: Check leveldesign!)");
// m_enumManager->setEnumNames(prop, listEnums);
// m_enumManager->setValue(prop, 0);
prop->setEnabled(false);
}
else
{
// Fill qt property
m_enumManager->setEnumNames(prop, listEnums);
// Find index of current value
//for (int i = 0; i < listEnums.size(); i++)
//{
// if (value == std::string(listEnums[i].toUtf8().constData()))
// {
// m_enumManager->setValue(prop, i);
// break;
// }
//}
const NLLIGO::IProperty *ligoProperty;
std::vector<std::string> vectString;
if (primitive->getPropertyByName (parameter.Name.c_str(), ligoProperty))
{
const NLLIGO::CPropertyStringArray *const propStringArray = dynamic_cast<const NLLIGO::CPropertyStringArray *> (ligoProperty);
if (propStringArray)
{
const std::vector<std::string> &vectString = propStringArray->StringArray;
if (!vectString.empty())
{
std::string temp;
for (size_t i = 0; i < vectString.size(); i++)
{
temp += vectString[i];
if (i != (vectString.size() - 1))
temp += '\n';
}
m_stringArrayManager->setValue(prop, temp.c_str());
prop->setToolTip(temp.c_str());
}
}
else
{
m_stringArrayManager->setValue(prop, "StringArray :(");
}
}
m_enumManager->setValue(prop, 0);
}
return prop;
}
QStringList PropertyEditorWidget::getComboValues(const NLLIGO::CPrimitiveClass::CParameter &parameter)
{
// TODO: get context value from dialog
std::string context("jungle");
std::string defaultContext("default");
std::vector<std::string> listContext;
if (context != defaultContext)
listContext.push_back(context);
listContext.push_back(defaultContext);
QStringList listEnums;
// Correct fill properties with *both* contexts if the current context is not default and is valid.
for (size_t j = 0; j < listContext.size(); j++)
{
std::map<std::string, NLLIGO::CPrimitiveClass::CParameter::CConstStringValue>::const_iterator ite = parameter.ComboValues.find(listContext[j].c_str());
if (ite != parameter.ComboValues.end())
{
std::vector<std::string> pathList;
// Fill pathList
ite->second.appendFilePath(pathList);
if (parameter.SortEntries)
std::sort(pathList.begin(), pathList.end());
for (size_t i = 0; i < pathList.size(); ++i)
listEnums.append(pathList[i].c_str());
}
}
return listEnums;
}
void PropertyEditorWidget::blockSignalsOfProperties(bool block)
{
m_stringManager->blockSignals(block);
m_boolManager->blockSignals(block);
m_enumManager->blockSignals(block);
m_stringManager->blockSignals(block);
m_boolManager->blockSignals(block);
m_enumManager->blockSignals(block);
m_stringArrayManager->blockSignals(block);
}
} /* namespace WorldEditor */
}
} /* namespace WorldEditor */

View file

@ -346,7 +346,7 @@ void LoadRootPrimitiveCommand::redo()
// set the primitive context
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = primitives;
NLLIGO::loadXmlPrimitiveFile(*primitives, m_fileName.toStdString(), *Utils::ligoConfig());
NLLIGO::loadXmlPrimitiveFile(*primitives, m_fileName.toUtf8().constData(), *Utils::ligoConfig());
// unset the context
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = NULL;
@ -358,7 +358,7 @@ void LoadRootPrimitiveCommand::redo()
// Check property types
if (Utils::recursiveUpdateDefaultValues(primitives->RootNode))
{
nlwarning("In file (%s) : Some primitives have been modified to initialise their default values\nor to change their properties type.", m_fileName.toStdString().c_str());
nlwarning("In file (%s) : Some primitives have been modified to initialise their default values\nor to change their properties type.", m_fileName.toUtf8().constData());
}
m_rootPrimIndex = m_model->createRootPrimitiveNode(m_fileName, primitives);
@ -460,15 +460,17 @@ void AddPrimitiveByClassCommand::redo()
PrimitiveNode *parentNode = static_cast<PrimitiveNode *>(parentIndex.internalPointer());
const NLLIGO::CPrimitiveClass *primClass = parentNode->primitiveClass();
std::string className = m_className.toUtf8().constData();
int id = 0;
while (primClass->DynamicChildren[id].ClassName != m_className.toStdString())
while (primClass->DynamicChildren[id].ClassName != className)
++id;
// set the primitive context
NLLIGO::CPrimitiveContext::instance().CurrentPrimitive = parentNode->rootPrimitiveNode()->primitives();
QString namePrimititve = QString("%1_%2").arg(m_className).arg(parentNode->childCount());
NLLIGO::IPrimitive *newPrimitive = Utils::createPrimitive(m_className.toStdString().c_str(), namePrimititve.toStdString().c_str(),
NLLIGO::IPrimitive *newPrimitive = Utils::createPrimitive(m_className.toUtf8().constData(), namePrimititve.toUtf8().constData(),
NLMISC::CVector(m_initPos.x(), -m_initPos.y(), 0.0), m_delta, primClass->DynamicChildren[id].Parameters, parentNode->primitive());
// unset the context

View file

@ -62,7 +62,7 @@ bool WorldEditorPlugin::initialize(ExtensionSystem::IPluginManager *pluginManage
try
{
// Search path of file world_editor_classes.xml
std::string ligoPath = NLMISC::CPath::lookup(fileName.toStdString());
std::string ligoPath = NLMISC::CPath::lookup(fileName.toUtf8().constData());
// Init LIGO
m_ligoConfig.readPrimitiveClass(ligoPath.c_str(), true);
NLLIGO::Register();

View file

@ -168,7 +168,7 @@ void WorldEditorWindow::loadWorldEditFile(const QString &fileName)
return;
Utils::WorldEditList worldEditList;
if (!Utils::loadWorldEditFile(fileName.toStdString(), worldEditList))
if (!Utils::loadWorldEditFile(fileName.toUtf8().constData(), worldEditList))
{
// TODO: add the message box
return;

View file

@ -146,7 +146,8 @@ if not args.noconf:
try:
MaxUserDirectory
except NameError:
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
import os
MaxUserDirectory = os.path.normpath(os.environ["LOCALAPPDATA"] + "/Autodesk/3dsMax/2010 - 32bit/enu")
try:
MaxExecutable
except NameError:

View file

@ -0,0 +1,17 @@
TITLE 1_export.py
1_export.py
TITLE 2_build.py
2_build.py
TITLE 3_install.py
3_install.py
TITLE 4_data_shard.py
4_data_shard.py
TITLE 5_client_dev.py
5_client_dev.py
TITLE 6_client_patch.py
6_client_patch.py -bo
TITLE 7_client_install.py
7_client_install.py
PAUSE

View file

@ -82,7 +82,7 @@ if MaxAvailable:
sDst.close()
while tagDiff > 0:
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-mip" ])
tagList = findFiles(log, outputDirectory, "", ".%PreGenFileExtension%")
newTagLen = len(tagList)
tagDiff = newTagLen - tagLen

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "%PreGenFileExtension%_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -99,7 +99,7 @@ if MaxAvailable:
# sDst.close()
# while tagDiff > 0:
# printLog(log, "MAXSCRIPT " + scriptDst)
# subprocess.call([ Max, "-U", "MAXScript", "dummy_export.ms", "-q", "-mi", "-vn" ])
# subprocess.call([ Max, "-U", "MAXScript", "dummy_export.ms", "-q", "-mi", "-mip" ])
# tagList = findFiles(log, outDirTag, "", ".tag")
# newTagLen = len(tagList)
# tagDiff = newTagLen - tagLen

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "anim_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "anim_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "clod_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "clod_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -78,7 +78,7 @@ def igExport(sourceDir, targetDir):
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "ig_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "ig_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -93,7 +93,7 @@ if LigoExportLand == "" or LigoExportOnePass == 1:
sDst.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "nel_ligo_export.ms", "-q", "-mi", "-mip" ])
os.remove(scriptDst)
printLog(log, "")

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "pacs_prim_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "pacs_prim_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "cmb_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "cmb_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -112,7 +112,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "shape_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "shape_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -82,7 +82,7 @@ if MaxAvailable:
sDst.close()
while tagDiff > 0:
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "skel_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "skel_export.ms", "-q", "-mi", "-mip" ])
tagList = findFiles(log, outputDirectory, "", ".skel")
newTagLen = len(tagList)
tagDiff = newTagLen - tagLen

View file

@ -82,7 +82,7 @@ if MaxAvailable:
sDst.close()
while tagDiff > 0:
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "swt_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "swt_export.ms", "-q", "-mi", "-mip" ])
tagList = findFiles(log, outputDirectory, "", ".swt")
newTagLen = len(tagList)
tagDiff = newTagLen - tagLen

View file

@ -93,7 +93,7 @@ if MaxAvailable:
mrt.write("moe-moe-kyun")
mrt.close()
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "veget_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "veget_export.ms", "-q", "-mi", "-mip" ])
if os.path.exists(outputLogfile):
try:
lSrc = open(outputLogfile, "r")

View file

@ -82,7 +82,7 @@ if MaxAvailable:
sDst.close()
while tagDiff > 0:
printLog(log, "MAXSCRIPT " + scriptDst)
subprocess.call([ Max, "-U", "MAXScript", "zone_export.ms", "-q", "-mi", "-vn" ])
subprocess.call([ Max, "-U", "MAXScript", "zone_export.ms", "-q", "-mi", "-mip" ])
tagList = findFiles(log, outputDirectory, "", ".zone")
newTagLen = len(tagList)
tagDiff = newTagLen - tagLen

View file

@ -47,7 +47,11 @@ SignUpURL = "";
StartupHost = "shard.ryzomcore.org:40916";
StartupPage = "/login/r2_login.php";
InstallStatsUrl = "http://open.ryzom.com:50000/stats/stats.php";
CreateAccountURL = "";
CreateAccountURL = "http://shard.ryzomcore.org/ams/?page=register";
EditAccountURL = "http://shard.ryzomcore.org/ams/?page=settings";
ConditionsTermsURL = "http://www.gnu.org/licenses/agpl-3.0.html";
ForgetPwdURL = "http://shard.ryzomcore.org/ams/?page=forgot_password";
LoginSupportURL = "https://plus.google.com/u/0/communities/103798956862568269036";
InstallWebPage = "";

View file

@ -888,6 +888,12 @@ void CClientConfig::setValues()
READ_STRING_DEV(ForgetPwdURL)
READ_STRING_DEV(FreeTrialURL)
READ_STRING_DEV(LoginSupportURL)
READ_STRING_FV(CreateAccountURL)
READ_STRING_FV(EditAccountURL)
READ_STRING_FV(ConditionsTermsURL)
READ_STRING_FV(ForgetPwdURL)
READ_STRING_FV(LoginSupportURL)
#ifndef RZ_NO_CLIENT
// if cookie is not empty, it means that the client was launch

View file

@ -688,26 +688,22 @@ void updateWeather()
}
#endif
// FIXME: temporary fix for teleportation crash
// Update new sky
if (ContinentMngr.cur() && !ContinentMngr.cur()->Indoor)
if (ContinentMngr.cur() && Driver->getPolygonMode() == UDriver::Filled && Filter3D[FilterSky])
{
if(Driver->getPolygonMode() == UDriver::Filled)
CSky &sky = ContinentMngr.cur()->CurrentSky;
if (!ContinentMngr.cur()->Indoor && sky.getScene())
{
if (Filter3D[FilterSky])
{
CSky &sky = ContinentMngr.cur()->CurrentSky;
if (sky.getScene())
{
s_SkyMode = NewSky;
sky.getScene()->animate(TimeInSec-FirstTimeInSec);
// Setup the sky camera
preRenderNewSky();
}
else
{
s_SkyMode = OldSky;
}
}
s_SkyMode = NewSky;
sky.getScene()->animate(TimeInSec-FirstTimeInSec);
// Setup the sky camera
preRenderNewSky();
}
else
{
s_SkyMode = OldSky;
}
}
}

View file

@ -41,6 +41,7 @@ static std::string pactTypeStrings[]=
"Type3",
"Type4",
"Type5",
"Type6",
"unknown"
};

View file

@ -2,7 +2,7 @@
; Comments start with ';', as in php.ini
[install]
login_info = "Please enter your MySQL Username and Password to install the database.<br>This is being loaded because config.php is missing.<br>This process will take about 30 seconds."
login_info = "Please enter your MySQL Username and Password to install the database.<br>This is being loaded because the is_installed file is missing.<br>This process will take about 30 seconds."
login_here = "here"
[dashboard]

View file

@ -25,7 +25,7 @@ $cfg['db']['shard']['name'] = 'nel';
$cfg['db']['shard']['user'] = 'shard';
$cfg['db']['shard']['pass'] = '';
// Variables for database access to the open_ring database
// Variables for database access to the ring_open database
$cfg['db']['ring']['host'] = 'localhost';
$cfg['db']['ring']['port'] = '3306';
$cfg['db']['ring']['name'] = 'ring_open';

View file

@ -14,9 +14,12 @@
error_reporting(E_ALL);
ini_set('display_errors', 'on');
require_once( '../../ams_lib/libinclude.php' );
if (!@include '../config.php') {
//if config doesnt exist run setup
if (!file_exists('../is_installed')) {
//if is_installed doesnt exist run setup
require( 'installer/libsetup.php' );
} elseif (isset($_POST["function"]) && $_POST["function"] == "do_install") {
echo "Can't run setup while file '../is_installed' exists, please remove that file if you wish to run the install";
exit;
} else {
//if config exists then include it
require( '../config.php' );

View file

@ -23,7 +23,7 @@
error_reporting( E_ALL );
if (file_exists('../config.php')) {
require( '../config.php' );
require_once( '../config.php' );
} else {
//copy config.default.php to config.php!
if (!file_exists('../config.php')) {
@ -31,6 +31,8 @@
echo "failed to copy ../config.php ...\n";
echo '<br><a href="'.$_SERVER['REQUEST_URI'].'" >Reload!</a> ';
exit;
} else {
require_once( '../config.php' );
}
}
}
@ -60,11 +62,8 @@
`ReceiveMail` int(1) NOT NULL DEFAULT 1,
`Language` varchar(3) DEFAULT NULL,
PRIMARY KEY (`UId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='contains all users information for ryzom_ams';
);
GRANT ALL ON `" . $cfg['db']['web']['name'] ."`.* TO `" . $cfg['db']['web']['user'] ."`@".$cfg['db']['web']['host'].";
) ENGINE = InnoDB;
GRANT ALL ON `" . $cfg['db']['web']['name'] ."`.* TO `" . $cfg['db']['web']['user'] ."`@".$cfg['db']['web']['host']." identified by '".$cfg['db']['web']['pass']."';
";
$dbw->executeWithoutParams($sql);
@ -470,7 +469,7 @@
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
GRANT ALL ON `" . $cfg['db']['lib']['name'] ."`.* TO `" . $cfg['db']['lib']['user'] ."`@".$cfg['db']['lib']['host'].";
GRANT ALL ON `" . $cfg['db']['lib']['name'] ."`.* TO `" . $cfg['db']['lib']['user'] ."`@".$cfg['db']['lib']['host']." identified by '".$cfg['db']['lib']['pass']."';
";
$dbl->executeWithoutParams($sql);
print "The Lib & Web database were correctly installed! <br />";
@ -585,7 +584,7 @@
KEY `GMId` (`GMId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='contains all users informations for login system' AUTO_INCREMENT=1 ;
GRANT ALL ON `" . $cfg['db']['shard']['name'] ."`.* TO `" . $cfg['db']['shard']['user'] ."`@".$cfg['db']['shard']['host'].";
GRANT ALL ON `" . $cfg['db']['shard']['name'] ."`.* TO `" . $cfg['db']['shard']['user'] ."`@".$cfg['db']['shard']['host']." identified by '".$cfg['db']['shard']['pass']."';
";
$dbs->executeWithoutParams($sql);
print "The shard database was correctly installed! <br />";
@ -596,8 +595,8 @@
CREATE DATABASE IF NOT EXISTS `" . $cfg['db']['tool']['name'] ."`;
USE `". $cfg['db']['tool']['name'] . "`;
CREATE DATABASE IF NOT EXISTS `nel_tool` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `nel_tool`;
CREATE DATABASE IF NOT EXISTS `" . $cfg['db']['tool']['name'] ."` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `" . $cfg['db']['tool']['name'] ."`;
CREATE TABLE IF NOT EXISTS `neltool_annotations` (
`annotation_id` int(11) NOT NULL AUTO_INCREMENT,
@ -1368,11 +1367,317 @@
(164, 31, 104, 9),
(165, 31, 103, 9);
GRANT ALL ON `" . $cfg['db']['tool']['name'] ."`.* TO `" . $cfg['db']['tool']['user'] ."`@".$cfg['db']['tool']['host'].";
GRANT ALL ON `" . $cfg['db']['tool']['name'] ."`.* TO `" . $cfg['db']['tool']['user'] ."`@".$cfg['db']['tool']['host']." identified by '".$cfg['db']['tool']['pass']."';
";
$dbn->executeWithoutParams($sql);
print "The nel_tool database was correctly installed! <br />";
//SETUP THE OPEN_SHARD DB
$dbw = new DBLayer("install", "ring");
$sql = "
CREATE DATABASE IF NOT EXISTS `" . $cfg['db']['ring']['name'] ."`;
USE `" . $cfg['db']['ring']['name'] ."`;
CREATE TABLE IF NOT EXISTS `characters` (
`char_id` int(10) unsigned NOT NULL DEFAULT '0',
`char_name` varchar(20) NOT NULL DEFAULT '',
`user_id` int(10) unsigned NOT NULL DEFAULT '0',
`guild_id` int(10) unsigned NOT NULL DEFAULT '0',
`best_combat_level` int(10) unsigned NOT NULL DEFAULT '0',
`home_mainland_session_id` int(10) unsigned NOT NULL DEFAULT '0',
`ring_access` varchar(63) NOT NULL DEFAULT '',
`race` enum('r_fyros','r_matis','r_tryker','r_zorai') NOT NULL DEFAULT 'r_fyros',
`civilisation` enum('c_neutral','c_fyros','c_fyros','c_matis','c_tryker','c_zorai') NOT NULL DEFAULT 'c_neutral',
`cult` enum('c_neutral','c_kami','c_karavan') NOT NULL DEFAULT 'c_neutral',
`current_session` int(11) unsigned NOT NULL DEFAULT '0',
`rrp_am` int(11) unsigned NOT NULL DEFAULT '0',
`rrp_masterless` int(11) unsigned NOT NULL DEFAULT '0',
`rrp_author` int(11) unsigned NOT NULL DEFAULT '0',
`newcomer` tinyint(1) NOT NULL DEFAULT '1',
`creation_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_played_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`char_id`),
UNIQUE KEY `char_name_idx` (`char_name`,`home_mainland_session_id`),
KEY `user_id_idx` (`user_id`),
KEY `guild_idx` (`guild_id`),
KEY `guild_id_idx` (`guild_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `folder` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL DEFAULT '0',
`title` varchar(40) NOT NULL DEFAULT '',
`comments` text NOT NULL,
PRIMARY KEY (`Id`),
KEY `owner_idx` (`owner`),
KEY `title_idx` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `folder_access` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`folder_id` int(10) unsigned NOT NULL DEFAULT '0',
`user_id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `folder_id_idx` (`folder_id`),
KEY `user_idx` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `guild_invites` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`session_id` int(10) unsigned NOT NULL DEFAULT '0',
`guild_id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `guild_id_idx` (`guild_id`),
KEY `session_id_idx` (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `guilds` (
`guild_id` int(10) unsigned NOT NULL DEFAULT '0',
`guild_name` varchar(50) NOT NULL DEFAULT '',
`shard_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`guild_id`),
KEY `shard_id_idx` (`shard_id`),
KEY `guild_name_idx` (`guild_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `journal_entry` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`session_id` int(10) unsigned NOT NULL DEFAULT '0',
`author` int(10) unsigned NOT NULL DEFAULT '0',
`type` enum('jet_credits','jet_notes') NOT NULL DEFAULT 'jet_notes',
`text` text NOT NULL,
`time_stamp` datetime NOT NULL DEFAULT '2005-09-07 12:41:33',
PRIMARY KEY (`Id`),
KEY `session_id_idx` (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `known_users` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL DEFAULT '0',
`targer_user` int(10) unsigned NOT NULL DEFAULT '0',
`targer_character` int(10) unsigned NOT NULL DEFAULT '0',
`relation_type` enum('rt_friend','rt_banned','rt_friend_dm') NOT NULL DEFAULT 'rt_friend',
`comments` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
KEY `user_index` (`owner`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `mfs_erased_mail_series` (
`erased_char_id` int(11) unsigned NOT NULL DEFAULT '0',
`erased_char_name` varchar(32) NOT NULL DEFAULT '',
`erased_series` int(11) unsigned NOT NULL AUTO_INCREMENT,
`erase_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`erased_series`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `mfs_guild_thread` (
`thread_id` int(11) NOT NULL AUTO_INCREMENT,
`guild_id` int(11) unsigned NOT NULL DEFAULT '0',
`topic` varchar(255) NOT NULL DEFAULT '',
`author_name` varchar(32) NOT NULL DEFAULT '',
`last_post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_count` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`thread_id`),
KEY `guild_index` (`guild_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `mfs_guild_thread_message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thread_id` int(11) unsigned NOT NULL DEFAULT '0',
`author_name` varchar(32) NOT NULL DEFAULT '',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `mfs_mail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sender_name` varchar(32) NOT NULL DEFAULT '',
`subject` varchar(250) NOT NULL DEFAULT '',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` enum('ms_new','ms_read','ms_erased') NOT NULL DEFAULT 'ms_new',
`dest_char_id` int(11) unsigned NOT NULL DEFAULT '0',
`erase_series` int(11) unsigned NOT NULL DEFAULT '0',
`content` text NOT NULL,
PRIMARY KEY (`id`),
KEY `dest_index` (`dest_char_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `outlands` (
`session_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`island_name` text NOT NULL,
`billing_instance_id` int(11) unsigned NOT NULL DEFAULT '0',
`anim_session_id` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `player_rating` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`scenario_id` int(10) unsigned NOT NULL DEFAULT '0',
`session_id` int(10) unsigned NOT NULL DEFAULT '0',
`rate_fun` tinyint(3) unsigned NOT NULL DEFAULT '0',
`rate_difficulty` tinyint(3) unsigned NOT NULL DEFAULT '0',
`rate_accessibility` tinyint(3) unsigned NOT NULL DEFAULT '0',
`rate_originality` tinyint(3) unsigned NOT NULL DEFAULT '0',
`rate_direction` tinyint(3) unsigned NOT NULL DEFAULT '0',
`author` int(10) unsigned NOT NULL DEFAULT '0',
`rating` int(10) NOT NULL DEFAULT '0',
`comments` text NOT NULL,
`time_stamp` datetime NOT NULL DEFAULT '2005-09-07 12:41:33',
PRIMARY KEY (`Id`),
KEY `session_id_idx` (`scenario_id`),
KEY `author_idx` (`author`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `ring_users` (
`user_id` int(10) unsigned NOT NULL DEFAULT '0',
`user_name` varchar(20) NOT NULL DEFAULT '',
`user_type` enum('ut_character','ut_pioneer') NOT NULL DEFAULT 'ut_character',
`current_session` int(10) unsigned NOT NULL DEFAULT '0',
`current_activity` enum('ca_none','ca_play','ca_edit','ca_anim') NOT NULL DEFAULT 'ca_none',
`current_status` enum('cs_offline','cs_logged','cs_online') NOT NULL DEFAULT 'cs_offline',
`public_level` enum('pl_none','pl_public') NOT NULL DEFAULT 'pl_none',
`account_type` enum('at_normal','at_gold') NOT NULL DEFAULT 'at_normal',
`content_access_level` varchar(20) NOT NULL DEFAULT '',
`description` text NOT NULL,
`lang` enum('lang_en','lang_fr','lang_de') NOT NULL DEFAULT 'lang_en',
`cookie` varchar(30) NOT NULL DEFAULT '',
`current_domain_id` int(10) NOT NULL DEFAULT '-1',
`pioneer_char_id` int(11) unsigned NOT NULL DEFAULT '0',
`current_char` int(11) NOT NULL DEFAULT '0',
`add_privileges` varchar(64) NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_name_idx` (`user_name`),
KEY `cookie_idx` (`cookie`),
KEY `current_session_idx` (`current_session`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `scenario` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`md5` varchar(64) NOT NULL DEFAULT '',
`title` varchar(32) NOT NULL DEFAULT '',
`description` text NOT NULL,
`author` varchar(32) NOT NULL DEFAULT '',
`rrp_total` int(11) unsigned NOT NULL DEFAULT '0',
`anim_mode` enum('am_dm','am_autonomous') NOT NULL DEFAULT 'am_dm',
`language` varchar(11) NOT NULL DEFAULT '',
`orientation` enum('so_newbie_training','so_story_telling','so_mistery','so_hack_slash','so_guild_training','so_other') NOT NULL DEFAULT 'so_other',
`level` enum('sl_a','sl_b','sl_c','sl_d','sl_e','sl_f') NOT NULL DEFAULT 'sl_a',
`allow_free_trial` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `scenario_desc` (
`session_id` int(10) unsigned NOT NULL DEFAULT '0',
`parent_scenario` int(10) unsigned NOT NULL DEFAULT '0',
`description` text NOT NULL,
`relation_to_parent` enum('rtp_same','rtp_variant','rtp_different') NOT NULL DEFAULT 'rtp_same',
`title` varchar(40) NOT NULL DEFAULT '',
`num_player` int(10) unsigned NOT NULL DEFAULT '0',
`content_access_level` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`session_id`),
UNIQUE KEY `title_idx` (`title`),
KEY `parent_idx` (`parent_scenario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `session_log` (
`id` int(11) NOT NULL DEFAULT '0',
`scenario_id` int(11) unsigned NOT NULL DEFAULT '0',
`rrp_scored` int(11) unsigned NOT NULL DEFAULT '0',
`scenario_point_scored` int(11) unsigned NOT NULL DEFAULT '0',
`time_taken` int(11) unsigned NOT NULL DEFAULT '0',
`participants` text NOT NULL,
`launch_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`owner` varchar(32) NOT NULL DEFAULT '0',
`guild_name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `session_participant` (
`Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`session_id` int(10) unsigned NOT NULL DEFAULT '0',
`char_id` int(10) unsigned NOT NULL DEFAULT '0',
`status` enum('sps_play_subscribed','sps_play_invited','sps_edit_invited','sps_anim_invited','sps_playing','sps_editing','sps_animating') NOT NULL DEFAULT 'sps_play_subscribed',
`kicked` tinyint(1) unsigned NOT NULL DEFAULT '0',
`session_rated` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `session_idx` (`session_id`),
KEY `user_idx` (`char_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`session_type` enum('st_edit','st_anim','st_outland','st_mainland') NOT NULL DEFAULT 'st_edit',
`title` varchar(40) NOT NULL DEFAULT '',
`owner` int(10) unsigned NOT NULL DEFAULT '0',
`plan_date` datetime NOT NULL DEFAULT '2005-09-21 12:41:33',
`start_date` datetime NOT NULL DEFAULT '2005-08-31 00:00:00',
`description` text NOT NULL,
`orientation` enum('so_newbie_training','so_story_telling','so_mistery','so_hack_slash','so_guild_training','so_other') NOT NULL DEFAULT 'so_other',
`level` enum('sl_a','sl_b','sl_c','sl_d','sl_e','sl_f') NOT NULL DEFAULT 'sl_a',
`rule_type` enum('rt_strict','rt_liberal') NOT NULL DEFAULT 'rt_strict',
`access_type` enum('at_public','at_private') NOT NULL DEFAULT 'at_private',
`state` enum('ss_planned','ss_open','ss_locked','ss_closed') NOT NULL DEFAULT 'ss_planned',
`host_shard_id` int(11) NOT NULL DEFAULT '0',
`subscription_slots` int(11) unsigned NOT NULL DEFAULT '0',
`reserved_slots` int(10) unsigned NOT NULL DEFAULT '0',
`free_slots` int(10) unsigned NOT NULL DEFAULT '0',
`estimated_duration` enum('et_short','et_medium','et_long') NOT NULL DEFAULT 'et_short',
`final_duration` int(10) unsigned NOT NULL DEFAULT '0',
`folder_id` int(10) unsigned NOT NULL DEFAULT '0',
`lang` varchar(20) NOT NULL DEFAULT '',
`icone` varchar(70) NOT NULL DEFAULT '',
`anim_mode` enum('am_dm','am_autonomous') NOT NULL DEFAULT 'am_dm',
`race_filter` set('rf_fyros','rf_matis','rf_tryker','rf_zorai') NOT NULL DEFAULT '',
`religion_filter` set('rf_kami','rf_karavan','rf_neutral') NOT NULL DEFAULT '',
`guild_filter` enum('gf_only_my_guild','gf_any_player') DEFAULT 'gf_only_my_guild',
`shard_filter` set('sf_shard00','sf_shard01','sf_shard02','sf_shard03','sf_shard04','sf_shard05','sf_shard06','sf_shard07','sf_shard08','sf_shard09','sf_shard10','sf_shard11','sf_shard12','sf_shard13','sf_shard14','sf_shard15','sf_shard16','sf_shard17','sf_shard18','sf_shard19','sf_shard20','sf_shard21','sf_shard22','sf_shard23','sf_shard24','sf_shard25','sf_shard26','sf_shard27','sf_shard28','sf_shard29','sf_shard30','sf_shard31') NOT NULL DEFAULT 'sf_shard00,sf_shard01,sf_shard02,sf_shard03,sf_shard04,sf_shard05,sf_shard06,sf_shard07,sf_shard08,sf_shard09,sf_shard10,sf_shard11,sf_shard12,sf_shard13,sf_shard14,sf_shard15,sf_shard16,sf_shard17,sf_shard18,sf_shard19,sf_shard20,sf_shard21,sf_shard22,sf_shard23,sf_shard24,sf_shard25,sf_shard26,sf_shard27,sf_shard28,sf_shard29,sf_shard30,sf_shard31',
`level_filter` set('lf_a','lf_b','lf_c','lf_d','lf_e','lf_f') NOT NULL DEFAULT 'lf_a,lf_b,lf_c,lf_d,lf_e,lf_f',
`subscription_closed` tinyint(1) NOT NULL DEFAULT '0',
`newcomer` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
PRIMARY KEY (`session_id`),
KEY `owner_idx` (`owner`),
KEY `folder_idx` (`folder_id`),
KEY `state_type_idx` (`state`,`session_type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=303 ;
INSERT INTO `sessions` (`session_id`, `session_type`, `title`, `owner`, `plan_date`, `start_date`, `description`, `orientation`, `level`, `rule_type`, `access_type`, `state`, `host_shard_id`, `subscription_slots`, `reserved_slots`, `free_slots`, `estimated_duration`, `final_duration`, `folder_id`, `lang`, `icone`, `anim_mode`, `race_filter`, `religion_filter`, `guild_filter`, `shard_filter`, `level_filter`, `subscription_closed`, `newcomer`) VALUES
(302, 'st_mainland', 'open shard mainland', 0, '2005-09-21 12:41:33', '2005-08-31 00:00:00', '', 'so_other', 'sl_a', 'rt_strict', 'at_public', 'ss_planned', 0, 0, 0, 0, 'et_short', 0, 0, 'lang_en', '', 'am_dm', 'rf_fyros,rf_matis,rf_tryker,rf_zorai', 'rf_kami,rf_karavan,rf_neutral', 'gf_any_player', '', 'lf_a,lf_b,lf_c,lf_d,lf_e,lf_f', 0, 0);
CREATE TABLE IF NOT EXISTS `shard` (
`shard_id` int(10) NOT NULL DEFAULT '0',
`WSOnline` tinyint(1) NOT NULL DEFAULT '0',
`MOTD` text NOT NULL,
`OldState` enum('ds_close','ds_dev','ds_restricted','ds_open') NOT NULL DEFAULT 'ds_restricted',
`RequiredState` enum('ds_close','ds_dev','ds_restricted','ds_open') NOT NULL DEFAULT 'ds_dev',
PRIMARY KEY (`shard_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;
INSERT INTO `shard` (`shard_id`, `WSOnline`, `MOTD`, `OldState`, `RequiredState`) VALUES
(302, 1, 'Shard up', 'ds_restricted', 'ds_open');
GRANT ALL ON `" . $cfg['db']['ring']['name'] ."`.* TO `" . $cfg['db']['ring']['user'] ."`@".$cfg['db']['ring']['host']." identified by '".$cfg['db']['ring']['pass']."';
";
$dbw->executeWithoutParams($sql);
print "The ring_open database was correctly installed! <br />";
//Now create an admin account!
$hashpass = crypt("admin", Users::generateSALT());
@ -1380,21 +1685,24 @@
'name' => "admin",
'pass' => $hashpass,
'mail' => "admin@admin.com",
'permission' => 3,
'lang' => "en"
);
try{
$dbw = new DBLayer("web");
$user_id = $dbw->executeReturnId("INSERT INTO ams_user (Login, Password, Email, Permission, Language) VALUES (:name, :pass, :mail, :permission, :lang)",$params);
Users::createUser($params, $user_id);
$user_id = WebUsers::createWebuser($params['name'], $params['pass'],$params['mail']);
$result = Webusers::createUser($params, $user_id);
Users::createPermissions(array($params['name']));
$dbl = new DBLayer("lib");
$dbl->execute("UPDATE ticket_user SET Permission = 3 WHERE TUserId = :user_id",array('user_id' => $user_id));
print "The admin account is created, you can login with id: admin, pass: admin!";
}catch (PDOException $e){
print "There was an error while creating the admin account! ";
print_r($e);
}
echo '<br><a href="'.$_SERVER['REQUEST_URI'].'" >Reload!</a> ';
touch("../is_installed");
exit;