# Conflicts:
#	indra/llrender/llgl.cpp
#	indra/newview/app_settings/settings.xml
#	indra/newview/skins/default/xui/en/notifications.xml
master
Ansariel 2024-09-09 19:50:00 +02:00
commit 82e8fd1671
36 changed files with 370 additions and 266 deletions

View File

@ -295,9 +295,10 @@ jobs:
run: rm *${{ env.fallback_platform }}*bz2
shell: bash
- name: Configure
run: autobuild configure -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
run: |
autobuild configure -c ReleaseFS -A${{matrix.addrsize}} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
echo "BUGSPLAT_DB=$BUGSPLAT_DB" >> $GITHUB_ENV
shell: bash
- name: build
id: build
run: autobuild build -c ReleaseFS -A${{matrix.addrsize}} --no-configure

View File

@ -1261,6 +1261,7 @@ bool LLGLManager::initGL()
LL_INFOS("RenderInit") << "VRAM Detected (NVXMemInfo):" << mVRAM << LL_ENDL;
}
#ifdef LL_WINDOWS
if (mHasAMDAssociations && mVRAM == 0)
{
GLuint gl_gpus_count = wglGetGPUIDsAMD(0, 0);
@ -1286,6 +1287,7 @@ bool LLGLManager::initGL()
}
LL_INFOS("RenderInit") << "VRAM Detected (AMDAssociations):" << mVRAM << LL_ENDL;
}
#endif
if (mHasATIMemInfo && mVRAM == 0)
{ //ask the gl how much vram is free at startup and attempt to use no more than half of that

View File

@ -1674,9 +1674,6 @@ const S32 max_format = (S32)num_formats - 1;
close();
return false;
}
//LL_PROFILER_GPU_CONTEXT; <FS:Beq/> TODO(Beq) review this
LL_PROFILER_GPU_CONTEXT
// Disable vertical sync for swap
toggleVSync(enable_vsync);

View File

@ -2102,6 +2102,12 @@ source_group("Firestorm Resources" FILES ${viewer_FS_RESOURCES})
set_source_files_properties(${viewer_FS_RESOURCES}
PROPERTIES HEADER_FILE_ONLY TRUE)
list(APPEND viewer_SOURCE_FILES ${viewer_FS_RESOURCES})
file(GLOB viewer_PY_SCRIPTS *.py)
source_group("Python Scripts" FILES ${viewer_PY_SCRIPTS})
set_source_files_properties(${viewer_PY_SCRIPTS}
PROPERTIES HEADER_FILE_ONLY TRUE)
list(APPEND viewer_SOURCE_FILES ${viewer_PY_SCRIPTS})
# </FS:Ansariel>
if (WINDOWS)

View File

@ -252,7 +252,7 @@ bool NACLFloaterExploreSounds::tick()
{
LLStringUtil::format_map_t format_args;
format_args["TIME"] = llformat("%.1f", static_cast<F32>((LLTimer::getElapsedSeconds() - item.mTimeStopped) / 60.0));
playing_column["value"] = format_string(str_not_playing, format_args);
playing_column["value"] = FSCommon::format_string(str_not_playing, format_args);
}
LLSD& type_column = element["columns"][1];

View File

