diff --git a/code/ryzom/client/data/gamedev/interfaces_v3/commands.xml b/code/ryzom/client/data/gamedev/interfaces_v3/commands.xml index 6fdb5d32a..58f41d919 100644 --- a/code/ryzom/client/data/gamedev/interfaces_v3/commands.xml +++ b/code/ryzom/client/data/gamedev/interfaces_v3/commands.xml @@ -63,9 +63,15 @@ + + + + + + diff --git a/code/ryzom/client/src/entities.cpp b/code/ryzom/client/src/entities.cpp index 516232108..ca087a837 100644 --- a/code/ryzom/client/src/entities.cpp +++ b/code/ryzom/client/src/entities.cpp @@ -1949,7 +1949,26 @@ CEntityCL *CEntityManager::getEntityByCompressedIndex(TDataSetIndex compressedIn } return NULL; } - +//----------------------------------------------- +// getEntityBySheetName : +// Return an entity based on its sheet name +//----------------------------------------------- +CEntityCL *CEntityManager::getEntityBySheetName (const std::string &sheet) const +{ + if (!sheet.empty()) + { + uint i; + const CSheetId& sheetRef = NLMISC::CSheetId(sheet); + const uint count = (uint)_Entities.size(); + for (i=0; isheetId() == sheetRef) + return _Entities[i]; + } + } + return NULL; +} //----------------------------------------------- // managePACSTriggers : // Manage PACS Triggers. diff --git a/code/ryzom/client/src/entities.h b/code/ryzom/client/src/entities.h index f71240b63..e96e17e5e 100644 --- a/code/ryzom/client/src/entities.h +++ b/code/ryzom/client/src/entities.h @@ -277,7 +277,7 @@ public: * \param complete : if true, the name must match the full name of the entity. */ CEntityCL *getEntityByName (const ucstring &name, bool caseSensitive, bool complete) const; - + CEntityCL *getEntityBySheetName (const std::string &sheet) const; /// Get an entity by dataset index. Returns NULL if the entity is not found. CEntityCL *getEntityByCompressedIndex(TDataSetIndex compressedIndex) const; diff --git a/code/ryzom/client/src/interface_v3/action_handler_game.cpp b/code/ryzom/client/src/interface_v3/action_handler_game.cpp index 76e664bc0..bd74e76d6 100644 --- a/code/ryzom/client/src/interface_v3/action_handler_game.cpp +++ b/code/ryzom/client/src/interface_v3/action_handler_game.cpp @@ -2418,6 +2418,7 @@ class CAHTarget : public IActionHandler ucstring entityName; entityName.fromUtf8 (getParam (Params, "entity")); bool preferCompleteMatch = (getParam (Params, "prefer_complete_match") != "0"); + bool quiet = (getParam (Params, "quiet") == "true"); if (!entityName.empty()) { @@ -2433,6 +2434,12 @@ class CAHTarget : public IActionHandler // Get the entity with a partial match entity = EntitiesMngr.getEntityByName (entityName, false, false); } + + if (entity == NULL) + { + //Get the entity with a sheetName + entity = EntitiesMngr.getEntityBySheetName(entityName.toUtf8()); + } if (entity) { @@ -2457,7 +2464,8 @@ class CAHTarget : public IActionHandler // to avoid campfire selection exploit #316 nldebug("is not prop selectable"); CInterfaceManager *pIM= CInterfaceManager::getInstance(); - pIM->displaySystemInfo(CI18N::get("uiTargetErrorCmd")); + if(!quiet) + pIM->displaySystemInfo(CI18N::get("uiTargetErrorCmd")); return; } @@ -2467,7 +2475,8 @@ class CAHTarget : public IActionHandler else { CInterfaceManager *pIM= CInterfaceManager::getInstance(); - pIM->displaySystemInfo(CI18N::get("uiTargetErrorCmd")); + if(!quiet) + pIM->displaySystemInfo(CI18N::get("uiTargetErrorCmd")); } } }