Added lure data parsing
This commit is contained in:
@@ -136,7 +136,9 @@
|
||||
#include "llappviewer.h"
|
||||
#include "llviewerjoystick.h"
|
||||
#include "llfollowcam.h"
|
||||
|
||||
// <edit>
|
||||
#include "llworldmapmessage.h"
|
||||
// </edit>
|
||||
using namespace LLVOAvatarDefines;
|
||||
|
||||
extern LLMenuBarGL* gMenuBarView;
|
||||
@@ -222,7 +224,6 @@ LLAgent gAgent;
|
||||
|
||||
// <edit>
|
||||
// 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;
|
||||
*/
|
||||
|
||||
// </edit>
|
||||
|
||||
const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f;
|
||||
@@ -8019,5 +8020,60 @@ std::string LLAgent::getCapability(const std::string& name) const
|
||||
}
|
||||
return iter->second;
|
||||
}
|
||||
// <edit>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// </edit>
|
||||
|
||||
// EOF
|
||||
|
||||
|
||||
@@ -775,6 +775,18 @@ public:
|
||||
|
||||
BOOL mInitialized;
|
||||
|
||||
// <edit>
|
||||
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;
|
||||
// </edit>
|
||||
|
||||
S32 mNumPendingQueries;
|
||||
S32* mActiveCacheQueries;
|
||||
|
||||
@@ -790,6 +802,11 @@ public:
|
||||
LLFrameTimer mDoubleTapRunTimer;
|
||||
EDoubleTapRunMode mDoubleTapRunMode;
|
||||
|
||||
// <edit>
|
||||
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();
|
||||
// </edit>
|
||||
|
||||
private:
|
||||
bool mbTeleportKeepsLookAt; // try to keep look-at after teleport is complete
|
||||
bool mbAlwaysRun; // should the avatar run by default rather than walk
|
||||
|
||||
@@ -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);
|
||||
// <edit>
|
||||
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<boost::char_separator<char> > tokenizer;
|
||||
boost::char_separator<char> 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);
|
||||
}
|
||||
// </edit>
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -228,6 +228,15 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
|
||||
callback(handle, LLWorldMapMessage::getInstance()->mSLURL, image_id, LLWorldMapMessage::getInstance()->mSLURLTeleport);
|
||||
}
|
||||
}
|
||||
// <edit>
|
||||
if(LLAgent::lure_show)
|
||||
{
|
||||
if((x_regions == LLAgent::lure_global_x) && (y_regions == LLAgent::lure_global_y))
|
||||
{
|
||||
gAgent.onFoundLureDestination();
|
||||
}
|
||||
}
|
||||
// </edit>
|
||||
}
|
||||
// Tell the UI to update itself
|
||||
gFloaterWorldMap->updateSims(found_null_sim);
|
||||
|
||||
Reference in New Issue
Block a user