@ -103,22 +103,22 @@ public:
doZdCleanup();
if (mErrorCode == 1)
{
report_to_nearby_chat(llformat("The object with the UUID of \"%s\" can no longer be found in-world.", mDropUUID.c_str()));
report_to_nearby_chat("This can occur if the object was returned or deleted, or if your client is no longer rendering it.");
report_to_nearby_chat(llformat("Transfer from \"%s\" to \"%s\" aborted.", mFolderName.c_str(), mDropUUID.c_str()));
FSCommon::report_to_nearby_chat(llformat("The object with the UUID of \"%s\" can no longer be found in-world.", mDropUUID.c_str()));
FSCommon::report_to_nearby_chat("This can occur if the object was returned or deleted, or if your client is no longer rendering it.");
FSCommon::report_to_nearby_chat(llformat("Transfer from \"%s\" to \"%s\" aborted.", mFolderName.c_str(), mDropUUID.c_str()));
}
else
{
if (mPackage)
{
report_to_nearby_chat("Packager finished, you may now pick up the prim that contains the objects.");
report_to_nearby_chat(llformat("Packaged what you had selected in world into the folder \"%s\" in your inventory and into the prim with the UUID of \"%s\"", mFolderName.c_str(), mDropUUID.c_str()));
report_to_nearby_chat("Don't worry if you look at the contents of package right now, it may show as empty, it isn't, it's just a bug with Second Life itself.");
report_to_nearby_chat("If you take it into your inventory then rez it back out, all the contents will be there.");
FSCommon::report_to_nearby_chat("Packager finished, you may now pick up the prim that contains the objects.");
FSCommon::report_to_nearby_chat(llformat("Packaged what you had selected in world into the folder \"%s\" in your inventory and into the prim with the UUID of \"%s\"", mFolderName.c_str(), mDropUUID.c_str()));
FSCommon::report_to_nearby_chat("Don't worry if you look at the contents of package right now, it may show as empty, it isn't, it's just a bug with Second Life itself.");
FSCommon::report_to_nearby_chat("If you take it into your inventory then rez it back out, all the contents will be there.");
}
else
{
report_to_nearby_chat(llformat("Completed transfer from \"%s\" to \"%s\".", mFolderName.c_str(), mDropUUID.c_str()));
FSCommon::report_to_nearby_chat(llformat("Completed transfer from \"%s\" to \"%s\".", mFolderName.c_str(), mDropUUID.c_str()));
}
}
}
@ -130,7 +130,7 @@ public:
LLViewerObject* objectp = gObjectList.findObject(mDestination);
if (objectp)
{
report_to_nearby_chat(std::string("Transferring ") + subj->getName());
FSCommon::report_to_nearby_chat(std::string("Transferring ") + subj->getName());
LLToolDragAndDrop::dropInventory(objectp, subj, LLToolDragAndDrop::SOURCE_AGENT, gAgentID);
if (mStack.size() > 0)
{
@ -218,11 +218,11 @@ public:
if (mPackage)
{
report_to_nearby_chat("Packager started. Phase 1 (taking in-world objects into inventory) starting in: ");
FSCommon::report_to_nearby_chat("Packager started. Phase 1 (taking in-world objects into inventory) starting in: ");
}
else
{
report_to_nearby_chat("Ztake activated. Taking selected in-world objects into inventory in: ");
FSCommon::report_to_nearby_chat("Ztake activated. Taking selected in-world objects into inventory in: ");
}
}
@ -230,7 +230,7 @@ public:
{
if (!mPackage)
{
report_to_nearby_chat("Ztake deactivated.");
FSCommon::report_to_nearby_chat("Ztake deactivated.");
}
}
@ -239,7 +239,7 @@ public:
switch (mState)
{
case ZTS_COUNTDOWN:
report_to_nearby_chat(llformat("%i...", mCountdown--));
FSCommon::report_to_nearby_chat(llformat("%i...", mCountdown--));
if (mCountdown == 0) mState = ZTS_SELECTION;
break;
@ -301,25 +301,25 @@ public:
}
else
{
report_to_nearby_chat("Ktake has taken all selected objects.");
FSCommon::report_to_nearby_chat("Ktake has taken all selected objects.");
doZtCleanup();
mState = ZTS_DONE;
}
}
else
{
report_to_nearby_chat("Ztake has taken all selected objects. Say \"ztake off\" to deactivate ztake or select more objects to continue.");
FSCommon::report_to_nearby_chat("Ztake has taken all selected objects. Say \"ztake off\" to deactivate ztake or select more objects to continue.");
}
}
else
{
if (mPackage)
{
report_to_nearby_chat(llformat("Packager: %i objects left to take.", mToTake.size()));
FSCommon::report_to_nearby_chat(llformat("Packager: %i objects left to take.", mToTake.size()));
}
else
{
report_to_nearby_chat(llformat("Ztake: %i objects left to take.", mToTake.size()));
FSCommon::report_to_nearby_chat(llformat("Ztake: %i objects left to take.", mToTake.size()));
}
}
}
@ -328,12 +328,12 @@ public:
{
if (mPackage)
{
report_to_nearby_chat(llformat("Packager: no objects to take."));
FSCommon::report_to_nearby_chat(llformat("Packager: no objects to take."));
doZtCleanup();
}
else
{
report_to_nearby_chat(llformat("Ztake: no objects to take."));
FSCommon::report_to_nearby_chat(llformat("Ztake: no objects to take."));
}
}
break;
@ -354,14 +354,14 @@ public:
{
if (itemstack.size() < mPackSize)
{
report_to_nearby_chat("Phase 1 of the packager finished, but some items mave have been missed.");
FSCommon::report_to_nearby_chat("Phase 1 of the packager finished, but some items mave have been missed.");
}
else
{
report_to_nearby_chat("Phase 1 of the packager finished.");
FSCommon::report_to_nearby_chat("Phase 1 of the packager finished.");
}
report_to_nearby_chat("Do not have the destination prim selected while transfer is running to reduce the chances of \"Inventory creation on in-world object failed.\"");
FSCommon::report_to_nearby_chat("Do not have the destination prim selected while transfer is running to reduce the chances of \"Inventory creation on in-world object failed.\"");
LLUUID sdest{ mPackageDest };
gZDrop = new JCZdrop(itemstack, sdest, mFolderName.c_str(), mPackageDest.asString().c_str(), true);
@ -427,12 +427,12 @@ public:
mRunning(false),
mCountdown(5)
{
report_to_nearby_chat("Mtake activated. Taking selected in-world objects into inventory in: ");
FSCommon::report_to_nearby_chat("Mtake activated. Taking selected in-world objects into inventory in: ");
}
~TMZtake()
{
report_to_nearby_chat("Mtake deactivated.");
FSCommon::report_to_nearby_chat("Mtake deactivated.");
}
bool tick()
@ -476,7 +476,7 @@ public:
}
if (mCountdown > 0)
{
report_to_nearby_chat(llformat("%i...", mCountdown--));
FSCommon::report_to_nearby_chat(llformat("%i...", mCountdown--));
}
else if (!mToTake.empty())
{
@ -502,11 +502,11 @@ public:
{
if (mToTake.empty())
{
report_to_nearby_chat("Mtake has taken all selected objects. Say \"mtake off\" to deactivate Mtake or select more objects to continue.");
FSCommon::report_to_nearby_chat("Mtake has taken all selected objects. Say \"mtake off\" to deactivate Mtake or select more objects to continue.");
}
else
{
report_to_nearby_chat(llformat("Mtake: %i objects left to take.", mToTake.size()));
FSCommon::report_to_nearby_chat(llformat("Mtake: %i objects left to take.", mToTake.size()));
}
}
}
@ -539,7 +539,7 @@ static void key_to_name_callback(const LLUUID& id, const LLAvatarName& av_name)
{
name = RlvStrings::getAnonym(av_name);
}
report_to_nearby_chat(llformat("%s: (%s)", id.asString().c_str(), name.c_str()));
FSCommon::report_to_nearby_chat(llformat("%s: (%s)", id.asString().c_str(), name.c_str()));
}
bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gesture)
@ -597,7 +597,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (from_gesture)
{
report_to_nearby_chat(LLTrans::getString("DrawDistanceSteppingGestureObsolete"));
FSCommon::report_to_nearby_chat(LLTrans::getString("DrawDistanceSteppingGestureObsolete"));
gSavedSettings.setBOOL("FSRenderFarClipStepping", true);
return false;
}
@ -608,7 +608,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
gAgentCamera.mDrawDistance = drawDist;
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%.0f", drawDist);
report_to_nearby_chat(LLTrans::getString("FSCmdLineDrawDistanceSet", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineDrawDistanceSet", args));
return false;
}
}
@ -669,7 +669,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
std::string bw_cmd_respond;
args["[VALUE]"] = llformat ("%d", band_width);
bw_cmd_respond = LLTrans::getString("FSCmdLineRSP", args);
report_to_nearby_chat(bw_cmd_respond);
FSCommon::report_to_nearby_chat(bw_cmd_respond);
return false;
}
}
@ -688,7 +688,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
// <FS:Zi> send appropriate enable/disable messages to nearby chat - FIRE-24160
if (!aoWasEnabled)
{
report_to_nearby_chat(LLTrans::getString("FSAOEnabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSAOEnabled"));
}
}
else if (status == "off")
@ -698,7 +698,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
// <FS:Zi> send appropriate enable/disable messages to nearby chat - FIRE-24160
if (aoWasEnabled)
{
report_to_nearby_chat(LLTrans::getString("FSAODisabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSAODisabled"));
}
}
else if (status == "sit")
@ -742,7 +742,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
if (!myObject)
{
report_to_nearby_chat(llformat("Object with key %s not found!", target_key.asString().c_str()));
FSCommon::report_to_nearby_chat(llformat("Object with key %s not found!", target_key.asString().c_str()));
return false;
}
@ -782,7 +782,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
msg->addVector3("Normal", LLVector3::zero);
msg->addVector3("Binormal", LLVector3::zero);
msg->sendMessage(myObject->getRegion()->getHost());
report_to_nearby_chat(llformat("Touched object with key %s", target_key.asString().c_str()));
FSCommon::report_to_nearby_chat(llformat("Touched object with key %s", target_key.asString().c_str()));
}
}
return false;
@ -796,7 +796,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
if (!myObject)
{
report_to_nearby_chat(llformat("Object with key %s not found!", target_key.asString().c_str()));
FSCommon::report_to_nearby_chat(llformat("Object with key %s not found!", target_key.asString().c_str()));
return false;
}
if ((!RlvActions::isRlvEnabled()) || (RlvActions::canSit(myObject, LLVector3::zero)))
@ -811,7 +811,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
msg->addVector3Fast(_PREHASH_Offset, LLVector3::zero);
gAgent.getRegion()->sendReliableMessage();
report_to_nearby_chat(llformat("Sat on object with key %s", target_key.asString().c_str()));
FSCommon::report_to_nearby_chat(llformat("Sat on object with key %s", target_key.asString().c_str()));
}
}
return false;
@ -821,7 +821,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
if ( (!RlvActions::isRlvEnabled()) || (RlvActions::canStand()) )
{
gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
report_to_nearby_chat(std::string("Standing up"));
FSCommon::report_to_nearby_chat(std::string("Standing up"));
}
return false;
}
@ -859,7 +859,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
gAgent.sendReliableMessage();
LLStringUtil::format_map_t args;
args["NAME"] = LLSLURL("agent", target_key, "inspect").getSLURLString();
report_to_nearby_chat(LLTrans::getString("FSCmdLineTpOffered", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineTpOffered", args));
}
return false;
}
@ -996,7 +996,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
LLStringUtil::format_map_t args;
args["RAND"] = llformat("%s", look_for.c_str());
report_to_nearby_chat(LLTrans::getString("FSCmdLineCalcRandError", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineCalcRandError", args));
}
std::string random_number_text = llformat("%d", random_number);
expr.replace(random_string_pos, look_for.length(), random_number_text);
@ -1021,7 +1021,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
result_str << result;
out = result_str.str();
}
report_to_nearby_chat(out);
FSCommon::report_to_nearby_chat(out);
return false;
}
}
@ -1054,22 +1054,22 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (gZDrop)
{
report_to_nearby_chat("Zdrop is already active.");
FSCommon::report_to_nearby_chat("Zdrop is already active.");
}
else
{
std::string destination;
if (i >> destination)
{
report_to_nearby_chat("Beginning Zdrop.");
report_to_nearby_chat("Verifying destination prim is present inworld...");
FSCommon::report_to_nearby_chat("Beginning Zdrop.");
FSCommon::report_to_nearby_chat("Verifying destination prim is present inworld...");
if (!LLUUID::validate(destination))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
}
else if (!gObjectList.findObject(LLUUID(destination)))
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed and in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed and in view, and that the UUID is correct.");
}
else
{
@ -1085,7 +1085,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLUUID folder_id = gInventory.findCategoryByName(folder);
if (folder_id.notNull())
{
report_to_nearby_chat("Verifying folder location...");
FSCommon::report_to_nearby_chat("Verifying folder location...");
std::stack<LLViewerInventoryItem*> inventorystack;
std::vector<LLPointer<LLViewerInventoryItem> > inventory = findInventoryInFolder(folder);
for (const auto& item : inventory)
@ -1094,32 +1094,32 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
}
if (!inventorystack.empty())
{
report_to_nearby_chat(llformat("Found folder \"%s\".", folder.c_str()));
report_to_nearby_chat(llformat("Found prim \"%s\".", destination.c_str()));
report_to_nearby_chat(llformat("Transferring inventory items from \"%s\" to prim \"%s\".", folder.c_str(), destination.c_str()));
report_to_nearby_chat("WARNING: No-copy items will be moved to the destination prim!");
report_to_nearby_chat("Do not have the prim selected while transfer is running to reduce the chances of \"Inventory creation on in-world object failed.\"");
report_to_nearby_chat("Use \"zdrop off\" to stop the transfer");
FSCommon::report_to_nearby_chat(llformat("Found folder \"%s\".", folder.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found prim \"%s\".", destination.c_str()));
FSCommon::report_to_nearby_chat(llformat("Transferring inventory items from \"%s\" to prim \"%s\".", folder.c_str(), destination.c_str()));
FSCommon::report_to_nearby_chat("WARNING: No-copy items will be moved to the destination prim!");
FSCommon::report_to_nearby_chat("Do not have the prim selected while transfer is running to reduce the chances of \"Inventory creation on in-world object failed.\"");
FSCommon::report_to_nearby_chat("Use \"zdrop off\" to stop the transfer");
LLUUID sdest = LLUUID(destination);
gZDrop = new JCZdrop(inventorystack, sdest, folder.c_str(), destination.c_str());
}
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder.c_str()));
report_to_nearby_chat("Zdrop cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder.c_str()));
FSCommon::report_to_nearby_chat("Zdrop cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("The Zdrop command transfers items from your inventory to a rezzed prim without the need to wait for the contents of the prim to load. No-copy items are moved to the prim. All other items are copied.");
report_to_nearby_chat("Valid command: Zdrop (rezzed prim UUID) (source inventory folder name)");
FSCommon::report_to_nearby_chat("The Zdrop command transfers items from your inventory to a rezzed prim without the need to wait for the contents of the prim to load. No-copy items are moved to the prim. All other items are copied.");
FSCommon::report_to_nearby_chat("Valid command: Zdrop (rezzed prim UUID) (source inventory folder name)");
}
}
}
else
{
report_to_nearby_chat("Please specify an object UUID to copy the items in this folder to.");
FSCommon::report_to_nearby_chat("Please specify an object UUID to copy the items in this folder to.");
}
}
}
@ -1127,7 +1127,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (!gZDrop)
{
report_to_nearby_chat("Zdrop is already deactivated.");
FSCommon::report_to_nearby_chat("Zdrop is already deactivated.");
}
else
{
@ -1138,13 +1138,13 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
}
else
{
report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: zdrop on (source inventory folder) (rezzed prim UUID); zdrop off", setting.c_str()));
FSCommon::report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: zdrop on (source inventory folder) (rezzed prim UUID); zdrop off", setting.c_str()));
}
}
else
{
report_to_nearby_chat("The Zdrop command transfers items from your inventory to a rezzed prim without the need to wait for the contents of the prim to load. No-copy items are moved to the prim. All other items are copied.");
report_to_nearby_chat("Valid commands: zdrop on (rezzed prim UUID) (source inventory folder name); zdrop off");
FSCommon::report_to_nearby_chat("The Zdrop command transfers items from your inventory to a rezzed prim without the need to wait for the contents of the prim to load. No-copy items are moved to the prim. All other items are copied.");
FSCommon::report_to_nearby_chat("Valid commands: zdrop on (rezzed prim UUID) (source inventory folder name); zdrop off");
}
return false;
}
@ -1157,12 +1157,12 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (gZTake)
{
report_to_nearby_chat("Ztake is already active.");
FSCommon::report_to_nearby_chat("Ztake is already active.");
}
else
{
report_to_nearby_chat("Beginning Ztake.");
report_to_nearby_chat("Verifying folder location...");
FSCommon::report_to_nearby_chat("Beginning Ztake.");
FSCommon::report_to_nearby_chat("Verifying folder location...");
std::string folder_name;
std::string tmp;
while (i >> tmp)
@ -1175,18 +1175,18 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLUUID folder = gInventory.findCategoryByName(folder_name);
if (folder.notNull())
{
report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
gZTake = new JCZtake(folder);
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("Ztake cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("Ztake cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
}
@ -1194,7 +1194,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (!gZTake)
{
report_to_nearby_chat("Ztake is already deactivated.");
FSCommon::report_to_nearby_chat("Ztake is already deactivated.");
}
else
{
@ -1205,14 +1205,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
}
else
{
report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: ztake on (destination inventory folder); ztake off", setting.c_str()));
FSCommon::report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: ztake on (destination inventory folder); ztake off", setting.c_str()));
}
return false;
}
else
{
report_to_nearby_chat("The Ztake command copies selected rezzed objects into the folder you specify in your inventory.");
report_to_nearby_chat("Valid commands: ztake on (destination inventory folder name); ztake off");
FSCommon::report_to_nearby_chat("The Ztake command copies selected rezzed objects into the folder you specify in your inventory.");
FSCommon::report_to_nearby_chat("Valid commands: ztake on (destination inventory folder name); ztake off");
}
return false;
}
@ -1221,14 +1221,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
std::string destination;
if (i >> destination)
{
report_to_nearby_chat("Verifying destination prim is present inworld...");
FSCommon::report_to_nearby_chat("Verifying destination prim is present inworld...");
if (!LLUUID::validate(destination))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
}
else if (!gObjectList.findObject(LLUUID(destination)))
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
}
else
{
@ -1244,24 +1244,24 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLUUID folder = gInventory.findCategoryByName(folder_name);
if (folder.notNull())
{
report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
gZTake = new JCZtake(folder, true, LLUUID(destination), folder_name, (command == "cpackage") ? DRD_ACQUIRE_TO_AGENT_INVENTORY : DRD_TAKE_INTO_AGENT_INVENTORY);
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
}
else
{
report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
FSCommon::report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
}
return false;
}
@ -1270,14 +1270,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
std::string destination;
if (i >> destination)
{
report_to_nearby_chat("Verifying destination prim is present inworld...");
FSCommon::report_to_nearby_chat("Verifying destination prim is present inworld...");
if (!LLUUID::validate(destination))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
}
else if (!gObjectList.findObject(LLUUID(destination)))
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
}
else
{
@ -1295,7 +1295,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (!LLUUID::validate(take))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
return false;
}
else
@ -1303,7 +1303,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLViewerObject* objectp = gObjectList.findObject(LLUUID(take));
if(!objectp)
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
return false;
}
else
@ -1319,30 +1319,30 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
if (to_take.empty())
{
report_to_nearby_chat("No objects to take.");
FSCommon::report_to_nearby_chat("No objects to take.");
}
else
{
report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
gZTake = new JCZtake(folder, true, LLUUID(destination), folder_name, DRD_ACQUIRE_TO_AGENT_INVENTORY, false, to_take);
}
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
}
}
else
{
report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
FSCommon::report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
}
return false;
}
@ -1352,14 +1352,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
std::string destination;
if (i >> destination)
{
report_to_nearby_chat("Verifying destination prim is present inworld...");
FSCommon::report_to_nearby_chat("Verifying destination prim is present inworld...");
if (!LLUUID::validate(destination))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
}
else if (!gObjectList.findObject(LLUUID(destination)))
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
}
else
{
@ -1371,7 +1371,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLUUID folder = gInventory.findCategoryByName(folder_name);
if (folder.notNull())
{
report_to_nearby_chat(llformat("kpackager started. Destination folder: \"%s\" Listening to object: \"%s\"", folder_name.c_str(), destination.c_str()));
FSCommon::report_to_nearby_chat(llformat("kpackager started. Destination folder: \"%s\" Listening to object: \"%s\"", folder_name.c_str(), destination.c_str()));
cmd_line_mPackagerToTake.clear();
cmd_line_mPackagerTargetFolderName = folder_name;
@ -1380,20 +1380,20 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
}
}
else
{
report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
FSCommon::report_to_nearby_chat(llformat("Packager usage: \"%s destination_prim_UUID inventory folder name\"",command.c_str()));
}
return false;
}
@ -1405,7 +1405,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
cmd_line_mPackagerTargetFolderName = "";
cmd_line_mPackagerTargetFolder.setNull();
cmd_line_mPackagerDest.setNull();
report_to_nearby_chat("Packager: Stopped and cleared.");
FSCommon::report_to_nearby_chat("Packager: Stopped and cleared.");
return false;
}
}
@ -1426,7 +1426,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (!LLUUID::validate(take))
{
report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
FSCommon::report_to_nearby_chat("Entered UUID is invalid! (Hint: use the \"copy key\" button in the build menu.)");
return false;
}
else
@ -1434,7 +1434,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLViewerObject* objectp = gObjectList.findObject(LLUUID(take));
if(!objectp)
{
report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
FSCommon::report_to_nearby_chat("Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct.");
return false;
}
else
@ -1450,23 +1450,23 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
if (to_take.empty())
{
report_to_nearby_chat("No objects to take.");
FSCommon::report_to_nearby_chat("No objects to take.");
}
else
{
report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
gZTake = new JCZtake(folder, true, LLUUID::null, folder_name, (command == "kcopy") ? DRD_ACQUIRE_TO_AGENT_INVENTORY : DRD_TAKE_INTO_AGENT_INVENTORY, false, to_take);
}
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("The packager cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
return false;
@ -1480,12 +1480,12 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (gMTake)
{
report_to_nearby_chat("Mtake is already active.");
FSCommon::report_to_nearby_chat("Mtake is already active.");
}
else
{
report_to_nearby_chat("Beginning Mtake.");
report_to_nearby_chat("Verifying folder location...");
FSCommon::report_to_nearby_chat("Beginning Mtake.");
FSCommon::report_to_nearby_chat("Verifying folder location...");
std::string folder_name;
std::string tmp;
while (i >> tmp)
@ -1498,18 +1498,18 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLUUID folder = gInventory.findCategoryByName(folder_name);
if (folder.notNull())
{
report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
FSCommon::report_to_nearby_chat(llformat("Found destination folder \"%s\".", folder_name.c_str()));
gMTake = new TMZtake(folder);
}
else
{
report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
report_to_nearby_chat("Mtake cannot work if the folder is inside another folder.");
FSCommon::report_to_nearby_chat(llformat("\"%s\" folder not found. Please check the spelling.", folder_name.c_str()));
FSCommon::report_to_nearby_chat("Mtake cannot work if the folder is inside another folder.");
}
}
catch (std::out_of_range&)
{
report_to_nearby_chat("Please specify a destination folder in your inventory.");
FSCommon::report_to_nearby_chat("Please specify a destination folder in your inventory.");
}
}
}
@ -1517,7 +1517,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
if (!gMTake)
{
report_to_nearby_chat("Mtake is already deactivated.");
FSCommon::report_to_nearby_chat("Mtake is already deactivated.");
}
else
{
@ -1528,14 +1528,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
}
else
{
report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: mtake on (destination inventory folder); mtake off", setting.c_str()));
FSCommon::report_to_nearby_chat(llformat("Invalid command: \"%s\". Valid commands: mtake on (destination inventory folder); mtake off", setting.c_str()));
}
return false;
}
else
{
report_to_nearby_chat("The Mtake command renames selected rezzed objects to the dimensions of the prim, then copies them into the folder you specify in your inventory.");
report_to_nearby_chat("Valid commands: mtake on (destination inventory folder name); mtake off");
FSCommon::report_to_nearby_chat("The Mtake command renames selected rezzed objects to the dimensions of the prim, then copies them into the folder you specify in your inventory.");
FSCommon::report_to_nearby_chat("Valid commands: mtake on (destination inventory folder name); mtake off");
}
return false;
}
@ -1555,11 +1555,11 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
LLStringUtil::format_map_t args;
args["[POS]"] = cameraPositionString;
report_to_nearby_chat(LLTrans::getString("FSCameraPositionCopied", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCameraPositionCopied", args));
}
else
{
report_to_nearby_chat("Could not get a valid region pointer.");
FSCommon::report_to_nearby_chat("Could not get a valid region pointer.");
}
return false;
}
@ -1597,7 +1597,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
LLStringUtil::format_map_t args;
args["COMMAND"] = llformat("%s", std::string(sFSCmdLineRollDice).c_str());
report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceModifiersInvalid", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceModifiersInvalid", args));
return false;
}
@ -1613,11 +1613,11 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
result_per_die -= 1;
die_penetrated = 0;
report_to_nearby_chat(llformat("#%d 1d%d-1: %d.", die_iter, faces, result_per_die));
FSCommon::report_to_nearby_chat(llformat("#%d 1d%d-1: %d.", die_iter, faces, result_per_die));
}
else
{
report_to_nearby_chat(llformat("#%d 1d%d: %d.", die_iter, faces, result_per_die));
FSCommon::report_to_nearby_chat(llformat("#%d 1d%d: %d.", die_iter, faces, result_per_die));
}
result += result_per_die;
++die_iter;
@ -1627,7 +1627,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
// Modifier: Successes lower than a value
if (result_per_die <= modifier)
{
report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceSuccess"));
FSCommon::report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceSuccess"));
++successes;
}
else
@ -1640,7 +1640,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
// Modifier: Successes greater than a value
if (result_per_die >= modifier)
{
report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceSuccess"));
FSCommon::report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceSuccess"));
++successes;
}
else
@ -1651,13 +1651,13 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
else if ((modifier_type == "!" && result_per_die == modifier) || (modifier_type == "!>" && result_per_die >= modifier) || (modifier_type == "!<" && result_per_die <= modifier))
{
// Modifier: Exploding dice
report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceExploded"));
FSCommon::report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceExploded"));
--die_iter;
}
else if ((modifier_type == "!p" && result_per_die == modifier) || (modifier_type == "!p>" && result_per_die >= modifier) || (modifier_type == "!p<" && result_per_die <= modifier))
{
// Modifier: Penetrating dice (special style of exploding dice)
report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDicePenetrated"));
FSCommon::report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDicePenetrated"));
die_penetrated = 1;
--die_iter;
}
@ -1665,7 +1665,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
{
// Modifier: Reroll
result -= result_per_die;
report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceReroll"));
FSCommon::report_to_nearby_chat(" ^-- " + LLTrans::getString("FSCmdLineRollDiceReroll"));
--die_iter;
}
@ -1675,7 +1675,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
// More than 1000 iterations already? We probably have an infinite loop - kill all further rolls
// Explosions can trigger this easily, "rolld 1 6 !> 0" for example
die_iter = 102;
report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceFreezeGuard"));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceFreezeGuard"));
return false;
}
}
@ -1695,14 +1695,14 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
else if (modifier_type == ">" || modifier_type == "<")
{
// Modifier: Successes
report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceSuccess") + ": " + llformat("%d", successes));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceSuccess") + ": " + llformat("%d", successes));
}
modifier_type = modifier_type + llformat("%d", modifier);
}
}
else
{
report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceLimits"));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceLimits"));
return false;
}
}
@ -1718,7 +1718,7 @@ bool cmd_line_chat(std::string_view revised_text, EChatType type, bool from_gest
args["FACES"] = llformat("%d", faces);
args["RESULT"] = llformat("%d", result);
args["MODIFIER"] = llformat("%s", modifier_type.c_str());
report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceTotal", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("FSCmdLineRollDiceTotal", args));
return false;
}
}
@ -1844,9 +1844,9 @@ bool cmdline_packager(std::string_view message, const LLUUID& fromID, const LLUU
std::string item(csv, start, comma-start);
LLStringUtil::trim(item);
LLViewerObject* objectp = gObjectList.findObject(LLUUID(item));
if(!objectp)
if (!objectp)
{
report_to_nearby_chat(llformat("Packager: Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct: \"%s\"", item.c_str()));
FSCommon::report_to_nearby_chat(llformat("Packager: Unable to locate object. Please verify the object is rezzed, in view, and that the UUID is correct: \"%s\"", item.c_str()));
return false;
}
else
@ -1860,14 +1860,14 @@ bool cmdline_packager(std::string_view message, const LLUUID& fromID, const LLUU
start = comma + 1;
}
while(comma < csv.length());
while (comma < csv.length());
report_to_nearby_chat(llformat("Packager: adding objects: \"%s\"", static_cast<std::string>(csv).c_str()));
FSCommon::report_to_nearby_chat(llformat("Packager: adding objects: \"%s\"", static_cast<std::string>(csv).c_str()));
return true;
}
else if (cmd == "kpackagerend") {
report_to_nearby_chat("Packager: finalizing.");
FSCommon::report_to_nearby_chat("Packager: finalizing.");
gZTake = new JCZtake(cmd_line_mPackagerTargetFolder, true, cmd_line_mPackagerDest, cmd_line_mPackagerTargetFolderName, DRD_ACQUIRE_TO_AGENT_INVENTORY, false, cmd_line_mPackagerToTake);
cmd_line_mPackagerToTake.clear();
cmd_line_mPackagerTargetFolderName = "";

View File

@ -2,7 +2,7 @@
<fonts>
<font name="default" comment="default font files (global fallbacks)">
<file>NotoSans.ttf</file>
<file>NotoSansCombined-Regular.ttf</file>
<file functor="is_emoji_use_color">TwemojiSVG.ttf</file>
<file functor="is_emoji_use_bw">NotoEmoji-Regular.ttf</file>
<os name="Windows">

View File

@ -1469,7 +1469,7 @@ void FSChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
// FS:LO FIRE-2899 - Faded text for IMs in nearby chat
//IRC styled /me messages.
bool irc_me = is_irc_me_prefix(chat.mText);
bool irc_me = FSCommon::is_irc_me_prefix(chat.mText);
// Delimiter after a name in header copy/past and in plain text mode
std::string delimiter = ": ";

View File

@ -69,7 +69,7 @@ extern S32 gMaxAgentGroups;
S32 FSCommon::sObjectAddMsg = 0;
void report_to_nearby_chat(std::string_view message)
void FSCommon::report_to_nearby_chat(std::string_view message)
{
LLChat chat;
chat.mText = message;
@ -77,19 +77,19 @@ void report_to_nearby_chat(std::string_view message)
LLNotificationsUI::LLNotificationManager::instance().onChat(chat, LLSD());
}
std::string format_string(std::string text, const LLStringUtil::format_map_t& args)
std::string FSCommon::format_string(std::string text, const LLStringUtil::format_map_t& args)
{
LLStringUtil::format(text, args);
return text;
}
bool is_irc_me_prefix(std::string_view text)
bool FSCommon::is_irc_me_prefix(std::string_view text)
{
const std::string_view prefix = text.substr(0, 4);
return (prefix == "/me " || prefix == "/me'");
}
std::string unescape_name(std::string_view name)
std::string FSCommon::unescape_name(std::string_view name)
{
// bugfix for SL-46920: preventing filenames that break stuff.
char * curl_str = curl_unescape(name.data(), static_cast<int>(name.size())); // Calling data() should be ok here because we also pass the length

View File

@ -34,16 +34,16 @@ class LLAvatarName;
class LLViewerObject;
class LLViewerParcelMgr;
const F64 AVATAR_UNKNOWN_Z_OFFSET = -1.0; // Const value for avatars at unknown height
const F32 AVATAR_UNKNOWN_RANGE = -1.f;
void report_to_nearby_chat(std::string_view message);
std::string format_string(std::string text, const LLStringUtil::format_map_t& args);
bool is_irc_me_prefix(std::string_view text);
std::string unescape_name(std::string_view name);
constexpr F64 AVATAR_UNKNOWN_Z_OFFSET = -1.0; // Const value for avatars at unknown height
constexpr F32 AVATAR_UNKNOWN_RANGE = -1.f;
namespace FSCommon
{
void report_to_nearby_chat(std::string_view message);
std::string format_string(std::string text, const LLStringUtil::format_map_t& args);
bool is_irc_me_prefix(std::string_view text);
std::string unescape_name(std::string_view name);
std::string applyAutoCloseOoc(std::string message);
std::string applyMuPose(std::string message);

View File

@ -69,7 +69,7 @@ bool FSConsoleUtils::ProcessChatMessage(const LLChat& chat_msg, const LLSD &args
std::string sender_name(chat_msg.mFromName);
//IRC styled /me messages.
bool irc_me = is_irc_me_prefix(chat_msg.mText);
bool irc_me = FSCommon::is_irc_me_prefix(chat_msg.mText);
// Delimiter after a name in header copy/past and in plain text mode
std::string delimiter = ": ";
@ -130,7 +130,7 @@ void FSConsoleUtils::onProcessChatAvatarNameLookup(const LLUUID& agent_id, const
std::string sender_name(chat_msg.mFromName);
//IRC styled /me messages.
bool irc_me = is_irc_me_prefix(chat_msg.mText);
bool irc_me = FSCommon::is_irc_me_prefix(chat_msg.mText);
// Delimiter after a name in header copy/past and in plain text mode
std::string delimiter = ": ";
@ -221,7 +221,7 @@ void FSConsoleUtils::onProccessInstantMessageNameLookup(const LLUUID& agent_id,
std::string delimiter = ": ";
// irc styled messages
if (is_irc_me_prefix(message))
if (FSCommon::is_irc_me_prefix(message))
{
delimiter = LLStringUtil::null;
message = message.substr(3);

View File

@ -462,7 +462,7 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
str_viewer_mode = "T";
//Build it up
size_t insert_pos = is_irc_me_prefix(utf8_text) ? 4 : 0;
size_t insert_pos = FSCommon::is_irc_me_prefix(utf8_text) ? 4 : 0;
//For testing/beta groups, we display the build version since it doesn't speed by and this might change often
if (FSData::getInstance()->isTestingGroup(mSessionID))

View File

@ -157,7 +157,7 @@ void FSKeywords::notify(const LLChat& chat)
if (FSEnableGrowl)
{
std::string msg = chat.mFromName;
if (is_irc_me_prefix(chat.mText))
if (FSCommon::is_irc_me_prefix(chat.mText))
{
msg = msg + chat.mText.substr(3);
}

View File

@ -445,13 +445,13 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
{
LLStringUtil::format_map_t args2;
args2["OBJECT_CHARACTER_TIME"] = scriptInfoArray[5].asString();
args["PATHFINDING_TEXT"] = " " + format_string(LLTrans::getString("fsbridge_script_info_pf"), args2);
args["PATHFINDING_TEXT"] = " " + FSCommon::format_string(LLTrans::getString("fsbridge_script_info_pf"), args2);
}
else
{
args["PATHFINDING_TEXT"] = "";
}
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info"), args));
FSCommon::report_to_nearby_chat(FSCommon::format_string(LLTrans::getString("fsbridge_script_info"), args));
if (scriptInfoArrayCount == 27)
{
LLStringUtil::format_map_t args3;
@ -476,19 +476,19 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[24].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No");
args3["AVATAR_POS"] = scriptInfoArray[25].asString();
args3["INSPECTING_KEY"] = scriptInfoArray[26].asString();
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info_ext"), args3));
FSCommon::report_to_nearby_chat(FSCommon::format_string(LLTrans::getString("fsbridge_script_info_ext"), args3));
}
}
else
{
report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfonotfound"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfonotfound"));
LL_WARNS("FSLSLBridge") << "ScriptInfo - Object to check is invalid or out of range (warning returned by viewer, data somehow passed bridge script check)" << LL_ENDL;
}
}
else
{
report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfomalformed"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfomalformed"));
LL_WARNS("FSLSLBridge") << "ScriptInfo - Received malformed response from bridge (missing ending tag)" << LL_ENDL;
}
}
@ -526,17 +526,17 @@ bool FSLSLBridge::lslToViewer(std::string_view message, const LLUUID& fromID, co
{
if (message.substr(valuepos + FS_ERROR_ATTRIBUTE.size(), 9) == "injection")
{
report_to_nearby_chat(LLTrans::getString("fsbridge_error_injection"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_error_injection"));
LL_WARNS("FSLSLBridge") << "Script injection detected" << LL_ENDL;
}
else if (message.substr(valuepos + FS_ERROR_ATTRIBUTE.size(), 18) == "scriptinfonotfound")
{
report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfonotfound"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_error_scriptinfonotfound"));
LL_WARNS("FSLSLBridge") << "ScriptInfo - Object to check is invalid or out of range (warning returned by bridge)" << LL_ENDL;
}
else if (message.substr(valuepos + FS_ERROR_ATTRIBUTE.size(), 7) == "wrongvm")
{
report_to_nearby_chat(LLTrans::getString("fsbridge_error_wrongvm"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_error_wrongvm"));
LL_WARNS("FSLSLBridge") << "Script is using old LSO (16 KB memory limit) instead of new Mono (64 KB memory limit) virtual machine, which creates high probability of stack-heap collision and bridge failure by running out of memory" << LL_ENDL;
}
else
@ -618,7 +618,7 @@ void FSLSLBridge::recreateBridge()
{
//<FS:TS> FIRE-11746: Recreate should throw error if disabled
LL_WARNS("FSLSLBridge") << "Asked to create bridge, but bridge is disabled. Aborting." << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_cant_create_disabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_cant_create_disabled"));
setBridgeCreating(false);
//</FS:TS> FIRE-11746
return;
@ -627,7 +627,7 @@ void FSLSLBridge::recreateBridge()
if (gSavedSettings.getBOOL("NoInventoryLibrary"))
{
LL_WARNS("FSLSLBridge") << "Asked to create bridge, but we don't have a library. Aborting." << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_no_library"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_no_library"));
setBridgeCreating(false);
return;
}
@ -635,12 +635,12 @@ void FSLSLBridge::recreateBridge()
if (mBridgeCreating)
{
LL_WARNS("FSLSLBridge") << "Bridge creation already in progress, aborting new attempt." << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_already_creating"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_already_creating"));
return;
}
//announce yourself
report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
setupFSCategory([](const LLUUID& bridge_folder_id)
{
@ -739,7 +739,7 @@ void FSLSLBridge::initBridge()
if (gSavedSettings.getBOOL("NoInventoryLibrary"))
{
LL_WARNS("FSLSLBridge") << "Asked to create bridge, but we don't have a library. Aborting." << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_no_library"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_no_library"));
setBridgeCreating(false);
return;
}
@ -809,7 +809,7 @@ void FSLSLBridge::startCreation()
setBridgeCreating(true);
mFinishCreation = false;
//announce yourself
report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_creating"));
createNewBridge();
}
@ -871,7 +871,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
LL_WARNS("FSLSLBridge") << "Bridge not created. Our bridge container attachment isn't named correctly." << LL_ENDL;
if (mBridgeCreating)
{
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_bad_name"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_bad_name"));
setBridgeCreating(false); //in case we interrupted the creation
}
return;
@ -883,7 +883,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
LL_WARNS("FSLSLBridge") << "Bridge container is still NULL in inventory. Aborting." << LL_ENDL;
if (mBridgeCreating)
{
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_null"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_null"));
setBridgeCreating(false); //in case we interrupted the creation
}
return;
@ -899,7 +899,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
mAllowDetach = true;
LLVOAvatarSelf::detachAttachmentIntoInventory(fsObject->getUUID());
LL_WARNS("FSLSLBridge") << "Attempt to attach to bridge point an object other than current bridge" << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_wrong_object"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_wrong_object"));
if (mBridgeCreating)
{
setBridgeCreating(false); //in case we interrupted the creation
@ -917,7 +917,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
LL_WARNS("FSLSLBridge") << "Bridge container isn't in the correct inventory location. Detaching it and aborting." << LL_ENDL;
if (mBridgeCreating)
{
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_wrong_location"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_wrong_location"));
setBridgeCreating(false); //in case we interrupted the creation
}
return;
@ -933,7 +933,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
LL_WARNS("FSLSLBridge") << "Something unknown just got attached to bridge point, detaching and aborting." << LL_ENDL;
if (mBridgeCreating)
{
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_point_in_use"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_point_in_use"));
setBridgeCreating(false); //in case we interrupted the creation
}
LLVOAvatarSelf::detachAttachmentIntoInventory(mpBridge->getUUID());
@ -1009,7 +1009,7 @@ void FSLSLBridge::inventoryChanged(LLViewerObject* object,
}
else
{
report_to_nearby_chat(LLTrans::getString("fsbridge_warning_unexpected_items"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_warning_unexpected_items"));
LL_WARNS("FSLSLBridge") << "The bridge inventory contains items other than bridge script." << LL_ENDL;
if (!isOurScript) //some junk but no valid script? Unlikely to happen, but lets add script anyway.
{
@ -1033,7 +1033,7 @@ void FSLSLBridge::inventoryChanged(LLViewerObject* object,
LL_INFOS("FSLSLBridge") << "Bridge created." << LL_ENDL;
mFinishCreation = false;
mAllowedDetachables.clear();
report_to_nearby_chat(LLTrans::getString("fsbridge_created"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_created"));
}
}
@ -1119,11 +1119,11 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
if (mpBridge && mpBridge->getUUID() == fsObject->getUUID())
{
mpBridge = nullptr;
report_to_nearby_chat(LLTrans::getString("fsbridge_detached"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_detached"));
mIsFirstCallDone = false;
if (mBridgeCreating)
{
report_to_nearby_chat(LLTrans::getString("fsbridge_warning_not_finished"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_warning_not_finished"));
setBridgeCreating(false); //in case we interrupted the creation
mAllowedDetachables.clear();
}
@ -1320,7 +1320,7 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
}
else
{
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_create_script"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_creation_create_script"));
cleanup = true;
}
}
@ -1440,7 +1440,7 @@ void FSLSLBridge::cleanUpBridge()
{
//something unexpected went wrong. Try to clean up and not crash.
LL_WARNS("FSLSLBridge") << "Bridge object not found. Can't proceed with creation, exiting." << LL_ENDL;
report_to_nearby_chat(LLTrans::getString("fsbridge_failure_not_found"));
FSCommon::report_to_nearby_chat(LLTrans::getString("fsbridge_failure_not_found"));
if (isBridgeValid())
{

View File

@ -392,7 +392,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_chat_entering, args);
std::string message = FSCommon::format_string(str_chat_entering, args);
make_ui_sound("UISndRadarChatEnter"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
@ -400,7 +400,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_draw_distance_entering, args);
std::string message = FSCommon::format_string(str_draw_distance_entering, args);
make_ui_sound("UISndRadarDrawEnter"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
@ -411,7 +411,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_region_entering_distance, args);
std::string message = FSCommon::format_string(str_region_entering_distance, args);
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
else
@ -449,7 +449,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_chat_entering, args);
std::string message = FSCommon::format_string(str_chat_entering, args);
make_ui_sound("UISndRadarChatEnter"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
@ -465,7 +465,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_draw_distance_entering, args);
std::string message = FSCommon::format_string(str_draw_distance_entering, args);
make_ui_sound("UISndRadarDrawEnter"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
@ -484,7 +484,7 @@ void FSRadar::updateRadarList()
{
LLStringUtil::format_map_t args;
args["DISTANCE"] = llformat("%3.2f", avRange);
std::string message = format_string(str_region_entering_distance, args);
std::string message = FSCommon::format_string(str_region_entering_distance, args);
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
else
@ -544,7 +544,7 @@ void FSRadar::updateRadarList()
make_ui_sound("UISndRadarAgeAlert");
LLStringUtil::format_map_t args;
args["AGE"] = llformat("%d", avAge);
std::string message = format_string(str_avatar_age_alert, args);
std::string message = FSCommon::format_string(str_avatar_age_alert, args);
LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message));
}
ent->mAgeAlertPerformed = true;
@ -1020,7 +1020,7 @@ void FSRadar::zoomAvatar(const LLUUID& avatar_id, std::string_view name)
{
LLStringUtil::format_map_t args;
args["AVATARNAME"] = static_cast<std::string>(name);
report_to_nearby_chat(LLTrans::getString("camera_no_focus", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("camera_no_focus", args));
}
}

View File

@ -340,7 +340,7 @@ void GrowlManager::onInstantMessage(const LLSD& im)
}
std::string message = im["message"].asString();
if (is_irc_me_prefix(message))
if (FSCommon::is_irc_me_prefix(message))
{
message = message.substr(3);
}
@ -390,7 +390,7 @@ void GrowlManager::onNearbyChatMessage(const LLSD& chat)
if ((EChatType)chat["chat_type"].asInteger() == CHAT_TYPE_IM)
{
std::string message = chat["message"].asString();
if (is_irc_me_prefix(message))
if (FSCommon::is_irc_me_prefix(message))
{
message = message.substr(3);
}

View File

@ -275,7 +275,7 @@ string_vec_t lggBeamMaps::getFileNames()
if (found)
{
name = name.erase(name.length() - 4);
names.push_back(unescape_name(name));
names.push_back(FSCommon::unescape_name(name));
}
}
@ -288,7 +288,7 @@ string_vec_t lggBeamMaps::getFileNames()
if (found)
{
name = name.erase(name.length() - 4);
names.push_back(unescape_name(name));
names.push_back(FSCommon::unescape_name(name));
}
}
return names;
@ -307,7 +307,7 @@ string_vec_t lggBeamMaps::getColorsFileNames()
if (found)
{
name = name.erase(name.length() - 4);
names.push_back(unescape_name(name));
names.push_back(FSCommon::unescape_name(name));
}
}
@ -321,7 +321,7 @@ string_vec_t lggBeamMaps::getColorsFileNames()
if (found)
{
name = name.erase(name.length() - 4);
names.push_back(unescape_name(name));
names.push_back(FSCommon::unescape_name(name));
}
}
return names;

View File

@ -3373,13 +3373,13 @@ void LLAgentCamera::loadCameraPosition()
if (stored_camera_pos.isNull())
{
report_to_nearby_chat(LLTrans::getString("LoadCameraPositionNoneSaved"));
FSCommon::report_to_nearby_chat(LLTrans::getString("LoadCameraPositionNoneSaved"));
return;
}
if (dist_vec_squared(gAgent.getPositionGlobal(), stored_camera_pos) > far_clip_squared)
{
report_to_nearby_chat(LLTrans::getString("LoadCameraPositionOutsideDrawDistance"));
FSCommon::report_to_nearby_chat(LLTrans::getString("LoadCameraPositionOutsideDrawDistance"));
return;
}

View File

@ -131,7 +131,15 @@ void LLInitialWearablesFetch::processContents()
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t wearable_array;
LLFindWearables is_wearable;
llassert_always(mComplete.size() != 0);
// <FS:Beq> FIRE-34403 - Still Occasional crashes on large inventories (or slow grid asset servers?) .
// Let's downgrade this assertion. This entire codepath is only accessed by OpenSim until they get AISV3 then we can remove it.
// llassert_always(mComplete.size() != 0);
if (mComplete.size() == 0)
{
LL_WARNS() << "LLInitialWearablesFetch::processContents() called with no items in complete." << LL_ENDL;
return;
}
// </FS:Beq>
gInventory.collectDescendentsIf(mComplete.front(), cat_array, wearable_array,
LLInventoryModel::EXCLUDE_TRASH, is_wearable);

View File

@ -886,8 +886,8 @@ void LLEnvironment::loadLegacyPresets()
if (found)
{
name = name.erase(name.length() - 4);
mLegacySkies.push_back(unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Sky: " << unescape_name(name) << LL_ENDL;
mLegacySkies.push_back(FSCommon::unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Sky: " << FSCommon::unescape_name(name) << LL_ENDL;
}
}
@ -901,8 +901,8 @@ void LLEnvironment::loadLegacyPresets()
if (found)
{
name = name.erase(name.length() - 4);
mLegacyWater.push_back(unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Water: " << unescape_name(name) << LL_ENDL;
mLegacyWater.push_back(FSCommon::unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Water: " << FSCommon::unescape_name(name) << LL_ENDL;
}
}
@ -916,8 +916,8 @@ void LLEnvironment::loadLegacyPresets()
if (found)
{
name = name.erase(name.length() - 4);
mLegacyDayCycles.push_back(unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Day Cycle: " << unescape_name(name) << LL_ENDL;
mLegacyDayCycles.push_back(FSCommon::unescape_name(name));
LL_DEBUGS("WindlightCaps") << "Added Legacy Day Cycle: " << FSCommon::unescape_name(name) << LL_ENDL;
}
}
}

View File

@ -438,7 +438,7 @@ void inventory_offer_handler(LLOfferInfo* info)
message_type = "InvOfferAutoAcceptUser";
}
report_to_nearby_chat(LLTrans::getString(message_type, chat_args));
FSCommon::report_to_nearby_chat(LLTrans::getString(message_type, chat_args));
make_ui_sound("UISndInventoryOffer");
}
// </FS:Ansariel>
@ -1621,7 +1621,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
// <FS:Ansariel> Consolidate IRC /me prefix checks
//std::string prefix = message.substr(0, 4);
//if (prefix == "/me " || prefix == "/me'")
if (is_irc_me_prefix(message))
if (FSCommon::is_irc_me_prefix(message))
// </FS:Ansariel>
{
chat.mChatStyle = CHAT_STYLE_IRC;

View File

@ -3529,7 +3529,7 @@ void LLIMMgr::addMessage(
{
LLStringUtil::format_map_t args;
args["NAME"] = LLSLURL("group", new_session_id, "about").getSLURLString();
report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
}
clearPendingInvitation(new_session_id);
clearPendingAgentListUpdates(new_session_id);
@ -3626,7 +3626,7 @@ void LLIMMgr::addMessage(
else if (reportIgnoredAdHocSession)
{
// report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession"));
report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession", args));
}
//</FS:Beq>
return;
@ -4983,7 +4983,7 @@ public:
{
LLStringUtil::format_map_t args;
args["NAME"] = LLSLURL("group", session_id, "about").getSLURLString();
report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
}
//KC: make sure we leave the group chat at the server end as well

View File

@ -400,7 +400,7 @@ void LLMuteList::updateAdd(const LLMute& mute, bool show_message /* = true */)
{
LLStringUtil::format_map_t args;
args["NAME"] = mute.mName;
report_to_nearby_chat(LLTrans::getString("Mute_Add", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("Mute_Add", args));
}
// </FS:Ansariel>
}
@ -512,7 +512,7 @@ void LLMuteList::updateRemove(const LLMute& mute)
{
LLStringUtil::format_map_t args;
args["NAME"] = mute.mName;
report_to_nearby_chat(LLTrans::getString("Mute_Remove", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("Mute_Remove", args));
}
// </FS:Ansariel>
}

View File

@ -2094,7 +2094,7 @@ void LLNetMap::handleCam()
}
else
{
report_to_nearby_chat(LLTrans::getString("minimap_no_focus"));
FSCommon::report_to_nearby_chat(LLTrans::getString("minimap_no_focus"));
}
}

View File

@ -417,7 +417,7 @@ void downloadGridlistError( LLSD const &aData, std::string const &aURL )
if (rawData.size() == 0)
{
report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
FSCommon::report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - empty output" << LL_ENDL;
return;
}
@ -489,17 +489,17 @@ void downloadGridlistError( LLSD const &aData, std::string const &aURL )
LLStringUtil::trim(newsTitle);
LLStringUtil::trim(newsDesc);
LLStringUtil::trim(newsLink);
report_to_nearby_chat("[ " + newsTitle + " ] " + newsDesc + " [ " + newsLink + " ]");
FSCommon::report_to_nearby_chat("[ " + newsTitle + " ] " + newsDesc + " [ " + newsLink + " ]");
}
else
{
report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
FSCommon::report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - inner tag(s) missing" << LL_ENDL;
}
}
else
{
report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
FSCommon::report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - output without </item>" << LL_ENDL;
}
}
@ -511,13 +511,13 @@ void downloadGridstatusError(LLSD const &aData, std::string const &aURL)
if (status.getType() == HTTP_INTERNAL_ERROR)
{
report_to_nearby_chat(LLTrans::getString("SLGridStatusTimedOut"));
FSCommon::report_to_nearby_chat(LLTrans::getString("SLGridStatusTimedOut"));
}
else
{
LLStringUtil::format_map_t args;
args["STATUS"] = llformat("%d", status.getType());
report_to_nearby_chat(LLTrans::getString("SLGridStatusOtherError", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("SLGridStatusOtherError", args));
}
}
// </FS:PP>
@ -3301,7 +3301,7 @@ bool idle_startup()
// <FS:Techwolf Lupindo> FIRE-6643 Display MOTD when login screens are disabled
if (gSavedSettings.getBOOL("FSDisableLoginScreens"))
{
report_to_nearby_chat(gAgent.mMOTD);
FSCommon::report_to_nearby_chat(gAgent.mMOTD);
}
// </FS:Techwolf Lupindo>
// <FS:PP>

