- 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 handlingmeow-7.2.2
parent
56d7cf0296
commit
4a76d90699
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue