From 4a76d90699555fba12e9bec5fb7585c091d5c4e6 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 13 May 2011 17:52:34 +0200 Subject: [PATCH] - changed : "Freeze/Unfreeze" and "Eject/Ban" on the avatar context menu use the new LLAvatarActions functions -> adds the ability to affect agents outside of draw distance and (improved) display name handling --- indra/newview/llviewermenu.cpp | 455 ++++++++++++++++++--------------- 1 file changed, 247 insertions(+), 208 deletions(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 1ed43cf804..a620118659 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3077,76 +3077,90 @@ class LLAvatarReportAbuse : public view_listener_t //--------------------------------------------------------------------------- // Parcel freeze, eject, etc. //--------------------------------------------------------------------------- -bool callback_freeze(const LLSD& notification, const LLSD& response) -{ - LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - - if (0 == option || 1 == option) - { - U32 flags = 0x0; - if (1 == option) - { - // unfreeze - flags |= 0x1; - } - - LLMessageSystem* msg = gMessageSystem; - LLViewerObject* avatar = gObjectList.findObject(avatar_id); - - if (avatar) - { - msg->newMessage("FreezeUser"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("Data"); - msg->addUUID("TargetID", avatar_id ); - msg->addU32("Flags", flags ); - msg->sendReliable( avatar->getRegion()->getHost() ); - } - } - return false; -} +//bool callback_freeze(const LLSD& notification, const LLSD& response) +//{ +// LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); +// S32 option = LLNotificationsUtil::getSelectedOption(notification, response); +// +// if (0 == option || 1 == option) +// { +// U32 flags = 0x0; +// if (1 == option) +// { +// // unfreeze +// flags |= 0x1; +// } +// +// LLMessageSystem* msg = gMessageSystem; +// LLViewerObject* avatar = gObjectList.findObject(avatar_id); +// +// if (avatar) +// { +// msg->newMessage("FreezeUser"); +// msg->nextBlock("AgentData"); +// msg->addUUID("AgentID", gAgent.getID()); +// msg->addUUID("SessionID", gAgent.getSessionID()); +// msg->nextBlock("Data"); +// msg->addUUID("TargetID", avatar_id ); +// msg->addU32("Flags", flags ); +// msg->sendReliable( avatar->getRegion()->getHost() ); +// } +// } +// return false; +//} void handle_avatar_freeze(const LLSD& avatar_id) { - // Use avatar_id if available, otherwise default to right-click avatar - LLVOAvatar* avatar = NULL; - if (avatar_id.asUUID().notNull()) - { - avatar = find_avatar_from_object(avatar_id.asUUID()); - } - else - { - avatar = find_avatar_from_object( - LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); - } - - if( avatar ) - { - std::string fullname = avatar->getFullname(); - LLSD payload; - payload["avatar_id"] = avatar->getID(); - - if (!fullname.empty()) - { - LLSD args; - args["AVATAR_NAME"] = fullname; - LLNotificationsUtil::add("FreezeAvatarFullname", - args, - payload, - callback_freeze); - } - else - { - LLNotificationsUtil::add("FreezeAvatar", - LLSD(), - payload, - callback_freeze); - } - } +// [SL:KB] - Patch: UI-AvatarNearbyActions | Checked: 2011-05-13 (Catznip-2.6.0a) | Added: Catznip-2.6.0a + // Use avatar_id if available, otherwise default to right-click avatar + LLUUID idAgent = avatar_id.asUUID(); + if (idAgent.isNull()) + { + /*const*/ LLVOAvatar* pAvatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + if (pAvatar) + idAgent = pAvatar->getID(); + } + if (idAgent.notNull()) + { + LLAvatarActions::landFreeze(idAgent); + } +// [/SL:KB] +// // Use avatar_id if available, otherwise default to right-click avatar +// LLVOAvatar* avatar = NULL; +// if (avatar_id.asUUID().notNull()) +// { +// avatar = find_avatar_from_object(avatar_id.asUUID()); +// } +// else +// { +// avatar = find_avatar_from_object( +// LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); +// } +// +// if( avatar ) +// { +// std::string fullname = avatar->getFullname(); +// LLSD payload; +// payload["avatar_id"] = avatar->getID(); +// +// if (!fullname.empty()) +// { +// LLSD args; +// args["AVATAR_NAME"] = fullname; +// LLNotificationsUtil::add("FreezeAvatarFullname", +// args, +// payload, +// callback_freeze); +// } +// else +// { +// LLNotificationsUtil::add("FreezeAvatar", +// LLSD(), +// payload, +// callback_freeze); +// } +// } } class LLAvatarVisibleDebug : public view_listener_t @@ -3179,158 +3193,183 @@ class LLAvatarDebug : public view_listener_t } }; -bool callback_eject(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (2 == option) - { - // Cancel button. - return false; - } - LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); - bool ban_enabled = notification["payload"]["ban_enabled"].asBoolean(); - - if (0 == option) - { - // Eject button - LLMessageSystem* msg = gMessageSystem; - LLViewerObject* avatar = gObjectList.findObject(avatar_id); - - if (avatar) - { - U32 flags = 0x0; - msg->newMessage("EjectUser"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID() ); - msg->addUUID("SessionID", gAgent.getSessionID() ); - msg->nextBlock("Data"); - msg->addUUID("TargetID", avatar_id ); - msg->addU32("Flags", flags ); - msg->sendReliable( avatar->getRegion()->getHost() ); - } - } - else if (ban_enabled) - { - // This is tricky. It is similar to say if it is not an 'Eject' button, - // and it is also not an 'Cancle' button, and ban_enabled==ture, - // it should be the 'Eject and Ban' button. - LLMessageSystem* msg = gMessageSystem; - LLViewerObject* avatar = gObjectList.findObject(avatar_id); - - if (avatar) - { - U32 flags = 0x1; - msg->newMessage("EjectUser"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID() ); - msg->addUUID("SessionID", gAgent.getSessionID() ); - msg->nextBlock("Data"); - msg->addUUID("TargetID", avatar_id ); - msg->addU32("Flags", flags ); - msg->sendReliable( avatar->getRegion()->getHost() ); - } - } - return false; -} +//bool callback_eject(const LLSD& notification, const LLSD& response) +//{ +// S32 option = LLNotificationsUtil::getSelectedOption(notification, response); +// if (2 == option) +// { +// // Cancel button. +// return false; +// } +// LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); +// bool ban_enabled = notification["payload"]["ban_enabled"].asBoolean(); +// +// if (0 == option) +// { +// // Eject button +// LLMessageSystem* msg = gMessageSystem; +// LLViewerObject* avatar = gObjectList.findObject(avatar_id); +// +// if (avatar) +// { +// U32 flags = 0x0; +// msg->newMessage("EjectUser"); +// msg->nextBlock("AgentData"); +// msg->addUUID("AgentID", gAgent.getID() ); +// msg->addUUID("SessionID", gAgent.getSessionID() ); +// msg->nextBlock("Data"); +// msg->addUUID("TargetID", avatar_id ); +// msg->addU32("Flags", flags ); +// msg->sendReliable( avatar->getRegion()->getHost() ); +// } +// } +// else if (ban_enabled) +// { +// // This is tricky. It is similar to say if it is not an 'Eject' button, +// // and it is also not an 'Cancle' button, and ban_enabled==ture, +// // it should be the 'Eject and Ban' button. +// LLMessageSystem* msg = gMessageSystem; +// LLViewerObject* avatar = gObjectList.findObject(avatar_id); +// +// if (avatar) +// { +// U32 flags = 0x1; +// msg->newMessage("EjectUser"); +// msg->nextBlock("AgentData"); +// msg->addUUID("AgentID", gAgent.getID() ); +// msg->addUUID("SessionID", gAgent.getSessionID() ); +// msg->nextBlock("Data"); +// msg->addUUID("TargetID", avatar_id ); +// msg->addU32("Flags", flags ); +// msg->sendReliable( avatar->getRegion()->getHost() ); +// } +// } +// return false; +//} void handle_avatar_eject(const LLSD& avatar_id) { - // Use avatar_id if available, otherwise default to right-click avatar - LLVOAvatar* avatar = NULL; - if (avatar_id.asUUID().notNull()) - { - avatar = find_avatar_from_object(avatar_id.asUUID()); - } - else - { - avatar = find_avatar_from_object( - LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); - } - - if( avatar ) - { - LLSD payload; - payload["avatar_id"] = avatar->getID(); - std::string fullname = avatar->getFullname(); - - const LLVector3d& pos = avatar->getPositionGlobal(); - LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel(); - - if (LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED)) - { - payload["ban_enabled"] = true; - if (!fullname.empty()) - { - LLSD args; - args["AVATAR_NAME"] = fullname; - LLNotificationsUtil::add("EjectAvatarFullname", - args, - payload, - callback_eject); - } - else - { - LLNotificationsUtil::add("EjectAvatarFullname", - LLSD(), - payload, - callback_eject); - } - } - else - { - payload["ban_enabled"] = false; - if (!fullname.empty()) - { - LLSD args; - args["AVATAR_NAME"] = fullname; - LLNotificationsUtil::add("EjectAvatarFullnameNoBan", - args, - payload, - callback_eject); - } - else - { - LLNotificationsUtil::add("EjectAvatarNoBan", - LLSD(), - payload, - callback_eject); - } - } - } +// [SL:KB] - Patch: UI-AvatarNearbyActions | Checked: 2011-05-13 (Catznip-2.6.0a) | Added: Catznip-2.6.0a + // Use avatar_id if available, otherwise default to right-click avatar + LLUUID idAgent = avatar_id.asUUID(); + if (idAgent.isNull()) + { + /*const*/ LLVOAvatar* pAvatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + if (pAvatar) + idAgent = pAvatar->getID(); + } + if (idAgent.notNull()) + { + LLAvatarActions::landEject(idAgent); + } +// [/SL:KB] +// // Use avatar_id if available, otherwise default to right-click avatar +// LLVOAvatar* avatar = NULL; +// if (avatar_id.asUUID().notNull()) +// { +// avatar = find_avatar_from_object(avatar_id.asUUID()); +// } +// else +// { +// avatar = find_avatar_from_object( +// LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); +// } +// +// if( avatar ) +// { +// LLSD payload; +// payload["avatar_id"] = avatar->getID(); +// std::string fullname = avatar->getFullname(); +// +// const LLVector3d& pos = avatar->getPositionGlobal(); +// LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel(); +// +// if (LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED)) +// { +// payload["ban_enabled"] = true; +// if (!fullname.empty()) +// { +// LLSD args; +// args["AVATAR_NAME"] = fullname; +// LLNotificationsUtil::add("EjectAvatarFullname", +// args, +// payload, +// callback_eject); +// } +// else +// { +// LLNotificationsUtil::add("EjectAvatarFullname", +// LLSD(), +// payload, +// callback_eject); +// } +// } +// else +// { +// payload["ban_enabled"] = false; +// if (!fullname.empty()) +// { +// LLSD args; +// args["AVATAR_NAME"] = fullname; +// LLNotificationsUtil::add("EjectAvatarFullnameNoBan", +// args, +// payload, +// callback_eject); +// } +// else +// { +// LLNotificationsUtil::add("EjectAvatarNoBan", +// LLSD(), +// payload, +// callback_eject); +// } +// } +// } } bool enable_freeze_eject(const LLSD& avatar_id) { +// [SL:KB] - Patch: UI-AvatarNearbyActions | Checked: 2011-05-13 (Catznip-2.6.0a) | Added: Catznip-2.6.0a // Use avatar_id if available, otherwise default to right-click avatar - LLVOAvatar* avatar = NULL; - if (avatar_id.asUUID().notNull()) + LLUUID idAgent = avatar_id.asUUID(); + if (idAgent.isNull()) { - avatar = find_avatar_from_object(avatar_id.asUUID()); + /*const*/ LLVOAvatar* pAvatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + if (pAvatar) + idAgent = pAvatar->getID(); } - else - { - avatar = find_avatar_from_object( - LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); - } - if (!avatar) return false; - - // Gods can always freeze - if (gAgent.isGodlike()) return true; - - // Estate owners / managers can freeze - // Parcel owners can also freeze - const LLVector3& pos = avatar->getPositionRegion(); - const LLVector3d& pos_global = avatar->getPositionGlobal(); - LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); - LLViewerRegion* region = avatar->getRegion(); - if (!region) return false; - - bool new_value = region->isOwnedSelf(pos); - if (!new_value || region->isOwnedGroup(pos)) - { - new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); - } - return new_value; + return (idAgent.notNull()) ? LLAvatarActions::canLandFreezeOrEject(idAgent) : false; +// [/SL:KB] +// // Use avatar_id if available, otherwise default to right-click avatar +// LLVOAvatar* avatar = NULL; +// if (avatar_id.asUUID().notNull()) +// { +// avatar = find_avatar_from_object(avatar_id.asUUID()); +// } +// else +// { +// avatar = find_avatar_from_object( +// LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); +// } +// if (!avatar) return false; +// +// // Gods can always freeze +// if (gAgent.isGodlike()) return true; +// +// // Estate owners / managers can freeze +// // Parcel owners can also freeze +// const LLVector3& pos = avatar->getPositionRegion(); +// const LLVector3d& pos_global = avatar->getPositionGlobal(); +// LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); +// LLViewerRegion* region = avatar->getRegion(); +// if (!region) return false; +// +// bool new_value = region->isOwnedSelf(pos); +// if (!new_value || region->isOwnedGroup(pos)) +// { +// new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); +// } +// return new_value; }