Merge branch 'release/2025.04' of https://github.com/secondlife/viewer

# Conflicts:
#	indra/llui/llfloater.h
#	indra/newview/llfloatersnapshot.h
#	indra/newview/llstatusbar.cpp
#	indra/newview/llviewerwindow.cpp
#	indra/newview/skins/default/xui/da/floater_about.xml
#	indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/de/strings.xml
#	indra/newview/skins/default/xui/en/floater_snapshot.xml
#	indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/en/panel_tools_texture.xml
#	indra/newview/skins/default/xui/es/strings.xml
#	indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/fr/strings.xml
#	indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/it/strings.xml
#	indra/newview/skins/default/xui/ja/panel_settings_water.xml
#	indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/ja/strings.xml
#	indra/newview/skins/default/xui/pt/strings.xml
#	indra/newview/skins/default/xui/ru/strings.xml
#	indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml
#	indra/newview/skins/default/xui/zh/strings.xml
#	scripts/messages/message_template.msg
#	scripts/messages/message_template.msg.sha1
master
Ansariel 2025-03-31 23:55:28 +02:00
commit 82b05f1063
42 changed files with 6542 additions and 6298 deletions

View File

@ -359,5 +359,7 @@ const U8 CLICK_ACTION_DISABLED = 8;
const U8 CLICK_ACTION_IGNORE = 9;
// DO NOT CHANGE THE SEQUENCE OF THIS LIST!!
constexpr U32 BEACON_SHOW_MAP = 0x0001;
constexpr U32 BEACON_FOCUS_MAP = 0x0002;
#endif

View File

@ -57,16 +57,16 @@ const U32 FLAGS_CAMERA_SOURCE = (1U << 22);
//const U32 FLAGS_UNUSED_001 = (1U << 23); // was FLAGS_CAST_SHADOWS
//const U32 FLAGS_UNUSED_002 = (1U << 24);
//const U32 FLAGS_UNUSED_003 = (1U << 25);
//const U32 FLAGS_UNUSED_004 = (1U << 26);
//const U32 FLAGS_UNUSED_005 = (1U << 27);
const U32 FLAGS_SERVER_AUTOPILOT = (1U << 24); // Update was for an agent AND that agent is being autopiloted from the server
//const U32 FLAGS_UNUSED_002 = (1U << 25);
//const U32 FLAGS_UNUSED_003 = (1U << 26);
//const U32 FLAGS_UNUSED_004 = (1U << 27);
const U32 FLAGS_OBJECT_OWNER_MODIFY = (1U << 28);
const U32 FLAGS_TEMPORARY_ON_REZ = (1U << 29);
//const U32 FLAGS_UNUSED_006 = (1U << 30); // was FLAGS_TEMPORARY
//const U32 FLAGS_UNUSED_007 = (1U << 31); // was FLAGS_ZLIB_COMPRESSED
//const U32 FLAGS_UNUSED_005 = (1U << 30); // was FLAGS_TEMPORARY
//const U32 FLAGS_UNUSED_006 = (1U << 31); // was FLAGS_ZLIB_COMPRESSED
const U32 FLAGS_LOCAL = FLAGS_ANIM_SOURCE | FLAGS_CAMERA_SOURCE;
const U32 FLAGS_WORLD = FLAGS_USE_PHYSICS | FLAGS_PHANTOM | FLAGS_TEMPORARY_ON_REZ;

View File

@ -114,6 +114,7 @@ void LLEmojiHelper::showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, c
// </FS:Beq>
mHelperHandle = pHelperFloater->getHandle();
mHelperCommitConn = pHelperFloater->setCommitCallback(std::bind([&](const LLSD& sdValue) { onCommitEmoji(utf8str_to_wstring(sdValue.asStringRef())[0]); }, std::placeholders::_2));
mHelperCloseConn = pHelperFloater->setCloseCallback([this](LLUICtrl* ctrl, const LLSD& param) { onCloseHelper(ctrl, param); });
}
setHostCtrl(hostctrl_p);
mEmojiCommitCb = cb;
@ -170,6 +171,16 @@ void LLEmojiHelper::onCommitEmoji(llwchar emoji)
}
}
void LLEmojiHelper::onCloseHelper(LLUICtrl* ctrl, const LLSD& param)
{
mCloseSignal(ctrl, param);
}
boost::signals2::connection LLEmojiHelper::setCloseCallback(const commit_signal_t::slot_type& cb)
{
return mCloseSignal.connect(cb);
}
void LLEmojiHelper::setHostCtrl(LLUICtrl* hostctrl_p)
{
const LLUICtrl* pCurHostCtrl = mHostHandle.get();

View File

@ -51,16 +51,23 @@ public:
// Eventing
bool handleKey(const LLUICtrl* ctrl_p, KEY key, MASK mask);
void onCommitEmoji(llwchar emoji);
void onCloseHelper(LLUICtrl* ctrl, const LLSD& param);
typedef boost::signals2::signal<void(LLUICtrl* ctrl, const LLSD& param)> commit_signal_t;
boost::signals2::connection setCloseCallback(const commit_signal_t::slot_type& cb);
protected:
LLUICtrl* getHostCtrl() const { return mHostHandle.get(); }
void setHostCtrl(LLUICtrl* hostctrl_p);
private:
commit_signal_t mCloseSignal;
LLHandle<LLUICtrl> mHostHandle;
LLHandle<LLFloater> mHelperHandle;
boost::signals2::connection mHostCtrlFocusLostConn;
boost::signals2::connection mHelperCommitConn;
boost::signals2::connection mHelperCloseConn;
std::function<void(llwchar)> mEmojiCommitCb;
bool mIsHideDisabled;
};

