Added ability to save scripts from objects from File -> Save as... and merged fixes for Unix systems, new detection for viewer 2.0

This commit is contained in:
phr0z3nt04st
2010-07-20 21:44:16 -05:00
parent 05b83e0179
commit 9e14b03165
6 changed files with 104 additions and 17 deletions

View File

@@ -52,6 +52,7 @@ extern void request_sound(const LLUUID &sound_guid);
LLAudioEngine* gAudiop = NULL; LLAudioEngine* gAudiop = NULL;
int gSoundHistoryPruneCounter = 0;
// //
// LLAudioEngine implementation // LLAudioEngine implementation
@@ -1820,7 +1821,8 @@ void logSoundPlay(LLUUID id, LLAudioSource* audio_source, LLVector3d position, S
gSoundHistory[id] = item; gSoundHistory[id] = item;
} }
static void logSoundStop(LLUUID id) //static
void logSoundStop(LLUUID id)
{ {
if(gSoundHistory.find(id) != gSoundHistory.end()) if(gSoundHistory.find(id) != gSoundHistory.end())
{ {
@@ -1831,7 +1833,8 @@ static void logSoundStop(LLUUID id)
} }
} }
static void pruneSoundLog() //static
void pruneSoundLog()
{ {
if(++gSoundHistoryPruneCounter >= 64) if(++gSoundHistoryPruneCounter >= 64)
{ {

View File

@@ -488,10 +488,10 @@ typedef struct
extern std::map<LLUUID, LLSoundHistoryItem> gSoundHistory; extern std::map<LLUUID, LLSoundHistoryItem> gSoundHistory;
static void logSoundPlay(LLUUID id, LLAudioSource* audio_source, LLVector3d position, S32 type, LLUUID assetid, LLUUID ownerid, LLUUID sourceid, bool is_trigger, bool is_looped); extern void logSoundPlay(LLUUID id, LLAudioSource* audio_source, LLVector3d position, S32 type, LLUUID assetid, LLUUID ownerid, LLUUID sourceid, bool is_trigger, bool is_looped);
static void logSoundStop(LLUUID id); extern void logSoundStop(LLUUID id);
static void pruneSoundLog(); extern void pruneSoundLog();
static int gSoundHistoryPruneCounter; extern int gSoundHistoryPruneCounter;
// </edit> // </edit>

View File

@@ -170,8 +170,11 @@ void LLAO::refresh()
if(sd_it->first == "stands") if(sd_it->first == "stands")
for(LLSD::array_iterator itr = sd_it->second.beginArray(); for(LLSD::array_iterator itr = sd_it->second.beginArray();
itr != sd_it->second.endArray(); ++itr) itr != sd_it->second.endArray(); ++itr)
{
//list of listness //list of listness
if(itr->asUUID().notNull())
mStandOverrides.push_back(itr->asUUID()); mStandOverrides.push_back(itr->asUUID());
}
// ignore if override is null key... // ignore if override is null key...
if(sd_it->second.asUUID().isNull() if(sd_it->second.asUUID().isNull()
// don't allow override to be used as a trigger // don't allow override to be used as a trigger
@@ -283,7 +286,7 @@ void LLFloaterAO::refresh()
void LLFloaterAO::onCommitStands(LLUICtrl* ctrl, void* user_data) void LLFloaterAO::onCommitStands(LLUICtrl* ctrl, void* user_data)
{ {
//LLFloaterAO* floater = (LLFloaterAO*)user_data; //LLFloaterAO* floater = (LLFloaterAO*)user_data;
LLUUID id = LLUUID(ctrl->getValue()); LLUUID id = ctrl->getValue().asUUID();
std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id); std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id);
LLVOAvatar* avatarp = gAgent.getAvatarObject(); LLVOAvatar* avatarp = gAgent.getAvatarObject();
if(id.notNull() && itr != LLAO::mStandOverrides.end()) if(id.notNull() && itr != LLAO::mStandOverrides.end())
@@ -362,7 +365,7 @@ void LLFloaterAO::onCommitAnim(LLUICtrl* ctrl, void* user_data)
void LLFloaterAO::onClickStandRemove(void* user_data) void LLFloaterAO::onClickStandRemove(void* user_data)
{ {
LLFloaterAO* floater = (LLFloaterAO*)user_data; LLFloaterAO* floater = (LLFloaterAO*)user_data;
LLUUID id = LLUUID(floater->mStandsCombo->getValue()); LLUUID id = floater->mStandsCombo->getValue().asUUID();
std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id); std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id);
LLVOAvatar* avatarp = gAgent.getAvatarObject(); LLVOAvatar* avatarp = gAgent.getAvatarObject();
if(id.notNull() && itr != LLAO::mStandOverrides.end()) if(id.notNull() && itr != LLAO::mStandOverrides.end())
@@ -383,7 +386,7 @@ void LLFloaterAO::onClickStandRemove(void* user_data)
void LLFloaterAO::onClickStandAdd(void* user_data) void LLFloaterAO::onClickStandAdd(void* user_data)
{ {
LLFloaterAO* floater = (LLFloaterAO*)user_data; LLFloaterAO* floater = (LLFloaterAO*)user_data;
LLUUID id = LLUUID(floater->mStandsCombo->getValue()); LLUUID id = floater->mStandsCombo->getValue().asUUID();
std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id); std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id);
LLVOAvatar* avatarp = gAgent.getAvatarObject(); LLVOAvatar* avatarp = gAgent.getAvatarObject();
if(id.notNull() && itr == LLAO::mStandOverrides.end()) if(id.notNull() && itr == LLAO::mStandOverrides.end())

View File

@@ -2611,3 +2611,37 @@ BOOL LLLiveLSLEditor::monoChecked() const
} }
return FALSE; return FALSE;
} }
// <edit>
// virtual
BOOL LLLiveLSLEditor::canSaveAs() const
{
return TRUE;
}
// virtual
void LLLiveLSLEditor::saveAs()
{
std::string default_filename("untitled.lsl");
const LLInventoryItem *item = getItem();
if(item)
{
default_filename = LLDir::getScrubbedFileName(item->getName());
}
LLFilePicker& file_picker = LLFilePicker::instance();
if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_LSL, default_filename ) )
{
// User canceled or we failed to acquire save file.
return;
}
// remember the user-approved/edited file name.
std::string filename = file_picker.getFirstFile();
std::string utf8text = mScriptEd->mEditor->getText();
LLFILE* fp = LLFile::fopen(filename, "wb");
fputs(utf8text.c_str(), fp);
fclose(fp);
fp = NULL;
}
// </edit>

