Merge from default branch

--HG--
branch : product-engine
meow-7.2.2
Vadim Savchuk 2010-08-06 16:05:19 +03:00
commit 4f91a84c40
12 changed files with 164 additions and 51 deletions

View File

@ -1213,7 +1213,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
if (!dp.unpackS32(temp_priority, "base_priority"))
{
llwarns << "can't read priority" << llendl;
llwarns << "can't read animation base_priority" << llendl;
return FALSE;
}
mJointMotionList->mBasePriority = (LLJoint::JointPriority) temp_priority;
@ -1223,6 +1223,11 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
mJointMotionList->mBasePriority = (LLJoint::JointPriority)((int)LLJoint::ADDITIVE_PRIORITY-1);
mJointMotionList->mMaxPriority = mJointMotionList->mBasePriority;
}
else if (mJointMotionList->mBasePriority < LLJoint::USE_MOTION_PRIORITY)
{
llwarns << "bad animation base_priority " << mJointMotionList->mBasePriority << llendl;
return FALSE;
}
//-------------------------------------------------------------------------
// get duration
@ -1233,7 +1238,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
return FALSE;
}
if (mJointMotionList->mDuration > MAX_ANIM_DURATION )
if (mJointMotionList->mDuration > MAX_ANIM_DURATION ||
!llfinite(mJointMotionList->mDuration))
{
llwarns << "invalid animation duration" << llendl;
return FALSE;
@ -1257,13 +1263,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
//-------------------------------------------------------------------------
// get loop
//-------------------------------------------------------------------------
if (!dp.unpackF32(mJointMotionList->mLoopInPoint, "loop_in_point"))
if (!dp.unpackF32(mJointMotionList->mLoopInPoint, "loop_in_point") ||
!llfinite(mJointMotionList->mLoopInPoint))
{
llwarns << "can't read loop point" << llendl;
return FALSE;
}
if (!dp.unpackF32(mJointMotionList->mLoopOutPoint, "loop_out_point"))
if (!dp.unpackF32(mJointMotionList->mLoopOutPoint, "loop_out_point") ||
!llfinite(mJointMotionList->mLoopOutPoint))
{
llwarns << "can't read loop point" << llendl;
return FALSE;
@ -1278,13 +1286,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
//-------------------------------------------------------------------------
// get easeIn and easeOut
//-------------------------------------------------------------------------
if (!dp.unpackF32(mJointMotionList->mEaseInDuration, "ease_in_duration"))
if (!dp.unpackF32(mJointMotionList->mEaseInDuration, "ease_in_duration") ||
!llfinite(mJointMotionList->mEaseInDuration))
{
llwarns << "can't read easeIn" << llendl;
return FALSE;
}
if (!dp.unpackF32(mJointMotionList->mEaseOutDuration, "ease_out_duration"))
if (!dp.unpackF32(mJointMotionList->mEaseOutDuration, "ease_out_duration") ||
!llfinite(mJointMotionList->mEaseOutDuration))
{
llwarns << "can't read easeOut" << llendl;
return FALSE;
@ -1374,7 +1384,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
LLPointer<LLJointState> joint_state = new LLJointState;
mJointStates.push_back(joint_state);
joint_state->setJoint( joint );
joint_state->setJoint( joint ); // note: can accept NULL
joint_state->setUsage( 0 );
//---------------------------------------------------------------------
@ -1386,10 +1396,16 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
llwarns << "can't read joint priority." << llendl;
return FALSE;
}
if (joint_priority < LLJoint::USE_MOTION_PRIORITY)
{
llwarns << "joint priority unknown - too low." << llendl;
return FALSE;
}
joint_motion->mPriority = (LLJoint::JointPriority)joint_priority;
if (joint_priority != LLJoint::USE_MOTION_PRIORITY &&
joint_priority > mJointMotionList->mMaxPriority)
joint_priority > mJointMotionList->mMaxPriority)
{
mJointMotionList->mMaxPriority = (LLJoint::JointPriority)joint_priority;
}
@ -1399,7 +1415,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
//---------------------------------------------------------------------
// scan rotation curve header
//---------------------------------------------------------------------
if (!dp.unpackS32(joint_motion->mRotationCurve.mNumKeys, "num_rot_keys"))
if (!dp.unpackS32(joint_motion->mRotationCurve.mNumKeys, "num_rot_keys") || joint_motion->mRotationCurve.mNumKeys < 0)
{
llwarns << "can't read number of rotation keys" << llendl;
return FALSE;
@ -1423,7 +1439,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
if (old_version)
{
if (!dp.unpackF32(time, "time"))
if (!dp.unpackF32(time, "time") ||
!llfinite(time))
{
llwarns << "can't read rotation key (" << k << ")" << llendl;
return FALSE;
@ -1456,7 +1473,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
if (old_version)
{
success = dp.unpackVector3(rot_angles, "rot_angles");
success = dp.unpackVector3(rot_angles, "rot_angles") && rot_angles.isFinite();
LLQuaternion::Order ro = StringToOrder("ZYX");
rot_key.mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro);
@ -1492,7 +1509,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
//---------------------------------------------------------------------
// scan position curve header
//---------------------------------------------------------------------
if (!dp.unpackS32(joint_motion->mPositionCurve.mNumKeys, "num_pos_keys"))
if (!dp.unpackS32(joint_motion->mPositionCurve.mNumKeys, "num_pos_keys") || joint_motion->mPositionCurve.mNumKeys < 0)
{
llwarns << "can't read number of position keys" << llendl;
return FALSE;
@ -1516,7 +1533,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
if (old_version)
{
if (!dp.unpackF32(pos_key.mTime, "time"))
if (!dp.unpackF32(pos_key.mTime, "time") ||
!llfinite(pos_key.mTime))
{
llwarns << "can't read position key (" << k << ")" << llendl;
return FALSE;
@ -1585,9 +1603,9 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
return FALSE;
}
if (num_constraints > MAX_CONSTRAINTS)
if (num_constraints > MAX_CONSTRAINTS || num_constraints < 0)
{
llwarns << "Too many constraints... ignoring" << llendl;
llwarns << "Bad number of constraints... ignoring: " << num_constraints << llendl;
}
else
{
@ -1632,7 +1650,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
constraintp->mConstraintType = (EConstraintType)byte;
const S32 BIN_DATA_LENGTH = 16;
U8 bin_data[BIN_DATA_LENGTH];
U8 bin_data[BIN_DATA_LENGTH+1];
if (!dp.unpackBinaryDataFixed(bin_data, BIN_DATA_LENGTH, "source_volume"))
{
llwarns << "can't read source volume name" << llendl;
@ -1640,7 +1658,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
return FALSE;
}
bin_data[BIN_DATA_LENGTH-1] = 0; // Ensure null termination
bin_data[BIN_DATA_LENGTH] = 0; // Ensure null termination
str = (char*)bin_data;
constraintp->mSourceConstraintVolume = mCharacter->getCollisionVolumeID(str);
@ -1665,7 +1683,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
return FALSE;
}
bin_data[BIN_DATA_LENGTH-1] = 0; // Ensure null termination
bin_data[BIN_DATA_LENGTH] = 0; // Ensure null termination
str = (char*)bin_data;
if (str == "GROUND")
{
@ -1712,28 +1730,28 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
// constraintp->mTargetConstraintDir *= constraintp->mSourceConstraintOffset.magVec();
}
if (!dp.unpackF32(constraintp->mEaseInStartTime, "ease_in_start"))
if (!dp.unpackF32(constraintp->mEaseInStartTime, "ease_in_start") || !llfinite(constraintp->mEaseInStartTime))
{
llwarns << "can't read constraint ease in start time" << llendl;
delete constraintp;
return FALSE;
}
if (!dp.unpackF32(constraintp->mEaseInStopTime, "ease_in_stop"))
if (!dp.unpackF32(constraintp->mEaseInStopTime, "ease_in_stop") || !llfinite(constraintp->mEaseInStopTime))
{
llwarns << "can't read constraint ease in stop time" << llendl;
delete constraintp;
return FALSE;
}
if (!dp.unpackF32(constraintp->mEaseOutStartTime, "ease_out_start"))
if (!dp.unpackF32(constraintp->mEaseOutStartTime, "ease_out_start") || !llfinite(constraintp->mEaseOutStartTime))
{
llwarns << "can't read constraint ease out start time" << llendl;
delete constraintp;
return FALSE;
}
if (!dp.unpackF32(constraintp->mEaseOutStopTime, "ease_out_stop"))
if (!dp.unpackF32(constraintp->mEaseOutStopTime, "ease_out_stop") || !llfinite(constraintp->mEaseOutStopTime))
{
llwarns << "can't read constraint ease out stop time" << llendl;
delete constraintp;
@ -1742,7 +1760,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
mJointMotionList->mConstraints.push_front(constraintp);
constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1];
constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1]; // note: mChainLength is size-limited - comes from a byte
LLJoint* joint = mCharacter->findCollisionVolume(constraintp->mSourceConstraintVolume);
// get joint to which this collision volume is attached

View File

@ -1553,6 +1553,7 @@ void LLImageFormatted::appendData(U8 *data, S32 size)
S32 newsize = cursize + size;
reallocateData(newsize);
memcpy(getData() + cursize, data, size);
delete[] data;
}
}
}

View File

@ -42,7 +42,12 @@
<text name="library_label">
Libreria:
</text>
<scroll_list name="library_list"/>
<scroll_list name="library_list">
<scroll_list.rows name="action_animation" value="Animazione"/>
<scroll_list.rows name="action_sound" value="Suono"/>
<scroll_list.rows name="action_chat" value="Chat"/>
<scroll_list.rows name="action_wait" value="Attendi"/>
</scroll_list>
<button label="Aggiungi &gt;&gt;" name="add_btn"/>
<text name="steps_label">
Fasi:

View File

@ -19,12 +19,12 @@
<text name="land_sale_label">
Vendita terreno
</text>
<text name="by_owner_label">
da parte del proprietario
</text>
<text name="auction_label">
asta di terreni
</text>
<text name="by_owner_label">
da parte del proprietario
</text>
<button name="Go Home" tool_tip="Teleport a casa"/>
<text name="Home_label">
Home
@ -35,7 +35,7 @@
<text name="pg_label">
Generale
</text>
<check_box name="events_mature_chk"/>
<check_box initial_value="true" name="events_mature_chk"/>
<text name="events_mature_label">
Moderato
</text>
@ -58,6 +58,9 @@
<search_editor label="Regioni secondo il nome" name="location" tool_tip="Digita il nome di una regione"/>
<button label="Trova" name="DoSearch" tool_tip="Cerca la regione"/>
<button name="Clear" tool_tip="Elimina le linee di monitoraggio e reimposta la mappa"/>
<text name="events_label">
Luogo:
</text>
<button label="Teleport" name="Teleport" tool_tip="Teleport al luogo selezionato"/>
<button label="Copia SLurl" name="copy_slurl" tool_tip="Copia la posizione attuale come un SLurl da usare nel Web."/>
<button label="Mostra la selezione" name="Show Destination" tool_tip="Centra la mappa sul luogo selezionato"/>

View File

@ -94,6 +94,7 @@
<menu_item_call label="Imposta script come non in esecuzione" name="Set Scripts to Not Running"/>
</menu>
<menu label="Opzioni" name="Options">
<menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
<menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/>
<menu_item_check label="Seleziona solo i miei oggetti" name="Select Only My Objects"/>
<menu_item_check label="Seleziona solo gli oggetti spostabili" name="Select Only Movable Objects"/>
@ -111,7 +112,6 @@
<menu_item_call label="Suono ([COST] L$)..." name="Upload Sound"/>
<menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/>
<menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
</menu>
</menu>
<menu label="Aiuto" name="Help">

View File

@ -2749,7 +2749,7 @@ Avatar &apos;[NAME]&apos; è partito completamente caricato.
</notification>
<notification name="AvatarRezSelfBakeNotification">
( in esistenza da [EXISTENCE] secondi )
Hai caricato una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
Effettuata l&apos;azione: [ACTION] di una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
</notification>
<notification name="ConfirmLeaveCall">
Sei sicuro di volere uscire dalla chiamata?
@ -2787,4 +2787,7 @@ Se continui ad avere problemi, visita la pagina [SUPPORT_SITE].
Se sei proprietario di un appezzamento di terreno, puoi definirlo come la tua posizione iniziale.
In alternativa, puoi guardare sulla mappa e trovare luoghi segnalati come &quot;Infohub&quot;.
</global>
<global name="You died and have been teleported to your home location">
Sei deceduto e sei stato teleportato a casa tua.
</global>
</notifications>

View File

@ -19,7 +19,7 @@ Massimo 200 per gruppo al giorno
<text name="notice_list_none_found">
Nessuno trovato
</text>
<button label="Crea un nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/>
<button label="Nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/>
<button label="Aggiorna" label_selected="Aggiorna l&apos;elenco" name="refresh_notices" tool_tip="Aggiorna la lista degli avvisi"/>
<panel label="Crea una nuova notice" name="panel_create_new_notice">
<text name="lbl">

View File

@ -13,6 +13,9 @@
Seleziona più membri tenendo premuto il tasto Ctrl e
cliccando sui loro nomi.
</panel.string>
<panel.string name="donation_area">
[AREA] m²
</panel.string>
<filter_editor label="Filtra Membri" name="filter_input"/>
<name_list name="member_list">
<name_list.columns label="Socio" name="name"/>
@ -66,21 +69,15 @@ in questo gruppo. C&apos;è una vasta gamma di abilità.
<text name="static">
Nome del ruolo
</text>
<line_editor name="role_name">
Addetti
</line_editor>
<line_editor name="role_name"/>
<text name="static3">
Titolo del ruolo
</text>
<line_editor name="role_title">
(attendi)
</line_editor>
<line_editor name="role_title"/>
<text name="static2">
Descrizione
</text>
<text_editor name="role_description">
(attendi)
</text_editor>
<text_editor name="role_description"/>
<text name="static4">
Ruoli assegnati
</text>
@ -91,9 +88,6 @@ in questo gruppo. C&apos;è una vasta gamma di abilità.
<scroll_list name="role_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità."/>
</panel>
<panel name="actions_footer">
<text name="static">
Descrizione abilità
</text>
<text_editor name="action_description">
Questa abilità è &apos;Espelli i membri dal gruppo&apos;. Solo un Capogruppo puo espellere un&apos;altro Capogruppo.
</text_editor>

View File

@ -11,8 +11,8 @@
<check_box label="Abilitato" name="enable_media"/>
<slider label="Chat vocale" name="Voice Volume"/>
<check_box label="Abilitato" name="enable_voice_check"/>
<check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica"/>
<check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni"/>
<check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="true"/>
<check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="true"/>
<text name="voice_chat_settings">
Impostazioni Chat vocale
</text>
@ -28,6 +28,12 @@
<panel.string name="default_text">
Predefinito
</panel.string>
<panel.string name="default system device">
Dispositivo di sistema predefinito
</panel.string>
<panel.string name="no device">
Nessun dispositivo
</panel.string>
<text name="Input">
Input
</text>

View File

@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Teleport History">
<accordion name="history_accordion">
<no_matched_tabs_text name="no_matched_teleports_msg" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/places/[SEARCH_TERM] Cerca]."/>
<no_visible_tabs_text name="no_teleports_msg" value="La cronologia dei teleport è vuota. Prova [secondlife:///app/search/places/ Cerca]."/>
<accordion_tab name="today" title="Oggi"/>
<accordion_tab name="yesterday" title="Ieri"/>
<accordion_tab name="2_days_ago" title="2 giorni fa"/>
5
<accordion_tab name="3_days_ago" title="3 giorni fa"/>
<accordion_tab name="4_days_ago" title="4 giorni fa"/>
<accordion_tab name="5_days_ago" title="5 giorni fa"/>

View File

@ -23,8 +23,7 @@
</panel.string>
<text name="title" value="Profilo articolo"/>
<text name="origin" value="(Inventario)"/>
<panel label=""
name="item_profile">
<panel label="" name="item_profile">
<text name="LabelItemNameTitle">
Nome:
</text>

View File

@ -651,6 +651,9 @@
<string name="worldmap_offline">
Offline
</string>
<string name="worldmap_item_tooltip_format">
L$ [PRICE] - [AREA] m²
</string>
<string name="worldmap_results_none_found">
Nessun risultato.
</string>
@ -1040,6 +1043,7 @@
<string name="AnimFlagStop" value="Ferma l&apos;animazione :"/>
<string name="AnimFlagStart" value="Inizia l&apos;animazione :"/>
<string name="Wave" value="Saluta con la mano"/>
<string name="GestureActionNone" value="Nessuna"/>
<string name="HelloAvatar" value="Ciao, avatar!"/>
<string name="ViewAllGestures" value="Visualizza tutto &gt;&gt;"/>
<string name="GetMoreGestures" value="Altre &gt;&gt;"/>
@ -1122,12 +1126,12 @@
<string name="InvFolder Favorite">
Preferiti
</string>
<string name="InvFolder favorite">
Preferiti
</string>
<string name="InvFolder Current Outfit">
Abbigliamento attuale
</string>
<string name="InvFolder Initial Outfits">
Vestiario iniziale
</string>
<string name="InvFolder My Outfits">
Il mio vestiario
</string>
@ -1447,6 +1451,7 @@
<string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal"/>
<string name="NextStipendDay" value="Il prossimo giorno di stipendio è"/>
<string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/>
<string name="GroupColumn" value="Gruppo"/>
<string name="Balance">
Saldo
</string>
@ -1660,6 +1665,12 @@
<string name="BusyModeResponseDefault">
Il residente al quale hai inviato un messaggio è in modalità &apos;occupato&apos;, ovvero ha chiesto di non essere disturbato. Il tuo messaggio comparirà nel suo pannello IM, dove potrà essere letto in un secondo momento.
</string>
<string name="NoOutfits">
Non hai ancora vestiario da indossare. Prova [secondlife:///app/search/all Cerca].
</string>
<string name="NoOutfitsTabsMatched">
Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/all/[SEARCH_TERM] Cerca].
</string>
<string name="MuteByName">
(In base al nome)
</string>
@ -3580,6 +3591,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="group_role_owners">
Proprietari
</string>
<string name="group_member_status_online">
Online
</string>
<string name="uploading_abuse_report">
Caricamento in corso...
@ -3633,9 +3647,15 @@ Segnala abuso
<string name="Invalid Wearable">
Capo da indossare non valido
</string>
<string name="New Gesture">
Nuova gesture
</string>
<string name="New Script">
Nuovo script
</string>
<string name="New Note">
Nuovo appunto
</string>
<string name="New Folder">
Nuova cartella
</string>
@ -3693,6 +3713,15 @@ Segnala abuso
<string name="Male - Wow">
Maschio - Accipicchia
</string>
<string name="Female - Chuckle">
Femmina - Risatina
</string>
<string name="Female - Cry">
Femmina - Pianto
</string>
<string name="Female - Embarrassed">
Femmina - Imbarazzata
</string>
<string name="Female - Excuse me">
Femmina - Chiedere scusa
</string>
@ -3711,9 +3740,21 @@ Segnala abuso
<string name="Female - Hey">
Femmina - Ehi
</string>
<string name="Female - Hey baby">
Femmina - Ehi tu
</string>
<string name="Female - Laugh">
Femmina - Ridere
</string>
<string name="Female - Looking good">
Femmina - Sei in forma
</string>
<string name="Female - Over here">
Femmina - Per di qua
</string>
<string name="Female - Please">
Femmina - Per cortesia
</string>
<string name="Female - Repulsed">
Femmina - Disgustata
</string>
@ -3763,4 +3804,46 @@ Segnala abuso
<string name="dateTimePM">
pomeridiane
</string>
<string name="LocalEstimateUSD">
US$ [AMOUNT]
</string>
<string name="Membership">
Abbonamento
</string>
<string name="Roles">
Ruoli
</string>
<string name="Group Identity">
Identità gruppo
</string>
<string name="Parcel Management">
Gestione lotto
</string>
<string name="Parcel Identity">
Identità lotto
</string>
<string name="Parcel Settings">
Impostazioni lotto
</string>
<string name="Parcel Powers">
Poteri lotto
</string>
<string name="Parcel Access">
Accesso al lotto
</string>
<string name="Parcel Content">
Contenuto lotto
</string>
<string name="Object Management">
Gestione oggetti
</string>
<string name="Accounting">
Contabilità
</string>
<string name="Notices">
Avvisi
</string>
<string name="Chat">
Chat
</string>
</strings>