View File

@ -394,6 +394,9 @@ public:
bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mPositioning); }
void setAutoFocus(bool focus) { mAutoFocus = focus; } // whether to automatically take focus when opened
bool getAutoFocus() const { return mAutoFocus; }
// <COLOSI opensim multi-currency support>
// update currency symbols in titles (if there) and force update of display
void updateCurrencySymbols() { mTitle.updateCurrencySymbols(); mShortTitle.updateCurrencySymbols(); applyTitle(); }
@ -422,8 +425,6 @@ protected:
void setExpandedRect(const LLRect& rect) { mExpandedRect = rect; } // size when not minimized
const LLRect& getExpandedRect() const { return mExpandedRect; }
void setAutoFocus(bool focus) { mAutoFocus = focus; } // whether to automatically take focus when opened
bool getAutoFocus() const { return mAutoFocus; }
LLDragHandle* getDragHandle() const { return mDragHandle; }
void destroy(); // Don't call this directly. You probably want to call closeFloater()

View File

@ -1316,6 +1316,14 @@ void LLTextEditor::showEmojiHelper()
LLEmojiHelper::instance().showHelper(this, cursorRect.mLeft, cursorRect.mTop, LLStringUtil::null, cb);
}
void LLTextEditor::hideEmojiHelper()
{
if (mShowEmojiHelper)
{
LLEmojiHelper::instance().hideHelper(this);
}
}
void LLTextEditor::tryToShowEmojiHelper()
{
if (mReadOnly || !mShowEmojiHelper)

View File

@ -222,6 +222,7 @@ public:
bool getShowContextMenu() const { return mShowContextMenu; }
void showEmojiHelper();
void hideEmojiHelper();
void setShowEmojiHelper(bool show);
bool getShowEmojiHelper() const { return mShowEmojiHelper; }

View File

@ -224,6 +224,16 @@ bool LLUrlEntryBase::isWikiLinkCorrect(const std::string &labeled_url) const
},
L'\u002F'); // Solidus
std::replace_if(wlabel.begin(),
wlabel.end(),
[](const llwchar& chr)
{
return // Not a decomposition, but suficiently similar
(chr == L'\u04BA') // "Cyrillic Capital Letter Shha"
|| (chr == L'\u04BB'); // "Cyrillic Small Letter Shha"
},
L'\u0068'); // "Latin Small Letter H"
std::string label = wstring_to_utf8str(wlabel);
if ((label.find(".com") != std::string::npos
|| label.find("www.") != std::string::npos)

View File

@ -13128,6 +13128,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>RenderBalanceInSnapshot</key>
<map>
<key>Comment</key>
<string>Display L$ balance in snapshot</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>RenderUIBuffer</key>
<map>
<key>Comment</key>
@ -23812,17 +23823,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<integer>0</integer>
</map>
<!-- <FS_Zi> Add avatar hitbox debug -->
<key>FSShowCurrencyBalanceInSnapshots</key>
<map>
<key>Comment</key>
<string>Show your currency balance in snapshots</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>DAEExportConsolidateMaterials</key>
<map>
<key>Comment</key>

View File

@ -5415,6 +5415,7 @@ void LLAppViewer::saveFinalSnapshot()
false,
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
true,
false,
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
mSavedFinalSnapshot = true;

View File

@ -41,6 +41,7 @@
#include "llchicletbar.h"
#include "lldraghandle.h"
#include "llemojidictionary.h"
#include "llemojihelper.h"
#include "llfloaterreg.h"
#include "llfloateremojipicker.h"
#include "llfloaterimsession.h"
@ -302,6 +303,8 @@ bool LLFloaterIMSessionTab::postBuild()
mEmojiPickerShowBtn = getChild<LLButton>("emoji_picker_show_btn");
mEmojiPickerShowBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnClicked(); });
mEmojiPickerShowBtn->setMouseDownCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnDown(); });
mEmojiCloseConn = LLEmojiHelper::instance().setCloseCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerClosed(); });
mGearBtn = getChild<LLButton>("gear_btn");
mAddBtn = getChild<LLButton>("add_btn");
@ -534,8 +537,43 @@ void LLFloaterIMSessionTab::onEmojiRecentPanelToggleBtnClicked()
void LLFloaterIMSessionTab::onEmojiPickerShowBtnClicked()
{
if (!mEmojiPickerShowBtn->getToggleState())
{
mInputEditor->hideEmojiHelper();
mInputEditor->setFocus(true);
mInputEditor->showEmojiHelper();
mEmojiPickerShowBtn->setToggleState(true); // in case hideEmojiHelper closed a visible instance
}
else
{
mInputEditor->hideEmojiHelper();
mEmojiPickerShowBtn->setToggleState(false);
}
}
void LLFloaterIMSessionTab::onEmojiPickerShowBtnDown()
{
if (mEmojiHelperLastCallbackFrame == LLFrameTimer::getFrameCount())
{
// Helper gets closed by focus lost event on Down before before onEmojiPickerShowBtnDown
// triggers.
// If this condition is true, user pressed button and it was 'toggled' during press,
// restore 'toggled' state so that button will not reopen helper.
mEmojiPickerShowBtn->setToggleState(true);
}
}
void LLFloaterIMSessionTab::onEmojiPickerClosed()
{
if (mEmojiPickerShowBtn->getToggleState())
{
mEmojiPickerShowBtn->setToggleState(false);
// Helper gets closed by focus lost event on Down before onEmojiPickerShowBtnDown
// triggers. If mEmojiHelperLastCallbackFrame is set and matches Down, means close
// was triggered by user's press.
// A bit hacky, but I can't think of a better way to handle this without rewriting helper.
mEmojiHelperLastCallbackFrame = LLFrameTimer::getFrameCount();
}
}
void LLFloaterIMSessionTab::initEmojiRecentPanel()

