diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py
index 63c9c4f6f..85c070893 100644
--- a/code/nel/tools/build_gamedata/0_setup.py
+++ b/code/nel/tools/build_gamedata/0_setup.py
@@ -134,7 +134,7 @@ if not args.noconf:
try:
DataShardDirectory
except NameError:
- DataShardDirectory = "R:/code/ryzom/common/data_shard"
+ DataShardDirectory = "R:/code/ryzom/server/data_shard"
try:
DataCommonDirectory
except NameError:
@@ -159,6 +159,22 @@ if not args.noconf:
WindowsExeDllCfgDirectories
except NameError:
WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ]
+ try:
+ LinuxServiceExecutableDirectory
+ except NameError:
+ LinuxServiceExecutableDirectory = "S:/devls_x64/bin"
+ try:
+ LinuxClientExecutableDirectory
+ except NameError:
+ LinuxClientExecutableDirectory = "S:/devl_x64/bin"
+ try:
+ PatchmanCfgAdminDirectory
+ except NameError:
+ PatchmanCfgAdminDirectory = "S:/notes/patchman_cfg/admin_install"
+ try:
+ PatchmanCfgDefaultDirectory
+ except NameError:
+ PatchmanCfgDefaultDirectory = "S:/notes/patchman_cfg/default"
try:
MaxAvailable
except NameError:
@@ -219,6 +235,10 @@ if not args.noconf:
WindowsExeDllCfgDirectories[4] = askVar(log, "Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/")
WindowsExeDllCfgDirectories[5] = askVar(log, "Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/")
WindowsExeDllCfgDirectories[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
+ LinuxServiceExecutableDirectory = askVar(log, "Linux Service Executable Directory", LinuxServiceExecutableDirectory).replace("\\", "/")
+ LinuxClientExecutableDirectory = askVar(log, "Linux Client Executable Directory", LinuxClientExecutableDirectory).replace("\\", "/")
+ PatchmanCfgAdminDirectory = askVar(log, "Patchman Cfg Admin Directory", PatchmanCfgAdminDirectory).replace("\\", "/")
+ PatchmanCfgDefaultDirectory = askVar(log, "Patchman Cfg Default Directory", PatchmanCfgDefaultDirectory).replace("\\", "/")
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
if MaxAvailable:
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
@@ -299,6 +319,10 @@ if not args.noconf:
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
+ sf.write("LinuxServiceExecutableDirectory = \"" + str(LinuxServiceExecutableDirectory) + "\"\n")
+ sf.write("LinuxClientExecutableDirectory = \"" + str(LinuxClientExecutableDirectory) + "\"\n")
+ sf.write("PatchmanCfgAdminDirectory = \"" + str(PatchmanCfgAdminDirectory) + "\"\n")
+ sf.write("PatchmanCfgDefaultDirectory = \"" + str(PatchmanCfgDefaultDirectory) + "\"\n")
sf.write("\n")
sf.write("# 3dsMax directives\n")
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
diff --git a/code/nel/tools/build_gamedata/8_shard_data.py b/code/nel/tools/build_gamedata/8_shard_data.py
index 8ab628875..14042231c 100644
--- a/code/nel/tools/build_gamedata/8_shard_data.py
+++ b/code/nel/tools/build_gamedata/8_shard_data.py
@@ -47,14 +47,38 @@ printLog(log, "")
for dir in InstallShardDataDirectories:
printLog(log, "SHARD DIRECTORY " + dir)
- mkPath(log, InstallDirectory + "/" + dir)
mkPath(log, ShardInstallDirectory + "/" + dir)
- copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + dir)
-for dir in InstallShardDataCollisionsDirectories:
- printLog(log, "SHARD COLLISIONS " + dir)
+ printLog(log, "FROM " + dir)
mkPath(log, InstallDirectory + "/" + dir)
- mkPath(log, ShardInstallDirectory + "/" + InstallShardDataCollisionsDirectory + "/" + dir)
- copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + InstallShardDataCollisionsDirectory + "/" + dir)
+ copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + dir)
+for multiDir in InstallShardDataMultiDirectories:
+ dstDir = multiDir[0]
+ mkPath(log, ShardInstallDirectory + "/" + dstDir)
+ printLog(log, "SHARD DIRECTORY " + dstDir)
+ for srcDir in multiDir[1]:
+ printLog(log, "FROM " + srcDir)
+ mkPath(log, InstallDirectory + "/" + srcDir)
+ mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
+ copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
+for multiDir in InstallShardDataPrimitivesDirectories:
+ dstDir = multiDir[0]
+ mkPath(log, ShardInstallDirectory + "/" + dstDir)
+ printLog(log, "SHARD DIRECTORY " + dstDir)
+ for srcDir in multiDir[1]:
+ printLog(log, "FROM PRIMITIVES " + srcDir)
+ mkPath(log, PrimitivesDirectory + "/" + srcDir)
+ mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
+ copyFilesNoTreeIfNeeded(log, PrimitivesDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
+for execDir in InstallShardDataExecutables:
+ dstDir = execDir[0]
+ mkPath(log, LinuxServiceExecutableDirectory)
+ mkPath(log, PatchmanCfgDefaultDirectory)
+ mkPath(log, InstallDirectory)
+ mkPath(log, ShardInstallDirectory + "/" + dstDir)
+ printLog(log, "SHARD DIRECTORY " + dstDir)
+ copyFileIfNeeded(log, LinuxServiceExecutableDirectory + "/" + execDir[1][1], ShardInstallDirectory + "/" + dstDir + "/" + execDir[1][0])
+ copyFileListNoTreeIfNeeded(log, PatchmanCfgDefaultDirectory, ShardInstallDirectory + "/" + dstDir, execDir[2])
+ copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, execDir[3])
printLog(log, "")
log.close()
diff --git a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml
index e9697b421..de424f76f 100644
--- a/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml
+++ b/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files/world_editor_classes.xml
@@ -98,7 +98,7 @@
-
+
@@ -128,7 +128,7 @@
@@ -147,7 +147,7 @@
-
+
@@ -159,7 +159,7 @@
-
+
@@ -175,7 +175,7 @@
-
+
@@ -2513,10 +2513,10 @@
-->
-
+
-
+
@@ -2720,10 +2720,10 @@
-->
-
+
-
+
@@ -2761,10 +2761,10 @@
-->
-
+
-
+
@@ -2802,10 +2802,10 @@
-->
-
+
-
+
@@ -2828,10 +2828,10 @@
-
+
-
+
@@ -2869,7 +2869,7 @@
-
+
@@ -2888,7 +2888,7 @@
-
+
@@ -2907,7 +2907,7 @@
-
+
@@ -2924,7 +2924,7 @@
-
+
@@ -3662,7 +3662,7 @@
-
+
@@ -3751,7 +3751,7 @@
-
+
@@ -3765,7 +3765,7 @@
-
+
@@ -3866,7 +3866,7 @@
-->
-
+
@@ -3991,7 +3991,7 @@
-->
-
+
-
+
-
+
@@ -4052,7 +4052,7 @@
-->
-
+
@@ -4098,7 +4098,7 @@
-
+
@@ -4493,7 +4493,7 @@
-->
-
+
@@ -4635,7 +4635,7 @@
-
+
@@ -4670,7 +4670,7 @@
-
+
@@ -4704,7 +4704,7 @@
-->
-
+
@@ -4738,7 +4738,7 @@
-->
-
+
diff --git a/code/ryzom/common/src/game_share/send_chat.cpp b/code/ryzom/common/src/game_share/send_chat.cpp
new file mode 100644
index 000000000..064e223fe
--- /dev/null
+++ b/code/ryzom/common/src/game_share/send_chat.cpp
@@ -0,0 +1,186 @@
+// Ryzom - MMORPG Framework
+// 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 .
+
+#include "nel/misc/types_nl.h"
+#include "send_chat.h"
+
+/**
+ * Send a chat line from system to a player that will be displayed as a normal chat sentence
+ * Sentence will be formated using "" as prefix of chat string
+ */
+void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString)
+{
+ NLNET::CMessage msgout("CHAT");
+ bool talkToPlayer = true;
+ msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/**
+ * Send a chat line from system to a group of player that will be displayed as a normal chat sentence
+ * Sentence will be formated using "" as prefix of chat string
+ */
+void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString)
+{
+ NLNET::CMessage msgout("CHAT");
+ bool talkToPlayer = false;
+ msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/**
+ * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
+ * Chat group can be constructed from CChatGroup class.
+ * phraseId is a phrase identifier in the phrase translation file.
+ * param are the parameter of the phrase
+ */
+void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms)
+{
+ NLNET::CMessage msgout("NPC_CHAT_PARAM");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(const_cast(phraseId));
+
+ uint32 size = (uint32)params.size();
+ msgout.serial(size);
+// params.resize(size);
+ for ( uint i = 0; i < size; i++ )
+ {
+ uint8 type8 = params[i].Type;
+ msgout.serial( type8 );
+ const_cast(params[i]).serialParam( false, msgout, (STRING_MANAGER::TParamType) type8 );
+ }
+
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/**
+ * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
+ * Chat group can be constructed from CChatGroup class.
+ * phraseId is a phrase identifier in the phrase translation file.
+ */
+void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId)
+{
+ NLNET::CMessage msgout("NPC_CHAT");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(const_cast(phraseId));
+ sendMessageViaMirror("IOS", msgout);
+}
+
+
+/**
+ * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
+ * Chat group can be constructed from CChatGroup class.
+ * phraseId is a phrase identifier in the phrase translation file.
+ */
+void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId)
+{
+ NLNET::CMessage msgout("NPC_CHAT_EX");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(phraseId);
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/**
+ * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
+ * Chat group can be constructed from CChatGroup class.
+ * sentence is the sentence to be sent.
+ */
+void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence)
+{
+ NLNET::CMessage msgout("NPC_CHAT_SENTENCE");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(sentence);
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/**
+ * Request to the DSS to send a chat line from a bot in a chat channel
+ * Chat group can be constructed from CChatGroup class.
+ * sentenceId is the id of the sentence that must be sent by the DSS
+ */
+void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId)
+{
+ nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
+ NLNET::CMessage msgout("translateAndForward");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(sentenceId);
+ msgout.serial(scenarioId);
+ NLNET::CUnifiedNetwork::getInstance()->send("DSS",msgout);
+}
+
+/**
+ * Request to the DSS to send a chat line from a bot in a chat channel
+ * Chat group can be constructed from CChatGroup class.
+ * sentenceId is the id of the sentence that must be sent by the DSS
+ */
+void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues)
+{
+ nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
+ NLNET::CMessage msgout("translateAndForwardArg");
+ msgout.serial(const_cast(senderId));
+ msgout.serialEnum(groupType);
+ msgout.serial(sentenceId);
+ msgout.serial(scenarioId);
+ uint32 size=(uint32)argValues.size(),i=0;
+ msgout.serial(size);
+ for(;isend("DSS",msgout);
+}
+
+/**
+ * Send a tell line from a bot (mainly NPC) to a player
+ * phraseId is a phrase identifier in the phrase translation file.
+ */
+void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc)
+{
+ NLNET::CMessage msgout;
+ if ( needSenderNpc )
+ {
+ msgout.setType("NPC_TELL");
+ msgout.serial(const_cast(senderId));
+ }
+ else
+ {
+ msgout.setType("GHOST_TELL");
+ }
+ msgout.serial(const_cast(receiverId));
+ msgout.serial(const_cast(phraseId));
+ sendMessageViaMirror("IOS", msgout);
+}
+
+
+/**
+ * Send a tell line from a bot (mainly NPC) to a player. Accept parametered strings
+ * phraseId is a phrase id obtained through the string manager
+ */
+void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId)
+{
+ NLNET::CMessage msgout("NPC_TELL_EX");
+ msgout.serial(const_cast(senderId));
+ msgout.serial(const_cast(receiverId));
+ msgout.serial(phraseId);
+ sendMessageViaMirror("IOS", msgout);
+}
+
+/* End of send_chat.cpp */
diff --git a/code/ryzom/common/src/game_share/send_chat.h b/code/ryzom/common/src/game_share/send_chat.h
index a6b8bd364..1acc9799e 100644
--- a/code/ryzom/common/src/game_share/send_chat.h
+++ b/code/ryzom/common/src/game_share/send_chat.h
@@ -35,25 +35,13 @@
* Send a chat line from system to a player that will be displayed as a normal chat sentence
* Sentence will be formated using "" as prefix of chat string
*/
-inline void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString)
-{
- NLNET::CMessage msgout("CHAT");
- bool talkToPlayer = true;
- msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
- sendMessageViaMirror("IOS", msgout);
-}
+void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString);
/**
* Send a chat line from system to a group of player that will be displayed as a normal chat sentence
* Sentence will be formated using "" as prefix of chat string
*/
-inline void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString)
-{
- NLNET::CMessage msgout("CHAT");
- bool talkToPlayer = false;
- msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
- sendMessageViaMirror("IOS", msgout);
-}
+void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString);
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
@@ -61,39 +49,14 @@ inline void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatStri
* phraseId is a phrase identifier in the phrase translation file.
* param are the parameter of the phrase
*/
-inline void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms)
-{
- NLNET::CMessage msgout("NPC_CHAT_PARAM");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(const_cast(phraseId));
-
- uint32 size = (uint32)params.size();
- msgout.serial(size);
-// params.resize(size);
- for ( uint i = 0; i < size; i++ )
- {
- uint8 type8 = params[i].Type;
- msgout.serial( type8 );
- const_cast(params[i]).serialParam( false, msgout, (STRING_MANAGER::TParamType) type8 );
- }
-
- sendMessageViaMirror("IOS", msgout);
-}
+void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms);
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* phraseId is a phrase identifier in the phrase translation file.
*/
-inline void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId)
-{
- NLNET::CMessage msgout("NPC_CHAT");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(const_cast(phraseId));
- sendMessageViaMirror("IOS", msgout);
-}
+void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId);
/**
@@ -101,101 +64,41 @@ inline void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType
* Chat group can be constructed from CChatGroup class.
* phraseId is a phrase identifier in the phrase translation file.
*/
-inline void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId)
-{
- NLNET::CMessage msgout("NPC_CHAT_EX");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(phraseId);
- sendMessageViaMirror("IOS", msgout);
-}
+void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId);
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* sentence is the sentence to be sent.
*/
-inline void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence)
-{
- NLNET::CMessage msgout("NPC_CHAT_SENTENCE");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(sentence);
- sendMessageViaMirror("IOS", msgout);
-}
+void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence);
/**
* Request to the DSS to send a chat line from a bot in a chat channel
* Chat group can be constructed from CChatGroup class.
* sentenceId is the id of the sentence that must be sent by the DSS
*/
-inline void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId)
-{
- nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
- NLNET::CMessage msgout("translateAndForward");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(sentenceId);
- msgout.serial(scenarioId);
- NLNET::CUnifiedNetwork::getInstance()->send("DSS",msgout);
-}
+void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId);
/**
* Request to the DSS to send a chat line from a bot in a chat channel
* Chat group can be constructed from CChatGroup class.
* sentenceId is the id of the sentence that must be sent by the DSS
*/
-inline void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues)
-{
- nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
- NLNET::CMessage msgout("translateAndForwardArg");
- msgout.serial(const_cast(senderId));
- msgout.serialEnum(groupType);
- msgout.serial(sentenceId);
- msgout.serial(scenarioId);
- uint32 size=(uint32)argValues.size(),i=0;
- msgout.serial(size);
- for(;isend("DSS",msgout);
-}
+void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues);
/**
* Send a tell line from a bot (mainly NPC) to a player
* phraseId is a phrase identifier in the phrase translation file.
*/
-inline void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc=true)
-{
- NLNET::CMessage msgout;
- if ( needSenderNpc )
- {
- msgout.setType("NPC_TELL");
- msgout.serial(const_cast(senderId));
- }
- else
- {
- msgout.setType("GHOST_TELL");
- }
- msgout.serial(const_cast(receiverId));
- msgout.serial(const_cast(phraseId));
- sendMessageViaMirror("IOS", msgout);
-}
+void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc=true);
/**
* Send a tell line from a bot (mainly NPC) to a player. Accept parametered strings
* phraseId is a phrase id obtained through the string manager
*/
-inline void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId)
-{
- NLNET::CMessage msgout("NPC_TELL_EX");
- msgout.serial(const_cast(senderId));
- msgout.serial(const_cast(receiverId));
- msgout.serial(phraseId);
- sendMessageViaMirror("IOS", msgout);
-}
+void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId);
#endif // SEND_CHAT_H
diff --git a/code/ryzom/server/data_shard/client_commands_privileges.txt b/code/ryzom/server/data_shard/egs/client_commands_privileges.txt
similarity index 100%
rename from code/ryzom/server/data_shard/client_commands_privileges.txt
rename to code/ryzom/server/data_shard/egs/client_commands_privileges.txt
diff --git a/code/ryzom/server/data_shard/egs/shop_category.cfg b/code/ryzom/server/data_shard/egs/shop_category.cfg
new file mode 100644
index 000000000..0986b0687
--- /dev/null
+++ b/code/ryzom/server/data_shard/egs/shop_category.cfg
@@ -0,0 +1,468 @@
+// shop category
+ShopCategory = {
+ "no_bot_chat",
+
+ "missions",
+ "guild_creator",
+ "characteristics_seller",
+
+ "harvest_action",
+ "craft_action",
+ "magic_action",
+ "fight_action",
+
+ // Limited to 20 differents level
+ "LEVEL",
+ "L1",
+ "L10",
+ "L20",
+ "L50",
+ "L100",
+ "L150",
+ "L200",
+ "L250",
+ "L300",
+ "END_LEVEL",
+
+ // Quality of item, 5 quality from 'A' to 'E'
+ "QUALITY",
+ "Q20", // energy de 0 à 20
+ "Q35", // energy de 21 à 35
+ "Q50", // energy de 36 à 50
+ "Q65", // energy de 51 à 65
+ "Q80", // energy de 66 à 80 (et plus)
+ "END_QUALITY",
+
+ // LEVEL must be defined before items
+ "ITEM_CATEGORY",
+ "DAGGER",
+ "SWORD",
+ "MACE",
+ "AXE",
+ "SPEAR",
+ "STAFF",
+ "TWO_HAND_SWORD",
+ "TWO_HAND_AXE",
+ "PIKE",
+ "TWO_HAND_MACE",
+ "AUTOLAUCH",
+ "BOWRIFLE",
+ "LAUNCHER",
+ "PISTOL",
+ "BOWPISTOL",
+ "RIFLE",
+ "AUTOLAUNCH_AMMO",
+ "BOWRIFLE_AMMO",
+ "LAUNCHER_AMMO",
+ "PISTOL_AMMO",
+ "BOWPISTOL_AMMO",
+ "RIFLE_AMMO",
+ "SHIELD",
+ "BUCKLER",
+ "LIGHT_BOOTS",
+ "LIGHT_GLOVES",
+ "LIGHT_PANTS",
+ "LIGHT_SLEEVES",
+ "LIGHT_VEST",
+ "MEDIUM_BOOTS",
+ "MEDIUM_GLOVES",
+ "MEDIUM_PANTS",
+ "MEDIUM_SLEEVES",
+ "MEDIUM_VEST",
+ "HEAVY_BOOTS",
+ "HEAVY_GLOVES",
+ "HEAVY_PANTS",
+ "HEAVY_SLEEVES",
+ "HEAVY_VEST",
+ "HEAVY_HELMET",
+ "ANKLET",
+ "BRACELET",
+ "DIADEM",
+ "EARING",
+ "PENDANT",
+ "RING",
+ "SHEARS",
+ "ArmorTool",
+ "AmmoTool",
+ "MeleeWeaponTool",
+ "RangeWeaponTool",
+ "JewelryTool",
+ "ToolMaker",
+ "MEKTOUB_PACKER_TICKET",
+ "MEKTOUB_MOUNT_TICKET",
+ "MAGICIAN_STAFF",
+ "HAIR_MALE",
+ "HAIRCOLOR_MALE",
+ "TATOO_MALE",
+ "HAIR_FEMALE",
+ "HAIRCOLOR_FEMALE",
+ "TATOO_FEMALE",
+ "FOOD",
+ "SERVICE_STABLE",
+ "JOB_ELEMENT",
+
+
+
+ "END_ITEM_CATEGORY",
+
+ "RM_ITEM_PART",
+ "MPL", //A (Blade)
+ "MPH", //B MpH (Hammer)
+ "MPP", //C MpP (Point)
+ "MPM", //D MpM (Shaft)
+ "MPG", //E MpG (Grip)
+ "MPC", //F MpC (Counterweight)
+ "MPGA", //G MpGA (Trigger)
+ "MPPE", //H MpPE (Firing pin)
+ "MPCA", //I MpCA (Barrel)
+ "MPE", //J MpE (Explosive)
+ "MPEN", //K MpEN (Ammo jacket)
+ "MPPR", //L MpPR (Ammo bullet)
+ "MPCR", //M MpCR (Armor shell)
+ "MPRI", //N MpRI (Armor interior coating)
+ "MPRE", //O MpRE (Armor interieur stuffing)
+ "MPAT", //P MpAT (Armor clip)
+ "MPSU", //Q MpSU (Jewel stone support)
+ "MPED", //R MpED (Jewel stone)
+ "MPBT", //S MpBT (Blacksmith tool)
+ "MPPES", //T MpPES (Pestle tool)
+ "MPSH", //U MpSH (Sharpener tool)
+ "MPTK", //V MpTK (Tunneling Knife)
+ "MPJH", //W MpJH (Jewelry hammer)
+ "MPCF", //X MpCF (Campfire)
+ "MPVE", //Y MpVE (Clothes)
+ "MPMF", //Z MpMF (Magic Focus)
+ "END_RM_ITEM_PART",
+
+ "TELEPORT",
+ "KAMI_TP",
+ "KARAVAN_TP",
+ "END_TELEPORT",
+
+ "ECOSYSTEM",
+ "CommonEcosystem",
+ "Desert",
+ "Forest",
+ "Lacustre",
+ "Jungle",
+ "Goo",
+ "PrimaryRoot",
+ "END_ECOSYSTEM",
+
+ "ORIGIN",
+ "Common",
+ "Fyros",
+ "Matis",
+ "Tryker",
+ "Zorai",
+ "Karavan",
+ "Tribe",
+ "Refugee",
+ "END_ORIGIN",
+
+ "TOOLS_TYPE",
+ "CRAFTING_TOOL",
+ "HARVEST_TOOL",
+ "TAMING_TOOL",
+ "TRAINING_TOOL",
+ "END_TOOLS_TYPE",
+
+ "SHOP_TYPE",
+ "STATIC_SHOP", // Sell NPC Items
+ "DYNAMIC_SHOP", // Sell Player character Items
+ "STATIC_DYNAMIC_SHOP", // Sell NPC & Player character Items
+ "END_SHOP_TYPE",
+};
+
+// friendly versions of shop names
+ShopNameAliases=
+{
+ "MOUNT: unknown for this time",
+
+ //definition of item group aliases
+ //armor groups
+ "LARMOR: LIGHT_BOOTS: LIGHT_GLOVES: LIGHT_PANTS: LIGHT_SLEEVES: LIGHT_VEST",
+ "MARMOR: MEDIUM_BOOTS: MEDIUM_GLOVES: MEDIUM_PANTS: MEDIUM_SLEEVES: MEDIUM_VEST",
+ "HARMOR: HEAVY_BOOTS: HEAVY_GLOVES: HEAVY_PANTS: HEAVY_SLEEVES: HEAVY_VEST: HEAVY_HELMET",
+ "LARMORSHIELD: LIGHT_BOOTS: LIGHT_GLOVES: LIGHT_PANTS: LIGHT_SLEEVES: LIGHT_VEST: BUCKLER",
+ "MARMORSHIELD: MEDIUM_BOOTS: MEDIUM_GLOVES: MEDIUM_PANTS: MEDIUM_SLEEVES: MEDIUM_VEST: BUCKLER: SHIELD",
+ "HARMORSHIELD: HEAVY_BOOTS: HEAVY_GLOVES: HEAVY_PANTS: HEAVY_SLEEVES: HEAVY_VEST: HEAVY_HELMET: BUCKLER: SHIELD",
+
+ //weapon groups
+ "SHIELDS: SHIELD: BUCKLER",
+ "MELEE_WEAPON: DAGGER: SWORD: MACE: AXE: SPEAR: STAFF: TWO_HAND_SWORD: TWO_HAND_AXE: PIKE: TWO_HAND_MACE: MAGICIAN_STAFF:",
+ "MELEE: SHIELDS: MELEE_WEAPON",
+ "MELEE_WEAPON_1H: DAGGER: SWORD: MACE: AXE: SPEAR: STAFF",
+ "MELEE_WEAPON_2H: TWO_HAND_SWORD: TWO_HAND_AXE: PIKE: TWO_HAND_MACE: MAGICIAN_STAFF",
+ "NEWBIELAND_WEAPON_MATIS: DAGGER: SWORD: SPEAR : MAGICIAN_STAFF",
+ "NEWBIELAND_WEAPON_ZORAI: DAGGER: STAFF: MACE : MAGICIAN_STAFF",
+ "NEWBIELAND_WEAPON_FYROS: DAGGER: AXE: MACE : MAGICIAN_STAFF",
+ "NEWBIELAND_WEAPON_TRYKER: DAGGER: STAFF: SWORD : MAGICIAN_STAFF",
+ "MELEE_WEAPON_NEWBIELAND_ALL: DAGGER: SWORD: MACE: AXE", //NEW newbieland
+ "MELEE_WEAPON_2H_NEWBIELAND_ALL: TWO_HAND_SWORD: TWO_HAND_AXE: PIKE: TWO_HAND_MACE: MAGICIAN_STAFF", //NEW Newbieland
+ "AMMO: BOWRIFLE_AMMO: PISTOL_AMMO: BOWPISTOL_AMMO: RIFLE_AMMO: AUTOLAUNCH_AMMO: LAUNCHER_AMMO",
+ "RANGE_WEAPON: BOWRIFLE: PISTOL: BOWPISTOL: RIFLE: AUTOLAUCH: LAUNCHER",
+ "RANGE: RANGE_WEAPON: AMMO",
+ "RANGE_BOW: RANGE_WEAPON: AMMO",
+ "RANGE_PISTOLRIFLE: RANGE_WEAPON: AMMO",
+
+ //tool groups
+ "CRAFTING_TOOL: ArmorTool: AmmoTool: MeleeWeaponTool: RangeWeaponTool: JewelryTool: ToolMaker",
+ "HARVEST_TOOL: SHEARS",
+ "TOOL: CRAFTING_TOOL: HARVEST_TOOL",
+ "TOOLS_NOOB : ArmorTool: AmmoTool: MeleeWeaponTool: RangeWeaponTool: JewelryTool : HARVEST_TOOL", //NEW Newbieland
+
+ //cosmetic groups
+ "HAIRDRESSING_MALE: HAIR_MALE: HAIRCOLOR_MALE",
+ "HAIRDRESSING_FEMALE: HAIR_FEMALE: HAIRCOLOR_FEMALE",
+
+
+ //jewel group
+ "JEWEL: ANKLET: BRACELET: DIADEM: EARING: PENDANT: RING",
+ //end of definition of item group aliases
+
+ //definition of quality alias
+ "QUALITY_A: Q20",
+ "QUALITY_B: Q35",
+ "QUALITY_C: Q50",
+ "QUALITY_D: Q65",
+ "QUALITY_E: Q80",
+
+ //definition of level level aliases
+ //newbieland
+ "REFUGEE_LEVEL: L1: QUALITY_A",
+ "NEWBIELAND_LEVEL: L10: L20: L50: QUALITY_A",
+ "RM_NEWBIELAND_LEVEL: L10: L20: L50: QUALITY_A", //only for raw material
+
+
+ //villages
+ "VILLAGE_LOW_LEVEL: L10: L20: L50: L100: L150: QUALITY_A",
+ "VILLAGE_MED_LEVEL: L10: L20: L50: L100: L150: L200: QUALITY_A",
+ "VILLAGE_HIGH_LEVEL: L10: L20: L50: L100: L150: L200: L250: L300: QUALITY_A",
+ "VILLAGE_LEVEL: L10: L20: L50: QUALITY_A",
+ "RM_VILLAGE_LEVEL: L10: L20: L50: QUALITY_A", //only for raw material
+ "RM_VILLAGE_HIGH_LEVEL: L10: L20: L50: L100: L150: L200: L250: L300: QUALITY_A", //only for raw material
+
+ //town
+ "TOWN_LOW_LEVEL: L10: L20: L50: QUALITY_A",
+ "TOWN_HIGH_LEVEL: L10: L20: L50: L100: QUALITY_A",
+ "RM_TOWN_LEVEL: L10: L20: L50: L100: L150: QUALITY_A", //only for raw material
+
+ //tribe
+ "TRIBE_LEVEL: L10: L20: L50: L100: L150: L200: L250: L300: QUALITY_A",
+
+ //end of definition of level aliases
+
+ //definition of regional aliases
+ //armor
+ "MATIS_LARMOR: Matis: LARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "MATIS_MARMOR: Matis: MARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "MATIS_HARMOR: Matis: HARMORSHIELD: STATIC_DYNAMIC_SHOP",
+
+ "TRYKER_LARMOR: Tryker: LARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "TRYKER_MARMOR: Tryker: MARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "TRYKER_HARMOR: Tryker: HARMORSHIELD: STATIC_DYNAMIC_SHOP",
+
+ "ZORAI_LARMOR: Zorai: LARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "ZORAI_MARMOR: Zorai: MARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "ZORAI_HARMOR: Zorai: HARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "FYROS_LARMOR: Fyros: LARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "FYROS_MARMOR: Fyros: MARMORSHIELD: STATIC_DYNAMIC_SHOP",
+ "FYROS_HARMOR: Fyros: HARMORSHIELD: STATIC_DYNAMIC_SHOP",
+
+ "NEWBIELAND_LARMOR_MATIS: NEWBIELAND_LEVEL: Matis: LARMORSHIELD: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_LARMOR_ZORAI: NEWBIELAND_LEVEL: Zorai: LARMORSHIELD: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_LARMOR_FYROS: NEWBIELAND_LEVEL: Fyros: LARMORSHIELD: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_LARMOR_TRYKER: NEWBIELAND_LEVEL: Tryker: LARMORSHIELD: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_MARMOR: NEWBIELAND_LEVEL: MARMORSHIELD: DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_HARMOR: NEWBIELAND_LEVEL: HARMORSHIELD: DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_LARMOR_ALL : NEWBIELAND_LEVEL: LARMOR: DYNAMIC_SHOP", //NEW newbieland
+ "NEWBIELAND_MARMOR_ALL : NEWBIELAND_LEVEL: MARMOR: DYNAMIC_SHOP", //NEW newbieland
+
+ //weapon
+ "MATIS_MELEE: Common : Matis: MELEE: STATIC_DYNAMIC_SHOP",
+ "FYROS_MELEE: Common : Fyros: MELEE: STATIC_DYNAMIC_SHOP",
+ "ZORAI_MELEE: Common : Zorai: MELEE: STATIC_DYNAMIC_SHOP",
+ "TRYKER_MELEE: Common : Tryker: MELEE: STATIC_DYNAMIC_SHOP",
+ "MATIS_MELEE_WEAPON_1H: Common : Matis : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP",
+ "FYROS_MELEE_WEAPON_1H: Common : Fyros : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP",
+ "ZORAI_MELEE_WEAPON_1H: Common : Zorai : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP",
+ "TRYKER_MELEE_WEAPON_1H: Common : Tryker : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP",
+ "MATIS_MELEE_WEAPON_2H: Common : Matis : MELEE_WEAPON_2H: STATIC_DYNAMIC_SHOP",
+ "FYROS_MELEE_WEAPON_2H: Common : Fyros : MELEE_WEAPON_2H: STATIC_DYNAMIC_SHOP",
+ "ZORAI_MELEE_WEAPON_2H: Common : Zorai : MELEE_WEAPON_2H: STATIC_DYNAMIC_SHOP",
+ "TRYKER_MELEE_WEAPON_2H: Common : Tryker : MELEE_WEAPON_2H: STATIC_DYNAMIC_SHOP",
+ "MATIS_NEWBIELAND_WEAPON_MATIS: NEWBIELAND_LEVEL: Common : Matis : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "FYROS_NEWBIELAND_WEAPON_FYROS: NEWBIELAND_LEVEL: Common : Fyros : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "ZORAI_NEWBIELAND_WEAPON_ZORAI: NEWBIELAND_LEVEL: Common : Zorai : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "TRYKER_NEWBIELAND_WEAPON_TRYKER: NEWBIELAND_LEVEL: Common : Tryker : MELEE_WEAPON_1H: STATIC_DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_MELEE_WEAPON_2H: NEWBIELAND_LEVEL: MELEE_WEAPON_2H: DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_RANGE_WEAPON: NEWBIELAND_LEVEL: RANGE: DYNAMIC_SHOP", //only for newbieland
+ "NEWBIELAND_WEAPON_ALL: NEWBIELAND_LEVEL: MELEE_WEAPON_NEWBIELAND_ALL: STATIC_DYNAMIC_SHOP", //NEW newbieland
+ "MELEE_WEAPON_2H_NEWBIELAND: NEWBIELAND_LEVEL: MELEE_WEAPON_2H_NEWBIELAND_ALL: DYNAMIC_SHOP", //NEW newbieland
+
+
+ "MATIS_RANGE: Common : Matis : RANGE: STATIC_DYNAMIC_SHOP",
+ "FYROS_RANGE: Common : Fyros : RANGE: STATIC_DYNAMIC_SHOP",
+ "ZORAI_RANGE: Common : Zorai : RANGE: STATIC_DYNAMIC_SHOP",
+ "TRYKER_RANGE: Common : Tryker : RANGE: STATIC_DYNAMIC_SHOP",
+ "MATIS_RANGE_BOW: Common : Matis : RANGE_BOW: STATIC_DYNAMIC_SHOP",
+ "FYROS_RANGE_BOW: Common : Fyros : RANGE_BOW: STATIC_DYNAMIC_SHOP",
+ "ZORAI_RANGE_BOW: Common : Zorai : RANGE_BOW: STATIC_DYNAMIC_SHOP",
+ "TRYKER_RANGE_BOW: Common : Tryker : RANGE_BOW: STATIC_DYNAMIC_SHOP",
+ "MATIS_RANGE_PISTOLRIFLE: Common : Matis : RANGE_PISTOLRIFLE: STATIC_DYNAMIC_SHOP",
+ "FYROS_RANGE_PISTOLRIFLE: Common : Fyros : RANGE_PISTOLRIFLE: STATIC_DYNAMIC_SHOP",
+ "ZORAI_RANGE_PISTOLRIFLE: Common : Zorai : RANGE_PISTOLRIFLE: STATIC_DYNAMIC_SHOP",
+ "TRYKER_RANGE_PISTOLRIFLE: Common : Tryker : RANGE_PISTOLRIFLE: STATIC_DYNAMIC_SHOP",
+
+ //tool
+ "COMMON_TOOL: Common : TOOL: STATIC_DYNAMIC_SHOP",
+ "NEWBIELAND_TOOL : Common : TOOLS_NOOB: STATIC_DYNAMIC_SHOP", // NEW Newbieland
+
+ //job elements
+ "COMMON_JOB: Common : JOB_ELEMENT: STATIC_DYNAMIC_SHOP",
+
+ //jewel
+ "MATIS_JEWEL: Matis: JEWEL: DYNAMIC_SHOP",
+ "TRYKER_JEWEL: Tryker: JEWEL: DYNAMIC_SHOP",
+ "ZORAI_JEWEL: Zorai: JEWEL: DYNAMIC_SHOP",
+ "FYROS_JEWEL: Fyros: JEWEL: DYNAMIC_SHOP",
+ "MATIS_NEWBIELAND_JEWEL:MATIS_JEWEL:NEWBIELAND_LEVEL",
+ "TRYKER_NEWBIELAND_JEWEL:TRYKER_JEWEL:NEWBIELAND_LEVEL",
+ "ZORAI_NEWBIELAND_JEWEL:ZORAI_JEWEL:NEWBIELAND_LEVEL",
+ "FYROS_NEWBIELAND_JEWEL:FYROS_JEWEL:NEWBIELAND_LEVEL",
+ "NEWBIELAND_JEWEL_ALL: NEWBIELAND_LEVEL: JEWEL: DYNAMIC_SHOP", //NEW Newbieland
+
+ //cosmetic
+ "MATIS_HAIRDRESSING_MALE: Matis: HAIRDRESSING_MALE: STATIC_SHOP",
+ "MATIS_HAIRDRESSING_FEMALE: Matis: HAIRDRESSING_FEMALE: STATIC_SHOP",
+ "MATIS_TATOO_MALE: Matis: TATOO_MALE: STATIC_SHOP",
+ "MATIS_TATOO_FEMALE: Matis: TATOO_FEMALE: STATIC_SHOP",
+ "TRYKER_HAIRDRESSING_MALE: Tryker: HAIRDRESSING_MALE: STATIC_SHOP",
+ "TRYKER_HAIRDRESSING_FEMALE: Tryker: HAIRDRESSING_FEMALE: STATIC_SHOP",
+ "TRYKER_TATOO_MALE: Tryker: TATOO_MALE: STATIC_SHOP",
+ "TRYKER_TATOO_FEMALE: Tryker: TATOO_FEMALE: STATIC_SHOP",
+ "ZORAI_HAIRDRESSING_MALE: Zorai: HAIRDRESSING_MALE: STATIC_SHOP",
+ "ZORAI_HAIRDRESSING_FEMALE: Zorai: HAIRDRESSING_FEMALE: STATIC_SHOP",
+ "ZORAI_TATOO_MALE: Zorai: TATOO_MALE: STATIC_SHOP",
+ "ZORAI_TATOO_FEMALE: Zorai: TATOO_FEMALE: STATIC_SHOP",
+ "FYROS_HAIRDRESSING_MALE: Fyros: HAIRDRESSING_MALE: STATIC_SHOP",
+ "FYROS_HAIRDRESSING_FEMALE: Fyros: HAIRDRESSING_FEMALE: STATIC_SHOP",
+ "FYROS_TATOO_MALE: Fyros: TATOO_MALE: STATIC_SHOP",
+ "FYROS_TATOO_FEMALE: Fyros: TATOO_FEMALE: STATIC_SHOP",
+
+
+
+ // Item part per item family
+ "RM_ITEM_PART_MELEE: MPL: MPH: MPP: MPM: MPG: MPC: MPMF: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_RANGE: MPGA: MPPE: MPCA: MPM: MPE: MPEN: MPPR: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_ARMOR: MPCR: MPRI: MPRE: MPAT: MPVE: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_JEWEL: MPSU: MPED: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_MAGIC_FOCUS: MPMF: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_CLOTH: MPVE: STATIC_DYNAMIC_SHOP",
+ "RM_ITEM_PART_TOOLS: MPBT: MPPES: MPSH: MPTK: MPJH: MPCF: STATIC_DYNAMIC_SHOP",
+
+ // Item part per craftgroup
+ "RM_CRAFTGROUP_AC: MPL: MPP",
+ "RM_CRAFTGROUP_BF: MPH: MPC",
+ "RM_CRAFTGROUP_RZ: MPED: MPMF",
+ "RM_CRAFTGROUP_IM: MPCA: MPCR",
+ "RM_CRAFTGROUP_HP: MPPE: MPAT",
+ "RM_CRAFTGROUP_DL: MPM: MPPR",
+ "RM_CRAFTGROUP_GQ: MPGA: MPSU",
+ "RM_CRAFTGROUP_EY: MPG: MPVE",
+ "RM_CRAFTGROUP_KN: MPEN: MPRI",
+ "RM_CRAFTGROUP_JO: MPE: MPRE",
+
+ // All Item parts sold by merchants
+ "RM_ITEM_PART_SOLD: MPL: MPP: MPH: MPC: MPED: MPMF: MPCA: MPCR: MPPE: MPAT: MPM: MPPR: MPGA: MPSU: MPG: MPVE: MPEN: MPRI: MPE: MPRE: STATIC_DYNAMIC_SHOP",
+
+
+ //forest ecosystem
+ "RM_FOREST_0: Forest: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_1: Forest: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_2: Forest: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_3: Forest: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_4: Forest: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_5: Forest: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_FOREST_6: Forest: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //jungle ecosystem
+ "RM_JUNGLE_0: Jungle: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_1: Jungle: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_2: Jungle: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_3: Jungle: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_4: Jungle: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_5: Jungle: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_JUNGLE_6: Jungle: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //desert ecosystem
+ "RM_DESERT_0: Desert: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_1: Desert: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_2: Desert: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_3: Desert: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_4: Desert: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_5: Desert: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_DESERT_6: Desert: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //lake ecosystem
+ "RM_LAKE_0: Lacustre: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_1: Lacustre: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_2: Lacustre: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_3: Lacustre: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_4: Lacustre: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_5: Lacustre: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_LAKE_6: Lacustre: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //goo ecosystem
+ "RM_GOO_0: Goo: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_1: Goo: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_2: Goo: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_3: Goo: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_4: Goo: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_5: Goo: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_GOO_6: Goo: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //primary root ecosystem
+ "RM_PRIMROOT_0: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_MELEE: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_1: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_RANGE: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_2: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_ARMOR: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_3: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_JEWEL: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_4: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_MAGIC_FOCUS: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_5: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_CLOTH: STATIC_DYNAMIC_SHOP",
+ "RM_PRIMROOT_6: PrimaryRoot: CommonEcosystem: RM_ITEM_PART_TOOLS: STATIC_DYNAMIC_SHOP", //not used in craft at this time
+
+ //Stable boys items:
+ "STABLE_BOY_MATIS: Common: Matis: SERVICE_STABLE: FOOD: MEKTOUB_PACKER_TICKET: MEKTOUB_MOUNT_TICKET: STATIC_DYNAMIC_SHOP",
+ "STABLE_BOY_ZORAI: Common: Zorai: SERVICE_STABLE: FOOD: MEKTOUB_PACKER_TICKET: MEKTOUB_MOUNT_TICKET: STATIC_DYNAMIC_SHOP",
+ "STABLE_BOY_FYROS: Common: Fyros: SERVICE_STABLE: FOOD: MEKTOUB_PACKER_TICKET: MEKTOUB_MOUNT_TICKET: STATIC_DYNAMIC_SHOP",
+ "STABLE_BOY_TRYKER: Common: Tryker: SERVICE_STABLE: FOOD: MEKTOUB_PACKER_TICKET: MEKTOUB_MOUNT_TICKET: STATIC_DYNAMIC_SHOP",
+
+ //end of definition of regional aliases
+
+
+ "KAMI_TP_FOREST: KAMI_TP: Forest",
+ "KAMI_TP_JUNGLE: KAMI_TP: Jungle",
+ "KARAVAN_TP_FOREST: KARAVAN_TP: Forest",
+ "KARAVAN_TP_JUNGLE: KARAVAN_TP: Jungle",
+
+ "FYROS_HARVEST_ACTION: Common : Fyros: harvest_action",
+ "FYROS_CRAFT_ACTION: Common : Fyros: craft_action",
+ "FYROS_MAGIC_ACTION: Common : Fyros: magic_action",
+ "FYROS_FIGHT_ACTION: Common : Fyros: fight_action",
+
+ "MATIS_HARVEST_ACTION: Common : Matis: harvest_action",
+ "MATIS_CRAFT_ACTION: Common : Matis: craft_action",
+ "MATIS_MAGIC_ACTION: Common : Matis: magic_action",
+ "MATIS_FIGHT_ACTION: Common : Matis: fight_action",
+
+ "TRYKER_HARVEST_ACTION: Common: Tryker: harvest_action",
+ "TRYKER_CRAFT_ACTION: Common :Tryker: craft_action",
+ "TRYKER_MAGIC_ACTION: Common :Tryker: magic_action",
+ "TRYKER_FIGHT_ACTION: Common :Tryker: fight_action",
+
+ "ZORAI_HARVEST_ACTION: Common : Zorai: harvest_action",
+ "ZORAI_CRAFT_ACTION: Common :Zorai: craft_action",
+ "ZORAI_MAGIC_ACTION: Common :Zorai: magic_action",
+ "ZORAI_FIGHT_ACTION: Common :Zorai: fight_action",
+};
diff --git a/code/ryzom/server/data_shard/mirror_sheets/fame.dataset b/code/ryzom/server/data_shard/mirror_sheets/fame.dataset
new file mode 100644
index 000000000..d24691d63
--- /dev/null
+++ b/code/ryzom/server/data_shard/mirror_sheets/fame.dataset
@@ -0,0 +1,741 @@
+
+
diff --git a/code/ryzom/server/data_shard/mirror_sheets/fe_temp.dataset b/code/ryzom/server/data_shard/mirror_sheets/fe_temp.dataset
new file mode 100644
index 000000000..f88263c27
--- /dev/null
+++ b/code/ryzom/server/data_shard/mirror_sheets/fe_temp.dataset
@@ -0,0 +1,365 @@
+
+
diff --git a/code/ryzom/server/data_shard/mirror_sheets/pet.dataset b/code/ryzom/server/data_shard/mirror_sheets/pet.dataset
new file mode 100644
index 000000000..238a38dbd
--- /dev/null
+++ b/code/ryzom/server/data_shard/mirror_sheets/pet.dataset
@@ -0,0 +1,47 @@
+
+
diff --git a/code/ryzom/server/data_shard/single.property_array b/code/ryzom/server/data_shard/single.property_array
deleted file mode 100644
index 194f6eecb..000000000
--- a/code/ryzom/server/data_shard/single.property_array
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
diff --git a/code/ryzom/server/src/tick_service/range_mirror_manager.cpp b/code/ryzom/server/src/tick_service/range_mirror_manager.cpp
index 1d233c8e5..14a2e8e85 100644
--- a/code/ryzom/server/src/tick_service/range_mirror_manager.cpp
+++ b/code/ryzom/server/src/tick_service/range_mirror_manager.cpp
@@ -145,7 +145,7 @@ void CRangeMirrorManager::init()
// Load datasets into temporary map to get the names
TSDataSetSheets sDataSetSheets;
- loadForm( "dataset", "data_shard/datasets.packed_sheets", sDataSetSheets );
+ loadForm( "dataset", IService::getInstance()->WriteFilesDirectory.toString()+"datasets.packed_sheets", sDataSetSheets );
TSDataSetSheets::iterator ism;
for ( ism=sDataSetSheets.begin(); ism!=sDataSetSheets.end(); ++ism )
{