View File

@@ -258,6 +258,10 @@ protected:
LLViewerObject* object, LLViewerObject* object,
const LLTransactionID& tid, const LLTransactionID& tid,
BOOL is_running); BOOL is_running);
// <edit>
virtual BOOL canSaveAs() const;
virtual void saveAs();
// </edit>
static void onSearchReplace(void* userdata); static void onSearchReplace(void* userdata);
static void onLoad(void* userdata); static void onLoad(void* userdata);

View File

@@ -3014,8 +3014,57 @@ void LLVOAvatar::idleUpdateWindEffect()
} }
void LLVOAvatar::getClientTag(std::string& client, LLColor4& color, BOOL useComment) void LLVOAvatar::getClientTag(std::string& client, LLColor4& color, BOOL useComment)
{ {
std::string uuid_str = getTE(0)->getID().asString(); //UUID of the head texture std::string uuid_str = getTE(TEX_HEAD_BODYPAINT)->getID().asString(); //UUID of the head texture
if(getTEImage(TEX_HEAD_BODYPAINT)->getID() == IMG_DEFAULT_AVATAR)
{
BOOL res = FALSE;
for(int ti = TEX_UPPER_SHIRT; ti < TEX_NUM_INDICES; ti++)
{
switch((ETextureIndex)ti)
{
case TEX_HEAD_BODYPAINT:
case TEX_UPPER_SHIRT:
case TEX_LOWER_PANTS:
case TEX_EYES_IRIS:
case TEX_HAIR:
case TEX_UPPER_BODYPAINT:
case TEX_LOWER_BODYPAINT:
case TEX_LOWER_SHOES:
case TEX_LOWER_SOCKS:
case TEX_UPPER_JACKET:
case TEX_LOWER_JACKET:
case TEX_UPPER_GLOVES:
case TEX_UPPER_UNDERSHIRT:
case TEX_LOWER_UNDERPANTS:
case TEX_SKIRT:
if(getTEImage(ti)->getID() != IMG_DEFAULT_AVATAR)
res = TRUE;
break;
default:
break;
}
if(res)
break;
}
if(res)
{
//I found that someone failed at clothing protection
if(getTEImage(TEX_EYES_IRIS)->getID().asString() == "4934f1bf-3b1f-cf4f-dbdf-a72550d05bc6"
&& getTEImage(TEX_UPPER_BODYPAINT)->getID().asString() == "4934f1bf-3b1f-cf4f-dbdf-a72550d05bc6"
&& getTEImage(TEX_LOWER_BODYPAINT)->getID().asString() == "4934f1bf-3b1f-cf4f-dbdf-a72550d05bc6")
{
color = LLColor4(1.f, 1.0f, 1.0f);
client = "Unknown viewer";
}
return;
}
else
{
color = LLColor4(0.5f, 0.5f, 0.5f);
client = "Viewer 2.0";
return;
}
}
if(getTEImage(TEX_HEAD_BODYPAINT)->isMissingAsset()) if(getTEImage(TEX_HEAD_BODYPAINT)->isMissingAsset())
{ {
color = LLColor4(1.f, 1.0f, 1.0f); color = LLColor4(1.f, 1.0f, 1.0f);
@@ -3129,12 +3178,6 @@ void LLVOAvatar::getClientTag(std::string& client, LLColor4& color, BOOL useComm
color = LLColor4::purple; color = LLColor4::purple;
client = "Imprudence"; 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") else if (uuid_str == "380ae30b-f2c7-b07c-041e-5688e89a6fc1")
{ {