View File

@ -237,6 +237,8 @@ private:
void onEmojiRecentPanelToggleBtnClicked();
void onEmojiPickerShowBtnClicked();
void onEmojiPickerShowBtnDown();
void onEmojiPickerClosed();
void initEmojiRecentPanel();
void onEmojiRecentPanelFocusReceived();
void onEmojiRecentPanelFocusLost();
@ -251,6 +253,9 @@ private:
S32 mInputEditorPad;
S32 mChatLayoutPanelHeight;
S32 mFloaterHeight;
boost::signals2::connection mEmojiCloseConn;
U32 mEmojiHelperLastCallbackFrame = { 0 };
};

View File

@ -67,12 +67,13 @@ LLPanelSnapshot* LLFloaterSnapshot::Impl::getActivePanel(LLFloaterSnapshotBase*
{
LLSideTrayPanelContainer* panel_container = floater->getChild<LLSideTrayPanelContainer>("panel_container");
LLPanelSnapshot* active_panel = dynamic_cast<LLPanelSnapshot*>(panel_container->getCurrentPanel());
if (!ok_if_not_found)
{
if (!active_panel)
{
LL_WARNS() << "No snapshot active panel, current panel index: " << panel_container->getCurrentPanelIndex() << LL_ENDL;
}
if (!ok_if_not_found)
{
llassert_always(active_panel != NULL);
}
return active_panel;
@ -605,34 +606,13 @@ void LLFloaterSnapshotBase::ImplBase::onClickFilter(LLUICtrl *ctrl, void* data)
}
// static
void LLFloaterSnapshotBase::ImplBase::onClickUICheck(LLUICtrl *ctrl, void* data)
void LLFloaterSnapshotBase::ImplBase::onClickDisplaySetting(LLUICtrl* ctrl, void* data)
{
LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
gSavedSettings.setBOOL( "RenderUIInSnapshot", check->get() );
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
LLFloaterSnapshot* view = (LLFloaterSnapshot*)data;
if (view)
{
LLSnapshotLivePreview* previewp = view->getPreviewView();
if(previewp)
{
previewp->updateSnapshot(true, true);
}
view->impl->updateControls(view);
}
}
// static
void LLFloaterSnapshotBase::ImplBase::onClickHUDCheck(LLUICtrl *ctrl, void* data)
{
LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
gSavedSettings.setBOOL( "RenderHUDInSnapshot", check->get() );
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
if (view)
{
LLSnapshotLivePreview* previewp = view->getPreviewView();
if(previewp)
if (previewp)
{
previewp->updateSnapshot(true, true);
}
@ -1139,11 +1119,9 @@ bool LLFloaterSnapshot::postBuild()
mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");
mFailureLblPanel = getChild<LLUICtrl>("failed_panel");
childSetCommitCallback("ui_check", ImplBase::onClickUICheck, this);
getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));
childSetCommitCallback("hud_check", ImplBase::onClickHUDCheck, this);
getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot"));
childSetCommitCallback("ui_check", ImplBase::onClickDisplaySetting, this);
childSetCommitCallback("balance_check", ImplBase::onClickDisplaySetting, this);
childSetCommitCallback("hud_check", ImplBase::onClickDisplaySetting, this);
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
childSetCommitCallback("currency_check", ImplBase::onClickCurrencyCheck, this);

View File

@ -104,8 +104,7 @@ public:
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
static void onClickNoPost(LLUICtrl *ctrl, void* data);
static void onClickFilter(LLUICtrl *ctrl, void* data);
static void onClickUICheck(LLUICtrl *ctrl, void* data);
static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
static void onClickDisplaySetting(LLUICtrl *ctrl, void* data);
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
static void onClickCurrencyCheck(LLUICtrl *ctrl, void* data);
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);

View File

@ -504,8 +504,11 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id);
if (hasFocus())
{
mLocationEditor->setFocus( true);
gFocusMgr.triggerFocusFlash();
}
buildAvatarIDList();
buildLandmarkIDLists();

View File

@ -38,6 +38,7 @@
/* image compression headers. */
#include "llimagebmp.h"
#include "llimagetga.h"
#include "llimagej2c.h"
#include "llimagejpeg.h"
#include "llimagepng.h"
@ -106,6 +107,10 @@ LLLocalBitmap::LLLocalBitmap(std::string filename)
{
mExtension = ET_IMG_JPG;
}
else if (temp_exten == "j2c" || temp_exten == "jp2")
{
mExtension = ET_IMG_J2C;
}
else if (temp_exten == "png")
{
mExtension = ET_IMG_PNG;
@ -356,6 +361,21 @@ bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
break;
}
case ET_IMG_J2C:
{
LLPointer<LLImageJ2C> jpeg_image = new LLImageJ2C;
if (jpeg_image->load(mFilename))
{
jpeg_image->setDiscardLevel(0);
if (jpeg_image->decode(rawimg, 0.0f))
{
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
decode_successful = true;
}
}
break;
}
case ET_IMG_PNG:
{
LLPointer<LLImagePNG> png_image = new LLImagePNG;

View File

@ -89,6 +89,7 @@ class LLLocalBitmap
ET_IMG_BMP,
ET_IMG_TGA,
ET_IMG_JPG,
ET_IMG_J2C,
ET_IMG_PNG
};

View File

