Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
fb1c3d1a8c
|
|
@ -306,20 +306,11 @@ void FSFloaterPerformance::draw()
|
|||
pct_swap_time = llclamp(pct_swap_time,0.,100.);
|
||||
pct_scene_render_time = llclamp(pct_scene_render_time,0.,100.);
|
||||
|
||||
args["AV_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_avatar_time));
|
||||
args["HUDS_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_huds_time));
|
||||
args["UI_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_ui_time));
|
||||
args["IDLE_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_idle_time));
|
||||
args["SWAP_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_swap_time));
|
||||
args["SCENERY_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_scene_render_time));
|
||||
// update the top line status - also check whether we're sleeping/limiting
|
||||
|
||||
args["TOT_FRAME_TIME"] = llformat("%02u", (U32)llround(tot_frame_time_ns/1000000));
|
||||
args["FPSCAP"] = llformat("%02u", (U32)fpsCap);
|
||||
args["FPSTARGET"] = llformat("%02u", (U32)targetFPS);
|
||||
|
||||
getChild<LLTextBox>("av_frame_stats")->setText(getString("av_frame_pct", args));
|
||||
getChild<LLTextBox>("huds_frame_stats")->setText(getString("huds_frame_pct", args));
|
||||
getChild<LLTextBox>("frame_breakdown")->setText(getString("frame_stats", args));
|
||||
|
||||
auto textbox = getChild<LLTextBox>("fps_warning");
|
||||
if (tot_sleep_time_raw > 0) // We are sleeping because view is not focussed
|
||||
{
|
||||
|
|
@ -345,7 +336,30 @@ void FSFloaterPerformance::draw()
|
|||
{
|
||||
textbox->setVisible(false);
|
||||
}
|
||||
// pre-fill the args
|
||||
if(!unreliable)
|
||||
{
|
||||
args["AV_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_avatar_time));
|
||||
args["HUDS_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_huds_time));
|
||||
args["UI_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_ui_time));
|
||||
args["IDLE_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_idle_time));
|
||||
args["SWAP_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_swap_time));
|
||||
args["SCENERY_FRAME_PCT"] = llformat("%02u", (U32)llround(pct_scene_render_time));
|
||||
}
|
||||
else
|
||||
{
|
||||
args["AV_FRAME_PCT"] = "--";
|
||||
args["HUDS_FRAME_PCT"] = "--";
|
||||
args["UI_FRAME_PCT"] = "--";
|
||||
args["IDLE_FRAME_PCT"] = "--";
|
||||
args["SWAP_FRAME_PCT"] = "--";
|
||||
args["SCENERY_FRAME_PCT"] = "--";
|
||||
}
|
||||
|
||||
getChild<LLTextBox>("av_frame_stats")->setText(getString("av_frame_pct", args));
|
||||
getChild<LLTextBox>("huds_frame_stats")->setText(getString("huds_frame_pct", args));
|
||||
getChild<LLTextBox>("frame_breakdown")->setText(getString("frame_stats", args));
|
||||
|
||||
auto button = getChild<LLButton>("AutoTuneFPS");
|
||||
if((bool)button->getToggleState() != FSPerfStats::tunables.userAutoTuneEnabled)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -186,39 +186,39 @@ namespace FSPerfStats
|
|||
sceneStats[static_cast<size_t>(statEntry)] = avg + (val / SMOOTHING_PERIODS) - (avg / SMOOTHING_PERIODS);
|
||||
// LL_INFOS("scenestats") << "Scenestat: " << static_cast<size_t>(statEntry) << " before=" << avg << " new=" << val << " newavg=" << statsDoubleBuffer[writeBuffer][static_cast<size_t>(ObjType_t::OT_GENERAL)][LLUUID::null][static_cast<size_t>(statEntry)] << LL_ENDL;
|
||||
}
|
||||
|
||||
auto& statsMap = statsDoubleBuffer[writeBuffer][static_cast<size_t>(ObjType_t::OT_ATTACHMENT)];
|
||||
for(auto& stat_entry : statsMap)
|
||||
{
|
||||
auto val = stat_entry.second[static_cast<size_t>(ST::RENDER_COMBINED)];
|
||||
if(val > SMOOTHING_PERIODS){
|
||||
auto avg = statsDoubleBuffer[writeBuffer ^ 1][static_cast<size_t>(ObjType_t::OT_ATTACHMENT)][stat_entry.first][static_cast<size_t>(ST::RENDER_COMBINED)];
|
||||
stat_entry.second[static_cast<size_t>(ST::RENDER_COMBINED)] = avg + (val / SMOOTHING_PERIODS) - (avg / SMOOTHING_PERIODS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
auto& statsMapAv = statsDoubleBuffer[writeBuffer][static_cast<size_t>(ObjType_t::OT_AVATAR)];
|
||||
for(auto& stat_entry : statsMapAv)
|
||||
{
|
||||
for(auto& stat : avatarStatsToAvg)
|
||||
{
|
||||
auto val = stat_entry.second[static_cast<size_t>(stat)];
|
||||
if(val > SMOOTHING_PERIODS)
|
||||
{
|
||||
auto avg = statsDoubleBuffer[writeBuffer ^ 1][static_cast<size_t>(ObjType_t::OT_AVATAR)][stat_entry.first][static_cast<size_t>(stat)];
|
||||
stat_entry.second[static_cast<size_t>(stat)] = avg + (val / SMOOTHING_PERIODS) - (avg / SMOOTHING_PERIODS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// swap the buffers
|
||||
if(enabled())
|
||||
{
|
||||
std::lock_guard<std::mutex> lock{bufferToggleLock};
|
||||
writeBuffer ^= 1;
|
||||
}; // note we are relying on atomic updates here. The risk is low and would cause minor errors in the stats display.
|
||||
}
|
||||
// Allow attachment times etc to update even when FPS limited or sleeping.
|
||||
auto& statsMap = statsDoubleBuffer[writeBuffer][static_cast<size_t>(ObjType_t::OT_ATTACHMENT)];
|
||||
for(auto& stat_entry : statsMap)
|
||||
{
|
||||
auto val = stat_entry.second[static_cast<size_t>(ST::RENDER_COMBINED)];
|
||||
if(val > SMOOTHING_PERIODS){
|
||||
auto avg = statsDoubleBuffer[writeBuffer ^ 1][static_cast<size_t>(ObjType_t::OT_ATTACHMENT)][stat_entry.first][static_cast<size_t>(ST::RENDER_COMBINED)];
|
||||
stat_entry.second[static_cast<size_t>(ST::RENDER_COMBINED)] = avg + (val / SMOOTHING_PERIODS) - (avg / SMOOTHING_PERIODS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
auto& statsMapAv = statsDoubleBuffer[writeBuffer][static_cast<size_t>(ObjType_t::OT_AVATAR)];
|
||||
for(auto& stat_entry : statsMapAv)
|
||||
{
|
||||
for(auto& stat : avatarStatsToAvg)
|
||||
{
|
||||
auto val = stat_entry.second[static_cast<size_t>(stat)];
|
||||
if(val > SMOOTHING_PERIODS)
|
||||
{
|
||||
auto avg = statsDoubleBuffer[writeBuffer ^ 1][static_cast<size_t>(ObjType_t::OT_AVATAR)][stat_entry.first][static_cast<size_t>(stat)];
|
||||
stat_entry.second[static_cast<size_t>(stat)] = avg + (val / SMOOTHING_PERIODS) - (avg / SMOOTHING_PERIODS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// swap the buffers
|
||||
if(enabled())
|
||||
{
|
||||
std::lock_guard<std::mutex> lock{bufferToggleLock};
|
||||
writeBuffer ^= 1;
|
||||
}; // note we are relying on atomic updates here. The risk is low and would cause minor errors in the stats display.
|
||||
|
||||
// clean the write maps in all cases.
|
||||
auto& statsTypeMatrix = statsDoubleBuffer[writeBuffer];
|
||||
|
|
|
|||
|
|
@ -2925,10 +2925,46 @@ void LLInventoryModel::buildParentChildMap()
|
|||
{
|
||||
// Fatal inventory error. Will not be able to engage in many inventory operations.
|
||||
// This should be followed by an error dialog leading to logout.
|
||||
// <FS:Beq> FIRE-31634 [OPENSIM] Inventory Validation fails on old and grandfathered inventories
|
||||
// We will report the errors but allow the user to continue.
|
||||
#ifdef OPENSIM
|
||||
if (LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
LLSD args;
|
||||
LLSD grid_info;
|
||||
LLGridManager::getInstance()->getGridData(grid_info);
|
||||
if (grid_info.has("help"))
|
||||
{
|
||||
args["HELP"] = grid_info["help"].asString();
|
||||
}
|
||||
else
|
||||
{
|
||||
args["HELP"] = LLTrans::getString("OpenSimInventoryValidationErrorGenericHelp");
|
||||
}
|
||||
args["ERRORS"] = validation_info->mLog.str();
|
||||
LL_WARNS("Inventory") << "Potentially fatal errors were found during validation:"
|
||||
<< "You may not be able to do normal inventory operations in this session."
|
||||
<< "Contact your Grid Operator's support team and provide them with your logs."
|
||||
<< LL_ENDL;
|
||||
LL_WARNS("Inventory") << "### Start of errors ###" << LL_ENDL;
|
||||
LL_WARNS("Inventory") << validation_info->mLog.str() << LL_ENDL;
|
||||
LL_WARNS("Inventory") << "### End of errors ###" << LL_ENDL;
|
||||
LLNotificationsUtil::add("InventoryValidationFailed", args);
|
||||
mIsAgentInvUsable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif // OPENSIM
|
||||
// </FS:Beq>
|
||||
LL_WARNS("Inventory") << "Fatal errors were found in validate(): unable to initialize inventory! "
|
||||
<< "Will not be able to do normal inventory operations in this session."
|
||||
<< LL_ENDL;
|
||||
mIsAgentInvUsable = false;
|
||||
// <FS:Beq> FIRE-31634 [OPENSIM] Inventory Validation fails on old and grandfathered inventories
|
||||
#ifdef OPENSIM
|
||||
}
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -4365,7 +4401,13 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
|
|||
if (getLibraryRootFolderID().isNull())
|
||||
{
|
||||
// Probably shouldn't be a fatality, inventory can function without a library
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: no library root folder id" << LL_ENDL;
|
||||
// <FS:Beq> FIRE-31634 [OPENSIM] Better inventory validation logging
|
||||
// LL_WARNS("Inventory") << "Fatal inventory corruption: no library root folder id" << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "No library root folder id";
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: " << out.str() << LL_ENDL;
|
||||
validation_info->mLog << out.str() << std::endl;
|
||||
// </FS:Beq>
|
||||
validation_info->mFatalNoLibraryRootFolder = true;
|
||||
fatal_errs++;
|
||||
}
|
||||
|
|
@ -4738,11 +4780,19 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
|
|||
{
|
||||
if (count_under_root==0)
|
||||
{
|
||||
LL_WARNS("Inventory") << "Expected system folder type " << ft << " was not found under root" << LL_ENDL;
|
||||
LL_WARNS("Inventory") << "Expected system folder type " << LLFolderType::lookup(folder_type) << "(" << ft << ") was not found under root" << LL_ENDL; // <FS:Beq/> //<FS:Beq> FIRE-31634 [OPENSIM] better logging for inventory issues
|
||||
// Need to create, if allowed.
|
||||
if (is_automatic)
|
||||
{
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: cannot create system folder of type " << ft << LL_ENDL;
|
||||
|
||||
// <FS:Beq> FIRE-31634 [OPENSIM] Better inventory validation logging
|
||||
// LL_WARNS("Inventory") << "Fatal inventory corruption: cannot create system folder of type " << LLFolderType::lookup(folder_type) << "(" << ft << ")" << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "Cannot create system folder of type " << LLFolderType::lookup(folder_type) << "(" << ft << ")";
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: " << out.str() << LL_ENDL;
|
||||
validation_info->mLog << out.str() << std::endl;
|
||||
// </FS:Beq>
|
||||
|
||||
fatal_errs++;
|
||||
validation_info->mMissingRequiredSystemFolders.insert(folder_type);
|
||||
}
|
||||
|
|
@ -4754,16 +4804,25 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
|
|||
}
|
||||
else if (count_under_root > 1)
|
||||
{
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: system folder type has excess copies under root, type " << ft << " count " << count_under_root << LL_ENDL;
|
||||
// LL_WARNS("Inventory") << "Fatal inventory corruption: system folder type has excess copies under root, type " << ft << " count " << count_under_root << LL_ENDL; // <FS:Beq/> FIRE-31634 [OPENSIM] Better inventory validation logging
|
||||
validation_info->mDuplicateRequiredSystemFolders.insert(folder_type);
|
||||
if (!is_automatic && folder_type != LLFolderType::FT_SETTINGS)
|
||||
{
|
||||
// <FS:Beq> FIRE-31634 [OPENSIM] Better inventory validation logging
|
||||
// LL_WARNS("Inventory") << "Fatal inventory corruption: system folder type has excess copies under root, type " << LLFolderType::lookup(folder_type) << "(" << ft << ") count " << count_under_root << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "System folder type has excess copies under root, type " << LLFolderType::lookup(folder_type) << "(" << ft << ") count " << count_under_root;
|
||||
LL_WARNS("Inventory") << "Fatal inventory corruption: " << out.str() << LL_ENDL;
|
||||
validation_info->mLog << out.str() << std::endl;
|
||||
// </FS:Beq>
|
||||
|
||||
// It is a fatal problem or can lead to fatal problems for COF,
|
||||
// outfits, trash and other non-automatic folders.
|
||||
fatal_errs++;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Inventory") << "Non-Fatal inventory corruption: system folder type has excess copies under root, type " << LLFolderType::lookup(folder_type) << "(" << ft << ") count " << count_under_root << LL_ENDL; // <FS:Beq/> FIRE-31634 [OPENSIM] Better inventory validation logging
|
||||
// For automatic folders it's not a fatal issue and shouldn't
|
||||
// break inventory or other functionality further
|
||||
// Exception: FT_SETTINGS is not automatic, but only deserves a warning.
|
||||
|
|
@ -4772,7 +4831,7 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
|
|||
}
|
||||
if (count_elsewhere > 0)
|
||||
{
|
||||
LL_WARNS("Inventory") << "Found " << count_elsewhere << " extra folders of type " << ft << " outside of root" << LL_ENDL;
|
||||
LL_WARNS("Inventory") << "Found " << count_elsewhere << " extra folders of type " << LLFolderType::lookup(folder_type) << "(" << ft << ") outside of root" << LL_ENDL; //<FS:Beq/> FIRE-31634 [OPENSIM] Better inventory validation
|
||||
warnings++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ public:
|
|||
bool mFatalQADebugMode;
|
||||
std::set<LLFolderType::EType> mMissingRequiredSystemFolders;
|
||||
std::set<LLFolderType::EType> mDuplicateRequiredSystemFolders;
|
||||
std::ostringstream mLog; // <FS:Beq/> Extra validation logs for OpenSim.
|
||||
};
|
||||
std::ostream& operator<<(std::ostream& s, const LLInventoryValidationInfo& v);
|
||||
|
||||
|
|
|
|||
|
|
@ -3182,6 +3182,7 @@ BOOL LLPanelGroupBanListSubTab::postBuildSubTab(LLView* root)
|
|||
|
||||
mBanList->setCommitOnSelectionChange(TRUE);
|
||||
mBanList->setCommitCallback(onBanEntrySelect, this);
|
||||
mBanList->setFilterColumn(0); // <FS:Zi> FIRE-31653: add banlist filter editor
|
||||
|
||||
mCreateBanButton->setClickedCallback(onCreateBanEntry, this);
|
||||
mCreateBanButton->setEnabled(FALSE);
|
||||
|
|
@ -3260,6 +3261,13 @@ void LLPanelGroupBanListSubTab::onBanEntrySelect(LLUICtrl* ctrl, void* user_data
|
|||
|
||||
void LLPanelGroupBanListSubTab::handleBanEntrySelect()
|
||||
{
|
||||
// <FS:Zi> FIRE-31653: disable remove ban button when no entry is selected
|
||||
if (!mBanList->getNumSelected())
|
||||
{
|
||||
mDeleteBanButton->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
// </FS:Zi>
|
||||
if (gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
|
||||
{
|
||||
mDeleteBanButton->setEnabled(TRUE);
|
||||
|
|
@ -3434,3 +3442,13 @@ void LLPanelGroupBanListSubTab::setGroupID(const LLUUID& id)
|
|||
setFooterEnabled(FALSE);
|
||||
LLPanelGroupSubTab::setGroupID(id);
|
||||
}
|
||||
|
||||
// <FS:Zi> FIRE-31653: add banlist filter editor
|
||||
void LLPanelGroupBanListSubTab::onFilterChanged()
|
||||
{
|
||||
mBanList->setFilterString(mSearchFilter);
|
||||
|
||||
// disable remove ban button as a change of filter will deselect all entries
|
||||
mDeleteBanButton->setEnabled(false);
|
||||
}
|
||||
// </FS:Zi> add banlist filter editor
|
||||
|
|
|
|||
|
|
@ -357,6 +357,7 @@ public:
|
|||
|
||||
virtual void activate();
|
||||
virtual void update(LLGroupChange gc);
|
||||
virtual void onFilterChanged(); // <FS:Zi> FIRE-31653: add banlist filter editor
|
||||
virtual void draw();
|
||||
|
||||
static void onBanEntrySelect(LLUICtrl* ctrl, void* user_data);
|
||||
|
|
|
|||
|
|
@ -4725,6 +4725,14 @@ Wählen Sie eine kleinere Landfläche aus.
|
|||
<ignore name="ignore" text="Bestätigen, bevor eine Liste meiner aktuell aktiven RLV-Restriktionen an jemanden übertragen werden."/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="InventoryValidationFailed" label="Inventar-Validierungsfehler">
|
||||
Eine Beschädigung Ihrers Inventars wurde erkannt.
|
||||
Bitte kontaktieren Sie [HELP] mit der folgenden Liste an Fehlern.
|
||||
Diese können anhand von http://opensimulator.org/wiki/inventory die erkannten Fehler korrigieren.
|
||||
|
||||
[ERRORS]
|
||||
<usetemplate ignoretext="Warnen, wenn Fehler bei der Inventar-Validierung festgestellt wurden" name="okignore" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="PreferenceChatClearLog">
|
||||
Dadurch werden die Protokolle vorheriger Unterhaltungen und alle Backups dieser Datei gelöscht.
|
||||
<usetemplate ignoretext="Löschen des Protokolls vorheriger Unterhaltungen bestätigen." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
|
|||
<panel.string name="ban_count_template">
|
||||
Bann-Anzahl: [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
<filter_editor label="Verbannte Einwohner filtern" name="filter_input"/>
|
||||
<name_list name="ban_list">
|
||||
<name_list.columns label="Einwohner" name="name"/>
|
||||
<name_list.columns label="Bann-Datum" name="ban_date"/>
|
||||
|
|
|
|||
|
|
@ -7200,4 +7200,7 @@ Ihre aktuelle Position: [AVATAR_POS]
|
|||
<string name="FSObjectInventoryElements">
|
||||
[NUM_ELEMENTS] Elemente
|
||||
</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">
|
||||
das Support-Team Ihres Grid-Betreibers
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -12801,6 +12801,25 @@ Changes won't take effect until after you restart [APP_NAME].
|
|||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="InventoryValidationFailed"
|
||||
label="Inventory Validation Errors"
|
||||
log_to_im="true"
|
||||
log_to_chat="false"
|
||||
type="alertmodal">
|
||||
<usetemplate
|
||||
ignoretext="Warn if inventory validation errors have been detected."
|
||||
name="okignore"
|
||||
yestext="OK"/>
|
||||
Corruption has been found in your inventory.
|
||||
Please contact [HELP] with the following list of issues.
|
||||
They can use http://opensimulator.org/wiki/inventory to fix the issues.
|
||||
|
||||
[ERRORS]
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="PreferenceChatClearLog"
|
||||
|
|
|
|||
|
|
@ -360,10 +360,22 @@ things in this group. There's a broad variety of Abilities.
|
|||
name="ban_count_template">
|
||||
Ban count: [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
|
||||
<filter_editor
|
||||
layout="topleft"
|
||||
top="5"
|
||||
left="5"
|
||||
right="-5"
|
||||
height="22"
|
||||
search_button_visible="false"
|
||||
follows="left|top|right"
|
||||
label="Filter Ban List"
|
||||
name="filter_input" />
|
||||
|
||||
<name_list
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
height="136"
|
||||
height="114"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
|
|
|
|||
|
|
@ -3246,4 +3246,5 @@ Your current position: [AVATAR_POS]
|
|||
<string name="FSObjectInventoryNoElements">No Elements</string>
|
||||
<string name="FSObjectInventoryOneElement">1 Element</string>
|
||||
<string name="FSObjectInventoryElements">[NUM_ELEMENTS] Elements</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">your Grid Operator's support team</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -5031,6 +5031,14 @@ Veuillez sélectionner un terrain plus petit.
|
|||
<ignore name="ignore" text="Demander avant d'envoyer à quiconque la liste de mes restrictions actuelles en matière de RLV."/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="InventoryValidationFailed" label="Inventory Validation Errors">
|
||||
Une corruption a été trouvée dans votre inventaire.
|
||||
Veuillez contacter [HELP] avec la liste de problèmes suivante.
|
||||
Ils peuvent utiliser http://opensimulator.org/wiki/inventory pour résoudre les problèmes.
|
||||
|
||||
[ERRORS]
|
||||
<usetemplate ignoretext="Lorsque la région définit un nouvel assistant de devise." name="okignore" />
|
||||
</notification>
|
||||
<notification name="PreferenceChatClearLog">
|
||||
Cela supprimera les journaux des conversations précédentes, ainsi que toute copie de sauvegarde de ce fichier.
|
||||
<usetemplate ignoretext="Confirmer avant de supprimer le journal des conversations précédentes" name="okcancelignore" notext="Annuler" yestext="OK"/>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Membres & rôles" name="roles_tab">
|
||||
<panel.string name="default_needs_apply_text">Il y a des modifications non enregistrées</panel.string>
|
||||
<panel.string name="want_apply_text">Voulez-vous les enregistrer ?</panel.string>
|
||||
<panel.string name="default_needs_apply_text">
|
||||
Il y a des modifications non enregistrées
|
||||
</panel.string>
|
||||
<panel.string name="want_apply_text">
|
||||
Voulez-vous les enregistrer ?
|
||||
</panel.string>
|
||||
<tab_container name="roles_tab_container">
|
||||
<panel name="members_sub_tab" label="Membres" tool_tip="Membres">
|
||||
<panel.string name="help_text">
|
||||
Vous pouvez ajouter ou enlever des rôles assignés aux membres.
|
||||
Sélectionnez des noms (en utilisant la touche Ctrl et en
|
||||
cliquant sur leurs noms).
|
||||
Vous pouvez ajouter ou enlever des rôles assignés aux membres.
|
||||
Sélectionnez des noms (en utilisant la touche Ctrl et en
|
||||
cliquant sur leurs noms).
|
||||
</panel.string>
|
||||
<panel.string name="donation_area">[AREA] m²</panel.string>
|
||||
<filter_editor label="Filtrer des membres" name="filter_input"/>
|
||||
<name_list name="member_list" short_names="false">
|
||||
<name_list name="member_list" short_names="false">
|
||||
<name_list.columns label="Membre" name="name"/>
|
||||
<name_list.columns label="Don" name="donated"/>
|
||||
<name_list.columns label="Statut" name="online"/>
|
||||
|
|
@ -19,36 +22,44 @@
|
|||
</name_list>
|
||||
<button name="member_invite" label="Inviter"/>
|
||||
<button name="member_eject" label="Éjecter"/>
|
||||
<button label="Bannir" name="member_ban"/>
|
||||
<button name="member_ban" label="Bannir"/>
|
||||
<button name="export_list" label="Exporter"/>
|
||||
</panel>
|
||||
<panel name="roles_sub_tab" label="Rôles" tool_tip="Rôles">
|
||||
<panel.string name="help_text">
|
||||
Les rôles ont un titre et une liste de droits
|
||||
que les membres peuvent utiliser. Les membres peuvent appartenir à
|
||||
un ou plusieurs rôles. Un groupe peux avoir jusqu'à 10 rôles,
|
||||
comprenant les rôles Tous et Propriétaire.
|
||||
Les rôles ont un titre et une liste de droits
|
||||
que les membres peuvent utiliser. Les membres peuvent appartenir à
|
||||
un ou plusieurs rôles. Un groupe peux avoir jusqu'à 10 rôles,
|
||||
comprenant les rôles Tous et Propriétaire.
|
||||
</panel.string>
|
||||
<panel.string name="cant_delete_role">
|
||||
Les rôles 'Tous' et 'Propriétaire' sont spéciaux et ne peuvent être supprimés.
|
||||
</panel.string>
|
||||
<panel.string name="cant_delete_role">Les rôles 'Tous' et 'Propriétaire' sont spéciaux et ne peuvent être supprimés.</panel.string>
|
||||
<filter_editor label="Filtrer les rôles" name="filter_input"/>
|
||||
<scroll_list name="role_list">
|
||||
<scroll_list.columns label="Rôle" name="name"/>
|
||||
<scroll_list.columns label="Titre" name="title"/>
|
||||
</scroll_list>
|
||||
<button name="role_create" label="Nouveau rôle"/>
|
||||
<button name="role_create" label="Nouveau"/>
|
||||
<button name="role_copy" label="Copier"/>
|
||||
<button name="role_delete" label="Supprimer"/>
|
||||
</panel>
|
||||
<panel name="actions_sub_tab" label="Droits" tool_tip="Vous pouvez consulter la description d'un droit et quels rôles et membres peuvent effectuer l'action.">
|
||||
<panel.string name="help_text">
|
||||
Les droits offrent aux membres de faire des actions
|
||||
spécifiques dans ce groupe. Il existe une large liste de droits.
|
||||
Les droits offrent aux membres de faire des actions
|
||||
spécifiques dans ce groupe. Il existe une large liste de droits.
|
||||
</panel.string>
|
||||
<filter_editor label="Filtrer les actions" name="filter_input"/>
|
||||
<scroll_list name="action_list" tool_tip="Sélectionner un droit pour afficher plus de détails"/>
|
||||
</panel>
|
||||
<panel label="Résidents bannis" name="banlist_sub_tab" tool_tip="Afficher les résidents bannis de ce groupe.">
|
||||
<panel.string name="help_text">Les résidents bannis ne seront pas autorisés à rejoindre ce groupe.</panel.string>
|
||||
<panel.string name="ban_count_template">Bannis : [COUNT]/[LIMIT]</panel.string>
|
||||
<panel.string name="help_text">
|
||||
Les résidents bannis ne seront pas autorisés à rejoindre ce groupe.
|
||||
</panel.string>
|
||||
<panel.string name="ban_count_template">
|
||||
Bannis : [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
<filter_editor label="Filtrer la liste des bannis" name="filter_input"/>
|
||||
<name_list name="ban_list" short_names="false">
|
||||
<name_list.columns label="Résident" name="name"/>
|
||||
<name_list.columns label="Date du bannissement" name="ban_date"/>
|
||||
|
|
@ -59,38 +70,48 @@
|
|||
</panel>
|
||||
</tab_container>
|
||||
<panel name="members_footer">
|
||||
<text name="assigned_roles_label">Rôles assignés</text>
|
||||
<text name="static2">Droits accordés</text>
|
||||
<text name="assigned_roles_label">
|
||||
Rôles assignés
|
||||
</text>
|
||||
<text name="static2">
|
||||
Droits accordés
|
||||
</text>
|
||||
<scroll_list tool_tip="Consultez l'onglet des droits pour les détails des droits accordés" name="member_allowed_actions"/>
|
||||
</panel>
|
||||
<panel name="members_header">
|
||||
<text_editor name="member_action_description">
|
||||
Ce pouvoir permet « d'expulser des membres de ce groupe ». Seul un propriétaire peut expulser un autre propriétaire.
|
||||
</text_editor>
|
||||
</panel>
|
||||
<panel name="roles_footer">
|
||||
<text name="role_name_label">Nom du rôle</text>
|
||||
<text name="role_title_label">Titre du rôle</text>
|
||||
<text name="role_name_label">
|
||||
Nom du rôle
|
||||
</text>
|
||||
<text name="role_title_label">
|
||||
Titre du rôle
|
||||
</text>
|
||||
<check_box label="Afficher les membres" name="role_visible_in_list" tool_tip="Affiche ou masque à tout le monde les membres possédant ce rôle dans l'onglet Général."/>
|
||||
<text name="description_label">Description</text>
|
||||
<text name="description_label">
|
||||
Description
|
||||
</text>
|
||||
<panel name="group_roles_layout_panel">
|
||||
<text name="assigned_members_label">Membres assignés</text>
|
||||
<text name="assigned_members_label">
|
||||
Membres assignés
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="group_roles_layout_panel2">
|
||||
<text name="allowed_abilities_label">Droits accordés</text>
|
||||
<text name="allowed_abilities_label">
|
||||
Droits accordés
|
||||
</text>
|
||||
<scroll_list name="role_allowed_actions" tool_tip="Consulter l'onglet des droits pour les détails de chaque droit accordé"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel name="roles_header">
|
||||
<text_editor name="role_action_description">
|
||||
Ce pouvoir permet « d'expulser des membres de ce groupe ». Seul un propriétaire peut expulser un autre propriétaire.
|
||||
</text_editor>
|
||||
</panel>
|
||||
<panel name="actions_footer">
|
||||
<panel name="action_description_panel">
|
||||
<text_editor name="action_description">Ce droit est 'Éjecter des membres de ce groupe'. Seul un propriétaire peut en éjecter un autre.</text_editor>
|
||||
<text_editor name="action_description">
|
||||
Ce droit est 'Éjecter des membres de ce groupe'. Seul un propriétaire peut en éjecter un autre.
|
||||
</text_editor>
|
||||
</panel>
|
||||
<text name="action_roles_label">Rôles ayant ce droit</text>
|
||||
<text name="action_members_label">Membres ayant ce droit</text>
|
||||
<text name="action_roles_label">
|
||||
Rôles ayant ce droit
|
||||
</text>
|
||||
<text name="action_members_label">
|
||||
Membres ayant ce droit
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -4810,6 +4810,14 @@ Spróbuj zaznaczyć mniejszy obszar ziemi.
|
|||
<ignore name="ignore" text="Potwierdź przed wysłaniem komuś listy moich aktywnych ograniczeń RLV."/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="InventoryValidationFailed" label="Inventory Validation Errors">
|
||||
Rzeczy w Twojej Szafie uległy uszkodzeniu.
|
||||
Skontaktuj się z [HELP] z poniższą listą problemów.
|
||||
Będzie można użyć http://opensimulator.org/wiki/inventory aby rozwiązać problemy.
|
||||
|
||||
[ERRORS]
|
||||
<usetemplate ignoretext="Ostrzegaj, jeśli wykryto błędy walidacji Szafy." name="okignore" />
|
||||
</notification>
|
||||
<notification name="PreferenceChatClearLog">
|
||||
Ta opcja usunie dzienniki poprzednich rozmów i wszelkie kopie zapasowe tego pliku.
|
||||
<usetemplate ignoretext="Potwierdź, zanim usunę dzienniki poprzednich rozmów." name="okcancelignore" notext="Anuluj" />
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ na wykonywanie różnych zadań. Istnieje wiele przywilejów.
|
|||
<panel.string name="ban_count_template">
|
||||
Bany: [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
<filter_editor label="Filtruj listę banów" name="filter_input" />
|
||||
<name_list name="ban_list">
|
||||
<name_list.columns label="Rezydent" name="name"/>
|
||||
<name_list.columns label="Zbanowano" name="ban_date"/>
|
||||
|
|
|
|||
|
|
@ -6489,4 +6489,7 @@ Twoja aktualna pozycja: [AVATAR_POS]
|
|||
<string name="FSObjectInventoryElements">
|
||||
[NUM_ELEMENTS] elementów
|
||||
</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">
|
||||
zespół pomocy operatora Twojej Siatki
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -4929,6 +4929,14 @@ https://wiki.firestormviewer.org/fs_voice
|
|||
<ignore name="ignore" text="Подтвердить отправку кому-либо списка моих текущих ограничений RLV."/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="InventoryValidationFailed" label="Ошибки проверки инвентаря">
|
||||
<usetemplate name="okignore" ignoretext="Предупреждать, если были обнаружены ошибки проверки инвентаря."/>
|
||||
В вашем инвентаре обнаружено повреждение.
|
||||
Пожалуйста, свяжитесь с [HELP] со следующим списком проблем.
|
||||
Они могут использовать http://opensimulator.org/wiki/inventory чтобы устранить проблемы.
|
||||
|
||||
[ERRORS]
|
||||
</notification>
|
||||
<notification name="PreferenceControlsDefaults">
|
||||
Вы хотите восстановить значения по умолчанию для элементов управления?
|
||||
<usetemplate canceltext="Отмена" name="yesnocancelbuttons" notext="Текущий режим" yestext="Все режимы"/>
|
||||
|
|
|
|||
|
|
@ -58,8 +58,9 @@
|
|||
<panel.string name="ban_count_template">
|
||||
Забанено: [COUNT]/[LIMIT]
|
||||
</panel.string>
|
||||
<filter_editor label="Фильтр Забаненных" name="filter_input"/>
|
||||
<name_list name="ban_list">
|
||||
<name_list.columns label="Пользователь" name="name"/>
|
||||
<name_list.columns label="Житель" name="name"/>
|
||||
<name_list.columns label="Забанен" name="ban_date"/>
|
||||
</name_list>
|
||||
<button label="Забанить" name="ban_create" tool_tip="Забанить пользователя группы"/>
|
||||
|
|
|
|||
|
|
@ -6776,4 +6776,5 @@ ID объекта: [INSPECTING_KEY]
|
|||
<string name="FSObjectInventoryNoElements">Нет элементов</string>
|
||||
<string name="FSObjectInventoryOneElement">1 элемент</string>
|
||||
<string name="FSObjectInventoryElements">[NUM_ELEMENTS] элементов</string>
|
||||
<string name="OpenSimInventoryValidationErrorGenericHelp">команда поддержки оператора вашей сетки</string>
|
||||
</strings>
|
||||
|
|
|
|||
Loading…
Reference in New Issue