View File

@ -75,7 +75,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif
// <FS:Ansariel> Consolidate IRC /me prefix checks
//std::string prefix = p.message.substr(0, 4);
//if (prefix == "/me " || prefix == "/me'")
if (is_irc_me_prefix(p.message))
if (FSCommon::is_irc_me_prefix(p.message))
// </FS:Ansariel>
{
//style_params.font.style = "UNDERLINE";

View File

@ -873,16 +873,16 @@ class LLAdvancedToggleHUDInfo : public view_listener_t
}
else if ("badge" == info_type)
{
report_to_nearby_chat("Hippos!");
FSCommon::report_to_nearby_chat("Hippos!");
}
else if ("cookies" == info_type)
{
report_to_nearby_chat("Cookies!");
FSCommon::report_to_nearby_chat("Cookies!");
}
// <FS:PP>
else if ("motd" == info_type)
{
report_to_nearby_chat(gAgent.mMOTD);
FSCommon::report_to_nearby_chat(gAgent.mMOTD);
}
// </FS:PP>
return true;
@ -7812,13 +7812,13 @@ class LLWorldAlwaysRun : public view_listener_t
{
gAgent.clearAlwaysRun();
// gAgent.clearRunning();
report_to_nearby_chat(LLTrans::getString("AlwaysRunDisabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("AlwaysRunDisabled"));
}
else
{
gAgent.setAlwaysRun();
// gAgent.setRunning();
report_to_nearby_chat(LLTrans::getString("AlwaysRunEnabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("AlwaysRunEnabled"));
}
// tell the simulator.
@ -9896,7 +9896,7 @@ void handle_selected_texture_info(void*)
//LLSD args;
//args["MESSAGE"] = msg;
//LLNotificationsUtil::add("SystemMessage", args);
report_to_nearby_chat(msg);
FSCommon::report_to_nearby_chat(msg);
// </FS:Ansariel>
}
}
@ -10309,7 +10309,7 @@ void setDoubleClickAction(const std::string& control)
bool ignore_mask = true;
conflictHandler.registerControl(control, index, click, key, mask, ignore_mask);
report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportEnabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportEnabled"));
}
else
{
@ -10320,7 +10320,7 @@ void setDoubleClickAction(const std::string& control)
if (data.mMouse == click && data.mKey == key && data.mMask == mask)
{
conflictHandler.clearControl(control, i);
report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportDisabled"));
FSCommon::report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportDisabled"));
}
}
}
@ -10793,7 +10793,7 @@ class FSDumpSimulatorFeaturesToChat : public view_listener_t
std::stringstream out_str;
region->getSimulatorFeatures(sim_features);
LLSDSerialize::toPrettyXML(sim_features, out_str);
report_to_nearby_chat(out_str.str());
FSCommon::report_to_nearby_chat(out_str.str());
}
return true;
}