@ -3291,6 +3291,8 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
F32 scale_x = 1;
F32 scale_y = 1;
F32 offset_x = 0;
F32 offset_y = 0;
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
{
@ -3307,6 +3309,21 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
scale_y = scale_ratio.mV[t_axis] * object_scale.mV[t_axis];
}
material->mTextureTransform[i].mScale.set(scale_x, scale_y);
LLVector2 scales = selectNode->mGLTFScales[te_num][i];
LLVector2 offsets = selectNode->mGLTFOffsets[te_num][i];
F64 int_part = 0;
offset_x = (F32)modf((offsets[VX] + (scales[VX] - scale_x)) / 2, &int_part);
if (offset_x < 0)
{
offset_x++;
}
offset_y = (F32)modf((offsets[VY] + (scales[VY] - scale_y)) / 2, &int_part);
if (offset_y < 0)
{
offset_y++;
}
material->mTextureTransform[i].mOffset.set(offset_x, offset_y);
}
const LLGLTFMaterial* base_material = tep->getGLTFMaterial();
@ -7172,6 +7189,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
{
mTextureScaleRatios.clear();
mGLTFScaleRatios.clear();
mGLTFScales.clear();
mGLTFOffsets.clear();
if (mObject.notNull())
{
@ -7212,6 +7231,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
F32 scale_x = 1;
F32 scale_y = 1;
std::vector<LLVector3> material_v_vec;
std::vector<LLVector2> material_scales_vec;
std::vector<LLVector2> material_offset_vec;
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
{
if (material)
@ -7219,12 +7240,16 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
LLGLTFMaterial::TextureTransform& transform = material->mTextureTransform[i];
scale_x = transform.mScale[VX];
scale_y = transform.mScale[VY];
material_scales_vec.push_back(transform.mScale);
material_offset_vec.push_back(transform.mOffset);
}
else
{
// Not having an override doesn't mean that there is no material
scale_x = 1;
scale_y = 1;
material_scales_vec.emplace_back(scale_x, scale_y);
material_offset_vec.emplace_back(0.f, 0.f);
}
if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR)
@ -7240,6 +7265,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
material_v_vec.push_back(material_v);
}
mGLTFScaleRatios.push_back(material_v_vec);
mGLTFScales.push_back(material_scales_vec);
mGLTFOffsets.push_back(material_offset_vec);
}
}
}

View File

@ -260,6 +260,8 @@ public:
gltf_materials_vec_t mSavedGLTFOverrideMaterials;
std::vector<LLVector3> mTextureScaleRatios;
std::vector< std::vector<LLVector3> > mGLTFScaleRatios;
std::vector< std::vector<LLVector2> > mGLTFScales;
std::vector< std::vector<LLVector2> > mGLTFOffsets;
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
bool mSilhouetteExists; // need to generate silhouette?

View File

@ -731,6 +731,7 @@ bool LLSnapshotLivePreview::onIdle( void* snapshot_preview )
static LLCachedControl<bool> freeze_time(gSavedSettings, "FreezeTime", false);
static LLCachedControl<bool> use_freeze_frame(gSavedSettings, "UseFreezeFrame", false);
static LLCachedControl<bool> render_ui(gSavedSettings, "RenderUIInSnapshot", false);
static LLCachedControl<bool> render_balance(gSavedSettings, "RenderBalanceInSnapshot", false);
static LLCachedControl<bool> render_hud(gSavedSettings, "RenderHUDInSnapshot", false);
static LLCachedControl<bool> render_no_post(gSavedSettings, "RenderSnapshotNoPost", false);
@ -787,6 +788,7 @@ bool LLSnapshotLivePreview::onIdle( void* snapshot_preview )
render_hud,
false,
render_no_post,
render_balance,
previewp->mSnapshotBufferType,
previewp->getMaxImageSize()))
{

View File

@ -1291,14 +1291,13 @@ void LLStatusBar::updateBalancePanelPosition()
balance_bg_view->setShape(balance_bg_rect);
}
void LLStatusBar::setBalanceVisible(bool visible)
{
mBoxBalance->setVisible(visible);
}
//////////////////////////////////////////////////////////////////////////////
// Firestorm methods
void LLStatusBar::showBalance(bool show)
{
mBoxBalance->setVisible(show);
}
// <COLOSI opensim multi-currency support>
void LLStatusBar::updateCurrencySymbols()
{

View File

@ -140,6 +140,8 @@ public:
S32 getSquareMetersLeft() const;
LLRegionDetails mRegionDetails;
void setBalanceVisible(bool visible);
LLPanelNearByMedia* getNearbyMediaPanel() { return mPanelNearByMedia; }
bool getAudioStreamEnabled() const;
@ -150,8 +152,6 @@ public:
void toggleStream(bool enable);
// </FS:Zi>
void showBalance(bool show); // <FS:CR> Hide currency balance in snapshots
// <COLOSI opensim multi-currency support>
// force update of the "BUY L$" button when currency symbol is changed.
void updateCurrencySymbols();

View File

@ -1016,6 +1016,7 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
bool render_ui = gSavedSettings.getBOOL("RenderUIInSnapshot");
bool render_hud = gSavedSettings.getBOOL("RenderHUDInSnapshot");
bool render_no_post = gSavedSettings.getBOOL("RenderSnapshotNoPost");
bool render_balance = gSavedSettings.getBOOL("RenderBalanceInSnapshot");
bool high_res = gSavedSettings.getBOOL("HighResSnapshot");
if (high_res)
@ -1036,6 +1037,7 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
render_hud,
false,
render_no_post,
render_balance,
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
high_res ? S32_MAX : MAX_SNAPSHOT_IMAGE_SIZE)) //per side
{

View File

@ -6351,6 +6351,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
false, //UI
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
false,
false,
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
@ -6408,23 +6409,6 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
return true;
}
// </FS:Ansariel>
// <FS:CR> FIRE-9696 - Moved detection of HomePositionSet Alert hack to here where it's actually found now
if (notificationID == "HomePositionSet")
{
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
snap_filename += LLStartUp::getScreenHomeFilename();
if (gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), false, gSavedSettings.getBOOL("RenderHUDInSnapshot"), false, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG))
{
LL_INFOS() << LLStartUp::getScreenHomeFilename() << " saved successfully." << LL_ENDL;
}
else
{
LL_WARNS() << LLStartUp::getScreenHomeFilename() << " could not be saved." << LL_ENDL;
}
}
// </FS:CR>
// Special Marketplace update notification
if (notificationID == "SLM_UPDATE_FOLDER")
@ -6493,6 +6477,7 @@ static void process_special_alert_messages(const std::string & message)
false,
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
false,
false,
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
@ -8423,7 +8408,6 @@ void process_initiate_download(LLMessageSystem* msg, void**)
(void**)new std::string(viewer_filename));
}
void process_script_teleport_request(LLMessageSystem* msg, void**)
{
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
@ -8437,6 +8421,11 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
msg->getString("Data", "SimName", sim_name);
msg->getVector3("Data", "SimPosition", pos);
msg->getVector3("Data", "LookAt", look_at);
U32 flags = (BEACON_SHOW_MAP | BEACON_FOCUS_MAP);
if (msg->has("Options"))
{
msg->getU32("Options", "Flags", flags);
}
LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();
if(instance)
@ -8447,7 +8436,13 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
<< LL_ENDL;
instance->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
LLFloaterReg::showInstance("world_map", "center");
if (flags & BEACON_SHOW_MAP)
{
bool old_auto_focus = instance->getAutoFocus();
instance->setAutoFocus(flags & BEACON_FOCUS_MAP);
instance->openFloater("center");
instance->setAutoFocus(old_auto_focus);
}
}
// remove above two lines and replace with below line

