Massive commit, mainly client tag stuff and random id0 and random mac,

red name if not actually in the sim in active speakers for voice.
This commit is contained in:
phr0z3nt04st
2010-07-01 22:16:03 -05:00
parent acab2bd974
commit 7f8b62d70e
16 changed files with 557 additions and 244 deletions

View File

@@ -24,6 +24,7 @@ set(llimage_SOURCE_FILES
llimagedxt.cpp
llimagej2c.cpp
llimagejpeg.cpp
llimagemetadatareader.cpp
llimagepng.cpp
llimagetga.cpp
llimageworker.cpp
@@ -38,6 +39,7 @@ set(llimage_HEADER_FILES
llimagedxt.h
llimagej2c.h
llimagejpeg.h
llimagemetadatareader.h
llimagepng.h
llimagetga.h
llimageworker.h

View File

@@ -156,7 +156,7 @@ private:
public:
S16 mMemType; // debug
std::string decodedImageComment; //lol comment decoding haha
static BOOL sSizeOverride;
};

View File

@@ -36,7 +36,9 @@
#include "lldir.h"
#include "llimagej2c.h"
#include "llmemtype.h"
// <edit>
#include "llimagemetadatareader.h"
// </edit>
typedef LLImageJ2CImpl* (*CreateLLImageJ2CFunction)();
typedef void (*DestroyLLImageJ2CFunction)(LLImageJ2CImpl*);
typedef const char* (*EngineInfoLLImageJ2CFunction)();
@@ -297,6 +299,9 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir
// Update the raw discard level
updateRawDiscardLevel();
mDecoding = TRUE;
// <edit>
raw_imagep->decodedImageComment = LLImageMetaDataReader::ExtractEncodedComment(getData(),getDataSize());
// </edit>
res = mImpl->decodeImpl(*this, *raw_imagep, decode_time, first_channel, max_channel_count);
}

View File

@@ -0,0 +1,127 @@
// <edit>
#include "linden_common.h"
#include "llimagemetadatareader.h"
LLJ2cParser::LLJ2cParser(U8* data,int data_size)
{
if(data && data_size)
{
mData.resize(data_size);
memcpy(&(mData[0]), data, data_size);
//std::copy(data,data+data_size,mData.begin());
}
mIter = mData.begin();
}
U8 LLJ2cParser::nextChar()
{
U8 rtn = 0x00;
if(mIter != mData.end())
{
rtn = (*mIter);
mIter++;
}
return rtn;
}
std::vector<U8> LLJ2cParser::nextCharArray(int len)
{
std::vector<U8> array;
if(len > 0)
{
array.resize(len);
for(S32 i = 0; i < len; i++)
{
array[i] = nextChar();
}
}
return array;
}
std::vector<U8> LLJ2cParser::GetNextComment()
{
std::vector<U8> content;
while (mIter != mData.end())
{
U8 marker = nextChar();
if (marker == 0xff)
{
U8 marker_type = nextChar();
if (marker_type == 0x4f)
{
continue;
}
if (marker_type == 0x90)
{
//llinfos << "FOUND 0x90" << llendl;
break; //return empty vector
}
if (marker_type == 0x64)
{
//llinfos << "FOUND 0x64 COMMENT SECTION" << llendl;
S32 len = ((S32)nextChar())*256 + (S32)nextChar();
if (len > 3) content = nextCharArray(len - 2);
return content;
}
}
}
content.clear(); //return empty vector by clear anything there
return content;
}
//static
std::string LLImageMetaDataReader::ExtractEncodedComment(U8* data,int data_size)
{
LLJ2cParser* parser = new LLJ2cParser(data,data_size);
while(1)
{
std::vector<U8> comment = parser->GetNextComment();
if (comment.empty()) break; //exit loop
if (comment[1] == 0x00 && comment.size() == 130)
{
//llinfos << "FOUND PAYLOAD" << llendl;
std::vector<U8> payload(128);
S32 i;
memcpy(&(payload[0]), &(comment[2]), 128);
if (payload[2] == payload[127])
{
// emkdu.dll
for (i = 4; i < 128; i += 4)
{
payload[i] ^= payload[3];
payload[i + 1] ^= payload[1];
payload[i + 2] ^= payload[0];
payload[i + 3] ^= payload[2];
}
}
else if (payload[3] == payload[127])
{
// emkdu.dll or onyxkdu.dll
for (i = 4; i < 128; i += 4)
{
payload[i] ^= payload[2];
payload[i + 1] ^= payload[0];
payload[i + 2] ^= payload[1];
payload[i + 3] ^= payload[3];
}
}
else
{
break;//exit loop
}
for (i = 4; i < 128; ++i)
{
if (payload[i] == 0) break;
}
std::string result(payload.begin()+4,payload.begin()+i);
//llinfos << "FOUND COMMENT: " << result << llendl;
delete parser;
return result;
}
}
//end of loop
delete parser;
return "";
}
// </edit>

View File

@@ -0,0 +1,26 @@
// <edit>
#ifndef LL_LLIMAGEMETADATAREADER_H
#define LL_LLIMAGEMETADATAREADER_H
#include "stdtypes.h"
#include <string.h>
#include <vector>
#include <string>
class LLJ2cParser
{
public:
LLJ2cParser(U8* data,int data_size);
std::vector<U8> GetNextComment();
private:
U8 nextChar();
std::vector<U8> nextCharArray(int len);
std::vector<U8> mData;
std::vector<U8>::iterator mIter;
};
class LLImageMetaDataReader
{
public:
static std::string ExtractEncodedComment(U8* data,int data_size);
};
#endif
// </edit>

View File

@@ -461,6 +461,7 @@ void LLPanelActiveSpeakers::refreshSpeakers()
}
LLColor4 icon_color;
if (speakerp->mStatus == LLSpeaker::STATUS_MUTED)
{
icon_cell->setValue(mute_icon_image);
@@ -504,6 +505,20 @@ void LLPanelActiveSpeakers::refreshSpeakers()
// draw inactive speakers in gray
name_cell->setColor(LLColor4::grey4);
}
// <edit>
else if(speakerp->mType == LLSpeaker::SPEAKER_AGENT && speakerp->mID != gAgent.getID())
{
// let us check to see if they are actually in the sim
LLViewerRegion* regionp = gAgent.getRegion();
if(regionp)
{
if(regionp->mMapAvatarIDs.find(speakerp->mID) == -1)
{
name_cell->setColor(LLColor4::red);
}
}
}
// </edit>
else
{
name_cell->setColor(LLColor4::black);

View File

@@ -772,6 +772,30 @@ void LLFloaterAvatarList::refreshAvatarList()
snprintf(temp, sizeof(temp), "%d", (S32)position.mdV[VZ]);
}
element["columns"][LIST_ALTITUDE]["value"] = temp;
element["columns"][LIST_CLIENT]["column"] = "client";
element["columns"][LIST_CLIENT]["type"] = "text";
LLColor4 avatar_name_color = gColors.getColor( "AvatarNameColor" );
std::string client;
LLVOAvatar *avatarp = (LLVOAvatar*)gObjectList.findObject(av_id);
if(avatarp)
{
avatarp->getClientTag(client, avatar_name_color, TRUE);
if(client == "")
{
avatar_name_color = gColors.getColor( "ScrollUnselectedColor" );
client = "?";
}
element["columns"][LIST_CLIENT]["value"] = client.c_str();
}
else
{
element["columns"][LIST_CLIENT]["value"] = "Out Of Range";
}
//Blend to make the color show up better
avatar_name_color = avatar_name_color * 0.5f + gColors.getColor( "ScrollUnselectedColor" ) * 0.5f;
element["columns"][LIST_CLIENT]["color"] = avatar_name_color.getValue();
// Add to list
mAvatarList->addElement(element, ADD_BOTTOM);

View File

@@ -200,7 +200,8 @@ private:
LIST_AVATAR_NAME,
LIST_DISTANCE,
LIST_POSITION,
LIST_ALTITUDE
LIST_ALTITUDE,
LIST_CLIENT
};
typedef void (*avlist_command_t)(const LLUUID &avatar, const std::string &name);

View File

@@ -77,11 +77,11 @@
#include "llglheaders.h"
// <edit>
// <edit>
#include "llappviewer.h"
#include "llspinctrl.h"
#include <boost/lexical_cast.hpp>
// </edit>
#include <boost/lexical_cast.hpp>
// </edit>
#define USE_VIEWER_AUTH 0
const S32 BLACK_BORDER_HEIGHT = 160;
@@ -108,8 +108,8 @@ public:
LLLoginRefreshHandler gLoginRefreshHandler;
// <edit>
std::string gFullName;
// <edit>
std::string gFullName;
// </edit>
// helper class that trys to download a URL from a web site and calls a method
@@ -303,10 +303,10 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
// childSetAction("quit_btn", onClickQuit, this);
// <edit>
//std::string channel = gSavedSettings.getString("VersionChannelName");
std::string channel = gSavedSettings.getString("SpecifiedChannel");
// </edit>
// <edit>
//std::string channel = gSavedSettings.getString("VersionChannelName");
std::string channel = gSavedSettings.getString("SpecifiedChannel");
// </edit>
std::string version = llformat("%d.%d.%d (%d)",
LL_VERSION_MAJOR,
LL_VERSION_MINOR,
@@ -365,64 +365,69 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
refreshLocation( false );
#endif
// <edit>
std::string specified_channel = gSavedSettings.getString("SpecifiedChannel");
// <edit>
std::string specified_channel = gSavedSettings.getString("SpecifiedChannel");
getChild<LLLineEditor>("channel_edit")->setText(specified_channel);
bool specify_mac = gSavedSettings.getBOOL("SpecifyMAC");
bool specify_id0 = gSavedSettings.getBOOL("SpecifyID0");
std::string specified_mac = gSavedSettings.getString("SpecifiedMAC");
std::string specified_id0 = gSavedSettings.getString("SpecifiedID0");
// Don't allow specify for empty strings (just in case)
if(specified_mac.length() == 0) specify_mac = false;
if(specified_id0.length() == 0) specify_id0 = false;
gSavedSettings.setBOOL("SpecifyMAC", specify_mac);
gSavedSettings.setBOOL("SpecifyID0", specify_id0);
getChild<LLCheckBoxCtrl>("mac_check")->setValue(specify_mac);
getChild<LLLineEditor>("mac_edit")->setEnabled(specify_mac);
getChild<LLCheckBoxCtrl>("id0_check")->setValue(specify_id0);
getChild<LLLineEditor>("id0_edit")->setEnabled(specify_id0);
fillMAC();
bool specify_mac = gSavedSettings.getBOOL("SpecifyMAC");
bool specify_id0 = gSavedSettings.getBOOL("SpecifyID0");
std::string specified_mac = gSavedSettings.getString("SpecifiedMAC");
std::string specified_id0 = gSavedSettings.getString("SpecifiedID0");
// Don't allow specify for empty strings (just in case)
if(specified_mac.length() == 0) specify_mac = false;
if(specified_id0.length() == 0) specify_id0 = false;
gSavedSettings.setBOOL("SpecifyMAC", specify_mac);
gSavedSettings.setBOOL("SpecifyID0", specify_id0);
getChild<LLCheckBoxCtrl>("mac_check")->setValue(specify_mac);
getChild<LLLineEditor>("mac_edit")->setEnabled(specify_mac);
getChild<LLCheckBoxCtrl>("id0_check")->setValue(specify_id0);
getChild<LLLineEditor>("id0_edit")->setEnabled(specify_id0);
childSetEnabled("mac_random_btn",specify_mac);
childSetEnabled("id0_random_btn",specify_id0);
fillMAC();
fillID0();
fillVer();
childSetCommitCallback("mac_check", onCheckMAC, this);
childSetCommitCallback("id0_check", onCheckID0, this);
// </edit>
}
// <edit>
void LLPanelLogin::fillMAC()
{
if(gSavedSettings.getBOOL("SpecifyMAC"))
{
getChild<LLLineEditor>("mac_edit")->setText(gSavedSettings.getString("SpecifiedMAC"));
}
else
{
char hashed_mac_string[MD5HEX_STR_SIZE];
LLMD5 hashed_mac;
hashed_mac.update( gMACAddress, MAC_ADDRESS_BYTES );
hashed_mac.finalize();
hashed_mac.hex_digest(hashed_mac_string);
getChild<LLLineEditor>("mac_edit")->setText(std::string(hashed_mac_string));
}
}
void LLPanelLogin::fillID0()
{
if(gSavedSettings.getBOOL("SpecifyID0"))
{
getChild<LLLineEditor>("id0_edit")->setText(gSavedSettings.getString("SpecifiedID0"));
}
else
{
getChild<LLLineEditor>("id0_edit")->setText(LLAppViewer::instance()->getSerialNumber());
}
fillVer();
childSetCommitCallback("mac_check", onCheckMAC, this);
childSetCommitCallback("id0_check", onCheckID0, this);
childSetAction("mac_random_btn", onClickMACRandom, this);
childSetAction("id0_random_btn", onClickID0Random, this);
// </edit>
}
// <edit>
void LLPanelLogin::fillMAC()
{
if(gSavedSettings.getBOOL("SpecifyMAC"))
{
getChild<LLLineEditor>("mac_edit")->setText(gSavedSettings.getString("SpecifiedMAC"));
}
else
{
char hashed_mac_string[MD5HEX_STR_SIZE];
LLMD5 hashed_mac;
hashed_mac.update( gMACAddress, MAC_ADDRESS_BYTES );
hashed_mac.finalize();
hashed_mac.hex_digest(hashed_mac_string);
getChild<LLLineEditor>("mac_edit")->setText(std::string(hashed_mac_string));
}
}
void LLPanelLogin::fillID0()
{
if(gSavedSettings.getBOOL("SpecifyID0"))
{
getChild<LLLineEditor>("id0_edit")->setText(gSavedSettings.getString("SpecifiedID0"));
}
else
{
getChild<LLLineEditor>("id0_edit")->setText(LLAppViewer::instance()->getSerialNumber());
}
}
void LLPanelLogin::fillVer()
@@ -431,27 +436,66 @@ void LLPanelLogin::fillVer()
getChild<LLSpinCtrl>("vermin_spin")->forceSetValue((S32)gSavedSettings.getU32("SpecifiedVersionMin"));
getChild<LLSpinCtrl>("verpatch_spin")->forceSetValue((S32)gSavedSettings.getU32("SpecifiedVersionPatch"));
getChild<LLSpinCtrl>("verbuild_spin")->forceSetValue((S32)gSavedSettings.getU32("SpecifiedVersionBuild"));
}
// static
void LLPanelLogin::onCheckMAC(LLUICtrl* ctrl, void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
bool enabled = ((LLCheckBoxCtrl*)ctrl)->getValue();
gSavedSettings.setBOOL("SpecifyMAC", enabled);
panel->getChild<LLLineEditor>("mac_edit")->setEnabled(enabled);
panel->fillMAC();
}
// static
void LLPanelLogin::onCheckID0(LLUICtrl* ctrl, void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
bool enabled = ((LLCheckBoxCtrl*)ctrl)->getValue();
gSavedSettings.setBOOL("SpecifyID0", enabled);
panel->getChild<LLLineEditor>("id0_edit")->setEnabled(enabled);
panel->fillID0();
}
}
// static
void LLPanelLogin::onCheckMAC(LLUICtrl* ctrl, void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
bool enabled = ((LLCheckBoxCtrl*)ctrl)->getValue();
gSavedSettings.setBOOL("SpecifyMAC", enabled);
panel->getChild<LLLineEditor>("mac_edit")->setEnabled(enabled);
panel->childSetEnabled("mac_random_btn",enabled);
panel->fillMAC();
}
// static
void LLPanelLogin::onCheckID0(LLUICtrl* ctrl, void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
bool enabled = ((LLCheckBoxCtrl*)ctrl)->getValue();
gSavedSettings.setBOOL("SpecifyID0", enabled);
panel->getChild<LLLineEditor>("id0_edit")->setEnabled(enabled);
panel->childSetEnabled("id0_random_btn",enabled);
panel->fillID0();
}
// static
void LLPanelLogin::onClickMACRandom(void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
unsigned char seed[16]; /* Flawfinder: ignore */
LLUUID::getNodeID(&seed[0]);
seed[6]='U';
seed[7]='W';
LLUUID::getSystemTime((uuid_time_t *)(&seed[8]));
char hash_string[MD5HEX_STR_SIZE];
LLMD5 hash;
hash.update( seed , 16 );
hash.finalize();
hash.hex_digest(hash_string);
gSavedSettings.setString("SpecifiedMAC",std::string(hash_string));
panel->fillMAC();
}
// static
void LLPanelLogin::onClickID0Random(void* userData)
{
LLPanelLogin* panel = (LLPanelLogin*)userData;
unsigned char seed[16]; /* Flawfinder: ignore */
LLUUID::getNodeID(&seed[0]);
seed[6]='W';
seed[7]='U';
LLUUID::getSystemTime((uuid_time_t *)(&seed[8]));
char hash_string[MD5HEX_STR_SIZE];
LLMD5 hash;
hash.update( seed , 16 );
hash.finalize();
hash.hex_digest(hash_string);
gSavedSettings.setString("SpecifiedID0",std::string(hash_string));
panel->fillID0();
}
// </edit>
void LLPanelLogin::setSiteIsAlive( bool alive )
@@ -1018,10 +1062,10 @@ void LLPanelLogin::loadLoginPage()
// Channel and Version
std::string version = llformat("%d.%d.%d (%d)",
gSavedSettings.getU32("SpecifiedVersionMaj"), gSavedSettings.getU32("SpecifiedVersionMin"), gSavedSettings.getU32("SpecifiedVersionPatch"), gSavedSettings.getU32("SpecifiedVersionBuild"));
//char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0);
char* curl_channel = curl_escape(gSavedSettings.getString("SpecifiedChannel").c_str(), 0);
// </edit>
//char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0);
char* curl_channel = curl_escape(gSavedSettings.getString("SpecifiedChannel").c_str(), 0);
// </edit>
char* curl_version = curl_escape(version.c_str(), 0);
oStr << "&channel=" << curl_channel;
@@ -1183,26 +1227,26 @@ void LLPanelLogin::onClickConnect(void *)
{
if (sInstance && sInstance->mCallback)
{
// <edit> save identity settings for login
bool specify_mac = sInstance->getChild<LLCheckBoxCtrl>("mac_check")->getValue();
// <edit> save identity settings for login
bool specify_mac = sInstance->getChild<LLCheckBoxCtrl>("mac_check")->getValue();
bool specify_id0 = sInstance->getChild<LLCheckBoxCtrl>("id0_check")->getValue();
gSavedSettings.setBOOL("SpecifyMAC", specify_mac);
gSavedSettings.setBOOL("SpecifyID0", specify_id0);
if(specify_mac)
{
std::string specified_mac = sInstance->getChild<LLLineEditor>("mac_edit")->getText();
gSavedSettings.setString("SpecifiedMAC", specified_mac);
}
gSavedSettings.setBOOL("SpecifyMAC", specify_mac);
gSavedSettings.setBOOL("SpecifyID0", specify_id0);
if(specify_id0)
{
std::string specified_id0 = sInstance->getChild<LLLineEditor>("id0_edit")->getText();
gSavedSettings.setString("SpecifiedID0", specified_id0);
}
if(specify_mac)
{
std::string specified_mac = sInstance->getChild<LLLineEditor>("mac_edit")->getText();
gSavedSettings.setString("SpecifiedMAC", specified_mac);
}
std::string specified_channel = sInstance->getChild<LLLineEditor>("channel_edit")->getText();
if(specify_id0)
{
std::string specified_id0 = sInstance->getChild<LLLineEditor>("id0_edit")->getText();
gSavedSettings.setString("SpecifiedID0", specified_id0);
}
std::string specified_channel = sInstance->getChild<LLLineEditor>("channel_edit")->getText();
gSavedSettings.setString("SpecifiedChannel", specified_channel);
U32 specified_ver_maj = (U32)sInstance->getChild<LLSpinCtrl>("vermaj_spin")->getValue().asInteger();
@@ -1213,7 +1257,7 @@ void LLPanelLogin::onClickConnect(void *)
gSavedSettings.setU32("SpecifiedVersionPatch", specified_ver_patch);
U32 specified_ver_build = (U32)sInstance->getChild<LLSpinCtrl>("verbuild_spin")->getValue().asInteger();
gSavedSettings.setU32("SpecifiedVersionBuild", specified_ver_build);
// </edit>
// tell the responder we're not here anymore
if ( gResponsePtr )

View File

@@ -40,8 +40,8 @@
class LLUIImage;
// <edit>
extern std::string gFullName;
// <edit>
extern std::string gFullName;
// </edit>
class LLPanelLogin:
@@ -117,12 +117,14 @@ private:
static void onLoginComboLostFocus(LLFocusableElement* fe, void*);
static void onNameCheckChanged(LLUICtrl* ctrl, void* data);
static void clearPassword();
// <edit>
void fillMAC();
// <edit>
void fillMAC();
void fillID0();
void fillVer();
static void onCheckMAC(LLUICtrl* ctrl, void* userData);
static void onCheckID0(LLUICtrl* ctrl, void* userData);
void fillVer();
static void onCheckMAC(LLUICtrl* ctrl, void* userData);
static void onCheckID0(LLUICtrl* ctrl, void* userData);
static void onClickMACRandom(void* userData);
static void onClickID0Random(void* userData);
// </edit>
public:

View File

@@ -523,6 +523,7 @@ BOOL LLViewerImage::createTexture(S32 usename/*= 0*/)
U32 raw_width = mRawImage->getWidth() << mRawDiscardLevel;
U32 raw_height = mRawImage->getHeight() << mRawDiscardLevel;
decodedComment = mRawImage->decodedImageComment;
if( raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE )
{
llinfos << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << llendl;

View File

@@ -365,6 +365,8 @@ public:
LLFrameTimer mLastPacketTimer; // Time since last packet.
LLFrameTimer mLastReferencedTimer;
std::string decodedComment;
private:
LLUUID mID;

View File

@@ -3012,7 +3012,162 @@ void LLVOAvatar::idleUpdateWindEffect()
}
}
}
void LLVOAvatar::getClientTag(std::string& client, LLColor4& color, BOOL useComment)
{
std::string uuid_str = getTE(0)->getID().asString(); //UUID of the head texture
if(getTEImage(TEX_HEAD_BODYPAINT)->isMissingAsset())
{
color = LLColor4(1.f, 1.0f, 1.0f);
client = "Unknown viewer";
}
else if (uuid_str == "ccda2b3b-e72c-a112-e126-fee238b67218")
{
// textures other than head are 4934f1bf-3b1f-cf4f-dbdf-a72550d05bc6
color = LLColor4(0.f, 1.0f, 0.0f);
client = "Emerald";
}
else if (uuid_str == "0bcd5f5d-a4ce-9ea4-f9e8-15132653b3d8")
{
color = LLColor4(1.0f, 0.3f, 0.5f);
client = "MoyMix";
}
else if (uuid_str == "5855f37d-63e5-3918-1404-8ffa3820eb6d")
{
color = LLColor4(1.0f, 0.3f, 0.5f);
client = "MoyMix/B";
}
else if (uuid_str == "9ba526b6-f43d-6b60-42de-ce62a25ee7fb")
{
color = LLColor4(1.0f, 0.3f, 0.5f);
client = "MoyMix/nolife";
}
//else if (uuid_str == "abbca853-30ba-49c1-a1e7-2a5b9a70573f")
//{
// color = LLColor4(0.5f, 0.75f, 1.0f);
// strcat(line, " (CryoLife/" + "A)");
//
//}
else if (uuid_str == "0f6723d2-5b23-6b58-08ab-308112b33786")
{
color = LLColor4(0.5f, 0.75f, 1.0f);
client = "CryoLife";
}
else if (uuid_str == "2c9c1e0b-e5d1-263e-16b1-7fc6d169f3d6")
{
color = LLColor4(0.5f, 0.75f, 1.0f);
client = "Phoxy SL";
}
else if (uuid_str == "c252d89d-6f7c-7d90-f430-d140d2e3fbbe")
{
color = LLColor4(0.7f, 0.7f, 0.7f);
client = "VLife";
}
else if (uuid_str == "5aa5c70d-d787-571b-0495-4fc1bdef1500")
{
color = LLColor4(1.f, 0.0f, 0.0f);
client = "GridProxy/LordGregGreg";
}
else if (uuid_str == "8183e823-c443-2142-6eb6-2ab763d4f81c")
{
color = LLColor4(1.f, 1.f, 0.0f);
client = "GridProxy/DayOh";
}
else if (uuid_str == "f3fd74a6-fee7-4b2f-93ae-ddcb5991da04")
{
color = LLColor4(1.0f, 0.0f, 1.0f);
client = "PSL/A";
}
else if (uuid_str == "77662f23-c77a-9b4d-5558-26b757b2144c")
{
color = LLColor4(1.0f, 0.0f, 1.0f);
client = "PSL/B";
}
else if (uuid_str == "1c29480c-c608-df87-28bb-964fb64c5366")
{
color = LLColor4(1.f, 1.0f, 1.0f);
client = "Emerald/GEMINI";
}
else if (uuid_str == "e6f9c019-8783-dc3e-b265-41f1510333fc")
{
color = LLColor4(0.4f,0.4f,0.4f);
client = "Onyx";
}
else if (uuid_str == "5262d71a-88f7-ef40-3b15-00ea148ab4b5")
{
color = LLColor4(0.9f, 0.9f, 0.9f);
client = "GEMINI Bot";
}
else if (uuid_str == "adcbe893-7643-fd12-f61c-0b39717e2e32")
{
color = LLColor4(1.0f, 0.5f, 0.4f);
client = "tyk3n";
}
else if (uuid_str == "f5a48821-9a98-d09e-8d6a-50cc08ba9a47")
{
color = gColors.getColor( "AvatarNameColor" );
client = "NeilLife";
}
else if (uuid_str == "cc7a030f-282f-c165-44d2-b5ee572e72bf")
{
color = LLColor4::purple;
client = "Imprudence";
}
else if (uuid_str == "c228d1cf-4b5d-4ba8-84f4-899a0796aa97")
{
color = LLColor4(0.5f, 0.5f, 0.5f);
client = "Viewer 2.0";
}
else if (uuid_str == "380ae30b-f2c7-b07c-041e-5688e89a6fc1")
{
color = LLColor4(0.65f, 0.93f, 0.14f);
client = "Nano";
}
else if (uuid_str == "c58fca06-33b3-827d-d81c-a886a631affc")
{
color = LLColor4(1.0f,0.61176f,0.0f);
client = "Whale";
}
else
{
color = gColors.getColor( "AvatarNameColor" );
color.setAlpha(1.f);
//llinfos << "Apparently this tag isn't registered: " << uuid_str << llendl;
}
if(useComment)
{
LLUUID id = getTE(9)->getID();
LLPointer<LLViewerImage> image = gImageList.getImage(id);
if(image && image->decodedComment.length())
{
if(client.length())
client += " , " + image->decodedComment;
else
client = image->decodedComment;
}
}
}
void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
{
// update chat bubble
@@ -3057,6 +3212,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
new_name = TRUE;
}
// <edit>
std::string client;
// </edit>
// First Calculate Alpha
// If alpha > 0, create mNameText if necessary, otherwise delete it
{
@@ -3096,10 +3255,16 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
new_name = TRUE;
}
LLColor4 avatar_name_color = gColors.getColor( "AvatarNameColor" );
// <edit>
//LLColor4 avatar_name_color = gColors.getColor( "AvatarNameColor" );
//avatar_name_color.setAlpha(alpha);
if(isFullyLoaded() && !mIsSelf)
{
getClientTag(client,avatar_name_color);
}
// </edit>
avatar_name_color.setAlpha(alpha);
mNameText->setColor(avatar_name_color);
LLQuaternion root_rot = mRoot.getWorldRotation();
mNameText->setUsePixelSize(TRUE);
LLVector3 pixel_right_vec;
@@ -3153,7 +3318,8 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
(!title && !mTitle.empty()) ||
(title && mTitle != title->getString()) ||
(is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute)
|| is_appearance != mNameAppearance)
|| is_appearance != mNameAppearance
|| client.length() ) // <edit>
{
std::string line;
if (!sRenderGroupTitles)
@@ -3179,133 +3345,20 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
line += lastname->getString();
BOOL need_comma = FALSE;
// <edit>
if(getTEImage(TEX_HEAD_BODYPAINT)->isMissingAsset())
{
mNameText->setColor(LLColor4(1.f, 1.0f, 1.0f));
line += " (Unknown viewer)";
}
else if(isFullyLoaded() && !mIsSelf)
{
std::string uuid_str = getTE(0)->getID().asString();
if(uuid_str == "ccda2b3b-e72c-a112-e126-fee238b67218")
{
// textures other than head are 4934f1bf-3b1f-cf4f-dbdf-a72550d05bc6
mNameText->setColor(LLColor4(0.f, 1.0f, 0.0f));
line += " (Emerald)";
}
else if(uuid_str == "0bcd5f5d-a4ce-9ea4-f9e8-15132653b3d8")
{
mNameText->setColor(LLColor4(1.0f, 0.3f, 0.5f));
line += " (MoyMix)";
}
else if(uuid_str == "5855f37d-63e5-3918-1404-8ffa3820eb6d")
{
mNameText->setColor(LLColor4(1.0f, 0.3f, 0.5f));
line += " (MoyMix/B)";
}
else if(uuid_str == "9ba526b6-f43d-6b60-42de-ce62a25ee7fb")
{
mNameText->setColor(LLColor4(1.0f, 0.3f, 0.5f));
line += " (MoyMix/nolife)";
}
//else if(uuid_str == "abbca853-30ba-49c1-a1e7-2a5b9a70573f")
//{
// mNameText->setColor(LLColor4(0.5f, 0.75f, 1.0f));
// strcat(line, " (CryoLife/" + "A)");
//}
else if(uuid_str == "0f6723d2-5b23-6b58-08ab-308112b33786")
{
mNameText->setColor(LLColor4(0.5f, 0.75f, 1.0f));
line += " (CryoLife)";
}
else if(uuid_str == "2c9c1e0b-e5d1-263e-16b1-7fc6d169f3d6")
{
mNameText->setColor(LLColor4(0.5f, 0.75f, 1.0f));
line += " (Phoxy SL)";
}
else if(uuid_str == "c252d89d-6f7c-7d90-f430-d140d2e3fbbe")
{
mNameText->setColor(LLColor4(0.7f, 0.7f, 0.7f));
line += " (VLife)";
}
else if(uuid_str == "5aa5c70d-d787-571b-0495-4fc1bdef1500")
{
mNameText->setColor(LLColor4(1.f, 0.0f, 0.0f));
line += " (GridProxy/LordGregGreg)";
}
else if(uuid_str == "8183e823-c443-2142-6eb6-2ab763d4f81c")
{
mNameText->setColor(LLColor4(1.f, 1.f, 0.0f));
line += " (GridProxy/DayOh)";
}
else if(uuid_str == "f3fd74a6-fee7-4b2f-93ae-ddcb5991da04")
{
mNameText->setColor(LLColor4(1.0f, 0.0f, 1.0f));
line += " (PSL/A)";
}
else if(uuid_str == "77662f23-c77a-9b4d-5558-26b757b2144c")
{
mNameText->setColor(LLColor4(1.0f, 0.0f, 1.0f));
line += " (PSL/B)";
}
else if(uuid_str == "1c29480c-c608-df87-28bb-964fb64c5366")
{
mNameText->setColor(LLColor4(1.f, 1.0f, 1.0f));
line += " (Emerald/GEMINI)";
}
else if(uuid_str == "5262d71a-88f7-ef40-3b15-00ea148ab4b5")
{
mNameText->setColor(LLColor4(0.9f, 0.9f, 0.9f));
line += " (GEMINI Bot)";
}
else if(uuid_str == "adcbe893-7643-fd12-f61c-0b39717e2e32")
{
mNameText->setColor(LLColor4(1.0f, 0.5f, 0.4f));
line += " (tyk3n)";
}
else if(uuid_str == "f5a48821-9a98-d09e-8d6a-50cc08ba9a47")
{
mNameText->setColor(gColors.getColor( "AvatarNameColor" ));
line += " (NeilLife)";
}
else if(uuid_str == "cc7a030f-282f-c165-44d2-b5ee572e72bf")
{
mNameText->setColor(LLColor4::purple);
line += " (Imprudence)";
}
else if(uuid_str == "c228d1cf-4b5d-4ba8-84f4-899a0796aa97")
{
mNameText->setColor(LLColor4(0.5f, 0.5f, 0.5f));
line += " (Viewer 2.0)";
}
else if(uuid_str == "380ae30b-f2c7-b07c-041e-5688e89a6fc1")
{
mNameText->setColor(LLColor4(0.65f, 0.93f, 0.14f));
line += " (Nano)";
}
else
{
LLColor4 avatar_name_color = gColors.getColor( "AvatarNameColor" );
avatar_name_color.setAlpha(1.f);
//llinfos << "Apparently this tag isn't registered: " << uuid_str << llendl;
mNameText->setColor(avatar_name_color);
}
}
else
{
LLColor4 avatar_name_color = gColors.getColor( "AvatarNameColor" );
avatar_name_color.setAlpha(1.f);
mNameText->setColor(avatar_name_color);
}
// </edit>
if (is_away || is_muted || is_busy)
if (client.length() || is_away || is_muted || is_busy)
{
line += " (";
if (client != "")
{
line += client;
need_comma = TRUE;
}
if (is_away)
{
if (need_comma)
{
line += ", ";
}
line += "Away";
need_comma = TRUE;
}

View File

@@ -88,6 +88,10 @@ public:
static void updateImpostors();
// <edit>
void getClientTag(std::string& client, LLColor4& color, BOOL useComment = FALSE);
// </edit>
//--------------------------------------------------------------------
// LLViewerObject interface
//--------------------------------------------------------------------

View File

@@ -13,6 +13,7 @@
<column name="distance" label="Dist." width="48" tool_tip="Distance from your avatar (red=within chat range, yellow=within shout range, green=within draw distance)"/>
<column name="position" label="Pos." width="60" tool_tip="Position (X, Y) within this sim, or general direction (cardinal point) for outside sims"/>
<column name="altitude" label="Alt." width="48" tool_tip="Altitude"/>
<column name="client" label="Client" width="80" dynamicwidth="true" tool_tip="Client the avatar is possibly using"/>
</scroll_list>
<tab_container border="false" bottom_delta="-130" height="120" left="6" mouse_opaque="false"

View File

@@ -118,6 +118,9 @@
follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true"
height="20" left_delta="64" max_length="32" mouse_opaque="true"
name="mac_edit" select_all_on_focus_received="true" width="230" enabled="false" font_size="Small" />
<button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="r" left_delta="235" mouse_opaque="true" name="mac_random_btn" scale_image="TRUE"
width="20" />
<check_box bottom="8" follows="left|bottom" font="SansSerifSmall" height="16"
initial_value="false" label="ID0:" control_name="SpecifyID0"
left="750" mouse_opaque="true" name="id0_check" width="138" font_size="Small" />
@@ -125,7 +128,10 @@
follows="left|bottom" font="SansSerif" handle_edit_keys_directly="true"
height="20" left_delta="64" max_length="32" mouse_opaque="true"
name="id0_edit" select_all_on_focus_received="true" width="230" enabled="false" font_size="Small" />
<button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="r" left_delta="235" mouse_opaque="true" name="id0_random_btn" scale_image="TRUE"
width="20" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="54" drop_shadow_visible="true" follows="left|bottom"
font="SansSerif" h_pad="0" halign="left" height="16"