View File

@ -203,7 +203,7 @@ public:
{
if (gSavedSettings.getBOOL("FSExperimentalLostAttachmentsFixReport"))
{
report_to_nearby_chat("Refreshing attachments...");
FSCommon::report_to_nearby_chat("Refreshing attachments...");
}
mEventTimer.stop();
LLAttachmentsMgr::instance().refreshAttachments();
@ -3050,7 +3050,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
// <FS:Ansariel> Consolidate IRC /me prefix checks
//std::string prefix = mesg.substr(0, 4);
//if (prefix == "/me " || prefix == "/me'")
if (is_irc_me_prefix(mesg))
if (FSCommon::is_irc_me_prefix(mesg))
// </FS:Ansariel>
{
ircstyle = true;
@ -4571,7 +4571,7 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
if (gSavedSettings.getBOOL("FSExperimentalLostAttachmentsFixReport"))
{
report_to_nearby_chat(message);
FSCommon::report_to_nearby_chat(message);
}
continue;
@ -4992,11 +4992,11 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
if (change_count > 0)
{
report_to_nearby_chat(format_string(increase_message, args));
FSCommon::report_to_nearby_chat(FSCommon::format_string(increase_message, args));
}
else if (change_count < 0)
{
report_to_nearby_chat(format_string(decrease_message, args));
FSCommon::report_to_nearby_chat(FSCommon::format_string(decrease_message, args));
}
}
}
@ -6401,7 +6401,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
// </FS:Ansariel>
make_ui_sound("UISndRestart");
report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // <FS:PP> FIRE-6307: Region restart notices in local chat
FSCommon::report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // <FS:PP> FIRE-6307: Region restart notices in local chat
fs_report_region_restart_to_channel(seconds); // <FS:PP> Announce region restart to a defined chat channel
}
@ -6663,7 +6663,7 @@ void process_alert_core(const std::string& message, bool modal)
}
make_ui_sound("UISndRestartOpenSim");
report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // <FS:PP> FIRE-6307: Region restart notices in local chat
FSCommon::report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // <FS:PP> FIRE-6307: Region restart notices in local chat
fs_report_region_restart_to_channel(seconds); // <FS:PP> Announce region restart to a defined chat channel
return;
}
@ -6836,7 +6836,7 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use
action = LLTrans::getString("Collision_UnknownType", args);
return;
}
report_to_nearby_chat(action);
FSCommon::report_to_nearby_chat(action);
}
// </FS:Ansariel> Nearby Chat Collision Messages
// <FS:Ansariel> Report Collision Messages to scripts

