From 4becb4bcac7989c0a52552f54e7b9e100988fb20 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 18 Sep 2014 11:49:25 +0200 Subject: [PATCH] FIRE-3850: Add avatar age reporting --- indra/newview/app_settings/settings.xml | 46 ++++++++ indra/newview/fspanelradar.cpp | 7 ++ indra/newview/fsradar.cpp | 44 +++++++- indra/newview/fsradar.h | 3 + indra/newview/fsradarentry.cpp | 12 ++ indra/newview/fsradarentry.h | 5 + indra/newview/skins/ansastorm/colors.xml | 3 + .../ansastorm/themes/classic_brown/colors.xml | 3 + indra/newview/skins/default/colors.xml | 3 + .../default/xui/de/menu_fs_radar_options.xml | 1 + .../default/xui/de/panel_preferences_chat.xml | 14 +++ .../newview/skins/default/xui/de/strings.xml | 5 +- .../default/xui/en/menu_fs_radar_options.xml | 9 ++ .../default/xui/en/panel_preferences_chat.xml | 104 +++++++++++++++++- .../newview/skins/default/xui/en/strings.xml | 1 + 15 files changed, 256 insertions(+), 4 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 861916bfd8..8eb3e7b122 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -731,6 +731,30 @@ Value 0 + + RadarAvatarAgeAlert + + Comment + Toggles whether radar sends out chat alerts when it detects an avatar younger than a pre-defined age + Persist + 1 + Type + Boolean + Value + 0 + + + RadarAvatarAgeAlertValue + + Comment + Defines how old an avatar may be at maximum for the age alert to get triggered + Persist + 1 + Type + S32 + Value + 7 + ShowRadarMinimap @@ -21006,6 +21030,28 @@ Change of this parameter will affect the layout of buttons in notification toast Value a3f48b85-c29f-1f97-ebb6-644b7c053512 + PlayModeUISndRadarAgeAlert + + Comment + If enabled: plays the sound when the age alert for an avatar is triggered. + Persist + 1 + Type + Boolean + Value + 0 + + UISndRadarAgeAlert + + Comment + Sound file played when the age alert for an avatar is triggered (uuid for sound asset) + Persist + 1 + Type + String + Value + a3f48b85-c29f-1f97-ebb6-644b7c053512 + FSSavedRenderFarClip diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp index 6006e418ae..849b7d1c1d 100644 --- a/indra/newview/fspanelradar.cpp +++ b/indra/newview/fspanelradar.cpp @@ -386,6 +386,7 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat static S32 nameColumnIndex = mRadarList->getColumn("name")->mIndex; static S32 voiceLevelColumnIndex = mRadarList->getColumn("voice_level")->mIndex; static S32 flagsColumnIndex = mRadarList->getColumn("flags")->mIndex; + static S32 ageColumnIndex = mRadarList->getColumn("age")->mIndex; LLScrollListText* radarRangeCell = (LLScrollListText*)row->getColumn(rangeColumnIndex); radarRangeCell->setColor(LLColor4(options["range_color"])); @@ -409,6 +410,12 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat { flagsCell->setValue(flagsColumnValues[entry["flags"].asInteger()]); } + + LLScrollListText* ageCell = (LLScrollListText*)row->getColumn(ageColumnIndex); + if (options.has("age_color")) + { + ageCell->setColor(LLColor4(options["age_color"])); + } } LLStringUtil::format_map_t name_count_args; diff --git a/indra/newview/fsradar.cpp b/indra/newview/fsradar.cpp index 280df76ce7..78e27a8380 100644 --- a/indra/newview/fsradar.cpp +++ b/indra/newview/fsradar.cpp @@ -94,7 +94,8 @@ FSRadar::FSRadar() : mRadarAlertRequest(false), mRadarFrameCount(0), mRadarLastBulkOffsetRequestTime(0), - mRadarLastRequestTime(0.f) + mRadarLastRequestTime(0.f), + mAgeAlertCallbackConnection() { mRadarListUpdater = new FSRadarListUpdater(boost::bind(&FSRadar::updateRadarList, this)); @@ -103,6 +104,7 @@ FSRadar::FSRadar() : gSavedSettings.getControl("NameTagShowUsernames")->getSignal()->connect(boost::bind(&FSRadar::updateNames, this)); gSavedSettings.getControl("RadarNameFormat")->getSignal()->connect(boost::bind(&FSRadar::updateNames, this)); + mAgeAlertCallbackConnection = gSavedSettings.getControl("RadarAvatarAgeAlertValue")->getSignal()->connect(boost::bind(&FSRadar::updateAgeAlertCheck, this)); } FSRadar::~FSRadar() @@ -114,6 +116,11 @@ FSRadar::~FSRadar() { delete em_it->second; } + + if (mAgeAlertCallbackConnection.connected()) + { + mAgeAlertCallbackConnection.disconnect(); + } } void FSRadar::radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& postMsg) @@ -165,6 +172,7 @@ void FSRadar::updateRadarList() static const std::string str_region_entering = LLTrans::getString("entering_region"); static const std::string str_region_entering_distance = LLTrans::getString("entering_region_distance"); static const std::string str_region_leaving = LLTrans::getString("leaving_region"); + static const std::string str_avatar_age_alert = LLTrans::getString("avatar_age_alert"); static LLCachedControl RadarReportChatRangeEnter(gSavedSettings, "RadarReportChatRangeEnter"); static LLCachedControl RadarReportChatRangeLeave(gSavedSettings, "RadarReportChatRangeLeave"); @@ -174,6 +182,7 @@ void FSRadar::updateRadarList() static LLCachedControl RadarReportSimRangeLeave(gSavedSettings, "RadarReportSimRangeLeave"); static LLCachedControl RadarEnterChannelAlert(gSavedSettings, "RadarEnterChannelAlert"); static LLCachedControl RadarLeaveChannelAlert(gSavedSettings, "RadarLeaveChannelAlert"); + static LLCachedControl RadarAvatarAgeAlert(gSavedSettings, "RadarAvatarAgeAlert"); static LLCachedControl nearMeRange(gSavedSettings, "NearMeRange"); static LLCachedControl limitRange(gSavedSettings, "LimitRadarByRange"); static LLCachedControl RenderFarClip(gSavedSettings, "RenderFarClip"); @@ -484,13 +493,35 @@ void FSRadar::updateRadarList() entry["name"] = avName; entry["in_region"] = isInSameRegion; entry["flags"] = avFlag; - entry["age"] = gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ? "---" : ( (avAge > -1 ? llformat("%d", avAge) : "") ); entry["seen"] = avSeenStr; entry["range"] = (avRange > AVATAR_UNKNOWN_RANGE ? llformat("%3.2f", avRange) : llformat(">%3.2f", drawRadius)); entry["typing"] = (avVo && avVo->isTyping()); entry["sitting"] = (avVo && (avVo->getParent() || avVo->isMotionActive(ANIM_AGENT_SIT_GROUND) || avVo->isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED))); entry["has_notes"] = ent->hasNotes(); + if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) + { + entry["age"] = (avAge > -1 ? llformat("%d", avAge) : ""); + if (ent->hasAlertAge()) + { + entry_options["age_color"] = LLUIColorTable::instance().getColor("AvatarListItemAgeAlert", LLColor4::red).get().getValue(); + + if (RadarAvatarAgeAlert && !ent->hasAgeAlertPerformed()) + { + make_ui_sound("UISndRadarAgeAlert"); + LLStringUtil::format_map_t args; + args["AGE"] = llformat("%d", avAge); + std::string message = formatString(str_avatar_age_alert, args); + LLAvatarNameCache::get(avId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, message)); + } + ent->mAgeAlertPerformed = true; + } + } + else + { + entry["age"] = "---"; + } + //AO: Set any range colors / styles LLUIColor range_color; if (avRange > AVATAR_UNKNOWN_RANGE) @@ -958,3 +989,12 @@ void FSRadar::updateName(const LLUUID& avatar_id) entry->updateName(); } } + +void FSRadar::updateAgeAlertCheck() +{ + const entry_map_t::iterator it_end = mEntryList.end(); + for (entry_map_t::iterator it = mEntryList.begin(); it != it_end; ++it) + { + it->second->checkAge(); + } +} diff --git a/indra/newview/fsradar.h b/indra/newview/fsradar.h index a6176af034..8950f927cb 100644 --- a/indra/newview/fsradar.h +++ b/indra/newview/fsradar.h @@ -115,6 +115,7 @@ private: void updateTracking(); void checkTracking(); void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& postMsg); + void updateAgeAlertCheck(); Updater* mRadarListUpdater; @@ -143,6 +144,8 @@ private: LLSD mAvatarStats; radar_update_callback_t mUpdateSignal; + + boost::signals2::connection mAgeAlertCallbackConnection; }; #endif // FS_RADAR_H diff --git a/indra/newview/fsradarentry.cpp b/indra/newview/fsradarentry.cpp index 4a4619dc98..abf3c0e965 100644 --- a/indra/newview/fsradarentry.cpp +++ b/indra/newview/fsradarentry.cpp @@ -52,6 +52,8 @@ FSRadarEntry::FSRadarEntry(const LLUUID& avid) mIsLinden(false), mIgnore(false), mHasNotes(false), + mAlertAge(false), + mAgeAlertPerformed(false), mAvatarNameCallbackConnection() { if (mID.notNull()) @@ -119,6 +121,7 @@ void FSRadarEntry::processProperties(void* data, EAvatarProcessorType type) { mAge = ((LLDate::now().secondsSinceEpoch() - (avatar_data->born_on).secondsSinceEpoch()) / 86400); mStatus = avatar_data->flags; + checkAge(); } } else if (type == APT_NOTES) @@ -181,3 +184,12 @@ std::string FSRadarEntry::getRadarName(const LLAvatarName& av_name) // else use legacy name lookups return av_name.getUserNameForDisplay(); // will be mapped to legacyname automatically by the name cache } + +void FSRadarEntry::checkAge() +{ + mAlertAge = (mAge > -1 && mAge <= gSavedSettings.getS32("RadarAvatarAgeAlertValue")); + if (!mAlertAge || gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) + { + mAgeAlertPerformed = true; + } +} diff --git a/indra/newview/fsradarentry.h b/indra/newview/fsradarentry.h index a14687fb41..c179f44b8d 100644 --- a/indra/newview/fsradarentry.h +++ b/indra/newview/fsradarentry.h @@ -55,8 +55,11 @@ public: bool getIsLinden() const { return mIsLinden; } bool getIgnore() const { return mIgnore; } bool hasNotes() const { return mHasNotes; } + bool hasAlertAge() const { return mAlertAge; } + bool hasAgeAlertPerformed() const { return mAgeAlertPerformed; } void setZOffset(F32 offset) { mZOffset = offset; } + void checkAge(); static std::string getRadarName(const LLAvatarName& av_name); @@ -80,6 +83,8 @@ private: bool mIsLinden; bool mIgnore; bool mHasNotes; + bool mAlertAge; + bool mAgeAlertPerformed; LLAvatarNameCache::callback_connection_t mAvatarNameCallbackConnection; }; diff --git a/indra/newview/skins/ansastorm/colors.xml b/indra/newview/skins/ansastorm/colors.xml index dc6574e26c..9497a97623 100644 --- a/indra/newview/skins/ansastorm/colors.xml +++ b/indra/newview/skins/ansastorm/colors.xml @@ -470,6 +470,9 @@ + diff --git a/indra/newview/skins/ansastorm/themes/classic_brown/colors.xml b/indra/newview/skins/ansastorm/themes/classic_brown/colors.xml index dd2cfbd9d3..58dddf5505 100644 --- a/indra/newview/skins/ansastorm/themes/classic_brown/colors.xml +++ b/indra/newview/skins/ansastorm/themes/classic_brown/colors.xml @@ -470,6 +470,9 @@ + diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 0d0f2a0113..d516d2617b 100755 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -417,6 +417,9 @@ + diff --git a/indra/newview/skins/default/xui/de/menu_fs_radar_options.xml b/indra/newview/skins/default/xui/de/menu_fs_radar_options.xml index b1dd6271de..6af2b28794 100644 --- a/indra/newview/skins/default/xui/de/menu_fs_radar_options.xml +++ b/indra/newview/skins/default/xui/de/menu_fs_radar_options.xml @@ -31,6 +31,7 @@ + diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index dcf98af8ef..b3bf661916 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -245,6 +245,20 @@ + + Alters-Alarm: + + + Schwellwert: + + + + Tage + + + + + + diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 46c499ef6c..d3b9d47ad7 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2695,6 +2695,7 @@ Try enclosing path to the editor with double quotes. entered the region. entered the region ([DISTANCE] m). left the region. + triggered the age alert. Age: [AGE] day(s) Total scripts in region jumped from [OLD_VALUE] to [NEW_VALUE] ([DIFFERENCE]). Total scripts in region dropped from [OLD_VALUE] to [NEW_VALUE] ([DIFFERENCE]).