View File

@ -2417,6 +2417,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
setRotation(new_rot * mAngularVelocityRot);
if ((mFlags & FLAGS_SERVER_AUTOPILOT) && asAvatar() && asAvatar()->isSelf())
{
gAgent.resetAxes();
gAgent.rotate(new_rot);
gAgentCamera.resetView();
}
setChanged(ROTATED | SILHOUETTE);
}

View File

@ -1529,6 +1529,15 @@ bool LLViewerTextureList::createUploadFile(const std::string& filename,
image->setLastError("Couldn't load the image to be uploaded.");
return false;
}
// calcDataSizeJ2C assumes maximum size is 2048 and for bigger images can
// assign discard to bring imige to needed size, but upload does the scaling
// as needed, so just reset discard.
// Assume file is full and has 'discard' 0 data.
// Todo: probably a better idea to have some setMaxDimentions in J2C
// called when loading from a local file
image->setDiscardLevel(0);
// Decompress or expand it in a raw image structure
LLPointer<LLImageRaw> raw_image = new LLImageRaw;
if (!image->decode(raw_image, 0.0f))

View File

@ -5988,12 +5988,12 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
}
bool LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, bool show_ui, bool show_hud, bool do_rebuild, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
bool LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, bool show_ui, bool show_hud, bool do_rebuild, bool show_balance, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
{
LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
LLPointer<LLImageRaw> raw = new LLImageRaw;
bool success = rawSnapshot(raw, image_width, image_height, true, false, show_ui, show_hud, do_rebuild);
bool success = rawSnapshot(raw, image_width, image_height, true, false, show_ui, show_hud, do_rebuild, show_balance);
if (success)
{
@ -6057,14 +6057,14 @@ void LLViewerWindow::resetSnapshotLoc() const
bool LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, LLSnapshotModel::ESnapshotLayerType type)
{
return rawSnapshot(raw, preview_width, preview_height, false, false, show_ui, show_hud, do_rebuild, no_post, type);
return rawSnapshot(raw, preview_width, preview_height, false, false, show_ui, show_hud, do_rebuild, no_post, gSavedSettings.getBOOL("RenderBalanceInSnapshot"), type);
}
// Saves the image from the screen to a raw image
// Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy
// the results over to the final raw image.
bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,
bool keep_window_aspect, bool is_texture, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, LLSnapshotModel::ESnapshotLayerType type, S32 max_size)
bool keep_window_aspect, bool is_texture, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, bool show_balance, LLSnapshotModel::ESnapshotLayerType type, S32 max_size)
{
if (!raw)
{
@ -6123,11 +6123,7 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
image_width = llmin(image_width, window_width);
image_height = llmin(image_height, window_height);
// <FS:CR> Hide currency balance in snapshots
if (gStatusBar)
{
gStatusBar->showBalance((bool)gSavedSettings.getBOOL("FSShowCurrencyBalanceInSnapshots"));
}
setBalanceVisible(show_balance);
}
S32 original_width = 0;
@ -6208,13 +6204,13 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
}
else
{
gStatusBar->showBalance(true); // <FS:CR> Hide currency balance in snapshots
setBalanceVisible(true);
return false;
}
if (raw->isBufferInvalid())
{
gStatusBar->showBalance(true); // <FS:CR> Hide currency balance in snapshots
setBalanceVisible(true);
return false;
}
@ -6425,12 +6421,7 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
{
send_agent_resume();
}
// <FS:CR> Hide currency balance in snapshots
if (gStatusBar)
{
gStatusBar->showBalance(true);
}
setBalanceVisible(true);
return ret;
}
@ -6941,6 +6932,14 @@ void LLViewerWindow::setProgressCancelButtonVisible( bool b, const std::string&
}
}
void LLViewerWindow::setBalanceVisible(bool visible)
{
if (gStatusBar)
{
gStatusBar->setBalanceVisible(visible);
}
}
LLProgressView *LLViewerWindow::getProgressView() const
{
return mProgressView;

View File

@ -366,9 +366,11 @@ public:
// snapshot functionality.
// perhaps some of this should move to llfloatershapshot? -MG
bool saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, bool show_ui = true, bool show_hud = true, bool do_rebuild = false, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
bool saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool show_balance = true,
LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
bool rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, bool keep_window_aspect = true, bool is_texture = false,
bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool no_post = false, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool no_post = false, bool show_balance = true,
LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
bool simpleSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, const int num_render_passes);
@ -467,6 +469,8 @@ public:
void setTitle(const std::string& win_title);
// </FS:TT>
void setBalanceVisible(bool visible);
static std::string getLastSnapshotDir();
LLView* getFloaterSnapRegion() { return mFloaterSnapRegion; }

