diff options
| author | oldmud0 <oldmud0@users.noreply.github.com> | 2020-08-21 12:42:45 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-21 12:42:45 -0500 |
| commit | 2c6a690d47ca0c48bef84b3d28d58064365a9934 (patch) | |
| tree | cdc2a42b51e4bbe3c008adab296ac306d6dbdfd7 | |
| parent | ec1c95bdb33dd063880c4cb6c3c9c3cf5d0ed454 (diff) | |
| parent | af1e76022568af1f146e2b49e96af85eb06521b9 (diff) | |
Merge pull request #246 from AttorneyOnline/2.8
Merges 2.8.5, which is a patch release for 2.8 with no substantially new features.
This commit is release-ready.
29 files changed, 1654 insertions, 1582 deletions
@@ -22,6 +22,7 @@ base/characters base/sounds base/callwords.ini base/config.ini +base/serverlist.txt .qmake.stash diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e0b0886f..0230d401 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,8 +5,6 @@ stages: cache: key: ${CI_COMMIT_REF_SLUG} - paths: - - lib/ variables: DEBIAN_FRONTEND: noninteractive @@ -15,7 +13,7 @@ before_script: - echo Current working directory is $(pwd) build linux x86_64: - image: ubuntu + image: ubuntu:18.04 stage: build tags: - docker @@ -34,15 +32,15 @@ build linux x86_64: - clang --version # Extract BASS - #- mkdir bass - #- cd bass - #- curl http://www.un4seen.com/files/bass24-linux.zip -o bass.zip - #- unzip bass.zip - #- cp x64/libbass.so ../lib - #- curl http://www.un4seen.com/files/bassopus24-linux.zip -o bassopus.zip - #- unzip bassopus.zip - #- cp x64/libbassopus.so ../lib - #- cd .. + - mkdir bass + - cd bass + - curl http://www.un4seen.com/files/bass24-linux.zip -o bass.zip + - unzip bass.zip + - cp x64/libbass.so ../lib + - curl http://www.un4seen.com/files/bassopus24-linux.zip -o bassopus.zip + - unzip bassopus.zip + - cp x64/libbassopus.so ../lib + - cd .. # Extract Discord RPC - mkdir discord-rpc @@ -53,21 +51,32 @@ build linux x86_64: - cd .. # Extract QtApng - - mkdir qtapng - - cd qtapng - - curl -L https://github.com/Skycoder42/QtApng/releases/download/1.1.0-5/build_gcc_64_5.12.0.tar.xz -o apng.tar.xz - - tar -xvf apng.tar.xz - - cp gcc_64/plugins/imageformats/libqapng.so ../lib + #- mkdir qtapng + #- cd qtapng + #- curl -L https://github.com/Skycoder42/QtApng/releases/download/1.1.0-5/build_gcc_64_5.12.0.tar.xz -o apng.tar.xz + #- tar -xvf apng.tar.xz + #- cp gcc_64/plugins/imageformats/libqapng.so ../lib + #- cd .. + + # Build QtApng + - git clone https://github.com/Skycoder42/QtApng + - cd QtApng + - qmake -spec linux-clang + # Don't make examples - they're not compatible with Qt 5.9 + - make -j4 sub-src + #- make sub-src-install_subtargets + - cp plugins/imageformats/libqapng.so ../lib - cd .. # Build - - qmake -spec linux-clang "DEFINES += DISCORD QTAUDIO" + - qmake -spec linux-clang "DEFINES += DISCORD" - make -j4 # Post-processing - upx --lzma -9 --force bin/Attorney_Online artifacts: paths: + - lib/ - bin/ build windows i686: @@ -109,19 +118,21 @@ build windows i686: - ls lib # Build - - /opt/mxe/usr/${TARGET_SPEC}/qt5/bin/qmake "DEFINES += DISCORD BASSAUDIO" + - /opt/mxe/usr/${TARGET_SPEC}/qt5/bin/qmake "DEFINES += DISCORD" - make -j4 # Post-processing - upx --lzma -9 --force bin/Attorney_Online.exe artifacts: paths: + - lib/ - bin/ # Base folder .deploy_base: &deploy_base | - mkdir base cp -a ../base/ base/ + rm -rf base/themes/_Unadapted/ + rm base/themes/.gitattributes base/themes/.git # Miscellaneous files .deploy_misc: &deploy_misc | diff --git a/Attorney_Online.pro b/Attorney_Online.pro index 28a1e7ca..d2c20624 100644 --- a/Attorney_Online.pro +++ b/Attorney_Online.pro @@ -3,7 +3,7 @@ QT += core gui widgets network TARGET = Attorney_Online TEMPLATE = app -VERSION = 2.8.4.0 +VERSION = 2.8.5.0 INCLUDEPATH += $$PWD/include DESTDIR = $$PWD/bin @@ -22,35 +22,15 @@ contains(DEFINES, DISCORD) { LIBS += -ldiscord-rpc } -# Uncomment to enable the BASS audio engine -# (Recommended for Windows) -# DEFINES += BASSAUDIO - -contains(DEFINES, BASSAUDIO) { - LIBS += -lbass - LIBS += -lbassopus -} - -# Uncomment to enable the Qt audio engine -# (Recommended for non-Windows platforms) -# DEFINES += QTAUDIO - -contains(DEFINES, QTAUDIO) { - QT += multimedia -} - -AUDIO_DEFINES = $$find(DEFINES, BASSAUDIO) $$find(DEFINES, QTAUDIO) -count(AUDIO_DEFINES, 0) { - warning("No audio system selected. Your build will not have audio.") -} - -count(AUDIO_DEFINES, 2) { - error("More than one audio system selected.") -} +# As of 2.8.5, BASS and BASSOPUS are required for all platforms. Qt Multimedia +# is no longer an option due to outdated code and lack of versatility. +# Download at un4seen.com and place the DLLs in the "lib" and "bin" folders. +DEFINES += BASSAUDIO +LIBS += -lbass +LIBS += -lbassopus macx:LIBS += -framework CoreFoundation -framework Foundation -framework CoreServices - CONFIG += c++14 RESOURCES += resources.qrc diff --git a/base/serverlist.txt b/base/serverlist.sample.txt index f700836c..f700836c 100644 --- a/base/serverlist.txt +++ b/base/serverlist.sample.txt diff --git a/base/themes b/base/themes -Subproject 8de30fc0fa0e1492a29dad0e839764ca44168cb +Subproject 15b0cc4aa1241a9b740fb1ce8a61c7f699a80de diff --git a/include/aoapplication.h b/include/aoapplication.h index f4685eca..60d945ec 100644 --- a/include/aoapplication.h +++ b/include/aoapplication.h @@ -5,6 +5,9 @@ #include "datatypes.h" #include "discord_rich_presence.h" +#include "bass.h" +#include "bassopus.h" + #include <QApplication> #include <QFile> #include <QSettings> @@ -23,9 +26,6 @@ #include <QScreen> #include <QStringList> #include <QTextStream> -#ifdef QTAUDIO -#include <QAudioDeviceInfo> -#endif class NetworkManager; class Lobby; @@ -202,7 +202,8 @@ public: // Returns the value of whether custom chatboxes should be a thing. // from the config.ini. - // I am increasingly maddened by the lack of dynamic auto-generation system for settings. + // I am increasingly maddened by the lack of dynamic auto-generation system + // for settings. bool is_customchat_enabled(); // Returns the value of the maximum amount of lines the IC chatlog @@ -213,14 +214,20 @@ public: // or downwards (vanilla behaviour). bool get_log_goes_downwards(); + // Returns whether the log should separate name from text via newline or : + bool get_log_newline(); + + // Get spacing between IC log entries. + int get_log_margin(); + + // Returns whether the log should have a timestamp. + bool get_log_timestamp(); + // Returns the username the user may have set in config.ini. QString get_default_username(); // Returns the audio device used for the client. QString get_audio_output_device(); -#ifdef QTAUDIO - QAudioDeviceInfo QtAudioDevice; -#endif // Returns whether the user would like to have custom shownames on by default. bool get_showname_enabled_by_default(); @@ -433,10 +440,16 @@ public: // The file name of the log file in base/logs. QString log_filename; + void initBASS(); + static void load_bass_opus_plugin(); + static void CALLBACK BASSreset(HSTREAM handle, DWORD channel, DWORD data, + void *user); + static void doBASSreset(); + private: const int RELEASE = 2; const int MAJOR_VERSION = 8; - const int MINOR_VERSION = 4; + const int MINOR_VERSION = 5; QString current_theme = "default"; diff --git a/include/aoblipplayer.h b/include/aoblipplayer.h index 5a104718..4d3b5f14 100644 --- a/include/aoblipplayer.h +++ b/include/aoblipplayer.h @@ -1,12 +1,8 @@ #ifndef AOBLIPPLAYER_H #define AOBLIPPLAYER_H -#if defined(BASSAUDIO) #include "bass.h" #include "bassopus.h" -#elif defined(QTAUDIO) -#include <QSoundEffect> -#endif #include "aoapplication.h" @@ -35,11 +31,7 @@ private: void set_volume_internal(qreal p_volume); -#if defined(BASSAUDIO) HSTREAM m_stream_list[5]; -#elif defined(QTAUDIO) - QSoundEffect m_blips; -#endif }; #endif // AOBLIPPLAYER_H diff --git a/include/aomusicplayer.h b/include/aomusicplayer.h index 82751b68..36031f16 100644 --- a/include/aomusicplayer.h +++ b/include/aomusicplayer.h @@ -2,12 +2,8 @@ #define AOMUSICPLAYER_H #include "file_functions.h" -#if defined(BASSAUDIO) #include "bass.h" #include "bassopus.h" -#elif defined(QTAUDIO) -#include <QMediaPlayer> -#endif #include "aoapplication.h" @@ -44,12 +40,8 @@ private: // Channel 1 = ambience // Channel 2 = extra // Channel 3 = extra - #if defined(BASSAUDIO) HSTREAM m_stream_list[4]; HSYNC loop_sync[4]; - #elif defined(QTAUDIO) - QMediaPlayer m_stream_list[4]; - #endif }; #endif // AOMUSICPLAYER_H diff --git a/include/aooptionsdialog.h b/include/aooptionsdialog.h index 2b8c879b..fe99626a 100644 --- a/include/aooptionsdialog.h +++ b/include/aooptionsdialog.h @@ -46,6 +46,12 @@ private: QCheckBox *ui_downwards_cb; QLabel *ui_length_lbl; QSpinBox *ui_length_spinbox; + QLabel *ui_log_newline_lbl; + QCheckBox *ui_log_newline_cb; + QLabel *ui_log_margin_lbl; + QSpinBox *ui_log_margin_spinbox; + QLabel *ui_log_timestamp_lbl; + QCheckBox *ui_log_timestamp_cb; QFrame *ui_log_names_divider; QLineEdit *ui_username_textbox; QLabel *ui_username_lbl; diff --git a/include/aosfxplayer.h b/include/aosfxplayer.h index 99188719..0a5fffa8 100644 --- a/include/aosfxplayer.h +++ b/include/aosfxplayer.h @@ -1,12 +1,8 @@ #ifndef AOSFXPLAYER_H #define AOSFXPLAYER_H -#if defined(BASSAUDIO) #include "bass.h" #include "bassopus.h" -#elif defined(QTAUDIO) -#include <QSoundEffect> -#endif #include "aoapplication.h" @@ -37,11 +33,7 @@ private: const int m_channelmax = 5; -#if defined(BASSAUDIO) HSTREAM m_stream_list[5]; -#elif defined(QTAUDIO) - QSoundEffect m_stream_list[5]; -#endif }; #endif // AOSFXPLAYER_H diff --git a/include/chatlogpiece.h b/include/chatlogpiece.h index 14d4b349..da78d0da 100644 --- a/include/chatlogpiece.h +++ b/include/chatlogpiece.h @@ -10,14 +10,14 @@ class chatlogpiece { public: chatlogpiece(); chatlogpiece(QString p_name, QString p_showname, QString p_message, - bool p_song,int color); + QString p_action,int color); chatlogpiece(QString p_name, QString p_showname, QString p_message, - bool p_song, int color, QDateTime p_datetime); + QString p_action, int color, QDateTime p_datetime); QString get_name(); QString get_showname(); QString get_message(); - bool is_song(); + QString get_action(); QDateTime get_datetime(); QString get_datetime_as_string(); int get_chat_color(); @@ -27,9 +27,9 @@ private: QString name; QString showname; QString message; + QString action; QDateTime datetime; int color; - bool p_is_song; }; #endif // CHATLOGPIECE_H diff --git a/include/courtroom.h b/include/courtroom.h index 182c2a68..5b5ff6c1 100644 --- a/include/courtroom.h +++ b/include/courtroom.h @@ -109,7 +109,6 @@ public: if (arup_locks.size() > place) arup_locks[place] = value; } - list_areas(); } void character_loading_finished(); @@ -118,7 +117,9 @@ public: void set_widgets(); // sets font size based on theme ini files - void set_font(QWidget *widget, QString class_name, QString p_identifier, QString p_char="", QString font_name="", int f_pointsize=0); + void set_font(QWidget *widget, QString class_name, QString p_identifier, + QString p_char = "", QString font_name = "", + int f_pointsize = 0); // Get the properly constructed font QFont get_qfont(QString font_name, int f_pointsize, bool antialias = true); @@ -128,7 +129,7 @@ public: QColor f_color = Qt::black, bool bold = false); // helper function that calls above function on the relevant widgets - void set_fonts(QString p_char=""); + void set_fonts(QString p_char = ""); // sets dropdown menu stylesheet void set_dropdown(QWidget *widget); @@ -217,11 +218,14 @@ public: QString filter_ic_text(QString p_text, bool colorize = false, int pos = -1, int default_color = 0); + void log_ic_text(QString p_name, QString p_showname, QString p_message, QString p_action="", int p_color=0); + // adds text to the IC chatlog. p_name first as bold then p_text then a newlin // this function keeps the chatlog scrolled to the top unless there's text // selected // or the user isn't already scrolled to the top - void append_ic_text(QString p_text, QString p_name = "", QString action = "", int color = 0); + void append_ic_text(QString p_text, QString p_name = "", QString action = "", + int color = 0); // prints who played the song to IC chat and plays said song(if found on local // filesystem) takes in a list where the first element is the song name and @@ -260,7 +264,6 @@ private: int m_viewport_width = 256; int m_viewport_height = 192; - bool first_message_sent = false; int maximumMessages = 0; QParallelAnimationGroup *screenshake_animation_group = @@ -313,14 +316,23 @@ private: bool rainbow_appended = false; bool blank_blip = false; - // Whether or not is this message additive to the previous one - bool is_additive = false; - // Used for getting the current maximum blocks allowed in the IC chatlog. int log_maximum_blocks = 0; // True, if the log should go downwards. - bool log_goes_downwards = false; + bool log_goes_downwards = true; + + // True, if log should display colors. + bool log_colors = true; + + // True, if the log should display the message like name<br>text instead of name: text + bool log_newline = false; + + // Margin in pixels between log entries for the IC log. + int log_margin = 0; + + // True, if the log should have a timestamp. + bool log_timestamp = false; // delay before chat messages starts ticking QTimer *text_delay_timer; @@ -349,9 +361,10 @@ private: // amount by which we multiply the delay when we parse punctuation chars const int punctuation_modifier = 3; - static const int chatmessage_size = 30; - QString m_chatmessage[chatmessage_size]; - bool chatmessage_is_empty = false; + // Minumum and maximum number of parameters in the MS packet + static const int MS_MINIMUM = 15; + static const int MS_MAXIMUM = 30; + QString m_chatmessage[MS_MAXIMUM]; QString previous_ic_message = ""; QString additive_previous = ""; @@ -458,6 +471,14 @@ private: QString current_background = "default"; QString current_side = ""; + QBrush free_brush; + QBrush lfp_brush; + QBrush casing_brush; + QBrush recess_brush; + QBrush rp_brush; + QBrush gaming_brush; + QBrush locked_brush; + AOMusicPlayer *music_player; AOSfxPlayer *sfx_player; AOSfxPlayer *objection_player; @@ -639,6 +660,10 @@ private: void refresh_evidence(); void set_evidence_page(); + void reset_ic(); + void reset_ui(); + + void regenerate_ic_chatlog(); public slots: void objection_done(); void preanim_done(); @@ -803,8 +828,6 @@ private slots: void on_casing_clicked(); void ping_server(); - - void load_bass_opus_plugin(); }; #endif // COURTROOM_H diff --git a/resource/translations/ao_es.qm b/resource/translations/ao_es.qm Binary files differindex 7b238e79..7b5e6f25 100644 --- a/resource/translations/ao_es.qm +++ b/resource/translations/ao_es.qm diff --git a/resource/translations/ao_es.ts b/resource/translations/ao_es.ts index 8e43d8ec..ec15abef 100644 --- a/resource/translations/ao_es.ts +++ b/resource/translations/ao_es.ts @@ -45,44 +45,44 @@ Que tengas un buen día.</translation> <translation>Cargando</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="381"/> + <location filename="../../src/packet_distribution.cpp" line="384"/> <source>Loading evidence: %1/%2</source> <translation>Cargando evidencia: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="416"/> - <location filename="../../src/packet_distribution.cpp" line="510"/> + <location filename="../../src/packet_distribution.cpp" line="419"/> + <location filename="../../src/packet_distribution.cpp" line="513"/> <source>Loading music: %1/%2</source> <translation>Cargando música: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="334"/> - <location filename="../../src/packet_distribution.cpp" line="483"/> + <location filename="../../src/packet_distribution.cpp" line="337"/> + <location filename="../../src/packet_distribution.cpp" line="486"/> <source>Loading chars: %1/%2</source> <translation>Cargando personajes: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="692"/> + <location filename="../../src/packet_distribution.cpp" line="696"/> <source>You have been kicked from the server. Reason: %1</source> <translation>Has sido expulsado del servidor. Razón: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="700"/> + <location filename="../../src/packet_distribution.cpp" line="704"/> <source>You have been banned from the server. Reason: %1</source> <translation>Has sido bloqueado de este servidor. Razón: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="708"/> + <location filename="../../src/packet_distribution.cpp" line="712"/> <source>You are banned on this server. Reason: %1</source> <translation>Has sido bloqueado en este servidor. @@ -186,42 +186,72 @@ Razón: </translation> <translation>La cantidad de mensajes que mantendrá el historial del chat IC antes de eliminar mensajes más antiguos. 0 significa 'infinito'.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="133"/> + <location filename="../../src/aooptionsdialog.cpp" line="125"/> + <source>Log newline:</source> + <translation>Nueva línea en log:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="127"/> + <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as 'name: message'.</source> + <translation>Si es marcado, los mensajes nuevos aparecerán separados, y el mensaje aparecerá en la siguiente línea después del nombre. Cuando está desmarcado, lo muestra como 'nombre: mensaje'.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="140"/> + <source>Log margin:</source> + <translation>Margen en log:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="141"/> + <source>The distance in pixels between each entry in the IC log. Default: 0.</source> + <translation>La distancia en píxeles entre cada entrada en el registro de IC. Predeterminado: 0.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="155"/> + <source>Log timestamp:</source> + <translation>Marca de tiempo en log:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="157"/> + <source>If ticked, log will contain a timestamp in UTC before the name.</source> + <translation>Si está marcado, el registro contendrá una marca de tiempo en UTC antes del nombre.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="176"/> <source>Default username:</source> <translation>Usuario predeterminado:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="135"/> + <location filename="../../src/aooptionsdialog.cpp" line="178"/> <source>Your OOC name will be automatically set to this value when you join a server.</source> <translation>Su nombre OOC se establecerá automáticamente a este cuando se una a un servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="148"/> + <location filename="../../src/aooptionsdialog.cpp" line="191"/> <source>Custom shownames:</source> <translation>Mostrar nombres:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="150"/> + <location filename="../../src/aooptionsdialog.cpp" line="193"/> <source>Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names.</source> <translation>Activa la casilla 'Mostrar nombres' de forma predeterminada en el juego, que a su vez determina si el cliente debe mostrar nombres personalizados en los personajes.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="170"/> + <location filename="../../src/aooptionsdialog.cpp" line="213"/> <source>Backup MS:</source> <translation>Master SV de respaldo:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="172"/> + <location filename="../../src/aooptionsdialog.cpp" line="215"/> <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source> <translation>Si la lista de servidores predeterminada falla, el juego probará la dirección proporcionada aquí.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="185"/> + <location filename="../../src/aooptionsdialog.cpp" line="228"/> <source>Discord:</source> <translation>Discord:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="187"/> + <location filename="../../src/aooptionsdialog.cpp" line="230"/> <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source> <translation>Permite a otros en Discord ver en qué servidor estás, qué personaje juegas y cuánto tiempo has estado jugando.</translation> </message> @@ -234,12 +264,12 @@ Razón: </translation> <translation type="obsolete">Permite el movimiento de la pantalla y el parpadeo. Desactive esto si tiene inquietudes o problemas con la fotosensibilidad y/o convulsiones.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="200"/> + <location filename="../../src/aooptionsdialog.cpp" line="243"/> <source>Language:</source> <translation>Idioma:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="202"/> + <location filename="../../src/aooptionsdialog.cpp" line="245"/> <source>Sets the language if you don't want to use your system language.</source> <translation>Establece el idioma si no desea utilizar el idioma de su sistema.</translation> </message> @@ -248,47 +278,47 @@ Razón: </translation> <translation type="obsolete">Habilítelo para agregar una pequeña pausa en los signos de puntuación.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="340"/> + <location filename="../../src/aooptionsdialog.cpp" line="383"/> <source>Callwords</source> <translation>Palabras clave</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="367"/> + <location filename="../../src/aooptionsdialog.cpp" line="410"/> <source><html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html></source> <translation><html><head/><body>Ingrese tantas palabras de llamada como desee.<br>Esto no distingue entre mayúsculas y minúsculas. ¡Asegúrese de dejar cada palabra en su propia línea!<br>No deje una línea con un espacio al final; recibirá una alerta cada vez que alguien use un espacio en sus mensajes.</body></html></translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="377"/> + <location filename="../../src/aooptionsdialog.cpp" line="420"/> <source>Audio</source> <translation>Audio</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="391"/> + <location filename="../../src/aooptionsdialog.cpp" line="434"/> <source>Audio device:</source> <translation>Dispositivo:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="392"/> + <location filename="../../src/aooptionsdialog.cpp" line="435"/> <source>Sets the audio device for all sounds.</source> <translation>Establece el dispositivo de audio.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="435"/> + <location filename="../../src/aooptionsdialog.cpp" line="468"/> <source>Music:</source> <translation>Música:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="436"/> + <location filename="../../src/aooptionsdialog.cpp" line="469"/> <source>Sets the music's default volume.</source> <translation>Establece el volumen predeterminado de la música.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="450"/> + <location filename="../../src/aooptionsdialog.cpp" line="483"/> <source>SFX:</source> <translation>SFX:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="452"/> + <location filename="../../src/aooptionsdialog.cpp" line="485"/> <source>Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'.</source> <translation>Establece el volumen predeterminado de SFX. Las interjecciones y los efectos de sonido reales cuentan como 'SFX'.</translation> </message> @@ -317,47 +347,47 @@ Razón: </translation> <translation type="obsolete">Establece el volumen predeterminado para sonidos SFX, como las interjecciones y otros efectos de sonido de personajes.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="466"/> + <location filename="../../src/aooptionsdialog.cpp" line="499"/> <source>Blips:</source> <translation>Blips:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="468"/> + <location filename="../../src/aooptionsdialog.cpp" line="501"/> <source>Sets the volume of the blips, the talking sound effects.</source> <translation>Establece el volumen de los blips, el sonido al hablar.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="490"/> + <location filename="../../src/aooptionsdialog.cpp" line="523"/> <source>Blip rate:</source> <translation>Tasa de blips:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="492"/> + <location filename="../../src/aooptionsdialog.cpp" line="525"/> <source>Sets the delay between playing the blip sounds.</source> <translation>Establece el retraso entre la reproducción de los sonidos blip.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="507"/> + <location filename="../../src/aooptionsdialog.cpp" line="540"/> <source>Blank blips:</source> <translation>Blips en blanco:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="509"/> + <location filename="../../src/aooptionsdialog.cpp" line="542"/> <source>If true, the game will play a blip sound even when a space is 'being said'.</source> <translation>Si está marcada, el juego reproducirá un sonido blip incluso cuando se 'dice' un espacio.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="521"/> + <location filename="../../src/aooptionsdialog.cpp" line="554"/> <source>Enable Looping SFX:</source> <translation>Habilitar repetición de SFX:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="522"/> + <location filename="../../src/aooptionsdialog.cpp" line="555"/> <source>If true, the game will allow looping sound effects to play on preanimations.</source> <translation>Si está habilitado, el juego permitirá que se reproduzcan efectos de sonido en bucle en preanimaciones.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="534"/> + <location filename="../../src/aooptionsdialog.cpp" line="567"/> <source>Kill Music On Objection:</source> <translation>Parar la música al objetar:</translation> </message> @@ -366,191 +396,201 @@ Razón: </translation> <translation type="obsolete">Si está habilitado, el juego detendrá la música cuando alguien haga una objeción, como en los juegos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="208"/> + <location filename="../../src/aooptionsdialog.cpp" line="251"/> <source> - Keep current setting</source> <translation> - Mantener la configuración actual</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="222"/> + <location filename="../../src/aooptionsdialog.cpp" line="265"/> <source>Allow Screenshake:</source> <translation>Permitir screenshake:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="224"/> + <location filename="../../src/aooptionsdialog.cpp" line="267"/> <source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> <translation>Permite el movimiento de la pantalla (ADVERTENCIA: esto podría inducir convulsiones debido a imágenes parpadeantes).</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="236"/> + <location filename="../../src/aooptionsdialog.cpp" line="279"/> <source>Allow Effects:</source> <translation>Permitir efectos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="238"/> + <location filename="../../src/aooptionsdialog.cpp" line="281"/> <source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> <translation>Permite efectos de pantalla (ADVERTENCIA: esto podría inducir convulsiones debido a imágenes parpadeantes).</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="250"/> + <location filename="../../src/aooptionsdialog.cpp" line="293"/> <source>Network Frame Effects:</source> <translation>Enviar efectos al servidor:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="251"/> + <location filename="../../src/aooptionsdialog.cpp" line="294"/> <source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source> <translation>Envíe temblores de pantalla, destellos y sonidos como se define en char.ini a través de la red. Solo funciona para servidores que admiten esta funcionalidad.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="264"/> + <location filename="../../src/aooptionsdialog.cpp" line="307"/> <source>Colors in IC Log:</source> <translation>Colores en el registro IC:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="266"/> + <location filename="../../src/aooptionsdialog.cpp" line="309"/> <source>Use the markup colors in the server IC chatlog.</source> <translation>Permite colores en el chat IC del servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="277"/> + <location filename="../../src/aooptionsdialog.cpp" line="320"/> <source>Sticky Sounds:</source> <translation>Mantener sonidos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="279"/> + <location filename="../../src/aooptionsdialog.cpp" line="322"/> <source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source> <translation>Actívelo para evitar que el menú desplegable de sonido borre el sonido después de reproducirlo.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="291"/> + <location filename="../../src/aooptionsdialog.cpp" line="334"/> <source>Sticky Effects:</source> <translation>Mantener efectos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="293"/> + <location filename="../../src/aooptionsdialog.cpp" line="336"/> <source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source> <translation>Actívelo para evitar que el menú desplegable de efectos elimine el efecto después de reproducirlo.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="306"/> + <location filename="../../src/aooptionsdialog.cpp" line="349"/> <source>Sticky Preanims:</source> <translation>Mantener preanims:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="308"/> + <location filename="../../src/aooptionsdialog.cpp" line="351"/> <source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source> <translation>Actívelo para evitar que la casilla preanimation se desactive después de reproducir el emote.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="320"/> + <location filename="../../src/aooptionsdialog.cpp" line="363"/> <source>Custom Chatboxes:</source> <translation>Chatboxes personalizados:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="322"/> + <location filename="../../src/aooptionsdialog.cpp" line="365"/> <source>Turn this on to allow characters to define their own custom chat box designs.</source> <translation>Actívelo para permitir que los personajes definan sus propios diseños de cuadros de chat personalizados.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="500"/> + <location filename="../../src/aooptionsdialog.cpp" line="533"/> <source>Play a blip sound "once per every X symbols", where X is the blip rate.</source> <translation>Reproduce un sonido de blip "una vez por cada X símbolos", donde X es la tasa de blip.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="536"/> + <location filename="../../src/aooptionsdialog.cpp" line="569"/> <source>If true, AO2 will stop the music for you when you or someone else does 'Objection!'.</source> <translation>Si es activado, AO2 detendrá la música por ti cuando tú u otra persona hagan un '¡Protesto!'.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="548"/> + <location filename="../../src/aooptionsdialog.cpp" line="581"/> <source>Casing</source> <translation>Caso</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="565"/> + <location filename="../../src/aooptionsdialog.cpp" line="598"/> <source>This server supports case alerts.</source> <translation>Este servidor admite alertas de casos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="568"/> + <location filename="../../src/aooptionsdialog.cpp" line="601"/> <source>This server does not support case alerts.</source> <translation>Este servidor no admite alertas de casos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="569"/> + <location filename="../../src/aooptionsdialog.cpp" line="602"/> <source>Pretty self-explanatory.</source> <translation>Bastante autoexplicativo.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="578"/> + <location filename="../../src/aooptionsdialog.cpp" line="611"/> <source>Casing:</source> <translation>Caso:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="580"/> + <location filename="../../src/aooptionsdialog.cpp" line="613"/> <source>If checked, you will get alerts about case announcements.</source> <translation>Si está marcado, recibirá anuncios de casos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="596"/> + <location filename="../../src/aooptionsdialog.cpp" line="629"/> <source>Defense:</source> <translation>Abogado:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="597"/> + <location filename="../../src/aooptionsdialog.cpp" line="630"/> <source>If checked, you will get alerts about case announcements if a defense spot is open.</source> <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de abogado libre.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="611"/> + <location filename="../../src/aooptionsdialog.cpp" line="644"/> <source>Prosecution:</source> <translation>Fiscal:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="613"/> + <location filename="../../src/aooptionsdialog.cpp" line="646"/> <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source> <translation>Si está marcada, recibirá alertas sobre anuncios de casos si hay un puesto de fiscal libre.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="627"/> + <location filename="../../src/aooptionsdialog.cpp" line="660"/> <source>Judge:</source> <translation>Juez:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="628"/> + <location filename="../../src/aooptionsdialog.cpp" line="661"/> <source>If checked, you will get alerts about case announcements if the judge spot is open.</source> <translation>Si está marcado, recibirá alertas sobre anuncios de casos si el puesto de juez está libre.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="642"/> + <location filename="../../src/aooptionsdialog.cpp" line="675"/> <source>Juror:</source> <translation>Jurado:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="643"/> + <location filename="../../src/aooptionsdialog.cpp" line="676"/> <source>If checked, you will get alerts about case announcements if a juror spot is open.</source> <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un puesto de jurado libre.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="657"/> + <location filename="../../src/aooptionsdialog.cpp" line="690"/> <source>Stenographer:</source> <translation>Taquígrafo:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="659"/> + <location filename="../../src/aooptionsdialog.cpp" line="692"/> <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source> <translation>Si está marcado, recibirá alertas sobre anuncios de casos si hay un lugar de taquígrafo libre.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="673"/> + <location filename="../../src/aooptionsdialog.cpp" line="706"/> <source>CM:</source> <translation>CM:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="675"/> + <location filename="../../src/aooptionsdialog.cpp" line="708"/> <source>If checked, you will appear amongst the potential CMs on the server.</source> <translation>Si está marcado, aparecerá entre los posibles CM en el servidor.</translation> </message> <message> + <location filename="../../src/aooptionsdialog.cpp" line="738"/> + <source>Automatic Logging:</source> + <translation>Registro automático:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="740"/> + <source>If checked, all logs will be automatically written in the /logs folder.</source> + <translation>Si está marcado, todos los registros se guardarán automáticamente en la carpeta logs.</translation> + </message> + <message> <source>Witness:</source> <translation type="obsolete">Testigo:</translation> </message> @@ -559,12 +599,12 @@ Razón: </translation> <translation type="obsolete">Si está marcado, aparecerá entre los posibles testigos en el servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="689"/> + <location filename="../../src/aooptionsdialog.cpp" line="722"/> <source>Hosting cases:</source> <translation>Casos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="691"/> + <location filename="../../src/aooptionsdialog.cpp" line="724"/> <source>If you're a CM, enter what cases you are willing to host.</source> <translation>Si eres un CM, ingresa qué casos estás dispuesto a organizar.</translation> </message> @@ -619,7 +659,7 @@ Razón: </translation> </message> <message> <location filename="../../src/charselect.cpp" line="30"/> - <location filename="../../src/courtroom.cpp" line="175"/> + <location filename="../../src/courtroom.cpp" line="144"/> <source>Search</source> <translation>Buscar</translation> </message> @@ -639,7 +679,7 @@ Razón: </translation> <translation type="obsolete">No se pudo encontrar %1</translation> </message> <message> - <location filename="../../src/charselect.cpp" line="232"/> + <location filename="../../src/charselect.cpp" line="236"/> <source>Generating chars: %1/%2</source> <translation>Generando personajes: @@ -652,53 +692,53 @@ Razón: </translation> </translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="148"/> + <location filename="../../src/courtroom.cpp" line="117"/> <source>Showname</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="152"/> + <location filename="../../src/courtroom.cpp" line="121"/> <source>Message</source> <translation>Mensaje</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="167"/> + <location filename="../../src/courtroom.cpp" line="136"/> <source>Name</source> <translation>Nombre</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="217"/> + <location filename="../../src/courtroom.cpp" line="186"/> <source>Pre</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="220"/> + <location filename="../../src/courtroom.cpp" line="189"/> <source>Flip</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="224"/> + <location filename="../../src/courtroom.cpp" line="193"/> <source>Guard</source> <translation>Guardia</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="233"/> - <location filename="../../src/courtroom.cpp" line="815"/> + <location filename="../../src/courtroom.cpp" line="202"/> + <location filename="../../src/courtroom.cpp" line="804"/> <source>Casing</source> <translatorcomment>This could be translated as 'caso' and it wouldn't get cut, but there are so many other buttons that can't be translated on the courtroom window that might as well leave this also untranslated so it's at least consistent.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="238"/> + <location filename="../../src/courtroom.cpp" line="207"/> <source>Shownames</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="241"/> + <location filename="../../src/courtroom.cpp" line="210"/> <source>No Interrupt</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> @@ -740,68 +780,68 @@ Razón: </translation> <translation type="obsolete">Cian</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="274"/> + <location filename="../../src/courtroom.cpp" line="245"/> <source>% offset</source> <translation>% desplazamiento</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="742"/> + <location filename="../../src/courtroom.cpp" line="731"/> <source>Music</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="744"/> + <location filename="../../src/courtroom.cpp" line="733"/> <source>Sfx</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="746"/> + <location filename="../../src/courtroom.cpp" line="735"/> <source>Blips</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="791"/> + <location filename="../../src/courtroom.cpp" line="780"/> <source>Change character</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="797"/> + <location filename="../../src/courtroom.cpp" line="786"/> <source>Reload theme</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="803"/> + <location filename="../../src/courtroom.cpp" line="792"/> <source>Call mod</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="809"/> + <location filename="../../src/courtroom.cpp" line="798"/> <source>Settings</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="822"/> + <location filename="../../src/courtroom.cpp" line="811"/> <source>A/M</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="827"/> + <location filename="../../src/courtroom.cpp" line="816"/> <source>Preanim</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="913"/> + <location filename="../../src/courtroom.cpp" line="902"/> <source>Back to Lobby</source> <translatorcomment>'Volver al lobby' got cut, changed to just Lobby</translatorcomment> <translation>Lobby</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> + <location filename="../../src/courtroom.cpp" line="1514"/> <source>You were granted the Disable Modcalls button.</source> <translation>Se le concedió el botón para deshabilitar llamadas a moderadores.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3011"/> + <location filename="../../src/courtroom.cpp" line="3094"/> <source>You have been banned.</source> <translation>Has sido vetado.</translation> </message> @@ -814,7 +854,7 @@ Razón: </translation> <translation type="obsolete">Esto no hace nada, pero ahí lo tienes.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3211"/> + <location filename="../../src/courtroom.cpp" line="3289"/> <source>You opened the settings menu.</source> <translation>Abriste el menú de configuración.</translation> </message> @@ -827,82 +867,82 @@ Razón: </translation> <translation type="obsolete"> si ellos también eligen a tu personaje a cambio.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="143"/> + <location filename="../../src/courtroom.cpp" line="112"/> <source>None</source> <translation>Nada</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="228"/> + <location filename="../../src/courtroom.cpp" line="197"/> <source>Additive</source> <translation>Aditivo</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="277"/> + <location filename="../../src/courtroom.cpp" line="248"/> <source>To front</source> <translation>Al frente</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="278"/> + <location filename="../../src/courtroom.cpp" line="249"/> <source>To behind</source> <translation>Al fondo</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="591"/> + <location filename="../../src/courtroom.cpp" line="579"/> <source>Select a character you wish to pair with.</source> <translation>Seleccione un personaje con el que desee emparejarse.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="596"/> + <location filename="../../src/courtroom.cpp" line="584"/> <source>Change the percentage offset of your character's position from the center of the screen.</source> <translation>Cambia el desplazamiento porcentual de la posición de tu personaje desde el centro de la pantalla.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="602"/> + <location filename="../../src/courtroom.cpp" line="590"/> <source>Change the order of appearance for your character.</source> <translation>Cambia el orden de aparición de tu personaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="607"/> + <location filename="../../src/courtroom.cpp" line="595"/> <source>Display the list of characters to pair with.</source> <translation>Muestra la lista de personajes para emparejar.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="665"/> + <location filename="../../src/courtroom.cpp" line="654"/> <source>Oops, you're muted!</source> <translation>¡Ups, estas silenciado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="679"/> + <location filename="../../src/courtroom.cpp" line="668"/> <source>Set your character's emote to play on your next message.</source> <translation>Configura el emote de tu personaje para usar en tu próximo mensaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="683"/> + <location filename="../../src/courtroom.cpp" line="672"/> <source>Set your character's supplementary background.</source> <translation>Establece el fondo suplementario de tu personaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="689"/> + <location filename="../../src/courtroom.cpp" line="678"/> <source>Set an 'iniswap', or an alternative character folder to refer to from your current character. Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/iniswaps.ini</source> <translation>Establece un 'iniswap', o una carpeta de caracteres alternativa para consultar desde su personaje actual. Edite escribiendo y presionando Enter, [X] para eliminar. Esto es guardado en base/characters/<charname>/iniswaps.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="698"/> - <location filename="../../src/courtroom.cpp" line="715"/> + <location filename="../../src/courtroom.cpp" line="687"/> + <location filename="../../src/courtroom.cpp" line="704"/> <source>Remove the currently selected iniswap from the list and return to the original character folder.</source> <translation>Elimina el iniswap seleccionado actualmente de la lista y regresa a la carpeta de caracteres original.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="706"/> + <location filename="../../src/courtroom.cpp" line="695"/> <source>Set a sound effect to play on your next 'Preanim'. Leaving it on Default will use the emote-defined sound (if any). Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/soundlist.ini</source> <translation>Establece un efecto de sonido para jugar en su próximo 'Preanim'. Dejarlo en Predeterminado usará el sonido definido por emoticones (si hay). Edite escribiendo y presionando Enter, [X] para eliminar. Esto es guardado en base/characters/<charname>/iniswaps.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="722"/> + <location filename="../../src/courtroom.cpp" line="711"/> <source>Choose an effect to play on your next spoken message. The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by char.ini [Options] category, effects = 'miscname' where it referes to misc/<miscname>/effects.ini to read the effects.</source> @@ -911,304 +951,314 @@ Los efectos se definen en theme/effects/effects.ini. Tu personaje puede definir char.ini [Opciones] categoría, effects = 'miscname' donde se refiere a misc/<miscname>/effects.ini para leer los efectos.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="749"/> + <location filename="../../src/courtroom.cpp" line="738"/> <source>Hold It!</source> <translation>¡Un Momento!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="750"/> - <location filename="../../src/courtroom.cpp" line="756"/> - <location filename="../../src/courtroom.cpp" line="762"/> + <location filename="../../src/courtroom.cpp" line="739"/> + <location filename="../../src/courtroom.cpp" line="745"/> + <location filename="../../src/courtroom.cpp" line="751"/> <source>When this is turned on, your next in-character message will be a shout!</source> <translatorcomment>Why the exclamation?</translatorcomment> <translation>Cuando esto es activado, tu próximo mensaje del personaje será un grito.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="755"/> + <location filename="../../src/courtroom.cpp" line="744"/> <source>Objection!</source> <translation>¡Protesto!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="761"/> + <location filename="../../src/courtroom.cpp" line="750"/> <source>Take That!</source> <translation>¡Toma Eso!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="769"/> + <location filename="../../src/courtroom.cpp" line="758"/> <source>Toggle between server chat and global AO2 chat.</source> <translation>Alternar entre el chat del servidor y el chat global.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="773"/> - <location filename="../../src/courtroom.cpp" line="777"/> - <location filename="../../src/courtroom.cpp" line="783"/> - <location filename="../../src/courtroom.cpp" line="787"/> + <location filename="../../src/courtroom.cpp" line="762"/> + <location filename="../../src/courtroom.cpp" line="766"/> + <location filename="../../src/courtroom.cpp" line="772"/> + <location filename="../../src/courtroom.cpp" line="776"/> <source>This will display the animation in the viewport as soon as it is pressed.</source> <translation>Esto mostrará la animación en el viewport tan pronto como se presione.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="781"/> + <location filename="../../src/courtroom.cpp" line="770"/> <source>Guilty!</source> <translation>¡Culpable!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="794"/> + <location filename="../../src/courtroom.cpp" line="783"/> <source>Bring up the Character Select Screen and change your character.</source> <translation>Abre la pantalla de selección de personaje y cambia tu personaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="800"/> + <location filename="../../src/courtroom.cpp" line="789"/> <source>Refresh the theme and update all of the ui elements to match.</source> <translation>Actualiza el tema y todos los elementos de la interfaz de usuario para que coincidan.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="806"/> + <location filename="../../src/courtroom.cpp" line="795"/> <source>Request the attention of the current server's moderator.</source> <translation>Solicite la atención del moderador actual del servidor.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="812"/> + <location filename="../../src/courtroom.cpp" line="801"/> <source>Allows you to change various aspects of the client.</source> <translation>Le permite cambiar varios aspectos del cliente.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="818"/> + <location filename="../../src/courtroom.cpp" line="807"/> <source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source> <translation>Una interfaz para ayudarlo a anunciar un caso (debe ser un CM para poder anunciar casos)</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="824"/> + <location filename="../../src/courtroom.cpp" line="813"/> <source>Switch between Areas and Music lists</source> <translation>Cambiar entre áreas y listas de música</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="829"/> + <location filename="../../src/courtroom.cpp" line="818"/> <source>Play a single-shot animation as defined by the emote when checked.</source> <translation>Reproduzca una animación de un solo disparo según lo definido por el emote cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="833"/> + <location filename="../../src/courtroom.cpp" line="822"/> <source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source> <translation>Si se marca preanim, muestre el texto de entrada inmediatamente mientras la animación se reproduce simultáneamente.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="837"/> + <location filename="../../src/courtroom.cpp" line="826"/> <source>Mirror your character's emotes when checked.</source> <translation>Refleja los gestos de tu personaje cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="841"/> + <location filename="../../src/courtroom.cpp" line="830"/> <source>Add text to your last spoken message when checked.</source> <translation>Agregar texto a su último mensaje hablado cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="845"/> + <location filename="../../src/courtroom.cpp" line="834"/> <source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source> <translation>No escucha llamadas de moderación cuando esté marcado, evitando que reproduzcan sonidos o centrando la atención en la ventana.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="849"/> + <location filename="../../src/courtroom.cpp" line="838"/> <source>Lets you receive case alerts when enabled. (You can set your preferences in the Settings!)</source> <translation>Le permite recibir alertas de casos cuando está habilitado. (¡Puedes configurar tus preferencias en la Configuración!)</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="854"/> + <location filename="../../src/courtroom.cpp" line="843"/> <source>Display customized shownames for all users when checked.</source> <translation>Mostrar nombres personalizados para todos los usuarios cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="857"/> + <location filename="../../src/courtroom.cpp" line="846"/> <source>Custom Shout!</source> <translation>¡Grito personalizado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="860"/> + <location filename="../../src/courtroom.cpp" line="849"/> <source>This will display the custom character-defined animation in the viewport as soon as it is pressed. To make one, your character's folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source> <translation>Esto mostrará la animación de personaje personalizada definida en el viewport tan pronto como se presione. Para hacer una, la carpeta de tu personaje debe contener efectos personalizados [webp/apng/gif/png]. Y efectos personalizados de sonido [wav/ogg/opus]</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="868"/> + <location filename="../../src/courtroom.cpp" line="857"/> <source>Play realization sound and animation in the viewport on the next spoken message when checked.</source> <translation>Reproduzca sonido y animación de realización en la ventana gráfica en el siguiente mensaje hablado cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="874"/> + <location filename="../../src/courtroom.cpp" line="863"/> <source>Shake the screen on next spoken message when checked.</source> <translation>Agite la pantalla en el siguiente mensaje hablado cuando esté marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="880"/> + <location filename="../../src/courtroom.cpp" line="869"/> <source>Display the list of character folders you wish to mute.</source> <translation>Muestra la lista de carpetas de caracteres que desea silenciar.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="884"/> - <location filename="../../src/courtroom.cpp" line="892"/> + <location filename="../../src/courtroom.cpp" line="873"/> + <location filename="../../src/courtroom.cpp" line="881"/> <source>Increase the health bar.</source> <translation>Aumenta la barra de salud.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="888"/> - <location filename="../../src/courtroom.cpp" line="896"/> + <location filename="../../src/courtroom.cpp" line="877"/> + <location filename="../../src/courtroom.cpp" line="885"/> <source>Decrease the health bar.</source> <translation>Disminuye la barra de salud.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="900"/> + <location filename="../../src/courtroom.cpp" line="889"/> <source>Change the text color of the spoken message. You can also select a part of your currently typed message and use the dropdown to change its color!</source> <translation>Cambia el color del texto en el chat IC. ¡También puede seleccionar una parte de su mensaje escrito actualmente y usar el menú desplegable para cambiar su color!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="914"/> + <location filename="../../src/courtroom.cpp" line="903"/> <source>Return back to the server list.</source> <translation>Regresar a la lista de servidores.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="927"/> + <location filename="../../src/courtroom.cpp" line="916"/> <source>Become a spectator. You won't be able to interact with the in-character screen.</source> - <translation>Conviértete en espectador. No podrás interactuar con la pantalla del personaje.</translation> + <translation>Conviértete en espectador. No podrás interactuar como personaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> - <location filename="../../src/courtroom.cpp" line="3372"/> + <location filename="../../src/courtroom.cpp" line="1514"/> + <location filename="../../src/courtroom.cpp" line="3452"/> <source>CLIENT</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3090"/> - <location filename="../../src/courtroom.cpp" line="4508"/> - <location filename="../../src/courtroom.cpp" line="4515"/> + <location filename="../../src/courtroom.cpp" line="2257"/> + <location filename="../../src/courtroom.cpp" line="2259"/> + <source>has presented evidence</source> + <translation>ha presentado evidencia</translation> + </message> + <message> + <location filename="../../src/courtroom.cpp" line="3166"/> + <location filename="../../src/courtroom.cpp" line="3168"/> <source>has played a song</source> <translation>ha reproducido la canción</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3224"/> + <location filename="../../src/courtroom.cpp" line="3302"/> <source>You will now pair up with %1 if they also choose your character in return.</source> <translation>Ahora se emparejará con %1 si también eligen a su personaje.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3230"/> + <location filename="../../src/courtroom.cpp" line="3310"/> <source>You are no longer paired with anyone.</source> <translation>Ya no estás emparejado con nadie.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3235"/> + <location filename="../../src/courtroom.cpp" line="3315"/> <source>Are you sure you typed that well? The char ID could not be recognised.</source> <translation>¿Estás seguro de que lo escribiste bien? El ID de personaje no pudo ser reconocido.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3250"/> + <location filename="../../src/courtroom.cpp" line="3330"/> <source>You have set your offset to </source> <translation>Ha configurado su desplazamiento en </translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3257"/> + <location filename="../../src/courtroom.cpp" line="3337"/> <source>Your offset must be between -100% and 100%!</source> <translation>¡Su desplazamiento debe estar entre -100% y 100%!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3262"/> + <location filename="../../src/courtroom.cpp" line="3342"/> <source>That offset does not look like one.</source> <translation>Ese desplazamiento no se parece a uno.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3268"/> + <location filename="../../src/courtroom.cpp" line="3348"/> <source>You switched your music and area list.</source> <translation>Cambiaste tu lista de música y área.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3275"/> + <location filename="../../src/courtroom.cpp" line="3355"/> <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source> <translation>Ha habilitado forzosamente funciones que el servidor puede no admitir. Es posible que no pueda hablar IC, o peor, debido a esto.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3289"/> + <location filename="../../src/courtroom.cpp" line="3369"/> <source>Your pre-animations interrupt again.</source> <translation>Sus pre-animaciones interrumpen de nuevo.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3292"/> + <location filename="../../src/courtroom.cpp" line="3372"/> <source>Your pre-animations will not interrupt text.</source> <translation>Sus pre-animaciones no interrumpirán el texto.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3303"/> + <location filename="../../src/courtroom.cpp" line="3383"/> <source>Couldn't open chatlog.txt to write into.</source> <translation>No se pudo abrir chatlog.txt para escribir.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3316"/> + <location filename="../../src/courtroom.cpp" line="3396"/> <source>The IC chatlog has been saved.</source> <translation>El chat IC se ha guardado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3329"/> + <location filename="../../src/courtroom.cpp" line="3409"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there.</source> <translation>¡No tienes una carpeta `base/cases /`! Ha sido creada para ti. Pero debido a que no existia la carpeta, tampoco habían casos guardados ahí.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3344"/> + <location filename="../../src/courtroom.cpp" line="3424"/> <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini. Cases you can load: %1</source> <translation>¡Debe dar un nombre de archivo para cargar (no se necesita extensión)! Asegúrese de que esté en la carpeta `base/cases/` y de que tenga el formato correcto. Casos que puede cargar: %1</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3372"/> + <location filename="../../src/courtroom.cpp" line="3453"/> <source>Case made by %1.</source> <translation>Caso hecho por %1.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3382"/> + <location filename="../../src/courtroom.cpp" line="3462"/> <source>Navigate to %1 for the CM doc.</source> <translation>Navegue a %1 para el documento del CM.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3396"/> - <location filename="../../src/courtroom.cpp" line="3398"/> + <location filename="../../src/courtroom.cpp" line="3476"/> + <location filename="../../src/courtroom.cpp" line="3478"/> <location filename="../../src/evidence.cpp" line="762"/> <location filename="../../src/evidence.cpp" line="764"/> <source>UNKNOWN</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3406"/> + <location filename="../../src/courtroom.cpp" line="3486"/> <source>Your case "%1" was loaded!</source> <translation>Su caso "%1" fue cargado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3997"/> + <location filename="../../src/courtroom.cpp" line="4084"/> + <source>Play Random Song</source> + <translation>Reproducir canción aleatoria</translation> + </message> + <message> + <location filename="../../src/courtroom.cpp" line="4086"/> <source>Expand All Categories</source> <translation>Expandir todas las categorías</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3999"/> + <location filename="../../src/courtroom.cpp" line="4088"/> <source>Collapse All Categories</source> <translation>Contraer todas las categorías</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4003"/> + <location filename="../../src/courtroom.cpp" line="4092"/> <source>Fade Out Previous</source> - <translation>Desvanecerse Anterior</translation> + <translation>Desvanecer Anterior</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4009"/> + <location filename="../../src/courtroom.cpp" line="4098"/> <source>Fade In</source> <translation>Fundirse</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4015"/> + <location filename="../../src/courtroom.cpp" line="4104"/> <source>Synchronize</source> <translation>Sincronizar</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4285"/> + <location filename="../../src/courtroom.cpp" line="4407"/> <source>Default</source> <translation>Predeterminado</translation> </message> @@ -1219,7 +1269,7 @@ Cases you can load: </source> Casos que puede cargar: </translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3356"/> + <location filename="../../src/courtroom.cpp" line="3436"/> <source>Too many arguments to load a case! You only need one filename, without extension.</source> <translation>¡Demasiados argumentos para cargar un caso! Solo necesita un nombre de archivo, sin extensión.</translation> </message> @@ -1244,34 +1294,34 @@ Casos que puede cargar: </translation> <translation type="obsolete">" fue cargado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3418"/> + <location filename="../../src/courtroom.cpp" line="3498"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it.</source> <translation>¡No tienes una carpeta `base/cases /`! Fue creada para ti.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3433"/> + <location filename="../../src/courtroom.cpp" line="3513"/> <source>You need to give a filename to save (extension not needed) and the courtroom status!</source> <translation>¡Debe dar un nombre de archivo para guardar (no se necesita la extensión) y el estado de la sala del tribunal!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3443"/> + <location filename="../../src/courtroom.cpp" line="3523"/> <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source> <translatorcomment>why two exclamations, seems excesive.</translatorcomment> <translation>¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3470"/> + <location filename="../../src/courtroom.cpp" line="3550"/> <source>Succesfully saved, edit doc and cmdoc link on the ini!</source> <translation>¡Guardado con éxito, puede editar el doc y doc link en el archivo ini!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3497"/> + <location filename="../../src/courtroom.cpp" line="3577"/> <source>Master</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="767"/> - <location filename="../../src/courtroom.cpp" line="3504"/> + <location filename="../../src/courtroom.cpp" line="756"/> + <location filename="../../src/courtroom.cpp" line="3584"/> <source>Server</source> <translation></translation> </message> @@ -1284,28 +1334,28 @@ Casos que puede cargar: </translation> <translation type="obsolete">¡Demasiados argumentos para salvar un caso! Solo necesita un nombre de archivo sin extensión y el estado de la sala del tribunal.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4446"/> + <location filename="../../src/courtroom.cpp" line="4573"/> <source>Reason:</source> <translation>Razón:</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4447"/> + <location filename="../../src/courtroom.cpp" line="4574"/> <source>Call Moderator</source> <translation>Llamar Moderador</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4455"/> - <location filename="../../src/courtroom.cpp" line="4459"/> + <location filename="../../src/courtroom.cpp" line="4582"/> + <location filename="../../src/courtroom.cpp" line="4586"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4455"/> + <location filename="../../src/courtroom.cpp" line="4582"/> <source>You must provide a reason.</source> <translation>Debes proporcionar una razón.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4459"/> + <location filename="../../src/courtroom.cpp" line="4586"/> <source>The message is too long.</source> <translation>El mensaje es muy largo.</translation> </message> @@ -1358,12 +1408,12 @@ Se le preguntará si hay cambios no guardados.</translation> <message> <location filename="../../src/evidence.cpp" line="104"/> <source>Bring up the Evidence screen.</source> - <translation>Abre la ventana para evidencia.</translation> + <translation>Abrir la ventana de evidencia.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="147"/> <source>Switch evidence to private inventory.</source> - <translation>Cambiar la evidencia al inventario privado.</translation> + <translation>Enviar la evidencia al inventario privado.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="151"/> @@ -1465,63 +1515,77 @@ Descripción: <context> <name>Lobby</name> <message> - <location filename="../../src/lobby.cpp" line="12"/> + <location filename="../../src/lobby.cpp" line="14"/> <source>Attorney Online 2</source> <translation></translation> </message> <message> - <location filename="../../src/lobby.cpp" line="31"/> + <location filename="../../src/lobby.cpp" line="33"/> <source>Search</source> <translation>Buscar</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="39"/> + <location filename="../../src/lobby.cpp" line="41"/> <source>Name</source> <translation>Nombre</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="94"/> + <location filename="../../src/lobby.cpp" line="96"/> <source>It doesn't look like your client is set up correctly. Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder?</source> <translation>No parece que su cliente esté configurado correctamente. ¿Descargó todos los recursos correctamente desde tiny.cc/getao, incluida la gran carpeta 'base'?</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="123"/> + <location filename="../../src/lobby.cpp" line="125"/> <source>Version: %1</source> <translation>Versión: %1</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="129"/> + <location filename="../../src/lobby.cpp" line="131"/> <source>Settings</source> <translation>Ajustes</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="132"/> + <location filename="../../src/lobby.cpp" line="134"/> <source>Allows you to change various aspects of the client.</source> <translation>Le permite cambiar varios aspectos del cliente.</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="176"/> + <location filename="../../src/lobby.cpp" line="178"/> <source>Loading</source> <translation>Cargando</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="180"/> + <location filename="../../src/lobby.cpp" line="182"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="365"/> + <location filename="../../src/lobby.cpp" line="361"/> + <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the BASS audio engine.<br>APNG plugin loaded: %3<p>Built on %4</source> + <translation><h2>Attorney Online %1</h2>El simulador de drama legal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desarrollo del cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Prueba de control de calidad:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimiento especial:</b><br>CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.<p>El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.<p>Usando Qt versión %2 con el motor de audio BASS.<br>Plugin APNG cargado: %3<p>Compilado el %4</translation> + </message> + <message> + <location filename="../../src/lobby.cpp" line="393"/> + <source>Yes</source> + <translation>Sí</translation> + </message> + <message> + <location filename="../../src/lobby.cpp" line="393"/> + <source>No</source> + <translation></translation> + </message> + <message> <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> - <translation><h2>Attorney Online %1</h2>El simulador de drama legal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desarrollo del cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Prueba de control de calidad:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimiento especial:</b><br>CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.<p>El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.<p>Usando Qt versión %2 con el motor de audio %3.<p>Compilado el %4</translation> + <translation type="obsolete"><h2>Attorney Online %1</h2>El simulador de drama legal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desarrollo del cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Prueba de control de calidad:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimiento especial:</b><br>CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.<p>El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.<p>Usando Qt versión %2 con el motor de audio %3.<p>Compilado el %4</translation> </message> <message> <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC and MaximumVolty (2.8 release); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> <translation type="obsolete"><h2>Attorney Online %1</h2>El simulador de drama legal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desarrollo del cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Prueba de control de calidad:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimiento especial:</b><br>CrazyJC y MaximumVolty (versión 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, creadores de contenido y toda la comunidad AO2.<p>El proyecto Attorney Online novela visual en red tiene copyright (c) 2016-2020 Attorney Online developers. Se aplican licencias de código abierto. Todos los demás activos son propiedad de sus respectivos dueños.<p>Usando Qt versión %2 con el motor de audio %3.<p>Compilado el %4</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="398"/> + <location filename="../../src/lobby.cpp" line="395"/> <source>About</source> <translation>Acerca de</translation> </message> @@ -1534,13 +1598,13 @@ Did you download all resources correctly from tiny.cc/getao, including the large <translation type="obsolete"><h2>Attorney Online %1</h2>El simulador de drama legal<p><b>Código fuente:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https: //github.com/AttorneyOnline/AO2-Client</a><p><b>Desarrollo mayor:</b> <br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Agradecimiento especial:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (diseño de interfaz de usuario), Draxirch (diseño de interfaz de usuario), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="540"/> + <location filename="../../src/lobby.cpp" line="537"/> <source>Online: %1/%2</source> <translation>En línea: %1/%2</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="142"/> - <location filename="../../src/lobby.cpp" line="436"/> + <location filename="../../src/lobby.cpp" line="144"/> + <location filename="../../src/lobby.cpp" line="433"/> <source>Offline</source> <translation>Fuera de línea</translation> </message> @@ -1555,9 +1619,8 @@ Did you download all resources correctly from tiny.cc/getao, including the large <translation></translation> </message> <message> - <location filename="../../src/chatlogpiece.cpp" line="55"/> <source> has played a song: </source> - <translation> ha comenzado a reproducir la canción: </translation> + <translation type="obsolete"> ha comenzado a reproducir la canción: </translation> </message> </context> <context> diff --git a/resource/translations/ao_pt.qm b/resource/translations/ao_pt.qm Binary files differindex dc8bc70d..1ff02390 100644 --- a/resource/translations/ao_pt.qm +++ b/resource/translations/ao_pt.qm diff --git a/resource/translations/ao_pt.ts b/resource/translations/ao_pt.ts index a3991f8b..2548d832 100644 --- a/resource/translations/ao_pt.ts +++ b/resource/translations/ao_pt.ts @@ -44,44 +44,44 @@ Tenha um bom dia.</translation> <translation>Carregando</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="334"/> - <location filename="../../src/packet_distribution.cpp" line="483"/> + <location filename="../../src/packet_distribution.cpp" line="337"/> + <location filename="../../src/packet_distribution.cpp" line="486"/> <source>Loading chars: %1/%2</source> <translation>Carregando personagens: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="381"/> + <location filename="../../src/packet_distribution.cpp" line="384"/> <source>Loading evidence: %1/%2</source> <translation>Carregando evidências: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="416"/> - <location filename="../../src/packet_distribution.cpp" line="510"/> + <location filename="../../src/packet_distribution.cpp" line="419"/> + <location filename="../../src/packet_distribution.cpp" line="513"/> <source>Loading music: %1/%2</source> <translation>Carregando músicas: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="692"/> + <location filename="../../src/packet_distribution.cpp" line="696"/> <source>You have been kicked from the server. Reason: %1</source> <translation>Você foi expulso do servidor. Motivo: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="700"/> + <location filename="../../src/packet_distribution.cpp" line="704"/> <source>You have been banned from the server. Reason: %1</source> <translation>Você foi banido do servidor. Motivo: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="708"/> + <location filename="../../src/packet_distribution.cpp" line="712"/> <source>You are banned on this server. Reason: %1</source> <translation>Você foi banido neste servidor. @@ -174,43 +174,73 @@ Motivo: %1</translation> <translation>A quantidade de mensagens que o chat do IC manterá antes de excluir as mensagens mais antigas. Um valor igual ou inferior a 0 conta como 'infinito'.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="133"/> + <location filename="../../src/aooptionsdialog.cpp" line="125"/> + <source>Log newline:</source> + <translation>Nova linha no log:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="127"/> + <source>If ticked, new messages will appear separated, with the message coming on the next line after the name. When unticked, it displays it as 'name: message'.</source> + <translation>Se marcada, novas mensagens aparecerão separadamente e a mensagem aparecerá na próxima linha após o nome. Quando desmarcado, ele mostra como 'nome: mensagem'.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="140"/> + <source>Log margin:</source> + <translation>Margem no log:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="141"/> + <source>The distance in pixels between each entry in the IC log. Default: 0.</source> + <translation>A distância em pixels entre cada entrada no log IC. Padrão: 0.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="155"/> + <source>Log timestamp:</source> + <translation>Timestamp no registro:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="157"/> + <source>If ticked, log will contain a timestamp in UTC before the name.</source> + <translation>Se marcado, o registro conterá um carimbo de tempo em UTC antes do nome.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="176"/> <source>Default username:</source> <translation>Nome de usuário padrão:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="135"/> + <location filename="../../src/aooptionsdialog.cpp" line="178"/> <source>Your OOC name will be automatically set to this value when you join a server.</source> <translation>Seu nome OOC será automaticamente definido com esse valor quando você ingressar em um servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="148"/> + <location filename="../../src/aooptionsdialog.cpp" line="191"/> <source>Custom shownames:</source> <translation>Nomes personalizados:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="150"/> + <location filename="../../src/aooptionsdialog.cpp" line="193"/> <source>Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names.</source> <translatorcomment>'Custom shownames' changed to 'Shownames' because that's the actual name</translatorcomment> <translation>Fornece o valor padrão para a caixa de seleção 'Shownames' no jogo, que determina se o cliente deve exibir nomes personalizados nos personagens.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="170"/> + <location filename="../../src/aooptionsdialog.cpp" line="213"/> <source>Backup MS:</source> <translation>MS de backup:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="172"/> + <location filename="../../src/aooptionsdialog.cpp" line="215"/> <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source> <translation>Se as pesquisas internas do servidor falharem, o jogo tentará o endereço fornecido aqui e o usará como um endereço de servidor principal de backup.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="185"/> + <location filename="../../src/aooptionsdialog.cpp" line="228"/> <source>Discord:</source> <translation></translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="187"/> + <location filename="../../src/aooptionsdialog.cpp" line="230"/> <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source> <translation>Permite que outras pessoas no Discord vejam em que servidor você está, qual personagem está jogando e há quanto tempo está jogando.</translation> </message> @@ -223,12 +253,12 @@ Motivo: %1</translation> <translation type="obsolete">Permite agitar e piscar. Desative isso se você tiver preocupações ou problemas com fotosensibilidade e/ou convulsões.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="200"/> + <location filename="../../src/aooptionsdialog.cpp" line="243"/> <source>Language:</source> <translation>Língua:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="202"/> + <location filename="../../src/aooptionsdialog.cpp" line="245"/> <source>Sets the language if you don't want to use your system language.</source> <translation>Define o idioma se você não quiser usar o idioma do sistema.</translation> </message> @@ -237,47 +267,47 @@ Motivo: %1</translation> <translation type="obsolete">Habilite para adicionar uma pequena pausa nos sinais de pontuação.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="340"/> + <location filename="../../src/aooptionsdialog.cpp" line="383"/> <source>Callwords</source> <translation>Palavras-chave</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="367"/> + <location filename="../../src/aooptionsdialog.cpp" line="410"/> <source><html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html></source> <translation><html><head/><body>Digite quantas palavras-chave você desejar. Estes não diferenciam maiúsculas de minúsculas. Certifique-se de deixar cada palavra chave em sua própria linha!<br>Não deixe uma linha com um espaço no final - você será alertado toda vez que alguém usar um espaço em suas mensagens.</body></html></translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="377"/> + <location filename="../../src/aooptionsdialog.cpp" line="420"/> <source>Audio</source> <translation>Áudio</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="391"/> + <location filename="../../src/aooptionsdialog.cpp" line="434"/> <source>Audio device:</source> <translation>Dispositivo de áudio:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="392"/> + <location filename="../../src/aooptionsdialog.cpp" line="435"/> <source>Sets the audio device for all sounds.</source> <translation>Define o dispositivo de áudio para todos os sons.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="435"/> + <location filename="../../src/aooptionsdialog.cpp" line="468"/> <source>Music:</source> <translation>Música:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="436"/> + <location filename="../../src/aooptionsdialog.cpp" line="469"/> <source>Sets the music's default volume.</source> <translation>Define o volume padrão da música.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="450"/> + <location filename="../../src/aooptionsdialog.cpp" line="483"/> <source>SFX:</source> <translation>SFX:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="452"/> + <location filename="../../src/aooptionsdialog.cpp" line="485"/> <source>Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'.</source> <translation>Define o volume padrão do SFX. Interjeições e efeitos sonoros reais contam como 'SFX'.</translation> </message> @@ -306,47 +336,47 @@ Motivo: %1</translation> <translation type="obsolete">Define o volume padrão para sons SFX, como interjeições ou outros efeitos sonoros de personagens.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="466"/> + <location filename="../../src/aooptionsdialog.cpp" line="499"/> <source>Blips:</source> <translation></translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="468"/> + <location filename="../../src/aooptionsdialog.cpp" line="501"/> <source>Sets the volume of the blips, the talking sound effects.</source> <translation>Define o volume dos blips, os efeitos sonoros de fala.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="490"/> + <location filename="../../src/aooptionsdialog.cpp" line="523"/> <source>Blip rate:</source> <translation>Taxa de blip:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="492"/> + <location filename="../../src/aooptionsdialog.cpp" line="525"/> <source>Sets the delay between playing the blip sounds.</source> <translation>Define o atraso entre a reprodução dos sons de blip.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="507"/> + <location filename="../../src/aooptionsdialog.cpp" line="540"/> <source>Blank blips:</source> <translation>Blips em branco:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="509"/> + <location filename="../../src/aooptionsdialog.cpp" line="542"/> <source>If true, the game will play a blip sound even when a space is 'being said'.</source> <translation>Se ativado, o jogo emitirá um sinal sonoro, mesmo quando um espaço estiver sendo "dito".</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="521"/> + <location filename="../../src/aooptionsdialog.cpp" line="554"/> <source>Enable Looping SFX:</source> <translation>Ative o SFX em loop:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="522"/> + <location filename="../../src/aooptionsdialog.cpp" line="555"/> <source>If true, the game will allow looping sound effects to play on preanimations.</source> <translation>Se ativado, o jogo permitirá que efeitos sonoros em loop sejam reproduzidos em pré-animações.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="534"/> + <location filename="../../src/aooptionsdialog.cpp" line="567"/> <source>Kill Music On Objection:</source> <translation>Parar a música no protesto:</translation> </message> @@ -355,191 +385,201 @@ Motivo: %1</translation> <translation type="obsolete">Se ativado, o jogo interrompe a música quando alguém protestar , como nos jogos reais.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="208"/> + <location filename="../../src/aooptionsdialog.cpp" line="251"/> <source> - Keep current setting</source> <translation> - Mantenha as configurações atuais</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="222"/> + <location filename="../../src/aooptionsdialog.cpp" line="265"/> <source>Allow Screenshake:</source> <translation>Permitir screenshake:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="224"/> + <location filename="../../src/aooptionsdialog.cpp" line="267"/> <source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> <translation>Permite o tremor de tela (AVISO: Pode causar convulsões devido à imagens tremidas).</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="236"/> + <location filename="../../src/aooptionsdialog.cpp" line="279"/> <source>Allow Effects:</source> <translation>Permitir efeitos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="238"/> + <location filename="../../src/aooptionsdialog.cpp" line="281"/> <source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> <translation>Permite efeitos de tela (AVISO: Pode causar convulsões devido à imagens tremidas)..</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="250"/> + <location filename="../../src/aooptionsdialog.cpp" line="293"/> <source>Network Frame Effects:</source> <translation>Envie efeitos para o servidor:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="251"/> + <location filename="../../src/aooptionsdialog.cpp" line="294"/> <source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source> <translation>Envie vibrações, flashes e sons na tela, conforme definido no char.ini pela rede. Funciona apenas para servidores que suportam essa funcionalidade.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="264"/> + <location filename="../../src/aooptionsdialog.cpp" line="307"/> <source>Colors in IC Log:</source> <translation>Cores no Log IC:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="266"/> + <location filename="../../src/aooptionsdialog.cpp" line="309"/> <source>Use the markup colors in the server IC chatlog.</source> <translation>Permitir cores no chat do IC no servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="277"/> + <location filename="../../src/aooptionsdialog.cpp" line="320"/> <source>Sticky Sounds:</source> - <translation type="unfinished">Manter sons:</translation> + <translation>Manter sons:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="279"/> + <location filename="../../src/aooptionsdialog.cpp" line="322"/> <source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source> - <translation type="unfinished">Marque para evitar que o som do menu suspenso apague o som após a reprodução.</translation> + <translation>Marque para evitar que o som do menu suspenso apague o som após a reprodução.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="291"/> + <location filename="../../src/aooptionsdialog.cpp" line="334"/> <source>Sticky Effects:</source> - <translation type="unfinished">Manter efeitos:</translation> + <translation>Manter efeitos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="293"/> + <location filename="../../src/aooptionsdialog.cpp" line="336"/> <source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source> - <translation type="unfinished">Ative-o para impedir que o menu suspenso de efeito exclua o efeito após reproduzi-lo.</translation> + <translation>Ative-o para impedir que o menu suspenso de efeito exclua o efeito após reproduzi-lo.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="306"/> + <location filename="../../src/aooptionsdialog.cpp" line="349"/> <source>Sticky Preanims:</source> - <translation type="unfinished">Manter preanims:</translation> + <translation>Manter preanims:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="308"/> + <location filename="../../src/aooptionsdialog.cpp" line="351"/> <source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source> - <translation type="unfinished">Ative-o para impedir que a caixa de seleção de pré-animação seja desmarcada após a execução do emote.</translation> + <translation>Ative-o para impedir que a caixa de seleção de pré-animação seja desmarcada após a execução do emote.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="320"/> + <location filename="../../src/aooptionsdialog.cpp" line="363"/> <source>Custom Chatboxes:</source> <translation>Caixas de bate-papo personalizadas:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="322"/> + <location filename="../../src/aooptionsdialog.cpp" line="365"/> <source>Turn this on to allow characters to define their own custom chat box designs.</source> <translation>Ative isso para permitir que os personagens tenham as suas próprias caixas de bate-papo personalizadas.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="500"/> + <location filename="../../src/aooptionsdialog.cpp" line="533"/> <source>Play a blip sound "once per every X symbols", where X is the blip rate.</source> <translation>Reproduz um som de blip "uma vez para cada símbolo X", em que X é a taxa de blip.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="536"/> + <location filename="../../src/aooptionsdialog.cpp" line="569"/> <source>If true, AO2 will stop the music for you when you or someone else does 'Objection!'.</source> <translation>Se ativado, o AO2 interromperá a música quando você ou outra pessoa fizer uma 'Protesto!'.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="548"/> + <location filename="../../src/aooptionsdialog.cpp" line="581"/> <source>Casing</source> <translation>Caso</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="565"/> + <location filename="../../src/aooptionsdialog.cpp" line="598"/> <source>This server supports case alerts.</source> <translation>Este servidor suporta anúncios de casos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="568"/> + <location filename="../../src/aooptionsdialog.cpp" line="601"/> <source>This server does not support case alerts.</source> <translation>Este servidor não suporta alertas de caso.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="569"/> + <location filename="../../src/aooptionsdialog.cpp" line="602"/> <source>Pretty self-explanatory.</source> <translation>Bastante auto-explicativo.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="578"/> + <location filename="../../src/aooptionsdialog.cpp" line="611"/> <source>Casing:</source> <translation>Caso:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="580"/> + <location filename="../../src/aooptionsdialog.cpp" line="613"/> <source>If checked, you will get alerts about case announcements.</source> <translation>Se marcado, você será alertado quando houverem anúncios de casos.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="596"/> + <location filename="../../src/aooptionsdialog.cpp" line="629"/> <source>Defense:</source> <translation>Defesa:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="597"/> + <location filename="../../src/aooptionsdialog.cpp" line="630"/> <source>If checked, you will get alerts about case announcements if a defense spot is open.</source> <translation>Se marcado, você receberá alertas sobre os anúncios de casos, se um ponto de defesa estiver aberto.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="611"/> + <location filename="../../src/aooptionsdialog.cpp" line="644"/> <source>Prosecution:</source> <translation>Promotor:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="613"/> + <location filename="../../src/aooptionsdialog.cpp" line="646"/> <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source> <translation>Se marcado, você receberá alertas sobre os anúncios de casos, se uma posição de promotor estiver disponível.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="627"/> + <location filename="../../src/aooptionsdialog.cpp" line="660"/> <source>Judge:</source> <translation>Juíz:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="628"/> + <location filename="../../src/aooptionsdialog.cpp" line="661"/> <source>If checked, you will get alerts about case announcements if the judge spot is open.</source> <translation>Se marcado, você receberá alertas sobre os anúncios de casos, se o local do juíz: estiver aberto.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="642"/> + <location filename="../../src/aooptionsdialog.cpp" line="675"/> <source>Juror:</source> <translation>Jurado:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="643"/> + <location filename="../../src/aooptionsdialog.cpp" line="676"/> <source>If checked, you will get alerts about case announcements if a juror spot is open.</source> <translation>Se marcado, você receberá alertas sobre os anúncios de casos, se um local do jurado estiver aberto.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="657"/> + <location filename="../../src/aooptionsdialog.cpp" line="690"/> <source>Stenographer:</source> <translation>Estenógrafo:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="659"/> + <location filename="../../src/aooptionsdialog.cpp" line="692"/> <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source> <translation>Se marcado, você receberá alertas sobre anúncios de casos, se um local de estenógrafo estiver aberto.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="673"/> + <location filename="../../src/aooptionsdialog.cpp" line="706"/> <source>CM:</source> <translation>CM:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="675"/> + <location filename="../../src/aooptionsdialog.cpp" line="708"/> <source>If checked, you will appear amongst the potential CMs on the server.</source> <translation>Se marcado, você aparecerá entre os CMs possíveis no servidor.</translation> </message> <message> + <location filename="../../src/aooptionsdialog.cpp" line="738"/> + <source>Automatic Logging:</source> + <translation>Registro automático:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="740"/> + <source>If checked, all logs will be automatically written in the /logs folder.</source> + <translation>Se marcado, todos os registros serão automaticamente salvos na pasta logs.</translation> + </message> + <message> <source>Witness:</source> <translation type="obsolete">Testemunha:</translation> </message> @@ -548,12 +588,12 @@ Motivo: %1</translation> <translation type="obsolete">Se marcado, você aparecerá entre as testemunhas em potencial no servidor.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="689"/> + <location filename="../../src/aooptionsdialog.cpp" line="722"/> <source>Hosting cases:</source> <translation>Casos:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="691"/> + <location filename="../../src/aooptionsdialog.cpp" line="724"/> <source>If you're a CM, enter what cases you are willing to host.</source> <translation>Se você é um CM, insira os casos que deseja hospedar.</translation> </message> @@ -596,7 +636,7 @@ Motivo: %1</translation> </message> <message> <location filename="../../src/charselect.cpp" line="30"/> - <location filename="../../src/courtroom.cpp" line="175"/> + <location filename="../../src/courtroom.cpp" line="144"/> <source>Search</source> <translation>Pesquisar</translation> </message> @@ -612,7 +652,7 @@ Motivo: %1</translation> <translation>Em uso</translation> </message> <message> - <location filename="../../src/charselect.cpp" line="232"/> + <location filename="../../src/charselect.cpp" line="236"/> <source>Generating chars: %1/%2</source> <translation>Gerando personagens: @@ -623,13 +663,13 @@ Motivo: %1</translation> <translation type="obsolete">Não foi possível encontrar %1</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="148"/> + <location filename="../../src/courtroom.cpp" line="117"/> <source>Showname</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="152"/> + <location filename="../../src/courtroom.cpp" line="121"/> <source>Message</source> <translation>Mensagem</translation> </message> @@ -638,37 +678,37 @@ Motivo: %1</translation> <translation type="obsolete">Mensagem OOC</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="167"/> + <location filename="../../src/courtroom.cpp" line="136"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="217"/> + <location filename="../../src/courtroom.cpp" line="186"/> <source>Pre</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="220"/> + <location filename="../../src/courtroom.cpp" line="189"/> <source>Flip</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="233"/> - <location filename="../../src/courtroom.cpp" line="815"/> + <location filename="../../src/courtroom.cpp" line="202"/> + <location filename="../../src/courtroom.cpp" line="804"/> <source>Casing</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="238"/> + <location filename="../../src/courtroom.cpp" line="207"/> <source>Shownames</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="241"/> + <location filename="../../src/courtroom.cpp" line="210"/> <source>No Interrupt</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation></translation> @@ -710,74 +750,74 @@ Motivo: %1</translation> <translation type="obsolete">Ciano</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="274"/> + <location filename="../../src/courtroom.cpp" line="245"/> <source>% offset</source> <translation>% deslocamento</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="742"/> + <location filename="../../src/courtroom.cpp" line="731"/> <source>Music</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="744"/> + <location filename="../../src/courtroom.cpp" line="733"/> <source>Sfx</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="746"/> + <location filename="../../src/courtroom.cpp" line="735"/> <source>Blips</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="767"/> - <location filename="../../src/courtroom.cpp" line="3504"/> + <location filename="../../src/courtroom.cpp" line="756"/> + <location filename="../../src/courtroom.cpp" line="3584"/> <source>Server</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="791"/> + <location filename="../../src/courtroom.cpp" line="780"/> <source>Change character</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="797"/> + <location filename="../../src/courtroom.cpp" line="786"/> <source>Reload theme</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="803"/> + <location filename="../../src/courtroom.cpp" line="792"/> <source>Call mod</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="809"/> + <location filename="../../src/courtroom.cpp" line="798"/> <source>Settings</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="822"/> + <location filename="../../src/courtroom.cpp" line="811"/> <source>A/M</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="827"/> + <location filename="../../src/courtroom.cpp" line="816"/> <source>Preanim</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="913"/> + <location filename="../../src/courtroom.cpp" line="902"/> <source>Back to Lobby</source> <translatorcomment>A translation wouldn't fit because of the shitty theme system.</translatorcomment> <translation>Lobby</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> + <location filename="../../src/courtroom.cpp" line="1514"/> <source>You were granted the Disable Modcalls button.</source> <translation>Você recebeu o botão Desativar Modcalls.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3011"/> + <location filename="../../src/courtroom.cpp" line="3094"/> <source>You have been banned.</source> <translation>Você foi banido.</translation> </message> @@ -786,7 +826,7 @@ Motivo: %1</translation> <translation type="obsolete">Isso não faz nada, mas lá vai você.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3211"/> + <location filename="../../src/courtroom.cpp" line="3289"/> <source>You opened the settings menu.</source> <translation>Você abriu o menu de configurações.</translation> </message> @@ -799,377 +839,382 @@ Motivo: %1</translation> <translation type="obsolete"> se eles também escolherem seu personagem em troca.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="143"/> + <location filename="../../src/courtroom.cpp" line="112"/> <source>None</source> <translation>Nada</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="224"/> + <location filename="../../src/courtroom.cpp" line="193"/> <source>Guard</source> <translation>Guarda</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="228"/> + <location filename="../../src/courtroom.cpp" line="197"/> <source>Additive</source> <translation>Aditivo</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="277"/> + <location filename="../../src/courtroom.cpp" line="248"/> <source>To front</source> - <translation type="unfinished">Para frente</translation> + <translation>Para frente</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="278"/> + <location filename="../../src/courtroom.cpp" line="249"/> <source>To behind</source> - <translation type="unfinished">Ao fundo</translation> + <translation>Ao fundo</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="591"/> + <location filename="../../src/courtroom.cpp" line="579"/> <source>Select a character you wish to pair with.</source> - <translation type="unfinished">Selecione um personagem com o qual deseja parear.</translation> + <translation>Selecione um personagem com o qual deseja parear.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="596"/> + <location filename="../../src/courtroom.cpp" line="584"/> <source>Change the percentage offset of your character's position from the center of the screen.</source> - <translation type="unfinished">Altere o deslocamento percentual da posição do seu personagem no centro da tela.</translation> + <translation>Altere o deslocamento percentual da posição do seu personagem no centro da tela.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="602"/> + <location filename="../../src/courtroom.cpp" line="590"/> <source>Change the order of appearance for your character.</source> - <translation type="unfinished">Mude a ordem de aparência do seu personagem.</translation> + <translation>Mude a ordem de aparência do seu personagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="607"/> + <location filename="../../src/courtroom.cpp" line="595"/> <source>Display the list of characters to pair with.</source> - <translation type="unfinished">Exibe a lista de caracteres para corresponder.</translation> + <translation>Exibe a lista de caracteres para corresponder.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="665"/> + <location filename="../../src/courtroom.cpp" line="654"/> <source>Oops, you're muted!</source> - <translation type="unfinished">Opa, você está mudo!</translation> + <translation>Opa, você está mudo!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="679"/> + <location filename="../../src/courtroom.cpp" line="668"/> <source>Set your character's emote to play on your next message.</source> - <translation type="unfinished">Defina o emote do seu personagem para usar na próxima mensagem.</translation> + <translation>Defina o emote do seu personagem para usar na próxima mensagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="683"/> + <location filename="../../src/courtroom.cpp" line="672"/> <source>Set your character's supplementary background.</source> - <translation type="unfinished">Defina o plano de fundo suplementar para o seu personagem.</translation> + <translation>Defina o plano de fundo suplementar para o seu personagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="689"/> + <location filename="../../src/courtroom.cpp" line="678"/> <source>Set an 'iniswap', or an alternative character folder to refer to from your current character. Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/iniswaps.ini</source> - <translation type="unfinished">Defina um 'iniswap' ou uma pasta de caracteres alternativa para consultar seu personagem atual. + <translation>Defina um 'iniswap' ou uma pasta de caracteres alternativa para consultar seu personagem atual. Edite digitando e pressionando Enter, [X] para excluir. Isso é salvo em base/characters/<charname>/iniswaps.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="698"/> - <location filename="../../src/courtroom.cpp" line="715"/> + <location filename="../../src/courtroom.cpp" line="687"/> + <location filename="../../src/courtroom.cpp" line="704"/> <source>Remove the currently selected iniswap from the list and return to the original character folder.</source> - <translation type="unfinished">Remova o iniswap atualmente selecionado da lista e retorne à pasta de caracteres original.</translation> + <translation>Remova o iniswap atualmente selecionado da lista e retorne à pasta de caracteres original.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="706"/> + <location filename="../../src/courtroom.cpp" line="695"/> <source>Set a sound effect to play on your next 'Preanim'. Leaving it on Default will use the emote-defined sound (if any). Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/soundlist.ini</source> - <translation type="unfinished">Configure um efeito sonoro para tocar no seu próximo 'Preanim'. Deixá-lo no padrão usará o som definido pelos emoticons (caso existam). + <translation>Configure um efeito sonoro para tocar no seu próximo 'Preanim'. Deixá-lo no padrão usará o som definido pelos emoticons (caso existam). Edite digitando e pressionando Enter, [X] para excluir. Isso é salvo em base/characters/<charname>/soundlist.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="722"/> + <location filename="../../src/courtroom.cpp" line="711"/> <source>Choose an effect to play on your next spoken message. The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by char.ini [Options] category, effects = 'miscname' where it referes to misc/<miscname>/effects.ini to read the effects.</source> - <translation type="unfinished">Escolha um efeito para reproduzir na sua próxima mensagem falada. + <translation>Escolha um efeito para reproduzir na sua próxima mensagem falada. Os efeitos são definidos em theme / effects / effects.ini. Seu personagem pode definir efeitos personalizados ao categoria char.ini [Opções], effects = 'miscname', onde se refere a misc/<miscname>/effects.ini to read the effects.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="749"/> + <location filename="../../src/courtroom.cpp" line="738"/> <source>Hold It!</source> - <translation type="unfinished">Um momento!</translation> + <translation>Um momento!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="750"/> - <location filename="../../src/courtroom.cpp" line="756"/> - <location filename="../../src/courtroom.cpp" line="762"/> + <location filename="../../src/courtroom.cpp" line="739"/> + <location filename="../../src/courtroom.cpp" line="745"/> + <location filename="../../src/courtroom.cpp" line="751"/> <source>When this is turned on, your next in-character message will be a shout!</source> <translation>Quando isso estiver ativado, sua próxima mensagem do personagem será um grito.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="755"/> + <location filename="../../src/courtroom.cpp" line="744"/> <source>Objection!</source> - <translation type="unfinished">Protesto!</translation> + <translation>Protesto!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="761"/> + <location filename="../../src/courtroom.cpp" line="750"/> <source>Take That!</source> - <translation type="unfinished">Tome isso!</translation> + <translation>Tome isso!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="769"/> + <location filename="../../src/courtroom.cpp" line="758"/> <source>Toggle between server chat and global AO2 chat.</source> - <translation type="unfinished">Alterne entre o bate-papo do servidor e o global.</translation> + <translation>Alterne entre o bate-papo do servidor e o global.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="773"/> - <location filename="../../src/courtroom.cpp" line="777"/> - <location filename="../../src/courtroom.cpp" line="783"/> - <location filename="../../src/courtroom.cpp" line="787"/> + <location filename="../../src/courtroom.cpp" line="762"/> + <location filename="../../src/courtroom.cpp" line="766"/> + <location filename="../../src/courtroom.cpp" line="772"/> + <location filename="../../src/courtroom.cpp" line="776"/> <source>This will display the animation in the viewport as soon as it is pressed.</source> - <translation type="unfinished">Isso exibirá a animação na janela de visualização assim que for pressionada.</translation> + <translation>Isso exibirá a animação na janela de visualização assim que for pressionada.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="781"/> + <location filename="../../src/courtroom.cpp" line="770"/> <source>Guilty!</source> - <translation type="unfinished">Culpado!</translation> + <translation>Culpado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="794"/> + <location filename="../../src/courtroom.cpp" line="783"/> <source>Bring up the Character Select Screen and change your character.</source> - <translation type="unfinished">Abra a tela de seleção de personagem e mude seu personagem.</translation> + <translation>Abra a tela de seleção de personagem e mude seu personagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="800"/> + <location filename="../../src/courtroom.cpp" line="789"/> <source>Refresh the theme and update all of the ui elements to match.</source> - <translation type="unfinished">Atualize o tema e todos os elementos da interface do usuário para corresponder.</translation> + <translation>Atualize o tema e todos os elementos da interface do usuário para corresponder.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="806"/> + <location filename="../../src/courtroom.cpp" line="795"/> <source>Request the attention of the current server's moderator.</source> - <translation type="unfinished">Solicite a atenção do moderador do servidor atual.</translation> + <translation>Solicite a atenção do moderador do servidor atual.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="812"/> + <location filename="../../src/courtroom.cpp" line="801"/> <source>Allows you to change various aspects of the client.</source> - <translation type="unfinished">Permite alterar vários aspectos do cliente.</translation> + <translation>Permite alterar vários aspectos do cliente.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="818"/> + <location filename="../../src/courtroom.cpp" line="807"/> <source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source> - <translation type="unfinished">Uma interface para ajudá-lo a anunciar um caso (deve ser um CM para poder anunciar casos)</translation> + <translation>Uma interface para ajudá-lo a anunciar um caso (deve ser um CM para poder anunciar casos)</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="824"/> + <location filename="../../src/courtroom.cpp" line="813"/> <source>Switch between Areas and Music lists</source> - <translation type="unfinished">Alterne entre áreas e listas de músicas</translation> + <translation>Alterne entre áreas e listas de músicas</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="829"/> + <location filename="../../src/courtroom.cpp" line="818"/> <source>Play a single-shot animation as defined by the emote when checked.</source> - <translation type="unfinished">Reproduza uma animação de tiro único, conforme definido pelo emote, quando marcada.</translation> + <translation>Reproduza uma animação de tiro único, conforme definido pelo emote, quando marcada.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="833"/> + <location filename="../../src/courtroom.cpp" line="822"/> <source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source> - <translation type="unfinished">Se pré-impressão estiver marcada, exiba o texto de entrada imediatamente enquanto a animação estiver sendo reproduzida simultaneamente.</translation> + <translation>Se pré-impressão estiver marcada, exiba o texto de entrada imediatamente enquanto a animação estiver sendo reproduzida simultaneamente.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="837"/> + <location filename="../../src/courtroom.cpp" line="826"/> <source>Mirror your character's emotes when checked.</source> - <translation type="unfinished">Reflita os gestos do seu personagem quando marcado.</translation> + <translation>Reflita os gestos do seu personagem quando marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="841"/> + <location filename="../../src/courtroom.cpp" line="830"/> <source>Add text to your last spoken message when checked.</source> - <translation type="unfinished">Adicione texto à sua última mensagem falada quando marcado.</translation> + <translation>Adicione texto à sua última mensagem falada quando marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="845"/> + <location filename="../../src/courtroom.cpp" line="834"/> <source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source> - <translation type="unfinished">Você não ouve chamadas de moderação quando marcado, impedindo-os de tocar sons ou concentrando a atenção na janela.</translation> + <translation>Você não ouve chamadas de moderação quando marcado, impedindo-os de tocar sons ou concentrando a atenção na janela.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="849"/> + <location filename="../../src/courtroom.cpp" line="838"/> <source>Lets you receive case alerts when enabled. (You can set your preferences in the Settings!)</source> - <translation type="unfinished">Permite que você receba alertas de caso quando ativado. + <translation>Permite que você receba alertas de caso quando ativado. (Você pode configurar suas preferências em Configurações!)</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="854"/> + <location filename="../../src/courtroom.cpp" line="843"/> <source>Display customized shownames for all users when checked.</source> - <translation type="unfinished">Mostrar nomes personalizados para todos os usuários quando marcado.</translation> + <translation>Mostrar nomes personalizados para todos os usuários quando marcado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="857"/> + <location filename="../../src/courtroom.cpp" line="846"/> <source>Custom Shout!</source> - <translation type="unfinished">Grito personalizado!</translation> + <translation>Grito personalizado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="860"/> + <location filename="../../src/courtroom.cpp" line="849"/> <source>This will display the custom character-defined animation in the viewport as soon as it is pressed. To make one, your character's folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source> - <translation type="unfinished">Isso exibirá a animação de caracteres personalizados definida na viewport assim que for pressionada. + <translation>Isso exibirá a animação de caracteres personalizados definida na viewport assim que for pressionada. Para criar uma, a pasta do seu personagem deve conter efeitos personalizados [webp/apng/gif/png]. E efeitos sonoros personalizados [wav/ogg/opus]</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="868"/> + <location filename="../../src/courtroom.cpp" line="857"/> <source>Play realization sound and animation in the viewport on the next spoken message when checked.</source> - <translation type="unfinished">Tocar animação de som e performance na janela de desenho na seguinte mensagem falada quando marcada.</translation> + <translation>Tocar animação de som e performance na janela de desenho na seguinte mensagem falada quando marcada.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="874"/> + <location filename="../../src/courtroom.cpp" line="863"/> <source>Shake the screen on next spoken message when checked.</source> - <translation type="unfinished">Agite a tela na próxima mensagem falada quando marcada.</translation> + <translation>Agite a tela na próxima mensagem falada quando marcada.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="880"/> + <location filename="../../src/courtroom.cpp" line="869"/> <source>Display the list of character folders you wish to mute.</source> - <translation type="unfinished">Exibe a lista de pastas de caracteres que você deseja silenciar.</translation> + <translation>Exibe a lista de pastas de caracteres que você deseja silenciar.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="884"/> - <location filename="../../src/courtroom.cpp" line="892"/> + <location filename="../../src/courtroom.cpp" line="873"/> + <location filename="../../src/courtroom.cpp" line="881"/> <source>Increase the health bar.</source> - <translation type="unfinished">Aumente a barra de saúde.</translation> + <translation>Aumente a barra de saúde.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="888"/> - <location filename="../../src/courtroom.cpp" line="896"/> + <location filename="../../src/courtroom.cpp" line="877"/> + <location filename="../../src/courtroom.cpp" line="885"/> <source>Decrease the health bar.</source> - <translation type="unfinished">Abaixe a barra de saúde.</translation> + <translation>Abaixe a barra de saúde.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="900"/> + <location filename="../../src/courtroom.cpp" line="889"/> <source>Change the text color of the spoken message. You can also select a part of your currently typed message and use the dropdown to change its color!</source> - <translation type="unfinished">Mude a cor do texto no chat IC. + <translation>Mude a cor do texto no chat IC. Você também pode selecionar uma parte da sua mensagem escrita no momento e usar o menu suspenso para alterar sua cor!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="914"/> + <location filename="../../src/courtroom.cpp" line="903"/> <source>Return back to the server list.</source> - <translation type="unfinished">Retorne à lista de servidores.</translation> + <translation>Retorne à lista de servidores.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="927"/> + <location filename="../../src/courtroom.cpp" line="916"/> <source>Become a spectator. You won't be able to interact with the in-character screen.</source> - <translation type="unfinished">Torne-se um espectador. Você não poderá interagir com a tela do personagem.</translation> + <translation>Torne-se um espectador. Você não será capaz de interagir como personagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> - <location filename="../../src/courtroom.cpp" line="3372"/> + <location filename="../../src/courtroom.cpp" line="1514"/> + <location filename="../../src/courtroom.cpp" line="3452"/> <source>CLIENT</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3090"/> - <location filename="../../src/courtroom.cpp" line="4508"/> - <location filename="../../src/courtroom.cpp" line="4515"/> + <location filename="../../src/courtroom.cpp" line="2257"/> + <location filename="../../src/courtroom.cpp" line="2259"/> + <source>has presented evidence</source> + <translation>apresentou evidência</translation> + </message> + <message> + <location filename="../../src/courtroom.cpp" line="3166"/> + <location filename="../../src/courtroom.cpp" line="3168"/> <source>has played a song</source> - <translation type="unfinished">tocou a música</translation> + <translation>tocou a música</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3224"/> + <location filename="../../src/courtroom.cpp" line="3302"/> <source>You will now pair up with %1 if they also choose your character in return.</source> - <translation type="unfinished">Agora você será emparelhado com %1 se também escolher seu personagem.</translation> + <translation>Agora você será emparelhado com %1 se também escolher seu personagem.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3230"/> + <location filename="../../src/courtroom.cpp" line="3310"/> <source>You are no longer paired with anyone.</source> <translation>Você não está mais fazendo par com ninguém.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3235"/> + <location filename="../../src/courtroom.cpp" line="3315"/> <source>Are you sure you typed that well? The char ID could not be recognised.</source> <translation>Você tem certeza que você escreveu isso certo? O ID do personagem não pôde ser encontrado.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3250"/> + <location filename="../../src/courtroom.cpp" line="3330"/> <source>You have set your offset to </source> <translation>Você definiu seu deslocamento como </translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3257"/> + <location filename="../../src/courtroom.cpp" line="3337"/> <source>Your offset must be between -100% and 100%!</source> <translation>Seu deslocamento deve estar entre -100% e 100%!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3262"/> + <location filename="../../src/courtroom.cpp" line="3342"/> <source>That offset does not look like one.</source> <translation>Esse deslocamento não se parece com um.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3268"/> + <location filename="../../src/courtroom.cpp" line="3348"/> <source>You switched your music and area list.</source> <translation>Você mudou sua lista de músicas e áreas.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3275"/> + <location filename="../../src/courtroom.cpp" line="3355"/> <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source> <translation>Você forçou recursos que o servidor pode não suportar. Você pode não conseguir falar de IC, ou pior, por causa disso.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3289"/> + <location filename="../../src/courtroom.cpp" line="3369"/> <source>Your pre-animations interrupt again.</source> <translation>Suas pré-animações interrompem novamente.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3292"/> + <location filename="../../src/courtroom.cpp" line="3372"/> <source>Your pre-animations will not interrupt text.</source> <translation>Suas pré-animações não interromperão o texto.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3303"/> + <location filename="../../src/courtroom.cpp" line="3383"/> <source>Couldn't open chatlog.txt to write into.</source> <translation>Não foi possível abrir o chatlog.txt para gravar.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3316"/> + <location filename="../../src/courtroom.cpp" line="3396"/> <source>The IC chatlog has been saved.</source> <translation>O chat do IC foi salvo.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3329"/> + <location filename="../../src/courtroom.cpp" line="3409"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there.</source> <translation>Você não possui uma pasta `base/cases/`! Foi feito para você, mas, como foi feito para você, provavelmente o arquivo do caso que você está procurando não pode ser encontrado lá.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3344"/> + <location filename="../../src/courtroom.cpp" line="3424"/> <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini. Cases you can load: %1</source> <translation>Você precisa fornecer um nome de arquivo para carregar (extensão não necessária)! Verifique se está na pasta `base/cases/` e se é um ini formatado corretamente. Casos que você pode carregar: %1</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3356"/> + <location filename="../../src/courtroom.cpp" line="3436"/> <source>Too many arguments to load a case! You only need one filename, without extension.</source> <translation>Muitos argumentos para carregar um caso! Você só precisa de um nome de arquivo, sem extensão.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3372"/> + <location filename="../../src/courtroom.cpp" line="3453"/> <source>Case made by %1.</source> <translation>Caso feito por %1.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3382"/> + <location filename="../../src/courtroom.cpp" line="3462"/> <source>Navigate to %1 for the CM doc.</source> <translation>Navegue para %1 para o documento do CM.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3396"/> - <location filename="../../src/courtroom.cpp" line="3398"/> + <location filename="../../src/courtroom.cpp" line="3476"/> + <location filename="../../src/courtroom.cpp" line="3478"/> <location filename="../../src/evidence.cpp" line="762"/> <location filename="../../src/evidence.cpp" line="764"/> <source>UNKNOWN</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3406"/> + <location filename="../../src/courtroom.cpp" line="3486"/> <source>Your case "%1" was loaded!</source> <translation>Seu caso "%1" foi carregado!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3418"/> + <location filename="../../src/courtroom.cpp" line="3498"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it.</source> <translation>Você não possui uma pasta `base/cases/`! Foi feito para você, mas, como foi feito para você, é provável que você o tenha excluído.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3433"/> + <location filename="../../src/courtroom.cpp" line="3513"/> <source>You need to give a filename to save (extension not needed) and the courtroom status!</source> <translation>Você deve fornecer um nome de arquivo para salvar (sem extensão necessária) e o estado do tribunal!</translation> </message> @@ -1178,73 +1223,78 @@ Casos que você pode carregar: %1</translation> <translation type="obsolete">Muitos argumentos para salvar um caso! Você só precisa de um nome de arquivo sem extensão e o estado do tribunal.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3443"/> + <location filename="../../src/courtroom.cpp" line="3523"/> <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source> <translation>Muitos argumentos para salvar um caso! Você só precisa de um nome de arquivo sem extensão e o estado do tribunal.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3470"/> + <location filename="../../src/courtroom.cpp" line="3550"/> <source>Succesfully saved, edit doc and cmdoc link on the ini!</source> <translation>Salvo com sucesso, você pode editar o documento e o link do documento no arquivo ini!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3497"/> + <location filename="../../src/courtroom.cpp" line="3577"/> <source>Master</source> <translation></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3997"/> + <location filename="../../src/courtroom.cpp" line="4084"/> + <source>Play Random Song</source> + <translation>Tocar música aleatória</translation> + </message> + <message> + <location filename="../../src/courtroom.cpp" line="4086"/> <source>Expand All Categories</source> - <translation type="unfinished">Expandir todas as categorias</translation> + <translation>Expandir todas as categorias</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3999"/> + <location filename="../../src/courtroom.cpp" line="4088"/> <source>Collapse All Categories</source> - <translation type="unfinished">Recolher todas as categorias</translation> + <translation>Recolher todas as categorias</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4003"/> + <location filename="../../src/courtroom.cpp" line="4092"/> <source>Fade Out Previous</source> - <translation type="unfinished">Fade Anterior</translation> + <translation>Desvanecer Anterior</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4009"/> + <location filename="../../src/courtroom.cpp" line="4098"/> <source>Fade In</source> - <translation type="unfinished">Aparecimento gradual</translation> + <translation>Aparecimento gradual</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4015"/> + <location filename="../../src/courtroom.cpp" line="4104"/> <source>Synchronize</source> - <translation type="unfinished">Sincronizar</translation> + <translation>Sincronizar</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4285"/> + <location filename="../../src/courtroom.cpp" line="4407"/> <source>Default</source> - <translation type="unfinished">Predeterminado</translation> + <translation>Predeterminado</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4446"/> + <location filename="../../src/courtroom.cpp" line="4573"/> <source>Reason:</source> <translation>Razão:</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4447"/> + <location filename="../../src/courtroom.cpp" line="4574"/> <source>Call Moderator</source> <translation>Chamar um Moderador</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4455"/> - <location filename="../../src/courtroom.cpp" line="4459"/> + <location filename="../../src/courtroom.cpp" line="4582"/> + <location filename="../../src/courtroom.cpp" line="4586"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4455"/> + <location filename="../../src/courtroom.cpp" line="4582"/> <source>You must provide a reason.</source> <translation>Você deve fornecer um motivo.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4459"/> + <location filename="../../src/courtroom.cpp" line="4586"/> <source>The message is too long.</source> <translation>A mensagem é muito longa.</translation> </message> @@ -1255,81 +1305,81 @@ Casos que você pode carregar: %1</translation> <message> <location filename="../../src/evidence.cpp" line="17"/> <source>Present this piece of evidence to everyone on your next spoken message</source> - <translation type="unfinished">Apresente essa evidência a todos na sua próxima mensagem falada</translation> + <translation>Apresente essa evidência a todos na sua próxima mensagem falada</translation> </message> <message> <location filename="../../src/evidence.cpp" line="24"/> <source>Save evidence to an .ini file.</source> - <translation type="unfinished">Salve evidências em um arquivo .ini.</translation> + <translation>Salve evidências em um arquivo .ini.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="26"/> <source>Load evidence from an .ini file.</source> - <translation type="unfinished">Carregar evidências de um arquivo .ini.</translation> + <translation>Carregar evidências de um arquivo .ini.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="31"/> <source>Destroy this piece of evidence</source> - <translation type="unfinished">Destrua esta evidência</translation> + <translation>Destrua esta evidência</translation> </message> <message> <location filename="../../src/evidence.cpp" line="34"/> <source>Choose..</source> - <translation type="unfinished">Escolher..</translation> + <translation>Escolher..</translation> </message> <message> <location filename="../../src/evidence.cpp" line="37"/> <source>Close the evidence display/editing overlay. You will be prompted if there's any unsaved changes.</source> - <translation type="unfinished">Feche a sobreposição para visualizar/editar evidências. + <translation>Feche a sobreposição para visualizar/editar evidências. Você será perguntado se existem alterações não salvas.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="40"/> <source>Save any changes made to this piece of evidence and send them to server.</source> - <translation type="unfinished">Salve as alterações feitas nesta evidência e envie-as para o servidor.</translation> + <translation>Salve as alterações feitas nesta evidência e envie-as para o servidor.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="48"/> <source>Double-click to edit. Press [X] to update your changes.</source> - <translation type="unfinished">Clique duas vezes para editar. Pressione [X] para atualizar suas alterações.</translation> + <translation>Clique duas vezes para editar. Pressione [X] para atualizar suas alterações.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="104"/> <source>Bring up the Evidence screen.</source> - <translation type="unfinished">Abra a tela para obter evidências.</translation> + <translation>Abra a tela de evidências.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="147"/> <source>Switch evidence to private inventory.</source> - <translation type="unfinished">Alterar evidência para inventário privado.</translation> + <translation>Enviar evidência para inventário privado.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="151"/> <source>Switch evidence to global inventory.</source> - <translation type="unfinished">Mude a evidência para o inventário global.</translation> + <translation>Mude a evidência para o inventário global.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="158"/> <location filename="../../src/evidence.cpp" line="617"/> <source>Transfer evidence to private inventory.</source> - <translation type="unfinished">Transfira evidências para o inventário privado.</translation> + <translation>Transfira evidências para o inventário privado.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="163"/> <location filename="../../src/evidence.cpp" line="627"/> <source>Transfer evidence to global inventory.</source> - <translation type="unfinished">Transfira evidências para o inventário global.</translation> + <translation>Transfira evidências para o inventário global.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="263"/> <source>The piece of evidence you've been editing has changed.</source> - <translation type="unfinished">A evidência que você está editando mudou.</translation> + <translation>A evidência que você está editando mudou.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="264"/> <source>Do you wish to keep your changes?</source> - <translation type="unfinished">Deseja manter suas alterações?</translation> + <translation>Deseja manter suas alterações?</translation> </message> <message> <location filename="../../src/evidence.cpp" line="265"/> @@ -1337,7 +1387,7 @@ Você será perguntado se existem alterações não salvas.</translation> Image: %2 Description: %3</source> - <translation type="unfinished">Nome: %1 + <translation>Nome: %1 Imagem: %2 Descrição: %3</translation> @@ -1352,7 +1402,7 @@ Descrição: <location filename="../../src/evidence.cpp" line="460"/> <location filename="../../src/evidence.cpp" line="463"/> <source>Double-click to edit...</source> - <translation type="unfinished">Clique duas vezes para editar...</translation> + <translation>Clique duas vezes para editar...</translation> </message> <message> <location filename="../../src/evidence.cpp" line="478"/> @@ -1362,111 +1412,125 @@ Descrição: <message> <location filename="../../src/evidence.cpp" line="556"/> <source>Evidence has been modified.</source> - <translation type="unfinished">A evidência foi modificada.</translation> + <translation>A evidência foi modificada.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="557"/> <source>Do you want to save your changes?</source> - <translation type="unfinished">¿Quieres guardar tus cambios?</translation> + <translation>Você quer salvar suas mudanças?</translation> </message> <message> <location filename="../../src/evidence.cpp" line="619"/> <source>Current evidence is global. Click to switch to private.</source> - <translation type="unfinished">A evidência atual é global. Clique para mudar para privado.</translation> + <translation>A evidência atual é global. Clique para mudar para privado.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="629"/> <source>Current evidence is private. Click to switch to global.</source> - <translation type="unfinished">A evidência atual é privada. Clique para mudar para global.</translation> + <translation>A evidência atual é privada. Clique para mudar para global.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="659"/> <source>"%1" has been transferred.</source> - <translation type="unfinished">"%1" foi transferido.</translation> + <translation>"%1" foi transferido.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="722"/> <source>Save Inventory</source> - <translation type="unfinished">Salvar inventário</translation> + <translation>Salvar inventário</translation> </message> <message> <location filename="../../src/evidence.cpp" line="722"/> <location filename="../../src/evidence.cpp" line="748"/> <source>Ini Files (*.ini)</source> - <translation type="unfinished">Arquivos INI (* .ini)</translation> + <translation>Arquivos INI (* .ini)</translation> </message> <message> <location filename="../../src/evidence.cpp" line="748"/> <source>Open Inventory</source> - <translation type="unfinished">Abrir inventário</translation> + <translation>Abrir inventário</translation> </message> </context> <context> <name>Lobby</name> <message> - <location filename="../../src/lobby.cpp" line="12"/> + <location filename="../../src/lobby.cpp" line="14"/> <source>Attorney Online 2</source> <translation></translation> </message> <message> - <location filename="../../src/lobby.cpp" line="31"/> + <location filename="../../src/lobby.cpp" line="33"/> <source>Search</source> <translation>Pesquisar</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="39"/> + <location filename="../../src/lobby.cpp" line="41"/> <source>Name</source> <translation>Nome</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="94"/> + <location filename="../../src/lobby.cpp" line="96"/> <source>It doesn't look like your client is set up correctly. Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder?</source> <translation>Seu cliente não parece estar configurado corretamente. Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande pasta 'base'?</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="123"/> + <location filename="../../src/lobby.cpp" line="125"/> <source>Version: %1</source> <translation>Versão: %1</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="129"/> + <location filename="../../src/lobby.cpp" line="131"/> <source>Settings</source> <translation>Configurações</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="132"/> + <location filename="../../src/lobby.cpp" line="134"/> <source>Allows you to change various aspects of the client.</source> <translation>Permite alterar vários aspectos do cliente.</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="142"/> - <location filename="../../src/lobby.cpp" line="436"/> + <location filename="../../src/lobby.cpp" line="144"/> + <location filename="../../src/lobby.cpp" line="433"/> <source>Offline</source> <translation>Offline</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="176"/> + <location filename="../../src/lobby.cpp" line="178"/> <source>Loading</source> <translation>Carregando</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="180"/> + <location filename="../../src/lobby.cpp" line="182"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="365"/> + <location filename="../../src/lobby.cpp" line="361"/> + <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the BASS audio engine.<br>APNG plugin loaded: %3<p>Built on %4</source> + <translation><h2>Attorney Online %1</h2>O simulador de drama jurídico<p><b>Código fonte:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desenvolvimento principal:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desenvolvimento de cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Teste de controle de qualidade:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimentos especiais:</b><br>CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.<p>O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.<p>Usando a versão Qt %2 com o mecanismo de áudio BASS..<br>Plugin APNG carregado: %3<p>Compilado em %4</translation> + </message> + <message> + <location filename="../../src/lobby.cpp" line="393"/> + <source>Yes</source> + <translation>Sim</translation> + </message> + <message> + <location filename="../../src/lobby.cpp" line="393"/> + <source>No</source> + <translation>Não</translation> + </message> + <message> <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> - <translation><h2>Attorney Online %1</h2>O simulador de drama jurídico<p><b>Código fonte:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desenvolvimento principal:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desenvolvimento de cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Teste de controle de qualidade:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimentos especiais:</b><br>CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.<p>O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.<p>Usando a versão Qt %2 com o mecanismo de áudio %3.<p>Compilado em %4</translation> + <translation type="obsolete"><h2>Attorney Online %1</h2>O simulador de drama jurídico<p><b>Código fonte:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desenvolvimento principal:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desenvolvimento de cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Teste de controle de qualidade:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimentos especiais:</b><br>CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.<p>O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.<p>Usando a versão Qt %2 com o mecanismo de áudio %3.<p>Compilado em %4</translation> </message> <message> <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC and MaximumVolty (2.8 release); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> <translation type="obsolete"><h2>Attorney Online %1</h2>O simulador de drama jurídico<p><b>Código fonte:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desenvolvimento principal:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Desenvolvimento de cliente:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Teste de controle de qualidade:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Agradecimentos especiais:</b><br>CrazyJC y MaximumVolty (versão 2.8); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, y FanatSors (AO1); server hosts, game masters, case makers, criadores de conteúdo e toda a comunidade AO2.<p>O projeto Attorney Online possui direitos autorais (c) 2016-2020 Attorney Online developers. Aplicam-se licenças de código aberto. Todos os outros ativos são de propriedade de seus respectivos proprietários.<p>Usando a versão Qt %2 com o mecanismo de áudio %3.<p>Compilado em %4</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="398"/> + <location filename="../../src/lobby.cpp" line="395"/> <source>About</source> <translation>Sobre</translation> </message> @@ -1479,7 +1543,7 @@ Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande <translation type="obsolete"><h2>Attorney Online %1</h2>O simulador de drama jurídico<p><b>Código fonte:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Desenvolvimento principal:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Agradecimentos especiais:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="540"/> + <location filename="../../src/lobby.cpp" line="537"/> <source>Online: %1/%2</source> <translation>Online: %1/%2</translation> </message> @@ -1494,9 +1558,8 @@ Você baixou todos os recursos corretamente do tiny.cc/getao, incluindo a grande <translation></translation> </message> <message> - <location filename="../../src/chatlogpiece.cpp" line="55"/> <source> has played a song: </source> - <translation> tocou a música: </translation> + <translation type="obsolete"> tocou a música: </translation> </message> </context> <context> diff --git a/resource/translations/ao_ru.ts b/resource/translations/ao_ru.ts index 3b0af42f..9347436f 100644 --- a/resource/translations/ao_ru.ts +++ b/resource/translations/ao_ru.ts @@ -6,97 +6,99 @@ <message> <location filename="../../src/aoapplication.cpp" line="129"/> <source>Disconnected from server.</source> - <translation>Соединение с сервером прервано.</translation> + <translation>Соединение с сервером разорвано.</translation> </message> <message> <location filename="../../src/aoapplication.cpp" line="152"/> <source>Error connecting to master server. Will try again in %1 seconds.</source> - <translation>Ошибка соединения с главным сервером. Попытка пересоединения будет через %1 с.</translation> + <translation>Ошибка соединения с главным сервером. Повторная попытка соединения через %1 с.</translation> </message> <message> <location filename="../../src/aoapplication.cpp" line="157"/> <source>There was an error connecting to the master server. We deploy multiple master servers to mitigate any possible downtime, but the client appears to have exhausted all possible methods of finding and connecting to one. Please check your Internet connection and firewall, and please try again.</source> - <translation>Произошла ошибка соединения с главным сервером. -Пожалуйста, проверьте ваши Интернет-соединение, настройки браундмауэра, и попробуйте перезайти.</translation> + <translation>Не удалось соединиться с главным сервером. +Мы используем несколько главных серверов для того, чтобы сократить время простоя, но клиент перепробовал все возможные варианты и не смог подключиться ни к одному из серверов. +Пожалуйста, проверьте ваши настройки браундмауэра и соединение с Интернетом попробуйте перезайти.</translation> </message> <message> <location filename="../../src/packet_distribution.cpp" line="94"/> <source>Outdated version! Your version: %1 Please go to aceattorneyonline.com to update.</source> - <translation>Устаревшая версия! У вас установлена %1 + <translation>Устаревшая версия! У вас установлена версия %1 Проследуйте на сайт aceattorneyonline.com для обновления.</translation> </message> <message> <source>You have been exiled from AO. Have a nice day.</source> - <translation type="vanished">Из AO вас отправили в жизнь. -Хорошего дня.</translation> + <translation type="obsolete">Вас изгнали из AO. +Всего хорошего.</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="235"/> + <location filename="../../src/packet_distribution.cpp" line="253"/> <source>Attorney Online 2</source> <translation>Attorney Online 2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="263"/> + <location filename="../../src/packet_distribution.cpp" line="281"/> <source>Loading</source> <translation>Загрузка</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="363"/> + <location filename="../../src/packet_distribution.cpp" line="384"/> <source>Loading evidence: %1/%2</source> - <translation>Загрузка вещдоков: + <translation>Загрузка улик: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="398"/> - <location filename="../../src/packet_distribution.cpp" line="492"/> + <location filename="../../src/packet_distribution.cpp" line="419"/> + <location filename="../../src/packet_distribution.cpp" line="513"/> <source>Loading music: %1/%2</source> <translation>Загрузка музыки: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="316"/> - <location filename="../../src/packet_distribution.cpp" line="465"/> + <location filename="../../src/packet_distribution.cpp" line="337"/> + <location filename="../../src/packet_distribution.cpp" line="486"/> <source>Loading chars: %1/%2</source> <translation>Загрузка персонажей: %1/%2</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="674"/> + <location filename="../../src/packet_distribution.cpp" line="695"/> <source>You have been kicked from the server. Reason: %1</source> <translation>Вас выпнули с сервера. Причина: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="682"/> + <location filename="../../src/packet_distribution.cpp" line="703"/> <source>You have been banned from the server. Reason: %1</source> - <translation type="unfinished"></translation> + <translation>Вы были забанены на сервере. +Причина: %1</translation> </message> <message> - <location filename="../../src/packet_distribution.cpp" line="690"/> + <location filename="../../src/packet_distribution.cpp" line="711"/> <source>You are banned on this server. Reason: %1</source> - <translation>Вас отправили в баню. + <translation>Вы забанены на этом сервере. Причина: %1</translation> </message> <message> <source>You have been kicked from the server. Reason: </source> - <translation type="vanished">Вас выпнули с сервера. + <translation type="obsolete">Вас выпнули с сервера. Причина: </translation> </message> <message> <source>You are banned on this server. Reason: </source> - <translation type="vanished">Вас отправили в баню. + <translation type="obsolete">Вы забанены на этом сервере. Причина: </translation> </message> </context> @@ -105,37 +107,37 @@ Reason: </source> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="11"/> <source>Case Announcer</source> - <translation>Материалы дела</translation> + <translation>Объявление о проведении заседания</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="46"/> <source>Case title:</source> - <translation>Название:</translation> + <translation>Название дела:</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="56"/> <source>Defense needed</source> - <translation>Сторона защиты</translation> + <translation>Нужна защита</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="58"/> <source>Prosecution needed</source> - <translation>Сторона обвинения</translation> + <translation>Нужно обвинение</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="60"/> <source>Judge needed</source> - <translation>Без судьи никак</translation> + <translation>Нужен судья</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="62"/> <source>Jurors needed</source> - <translation>Суд присяжных</translation> + <translation>Нужны присяжные</translation> </message> <message> <location filename="../../src/aocaseannouncerdialog.cpp" line="64"/> <source>Stenographer needed</source> - <translation>Нужен стенографист?</translation> + <translation>Нужен стенографист</translation> </message> </context> <context> @@ -158,27 +160,29 @@ Reason: </source> <message> <location filename="../../src/aooptionsdialog.cpp" line="64"/> <source>Sets the theme used in-game. If the new theme changes the lobby's look as well, you'll need to reload the lobby for the changes to take effect, such as by joining a server and leaving it.</source> - <translation>Устанавливает внешний вид игры. Может понадобиться перезайти на сервер.</translation> + <translation>Определяет внешний вид игры. Для применения новой темы может понадобиться перезайти на сервер.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="95"/> <source>Log goes downwards:</source> - <translation>Портянку вниз:</translation> + <translation>История чата идёт вниз:</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="97"/> <source>If ticked, new messages will appear at the bottom (like the OOC chatlog). The traditional (AO1) behaviour is equivalent to this being unticked.</source> - <translation>Отметьте галочку, если хотите, чтобы сообщения в игровом чате отображались снизу, а не сверху.</translation> + <translation>Показывать новые сообщения в игровом чате снизу (как в ООС-чате), а не сверху (как в AO1).</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="110"/> <source>Log length:</source> - <translation>Длина игрового чата:</translation> + <translation>Размер истории игрового чата:</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="111"/> <source>The amount of messages the IC chatlog will keep before deleting older messages. A value of 0 or below counts as 'infinite'.</source> - <translation>Количество сообщений, максимально хранимых в игровом чате. Значение, равное 0 или меньше, будет расценено как снятие такого ограничения.</translation> + <translation>Максимальное количество сообщений, сохраняемых в игровом чате. +При превышении лимита старые сообщения будут удаляться. +Поставьте 0 или отрицательное значение, чтобы снять ограничение.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="133"/> @@ -188,17 +192,18 @@ Reason: </source> <message> <location filename="../../src/aooptionsdialog.cpp" line="135"/> <source>Your OOC name will be automatically set to this value when you join a server.</source> - <translation>Псевдоним, используемый при соединении с сервером. В основном, его видно в чате сервера.</translation> + <translation>Псевдоним по умолчанию для ООС-чата.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="148"/> <source>Custom shownames:</source> - <translation>Произвольные имена:</translation> + <translation>Пользовательские имена:</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="150"/> <source>Gives the default value for the in-game 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names.</source> - <translation>Отображать произвольные имена персонажей, установленные самими игроками.</translation> + <translation>Задать значение по умолчанию для настройки отображения пользовательских имён, +которая определяет возможность показа в игровом чате имён персонажей, установленных самими игроками.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="170"/> @@ -208,7 +213,7 @@ Reason: </source> <message> <location filename="../../src/aooptionsdialog.cpp" line="172"/> <source>If the built-in server lookups fail, the game will try the address given here and use it as a backup master server address.</source> - <translation>Отображать перечень серверов от главного сервера, указанного здесь, когда не удалось соединиться с первичным ГС.</translation> + <translation>Если клиент не сможет соединиться с встроенным главным сервером (ГС), он проверит адреса из этого списка.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="185"/> @@ -218,7 +223,7 @@ Reason: </source> <message> <location filename="../../src/aooptionsdialog.cpp" line="187"/> <source>Allows others on Discord to see what server you are in, what character are you playing, and how long you have been playing for.</source> - <translation>Показать в Discord сервер, на котором вы играете, каким персонажем управляете и время игры.</translation> + <translation>Показывать в Discord сервер, на котором вы играете, вашего персонажа и продолжительность игры.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="200"/> @@ -228,282 +233,303 @@ Reason: </source> <message> <location filename="../../src/aooptionsdialog.cpp" line="202"/> <source>Sets the language if you don't want to use your system language.</source> - <translation type="unfinished"></translation> + <translation>Изменяет язык интерфейса программы, если вы не хотите использовать язык системы.</translation> </message> <message> <location filename="../../src/aooptionsdialog.cpp" line="208"/> <source> - Keep current setting</source> - <translation type="unfinished"></translation> + <translation> - сохранить текущие настройки</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="220"/> + <location filename="../../src/aooptionsdialog.cpp" line="222"/> <source>Allow Screenshake:</source> - <translation type="unfinished"></translation> + <translation>Встряска экрана:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="222"/> + <location filename="../../src/aooptionsdialog.cpp" line="224"/> <source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> - <translation type="unfinished"></translation> + <translation>Разрешить показ встрясок экрана. Отключите, если вы страдаете от светочувствительности и/или припадков.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="234"/> + <location filename="../../src/aooptionsdialog.cpp" line="236"/> <source>Allow Effects:</source> - <translation type="unfinished"></translation> + <translation>Визуальные эффекты:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="236"/> + <location filename="../../src/aooptionsdialog.cpp" line="238"/> <source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source> - <translation type="unfinished"></translation> + <translation>Разрешить показ визуальных эффектов. Отключите, если вы страдаете от светочувствительности и/или припадков.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="248"/> + <location filename="../../src/aooptionsdialog.cpp" line="250"/> <source>Network Frame Effects:</source> - <translation type="unfinished"></translation> + <translation>Эффекты по сети:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="249"/> + <location filename="../../src/aooptionsdialog.cpp" line="251"/> <source>Send screen-shaking, flashes and sounds as defined in the char.ini over the network. Only works for servers that support this functionality.</source> - <translation type="unfinished"></translation> + <translation>Разрешить отправку звуков, эффектов вспышек и встряски экрана по сети в соответствии с char.ini. +Работает только на серверах, поддерживающих данную функцию.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="262"/> + <location filename="../../src/aooptionsdialog.cpp" line="264"/> <source>Colors in IC Log:</source> - <translation type="unfinished"></translation> + <translation>Цвета в истории чата:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="264"/> + <location filename="../../src/aooptionsdialog.cpp" line="266"/> <source>Use the markup colors in the server IC chatlog.</source> - <translation type="unfinished"></translation> + <translation>Отображать цвета в истории игрового чата.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="275"/> + <location filename="../../src/aooptionsdialog.cpp" line="277"/> <source>Sticky Sounds:</source> - <translation type="unfinished"></translation> + <translation>Закрепить звуки:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="277"/> + <location filename="../../src/aooptionsdialog.cpp" line="279"/> <source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source> - <translation type="unfinished"></translation> + <translation>Не сбрасывать выбранные настройки звука после его воспроизведения.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="289"/> + <location filename="../../src/aooptionsdialog.cpp" line="291"/> <source>Sticky Effects:</source> - <translation type="unfinished"></translation> + <translation>Закрепить эффекты:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="291"/> + <location filename="../../src/aooptionsdialog.cpp" line="293"/> <source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source> - <translation type="unfinished"></translation> + <translation>Не сбрасывать выбранные настройки эффекта после его воспроизведения.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="304"/> + <location filename="../../src/aooptionsdialog.cpp" line="306"/> <source>Sticky Preanims:</source> - <translation type="unfinished"></translation> + <translation>Закрепить пред. анимации:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="306"/> + <location filename="../../src/aooptionsdialog.cpp" line="308"/> <source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source> - <translation type="unfinished"></translation> + <translation>Не сбрасывать настройки пред. анимации после её воспроизведения.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="320"/> + <source>Custom Chatboxes:</source> + <translation>Пользовательские подложки:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="324"/> + <location filename="../../src/aooptionsdialog.cpp" line="322"/> + <source>Turn this on to allow characters to define their own custom chat box designs.</source> + <translation>Отображать дизайны подложек, заданные персонажами.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="340"/> <source>Callwords</source> <translation>Позывные</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="351"/> + <location filename="../../src/aooptionsdialog.cpp" line="367"/> <source><html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html></source> - <translation><html><head/><body>Введите на отдельных строках свои позывные, при указании которых в сообщениях будет подан звуковой сигнал.</body></html></translation> + <translation><html><head/><body>Введите на отдельных строках свои позывные. Если кто-то в чате напишет их, вы услышите звуковой сигнал. Регистр символов не учитывается.<br>Не оставляйте в конце строк пробелы, иначе вы будете получать оповещения о каждом пробеле в чате.</body></html></translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="361"/> + <location filename="../../src/aooptionsdialog.cpp" line="377"/> <source>Audio</source> <translation>Аудио</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="375"/> + <location filename="../../src/aooptionsdialog.cpp" line="391"/> <source>Audio device:</source> <translation>Устройство воспроизведения:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="376"/> + <location filename="../../src/aooptionsdialog.cpp" line="392"/> <source>Sets the audio device for all sounds.</source> - <translation>Куда вещать звук из игры.</translation> + <translation>Укажите устройство вывода всего аудио игры.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="419"/> + <location filename="../../src/aooptionsdialog.cpp" line="435"/> <source>Music:</source> <translation>Музыка:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="420"/> + <location filename="../../src/aooptionsdialog.cpp" line="436"/> <source>Sets the music's default volume.</source> <translation>Громкость музыки по умолчанию.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="434"/> + <location filename="../../src/aooptionsdialog.cpp" line="450"/> <source>SFX:</source> <translation>Звук. эффекты:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="436"/> + <location filename="../../src/aooptionsdialog.cpp" line="452"/> <source>Sets the SFX's default volume. Interjections and actual sound effects count as 'SFX'.</source> - <translation>Громкость звуковых эффектов по умолчанию.</translation> + <translation>Громкость звуковых эффектов по умолчанию. В категорию эффектов также входят возгласы.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="450"/> + <location filename="../../src/aooptionsdialog.cpp" line="466"/> <source>Blips:</source> <translation>Сигналы:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="452"/> + <location filename="../../src/aooptionsdialog.cpp" line="468"/> <source>Sets the volume of the blips, the talking sound effects.</source> <translation>Громкость сигналов, заменяющих голос, по умолчанию.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="474"/> + <location filename="../../src/aooptionsdialog.cpp" line="490"/> <source>Blip rate:</source> - <translation>Пер. сигналов:</translation> + <translation>Частота сигналов:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="476"/> + <location filename="../../src/aooptionsdialog.cpp" line="492"/> <source>Sets the delay between playing the blip sounds.</source> - <translation>Период между сигналами, заменяющими голос, по умолчанию.</translation> + <translation>Задержка по умолчанию между сигналами, заменяющими голос.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="484"/> + <location filename="../../src/aooptionsdialog.cpp" line="500"/> <source>Play a blip sound "once per every X symbols", where X is the blip rate.</source> - <translation type="unfinished"></translation> + <translation>Проигрывать сигнал "каждые Х символов", где Х - частота.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="491"/> + <location filename="../../src/aooptionsdialog.cpp" line="507"/> <source>Blank blips:</source> <translation>Пустые сигналы:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="493"/> + <location filename="../../src/aooptionsdialog.cpp" line="509"/> <source>If true, the game will play a blip sound even when a space is 'being said'.</source> <translation>Проигрывать сигналы даже для пробелов.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="505"/> + <location filename="../../src/aooptionsdialog.cpp" line="521"/> <source>Enable Looping SFX:</source> - <translation type="unfinished"></translation> + <translation>Повтор звук. эффектов:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="506"/> + <location filename="../../src/aooptionsdialog.cpp" line="522"/> <source>If true, the game will allow looping sound effects to play on preanimations.</source> - <translation type="unfinished"></translation> + <translation>Разрешить воспроизведение зацикленных звуковых эффектов во время предварительной анимации.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="518"/> + <location filename="../../src/aooptionsdialog.cpp" line="534"/> <source>Kill Music On Objection:</source> - <translation type="unfinished"></translation> + <translation>Тишина при протесте:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="520"/> + <location filename="../../src/aooptionsdialog.cpp" line="536"/> <source>If true, AO2 will stop the music for you when you or someone else does 'Objection!'.</source> - <translation type="unfinished"></translation> + <translation>Останавливать музыку, когда кто-нибудь кричит "Objection!".</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="532"/> + <location filename="../../src/aooptionsdialog.cpp" line="548"/> <source>Casing</source> - <translation>Заседание</translation> + <translation>Заседания</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="549"/> + <location filename="../../src/aooptionsdialog.cpp" line="565"/> <source>This server supports case alerts.</source> - <translation>Этот сервер поддерживает объявление заседания.</translation> + <translation>Этот сервер поддерживает объявления заседаний.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="552"/> + <location filename="../../src/aooptionsdialog.cpp" line="568"/> <source>This server does not support case alerts.</source> - <translation>Этот сервер не поддерживает объявление заседания.</translation> + <translation>Этот сервер не поддерживает объявления заседаний.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="553"/> + <location filename="../../src/aooptionsdialog.cpp" line="569"/> <source>Pretty self-explanatory.</source> - <translation>Весьма доходчиво.</translation> + <translation>Дополнительные пояснения не требуются.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="562"/> + <location filename="../../src/aooptionsdialog.cpp" line="578"/> <source>Casing:</source> - <translation>Новое дело:</translation> + <translation>Заседания:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="564"/> + <location filename="../../src/aooptionsdialog.cpp" line="580"/> <source>If checked, you will get alerts about case announcements.</source> - <translation>При заведении дела вы получите уведомление.</translation> + <translation>Вы получите уведомление, когда будет объявлено заседание.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="580"/> + <location filename="../../src/aooptionsdialog.cpp" line="596"/> <source>Defense:</source> <translation>Защита:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="581"/> + <location filename="../../src/aooptionsdialog.cpp" line="597"/> <source>If checked, you will get alerts about case announcements if a defense spot is open.</source> - <translation>При заведении дела, в котором нужна сторона защиты, вы получите уведомление.</translation> + <translation>Вы получите уведомление при объявлении дела, в котором нужна сторона защиты.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="595"/> + <location filename="../../src/aooptionsdialog.cpp" line="611"/> <source>Prosecution:</source> <translation>Обвинение:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="597"/> + <location filename="../../src/aooptionsdialog.cpp" line="613"/> <source>If checked, you will get alerts about case announcements if a prosecutor spot is open.</source> - <translation>При заведении дела, в котором нужна сторона обвинения, вы получите уведомление.</translation> + <translation>Вы получите уведомление при объявлении дела, в котором нужна сторона обвинения.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="611"/> + <location filename="../../src/aooptionsdialog.cpp" line="627"/> <source>Judge:</source> <translation>Судья:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="612"/> + <location filename="../../src/aooptionsdialog.cpp" line="628"/> <source>If checked, you will get alerts about case announcements if the judge spot is open.</source> - <translation>При заведении дела, в котором нужен судья, вы получите уведомление.</translation> + <translation>Вы получите уведомление при объявлении дела, в котором нужен судья.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="626"/> + <location filename="../../src/aooptionsdialog.cpp" line="642"/> <source>Juror:</source> - <translation>Присяжный:</translation> + <translation>Присяжные:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="627"/> + <location filename="../../src/aooptionsdialog.cpp" line="643"/> <source>If checked, you will get alerts about case announcements if a juror spot is open.</source> - <translation>При заведении дела, в котором нужны присяжные заседатели, вы получите уведомление.</translation> + <translation>Вы получите уведомление при объявлении дела, в котором нужны присяжные заседатели.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="641"/> + <location filename="../../src/aooptionsdialog.cpp" line="657"/> <source>Stenographer:</source> <translation>Стенографист:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="643"/> + <location filename="../../src/aooptionsdialog.cpp" line="659"/> <source>If checked, you will get alerts about case announcements if a stenographer spot is open.</source> - <translation>При заведении дела, в котором нужна стенография, вы получите уведомление.</translation> + <translation>Вы получите уведомление при объявлении дела, в котором нужна стенография.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="657"/> + <location filename="../../src/aooptionsdialog.cpp" line="673"/> <source>CM:</source> <translation>ПД:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="659"/> + <location filename="../../src/aooptionsdialog.cpp" line="675"/> <source>If checked, you will appear amongst the potential CMs on the server.</source> - <translation>Отметьте, если вы хотите состоять в числе производителей дел.</translation> + <translation>Отметьте, если хотите состоять в числе возможных производителей дел (ПД).</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="673"/> + <location filename="../../src/aooptionsdialog.cpp" line="689"/> <source>Hosting cases:</source> - <translation>ПД акт.:</translation> + <translation>Проведение дел:</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="675"/> + <location filename="../../src/aooptionsdialog.cpp" line="691"/> <source>If you're a CM, enter what cases you are willing to host.</source> - <translation>Будучи производителем дела (ПД), вы можете войти в зону и заниматься её оркестровкой.</translation> + <translation>Если вы производитель дел (ПД), укажите, какими делами вы хотите заниматься.</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="705"/> + <source>Automatic Logging:</source> + <translation>Авт. сохранение истории:</translation> + </message> + <message> + <location filename="../../src/aooptionsdialog.cpp" line="707"/> + <source>If checked, all logs will be automatically written in the /logs folder.</source> + <translation>Автоматически сохранять всю историю чатов в папке /logs.</translation> </message> </context> <context> @@ -516,7 +542,7 @@ Reason: </source> <message> <location filename="../../src/charselect.cpp" line="27"/> <source>Spectator</source> - <translation>Наблюдатель</translation> + <translation>Зритель</translation> </message> <message> <location filename="../../src/charselect.cpp" line="30"/> @@ -527,7 +553,7 @@ Reason: </source> <message> <location filename="../../src/charselect.cpp" line="35"/> <source>Passworded</source> - <translation>Ограничен паролем</translation> + <translation>Защищён паролем</translation> </message> <message> <location filename="../../src/charselect.cpp" line="39"/> @@ -535,7 +561,7 @@ Reason: </source> <translation>Занят</translation> </message> <message> - <location filename="../../src/charselect.cpp" line="231"/> + <location filename="../../src/charselect.cpp" line="236"/> <source>Generating chars: %1/%2</source> <translation>Генерация персонажей: @@ -544,7 +570,7 @@ Reason: </source> <message> <source>Generating chars: </source> - <translation type="vanished">Генерация персонажей: + <translation type="obsolete">Генерация персонажей: </translation> </message> <message> @@ -565,17 +591,17 @@ Reason: </source> <message> <location filename="../../src/courtroom.cpp" line="217"/> <source>Pre</source> - <translation>Пред.</translation> + <translation type="unfinished"></translation> </message> <message> <location filename="../../src/courtroom.cpp" line="220"/> <source>Flip</source> - <translation>Разв.</translation> + <translation type="unfinished"></translation> </message> <message> <location filename="../../src/courtroom.cpp" line="224"/> <source>Guard</source> - <translation>Охрана</translation> + <translation type="unfinished"></translation> </message> <message> <location filename="../../src/courtroom.cpp" line="228"/> @@ -584,73 +610,73 @@ Reason: </source> </message> <message> <location filename="../../src/courtroom.cpp" line="233"/> - <location filename="../../src/courtroom.cpp" line="815"/> + <location filename="../../src/courtroom.cpp" line="822"/> <source>Casing</source> - <translation>Дело</translation> + <translation type="unfinished"></translation> </message> <message> <location filename="../../src/courtroom.cpp" line="238"/> <source>Shownames</source> - <translation>Произв. имена</translation> + <translation type="unfinished"></translation> </message> <message> <location filename="../../src/courtroom.cpp" line="241"/> <source>No Interrupt</source> - <translation>Говорить сразу</translation> + <translation type="unfinished"></translation> </message> <message> <source>White</source> - <translation type="vanished">Белый</translation> + <translation type="obsolete">Белый</translation> </message> <message> <source>Green</source> - <translation type="vanished">Зелëный</translation> + <translation type="obsolete">Зелëный</translation> </message> <message> <source>Red</source> - <translation type="vanished">Красный</translation> + <translation type="obsolete">Красный</translation> </message> <message> <source>Orange</source> - <translation type="vanished">Оранжевый</translation> + <translation type="obsolete">Оранжевый</translation> </message> <message> <source>Blue</source> - <translation type="vanished">Синий</translation> + <translation type="obsolete">Синий</translation> </message> <message> <source>Yellow</source> - <translation type="vanished">Жëлтый</translation> + <translation type="obsolete">Жëлтый</translation> </message> <message> <source>This does nothing, but there you go.</source> - <translation type="vanished">В общем-то, это ни на что не влияет...</translation> + <translation type="obsolete">В общем-то, это ни на что не влияет...</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3315"/> + <location filename="../../src/courtroom.cpp" line="3444"/> <source>You need to give a filename to load (extension not needed)! Make sure that it is in the `base/cases/` folder, and that it is a correctly formatted ini. Cases you can load: %1</source> - <translation>Укажите имя файла с делом (без расширения) для загрузки. Убедитесь, что оно расположено в папке `base/cases`. -Были найдены: %1</translation> + <translation>Укажите имя файла с делом (без расширения) для загрузки. Убедитесь, что он расположен в папке `base/cases`, и что это правильно отформатированный файл .ini. +Вы можете загрузить следующие дела: %1</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3343"/> + <location filename="../../src/courtroom.cpp" line="3473"/> <source>Case made by %1.</source> - <translation>Дело завëл игрок: %1.</translation> + <translation>Автор дела: %1.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3353"/> + <location filename="../../src/courtroom.cpp" line="3482"/> <source>Navigate to %1 for the CM doc.</source> - <translation>Перейдите к %1 для получения материалов дела.</translation> + <translation>Откройте %1 для получения материалов дела.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3377"/> + <location filename="../../src/courtroom.cpp" line="3506"/> <source>Your case "%1" was loaded!</source> - <translation>Дело под кодовым названием "%1" готово!</translation> + <translation>Ваше дело "%1" было загружено!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="767"/> - <location filename="../../src/courtroom.cpp" line="3475"/> + <location filename="../../src/courtroom.cpp" line="774"/> + <location filename="../../src/courtroom.cpp" line="3604"/> <source>Server</source> <translation>Сервер</translation> </message> @@ -660,582 +686,600 @@ Cases you can load: %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="749"/> + <location filename="../../src/courtroom.cpp" line="756"/> <source>Hold It!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="750"/> - <location filename="../../src/courtroom.cpp" line="756"/> - <location filename="../../src/courtroom.cpp" line="762"/> + <location filename="../../src/courtroom.cpp" line="757"/> + <location filename="../../src/courtroom.cpp" line="763"/> + <location filename="../../src/courtroom.cpp" line="769"/> <source>When this is turned on, your next in-character message will be a shout!</source> - <translation type="unfinished"></translation> + <translation>Когда эта опция включена, ваше следующее сообщение в игровом чате будет с возгласом!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="755"/> + <location filename="../../src/courtroom.cpp" line="762"/> <source>Objection!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="761"/> + <location filename="../../src/courtroom.cpp" line="768"/> <source>Take That!</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="769"/> + <location filename="../../src/courtroom.cpp" line="776"/> <source>Toggle between server chat and global AO2 chat.</source> - <translation type="unfinished"></translation> + <translation>Переключатель между чатом сервера и общим чатом AO2.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="773"/> - <location filename="../../src/courtroom.cpp" line="777"/> - <location filename="../../src/courtroom.cpp" line="783"/> - <location filename="../../src/courtroom.cpp" line="787"/> + <location filename="../../src/courtroom.cpp" line="780"/> + <location filename="../../src/courtroom.cpp" line="784"/> + <location filename="../../src/courtroom.cpp" line="790"/> + <location filename="../../src/courtroom.cpp" line="794"/> <source>This will display the animation in the viewport as soon as it is pressed.</source> - <translation type="unfinished"></translation> + <translation>Показать анимацию в игровом чате сразу после нажатия.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="781"/> + <location filename="../../src/courtroom.cpp" line="788"/> <source>Guilty!</source> - <translation type="unfinished"></translation> + <translation>Виновен!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="794"/> + <location filename="../../src/courtroom.cpp" line="801"/> <source>Bring up the Character Select Screen and change your character.</source> - <translation type="unfinished"></translation> + <translation>Перейти на экран выбора и сменить персонажа.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="800"/> + <location filename="../../src/courtroom.cpp" line="807"/> <source>Refresh the theme and update all of the ui elements to match.</source> - <translation type="unfinished"></translation> + <translation>Перезагрузить тему и обновить все элементы интерфейса.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="806"/> + <location filename="../../src/courtroom.cpp" line="813"/> <source>Request the attention of the current server's moderator.</source> - <translation type="unfinished"></translation> + <translation>Привлечь внимание модератора сервера.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="812"/> + <location filename="../../src/courtroom.cpp" line="819"/> <source>Allows you to change various aspects of the client.</source> - <translation type="unfinished"></translation> + <translation>Изменить параметры работы программы.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="818"/> + <location filename="../../src/courtroom.cpp" line="825"/> <source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source> - <translation type="unfinished"></translation> + <translation>Открыть окно, которое позволит вам объявить о деле +(для этого нужно быть производителем дел (ПД))</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="824"/> + <location filename="../../src/courtroom.cpp" line="831"/> <source>Switch between Areas and Music lists</source> - <translation type="unfinished"></translation> + <translation>Переключатель между списками музыки и локаций</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="829"/> + <location filename="../../src/courtroom.cpp" line="836"/> <source>Play a single-shot animation as defined by the emote when checked.</source> - <translation type="unfinished"></translation> + <translation>Показать разовую анимацию, соответствующую выбранной эмоции.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="833"/> + <location filename="../../src/courtroom.cpp" line="840"/> <source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source> - <translation type="unfinished"></translation> + <translation>Если включена предварительная анимация: вывести текст, не дожидаясь окончания предварительной анимации.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="837"/> + <location filename="../../src/courtroom.cpp" line="844"/> <source>Mirror your character's emotes when checked.</source> - <translation type="unfinished"></translation> + <translation>Отразить анимации персонажа по горизонтали.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="841"/> + <location filename="../../src/courtroom.cpp" line="848"/> <source>Add text to your last spoken message when checked.</source> - <translation type="unfinished"></translation> + <translation>Добавлять текст к своему последнему сообщению.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="845"/> + <location filename="../../src/courtroom.cpp" line="852"/> <source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source> - <translation type="unfinished"></translation> + <translation>Заглушить вызовы модератора: вы не будете получать звуковые оповещения, а игра не будет привлекать к себе внимание.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="849"/> + <location filename="../../src/courtroom.cpp" line="856"/> <source>Lets you receive case alerts when enabled. (You can set your preferences in the Settings!)</source> - <translation type="unfinished"></translation> + <translation>Получать уведомления о заседаниях. +(См. подробнее в меню опций)</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="854"/> + <location filename="../../src/courtroom.cpp" line="861"/> <source>Display customized shownames for all users when checked.</source> - <translation type="unfinished"></translation> + <translation>Показывать пользовательские имена для всех.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="857"/> + <location filename="../../src/courtroom.cpp" line="864"/> <source>Custom Shout!</source> - <translation type="unfinished"></translation> + <translation>Пользовательский возглас!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="860"/> + <location filename="../../src/courtroom.cpp" line="867"/> <source>This will display the custom character-defined animation in the viewport as soon as it is pressed. To make one, your character's folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source> - <translation type="unfinished"></translation> + <translation>Показать в игровом чате анимацию, уникальную для персонажа, сразу после нажатия. +Для добавления такой анимации поместите в папку персонажа свои изображения +в формате webp/apng/gif/png и звук в формате wav/ogg/opus</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="868"/> + <location filename="../../src/courtroom.cpp" line="875"/> <source>Play realization sound and animation in the viewport on the next spoken message when checked.</source> - <translation type="unfinished"></translation> + <translation>Показать вспышку и воспроизвести звук озарения во время вывода следующей реплики.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="874"/> + <location filename="../../src/courtroom.cpp" line="881"/> <source>Shake the screen on next spoken message when checked.</source> - <translation type="unfinished"></translation> + <translation>Потрясти экран во время вывода следующей реплики.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="880"/> + <location filename="../../src/courtroom.cpp" line="887"/> <source>Display the list of character folders you wish to mute.</source> - <translation type="unfinished"></translation> + <translation>Выбрать персонажей, которых нужно игнорировать.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="884"/> - <location filename="../../src/courtroom.cpp" line="892"/> + <location filename="../../src/courtroom.cpp" line="891"/> + <location filename="../../src/courtroom.cpp" line="899"/> <source>Increase the health bar.</source> - <translation type="unfinished"></translation> + <translation>Поощрить.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="888"/> - <location filename="../../src/courtroom.cpp" line="896"/> + <location filename="../../src/courtroom.cpp" line="895"/> + <location filename="../../src/courtroom.cpp" line="903"/> <source>Decrease the health bar.</source> - <translation type="unfinished"></translation> + <translation>Оштрафовать.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="900"/> + <location filename="../../src/courtroom.cpp" line="907"/> <source>Change the text color of the spoken message. You can also select a part of your currently typed message and use the dropdown to change its color!</source> - <translation type="unfinished"></translation> + <translation>Изменить цвет текста сообщения. +Вы также можете выделить часть текста и изменить только её цвет в выпадающем меню.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="913"/> + <location filename="../../src/courtroom.cpp" line="920"/> <source>Back to Lobby</source> <translation>Назад в лобби</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3061"/> - <location filename="../../src/courtroom.cpp" line="4479"/> - <location filename="../../src/courtroom.cpp" line="4486"/> + <location filename="../../src/courtroom.cpp" line="3188"/> + <location filename="../../src/courtroom.cpp" line="4656"/> + <location filename="../../src/courtroom.cpp" line="4663"/> <source>has played a song</source> - <translation type="unfinished"></translation> + <translation>включил(а) композицию</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3195"/> + <location filename="../../src/courtroom.cpp" line="3322"/> <source>You will now pair up with %1 if they also choose your character in return.</source> - <translation type="unfinished"></translation> + <translation>Вы встанете рядом с %1, если он(а) выберет вашего персонажа.</translation> </message> <message> <source>Rainbow</source> - <translation type="vanished">Радужный</translation> + <translation type="obsolete">Радужный</translation> </message> <message> <source>Pink</source> - <translation type="vanished">Розовый</translation> + <translation type="obsolete">Розовый</translation> </message> <message> <source>Cyan</source> - <translation type="vanished">Голубой</translation> + <translation type="obsolete">Голубой</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="274"/> + <location filename="../../src/courtroom.cpp" line="276"/> <source>% offset</source> <translation>% сдвига</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="277"/> + <location filename="../../src/courtroom.cpp" line="279"/> <source>To front</source> - <translation type="unfinished"></translation> + <translation>Вперёд</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="278"/> + <location filename="../../src/courtroom.cpp" line="280"/> <source>To behind</source> - <translation type="unfinished"></translation> + <translation>Назад</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="591"/> + <location filename="../../src/courtroom.cpp" line="598"/> <source>Select a character you wish to pair with.</source> - <translation type="unfinished"></translation> + <translation>Выберите персонажа, с которым хотите встать рядом.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="596"/> + <location filename="../../src/courtroom.cpp" line="603"/> <source>Change the percentage offset of your character's position from the center of the screen.</source> - <translation type="unfinished"></translation> + <translation>Изменить процент сдвига вашего персонажа относительно центра экрана.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="602"/> + <location filename="../../src/courtroom.cpp" line="609"/> <source>Change the order of appearance for your character.</source> - <translation type="unfinished"></translation> + <translation>Переместить вашего персонажа вперёд или назад относительно партнёра.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="607"/> + <location filename="../../src/courtroom.cpp" line="614"/> <source>Display the list of characters to pair with.</source> - <translation type="unfinished"></translation> + <translation>Показать список персонажей, с которыми можно встать рядом.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="665"/> + <location filename="../../src/courtroom.cpp" line="672"/> <source>Oops, you're muted!</source> - <translation type="unfinished"></translation> + <translation>О нет, вас заглушили!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="679"/> + <location filename="../../src/courtroom.cpp" line="686"/> <source>Set your character's emote to play on your next message.</source> - <translation type="unfinished"></translation> + <translation>Выберите эмоцию для отображения при выводе вашего следующего сообщения.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="683"/> + <location filename="../../src/courtroom.cpp" line="690"/> <source>Set your character's supplementary background.</source> - <translation type="unfinished"></translation> + <translation>Установить фон для вашего персонажа.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="689"/> + <location filename="../../src/courtroom.cpp" line="696"/> <source>Set an 'iniswap', or an alternative character folder to refer to from your current character. Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/iniswaps.ini</source> - <translation type="unfinished"></translation> + <translation>Включить т.н. подмену ini – альтернативную папку персонажа, к которой будет обращаться текущий персонаж. +Введите имя персонажа и нажмите Enter; нажмите [X], чтобы удалить. +Изменения сохраняются по следующему пути: base/characters/<имя_персонажа>/iniswaps.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="698"/> - <location filename="../../src/courtroom.cpp" line="715"/> + <location filename="../../src/courtroom.cpp" line="705"/> + <location filename="../../src/courtroom.cpp" line="722"/> <source>Remove the currently selected iniswap from the list and return to the original character folder.</source> - <translation type="unfinished"></translation> + <translation>Удалить выбранного для подмены ini персонажа и вернуться к папке изначально выбранного персонажа.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="706"/> + <location filename="../../src/courtroom.cpp" line="713"/> <source>Set a sound effect to play on your next 'Preanim'. Leaving it on Default will use the emote-defined sound (if any). Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/soundlist.ini</source> - <translation type="unfinished"></translation> + <translation>Выберите звук, который нужно воспроизвести со следующей пред. анимацией. +Если выбрано "по умолчанию", вы услышите звук, заданный пред. анимацией (если он есть). +Выберите или введите название звука и нажмите Enter; нажмите [X], чтобы удалить. +Изменения сохраняются по следующему пути: base/characters/<имя_персонажа>/soundlist.ini</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="722"/> + <location filename="../../src/courtroom.cpp" line="729"/> <source>Choose an effect to play on your next spoken message. The effects are defined in your theme/effects/effects.ini. Your character can define custom effects by char.ini [Options] category, effects = 'miscname' where it referes to misc/<miscname>/effects.ini to read the effects.</source> - <translation type="unfinished"></translation> + <translation>Выберите эффект, который нужно воспроизвести с вашим следующим сообщением. +Эффекты определяются файлом theme/effects/effects.ini. Ваш персонаж может задать собственные эффекты +в категории [Options] файла char.ini, effects = 'название', что отсылает к файлу misc/<название>/effects.ini.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="742"/> + <location filename="../../src/courtroom.cpp" line="749"/> <source>Music</source> - <translation>Музыка</translation> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="744"/> + <location filename="../../src/courtroom.cpp" line="751"/> <source>Sfx</source> - <translation>Звук. эффекты</translation> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="746"/> + <location filename="../../src/courtroom.cpp" line="753"/> <source>Blips</source> - <translation>Сигналы</translation> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="791"/> + <location filename="../../src/courtroom.cpp" line="798"/> <source>Change character</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="797"/> + <location filename="../../src/courtroom.cpp" line="804"/> <source>Reload theme</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="803"/> + <location filename="../../src/courtroom.cpp" line="810"/> <source>Call mod</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="809"/> + <location filename="../../src/courtroom.cpp" line="816"/> <source>Settings</source> - <translation>Настройки</translation> + <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="822"/> + <location filename="../../src/courtroom.cpp" line="829"/> <source>A/M</source> - <translation type="unfinished"></translation> + <translation>Л/М</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="827"/> + <location filename="../../src/courtroom.cpp" line="834"/> <source>Preanim</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="914"/> + <location filename="../../src/courtroom.cpp" line="921"/> <source>Return back to the server list.</source> - <translation type="unfinished"></translation> + <translation>Вернуться к списку серверов.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="927"/> + <location filename="../../src/courtroom.cpp" line="934"/> <source>Become a spectator. You won't be able to interact with the in-character screen.</source> - <translation type="unfinished"></translation> + <translation>Зайти в качестве зрителя. Вы не сможете взаимодействовать с игровым чатом.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> + <location filename="../../src/courtroom.cpp" line="1527"/> <source>You were granted the Disable Modcalls button.</source> - <translation type="unfinished"></translation> + <translation>Вам дали кнопку выключения вызова модератора.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="1457"/> - <location filename="../../src/courtroom.cpp" line="3343"/> + <location filename="../../src/courtroom.cpp" line="1527"/> + <location filename="../../src/courtroom.cpp" line="3472"/> <source>CLIENT</source> - <translation type="unfinished"></translation> + <translation>КЛИЕНТ</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="2984"/> + <location filename="../../src/courtroom.cpp" line="3106"/> <source>You have been banned.</source> - <translation type="unfinished"></translation> + <translation>Вас забанили.</translation> </message> <message> <source>You were granted the Guard button.</source> - <translation type="vanished">Теперь у вас есть кнопка "Охрана".</translation> + <translation type="obsolete">Теперь у вас есть кнопка "Охрана".</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3182"/> + <location filename="../../src/courtroom.cpp" line="3309"/> <source>You opened the settings menu.</source> - <translation>Вы открыли меню настроек.</translation> + <translation>Вы открыли меню опций.</translation> </message> <message> <source>You will now pair up with </source> - <translation type="vanished">Вы встанете парой с персонажем по имени </translation> + <translation type="obsolete">Вы встанете парой с персонажем по имени </translation> </message> <message> <source> if they also choose your character in return.</source> - <translation type="vanished"> (если он выберет вас в ответ).</translation> + <translation type="obsolete"> (если он выберет вас в ответ).</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3201"/> + <location filename="../../src/courtroom.cpp" line="3330"/> <source>You are no longer paired with anyone.</source> - <translation>Теперь вы не стоите в парах.</translation> + <translation>Вы больше не стоите рядом ни с кем.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3206"/> + <location filename="../../src/courtroom.cpp" line="3335"/> <source>Are you sure you typed that well? The char ID could not be recognised.</source> - <translation>Кажется, вам нужно поменять запрос: такой идентификатор персонажа не был найден.</translation> + <translation>Убедитесь в правильности введённой информации: персонаж с таким ID не найден.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3221"/> + <location filename="../../src/courtroom.cpp" line="3350"/> <source>You have set your offset to </source> <translation>Вы установили сдвиг персонажа на </translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3228"/> + <location filename="../../src/courtroom.cpp" line="3357"/> <source>Your offset must be between -100% and 100%!</source> <translation>Сдвиг персонажа должен быть между -100% и 100%!</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3233"/> + <location filename="../../src/courtroom.cpp" line="3362"/> <source>That offset does not look like one.</source> <translation>Неверный сдвиг персонажа.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3239"/> + <location filename="../../src/courtroom.cpp" line="3368"/> <source>You switched your music and area list.</source> - <translation>Вы переключили перечень зон и музыки.</translation> + <translation>Вы переключили списки локаций и музыки.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3246"/> + <location filename="../../src/courtroom.cpp" line="3375"/> <source>You have forcefully enabled features that the server may not support. You may not be able to talk IC, or worse, because of this.</source> - <translation>Из-за того, что вы включили не поддержимаемые сервером возможности, он может не принять ваши сообщения.</translation> + <translation>Из-за того, что вы включили не поддерживаемые сервером возможности, он может не принять ваши сообщения.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3260"/> + <location filename="../../src/courtroom.cpp" line="3389"/> <source>Your pre-animations interrupt again.</source> - <translation>Персонаж будет говорить только после анимации.</translation> + <translation>Персонаж будет говорить только после предварительной анимации.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3263"/> + <location filename="../../src/courtroom.cpp" line="3392"/> <source>Your pre-animations will not interrupt text.</source> - <translation>Персонаж будет говорить и во время анимации.</translation> + <translation>Предварительные анимации не будут прерывать вывод текста.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3274"/> + <location filename="../../src/courtroom.cpp" line="3403"/> <source>Couldn't open chatlog.txt to write into.</source> - <translation>Не могу открыть `chatlog.txt` для записи лога.</translation> + <translation>Невозможно открыть `chatlog.txt` для записи.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3287"/> + <location filename="../../src/courtroom.cpp" line="3416"/> <source>The IC chatlog has been saved.</source> - <translation>Лог игрового чата сохранëн.</translation> + <translation>История игрового чата сохранена.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3300"/> + <location filename="../../src/courtroom.cpp" line="3429"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there.</source> - <translation>Файл с делом не найден. Если найдëте, положите его в папку `base/cases/`, которую мы для вас создали.</translation> + <translation>Файл с делом не найден. Если найдёте, положите его в папку `base/cases/`, которую мы для вас создали.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3327"/> + <location filename="../../src/courtroom.cpp" line="3456"/> <source>Too many arguments to load a case! You only need one filename, without extension.</source> <translation>Введите имя файла без расширения.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3367"/> - <location filename="../../src/courtroom.cpp" line="3369"/> - <location filename="../../src/evidence.cpp" line="761"/> - <location filename="../../src/evidence.cpp" line="763"/> + <location filename="../../src/courtroom.cpp" line="3496"/> + <location filename="../../src/courtroom.cpp" line="3498"/> + <location filename="../../src/evidence.cpp" line="762"/> + <location filename="../../src/evidence.cpp" line="764"/> <source>UNKNOWN</source> - <translation type="unfinished"></translation> + <translation>н/д</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3389"/> + <location filename="../../src/courtroom.cpp" line="3518"/> <source>You don't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it.</source> - <translation>Папка `base/cases/` отсутствует!</translation> + <translation>Папка `base/cases/` отсутствует.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3404"/> + <location filename="../../src/courtroom.cpp" line="3533"/> <source>You need to give a filename to save (extension not needed) and the courtroom status!</source> - <translation>Введите имя файла (без расширения) и предоставьте статус зоны.</translation> + <translation>Введите имя файла (без расширения) и укажите статус зала суда.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3414"/> + <location filename="../../src/courtroom.cpp" line="3543"/> <source>Too many arguments to save a case! You only need a filename without extension and the courtroom status!</source> - <translation>Убедитесь, что имя файла не содержит расширение.</translation> + <translation>Убедитесь, что имя файла указано без расширения.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3441"/> + <location filename="../../src/courtroom.cpp" line="3570"/> <source>Succesfully saved, edit doc and cmdoc link on the ini!</source> - <translation>Сохранение прошло успешно!</translation> + <translation>Сохранение прошло успешно. Ссылки на документы можно редактировать в ini.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3468"/> + <location filename="../../src/courtroom.cpp" line="3597"/> <source>Master</source> <translation>Мастер</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3968"/> + <location filename="../../src/courtroom.cpp" line="4104"/> + <source>Play Random Song</source> + <translation>Включить случайную композицию</translation> + </message> + <message> + <location filename="../../src/courtroom.cpp" line="4107"/> <source>Expand All Categories</source> - <translation type="unfinished"></translation> + <translation>Развернуть все категории</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3970"/> + <location filename="../../src/courtroom.cpp" line="4109"/> <source>Collapse All Categories</source> - <translation type="unfinished"></translation> + <translation>Свернуть все категории</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3974"/> + <location filename="../../src/courtroom.cpp" line="4113"/> <source>Fade Out Previous</source> - <translation type="unfinished"></translation> + <translation>Постепенное затухание предыдущей композиции</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3980"/> + <location filename="../../src/courtroom.cpp" line="4119"/> <source>Fade In</source> - <translation type="unfinished"></translation> + <translation>Постепенное нарастание</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="3986"/> + <location filename="../../src/courtroom.cpp" line="4125"/> <source>Synchronize</source> - <translation type="unfinished"></translation> + <translation>Синхронизировать</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4256"/> + <location filename="../../src/courtroom.cpp" line="4425"/> <source>Default</source> - <translation type="unfinished"></translation> + <translation>по умолчанию</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4417"/> + <location filename="../../src/courtroom.cpp" line="4594"/> <source>Reason:</source> <translation>Причина:</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4418"/> + <location filename="../../src/courtroom.cpp" line="4595"/> <source>Call Moderator</source> - <translation>Позвать модератора</translation> + <translation>Вызов модератора</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4426"/> - <location filename="../../src/courtroom.cpp" line="4430"/> + <location filename="../../src/courtroom.cpp" line="4603"/> + <location filename="../../src/courtroom.cpp" line="4607"/> <source>Error</source> <translation>Ошибка</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4426"/> + <location filename="../../src/courtroom.cpp" line="4603"/> <source>You must provide a reason.</source> <translation>Укажите причину.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="4430"/> + <location filename="../../src/courtroom.cpp" line="4607"/> <source>The message is too long.</source> - <translation>Слишком длинный текст.</translation> + <translation>Слишком длинное сообщение.</translation> </message> <message> <source>Choose...</source> - <translation type="vanished">Выбрать...</translation> + <translation type="obsolete">Выбрать...</translation> </message> <message> <location filename="../../src/evidence.cpp" line="17"/> <source>Present this piece of evidence to everyone on your next spoken message</source> - <translation type="unfinished"></translation> + <translation>Показать эту улику всем присутствующим вместе с вашим следующим сообщением.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="24"/> <source>Save evidence to an .ini file.</source> - <translation type="unfinished"></translation> + <translation>Сохранить улику в файл .ini.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="26"/> <source>Load evidence from an .ini file.</source> - <translation type="unfinished"></translation> + <translation>Загрузить улику из файла .ini.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="31"/> <source>Destroy this piece of evidence</source> - <translation type="unfinished"></translation> + <translation>Уничтожить эту улику.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="34"/> <source>Choose..</source> - <translation type="unfinished"></translation> + <translation>Выбрать...</translation> </message> <message> <location filename="../../src/evidence.cpp" line="37"/> <source>Close the evidence display/editing overlay. You will be prompted if there's any unsaved changes.</source> - <translation type="unfinished"></translation> + <translation>Закрыть окно редактирования улики. +Если вы не сохранили изменения, вы увидите диалоговое окно.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="40"/> <source>Save any changes made to this piece of evidence and send them to server.</source> - <translation type="unfinished"></translation> + <translation>Сохранить все изменения, внесённые в улику, и отправить её на сервер.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="48"/> <source>Double-click to edit. Press [X] to update your changes.</source> - <translation type="unfinished"></translation> + <translation>Редактирование по двойному клику. Нажмите [X] для обновления.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="104"/> <source>Bring up the Evidence screen.</source> - <translation type="unfinished"></translation> + <translation>Открыть окно управления уликами.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="147"/> <source>Switch evidence to private inventory.</source> - <translation type="unfinished"></translation> + <translation>Перейти к своему списку.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="151"/> <source>Switch evidence to global inventory.</source> - <translation type="unfinished"></translation> + <translation>Перейти к общему списку.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="158"/> <location filename="../../src/evidence.cpp" line="617"/> <source>Transfer evidence to private inventory.</source> - <translation type="unfinished"></translation> + <translation>Перенести улику в свой список.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="163"/> <location filename="../../src/evidence.cpp" line="627"/> <source>Transfer evidence to global inventory.</source> - <translation type="unfinished"></translation> + <translation>Перенести улику в общий список.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="263"/> <source>The piece of evidence you've been editing has changed.</source> - <translation type="unfinished"></translation> + <translation>В улику, которую вы редактировали, были внесены изменения.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="264"/> <source>Do you wish to keep your changes?</source> - <translation type="unfinished"></translation> + <translation>Хотите сохранить внесённые изменения?</translation> </message> <message> <location filename="../../src/evidence.cpp" line="265"/> @@ -1243,7 +1287,10 @@ You will be prompted if there's any unsaved changes.</source> Image: %2 Description: %3</source> - <translation type="unfinished"></translation> + <translation>Название: %1 +Изображение: %2 +Описание: +%3</translation> </message> <message> <location filename="../../src/evidence.cpp" line="387"/> @@ -1255,7 +1302,7 @@ Description: <location filename="../../src/evidence.cpp" line="460"/> <location filename="../../src/evidence.cpp" line="463"/> <source>Double-click to edit...</source> - <translation type="unfinished"></translation> + <translation>Редактирование по двойному клику...</translation> </message> <message> <location filename="../../src/evidence.cpp" line="478"/> @@ -1265,43 +1312,43 @@ Description: <message> <location filename="../../src/evidence.cpp" line="556"/> <source>Evidence has been modified.</source> - <translation type="unfinished"></translation> + <translation>Улика была изменена.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="557"/> <source>Do you want to save your changes?</source> - <translation type="unfinished"></translation> + <translation>Хотите сохранить внесённые изменения?</translation> </message> <message> <location filename="../../src/evidence.cpp" line="619"/> <source>Current evidence is global. Click to switch to private.</source> - <translation type="unfinished"></translation> + <translation>Вы видите общий список улик. Нажмите здесь для просмотра своих улик.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="629"/> <source>Current evidence is private. Click to switch to global.</source> - <translation type="unfinished"></translation> + <translation>Вы видите свой список улик. Нажмите здесь для просмотра общих улик.</translation> </message> <message> <location filename="../../src/evidence.cpp" line="659"/> <source>"%1" has been transferred.</source> - <translation type="unfinished"></translation> + <translation>Улика "%1" была перенесена.</translation> </message> <message> - <location filename="../../src/evidence.cpp" line="721"/> + <location filename="../../src/evidence.cpp" line="722"/> <source>Save Inventory</source> - <translation type="unfinished"></translation> + <translation>Сохранить список улик</translation> </message> <message> - <location filename="../../src/evidence.cpp" line="721"/> - <location filename="../../src/evidence.cpp" line="747"/> + <location filename="../../src/evidence.cpp" line="722"/> + <location filename="../../src/evidence.cpp" line="748"/> <source>Ini Files (*.ini)</source> - <translation type="unfinished"></translation> + <translation>Файлы ini (*.ini)</translation> </message> <message> - <location filename="../../src/evidence.cpp" line="747"/> + <location filename="../../src/evidence.cpp" line="748"/> <source>Open Inventory</source> - <translation type="unfinished"></translation> + <translation>Загрузить список улик</translation> </message> </context> <context> @@ -1314,7 +1361,7 @@ Description: <message> <location filename="../../src/lobby.cpp" line="31"/> <source>Search</source> - <translation type="unfinished">Поиск</translation> + <translation>Поиск</translation> </message> <message> <location filename="../../src/lobby.cpp" line="39"/> @@ -1325,8 +1372,8 @@ Description: <location filename="../../src/lobby.cpp" line="94"/> <source>It doesn't look like your client is set up correctly. Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder?</source> - <translation>Не похоже, что ваш клиент установлен правильно. -Скачали ли вы все ресурсы (tiny.cc/getao), включая огромную папку `base`?</translation> + <translation>Кажется, ваш клиент неправильно настроен. +Вы точно скачали все ресурсы отсюда tiny.cc/getao, включая огромную папку `base`?</translation> </message> <message> <location filename="../../src/lobby.cpp" line="123"/> @@ -1336,12 +1383,12 @@ Did you download all resources correctly from tiny.cc/getao, including the large <message> <location filename="../../src/lobby.cpp" line="129"/> <source>Settings</source> - <translation type="unfinished">Настройки</translation> + <translation>Опции</translation> </message> <message> <location filename="../../src/lobby.cpp" line="132"/> <source>Allows you to change various aspects of the client.</source> - <translation type="unfinished"></translation> + <translation>Изменить параметры работы программы.</translation> </message> <message> <location filename="../../src/lobby.cpp" line="176"/> @@ -1354,29 +1401,29 @@ Did you download all resources correctly from tiny.cc/getao, including the large <translation>Отмена</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="360"/> - <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>2.8 Major Release development:</b><br>Crystalwarrior, Iamgoofball<p><b>2.8 Quality Assurance:</b><br>WillDean, Captain N, Mr M, Riel, Seimmet, Fury McFlurry,CedricDewitt, Chewable Tablets, Fantos, Futugaze,Geck, Minx, Pandae, Sierra, CrazyJC, CaseyMayCazy,GreenBowers, Robotic Overlord, Veritas, Gin-Gi<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy, the AO2 community, server hosts, game masters,case makers, content creators and players!</source> - <translation type="unfinished"></translation> + <location filename="../../src/lobby.cpp" line="365"/> + <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> + <translation><h2>Attorney Online %1</h2>Симулятор драмы в зале суда<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основная разработка:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Разработка клиента:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Тестирование:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Благодарности:</b><br>CrazyJC (директор по выпуску версии 2.8) и MaximumVolty (продвижение версии 2.8); Remy, Hibiki, court-records.net (спрайты); Qubrick (webAO); Rue (вебсайт); Draxirch (дизайн интерфейса); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, и FanatSors (AO1); держатели серверов, ГМ, ПД, создатели контента, и всё сообщество AO2!<p>Проект сетевой визуальной новеллы Attorney Online (c) 2016-2020 разработчики Attorney Online. Применяется лицензия на открытое ПО. Все прочие файлы являются собственностью их владельцев.<p>Работает на Qt версии %2 с аудио-движком %3.<p>Сборка от %4</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="380"/> + <location filename="../../src/lobby.cpp" line="398"/> <source>About</source> - <translation type="unfinished"></translation> + <translation>О программе</translation> </message> <message> <source><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Special thanks:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (UI design), Draxirch (UI design), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</source> - <translation type="vanished"><h2>Attorney Online %1</h2>Симулятор судебной драмы<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основной разработкой занимались:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Особенная благодарность:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation> + <translation type="obsolete"><h2>Attorney Online %1</h2>Симулятор судебной драмы<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основной разработкой занимались:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Особенная благодарность:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="521"/> + <location filename="../../src/lobby.cpp" line="540"/> <source>Online: %1/%2</source> <translation>Онлайн: %1/%2</translation> </message> <message> <location filename="../../src/lobby.cpp" line="142"/> - <location filename="../../src/lobby.cpp" line="418"/> + <location filename="../../src/lobby.cpp" line="436"/> <source>Offline</source> - <translation>Вне сети</translation> + <translation>Не в сети</translation> </message> </context> <context> @@ -1386,12 +1433,12 @@ Did you download all resources correctly from tiny.cc/getao, including the large <location filename="../../src/chatlogpiece.cpp" line="6"/> <location filename="../../src/chatlogpiece.cpp" line="7"/> <source>UNKNOWN</source> - <translation type="unfinished"></translation> + <translation>н/д</translation> </message> <message> - <location filename="../../src/chatlogpiece.cpp" line="55"/> + <location filename="../../src/chatlogpiece.cpp" line="61"/> <source> has played a song: </source> - <translation type="unfinished"></translation> + <translation> включил(а) композицию: </translation> </message> </context> <context> @@ -1409,7 +1456,7 @@ Did you download all resources correctly from tiny.cc/getao, including the large <message> <location filename="../../src/debug_functions.cpp" line="25"/> <source>Notice</source> - <translation>На заметку</translation> + <translation>Уведомление</translation> </message> </context> </TS> diff --git a/scripts/update_manifest.js b/scripts/update_manifest.js index 1a06a2d7..bbd2a5f4 100755 --- a/scripts/update_manifest.js +++ b/scripts/update_manifest.js @@ -101,9 +101,7 @@ const specialActions = changesFile ? // higher-level directories will succeed. .concat(Array.from(dirsDeleted.values()) .sort((a, b) => b.split("/").length - a.split("/").length) - .map(dir => { - return { action: "deleteDir", target: dir }; - })) + .map(dir => ({ action: "deleteDir", target: dir }))) : []; const urlBase = "https://s3.wasabisys.com/ao-downloads/"; diff --git a/scripts/windows/Dockerfile b/scripts/windows/Dockerfile index b9a12d66..9d3cca06 100644 --- a/scripts/windows/Dockerfile +++ b/scripts/windows/Dockerfile @@ -3,6 +3,11 @@ FROM oldmud0/mxe-qt:5.13.0-win32-static-posix ENV TARGET_SPEC i686-w64-mingw32.static.posix +# Build libarchive statically +WORKDIR /opt/mxe +RUN make -j4 MXE_TARGETS=${TARGET_SPEC} libarchive bzip2 xz lz4 zstd nettle expat libxml2 +WORKDIR / + # Build Discord RPC statically RUN git clone https://github.com/discordapp/discord-rpc WORKDIR discord-rpc/build diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index e1e9e7fe..fa58ab84 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -177,3 +177,64 @@ void AOApplication::call_announce_menu(Courtroom *court) AOCaseAnnouncerDialog announcer(nullptr, this, court); announcer.exec(); } + +// Callback for when BASS device is lost +void CALLBACK AOApplication::BASSreset(HSTREAM handle, DWORD channel, + DWORD data, void *user) +{ + doBASSreset(); +} + +void AOApplication::doBASSreset() +{ + BASS_Free(); + BASS_Init(-1, 48000, BASS_DEVICE_LATENCY, nullptr, nullptr); + load_bass_opus_plugin(); +} + +void AOApplication::initBASS() +{ + BASS_Free(); + // Change the default audio output device to be the one the user has given + // in his config.ini file for now. + unsigned int a = 0; + BASS_DEVICEINFO info; + + if (get_audio_output_device() == "default") { + BASS_Init(-1, 48000, BASS_DEVICE_LATENCY, nullptr, nullptr); + load_bass_opus_plugin(); + } + else { + for (a = 0; BASS_GetDeviceInfo(a, &info); a++) { + if (get_audio_output_device() == info.name) { + BASS_SetDevice(a); + BASS_Init(static_cast<int>(a), 48000, BASS_DEVICE_LATENCY, nullptr, + nullptr); + load_bass_opus_plugin(); + qDebug() << info.name << "was set as the default audio output device."; + return; + } + } + BASS_Init(-1, 48000, BASS_DEVICE_LATENCY, nullptr, nullptr); + load_bass_opus_plugin(); + } +} + +#if (defined(_WIN32) || defined(_WIN64)) +void AOApplication::load_bass_opus_plugin() +{ + BASS_PluginLoad("bassopus.dll", 0); +} +#elif (defined(LINUX) || defined(__linux__)) +void AOApplication::load_bass_opus_plugin() +{ + BASS_PluginLoad("libbassopus.so", 0); +} +#elif defined __APPLE__ +void AOApplication::load_bass_opus_plugin() +{ + BASS_PluginLoad("libbassopus.dylib", 0); +} +#else +#error This operating system is unsupported for BASS plugins. +#endif diff --git a/src/aoblipplayer.cpp b/src/aoblipplayer.cpp index 57b2d278..5b4d625c 100644 --- a/src/aoblipplayer.cpp +++ b/src/aoblipplayer.cpp @@ -1,6 +1,5 @@ #include "aoblipplayer.h" -#if defined(BASSAUDIO) // Using bass.dll for the blips AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) { m_parent = parent; @@ -37,8 +36,14 @@ void AOBlipPlayer::blip_tick() m_cycle = 0; HSTREAM f_stream = m_stream_list[f_cycle]; - if (ao_app->get_audio_output_device() != "default") + + BASS_ChannelSetDevice(f_stream, BASS_GetDevice()); + int f_bass_error = BASS_ErrorGetCode(); + if (f_bass_error == BASS_ERROR_DEVICE) { + ao_app->doBASSreset(); BASS_ChannelSetDevice(f_stream, BASS_GetDevice()); + } + BASS_ChannelPlay(f_stream, false); } @@ -56,51 +61,3 @@ void AOBlipPlayer::set_volume_internal(qreal p_value) BASS_ChannelSetAttribute(m_stream_list[n_stream], BASS_ATTRIB_VOL, volume); } } -#elif defined(QTAUDIO) // Using Qt's QSoundEffect class -AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) -{ - m_parent = parent; - ao_app = p_ao_app; -} - -void AOBlipPlayer::set_blips(QString p_sfx) -{ - QString f_path = ao_app->get_sounds_path(p_sfx); - - for (int n_stream = 0; n_stream < 5; ++n_stream) { - m_blips.setSource(QUrl::fromLocalFile(f_path)); - } - - set_volume(m_volume); -} - -void AOBlipPlayer::blip_tick() -{ - int f_cycle = m_cycle++; - - if (m_cycle == 5) - m_cycle = 0; - - m_blips.play(); -} - -void AOBlipPlayer::set_volume(int p_value) -{ - m_volume = p_value; - m_blips.setVolume(m_volume); -} -#else // No audio -AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) -{ - m_parent = parent; - ao_app = p_ao_app; -} - -void AOBlipPlayer::set_blips(QString p_sfx) {} - -void AOBlipPlayer::blip_tick() {} - -void AOBlipPlayer::set_volume(int p_value) {} - -void AOBlipPlayer::set_volume_internal(qreal p_value) {} -#endif diff --git a/src/aomusicplayer.cpp b/src/aomusicplayer.cpp index 249e01e5..6c61b9ad 100644 --- a/src/aomusicplayer.cpp +++ b/src/aomusicplayer.cpp @@ -1,14 +1,11 @@ #include "aomusicplayer.h" - AOMusicPlayer::AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app) { m_parent = parent; ao_app = p_ao_app; } -#ifdef BASSAUDIO - AOMusicPlayer::~AOMusicPlayer() { for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { @@ -111,8 +108,11 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop, else this->set_volume(m_volume[channel], channel); + BASS_ChannelSetSync(m_stream_list[channel], BASS_SYNC_DEV_FAIL, 0, + ao_app->BASSreset, 0); + this->set_looping(loop, channel); // Have to do this here due to any - // crossfading-related changes, etc. + // crossfading-related changes, etc. } void AOMusicPlayer::stop(int channel) @@ -164,62 +164,13 @@ void AOMusicPlayer::set_looping(bool toggle, int channel) } if (loop_start[channel] > 0) { if (loop_end[channel] == 0) - loop_end[channel] = BASS_ChannelGetLength(m_stream_list[channel], BASS_POS_BYTE); - if (loop_end[channel] > 0) // Don't loop zero length songs even if we're asked to + loop_end[channel] = + BASS_ChannelGetLength(m_stream_list[channel], BASS_POS_BYTE); + if (loop_end[channel] > + 0) // Don't loop zero length songs even if we're asked to loop_sync[channel] = BASS_ChannelSetSync( - m_stream_list[channel], BASS_SYNC_POS | BASS_SYNC_MIXTIME, loop_end[channel], - loopProc, &loop_start[channel]); + m_stream_list[channel], BASS_SYNC_POS | BASS_SYNC_MIXTIME, + loop_end[channel], loopProc, &loop_start[channel]); } } } -#elif defined(QTAUDIO) - -AOMusicPlayer::~AOMusicPlayer() { - for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { - m_stream_list[n_stream].stop(); - } -} - -void AOMusicPlayer::play(QString p_song, int channel, bool loop, - int effect_flags) -{ - channel = channel % m_channelmax; - if (channel < 0) // wtf? - return; - QString f_path = ao_app->get_music_path(p_song); - - m_stream_list[channel].stop(); - - m_stream_list[channel].setMedia(QUrl::fromLocalFile(f_path)); - - this->set_volume(m_volume[channel], channel); - - m_stream_list[channel].play(); -} - -void AOMusicPlayer::stop(int channel) -{ - m_stream_list[channel].stop(); -} - -void AOMusicPlayer::set_volume(int p_value, int channel) -{ - m_volume[channel] = p_value; - m_stream_list[channel].setVolume(m_volume[channel]); -} - -#else - -AOMusicPlayer::~AOMusicPlayer() {} - -void AOMusicPlayer::play(QString p_song, int channel, bool loop, - int effect_flags) {} - -void AOMusicPlayer::stop(int channel) {} - -void AOMusicPlayer::set_volume(int p_value, int channel) {} - -void loopProc(int handle, int channel, int data, int *user) {} - -void AOMusicPlayer::set_looping(bool toggle, int channel) {} -#endif diff --git a/src/aooptionsdialog.cpp b/src/aooptionsdialog.cpp index 6cedee8d..6fc4d03e 100644 --- a/src/aooptionsdialog.cpp +++ b/src/aooptionsdialog.cpp @@ -121,6 +121,49 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_length_spinbox); row += 1; + ui_log_newline_lbl = new QLabel(ui_form_layout_widget); + ui_log_newline_lbl->setText(tr("Log newline:")); + ui_log_newline_lbl->setToolTip( + tr("If ticked, new messages will appear separated, " + "with the message coming on the next line after the name. " + "When unticked, it displays it as 'name: message'.")); + + ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_newline_lbl); + + ui_log_newline_cb = new QCheckBox(ui_form_layout_widget); + ui_log_newline_cb->setChecked(p_ao_app->get_log_newline()); + + ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_newline_cb); + + row += 1; + ui_log_margin_lbl = new QLabel(ui_form_layout_widget); + ui_log_margin_lbl->setText(tr("Log margin:")); + ui_log_margin_lbl->setToolTip(tr( + "The distance in pixels between each entry in the IC log. " + "Default: 0.")); + + ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_margin_lbl); + + ui_log_margin_spinbox = new QSpinBox(ui_form_layout_widget); + ui_log_margin_spinbox->setMaximum(1000); + ui_log_margin_spinbox->setValue(p_ao_app->get_log_margin()); + + ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_margin_spinbox); + + row += 1; + ui_log_timestamp_lbl = new QLabel(ui_form_layout_widget); + ui_log_timestamp_lbl->setText(tr("Log timestamp:")); + ui_log_timestamp_lbl->setToolTip( + tr("If ticked, log will contain a timestamp in UTC before the name.")); + + ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_timestamp_lbl); + + ui_log_timestamp_cb = new QCheckBox(ui_form_layout_widget); + ui_log_timestamp_cb->setChecked(p_ao_app->get_log_timestamp()); + + ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_timestamp_cb); + + row += 1; ui_log_names_divider = new QFrame(ui_form_layout_widget); ui_log_names_divider->setFrameShape(QFrame::HLine); ui_log_names_divider->setFrameShadow(QFrame::Sunken); @@ -402,7 +445,6 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) ui_audio_device_combobox->addItem("default"); //TODO translate this without breaking the default audio device } -#ifdef BASSAUDIO BASS_DEVICEINFO info; for (a = 0; BASS_GetDeviceInfo(a, &info); a++) { ui_audio_device_combobox->addItem(info.name); @@ -410,15 +452,6 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) ui_audio_device_combobox->setCurrentIndex( ui_audio_device_combobox->count() - 1); } -#elif defined QTAUDIO - foreach (const QAudioDeviceInfo &deviceInfo, - QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) { - ui_audio_device_combobox->addItem(deviceInfo.deviceName()); - if (p_ao_app->get_audio_output_device() == deviceInfo.deviceName()) - ui_audio_device_combobox->setCurrentIndex( - ui_audio_device_combobox->count() - 1); - } -#endif ui_audio_layout->setWidget(row, QFormLayout::FieldRole, ui_audio_device_combobox); @@ -726,6 +759,9 @@ void AOOptionsDialog::save_pressed() configini->setValue("theme", ui_theme_combobox->currentText()); configini->setValue("log_goes_downwards", ui_downwards_cb->isChecked()); configini->setValue("log_maximum", ui_length_spinbox->value()); + configini->setValue("log_newline", ui_log_newline_cb->isChecked()); + configini->setValue("log_margin", ui_log_margin_spinbox->value()); + configini->setValue("log_timestamp", ui_log_timestamp_cb->isChecked()); configini->setValue("default_username", ui_username_textbox->text()); configini->setValue("show_custom_shownames", ui_showname_cb->isChecked()); configini->setValue("master", ui_ms_textbox->text()); @@ -770,6 +806,7 @@ void AOOptionsDialog::save_pressed() configini->setValue("casing_can_host_cases", ui_casing_cm_cases_textbox->text()); + ao_app->initBASS(); callwordsini->close(); done(0); } diff --git a/src/aosfxplayer.cpp b/src/aosfxplayer.cpp index 127bda63..8c4f3c86 100644 --- a/src/aosfxplayer.cpp +++ b/src/aosfxplayer.cpp @@ -1,14 +1,12 @@ #include "aosfxplayer.h" #include "file_functions.h" - AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app) { m_parent = parent; ao_app = p_ao_app; } -#if defined(BASSAUDIO) // Using bass.dll for sfx void AOSfxPlayer::clear() { for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { @@ -68,9 +66,16 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout, set_volume_internal(m_volume); - if (ao_app->get_audio_output_device() != "default") + BASS_ChannelSetDevice(m_stream_list[m_channel], BASS_GetDevice()); + int f_bass_error = BASS_ErrorGetCode(); + if (f_bass_error == BASS_ERROR_DEVICE) { + ao_app->doBASSreset(); BASS_ChannelSetDevice(m_stream_list[m_channel], BASS_GetDevice()); + } + BASS_ChannelPlay(m_stream_list[m_channel], false); + BASS_ChannelSetSync(m_stream_list[channel], BASS_SYNC_DEV_FAIL, 0, + ao_app->BASSreset, 0); } void AOSfxPlayer::stop(int channel) @@ -112,100 +117,3 @@ void AOSfxPlayer::set_looping(bool toggle, int channel) BASS_SAMPLE_LOOP); // set the LOOP flag } } -#elif defined(QTAUDIO) // Using Qt's QSoundEffect class - -void AOSfxPlayer::clear() -{ - for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { - m_stream_list[n_stream].stop(); - } - set_volume_internal(m_volume); -} - -void AOSfxPlayer::loop_clear() -{ - for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { - m_stream_list[n_stream].stop(); - } - set_volume_internal(m_volume); -} - -void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout, - int channel) -{ - m_stream_list[channel].stop(); - - QString misc_path = ""; - QString char_path = ""; - QString sound_path = ao_app->get_sounds_path(p_sfx); - - if (shout != "") - misc_path = ao_app->get_base_path() + "misc/" + shout + "/" + p_sfx; - if (p_char != "") - char_path = ao_app->get_character_path(p_char, p_sfx); - - QString f_path; - - if (file_exists(char_path)) - f_path = char_path; - else if (file_exists(misc_path)) - f_path = misc_path; - else - f_path = sound_path; - - if (file_exists(f_path)) // if its missing, it will glitch out - { - m_stream_list[channel].setSource(QUrl::fromLocalFile(f_path)); - - set_volume_internal(m_volume); - - m_stream_list[channel].play(); - } -} - -void AOSfxPlayer::stop(int channel) -{ - if (channel == -1) { - channel = m_channel; - } - m_stream_list[channel].stop(); -} - -void AOSfxPlayer::set_volume(qreal p_value) -{ - m_volume = p_value / 100; - set_volume_internal(m_volume); -} - -void AOSfxPlayer::set_volume_internal(qreal p_value) -{ - float volume = static_cast<float>(p_value); - for (int n_stream = 0; n_stream < m_channelmax; ++n_stream) { - m_stream_list[n_stream].setVolume(volume); - } -} - -void AOSfxPlayer::set_looping(bool toggle, int channel) -{ - if (channel == -1) { - channel = m_channel; - } - m_looping = toggle; - // TODO -} -#else -void AOSfxPlayer::clear() {} - -void AOSfxPlayer::loop_clear() {} - -void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout, - int channel) {} - -void AOSfxPlayer::stop(int channel) {} - -void AOSfxPlayer::set_volume(qreal p_value) {} - -void AOSfxPlayer::set_volume_internal(qreal p_value) {} - -void AOSfxPlayer::set_looping(bool toggle, int channel) {} -#endif diff --git a/src/chatlogpiece.cpp b/src/chatlogpiece.cpp index 2a041f13..05a924ca 100644 --- a/src/chatlogpiece.cpp +++ b/src/chatlogpiece.cpp @@ -6,29 +6,29 @@ chatlogpiece::chatlogpiece() showname = tr("UNKNOWN"); message = tr("UNKNOWN"); color = 0; - p_is_song = false; + action = ""; datetime = QDateTime::currentDateTime().toUTC(); } chatlogpiece::chatlogpiece(QString p_name, QString p_showname, - QString p_message, bool p_song, int p_color) + QString p_message, QString p_action, int p_color) { name = p_name; showname = p_showname; message = p_message; - p_is_song = p_song; + action = p_action; color = p_color; datetime = QDateTime::currentDateTime().toUTC(); } chatlogpiece::chatlogpiece(QString p_name, QString p_showname, - QString p_message, bool p_song, int p_color, + QString p_message, QString p_action, int p_color, QDateTime p_datetime) { name = p_name; showname = p_showname; message = p_message; - p_is_song = p_song; + action = p_action; color = p_color; datetime = p_datetime.toUTC(); } @@ -41,7 +41,7 @@ QString chatlogpiece::get_message() { return message; } QDateTime chatlogpiece::get_datetime() { return datetime; } -bool chatlogpiece::is_song() { return p_is_song; } +QString chatlogpiece::get_action() { return action; } QString chatlogpiece::get_datetime_as_string() { return datetime.toString(); } @@ -54,13 +54,15 @@ QString chatlogpiece::get_full() full.append(get_datetime_as_string()); full.append("] "); full.append(get_showname()); - full.append(" ("); - full.append(get_name()); - full.append(")"); - if (p_is_song) - full.append(tr(" has played a song: ")); - else - full.append(": "); + if (get_showname() != get_name()) + { + full.append(" ("); + full.append(get_name()); + full.append(")"); + } + if (!get_action().isEmpty()) + full.append(" " + get_action()); + full.append(": "); full.append(get_message()); return full; diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 98b6a9c3..2484bcb0 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -3,42 +3,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() { ao_app = p_ao_app; -#ifdef BASSAUDIO - // Change the default audio output device to be the one the user has given - // in his config.ini file for now. - unsigned int a = 0; - BASS_DEVICEINFO info; - - if (ao_app->get_audio_output_device() == "default") { - BASS_Init(-1, 48000, BASS_DEVICE_LATENCY, nullptr, nullptr); - load_bass_opus_plugin(); - } - else { - for (a = 0; BASS_GetDeviceInfo(a, &info); a++) { - if (ao_app->get_audio_output_device() == info.name) { - BASS_SetDevice(a); - BASS_Init(static_cast<int>(a), 48000, BASS_DEVICE_LATENCY, nullptr, - nullptr); - load_bass_opus_plugin(); - qDebug() << info.name << "was set as the default audio output device."; - break; - } - } - } -#elif defined QTAUDIO - - if (ao_app->get_audio_output_device() != "default") { - foreach (const QAudioDeviceInfo &deviceInfo, - QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) { - if (ao_app->get_audio_output_device() == deviceInfo.deviceName()) { - ao_app->QtAudioDevice = deviceInfo; - qDebug() << deviceInfo.deviceName() - << "was set as the default audio output device."; - break; - } - } - } -#endif + ao_app->initBASS(); qsrand(static_cast<uint>(QDateTime::currentMSecsSinceEpoch() / 1000)); @@ -109,6 +74,10 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() log_maximum_blocks = ao_app->get_max_log_size(); log_goes_downwards = ao_app->get_log_goes_downwards(); + log_colors = ao_app->is_colorlog_enabled(); + log_newline = ao_app->get_log_newline(); + log_margin = ao_app->get_log_margin(); + log_timestamp = ao_app->get_log_timestamp(); ui_ms_chatlog = new AOTextArea(this); ui_ms_chatlog->setReadOnly(true); @@ -581,8 +550,20 @@ void Courtroom::set_widgets() ui_vp_objection->move(ui_viewport->x(), ui_viewport->y()); ui_vp_objection->combo_resize(ui_viewport->width(), ui_viewport->height()); + log_maximum_blocks = ao_app->get_max_log_size(); + + bool regenerate = log_goes_downwards != ao_app->get_log_goes_downwards() || log_colors != ao_app->is_colorlog_enabled() || log_newline != ao_app->get_log_newline() || log_margin != ao_app->get_log_margin() || log_timestamp != ao_app->get_log_timestamp(); + log_goes_downwards = ao_app->get_log_goes_downwards(); + log_colors = ao_app->is_colorlog_enabled(); + log_newline = ao_app->get_log_newline(); + log_margin = ao_app->get_log_margin(); + log_timestamp = ao_app->get_log_timestamp(); + if (regenerate) + regenerate_ic_chatlog(); + set_size_and_pos(ui_ic_chatlog, "ic_chatlog"); ui_ic_chatlog->setFrameShape(QFrame::NoFrame); + ui_ic_chatlog->setPlaceholderText(log_goes_downwards ? "▼ Log goes down ▼" : "▲ Log goes up ▲"); set_size_and_pos(ui_ms_chatlog, "ms_chatlog"); ui_ms_chatlog->setFrameShape(QFrame::NoFrame); @@ -636,6 +617,7 @@ void Courtroom::set_widgets() } ui_music_display->play("music_display"); + ui_music_display->set_play_once(false); if (is_ao2_bg) { set_size_and_pos(ui_ic_chat_message, "ao2_ic_chat_message"); @@ -934,6 +916,20 @@ void Courtroom::set_widgets() ui_spectator->setToolTip(tr("Become a spectator. You won't be able to " "interact with the in-character screen.")); + free_brush = + QBrush(ao_app->get_color("area_free_color", "courtroom_design.ini")); + lfp_brush = + QBrush(ao_app->get_color("area_lfp_color", "courtroom_design.ini")); + casing_brush = + QBrush(ao_app->get_color("area_casing_color", "courtroom_design.ini")); + recess_brush = + QBrush(ao_app->get_color("area_recess_color", "courtroom_design.ini")); + rp_brush = QBrush(ao_app->get_color("area_rp_color", "courtroom_design.ini")); + gaming_brush = + QBrush(ao_app->get_color("area_gaming_color", "courtroom_design.ini")); + locked_brush = + QBrush(ao_app->get_color("area_locked_color", "courtroom_design.ini")); + refresh_evidence(); } @@ -957,28 +953,29 @@ void Courtroom::set_font(QWidget *widget, QString class_name, { QString design_file = "courtroom_fonts.ini"; if (f_pointsize <= 0) - f_pointsize = ao_app->get_design_element(p_identifier, design_file, p_char).toInt(); + f_pointsize = + ao_app->get_design_element(p_identifier, design_file, p_char).toInt(); if (font_name == "") font_name = - ao_app->get_design_element(p_identifier + "_font", design_file, p_char); - QString f_color_result = ao_app->get_design_element(p_identifier + "_color", design_file, p_char); + ao_app->get_design_element(p_identifier + "_font", design_file, p_char); + QString f_color_result = + ao_app->get_design_element(p_identifier + "_color", design_file, p_char); QColor f_color(0, 0, 0); - if (f_color_result != "") - { + if (f_color_result != "") { QStringList color_list = f_color_result.split(","); - if (color_list.size() >= 3) - { + if (color_list.size() >= 3) { f_color.setRed(color_list.at(0).toInt()); f_color.setGreen(color_list.at(1).toInt()); f_color.setBlue(color_list.at(2).toInt()); } } - bool bold = ao_app->get_design_element(p_identifier + "_bold", design_file, p_char) == - 1; // is the font bold or not? - bool antialias = - ao_app->get_design_element(p_identifier + "_sharp", design_file, p_char) != - "1"; // is the font anti-aliased or not? + bool bold = + ao_app->get_design_element(p_identifier + "_bold", design_file, p_char) == + "1"; // is the font bold or not? + bool antialias = ao_app->get_design_element(p_identifier + "_sharp", + design_file, p_char) != + "1"; // is the font anti-aliased or not? this->set_qfont(widget, class_name, get_qfont(font_name, f_pointsize, antialias), f_color, bold); @@ -1129,8 +1126,8 @@ void Courtroom::set_background(QString p_background, bool display) // Populate the dropdown list with all pos that exist on this bg QStringList pos_list = {}; for (QString key : default_pos.keys()) { - if (file_exists(ao_app->get_image_suffix( - ao_app->get_background_path(key)))) { + if (file_exists( + ao_app->get_image_suffix(ao_app->get_background_path(key)))) { pos_list.append(default_pos[key]); } } @@ -1237,6 +1234,8 @@ void Courtroom::update_character(int p_cid) current_char = f_char; current_side = ao_app->get_char_side(current_char); + set_text_color_dropdown(); + current_emote_page = 0; current_emote = 0; @@ -1282,8 +1281,7 @@ void Courtroom::update_character(int p_cid) { custom_obj_menu->clear(); if (file_exists(ao_app->get_image_suffix( - ao_app->get_character_path(current_char, "custom")))) - { + ao_app->get_character_path(current_char, "custom")))) { ui_custom_objection->show(); QAction *action = custom_obj_menu->addAction("Default"); custom_obj_menu->setDefaultAction(action); @@ -1301,8 +1299,7 @@ void Courtroom::update_character(int p_cid) QDir::Files); for (const QString &filename : custom_obj) { QAction *action = custom_obj_menu->addAction(filename); - if (custom_obj_menu->defaultAction() == nullptr) - { + if (custom_obj_menu->defaultAction() == nullptr) { custom_obj_menu->setDefaultAction(action); objection_custom = action->text(); } @@ -1433,16 +1430,6 @@ void Courtroom::list_areas() ui_area_list->clear(); // ui_music_search->setText(""); - QString f_file = "courtroom_design.ini"; - - QBrush free_brush(ao_app->get_color("area_free_color", f_file)); - QBrush lfp_brush(ao_app->get_color("area_lfp_color", f_file)); - QBrush casing_brush(ao_app->get_color("area_casing_color", f_file)); - QBrush recess_brush(ao_app->get_color("area_recess_color", f_file)); - QBrush rp_brush(ao_app->get_color("area_rp_color", f_file)); - QBrush gaming_brush(ao_app->get_color("area_gaming_color", f_file)); - QBrush locked_brush(ao_app->get_color("area_locked_color", f_file)); - int n_listed_areas = 0; for (int n_area = 0; n_area < area_list.size(); ++n_area) { @@ -1532,7 +1519,7 @@ void Courtroom::append_server_chatmessage(QString p_name, QString p_message, void Courtroom::on_chat_return_pressed() { - if (ui_ic_chat_message->text() == "" || is_muted) + if (is_muted) return; if ((anim_state < 3 || text_state < 2) && objection_state == 0) @@ -1611,7 +1598,7 @@ void Courtroom::on_chat_return_pressed() if (f_emote_mod == 0) f_emote_mod = 1; else if (f_emote_mod == 5 && ao_app->prezoom_enabled) - f_emote_mod = 4; + f_emote_mod = 6; } else { if (f_emote_mod == 1) @@ -1760,24 +1747,52 @@ void Courtroom::on_chat_return_pressed() ao_app->send_server_packet(new AOPacket("MS", packet_contents)); } +void Courtroom::reset_ic() +{ + ui_vp_chat_arrow->stop(); + text_state = 0; + anim_state = 0; + ui_vp_objection->stop(); + chat_tick_timer->stop(); + ui_vp_evidence_display->reset(); +} + +void Courtroom::reset_ui() +{ + ui_ic_chat_message->clear(); + if (ui_additive->isChecked()) + ui_ic_chat_message->insert(" "); + objection_state = 0; + realization_state = 0; + screenshake_state = 0; + is_presenting_evidence = false; + if (!ao_app->is_stickypres_enabled()) + ui_pre->setChecked(false); + ui_hold_it->set_image("holdit"); + ui_objection->set_image("objection"); + ui_take_that->set_image("takethat"); + ui_custom_objection->set_image("custom"); + ui_realization->set_image("realization"); + ui_screenshake->set_image("screenshake"); + ui_evidence_present->set_image("present"); +} + void Courtroom::handle_chatmessage(QStringList *p_contents) { // Instead of checking for whether a message has at least chatmessage_size // amount of packages, we'll check if it has at least 15. // That was the original chatmessage_size. - if (p_contents->size() < 15) + if (p_contents->size() < MS_MINIMUM) return; - for (int n_string = 0; n_string < chatmessage_size; ++n_string) { - // m_chatmessage[n_string] = p_contents->at(n_string); - + for (int n_string = 0; n_string < MS_MAXIMUM; ++n_string) { // Note that we have added stuff that vanilla clients and servers simply // won't send. So now, we have to check if the thing we want even exists // amongst the packet's content. We also have to check if the server even // supports CCCC's IC features, or if it's just japing us. Also, don't // forget! A size 15 message will have indices from 0 to 14. if (n_string < p_contents->size() && - (n_string < 15 || ao_app->cccc_ic_support_enabled)) { + (n_string < MS_MINIMUM || ao_app->cccc_ic_support_enabled)) { m_chatmessage[n_string] = p_contents->at(n_string); } else { @@ -1786,99 +1801,65 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) } int f_char_id = m_chatmessage[CHAR_ID].toInt(); + const bool is_spectator = (f_char_id == -1); - if (f_char_id >= 0 && f_char_id >= char_list.size()) + if (f_char_id < -1 || f_char_id >= char_list.size()) return; - if (mute_map.value(m_chatmessage[CHAR_ID].toInt())) return; - QString f_showname; - if (f_char_id > -1 && + QString f_displayname; + if (!is_spectator && (m_chatmessage[SHOWNAME].isEmpty() || !ui_showname_enable->isChecked())) { - f_showname = ao_app->get_showname(char_list.at(f_char_id).name); + // If the users is not a spectator and showname is disabled, use the + // character's name + f_displayname = ao_app->get_showname(char_list.at(f_char_id).name); } else { - f_showname = m_chatmessage[SHOWNAME]; + // Otherwise, use the showname + f_displayname = m_chatmessage[SHOWNAME]; } - if (f_showname.trimmed() - .isEmpty()) // Pure whitespace showname, get outta here. - f_showname = m_chatmessage[CHAR_NAME]; - - QString f_message = f_showname + ": " + m_chatmessage[MESSAGE] + '\n'; - // Remove undesired newline chars - m_chatmessage[MESSAGE].remove("\n"); - chatmessage_is_empty = - m_chatmessage[MESSAGE] == " " || m_chatmessage[MESSAGE] == ""; + // If chatblank is enabled, use the character's name for logs + if (f_displayname.trimmed().isEmpty()) + f_displayname = ao_app->get_showname(char_list.at(f_char_id).name); - if (f_char_id >= 0 && !chatmessage_is_empty && - f_message == previous_ic_message) // Not a system message - return; - - if (f_char_id <= -1) - previous_ic_message = - ""; // System messages don't care about repeating themselves - else - previous_ic_message = f_message; - bool ok; - int objection_mod = m_chatmessage[OBJECTION_MOD].toInt( - &ok, 10); // checks if its a custom obj. + // Check if a custom objection is in use + int objection_mod = 0; QString custom_objection = ""; - if (!ok && m_chatmessage[OBJECTION_MOD].contains("4&")) { + if (m_chatmessage[OBJECTION_MOD].contains("4&")) { objection_mod = 4; custom_objection = m_chatmessage[OBJECTION_MOD].split( "4&")[1]; // takes the name of custom objection. } - // Stop the chat arrow from animating - ui_vp_chat_arrow->stop(); + else { + objection_mod = m_chatmessage[OBJECTION_MOD].toInt(); + } - text_state = 0; - anim_state = 0; - ui_vp_objection->stop(); - chat_tick_timer->stop(); - ui_vp_evidence_display->reset(); + // Reset IC display + reset_ic(); - // Hey, our message showed up! Cool! - if (m_chatmessage[MESSAGE] == ui_ic_chat_message->text().remove("\n") && - m_chatmessage[CHAR_ID].toInt() == m_cid) { - ui_ic_chat_message->clear(); - if (ui_additive->isChecked()) - ui_ic_chat_message->insert(" "); - objection_state = 0; - realization_state = 0; - screenshake_state = 0; - is_presenting_evidence = false; - if (!ao_app->is_stickypres_enabled()) - ui_pre->setChecked(false); - ui_hold_it->set_image("holdit"); - ui_objection->set_image("objection"); - ui_take_that->set_image("takethat"); - ui_custom_objection->set_image("custom"); - ui_realization->set_image("realization"); - ui_screenshake->set_image("screenshake"); - ui_evidence_present->set_image("present"); + // Reset UI elements after client message gets sent + if (m_chatmessage[CHAR_ID].toInt() == m_cid) { + reset_ui(); } - // Let the server handle actually checking if they're allowed to do this. - is_additive = m_chatmessage[ADDITIVE].toInt() == 1; - QString f_charname = ""; if (f_char_id >= 0) f_charname = ao_app->get_showname(char_list.at(f_char_id).name); - chatlogpiece *temp = - new chatlogpiece(f_charname, f_showname, m_chatmessage[MESSAGE], false, m_chatmessage[TEXT_COLOR].toInt()); - ic_chatlog_history.append(*temp); - if (ao_app->get_auto_logging_enabled()) - ao_app->append_to_file(temp->get_full(), ao_app->log_filename, true); - - while (ic_chatlog_history.size() > log_maximum_blocks && - log_maximum_blocks > 0) { - ic_chatlog_history.removeFirst(); + if (m_chatmessage[MESSAGE].trimmed().isEmpty()) // User-created blankpost + { + m_chatmessage[MESSAGE] = ""; // Turn it into true blankpost } - append_ic_text(m_chatmessage[MESSAGE], f_showname, "", m_chatmessage[TEXT_COLOR].toInt()); + if (!m_chatmessage[MESSAGE].isEmpty() || ic_chatlog_history.isEmpty() || ic_chatlog_history.last().get_message() != "") + { + log_ic_text(f_charname, f_displayname, m_chatmessage[MESSAGE], "", + m_chatmessage[TEXT_COLOR].toInt()); + append_ic_text(m_chatmessage[MESSAGE], f_displayname, "", + m_chatmessage[TEXT_COLOR].toInt()); + } QString f_char = m_chatmessage[CHAR_NAME]; QString f_custom_theme = ao_app->get_char_shouts(f_char); @@ -1914,15 +1895,10 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) shout_stay_time); objection_player->play("custom", f_char, f_custom_theme); } + m_chatmessage[EMOTE_MOD] = 1; break; - default: - qDebug() << "W: Logic error in objection switch statement!"; } sfx_player->clear(); // Objection played! Cut all sfx. - int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); - - if (emote_mod == 0) - m_chatmessage[EMOTE_MOD] = 1; } else handle_chatmessage_2(); @@ -2011,11 +1987,10 @@ void Courtroom::handle_chatmessage_2() ->get_design_element("showname_extra_width", "courtroom_design.ini", customchar) .toInt(); - QString align = - ao_app - ->get_design_element("showname_align", "courtroom_design.ini", - customchar) - .toLower(); + QString align = ao_app + ->get_design_element("showname_align", + "courtroom_design.ini", customchar) + .toLower(); if (align == "right") ui_vp_showname->setAlignment(Qt::AlignRight); else if (align == "center") @@ -2047,8 +2022,7 @@ void Courtroom::handle_chatmessage_2() set_font(ui_vp_showname, "", "showname", customchar); } - else - { + else { ui_vp_showname->resize(default_width.width, ui_vp_showname->height()); } } @@ -2070,6 +2044,15 @@ void Courtroom::handle_chatmessage_2() set_scene(m_chatmessage[DESK_MOD], m_chatmessage[SIDE]); int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); + // Deal with invalid emote modifiers + if (emote_mod != 0 && emote_mod != 1 && emote_mod != 2 && emote_mod != 5 && + emote_mod != 6) { + if (emote_mod == 4) + emote_mod = 6; // Addresses issue with an old bug that sent the wrong + // emote modifier for zoompre + else + emote_mod = 0; + } if (ao_app->flipping_enabled && m_chatmessage[FLIP].toInt() == 1) ui_vp_player_char->set_flipped(true); @@ -2264,13 +2247,16 @@ void Courtroom::handle_chatmessage_3() if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) { // shifted by 1 because 0 is no evidence per legacy standards QString f_image = local_evidence_list.at(f_evi_id - 1).image; - QString f_name = local_evidence_list.at(f_evi_id - 1).name; + QString f_evi_name = local_evidence_list.at(f_evi_id - 1).name; // def jud and hlp should display the evidence icon on the RIGHT side bool is_left_side = !(f_side == "def" || f_side == "hlp" || f_side == "jud" || f_side == "jur"); ui_vp_evidence_display->show_evidence(f_image, is_left_side, ui_sfx_slider->value()); - append_ic_text(f_name, f_showname, "has presented evidence"); + + log_ic_text(m_chatmessage[CHAR_NAME], m_chatmessage[SHOWNAME], f_evi_name, tr("has presented evidence"), + m_chatmessage[TEXT_COLOR].toInt()); + append_ic_text(f_evi_name, f_showname, tr("has presented evidence")); } int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); @@ -2574,107 +2560,107 @@ QString Courtroom::filter_ic_text(QString p_text, bool html, int target_pos, return p_text_escaped; } -void Courtroom::append_ic_text(QString p_text, QString p_name, QString p_action, int color) +void Courtroom::log_ic_text(QString p_name, QString p_showname, + QString p_message, QString p_action, int p_color) +{ + chatlogpiece log_entry(p_name, p_showname, p_message, p_action, + p_color); + ic_chatlog_history.append(log_entry); + if (ao_app->get_auto_logging_enabled()) + ao_app->append_to_file(log_entry.get_full(), ao_app->log_filename, true); + + while (ic_chatlog_history.size() > log_maximum_blocks && + log_maximum_blocks > 0) { + ic_chatlog_history.removeFirst(); + } +} + +void Courtroom::append_ic_text(QString p_text, QString p_name, QString p_action, + int color) { QTextCharFormat bold; QTextCharFormat normal; QTextCharFormat italics; + QTextBlockFormat format; bold.setFontWeight(QFont::Bold); normal.setFontWeight(QFont::Normal); italics.setFontItalic(true); + format.setTopMargin(log_margin); const QTextCursor old_cursor = ui_ic_chatlog->textCursor(); const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value(); - - if (p_action == "") - p_text = filter_ic_text(p_text, ao_app->is_colorlog_enabled(), -1, - color); - - if (log_goes_downwards) { - const bool is_scrolled_down = - old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->maximum(); - - ui_ic_chatlog->moveCursor(QTextCursor::End); - - if (!first_message_sent) { - ui_ic_chatlog->textCursor().insertText(p_name, bold); - first_message_sent = true; - } - else { - ui_ic_chatlog->textCursor().insertText('\n' + p_name, bold); - } - - if (p_action != "") { - ui_ic_chatlog->textCursor().insertText(" " + p_action + ": ", normal); - ui_ic_chatlog->textCursor().insertText(p_text + ".", italics); - } - else { + const bool need_newline = !ui_ic_chatlog->document()->isEmpty(); + const int scrollbar_target_value = log_goes_downwards ? ui_ic_chatlog->verticalScrollBar()->maximum() : ui_ic_chatlog->verticalScrollBar()->minimum(); + + ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::End : QTextCursor::Start); + + // Only prepend with newline if log goes downwards + if (log_goes_downwards && need_newline) { + ui_ic_chatlog->textCursor().insertBlock(format); + } + + // Timestamp if we're doing that meme + if (log_timestamp) + ui_ic_chatlog->textCursor().insertText("[" + QDateTime::currentDateTime().toString("h:mm:ss AP") + "] ", normal); + + // Format the name of the actor + ui_ic_chatlog->textCursor().insertText(p_name, bold); + // If action not blank: + if (p_action != "") { + // Format the action in normal + ui_ic_chatlog->textCursor().insertText(" " + p_action, normal); + if (log_newline) + // For some reason, we're forced to use <br> instead of the more sensible \n. + // Why? Because \n is treated as a new Block instead of a soft newline within a paragraph! + ui_ic_chatlog->textCursor().insertHtml("<br>"); + else ui_ic_chatlog->textCursor().insertText(": ", normal); - ui_ic_chatlog->textCursor().insertHtml(p_text); - } - - // If we got too many blocks in the current log, delete some from the top. - while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks && - log_maximum_blocks > 0) { - ui_ic_chatlog->moveCursor(QTextCursor::Start); - ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor); - ui_ic_chatlog->textCursor().removeSelectedText(); - ui_ic_chatlog->textCursor().deleteChar(); - } - - if (old_cursor.hasSelection() || !is_scrolled_down) { - // The user has selected text or scrolled away from the bottom: maintain - // position. - ui_ic_chatlog->setTextCursor(old_cursor); - ui_ic_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); - } - else { - // The user hasn't selected any text and the scrollbar is at the bottom: - // scroll to the bottom. - ui_ic_chatlog->moveCursor(QTextCursor::End); - ui_ic_chatlog->verticalScrollBar()->setValue( - ui_ic_chatlog->verticalScrollBar()->maximum()); - } + // Format the result in italics + ui_ic_chatlog->textCursor().insertText(p_text + ".", italics); } else { - const bool is_scrolled_up = - old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->minimum(); - - ui_ic_chatlog->moveCursor(QTextCursor::Start); - - ui_ic_chatlog->textCursor().insertText(p_name, bold); - - if (p_action != "") { - ui_ic_chatlog->textCursor().insertText(" " + p_action + ": ", normal); - ui_ic_chatlog->textCursor().insertText(p_text + "." + '\n', italics); - } - else { + if (log_newline) + // For some reason, we're forced to use <br> instead of the more sensible \n. + // Why? Because \n is treated as a new Block instead of a soft newline within a paragraph! + ui_ic_chatlog->textCursor().insertHtml("<br>"); + else ui_ic_chatlog->textCursor().insertText(": ", normal); - ui_ic_chatlog->textCursor().insertHtml(p_text + "<br>"); - } + // Format the result according to html + if (log_colors) + ui_ic_chatlog->textCursor().insertHtml(filter_ic_text(p_text, true, -1, color)); + else + ui_ic_chatlog->textCursor().insertText(filter_ic_text(p_text, false), normal); + } + + // Only append with newline if log goes upwards + if (!log_goes_downwards && need_newline) { + ui_ic_chatlog->textCursor().insertBlock(format); + } - // If we got too many blocks in the current log, delete some from the - // bottom. - while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks && - log_maximum_blocks > 0) { - ui_ic_chatlog->moveCursor(QTextCursor::End); - ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor); - ui_ic_chatlog->textCursor().removeSelectedText(); + // If we got too many blocks in the current log, delete some. + while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks && + log_maximum_blocks > 0) { + ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::Start : QTextCursor::End); + ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor); + ui_ic_chatlog->textCursor().removeSelectedText(); + if (log_goes_downwards) + ui_ic_chatlog->textCursor().deleteChar(); + else ui_ic_chatlog->textCursor().deletePreviousChar(); - } + } - if (old_cursor.hasSelection() || !is_scrolled_up) { - // The user has selected text or scrolled away from the top: maintain - // position. - ui_ic_chatlog->setTextCursor(old_cursor); - ui_ic_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); - } - else { - // The user hasn't selected any text and the scrollbar is at the top: - // scroll to the top. - ui_ic_chatlog->moveCursor(QTextCursor::Start); - ui_ic_chatlog->verticalScrollBar()->setValue( - ui_ic_chatlog->verticalScrollBar()->minimum()); - } + // Finally, scroll the scrollbar to the correct position. + if (old_cursor.hasSelection() || old_scrollbar_value != scrollbar_target_value) { + // The user has selected text or scrolled away from the bottom: maintain + // position. + ui_ic_chatlog->setTextCursor(old_cursor); + ui_ic_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); + } + else { + // The user hasn't selected any text and the scrollbar is at the bottom: + // scroll to the bottom. + ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::End : QTextCursor::Start); + ui_ic_chatlog->verticalScrollBar()->setValue( + ui_ic_chatlog->verticalScrollBar()->maximum()); } } @@ -2756,16 +2742,25 @@ void Courtroom::start_chat_ticking() this->do_flash(); sfx_player->play(ao_app->get_custom_realization(m_chatmessage[CHAR_NAME])); } - if (chatmessage_is_empty) { + int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); // text meme bonanza + if ((emote_mod == 0 || emote_mod == 5) && m_chatmessage[SCREENSHAKE] == "1") { + this->do_screenshake(); + } + if (m_chatmessage[MESSAGE].isEmpty()) { // since the message is empty, it's technically done ticking text_state = 2; + if (m_chatmessage[ADDITIVE] == "1") { + // Cool behavior + ui_vp_chatbox->show(); + ui_vp_message->show(); + } return; } ui_vp_chatbox->show(); ui_vp_message->show(); - if (!is_additive) { + if (m_chatmessage[ADDITIVE] != "1") { ui_vp_message->clear(); real_tick_pos = 0; additive_previous = ""; @@ -2782,11 +2777,6 @@ void Courtroom::start_chat_ticking() blip_player->set_blips(f_gender); - int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); // text meme bonanza - if ((emote_mod == 0 || emote_mod == 5) && m_chatmessage[SCREENSHAKE] == "1") { - this->do_screenshake(); - } - // means text is currently ticking text_state = 1; } @@ -2810,8 +2800,7 @@ void Courtroom::chat_tick() } QString f_char; QString f_custom_theme; - if (ao_app->is_customchat_enabled()) - { + if (ao_app->is_customchat_enabled()) { f_char = m_chatmessage[CHAR_NAME]; f_custom_theme = ao_app->get_chat(f_char); } @@ -2914,6 +2903,12 @@ void Courtroom::chat_tick() next_character_is_not_special = false; } + // Keep the speed at bay. + if (current_display_speed < 0) + current_display_speed = 0; + else if (current_display_speed > 6) + current_display_speed = 6; + if ((message_display_speed[current_display_speed] <= 0 && tick_pos < f_message.size() - 1) || formatting_char) { @@ -2942,12 +2937,6 @@ void Courtroom::chat_tick() ui_vp_message->ensureCursorVisible(); - // Keep the speed at bay. - if (current_display_speed < 0) - current_display_speed = 0; - else if (current_display_speed > 6) - current_display_speed = 6; - // Blip player and real tick pos ticker if (!formatting_char && (f_character != ' ' || blank_blip)) { if (blip_ticker % blip_rate == 0) { @@ -3174,16 +3163,8 @@ void Courtroom::handle_song(QStringList *p_contents) } if (!mute_map.value(n_char)) { - chatlogpiece *temp = new chatlogpiece(str_char, str_show, f_song, true, m_chatmessage[TEXT_COLOR].toInt()); - ic_chatlog_history.append(*temp); - if (ao_app->get_auto_logging_enabled()) - ao_app->append_to_file(temp->get_full(), ao_app->log_filename, true); - - while (ic_chatlog_history.size() > log_maximum_blocks && - log_maximum_blocks > 0) { - ic_chatlog_history.removeFirst(); - } - + log_ic_text(str_char, str_show, f_song, tr("has played a song"), + m_chatmessage[TEXT_COLOR].toInt()); append_ic_text(f_song_clear, str_show, tr("has played a song")); music_player->play(f_song, channel, looping, effect_flags); @@ -4100,8 +4081,7 @@ void Courtroom::on_music_list_context_menu_requested(const QPoint &pos) { QMenu *menu = new QMenu(); - menu->addAction(QString(tr("Play Random Song")), this, - SLOT(music_random())); + menu->addAction(QString(tr("Play Random Song")), this, SLOT(music_random())); menu->addSeparator(); menu->addAction(QString(tr("Expand All Categories")), this, SLOT(music_list_expand_all())); @@ -4157,7 +4137,9 @@ void Courtroom::music_synchronize(bool toggle) void Courtroom::music_random() { QList<QTreeWidgetItem *> clist; - QTreeWidgetItemIterator it(ui_music_list, QTreeWidgetItemIterator::NotHidden | QTreeWidgetItemIterator::NoChildren); + QTreeWidgetItemIterator it(ui_music_list, + QTreeWidgetItemIterator::NotHidden | + QTreeWidgetItemIterator::NoChildren); while (*it) { clist += (*it); ++it; @@ -4402,7 +4384,8 @@ void Courtroom::set_text_color_dropdown() // Update markdown colors. TODO: make a loading function that only loads the // config file once instead of several times for (int c = 0; c < max_colors; ++c) { - QColor color = ao_app->get_chat_color("c" + QString::number(c), current_char); + QColor color = + ao_app->get_chat_color("c" + QString::number(c), current_char); color_rgb_list.append(color); color_markdown_start_list.append(ao_app->get_chat_markdown( "c" + QString::number(c) + "_start", current_char)); @@ -4578,10 +4561,7 @@ void Courtroom::on_char_select_right_clicked() set_char_select_page(); } -void Courtroom::on_spectator_clicked() -{ - char_clicked(-1); -} +void Courtroom::on_spectator_clicked() { char_clicked(-1); } void Courtroom::on_call_mod_clicked() { @@ -4645,27 +4625,17 @@ void Courtroom::on_guard_clicked() { ui_ic_chat_message->setFocus(); } void Courtroom::on_showname_enable_clicked() { - ui_ic_chatlog->clear(); - first_message_sent = false; + regenerate_ic_chatlog(); + ui_ic_chat_message->setFocus(); +} +void Courtroom::regenerate_ic_chatlog() +{ + ui_ic_chatlog->clear(); foreach (chatlogpiece item, ic_chatlog_history) { - if (ui_showname_enable->isChecked()) { - if (item.is_song()) - append_ic_text(item.get_message(), item.get_showname(), - tr("has played a song")); - else - append_ic_text(item.get_message(), item.get_showname(), "", item.get_chat_color()); - } - else { - if (item.is_song()) - append_ic_text(item.get_message(), item.get_name(), - tr("has played a song")); - else - append_ic_text(item.get_message(), item.get_name(), "", item.get_chat_color()); - } + append_ic_text(item.get_message(), ui_showname_enable->isChecked() ? item.get_showname() : item.get_name(), + item.get_action(), item.get_chat_color()); } - - ui_ic_chat_message->setFocus(); } void Courtroom::on_evidence_button_clicked() @@ -4745,28 +4715,3 @@ Courtroom::~Courtroom() delete objection_player; delete blip_player; } - -#if (defined(_WIN32) || defined(_WIN64)) -void Courtroom::load_bass_opus_plugin() -{ -#ifdef BASSAUDIO - BASS_PluginLoad("bassopus.dll", 0); -#endif -} -#elif (defined(LINUX) || defined(__linux__)) -void Courtroom::load_bass_opus_plugin() -{ -#ifdef BASSAUDIO - BASS_PluginLoad("libbassopus.so", 0); -#endif -} -#elif defined __APPLE__ -void Courtroom::load_bass_opus_plugin() -{ -#ifdef BASSAUDIO - BASS_PluginLoad("libbassopus.dylib", 0); -#endif -} -#else -#error This operating system is unsupported for bass plugins. -#endif diff --git a/src/lobby.cpp b/src/lobby.cpp index 3aa488ad..093b0f7d 100644 --- a/src/lobby.cpp +++ b/src/lobby.cpp @@ -5,6 +5,8 @@ #include "debug_functions.h" #include "networkmanager.h" +#include <QImageReader> + Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() { ao_app = p_ao_app; @@ -353,13 +355,7 @@ void Lobby::on_connect_released() void Lobby::on_about_clicked() { -#ifdef BASSAUDIO - const QString audio = "BASS"; -#elif defined(QTAUDIO) - const QString audio = "Qt Multimedia"; -#else - const QString audio = "null"; -#endif + const bool hasApng = QImageReader::supportedImageFormats().contains("APNG"); QString msg = tr("<h2>Attorney Online %1</h2>" @@ -389,11 +385,12 @@ void Lobby::on_about_clicked() "is copyright (c) 2016-2020 Attorney Online developers. Open-source " "licenses apply. All other assets are the property of their " "respective owners." - "<p>Running on Qt version %2 with the %3 audio engine." + "<p>Running on Qt version %2 with the BASS audio engine.<br>" + "APNG plugin loaded: %3" "<p>Built on %4") .arg(ao_app->get_version_string()) .arg(QLatin1String(QT_VERSION_STR)) - .arg(audio) + .arg(hasApng ? tr("Yes") : tr("No")) .arg(QLatin1String(__DATE__)); QMessageBox::about(this, tr("About"), msg); } diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index b543cfb5..e4e5d5c2 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -176,7 +176,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } } else if (header == "FL") { -// encryption_needed = true; + // encryption_needed = true; yellow_text_enabled = false; prezoom_enabled = false; flipping_enabled = false; @@ -292,14 +292,14 @@ void AOApplication::server_packet_received(AOPacket *p_packet) // Remove any characters not accepted in folder names for the server_name // here - if (AOApplication::get_auto_logging_enabled()){ - this->log_filename = QDateTime::currentDateTime().toUTC().toString( - "'logs/" + server_name.remove(QRegExp("[\\\\/:*?\"<>|\']")) + - "/'ddd MMMM yyyy hh.mm.ss t'.log'"); - this->write_to_file("Joined server " + server_name + " on address " + - server_address + " on " + - QDateTime::currentDateTime().toUTC().toString(), - log_filename, true); + if (AOApplication::get_auto_logging_enabled()) { + this->log_filename = QDateTime::currentDateTime().toUTC().toString( + "'logs/" + server_name.remove(QRegExp("[\\\\/:*?\"<>|\']")) + + "/'ddd MMMM yyyy hh.mm.ss t'.log'"); + this->write_to_file("Joined server " + server_name + " on address " + + server_address + " on " + + QDateTime::currentDateTime().toUTC().toString(), + log_filename, true); } QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256); @@ -335,8 +335,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet) ++loaded_chars; w_lobby->set_loading_text(tr("Loading chars:\n%1/%2") - .arg(QString::number(loaded_chars)) - .arg(QString::number(char_list_size))); + .arg(QString::number(loaded_chars)) + .arg(QString::number(char_list_size))); w_courtroom->append_char(f_char); @@ -676,6 +676,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_courtroom->arup_modify(arup_type, n_element - 1, f_contents.at(n_element)); } + w_courtroom->list_areas(); } } else if (header == "IL") { diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp index 39754f39..8247fd86 100644 --- a/src/text_file_functions.cpp +++ b/src/text_file_functions.cpp @@ -53,6 +53,26 @@ bool AOApplication::get_log_goes_downwards() return result.startsWith("true"); } +bool AOApplication::get_log_newline() +{ + QString result = + configini->value("log_newline", "false").value<QString>(); + return result.startsWith("true"); +} + +int AOApplication::get_log_margin() +{ + int result = configini->value("log_margin", 0).toInt(); + return result; +} + +bool AOApplication::get_log_timestamp() +{ + QString result = + configini->value("log_timestamp", "false").value<QString>(); + return result.startsWith("true"); +} + bool AOApplication::get_showname_enabled_by_default() { QString result = @@ -435,7 +455,8 @@ QString AOApplication::get_tagged_stylesheet(QString target_tag, QString p_file) QString AOApplication::get_chat_markdown(QString p_identifier, QString p_chat) { - QString design_ini_path = get_base_path() + "misc/" + p_chat + "/config.ini"; + QString design_ini_path = + get_base_path() + "misc/" + get_chat(p_chat) + "/config.ini"; QString default_path = get_base_path() + "misc/default/config.ini"; QString f_result = read_design_ini(p_identifier, design_ini_path); @@ -449,9 +470,10 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat) { QColor return_color(255, 255, 255); - QString design_ini_path = get_base_path() + "misc/" + p_chat + "/config.ini"; + QString design_ini_path = + get_base_path() + "misc/" + get_chat(p_chat) + "/config.ini"; QString default_path = get_base_path() + "misc/default/config.ini"; - QString f_result = read_design_ini("c" + p_identifier, design_ini_path); + QString f_result = read_design_ini(p_identifier, design_ini_path); if (f_result == "") { f_result = read_design_ini(p_identifier, default_path); @@ -908,6 +930,11 @@ QString AOApplication::get_effect_sound(QString fx_name, QString p_char) f_result = read_design_ini(fx_name, default_path); } } + + if (fx_name == "realization") { + f_result = get_custom_realization(p_char); + } + return f_result; } @@ -1051,7 +1078,7 @@ QString AOApplication::get_casing_can_host_cases() } bool AOApplication::get_auto_logging_enabled() { - QString result = - configini->value("automatic_logging_enabled", "true").value<QString>(); - return result.startsWith("true"); + QString result = + configini->value("automatic_logging_enabled", "true").value<QString>(); + return result.startsWith("true"); } |
