Ansariel 2022-05-19 21:26:10 +02:00
commit fb1c3d1a8c
20 changed files with 276 additions and 88 deletions

View File

@ -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)
{

View File

@ -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];

View File

@ -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++;
}
}

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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>

View File

@ -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"

View File

@ -360,10 +360,22 @@ things in this group. There&apos;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"

View File

@ -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>

View File

@ -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"/>

View File

@ -1,17 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Membres &amp; 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&apos;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&apos;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>

View File

@ -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" />

View File

@ -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"/>

View File

@ -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>

View File

@ -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="Все режимы"/>

View File

@ -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="Забанить пользователя группы"/>

View File

@ -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>