diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 22b1a3bfe..66ba02320 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -136,7 +136,9 @@ #include "llappviewer.h" #include "llviewerjoystick.h" #include "llfollowcam.h" - +// +#include "llworldmapmessage.h" +// using namespace LLVOAvatarDefines; extern LLMenuBarGL* gMenuBarView; @@ -222,7 +224,6 @@ LLAgent gAgent; // // For MapBlockReply funk 'cause I dunno what I'm doing -/* not *quite* there yet, and I don't want to break head. BOOL LLAgent::lure_show = FALSE; std::string LLAgent::lure_name; LLVector3d LLAgent::lure_posglobal; @@ -232,7 +233,7 @@ int LLAgent::lure_x; int LLAgent::lure_y; int LLAgent::lure_z; std::string LLAgent::lure_maturity; -*/ + // const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; @@ -8019,5 +8020,60 @@ std::string LLAgent::getCapability(const std::string& name) const } return iter->second; } +// + +void LLAgent::showLureDestination(const std::string fromname, const int global_x, const int global_y, const int x, const int y, const int z, const std::string maturity) +{ + const LLVector3d posglobal = LLVector3d(F64(global_x), F64(global_y), F64(0)); + LLSimInfo* siminfo; + siminfo = LLWorldMap::getInstance()->simInfoFromPosGlobal(posglobal); + if(siminfo) + { + llinfos << fromname << "'s teleport lure is to " << siminfo->getName() << " (" << maturity << ")" << llendl; + std::string url = LLURLDispatcher::buildSLURL(siminfo->getName(), S32(x), S32(y), S32(z)); + std::string msg; + msg = llformat("%s's teleport lure is to %s", fromname.c_str(), url.c_str()); + if(maturity != "") + msg.append(llformat(" (%s)", maturity.c_str())); + LLChat chat(msg); + LLFloaterChat::addChat(chat); + } + else + { + LLAgent::lure_show = TRUE; + LLAgent::lure_name = fromname; + LLAgent::lure_posglobal = posglobal; + LLAgent::lure_global_x = U16(global_x / 256); + LLAgent::lure_global_y = U16(global_y / 256); + LLAgent::lure_x = x; + LLAgent::lure_y = y; + LLAgent::lure_z = z; + LLAgent::lure_maturity = maturity; + LLWorldMapMessage::getInstance()->sendMapBlockRequest(lure_global_x, lure_global_y, lure_global_x, lure_global_y, true); + } +} + +void LLAgent::onFoundLureDestination() +{ + LLAgent::lure_show = FALSE; + LLSimInfo* siminfo; + siminfo = LLWorldMap::getInstance()->simInfoFromPosGlobal(LLAgent::lure_posglobal); + if(siminfo) + { + llinfos << LLAgent::lure_name << "'s teleport lure is to " << siminfo->getName() << " (" << LLAgent::lure_maturity << ")" << llendl; + std::string url = LLURLDispatcher::buildSLURL(siminfo->getName(), S32(LLAgent::lure_x), S32(LLAgent::lure_y), S32(LLAgent::lure_z)); + std::string msg; + msg = llformat("%s's teleport lure is to %s", LLAgent::lure_name.c_str(), url.c_str()); + if(LLAgent::lure_maturity != "") + msg.append(llformat(" (%s)", LLAgent::lure_maturity.c_str())); + LLChat chat(msg); + LLFloaterChat::addChat(chat); + } + else + llwarns << "Grand scheme failed" << llendl; +} + +// + // EOF diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 14f4a84f2..9eff0a5db 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -775,6 +775,18 @@ public: BOOL mInitialized; + // + static BOOL lure_show; + static std::string lure_name; + static LLVector3d lure_posglobal; + static U16 lure_global_x; + static U16 lure_global_y; + static int lure_x; + static int lure_y; + static int lure_z; + static std::string lure_maturity; + // + S32 mNumPendingQueries; S32* mActiveCacheQueries; @@ -789,6 +801,11 @@ public: LLFrameTimer mDoubleTapRunTimer; EDoubleTapRunMode mDoubleTapRunMode; + + // + static void showLureDestination(const std::string fromname, const int global_x, const int global_y, const int x, const int y, const int z, const std::string maturity); + static void onFoundLureDestination(); + // private: bool mbTeleportKeepsLookAt; // try to keep look-at after teleport is complete diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 2539bc62f..dc96f9d72 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -139,8 +139,8 @@ #include "llviewerdisplay.h" #include "llkeythrottle.h" #include "lltranslate.h" -// -#include "llviewernetwork.h" +// +#include "llviewernetwork.h" // #include @@ -264,10 +264,10 @@ static LLNotificationFunctorRegistration friendship_offer_callback_reg_nm("Offer void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_group, S32 trx_type, const std::string& desc) { - // - //if(0 == amount || !region) return; - if(!region) return; - // + // + //if(0 == amount || !region) return; + if(!region) return; + // amount = abs(amount); LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL; if(can_afford_transaction(amount)) @@ -1204,10 +1204,10 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& log_message = "You decline " + mDesc + " from " + mFromName + "."; chat.mText = log_message; - // - //if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269 - if( LLMuteList::getInstance()->isMuted(mFromID) ) // muting for SL-42269 - // + // + //if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269 + if( LLMuteList::getInstance()->isMuted(mFromID) ) // muting for SL-42269 + // { chat.mMuted = TRUE; } @@ -1466,21 +1466,21 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) msg->getVector3Fast(_PREHASH_MessageBlock, _PREHASH_Position, position); msg->getBinaryDataFast( _PREHASH_MessageBlock, _PREHASH_BinaryBucket, binary_bucket, 0, 0, MTUBYTES); binary_bucket_size = msg->getSizeFast(_PREHASH_MessageBlock, _PREHASH_BinaryBucket); - EInstantMessage dialog = (EInstantMessage)d; - - // - llinfos << "RegionID: " << region_id.asString() << llendl; - // + EInstantMessage dialog = (EInstantMessage)d; + + // + llinfos << "RegionID: " << region_id.asString() << llendl; + // BOOL is_busy = gAgent.getBusy(); BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat); BOOL is_linden = LLMuteList::getInstance()->isLinden(name); BOOL is_owned_by_me = FALSE; - // - //chat.mMuted = is_muted && !is_linden; - chat.mMuted = is_muted; - // + // + //chat.mMuted = is_muted && !is_linden; + chat.mMuted = is_muted; + // chat.mFromID = from_id; chat.mFromName = name; chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT; @@ -2024,6 +2024,64 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) payload["lure_id"] = session_id; payload["godlike"] = FALSE; LLNotifications::instance().add("TeleportOffered", args, payload); + // + if(binary_bucket_size) + { + char* dest = new char[binary_bucket_size]; + strncpy(dest, (char*)binary_bucket, binary_bucket_size-1); /* Flawfinder: ignore */ + dest[binary_bucket_size-1] = '\0'; + + llinfos << "IM_LURE_USER binary_bucket " << dest << llendl; + + std::string str(dest); + typedef boost::tokenizer > tokenizer; + boost::char_separator sep("|","",boost::keep_empty_tokens); + tokenizer tokens(str, sep); + tokenizer::iterator iter = tokens.begin(); + std::string global_x_str(*iter++); + std::string global_y_str(*iter++); + std::string x_str(*iter++); + std::string y_str(*iter++); + std::string z_str(*iter++); + // skip what I think must be LookAt + if(iter != tokens.end()) + iter++; // x + if(iter != tokens.end()) + iter++; // y + if(iter != tokens.end()) + iter++; // z + std::string mat_str(""); + if(iter != tokens.end()) + mat_str.assign(*iter++); + mat_str = utf8str_trim(mat_str); + + llinfos << "IM_LURE_USER tokenized " << global_x_str << "|" << global_y_str << "|" << x_str << "|" << y_str << "|" << z_str << "|" << mat_str << llendl; + + std::istringstream gxstr(global_x_str); + int global_x; + gxstr >> global_x; + + std::istringstream gystr(global_y_str); + int global_y; + gystr >> global_y; + + std::istringstream xstr(x_str); + int x; + xstr >> x; + + std::istringstream ystr(y_str); + int y; + ystr >> y; + + std::istringstream zstr(z_str); + int z; + zstr >> z; + + llinfos << "IM_LURE_USER parsed " << global_x << "|" << global_y << "|" << x << "|" << y << "|" << z << "|" << mat_str << llendl; + + gAgent.showLureDestination(name, global_x, global_y, x, y, z, mat_str); + } + // } } break; @@ -2347,19 +2405,19 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) msg->getUUID("ChatData", "SourceID", from_id); chat.mFromID = from_id; - // - // this chatter assignment is moved from below + // + // this chatter assignment is moved from below chatter = gObjectList.findObject(from_id); - /* - if(chatter) - { - if(chatter->isAvatar()) - { - ((LLVOAvatar*)chatter)->resetIdleTime(); - } + /* + if(chatter) + { + if(chatter->isAvatar()) + { + ((LLVOAvatar*)chatter)->resetIdleTime(); + } } - */ - // + */ + // // Object owner for objects msg->getUUID("ChatData", "OwnerID", owner_id); @@ -2387,10 +2445,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) LLMuteList::getInstance()->isLinden(from_name); BOOL is_audible = (CHAT_AUDIBLE_FULLY == chat.mAudible); - // - // because I moved it to above - //chatter = gObjectList.findObject(from_id); - // + // + // because I moved it to above + //chatter = gObjectList.findObject(from_id); + // if (chatter) { chat.mPosAgent = chatter->getPositionAgent(); @@ -2560,17 +2618,17 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) // F T T T * No No // T * * * F Yes Yes - // - //chat.mMuted = is_muted && !is_linden; - chat.mMuted = is_muted; - // + // + //chat.mMuted = is_muted && !is_linden; + chat.mMuted = is_muted; + // if (!visible_in_chat_bubble - // - // && (is_linden || !is_busy || is_owned_by_me)) - && (!is_busy || is_owned_by_me)) - // + // + // && (is_linden || !is_busy || is_owned_by_me)) + && (!is_busy || is_owned_by_me)) + // { // show on screen and add to history check_translate_chat(mesg, chat, FALSE); @@ -3196,15 +3254,15 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) // If a modifier key is held down, turn off // LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't // trigger a control event. - U32 control_flags = gAgent.getControlFlags(); - - // - if(gSavedSettings.getBOOL("Nimble")) - { - control_flags |= AGENT_CONTROL_FINISH_ANIM; - } + U32 control_flags = gAgent.getControlFlags(); + + // + if(gSavedSettings.getBOOL("Nimble")) + { + control_flags |= AGENT_CONTROL_FINISH_ANIM; + } // - + MASK key_mask = gKeyboard->currentMask(TRUE); if (key_mask & MASK_ALT || key_mask & MASK_CONTROL) { @@ -3576,8 +3634,8 @@ void process_sound_trigger(LLMessageSystem *msg, void **) return; } - // - gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); + // + gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); //gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global, object_id); // } diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp index 6a074d969..d1d9988e7 100644 --- a/indra/newview/llworldmapmessage.cpp +++ b/indra/newview/llworldmapmessage.cpp @@ -228,6 +228,15 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**) callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport); } } + // + if(LLAgent::lure_show) + { + if((x_regions == LLAgent::lure_global_x) && (y_regions == LLAgent::lure_global_y)) + { + gAgent.onFoundLureDestination(); + } + } + // } // Tell the UI to update itself gFloaterWorldMap->updateSims(found_null_sim);