diff --git a/indra/newview/chatbar_as_cmdline.cpp b/indra/newview/chatbar_as_cmdline.cpp index 1f831085af..1a6370d233 100644 --- a/indra/newview/chatbar_as_cmdline.cpp +++ b/indra/newview/chatbar_as_cmdline.cpp @@ -38,6 +38,7 @@ #include "fsradar.h" #include "llagent.h" #include "llagentcamera.h" +#include "llavataractions.h" #include "llcalc.h" // [FS communication UI] //#include "llfloaternearbychat.h" @@ -1207,20 +1208,10 @@ LLUUID cmdline_partial_name2key(std::string partial_name) void cmdline_tp2name(std::string target) { LLUUID avkey = cmdline_partial_name2key(target); - FSRadar* radar = FSRadar::getInstance(); - if (avkey.notNull() && radar) + if (avkey.notNull()) { - FSRadarEntry* entry = radar->getEntry(avkey); - if (entry) - { - LLVector3d pos = entry->getGlobalPos(); - pos.mdV[VZ] += 2.0; - gAgent.teleportViaLocation(pos); - return; - } + LLAvatarActions::teleportTo(avkey); } - - reportToNearbyChat("Avatar not found."); } void cmdline_rezplat(bool use_saved_value, F32 visual_radius) //cmdline_rezplat() will still work... just will use the saved value diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp index 67a19994b5..0bbf28ba83 100644 --- a/indra/newview/fschathistory.cpp +++ b/indra/newview/fschathistory.cpp @@ -200,7 +200,7 @@ public: } else if (level == "teleport_to") { - LLUrlAction::executeSLURL(LLSLURL("firestorm", getAvatarId(), "teleportto").getSLURLString()); + LLAvatarActions::teleportTo(getAvatarId()); } else if (level == "teleport") { @@ -244,7 +244,7 @@ public: } else if (level == "track") { - LLUrlAction::executeSLURL(LLSLURL("firestorm", getAvatarId(), "track").getSLURLString()); + LLAvatarActions::track(getAvatarId()); } else if (level == "share") { diff --git a/indra/newview/fsradar.cpp b/indra/newview/fsradar.cpp index cb2e4fb3df..4243f8cc32 100644 --- a/indra/newview/fsradar.cpp +++ b/indra/newview/fsradar.cpp @@ -782,9 +782,13 @@ void FSRadar::teleportToAvatar(const LLUUID& targetAv) } else { + avpos.mdV[VZ] += 2.0; gAgent.teleportViaLocation(avpos); } - return; + } + else + { + LLNotificationsUtil::add("TeleportToAvatarNotPossible"); } } @@ -870,8 +874,15 @@ bool FSRadar::radarReportToCheck(const LLSD& userdata) void FSRadar::startTracking(const LLUUID& avatar_id) { - mTrackedAvatarId = avatar_id; - updateTracking(); + if (getEntry(avatar_id)) + { + mTrackedAvatarId = avatar_id; + updateTracking(); + } + else + { + LLNotificationsUtil::add("TrackAvatarNotPossible"); + } } void FSRadar::checkTracking() diff --git a/indra/newview/fsradarmenu.cpp b/indra/newview/fsradarmenu.cpp index 1f894fb296..e8ee07400b 100644 --- a/indra/newview/fsradarmenu.cpp +++ b/indra/newview/fsradarmenu.cpp @@ -246,21 +246,13 @@ void FSRadarMenu::teleportToAvatar() // AO: wrapper for functionality managed by LLPanelPeople, because it manages the nearby avatar list. // Will only work for avatars within radar range. { - FSRadar* radar = FSRadar::getInstance(); - if (radar) - { - radar->teleportToAvatar(mUUIDs.front()); - } + LLAvatarActions::teleportTo(mUUIDs.front()); } // Ansariel: Avatar tracking feature void FSRadarMenu::onTrackAvatarMenuItemClick() { - FSRadar* radar = FSRadar::getInstance(); - if (radar) - { - radar->startTracking(mUUIDs.front()); - } + LLAvatarActions::track(mUUIDs.front()); } void FSRadarMenu::addToContactSet() diff --git a/indra/newview/fsslurlcommand.cpp b/indra/newview/fsslurlcommand.cpp index 030d034591..18d2be2cb3 100644 --- a/indra/newview/fsslurlcommand.cpp +++ b/indra/newview/fsslurlcommand.cpp @@ -94,20 +94,7 @@ public: { if (gAgentID != target_id) { - FSRadar* radar = FSRadar::getInstance(); - if (radar) - { - FSRadarEntry* entry = radar->getEntry(target_id); - if (entry) - { - LLVector3d pos = entry->getGlobalPos(); - pos.mdV[VZ] += 2.0; - gAgent.teleportViaLocation(pos); - return true; - } - } - - LLNotificationsUtil::add("TeleportToAvatarNotPossible"); + LLAvatarActions::teleportTo(target_id); } return true; @@ -117,19 +104,7 @@ public: { if (gAgentID != target_id) { - FSRadar* radar = FSRadar::getInstance(); - if (radar) - { - FSRadarEntry* entry = radar->getEntry(target_id); - if (entry) - { - radar->startTracking(target_id); - return true; - } - } - - - LLNotificationsUtil::add("TrackAvatarNotPossible"); + LLAvatarActions::track(target_id); } return true; diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 174f8e5581..fe8fab1aac 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -654,6 +654,29 @@ void LLAvatarActions::share(const LLUUID& id) } } +// Avatar tracking feature +//static +void LLAvatarActions::track(const LLUUID& id) +{ + FSRadar* radar = FSRadar::getInstance(); + if (radar) + { + radar->startTracking(id); + } +} +// + +// Teleport to feature +//static +void LLAvatarActions::teleportTo(const LLUUID& id) +{ + FSRadar* radar = FSRadar::getInstance(); + if (radar) + { + radar->teleportToAvatar(id); + } +} + namespace action_give_inventory { typedef std::set uuid_set_t; diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 3f86e5e946..915ed4cadf 100755 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -255,6 +255,12 @@ public: static void zoomIn(const LLUUID& idAgent); static void getScriptInfo(const LLUUID& idAgent); + // Avatar tracking feature + static void track(const LLUUID& id); + + // Teleport to feature + static void teleportTo(const LLUUID& id); + // // Parcel actions // diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 33c6eabe91..4ba30aad09 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -1808,11 +1808,7 @@ void LLNetMap::handleStartTracking() { if (mClosestAgentRightClick.notNull()) { - FSRadar* radar = FSRadar::getInstance(); - if (radar) - { - radar->startTracking(mClosestAgentRightClick); - } + LLAvatarActions::track(mClosestAgentRightClick); } } // Avatar tracking feature @@ -1986,7 +1982,7 @@ void LLNetMap::handleRequestTeleport() void LLNetMap::handleTeleportToAvatar() { - FSRadar::getInstance()->teleportToAvatar(mClosestAgentRightClick); + LLAvatarActions::teleportTo(mClosestAgentRightClick); } void LLNetMap::handleGroupInvite() diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 2256326a87..5711ac62e3 100755 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -4391,7 +4391,7 @@ Zoomen auf Avatar nicht möglich, da er sich außerhalb der Reichweite befindet. -Verfolgen des Avatars nicht möglich, da er sich außerhalb der Reichweite befindet. +Verfolgen des Avatars nicht möglich, da er sich außerhalb der Radar-Reichweite befindet. diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ed9d5bb1bb..21a8e30c74 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9493,7 +9493,7 @@ Cannot zoom to this avatar, because it is out of reach. icon="alertmodal.tga" name="TrackAvatarNotPossible" type="alertmodal"> -Cannot track this avatar, because it is out of reach. +Cannot track this avatar, because it is beyond radar range. fail