diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/actions.xml b/code/ryzom/client/data/gamedev/interfaces_v3/actions.xml
index 8696de32a..d628a6996 100644
--- a/code/ryzom/client/data/gamedev/interfaces_v3/actions.xml
+++ b/code/ryzom/client/data/gamedev/interfaces_v3/actions.xml
@@ -220,6 +220,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/ryzom/client/src/commands.cpp b/code/ryzom/client/src/commands.cpp
index 978cc144a..8ba5f769f 100644
--- a/code/ryzom/client/src/commands.cpp
+++ b/code/ryzom/client/src/commands.cpp
@@ -233,14 +233,20 @@ NLMISC_COMMAND(equipGroup, "equip group ", "name")
if(CItemGroupManager::getInstance()->equipGroup(args[0]))
{
ucstring msg = CI18N::get("cmdEquipGroupSuccess");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return true;
}
else
{
ucstring msg = CI18N::get("cmdEquipGroupError");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return false;
}
@@ -261,7 +267,10 @@ NLMISC_COMMAND(moveGroup, "move group to ", "name dst")
if(CItemGroupManager::getInstance()->moveGroup(args[0], INVENTORIES::toInventory(args[1])))
{
ucstring msg = CI18N::get("cmdMoveGroupSuccess");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
strFindReplace(msg, "%inventory", args[1]);
pIM->displaySystemInfo(msg);
return true;
@@ -269,7 +278,10 @@ NLMISC_COMMAND(moveGroup, "move group to ", "name dst")
else
{
ucstring msg = CI18N::get("cmdMoveGroupError");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
strFindReplace(msg, "%inventory", args[1]);
pIM->displaySystemInfo(msg);
return false;
@@ -297,14 +309,20 @@ NLMISC_COMMAND(createGroup, "create group [true](create a for ev
msg = CI18N::get("cmdCreateGroupSuccess2");
else
msg = CI18N::get("cmdCreateGroupSuccess1");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return true;
}
else
{
ucstring msg = CI18N::get("cmdCreateGroupError");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return false;
}
@@ -325,14 +343,20 @@ NLMISC_COMMAND(deleteGroup, "delete group ", "name")
if(CItemGroupManager::getInstance()->deleteGroup(args[0]))
{
ucstring msg = CI18N::get("cmdDeleteGroupSuccess");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return true;
}
else
{
ucstring msg = CI18N::get("cmdDeleteGroupError");
- strFindReplace(msg, "%name", args[0]);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(args[0]);
+ strFindReplace(msg, "%name", nameUC);
pIM->displaySystemInfo(msg);
return false;
}
diff --git a/code/ryzom/client/src/interface_v3/action_handler_item.cpp b/code/ryzom/client/src/interface_v3/action_handler_item.cpp
index e8c07f837..d15ae130c 100644
--- a/code/ryzom/client/src/interface_v3/action_handler_item.cpp
+++ b/code/ryzom/client/src/interface_v3/action_handler_item.cpp
@@ -2041,7 +2041,10 @@ class CHandlerItemMenuCheck : public IActionHandler
{
std::string name = groupNames[i];
std::string ahParams = "name=" + name;
- pGroupMenu->addLine(ucstring(name), "", "", name);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(name);
+ pGroupMenu->addLine(nameUC, "", "", name);
CGroupSubMenu* pNewSubMenu = new CGroupSubMenu(CViewBase::TCtorParam());
pGroupMenu->setSubMenu(pGroupMenu->getNumLine()-1, pNewSubMenu);
if(pNewSubMenu)
diff --git a/code/ryzom/client/src/item_group_manager.cpp b/code/ryzom/client/src/item_group_manager.cpp
index 12486666a..90b8424a6 100644
--- a/code/ryzom/client/src/item_group_manager.cpp
+++ b/code/ryzom/client/src/item_group_manager.cpp
@@ -492,8 +492,10 @@ bool CItemGroupManager::createGroup(std::string name, bool removeUnequiped)
{
SLOT_EQUIPMENT::TSlotEquipment slot = (SLOT_EQUIPMENT::TSlotEquipment)i;
//Instead of doing two separate for, just be a bit tricky for hand equipment
- if(slot == SLOT_EQUIPMENT::HANDR || slot == SLOT_EQUIPMENT::HANDL)
- pCS = CInventoryManager::getInstance()->getHandSheet((uint32)(slot - SLOT_EQUIPMENT::HANDL));
+ if(slot == SLOT_EQUIPMENT::HANDR)
+ pCS = CInventoryManager::getInstance()->getHandSheet(0);
+ else if(slot == SLOT_EQUIPMENT::HANDL)
+ pCS = CInventoryManager::getInstance()->getHandSheet(1);
else
pCS = CInventoryManager::getInstance()->getEquipSheet(i);
if(!pCS) continue;
@@ -537,7 +539,10 @@ void CItemGroupManager::listGroup()
{
CItemGroup group = _Groups[i];
ucstring msg = NLMISC::CI18N::get("cmdListGroupLine");
- NLMISC::strFindReplace(msg, "%name", group.name);
+ //Use ucstring because group name can contain accentued characters (and stuff like that)
+ ucstring nameUC;
+ nameUC.fromUtf8(group.name);
+ NLMISC::strFindReplace(msg, "%name", nameUC);
NLMISC::strFindReplace(msg, "%size", NLMISC::toString(group.Items.size()));
pIM->displaySystemInfo(msg);
}
@@ -607,7 +612,14 @@ std::vector CItemGroupManager::matchingItems(CItemGroup *group,
SLOT_EQUIPMENT::TSlotEquipment slot;
if(group->contains(pCS, slot))
{
- out.push_back(CInventoryItem(pCS, inventory, i, slot));
+ //Sometimes, index in the list differ from the index in DB, and we need the index in DB, not the one from the list
+ std::string dbPath = pCS->getSheet();
+ std::size_t found = dbPath.find_last_of(":");
+ std::string indexS = dbPath.substr(found+1);
+ uint32 index;
+ NLMISC::fromString(indexS, index);
+ if(i != index) nldebug("Index from list is %d, where index from DB is %d", i, index);
+ out.push_back(CInventoryItem(pCS, inventory, index, slot));
}
}