View File

@ -100,7 +100,7 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
}
type = found->second;
}
bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, showhud, rebuild, type);
bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, showhud, rebuild, true /*L$ Balance*/, type);
sendReply(LLSDMap("ok", ok), event);
}

View File

@ -4254,6 +4254,9 @@ Versuch abgebrochen.
<notification name="NowOwnObject">
Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME]
</notification>
<notification name="NowOwnObjectInv">
Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME] und es wurde Ihrem Inventar hinzugefügt.
</notification>
<notification name="CantRezOnLand">
Objekt kann nicht an [OBJECT_POS] gerezzt werden, da der Landeigentümer dies nicht zulässt. Machen Sie den Landeigentümer mit dem Landwerkzeug ausfindig.
</notification>

View File

@ -4916,6 +4916,10 @@ Bitte installieren Sie den Viewer von [DOWNLOAD_URL] erneut und wenden Sie sich
<string name="inventory_folder_offered-im">
Inventarordner „[ITEM_NAME]“ angeboten
</string>
<string name="bot_warning">
Sie chatten mit einem Bot, [NAME]. Geben Sie keine persönlichen Informationen weiter.
Erfahren Sie mehr unter https://second.life/scripted-agents.
</string>
<string name="share_alert">
Objekte aus dem Inventar hier her ziehen
</string>

View File

@ -182,10 +182,11 @@
height="16"
top_pad="3"
width="180"
control_name="RenderUIInSnapshot"
name="ui_check" />
<check_box
enabled_control="RenderUIInSnapshot"
control_name="FSShowCurrencyBalanceInSnapshots"
control_name="RenderBalanceInSnapshot"
label="L$ Balance"
layout="topleft"
left="30"
@ -199,6 +200,7 @@
left="30"
top_pad="0"
width="180"
control_name="RenderHUDInSnapshot"
name="hud_check" />
<check_box
control_name="FSSnapshotShowCaptureFrame"

View File

@ -11589,6 +11589,14 @@ Sorry, can't freeze that user.
type="notify">
<tag>fail</tag>
You are now the owner of object [OBJECT_NAME]
</notification>
<notification
icon="alertmodal.tga"
name="NowOwnObjectInv"
type="notify">
<tag>fail</tag>
You are now the owner of object [OBJECT_NAME] and it has been placed in your inventory.
</notification>
<notification

View File

@ -377,7 +377,7 @@
initial_value="0"
layout="topleft"
left_delta="5"
min_val="-0.5"
min_val="0"
max_val="0.5"
name="water_blur_multip"
top_pad="5"

View File

@ -4584,6 +4584,10 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="inventory_folder_offered-im">
Carpeta del inventario &apos;[ITEM_NAME]&apos; ofrecida
</string>
<string name="bot_warning">
Estás conversando con un bot, [NAME]. No compartas información personal.
Más información en https://second.life/scripted-agents.
</string
<string name="inventory_item_offered_rlv">
Ofrecido ítem de inventario a [NAME]
</string>

View File