View File

@ -910,7 +910,7 @@ void LLViewerParcelMedia::filterMediaUrl(LLParcel* parcel)
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentBlocked", format_args));
mMediaLastActionPlay = false;
}
else
@ -992,7 +992,7 @@ void callback_media_alert2(const LLSD &notification, const LLSD &response, LLPar
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
inst->mCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@ -1009,7 +1009,7 @@ void callback_media_alert2(const LLSD &notification, const LLSD &response, LLPar
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
}
else if ((option == 2) && allow) // Whitelist URL
{
@ -1020,7 +1020,7 @@ void callback_media_alert2(const LLSD &notification, const LLSD &response, LLPar
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysAllowed", format_args));
inst->mCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@ -1037,7 +1037,7 @@ void callback_media_alert2(const LLSD &notification, const LLSD &response, LLPar
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysBlocked", format_args));
}
// We've dealt with the alert, so mark it as inactive.
@ -1110,7 +1110,7 @@ void callback_media_alert_single(const LLSD &notification, const LLSD &response,
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
}
else if (option == 3) // Whitelist domain
{
@ -1121,7 +1121,7 @@ void callback_media_alert_single(const LLSD &notification, const LLSD &response,
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
inst->mCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@ -1316,7 +1316,7 @@ void LLViewerParcelMedia::filterAudioUrl(std::string media_url)
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentBlocked", format_args));
LLViewerAudio::getInstance()->stopInternetStreamWithAutoFade();
mAudioLastActionPlay = false;
}
@ -1401,7 +1401,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
if (gAudiop)
{
inst->mCurrentMusic = media_url;
@ -1418,7 +1418,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
if (gAudiop)
{
inst->mCurrentMusic = "";
@ -1435,7 +1435,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysAllowed", format_args));
if (gAudiop)
{
inst->mCurrentMusic = media_url;
@ -1452,7 +1452,7 @@ void callback_audio_alert2(const LLSD &notification, const LLSD &response, std::
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysBlocked", format_args));
if (gAudiop)
{
inst->mCurrentMusic = "";
@ -1534,7 +1534,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
if (gAudiop)
{
inst->mCurrentMusic = media_url;
@ -1551,7 +1551,7 @@ void callback_audio_alert_single(const LLSD &notification, const LLSD &response,
inst->saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
FSCommon::report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
if (gAudiop)
{
inst->mCurrentMusic = "";

View File

@ -5941,7 +5941,7 @@ void LLViewerWindow::saveImageLocal(LLImageFormatted *image, const snapshot_save
{
LLStringUtil::format_map_t args;
args["FILENAME"] = filepath;
report_to_nearby_chat(LLTrans::getString("SnapshotSavedToDisk", args));
FSCommon::report_to_nearby_chat(LLTrans::getString("SnapshotSavedToDisk", args));
}
success_cb();
}

View File

@ -3980,7 +3980,7 @@ void LLVOAvatar::idleUpdateNameTagText(bool new_name)
LLStringUtil::format_map_t label_args;
label_args["COMPLEXITY"] = complexity_string;
addNameTagLine(format_string(complexity_label, label_args), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
addNameTagLine(FSCommon::format_string(complexity_label, label_args), complexity_color, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
// only show texture area if this is the reason for jelly baby rendering
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 1000.0f);
@ -3989,7 +3989,7 @@ void LLVOAvatar::idleUpdateNameTagText(bool new_name)
LLResMgr::getInstance()->getIntegerString(complexity_string, (S32)mAttachmentSurfaceArea);
label_args["TEXTURE_AREA"] = complexity_string;
addNameTagLine(format_string(texture_area_label, label_args), LLColor4::red, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
addNameTagLine(FSCommon::format_string(texture_area_label, label_args), LLColor4::red, LLFontGL::NORMAL, LLFontGL::getFontSansSerifSmall());
}
}
// </FS:Ansariel>

View File

@ -5545,9 +5545,26 @@ Voulez-vous continuer ?
Vous modifiez un ciel non HDR qui a été automatiquement converti en HDR. Pour supprimer le HDR et le mappage des tons, réglez l'Ambiance de la sonde de réflexion sur zéro.
<usetemplate ignoretext="Avertissement concernant l'ajustement du ciel HDR" name="okignore" yestext="OK"/>
</notification>
<notification name="GLTFPreviewSelection">
Vous devez sélectionner un objet qui servira de référence à la ressource GLTF que vous prévisualisez.
<usetemplate name="okbutton" yestext="OK"/>
<notification name="GLTFOpenSelection">
Vous devez sélectionner un objet qui servira de point d'accès à la ressource GLTF que vous prévisualisez.
</notification>
<notification name="GLTFLoadFailed">
Échec du chargement du fichier GLTF. Voir le journal pour plus de détails.
</notification>
<notification name="GLTFSaveFailed">
Échec de l'enregistrement du fichier GLTF. Voir le journal pour plus de détails.
</notification>
<notification name="GLTFSaveSelection">
Vous devez sélectionner un objet auquel est associée une ressource GLTF.
</notification>
<notification name="GLTFUploadSelection">
Vous devez sélectionner un objet auquel est associé une ressource GLTF locale.
</notification>
<notification name="GLTFUploadInProgress">
Un chargement est en cours. Veuillez réessayer plus tard.
</notification>
<notification name="NoSupportGLTFShader">
Les scènes GLTF ne sont pas encore prises en charge par votre matériel graphique.
</notification>
<notification name="EnableAutoFPSWarning">
Vous êtes sur le point d'activer l'AutoFPS. Tous les paramètres graphiques non sauvegardés seront perdus.

View File

@ -5407,6 +5407,9 @@ Czy chcesz kontynuować?
<notification name="GLTFUploadInProgress">
Przesyłanie jest obecnie w toku. Spróbuj ponownie później.
</notification>
<notification name="NoSupportGLTFShader">
Sceny GLTF nie są jeszcze obsługiwane przez Twoją kartę graficzną.
</notification>
<notification name="EnableAutoFPSWarning">
Zamierzasz włączyć funkcję AutoFPS. Wszystkie niezapisane ustawienia grafiki zostaną utracone.

View File

@ -5535,8 +5535,38 @@ https://wiki.firestormviewer.org/fs_voice
<usetemplate ignoretext="Предупреждение о настройке неба в режиме HDR" name="okignore" yestext="OK"/>
</notification>
<notification name="GLTFPreviewSelection">
Вы должны выбрать объект, который будет действовать как дескриптор просматриваемого вами ресурса GLTF.
<notification name="GLTFOpenSelection">
Необходимо выбрать объект, который будет использоваться в качестве дескриптора для просматриваемого вами актива GLTF.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GLTFLoadFailed">
Не удалось загрузить файл GLTF. Подробности см. в журнале.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GLTFSaveFailed">
Не удалось сохранить файл GLTF. Подробности см. в журнале.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GLTFSaveSelection">
Необходимо выбрать объект, с которым связан актив GLTF.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GLTFUploadSelection">
Необходимо выбрать объект, с которым связан только локальный актив GLTF.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="GLTFUploadInProgress">
Загрузка в данный момент выполняется. Повторите попытку позже.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="NoSupportGLTFShader">
Сцены GLTF пока не поддерживаются на вашем графическом оборудовании.
<usetemplate name="okbutton" yestext="OK"/>
</notification>

View File

@ -94,7 +94,7 @@ void StreamTitleDisplay::checkMetadata(const LLSD& metadata)
if (ShowStreamMetadata > 1)
{
chat = LLTrans::getString("StreamtitleNowPlaying") + " " + chat;
report_to_nearby_chat(chat);
FSCommon::report_to_nearby_chat(chat);
}
else if (ShowStreamMetadata == 1 && (metadata.has("TITLE") || metadata.has("ARTIST")))
{

View File

@ -1453,6 +1453,46 @@ class Darwin_x86_64_Manifest(ViewerManifest):
if self.args.get('bugsplat'):
self.path2basename(relpkgdir, "BugsplatMac.framework")
with self.prefix(dst="MacOS"):
executable = self.dst_path_of("Firestorm")
if self.args.get('bugsplat'):
# According to Apple Technical Note TN2206:
# https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG207
# "If an app uses @rpath or an absolute path to link to a
# dynamic library outside of the app, the app will be
# rejected by Gatekeeper. ... Neither the codesign nor the
# spctl tool will show the error."
# (Thanks, Apple. Maybe fix spctl to warn?)
# The BugsplatMac framework embeds @rpath, which is
# causing scary Gatekeeper popups at viewer start. Work
# around this by changing the reference baked into our
# viewer. The install_name_tool -change option needs the
# previous value. Instead of guessing -- which might
# silently be defeated by a BugSplat SDK update that
# changes their baked-in @rpath -- ask for the path
# stamped into the framework.
# Let exception, if any, propagate -- if this doesn't
# work, we need the build to noisily fail!
oldpath = subprocess.check_output(
['objdump', '--macho', '--dylib-id', '--non-verbose',
os.path.join(relpkgdir, "BugsplatMac.framework", "BugsplatMac")],
text=True
).splitlines()[-1] # take the last line of output
self.run_command(
['install_name_tool', '-change', oldpath,
'@executable_path/../Frameworks/BugsplatMac.framework/BugsplatMac',
executable])
# NOTE: the -S argument to strip causes it to keep
# enough info for annotated backtraces (i.e. function
# names in the crash log). 'strip' with no arguments
# yields a slightly smaller binary but makes crash
# logs mostly useless. This may be desirable for the
# final release. Or not.
if ("package" in self.args['actions'] or
"unpacked" in self.args['actions']):
self.run_command(
['strip', '-S', executable])
# most everything goes in the Resources directory
with self.prefix(dst="Resources"):