Radar Keys is gangsta business.

This commit is contained in:
phr0z3nt04st
2010-06-14 23:39:43 -05:00
parent 9bc0c09e6a
commit 35d8994da9
3 changed files with 121 additions and 2 deletions

View File

@@ -172,6 +172,20 @@ bool LLAvatarListEntry::getAlive()
{
mInSimFrame = U32_MAX;
chat_avatar_status(mName, mID, ALERT_TYPE_SIM, false);
if(gSavedSettings.getBOOL("RadarChatKeys"))
{
gMessageSystem->newMessage("ScriptDialogReply");
gMessageSystem->nextBlock("AgentData");
gMessageSystem->addUUID("AgentID", gAgent.getID());
gMessageSystem->addUUID("SessionID", gAgent.getSessionID());
gMessageSystem->nextBlock("Data");
gMessageSystem->addUUID("ObjectID", gAgent.getID());
gMessageSystem->addS32("ChatChannel", -777777777);
gMessageSystem->addS32("ButtonIndex", 1);
gMessageSystem->addString("ButtonLabel",llformat("%d,%d,", gFrameCount, 0) + mID.asString());
gAgent.sendReliableMessage();
}
}
if (mInDrawFrame != U32_MAX && (current - mInDrawFrame) >= 2)
{
@@ -1030,10 +1044,106 @@ void LLFloaterAvatarList::onClickGetKey(void *userdata)
gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
}
//static
void LLFloaterAvatarList::sendKeys()
{
LLViewerRegion* regionp = gAgent.getRegion();
if(!regionp)return;//ALWAYS VALIDATE DATA
std::ostringstream ids;
static int last_transact_num = 0;
int transact_num = (int)gFrameCount;
int num_ids = 0;
if(!gSavedSettings.getBOOL("RadarChatKeys"))
{
return;
}
if(transact_num > last_transact_num)
{
last_transact_num = transact_num;
}
else
{
//on purpose, avatar IDs on map don't change until the next frame.
//no need to send more than once a frame.
return;
}
if (!regionp) return; // caused crash if logged out/connection lost
for (int i = 0; i < regionp->mMapAvatarIDs.count(); i++)
{
const LLUUID &id = regionp->mMapAvatarIDs.get(i);
ids << "," << id.asString();
++num_ids;
if(ids.tellp() > 200)
{
gMessageSystem->newMessage("ScriptDialogReply");
gMessageSystem->nextBlock("AgentData");
gMessageSystem->addUUID("AgentID", gAgent.getID());
gMessageSystem->addUUID("SessionID", gAgent.getSessionID());
gMessageSystem->nextBlock("Data");
gMessageSystem->addUUID("ObjectID", gAgent.getID());
gMessageSystem->addS32("ChatChannel", -777777777);
gMessageSystem->addS32("ButtonIndex", 1);
gMessageSystem->addString("ButtonLabel",llformat("%d,%d", transact_num, num_ids) + ids.str());
gAgent.sendReliableMessage();
num_ids = 0;
ids.seekp(0);
ids.str("");
}
}
if(num_ids > 0)
{
gMessageSystem->newMessage("ScriptDialogReply");
gMessageSystem->nextBlock("AgentData");
gMessageSystem->addUUID("AgentID", gAgent.getID());
gMessageSystem->addUUID("SessionID", gAgent.getSessionID());
gMessageSystem->nextBlock("Data");
gMessageSystem->addUUID("ObjectID", gAgent.getID());
gMessageSystem->addS32("ChatChannel", -777777777);
gMessageSystem->addS32("ButtonIndex", 1);
gMessageSystem->addString("ButtonLabel",llformat("%d,%d", transact_num, num_ids) + ids.str());
gAgent.sendReliableMessage();
}
}
//static
void LLFloaterAvatarList::sound_trigger_hook(LLMessageSystem* msg,void **)
{
LLUUID sound_id,owner_id;
msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_SoundID, sound_id);
msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_OwnerID, owner_id);
if(owner_id == gAgent.getID() && sound_id == LLUUID("76c78607-93f9-f55a-5238-e19b1a181389"))
{
//lets ask if they want to turn it on.
if(gSavedSettings.getBOOL("RadarChatKeys"))
{
LLFloaterAvatarList::getInstance()->sendKeys();
}else
{
LLSD args;
args["MESSAGE"] = "An object owned by you has request the keys from your radar.\nWould you like to enable announcing keys to objects in the sim?";
LLNotifications::instance().add("GenericAlertYesCancel", args, LLSD(), onConfirmRadarChatKeys);
}
}
}
// static
void LLFloaterAvatarList::onConfirmRadarChatKeys(S32 option, LLSD payload)
{
if(option == 0) // yes
{
gSavedSettings.setBOOL("RadarChatKeys",TRUE);
LLFloaterAvatarList::getInstance()->sendKeys();
}
}
//static
void LLFloaterAvatarList::onClickSendKeys(void *userdata)
{
//TODO remove
LLFloaterAvatarList::getInstance()->sendKeys();
}
static void send_freeze(const LLUUID& avatar_id, bool freeze)

View File

@@ -181,6 +181,9 @@ public:
std::string getSelectedName();
LLUUID getSelectedID();
static void sound_trigger_hook(LLMessageSystem* msg,void **);
static void sendKeys();
private:
static LLFloaterAvatarList* sInstance;
@@ -261,6 +264,7 @@ private:
static void onCommitUpdateRate(LLUICtrl*, void *userdata);
static void onClickSendKeys(void *userdata);
static void onConfirmRadarChatKeys(S32 option, LLSD payload);
static void callbackIdle(void *userdata);

View File

@@ -725,6 +725,11 @@ void update_texture_fetch()
gImageList.updateImages(0.10f);
}
void hooked_process_sound_trigger(LLMessageSystem *msg, void **)
{
process_sound_trigger(msg,NULL);
LLFloaterAvatarList::sound_trigger_hook(msg,NULL);
}
// Returns false to skip other idle processing. Should only return
// true when all initialization done.
@@ -3195,7 +3200,7 @@ bool idle_startup()
gDisplaySwapBuffers = TRUE;
LLMessageSystem* msg = gMessageSystem;
msg->setHandlerFuncFast(_PREHASH_SoundTrigger, process_sound_trigger);
msg->setHandlerFuncFast(_PREHASH_SoundTrigger, hooked_process_sound_trigger);
msg->setHandlerFuncFast(_PREHASH_PreloadSound, process_preload_sound);
msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound);
msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change);