@ -4846,6 +4846,10 @@ Veuillez réinstaller la visionneuse à partir de [DOWNLOAD_URL] et contacter [S
<string name="inventory_folder_offered-im">
Dossier de linventaire [ITEM_NAME] offert
</string>
<string name="bot_warning">
Vous discutez avec un bot, [NAME]. Ne partagez pas dinformations personnelles.
En savoir plus sur https://second.life/scripted-agents.
</string>
<string name="inventory_item_offered_rlv">
Article d'inventaire offert à [NAME]
</string>

View File

@ -4756,6 +4756,10 @@ Reinstallare il browser da [DOWNLOAD_URL] e contattare [SUPPORT_SITE] se il prob
<string name="inventory_folder_offered-im">
Offerta cartella &apos;[ITEM_NAME]&apos; da inventario
</string>
<string name="bot_warning">
Stai parlando con un bot, [NAME]. Non condividere informazioni personali.
Scopri di più su https://second.life/scripted-agents.
</string>
<string name="inventory_item_offered_rlv">
Offerto oggetto da inventario a [NAME]
</string>

View File

@ -4681,6 +4681,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
</string>
<string name="inventory_folder_offered-im">
インベントリフォルダー '[ITEM_NAME]' を送りました
</string>
<string name="bot_warning">
[NAME]とチャットしています。個人情報を共有しないでください。
詳細は https://second.life/scripted-agents をご覧ください。
</string>
<string name="share_alert">
インベントリからここにアイテムをドラッグします

View File

@ -4856,6 +4856,10 @@ https://www.firestormviewer.org/support за помощь в решении эт
<string name="inventory_item_offered_rlv">
Предложен элемент инвентаря [NAME]
</string>
<string name="bot_warning">
Вы общаетесь с ботом [NAME]. Не передавайте личные данные.
Подробнее на https://second.life/scripted-agents.
</string>
<string name="share_alert">
Перетащите элементы из инвентаря сюда
</string>

View File

@ -5091,6 +5091,10 @@ support@secondlife.com.
<string name="inventory_item_offered_rlv">
庫存物件已傳送給 [NAME]
</string>
<string name="bot_warning">
您正在与人工智能机器人 [NAME] 聊天。请勿分享任何个人信息。
了解更多https://second.life/scripted-agents。
</string>
<string name="share_alert">
將庫存物件拖拽到這裡
</string>

View File

@ -6,7 +6,7 @@ version 2.0
// numbers. Each message must be numbered relative to the
// other messages of that type. The current highest number
// for each type is listed below:
// Low: 430
// Low: 431
// Medium: 18
// High: 30
// PLEASE UPDATE THIS WHEN YOU ADD A NEW MESSAGE!
@ -1553,7 +1553,7 @@ version 2.0
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
{ SerialNum U32 } // U32, used by both pause and resume. Non-increasing numbers are ignored.
{ SerialNum U32 } // used by both pause and resume. Non-increasing numbers are ignored.
}
}
@ -1564,7 +1564,7 @@ version 2.0
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
{ SerialNum U32 } // U32, used by both pause and resume. Non-increasing numbers are ignored.
{ SerialNum U32 } // used by both pause and resume. Non-increasing numbers are ignored.
}
}
@ -1677,7 +1677,7 @@ version 2.0
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
{ SerialNum U32 } // U32, Increases every time the appearance changes. A value of 0 resets.
{ SerialNum U32 } // Increases every time the appearance changes. A value of 0 resets.
{ Size LLVector3 }
}
{
@ -1875,7 +1875,7 @@ version 2.0
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
{ Force BOOL } // BOOL, god trying to force delete
{ Force BOOL } // god trying to force delete
}
{
ObjectData Variable
@ -2106,6 +2106,24 @@ version 2.0
}
}
// ObjectBypassModUpdate
// Viewer -> Simulator
// Allows the owner of an object to bypass mod protections for
// Predefined fields.
{
ObjectBypassModUpdate Low 431 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
}
{
ObjectData Variable
{ ObjectLocalID U32 }
{ PropertyID U8 }
{ Value Variable 2 }
}
}
{
ObjectMaterial Low 97 NotTrusted Zerocoded
@ -2121,7 +2139,6 @@ version 2.0
}
}
{
ObjectShape Low 98 NotTrusted Zerocoded
{
@ -2184,7 +2201,7 @@ version 2.0
}
{
HeaderData Single
{ Override BOOL } // BOOL, God-bit.
{ Override BOOL } // God-bit.
{ OwnerID LLUUID }
{ GroupID LLUUID }
}
@ -2255,7 +2272,7 @@ version 2.0
{
Data Single
{ ObjectID LLUUID }
{ Delete BOOL } // BOOL
{ Delete BOOL }
}
}
@ -2273,7 +2290,7 @@ version 2.0
}
{
HeaderData Single
{ Override BOOL } // BOOL, God-bit.
{ Override BOOL } // God-bit.
}
{
ObjectData Variable
@ -2742,7 +2759,7 @@ version 2.0
{ RunTime F32 } // F32
{ SimFPS F32 } // F32
{ FPS F32 } // F32
{ AgentsInView U8 } //
{ AgentsInView U8 }
{ Ping F32 } // F32
{ MetersTraveled F64 }
{ RegionsVisited S32 }
@ -2835,6 +2852,8 @@ version 2.0
// AlertMessage
// Specifies the text to be posted in an alert dialog
// Also sent from dataserver to simulator with AgentInfo block
// Simulator doesn't include AgentInfo block to viewer
{
AlertMessage Low 134 Trusted Unencoded
{
@ -3012,6 +3031,16 @@ version 2.0
{ ChatShoutOffset F32 }
{ ChatFlags U32 }
}
{
CombatSettings Variable
{ CombatFlags U32 }
{ OnDeath U8 }
{ DamageThrottle F32 }
{ RegenerationRate F32 }
{ InvulnerabilyTime F32 }
{ DamageLimit F32 }
}
}
// GodUpdateRegionInfo
@ -3268,7 +3297,7 @@ version 2.0
{ ObjectData Variable 1 }
{ ParentID U32 }
{ UpdateFlags U32 } // U32, see object_flags.h
{ UpdateFlags U32 } // see object_flags.h
{ PathCurve U8 }
{ ProfileCurve U8 }
@ -3515,8 +3544,8 @@ version 2.0
{ ID U64 }
{ Filename Variable 1 }
{ FilePath U8 } // ELLPath
{ DeleteOnCompletion BOOL } // BOOL
{ UseBigPackets BOOL } // BOOL
{ DeleteOnCompletion BOOL }
{ UseBigPackets BOOL }
{ VFileID LLUUID }
{ VFileType S16 }
}
@ -3584,6 +3613,7 @@ version 2.0
}
}
// AvatarAppearance - Update visual params
{
AvatarAppearance Low 158 Trusted Zerocoded
@ -3751,7 +3781,6 @@ version 2.0
}
{
ButtonData Variable
{ PayButton S32 }
}
}
@ -4371,6 +4400,9 @@ version 2.0
}
// ScriptTeleportRequest
// Interestingly, this message does not actually "Request a Teleport"
// on the viewer. Instead it opens the world map and places a beacon
// at the indicated location.
// reliable
{
ScriptTeleportRequest Low 195 Trusted Unencoded
@ -4381,6 +4413,10 @@ version 2.0
{ SimPosition LLVector3 }
{ LookAt LLVector3 }
}
{
Options Variable
{ Flags U32 }
}
}
@ -5322,7 +5358,7 @@ version 2.0
{ AtAxis LLVector3 }
{ LeftAxis LLVector3 }
{ UpAxis LLVector3 }
{ ChangedGrid BOOL } // BOOL
{ ChangedGrid BOOL }
{ Far F32 }
{ Aspect F32 }
@ -5680,6 +5716,10 @@ version 2.0
EstateBlock Single
{ EstateID U32 }
}
{
MetaData Variable
{ Data Variable 2 }
}
}
// RetrieveInstantMessages - used to get instant messages that
@ -6938,7 +6978,7 @@ version 2.0
MoneyData Single
{ AgentID LLUUID }
{ TransactionID LLUUID }
{ TransactionSuccess BOOL } // BOOL
{ TransactionSuccess BOOL }
{ MoneyBalance S32 }
{ SquareMetersCredit S32 }
{ SquareMetersCommitted S32 }
@ -6977,7 +7017,7 @@ version 2.0
MoneyData Single
{ AgentID LLUUID }
{ TransactionID LLUUID }
{ TransactionSuccess BOOL } // BOOL
{ TransactionSuccess BOOL }
{ MoneyBalance S32 }
{ SquareMetersCredit S32 }
{ SquareMetersCommitted S32 }
@ -7366,7 +7406,6 @@ version 2.0
}
}
// *************************************************************************
// Object animation messages
// *************************************************************************
@ -7437,8 +7476,8 @@ version 2.0
{
DataBlock Single
{ ObjectID LLUUID }
{ More U32 } //U32
{ Time U32 } //U32
{ More U32 }
{ Time U32 }
{ FromAddress Variable 1 }
{ Subject Variable 1 }
{ Data Variable 2 }
@ -7500,8 +7539,8 @@ version 2.0
{ Charter Variable 2 } // string
{ ShowInList BOOL }
{ InsigniaID LLUUID }
{ MembershipFee S32 } // S32
{ OpenEnrollment BOOL } // BOOL (U8)
{ MembershipFee S32 }
{ OpenEnrollment BOOL }
{ AllowPublish BOOL } // whether profile is externally visible or not
{ MaturePublish BOOL } // profile is "mature"
}
@ -7569,7 +7608,7 @@ version 2.0
}
// JoinGroupRequest
// viewer -> simulator
// viewer -> simulator -> dataserver
// reliable
{
JoinGroupRequest Low 343 NotTrusted Zerocoded
@ -7742,11 +7781,11 @@ version 2.0
{ Charter Variable 2 } // string
{ ShowInList BOOL }
{ MemberTitle Variable 1 } // string
{ PowersMask U64 } // U32 mask
{ PowersMask U64 }
{ InsigniaID LLUUID }
{ FounderID LLUUID }
{ MembershipFee S32 }
{ OpenEnrollment BOOL } // BOOL (U8)
{ OpenEnrollment BOOL }
{ Money S32 }
{ GroupMembershipCount S32 }
{ GroupRolesCount S32 }
@ -8014,8 +8053,8 @@ version 2.0
ProposalData Single
{ GroupID LLUUID }
{ Quorum S32 }
{ Majority F32 } // F32
{ Duration S32 } // S32, seconds
{ Majority F32 }
{ Duration S32 } // seconds
{ ProposalText Variable 1 } // string
}
}
@ -8334,13 +8373,13 @@ version 2.0
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
{ SerialNum U32 } // U32, Increases every time the wearables change for a given agent. Used to avoid processing out of order packets.
{ SerialNum U32 } // Increases every time the wearables change for a given agent. Used to avoid processing out of order packets.
}
{
WearableData Variable
{ ItemID LLUUID }
{ AssetID LLUUID }
{ WearableType U8 } // U8, LLWearable::EWearType
{ WearableType U8 } // LLWearable::EWearType
}
}
@ -9211,9 +9250,43 @@ version 2.0
{ Charter Variable 2 } // string
{ ShowInList BOOL }
{ InsigniaID LLUUID }
{ MembershipFee S32 } // S32
{ OpenEnrollment BOOL } // BOOL (U8)
{ MembershipFee S32 }
{ OpenEnrollment BOOL }
{ AllowPublish BOOL } // whether profile is externally visible or not
{ MaturePublish BOOL } // profile is "mature"
}
}
// viewer -> simulator
// GameControlInput - input from game controller
// The main payload of this message is split into two Variable chunks:
//
// AxisData = list of {Index:Value} pairs. Value is an S16 that maps to range [-1, 1]
// ButtonData = list of indices of pressed buttons
//
// Any Axis ommitted from the message is assumed by the receiving Simulator to be unchanged
// from its previously received value.
//
// Any Button omitted from the message is assumed by the receiving Simulator to be unpressed.
//
// GameControlInput messages are sent unreliably, but when input changes stop the last
// message will be resent at a ever increasing period to make sure the server receives it.
//
{
GameControlInput High 32 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
}
{
AxisData Variable
{ Index U8 }
{ Value S16 }
}
{
ButtonData Variable
{ Data Variable 1 }
}
}

View File

@ -1 +1 @@
1a9a3717fde5d0fb3d5f688a1a3dab7fcc2aa308
f0e9d30b03fe7823a7050cf1a86653e4de4bc256