aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------base/themes0
-rw-r--r--include/aolayer.h46
-rw-r--r--include/courtroom.h12
-rw-r--r--resource/translations/ao_ru.qmbin39989 -> 52533 bytes
-rw-r--r--resource/translations/ao_ru.ts722
-rw-r--r--src/aolayer.cpp38
-rw-r--r--src/courtroom.cpp165
-rw-r--r--src/packet_distribution.cpp2
8 files changed, 521 insertions, 464 deletions
diff --git a/base/themes b/base/themes
-Subproject 9090a63dec0384c63fc4bdc7fc68dccb961e05c
+Subproject 15b0cc4aa1241a9b740fb1ce8a61c7f699a80de
diff --git a/include/aolayer.h b/include/aolayer.h
index 6265cec6..8510edfb 100644
--- a/include/aolayer.h
+++ b/include/aolayer.h
@@ -10,6 +10,27 @@
class AOApplication;
+// "Brief" explanation of what the hell this is:
+//
+// AOLayer handles all animations both inside and outside
+// the viewport. It was originally devised as a layering
+// system, but turned into a full refactor of the existing
+// animation code.
+//
+// AOLayer has six subclasses, all of which differ mainly in
+// how they handle path resolution.
+//
+// - BackgroundLayer: self-explanatory, handles files found in base/background
+// - CharLayer: handles all the "wonderful" quirks of character path resolution
+// - SplashLayer: handles elements that can either be provided by a misc/ directory
+// or by the theme - speedlines, shouts, WT/CE, et cetera
+// - EffectLayer: this is basically a dummy layer since effects do their own wonky
+// path resolution in a different file
+// - InterfaceLayer: handles UI elements like the chat arrow and the music display
+// - StickerLayer: Crystalwarrior really wanted this. Handles "stickers," whatever those are.
+//
+// For questions comments or concerns, bother someone else
+
class AOLayer : public QLabel {
Q_OBJECT
@@ -24,6 +45,11 @@ public:
bool play_once = false; // Whether to loop this animation or not
bool cull_image = true; // if we're done playing this animation, should we
// hide it? also controls durational culling
+ // Are we loading this from the same frame we left off on?
+ bool continuous = false;
+ // Whether or not to forcibly bypass the simple check done by start_playback
+ // and use the existent value of continuous instead
+ bool force_continuous = false;
Qt::TransformationMode transform_mode = Qt::FastTransformation; // transformation mode to use for this image
bool stretch = false; // Should we stretch/squash this image to fill the screen?
@@ -72,7 +98,7 @@ protected:
QElapsedTimer actual_time;
// Usually used to turn seconds into milliseconds such as for [Time] tag in
- // char.ini
+ // char.ini (which is no longer used)
const int tick_ms = 60;
// These are the X and Y values before they are fixed based on the sprite's
@@ -91,12 +117,6 @@ protected:
int speed = 100;
bool m_flipped = false;
- // Are we loading this from the same frame we left off on? TODO: actually make
- // this work
- bool continuous = false;
- // Whether or not to forcibly bypass the simple check done by start_playback
- // and use the existent value of continuous instead
- bool force_continuous = false;
int duration = 0;
@@ -129,14 +149,6 @@ public:
void load_image(QString p_filename);
};
-class ForegroundLayer : public AOLayer {
- Q_OBJECT
-public:
- ForegroundLayer(QWidget *p_parent, AOApplication *p_ao_app);
- QString miscname; //'misc' folder to search. we fetch this based on p_charname below
- void load_image(QString p_filename, QString p_charname);
-};
-
class CharLayer : public AOLayer {
Q_OBJECT
public:
@@ -191,10 +203,10 @@ signals:
void play_sfx(QString sfx);
};
-class InterjectionLayer : public AOLayer {
+class SplashLayer : public AOLayer {
Q_OBJECT
public:
- InterjectionLayer(QWidget *p_parent, AOApplication *p_ao_app);
+ SplashLayer(QWidget *p_parent, AOApplication *p_ao_app);
void load_image(QString p_filename, QString p_charname, QString p_miscname);
};
diff --git a/include/courtroom.h b/include/courtroom.h
index fe3a1713..cebdfe24 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -165,7 +165,7 @@ public:
void set_background(QString p_background, bool display = false);
// sets the local character pos/side to use.
- void set_side(QString p_side);
+ void set_side(QString p_side, bool block_signals=true);
// sets the pos dropdown
void set_pos_dropdown(QStringList pos_dropdowns);
@@ -605,7 +605,7 @@ private:
QWidget *ui_viewport;
BackgroundLayer *ui_vp_background;
- ForegroundLayer *ui_vp_speedlines;
+ SplashLayer *ui_vp_speedlines;
CharLayer *ui_vp_player_char;
CharLayer *ui_vp_sideplayer_char;
BackgroundLayer *ui_vp_desk;
@@ -614,10 +614,10 @@ private:
QLabel *ui_vp_showname;
InterfaceLayer *ui_vp_chat_arrow;
QTextEdit *ui_vp_message;
- InterfaceLayer *ui_vp_testimony;
- InterjectionLayer *ui_vp_wtce;
+ SplashLayer *ui_vp_testimony;
+ SplashLayer *ui_vp_wtce;
EffectLayer *ui_vp_effect;
- InterjectionLayer *ui_vp_objection;
+ SplashLayer *ui_vp_objection;
QTextEdit *ui_ic_chatlog;
@@ -659,6 +659,7 @@ private:
QComboBox *ui_emote_dropdown;
QComboBox *ui_pos_dropdown;
+ AOButton *ui_pos_remove;
QComboBox *ui_iniswap_dropdown;
AOButton *ui_iniswap_remove;
@@ -836,6 +837,7 @@ private slots:
void on_emote_dropdown_changed(int p_index);
void on_pos_dropdown_changed(int p_index);
+ void on_pos_remove_clicked();
void on_iniswap_dropdown_changed(int p_index);
void set_iniswap_dropdown();
diff --git a/resource/translations/ao_ru.qm b/resource/translations/ao_ru.qm
index 6847fc96..5c10187b 100644
--- a/resource/translations/ao_ru.qm
+++ b/resource/translations/ao_ru.qm
Binary files differ
diff --git a/resource/translations/ao_ru.ts b/resource/translations/ao_ru.ts
index eedbb17e..13051e8e 100644
--- a/resource/translations/ao_ru.ts
+++ b/resource/translations/ao_ru.ts
@@ -27,7 +27,7 @@ Please check your Internet connection and firewall, and please try again.</sourc
<source>Outdated version! Your version: %1
Please go to aceattorneyonline.com to update.</source>
<translation>Устаревшая версия! У вас установлена версия %1
-Проследуйте на сайт aceattorneyonline.com для обновления.</translation>
+Пройдите на сайт aceattorneyonline.com для обновления.</translation>
</message>
<message>
<source>You have been exiled from AO.
@@ -184,417 +184,433 @@ Reason: </source>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="125"/>
<source>Log newline:</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранять перенос строки:</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 &apos;name: message&apos;.</source>
- <translation type="unfinished"></translation>
+ <translation>Показывать новое сообщение на следующей строке после имени.
+Если опция выключена, сообщения будут отображаться в следующем формате: &quot;имя: сообщение&quot;.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="140"/>
<source>Log margin:</source>
- <translation type="unfinished"></translation>
+ <translation>Интервал:</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 type="unfinished"></translation>
+ <translation>Ширина интервала (в пикселях) между сообщениями в истории игрового чата.
+Значение по умолчанию: 0.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="155"/>
<source>Log timestamp:</source>
- <translation type="unfinished"></translation>
+ <translation>Метки времени:</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 type="unfinished"></translation>
+ <translation>Показывать метки времени в часовом поясе UTC в игровом чате перед именем.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="168"/>
<source>Log IC actions:</source>
- <translation type="unfinished"></translation>
+ <translation>Действия:</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="170"/>
<source>If ticked, log will show IC actions such as shouting and presenting evidence.</source>
- <translation type="unfinished"></translation>
+ <translation>Показывать действия (возгласы, предъявленные улики и пр.) в истории игрового чата.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="182"/>
<source>Text Stay Time:</source>
- <translation type="unfinished"></translation>
+ <translation>Задержка текста:</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="183"/>
<source>Minimum amount of time (in miliseconds) an IC message must stay on screen before the next IC message is shown, acting as a &apos;queue&apos;. Set to 0 to disable this behavior.</source>
- <translation type="unfinished"></translation>
+ <translation>Минимальное время (в миллисекундах), которое сообщение игрового чата должно отображаться перед показом следующего, образуя очередь.
+Поставьте &quot;0&quot; для отключения очереди.</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="197"/>
<source>Desynchronize IC Logs:</source>
- <translation type="unfinished"></translation>
+ <translation>Независимая история чата:</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="199"/>
<source>If ticked, log will show messages as-received, while viewport will parse according to the queue (Text Stay Time).</source>
- <translation type="unfinished"></translation>
+ <translation>Показывать сообщения в истории игрового чата в реальном времени,
+а в самом игровом чате - в соответствии с настройками очереди (&quot;Задержка текста&quot;).</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="210"/>
<source>Instant Objection:</source>
- <translation type="unfinished"></translation>
+ <translation>Возглас без задержки:</translation>
</message>
<message>
<location filename="../../src/aooptionsdialog.cpp" line="212"/>
<source>If Text Stay Time is more than 0, instant objection will skip queued messages instead of waiting to catch up.</source>
- <translation type="unfinished"></translation>
+ <translation>Если &quot;Задержка текста&quot; больше нуля, включение данной опции позволяет отобразить возглас, минуя сообщения в очереди.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="231"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="223"/>
+ <source>Chat Rate Limit:</source>
+ <translation>Максимальная частота отправки:</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="224"/>
+ <source>Minimum amount of time (in miliseconds) that must pass before the next Enter key press will send your IC message.</source>
+ <translation>Минимальное время (в миллисекундах), которое должно пройти,
+прежде чем нажатие Enter снова отправит ваше сообщение в игровой чат.</translation>
+ </message>
+ <message>
+ <location filename="../../src/aooptionsdialog.cpp" line="244"/>
<source>Default username:</source>
<translation>Никнейм по умолчанию:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="233"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="246"/>
<source>Your OOC name will be automatically set to this value when you join a server.</source>
<translation>Псевдоним по умолчанию для ООС-чата.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="246"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="259"/>
<source>Custom shownames:</source>
<translation>Пользовательские имена:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="248"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="261"/>
<source>Gives the default value for the in-game &apos;Custom shownames&apos; tickbox, which in turn determines whether the client should display custom in-character names.</source>
- <translation>Задать значение по умолчанию для настройки отображения пользовательских имён,
-которая определяет возможность показа в игровом чате имён персонажей, установленных самими игроками.</translation>
+ <translation>Значение по умолчанию для переключателя &quot;Пользовательские имена&quot; в основном окне приложения.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="268"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="281"/>
<source>Backup MS:</source>
<translation>Запасной ГС:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="270"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="283"/>
<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="283"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="296"/>
<source>Discord:</source>
<translation>Discord:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="285"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="298"/>
<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>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="298"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="311"/>
<source>Language:</source>
<translation>Язык:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="300"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="313"/>
<source>Sets the language if you don&apos;t want to use your system language.</source>
- <translation>Изменяет язык интерфейса программы, если вы не хотите использовать язык системы.</translation>
+ <translation>Изменяет язык интерфейса приложения, если вы не хотите использовать язык системы.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="306"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="319"/>
<source> - Keep current setting</source>
<translation> - сохранить текущие настройки</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="320"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="333"/>
<source>Allow Screenshake:</source>
<translation>Встряска экрана:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="322"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="335"/>
<source>Allows screenshaking. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
- <translation>Разрешить показ встрясок экрана. Отключите, если вы страдаете от светочувствительности и/или припадков.</translation>
+ <translation>Разрешить показ встрясок экрана.
+Отключите, если вы страдаете от светочувствительности и/или припадков.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="334"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="347"/>
<source>Allow Effects:</source>
<translation>Визуальные эффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="336"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="349"/>
<source>Allows screen effects. Disable this if you have concerns or issues with photosensitivity and/or seizures.</source>
- <translation>Разрешить показ визуальных эффектов. Отключите, если вы страдаете от светочувствительности и/или припадков.</translation>
+ <translation>Разрешить показ визуальных эффектов.
+Отключите, если вы страдаете от светочувствительности и/или припадков.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="348"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="361"/>
<source>Network Frame Effects:</source>
<translation>Эффекты по сети:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="349"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="362"/>
<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>Разрешить отправку звуков, эффектов вспышек и встряски экрана по сети в соответствии с char.ini.
Работает только на серверах, поддерживающих данную функцию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="362"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="375"/>
<source>Colors in IC Log:</source>
<translation>Цвета в истории чата:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="364"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="377"/>
<source>Use the markup colors in the server IC chatlog.</source>
<translation>Отображать цвета в истории игрового чата.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="375"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="388"/>
<source>Sticky Sounds:</source>
<translation>Закрепить звуки:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="377"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="390"/>
<source>Turn this on to prevent the sound dropdown from clearing the sound after playing it.</source>
<translation>Не сбрасывать выбранные настройки звука после его воспроизведения.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="389"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="402"/>
<source>Sticky Effects:</source>
<translation>Закрепить эффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="391"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="404"/>
<source>Turn this on to prevent the effects dropdown from clearing the effect after playing it.</source>
<translation>Не сбрасывать выбранные настройки эффекта после его воспроизведения.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="404"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="417"/>
<source>Sticky Preanims:</source>
<translation>Закрепить пред. анимации:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="406"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="419"/>
<source>Turn this on to prevent preanimation checkbox from clearing after playing the emote.</source>
<translation>Не сбрасывать настройки пред. анимации после её воспроизведения.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="418"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="431"/>
<source>Custom Chatboxes:</source>
<translation>Пользовательские подложки:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="420"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="433"/>
<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="438"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="451"/>
<source>Callwords</source>
<translation>Позывные</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="465"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="478"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!&lt;br&gt;Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Введите на отдельных строках свои позывные. Если кто-то в чате напишет их, вы услышите звуковой сигнал. Регистр символов не учитывается.&lt;br&gt;Не оставляйте в конце строк пробелы, иначе вы будете получать оповещения о каждом пробеле в чате.&lt;/body&gt;&lt;/html&gt;</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Введите в поле выше свои позывные. Если кто-то в чате напишет их, вы услышите звуковой сигнал. Регистр символов не учитывается.&lt;br&gt;Каждый позывной должен быть на отдельной строке. Не оставляйте в конце строк пробелы, иначе вы будете получать оповещения о каждом пробеле в чате.&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="475"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="488"/>
<source>Audio</source>
<translation>Аудио</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="489"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="502"/>
<source>Audio device:</source>
- <translation>Устройство воспроизведения:</translation>
+ <translation>Устройство вывода:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="490"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="503"/>
<source>Sets the audio device for all sounds.</source>
- <translation>Укажите устройство вывода всего аудио игры.</translation>
+ <translation>Укажите устройство воспроизведения всего аудио приложения.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="523"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="536"/>
<source>Music:</source>
<translation>Музыка:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="524"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="537"/>
<source>Sets the music&apos;s default volume.</source>
<translation>Громкость музыки по умолчанию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="538"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="551"/>
<source>SFX:</source>
<translation>Звук. эффекты:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="540"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="553"/>
<source>Sets the SFX&apos;s default volume. Interjections and actual sound effects count as &apos;SFX&apos;.</source>
- <translation>Громкость звуковых эффектов по умолчанию. В категорию эффектов также входят возгласы.</translation>
+ <translation>Громкость звуковых эффектов по умолчанию. В эту категорию также входят возгласы.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="554"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="567"/>
<source>Blips:</source>
<translation>Сигналы:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="556"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="569"/>
<source>Sets the volume of the blips, the talking sound effects.</source>
<translation>Громкость сигналов, заменяющих голос, по умолчанию.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="578"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="591"/>
<source>Blip rate:</source>
<translation>Частота сигналов:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="580"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="593"/>
<source>Sets the delay between playing the blip sounds.</source>
<translation>Задержка по умолчанию между сигналами, заменяющими голос.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="588"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="601"/>
<source>Play a blip sound &quot;once per every X symbols&quot;, where X is the blip rate.</source>
- <translation>Проигрывать сигнал &quot;каждые Х символов&quot;, где Х - частота.</translation>
+ <translation>Проигрывать сигнал каждые Х символов.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="595"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="608"/>
<source>Blank blips:</source>
<translation>Пустые сигналы:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="597"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="610"/>
<source>If true, the game will play a blip sound even when a space is &apos;being said&apos;.</source>
<translation>Проигрывать сигналы даже для пробелов.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="609"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="622"/>
<source>Enable Looping SFX:</source>
<translation>Повтор звук. эффектов:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="610"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="623"/>
<source>If true, the game will allow looping sound effects to play on preanimations.</source>
<translation>Разрешить воспроизведение зацикленных звуковых эффектов во время предварительной анимации.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="622"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="635"/>
<source>Kill Music On Objection:</source>
<translation>Тишина при протесте:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="624"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="637"/>
<source>If true, AO2 will stop the music for you when you or someone else does &apos;Objection!&apos;.</source>
- <translation>Останавливать музыку, когда кто-нибудь кричит &quot;Objection!&quot;.</translation>
+ <translation>Останавливать музыку, когда кто-то протестует.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="636"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="649"/>
<source>Casing</source>
<translation>Заседания</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="653"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="666"/>
<source>This server supports case alerts.</source>
- <translation>Этот сервер поддерживает объявления заседаний.</translation>
+ <translation>Сервер поддерживает объявления заседаний.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="656"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="669"/>
<source>This server does not support case alerts.</source>
- <translation>Этот сервер не поддерживает объявления заседаний.</translation>
+ <translation>Сервер не поддерживает объявления заседаний.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="657"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="670"/>
<source>Pretty self-explanatory.</source>
<translation>Дополнительные пояснения не требуются.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="666"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="679"/>
<source>Casing:</source>
<translation>Заседания:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="668"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="681"/>
<source>If checked, you will get alerts about case announcements.</source>
- <translation>Вы получите уведомление, когда будет объявлено заседание.</translation>
+ <translation>Получать уведомления при объявлении заседаний.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="684"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="697"/>
<source>Defense:</source>
<translation>Защита:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="685"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="698"/>
<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="699"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="712"/>
<source>Prosecution:</source>
<translation>Обвинение:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="701"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="714"/>
<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="715"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="728"/>
<source>Judge:</source>
<translation>Судья:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="716"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="729"/>
<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="730"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="743"/>
<source>Juror:</source>
<translation>Присяжные:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="731"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="744"/>
<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="745"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="758"/>
<source>Stenographer:</source>
<translation>Стенографист:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="747"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="760"/>
<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="761"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="774"/>
<source>CM:</source>
<translation>ПД:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="763"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="776"/>
<source>If checked, you will appear amongst the potential CMs on the server.</source>
<translation>Отметьте, если хотите состоять в числе возможных производителей дел (ПД).</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="777"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="790"/>
<source>Hosting cases:</source>
<translation>Проведение дел:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="779"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="792"/>
<source>If you&apos;re a CM, enter what cases you are willing to host.</source>
<translation>Если вы производитель дел (ПД), укажите, какими делами вы хотите заниматься.</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="793"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="806"/>
<source>Automatic Logging:</source>
<translation>Авт. сохранение истории:</translation>
</message>
<message>
- <location filename="../../src/aooptionsdialog.cpp" line="795"/>
+ <location filename="../../src/aooptionsdialog.cpp" line="808"/>
<source>If checked, all logs will be automatically written in the /logs folder.</source>
<translation>Автоматически сохранять всю историю чатов в папке /logs.</translation>
</message>
@@ -602,33 +618,33 @@ Reason: </source>
<context>
<name>Courtroom</name>
<message>
- <location filename="../../src/charselect.cpp" line="23"/>
+ <location filename="../../src/charselect.cpp" line="33"/>
<source>Password</source>
<translation>Пароль</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="29"/>
+ <location filename="../../src/charselect.cpp" line="39"/>
<source>Spectator</source>
<translation>Зритель</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="32"/>
- <location filename="../../src/courtroom.cpp" line="153"/>
+ <location filename="../../src/charselect.cpp" line="42"/>
+ <location filename="../../src/courtroom.cpp" line="163"/>
<source>Search</source>
<translation>Поиск</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="37"/>
+ <location filename="../../src/charselect.cpp" line="47"/>
<source>Passworded</source>
<translation>Защищён паролем</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="41"/>
+ <location filename="../../src/charselect.cpp" line="51"/>
<source>Taken</source>
<translation>Занят</translation>
</message>
<message>
- <location filename="../../src/charselect.cpp" line="239"/>
+ <location filename="../../src/charselect.cpp" line="292"/>
<source>Generating chars:
%1/%2</source>
<translation>Генерация персонажей:
@@ -641,55 +657,55 @@ Reason: </source>
</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="126"/>
+ <location filename="../../src/courtroom.cpp" line="132"/>
<source>Showname</source>
<translation>Имя</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="130"/>
+ <location filename="../../src/courtroom.cpp" line="136"/>
<source>Message</source>
<translation>Сообщение</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="145"/>
+ <location filename="../../src/courtroom.cpp" line="155"/>
<source>Name</source>
<translation>Никнейм</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="195"/>
+ <location filename="../../src/courtroom.cpp" line="205"/>
<source>Pre</source>
- <translation type="unfinished"></translation>
+ <translation>Пред. анимация</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="198"/>
+ <location filename="../../src/courtroom.cpp" line="208"/>
<source>Flip</source>
- <translation type="unfinished"></translation>
+ <translation>Отразить</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="202"/>
+ <location filename="../../src/courtroom.cpp" line="212"/>
<source>Guard</source>
- <translation type="unfinished"></translation>
+ <translation>Не беспокоить</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="206"/>
+ <location filename="../../src/courtroom.cpp" line="216"/>
<source>Additive</source>
- <translation type="unfinished"></translation>
+ <translation>Дополнять</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="211"/>
- <location filename="../../src/courtroom.cpp" line="847"/>
+ <location filename="../../src/courtroom.cpp" line="221"/>
+ <location filename="../../src/courtroom.cpp" line="862"/>
<source>Casing</source>
- <translation type="unfinished">Заседания</translation>
+ <translation>Заседания</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="216"/>
+ <location filename="../../src/courtroom.cpp" line="226"/>
<source>Shownames</source>
- <translation type="unfinished"></translation>
+ <translation>Польз. имена</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="219"/>
+ <location filename="../../src/courtroom.cpp" line="229"/>
<source>Immediate</source>
- <translation type="unfinished"></translation>
+ <translation>Говорить сразу</translation>
</message>
<message>
<source>White</source>
@@ -720,301 +736,300 @@ Reason: </source>
<translation type="obsolete">В общем-то, это ни на что не влияет...</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3973"/>
+ <location filename="../../src/courtroom.cpp" line="3998"/>
<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`, и что это правильно отформатированный файл .ini.
+ <translation>Укажите имя файла с делом (без расширения) для загрузки.
+Убедитесь, что он расположен в папке `base/cases`, и что это правильно отформатированный файл .ini.
Вы можете загрузить следующие дела: %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4002"/>
+ <location filename="../../src/courtroom.cpp" line="4027"/>
<source>Case made by %1.</source>
<translation>Автор дела: %1.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4012"/>
+ <location filename="../../src/courtroom.cpp" line="4037"/>
<source>Navigate to %1 for the CM doc.</source>
<translation>Откройте %1 для получения материалов дела.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4044"/>
+ <location filename="../../src/courtroom.cpp" line="4069"/>
<source>Your case &quot;%1&quot; was loaded!</source>
<translation>Ваше дело &quot;%1&quot; было загружено!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="799"/>
- <location filename="../../src/courtroom.cpp" line="4142"/>
+ <location filename="../../src/courtroom.cpp" line="814"/>
+ <location filename="../../src/courtroom.cpp" line="4167"/>
<source>Server</source>
<translation>Сервер</translation>
</message>
<message>
<location filename="../../src/courtroom.cpp" line="121"/>
- <location filename="../../src/courtroom.cpp" line="3652"/>
- <location filename="../../src/courtroom.cpp" line="3694"/>
- <location filename="../../src/courtroom.cpp" line="4415"/>
+ <location filename="../../src/courtroom.cpp" line="3668"/>
+ <location filename="../../src/courtroom.cpp" line="3710"/>
+ <location filename="../../src/courtroom.cpp" line="4441"/>
<source>None</source>
- <translation type="unfinished"></translation>
+ <translation>Нет</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="254"/>
+ <location filename="../../src/courtroom.cpp" line="264"/>
<source>% x offset</source>
- <translation type="unfinished"></translation>
+ <translation>% сдвига по горизонтали</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="257"/>
+ <location filename="../../src/courtroom.cpp" line="267"/>
<source>% y offset</source>
- <translation type="unfinished"></translation>
+ <translation>% сдвига по вертикали</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="609"/>
+ <location filename="../../src/courtroom.cpp" line="616"/>
<source>Change the horizontal percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation type="unfinished"></translation>
+ <translation>Изменить сдвиг персонажа по горизонтали относительно центра экрана.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="616"/>
+ <location filename="../../src/courtroom.cpp" line="623"/>
<source>Change the vertical percentage offset of your character&apos;s position from the center of the screen.</source>
- <translation type="unfinished"></translation>
+ <translation>Изменить сдвиг персонажа по вертикали относительно центра экрана.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="721"/>
+ <location filename="../../src/courtroom.cpp" line="736"/>
<source>Set an &apos;iniswap&apos;, 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/iniswaps.ini</source>
- <translation type="unfinished"></translation>
+ <translation>Включить т.н. подмену ini – альтернативную папку персонажа, к которой будет обращаться текущий персонаж.
+Введите имя персонажа и нажмите Enter; нажмите [X], чтобы удалить.
+Изменения сохраняются по следующему пути: base/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="746"/>
+ <location filename="../../src/courtroom.cpp" line="761"/>
<source>Remove the currently selected sound effect.</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить выбранный звуковой эффект.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="781"/>
+ <location filename="../../src/courtroom.cpp" line="796"/>
<source>Hold It!</source>
- <translation type="unfinished"></translation>
+ <translation>Стоп!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="782"/>
- <location filename="../../src/courtroom.cpp" line="788"/>
- <location filename="../../src/courtroom.cpp" line="794"/>
+ <location filename="../../src/courtroom.cpp" line="797"/>
+ <location filename="../../src/courtroom.cpp" line="803"/>
+ <location filename="../../src/courtroom.cpp" line="809"/>
<source>When this is turned on, your next in-character message will be a shout!</source>
<translation>Когда эта опция включена, ваше следующее сообщение в игровом чате будет с возгласом!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="787"/>
+ <location filename="../../src/courtroom.cpp" line="802"/>
<source>Objection!</source>
- <translation type="unfinished"></translation>
+ <translation>Протестую!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="793"/>
+ <location filename="../../src/courtroom.cpp" line="808"/>
<source>Take That!</source>
- <translation type="unfinished"></translation>
+ <translation>Вот!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="801"/>
+ <location filename="../../src/courtroom.cpp" line="816"/>
<source>Toggle between server chat and global AO2 chat.</source>
<translation>Переключатель между чатом сервера и общим чатом AO2.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="805"/>
- <location filename="../../src/courtroom.cpp" line="809"/>
- <location filename="../../src/courtroom.cpp" line="815"/>
- <location filename="../../src/courtroom.cpp" line="819"/>
+ <location filename="../../src/courtroom.cpp" line="820"/>
+ <location filename="../../src/courtroom.cpp" line="824"/>
+ <location filename="../../src/courtroom.cpp" line="830"/>
+ <location filename="../../src/courtroom.cpp" line="834"/>
<source>This will display the animation in the viewport as soon as it is pressed.</source>
- <translation>Показать анимацию в игровом чате сразу после нажатия.</translation>
+ <translation>Анимация будет показана в игровом чате сразу после нажатия.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="813"/>
+ <location filename="../../src/courtroom.cpp" line="828"/>
<source>Guilty!</source>
<translation>Виновен!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="826"/>
+ <location filename="../../src/courtroom.cpp" line="841"/>
<source>Bring up the Character Select Screen and change your character.</source>
<translation>Перейти на экран выбора и сменить персонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="832"/>
+ <location filename="../../src/courtroom.cpp" line="847"/>
<source>Refresh the theme and update all of the ui elements to match.</source>
<translation>Перезагрузить тему и обновить все элементы интерфейса.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="838"/>
+ <location filename="../../src/courtroom.cpp" line="853"/>
<source>Request the attention of the current server&apos;s moderator.</source>
<translation>Привлечь внимание модератора сервера.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="844"/>
+ <location filename="../../src/courtroom.cpp" line="859"/>
<source>Allows you to change various aspects of the client.</source>
- <translation>Изменить параметры работы программы.</translation>
+ <translation>Изменить параметры работы приложения.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="850"/>
+ <location filename="../../src/courtroom.cpp" line="865"/>
<source>An interface to help you announce a case (you have to be a CM first to be able to announce cases)</source>
<translation>Открыть окно, которое позволит вам объявить о деле
(для этого нужно быть производителем дел (ПД))</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="856"/>
+ <location filename="../../src/courtroom.cpp" line="871"/>
<source>Switch between Areas and Music lists</source>
- <translation>Переключатель между списками музыки и локаций</translation>
+ <translation>Переключиться между списками музыки и локаций</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="861"/>
+ <location filename="../../src/courtroom.cpp" line="876"/>
<source>Play a single-shot animation as defined by the emote when checked.</source>
- <translation>Показать разовую анимацию, соответствующую выбранной эмоции.</translation>
+ <translation>Показать разовую предварительную анимацию,
+соответствующую выбранной эмоции.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="864"/>
+ <location filename="../../src/courtroom.cpp" line="879"/>
<source>If preanim is checked, display the input text immediately as the animation plays concurrently.</source>
- <translation>Если включена предварительная анимация: вывести текст, не дожидаясь окончания предварительной анимации.</translation>
+ <translation>Если включена предварительная анимация:
+выводить текст, не дожидаясь окончания предварительной анимации.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="882"/>
+ <location filename="../../src/courtroom.cpp" line="897"/>
<source>Mirror your character&apos;s emotes when checked.</source>
<translation>Отразить анимации персонажа по горизонтали.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="886"/>
+ <location filename="../../src/courtroom.cpp" line="901"/>
<source>Add text to your last spoken message when checked.</source>
<translation>Добавлять текст к своему последнему сообщению.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="890"/>
+ <location filename="../../src/courtroom.cpp" line="905"/>
<source>Do not listen to mod calls when checked, preventing them from playing sounds or focusing attention on the window.</source>
- <translation>Заглушить вызовы модератора: вы не будете получать звуковые оповещения, а игра не будет привлекать к себе внимание.</translation>
+ <translation>Заглушить вызовы модератора: вы не будете получать звуковые оповещения,
+а окно приложения не будет привлекать к себе внимание.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="894"/>
+ <location filename="../../src/courtroom.cpp" line="909"/>
<source>Lets you receive case alerts when enabled.
(You can set your preferences in the Settings!)</source>
<translation>Получать уведомления о заседаниях.
-(См. подробнее в меню опций)</translation>
+(См. подробнее в настройках)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="899"/>
+ <location filename="../../src/courtroom.cpp" line="914"/>
<source>Display customized shownames for all users when checked.</source>
- <translation>Показывать пользовательские имена для всех.</translation>
+ <translation>Показывать пользовательские имена для всех игроков.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="902"/>
+ <location filename="../../src/courtroom.cpp" line="917"/>
<source>Custom Shout!</source>
<translation>Пользовательский возглас!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="905"/>
+ <location filename="../../src/courtroom.cpp" line="920"/>
<source>This will display the custom character-defined animation in the viewport as soon as it is pressed.
To make one, your character&apos;s folder must contain custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect</source>
- <translation>Показать в игровом чате анимацию, уникальную для персонажа, сразу после нажатия.
-Для добавления такой анимации поместите в папку персонажа свои изображения
-в формате webp/apng/gif/png и звук в формате wav/ogg/opus</translation>
+ <translation>Показать в игровом чате уникальную для персонажа анимацию сразу после нажатия.
+Для добавления такой анимации поместите в папку персонажа файлы custom.webp/apng/gif/png и custom.wav/ogg/opus.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="913"/>
+ <location filename="../../src/courtroom.cpp" line="928"/>
<source>Play realization sound and animation in the viewport on the next spoken message when checked.</source>
<translation>Показать вспышку и воспроизвести звук озарения во время вывода следующей реплики.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="919"/>
+ <location filename="../../src/courtroom.cpp" line="934"/>
<source>Shake the screen on next spoken message when checked.</source>
<translation>Потрясти экран во время вывода следующей реплики.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="925"/>
+ <location filename="../../src/courtroom.cpp" line="940"/>
<source>Display the list of character folders you wish to mute.</source>
<translation>Выбрать персонажей, которых нужно игнорировать.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="929"/>
- <location filename="../../src/courtroom.cpp" line="937"/>
+ <location filename="../../src/courtroom.cpp" line="944"/>
+ <location filename="../../src/courtroom.cpp" line="952"/>
<source>Increase the health bar.</source>
- <translation>Поощрить.</translation>
+ <translation>Поощрить</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="933"/>
- <location filename="../../src/courtroom.cpp" line="941"/>
+ <location filename="../../src/courtroom.cpp" line="948"/>
+ <location filename="../../src/courtroom.cpp" line="956"/>
<source>Decrease the health bar.</source>
- <translation>Оштрафовать.</translation>
+ <translation>Оштрафовать</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="945"/>
+ <location filename="../../src/courtroom.cpp" line="960"/>
<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>Изменить цвет текста сообщения.
Вы также можете выделить часть текста и изменить только её цвет в выпадающем меню.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="958"/>
+ <location filename="../../src/courtroom.cpp" line="973"/>
<source>Back to Lobby</source>
<translation>Назад в лобби</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2034"/>
- <location filename="../../src/courtroom.cpp" line="2122"/>
- <location filename="../../src/courtroom.cpp" line="2197"/>
+ <location filename="../../src/courtroom.cpp" line="2075"/>
<source>HOLD IT!</source>
- <translation type="unfinished"></translation>
+ <translation>СТОП!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2039"/>
- <location filename="../../src/courtroom.cpp" line="2127"/>
- <location filename="../../src/courtroom.cpp" line="2204"/>
+ <location filename="../../src/courtroom.cpp" line="2080"/>
<source>OBJECTION!</source>
- <translation type="unfinished"></translation>
+ <translation>ПРОТЕСТУЮ!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2044"/>
- <location filename="../../src/courtroom.cpp" line="2132"/>
- <location filename="../../src/courtroom.cpp" line="2213"/>
+ <location filename="../../src/courtroom.cpp" line="2085"/>
<source>TAKE THAT!</source>
- <translation type="unfinished"></translation>
+ <translation>ВОТ!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2056"/>
- <location filename="../../src/courtroom.cpp" line="2144"/>
- <location filename="../../src/courtroom.cpp" line="2233"/>
+ <location filename="../../src/courtroom.cpp" line="2097"/>
<source>CUSTOM OBJECTION!</source>
- <translation type="unfinished"></translation>
+ <translation>СВОЮ РЕПЛИКУ!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2060"/>
- <location filename="../../src/courtroom.cpp" line="2148"/>
- <location filename="../../src/courtroom.cpp" line="3028"/>
+ <location filename="../../src/courtroom.cpp" line="2103"/>
+ <location filename="../../src/courtroom.cpp" line="2106"/>
+ <location filename="../../src/courtroom.cpp" line="2109"/>
+ <location filename="../../src/courtroom.cpp" line="3018"/>
<source>shouts</source>
- <translation type="unfinished"></translation>
+ <translation>выкрикнул(а)</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="2071"/>
- <location filename="../../src/courtroom.cpp" line="2158"/>
+ <location filename="../../src/courtroom.cpp" line="2122"/>
+ <location filename="../../src/courtroom.cpp" line="2125"/>
+ <location filename="../../src/courtroom.cpp" line="2128"/>
<source>has presented evidence</source>
- <translation type="unfinished"></translation>
+ <translation>предъявил(а) улику</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3024"/>
- <location filename="../../src/courtroom.cpp" line="3685"/>
- <location filename="../../src/courtroom.cpp" line="3686"/>
+ <location filename="../../src/courtroom.cpp" line="3014"/>
+ <location filename="../../src/courtroom.cpp" line="3701"/>
+ <location filename="../../src/courtroom.cpp" line="3702"/>
<source>has stopped the music</source>
- <translation type="unfinished"></translation>
+ <translation>остановил(а) музыку</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3657"/>
- <location filename="../../src/courtroom.cpp" line="3699"/>
+ <location filename="../../src/courtroom.cpp" line="3673"/>
+ <location filename="../../src/courtroom.cpp" line="3715"/>
<source>[MISSING] %1</source>
- <translation type="unfinished"></translation>
+ <translation>[НЕ НАЙДЕНО] %1</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3689"/>
- <location filename="../../src/courtroom.cpp" line="3690"/>
+ <location filename="../../src/courtroom.cpp" line="3705"/>
+ <location filename="../../src/courtroom.cpp" line="3706"/>
<source>has played a song</source>
<translation>включил(а) композицию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3827"/>
+ <location filename="../../src/courtroom.cpp" line="3852"/>
<source>You will now pair up with %1 if they also choose your character in return.</source>
<translation>Вы встанете рядом с %1, если он(а) выберет вашего персонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3856"/>
+ <location filename="../../src/courtroom.cpp" line="3881"/>
<source>You have set your offset to %1%%.</source>
- <translation type="unfinished"></translation>
+ <translation>Сдвиг вашего персонажа: %1%%.</translation>
</message>
<message>
<source>Rainbow</source>
@@ -1033,46 +1048,46 @@ You can also select a part of your currently typed message and use the dropdown
<translation type="vanished">% сдвига</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="260"/>
+ <location filename="../../src/courtroom.cpp" line="270"/>
<source>To front</source>
- <translation>Вперёд</translation>
+ <translation>Спереди</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="261"/>
+ <location filename="../../src/courtroom.cpp" line="271"/>
<source>To behind</source>
- <translation>Назад</translation>
+ <translation>Сзади</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="604"/>
+ <location filename="../../src/courtroom.cpp" line="611"/>
<source>Select a character you wish to pair with.</source>
- <translation>Выберите персонажа, с которым хотите встать рядом.</translation>
+ <translation>Выберите персонажа, рядом с которым хотите встать.</translation>
</message>
<message>
<source>Change the percentage offset of your character&apos;s position from the center of the screen.</source>
<translation type="vanished">Изменить процент сдвига вашего персонажа относительно центра экрана.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="623"/>
+ <location filename="../../src/courtroom.cpp" line="630"/>
<source>Change the order of appearance for your character.</source>
<translation>Переместить вашего персонажа вперёд или назад относительно партнёра.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="628"/>
+ <location filename="../../src/courtroom.cpp" line="635"/>
<source>Display the list of characters to pair with.</source>
<translation>Показать список персонажей, с которыми можно встать рядом.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="697"/>
+ <location filename="../../src/courtroom.cpp" line="712"/>
<source>Oops, you&apos;re muted!</source>
- <translation>О нет, вас заглушили!</translation>
+ <translation>Вам запретили отправлять сообщения!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="711"/>
+ <location filename="../../src/courtroom.cpp" line="726"/>
<source>Set your character&apos;s emote to play on your next message.</source>
<translation>Выберите эмоцию для отображения при выводе вашего следующего сообщения.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="715"/>
+ <location filename="../../src/courtroom.cpp" line="730"/>
<source>Set your character&apos;s supplementary background.</source>
<translation>Установить фон для вашего персонажа.</translation>
</message>
@@ -1084,12 +1099,12 @@ Edit by typing and pressing Enter, [X] to remove. This saves to your base/charac
Изменения сохраняются по следующему пути: base/characters/&lt;имя_персонажа&gt;/iniswaps.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="730"/>
+ <location filename="../../src/courtroom.cpp" line="745"/>
<source>Remove the currently selected iniswap from the list and return to the original character folder.</source>
<translation>Удалить выбранного для подмены ini персонажа и вернуться к папке изначально выбранного персонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="738"/>
+ <location filename="../../src/courtroom.cpp" line="753"/>
<source>Set a sound effect to play on your next &apos;Preanim&apos;. 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/&lt;charname&gt;/soundlist.ini</source>
<translation>Выберите звук, который нужно воспроизвести со следующей пред. анимацией.
@@ -1098,7 +1113,7 @@ Edit by typing and pressing Enter, [X] to remove. This saves to your base/charac
Изменения сохраняются по следующему пути: base/characters/&lt;имя_персонажа&gt;/soundlist.ini</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="754"/>
+ <location filename="../../src/courtroom.cpp" line="769"/>
<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 = &apos;miscname&apos; where it referes to misc/&lt;miscname&gt;/effects.ini to read the effects.</source>
@@ -1107,73 +1122,73 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
в категории [Options] файла char.ini, effects = &apos;название&apos;, что отсылает к файлу misc/&lt;название&gt;/effects.ini.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="774"/>
+ <location filename="../../src/courtroom.cpp" line="789"/>
<source>Music</source>
- <translation type="unfinished"></translation>
+ <translation>Музыка</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="776"/>
+ <location filename="../../src/courtroom.cpp" line="791"/>
<source>Sfx</source>
- <translation type="unfinished"></translation>
+ <translation>Звук. эффекты</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="778"/>
+ <location filename="../../src/courtroom.cpp" line="793"/>
<source>Blips</source>
- <translation type="unfinished"></translation>
+ <translation>Сигналы</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="823"/>
+ <location filename="../../src/courtroom.cpp" line="838"/>
<source>Change character</source>
- <translation type="unfinished"></translation>
+ <translation>Сменить персонажа</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="829"/>
+ <location filename="../../src/courtroom.cpp" line="844"/>
<source>Reload theme</source>
- <translation type="unfinished"></translation>
+ <translation>Перезагрузить тему</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="835"/>
+ <location filename="../../src/courtroom.cpp" line="850"/>
<source>Call mod</source>
- <translation type="unfinished"></translation>
+ <translation>Позвать модератора</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="841"/>
+ <location filename="../../src/courtroom.cpp" line="856"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>Настройки</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="854"/>
+ <location filename="../../src/courtroom.cpp" line="869"/>
<source>A/M</source>
<translation>Л/М</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="859"/>
+ <location filename="../../src/courtroom.cpp" line="874"/>
<source>Preanim</source>
- <translation type="unfinished"></translation>
+ <translation>Пред. анимации</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="959"/>
+ <location filename="../../src/courtroom.cpp" line="974"/>
<source>Return back to the server list.</source>
<translation>Вернуться к списку серверов.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="972"/>
+ <location filename="../../src/courtroom.cpp" line="987"/>
<source>Become a spectator. You won&apos;t be able to interact with the in-character screen.</source>
<translation>Зайти в качестве зрителя. Вы не сможете взаимодействовать с игровым чатом.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1615"/>
+ <location filename="../../src/courtroom.cpp" line="1657"/>
<source>You were granted the Disable Modcalls button.</source>
- <translation>Вам дали кнопку выключения вызова модератора.</translation>
+ <translation>Теперь у вас есть кнопка &quot;Не беспокоить&quot;.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="1615"/>
- <location filename="../../src/courtroom.cpp" line="4001"/>
+ <location filename="../../src/courtroom.cpp" line="1657"/>
+ <location filename="../../src/courtroom.cpp" line="4026"/>
<source>CLIENT</source>
<translation>КЛИЕНТ</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3607"/>
+ <location filename="../../src/courtroom.cpp" line="3623"/>
<source>You have been banned.</source>
<translation>Вас забанили.</translation>
</message>
@@ -1182,9 +1197,9 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<translation type="obsolete">Теперь у вас есть кнопка &quot;Охрана&quot;.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3814"/>
+ <location filename="../../src/courtroom.cpp" line="3839"/>
<source>You opened the settings menu.</source>
- <translation>Вы открыли меню опций.</translation>
+ <translation>Вы открыли меню настроек.</translation>
</message>
<message>
<source>You will now pair up with </source>
@@ -1195,12 +1210,12 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<translation type="obsolete"> (если он выберет вас в ответ).</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3835"/>
+ <location filename="../../src/courtroom.cpp" line="3860"/>
<source>You are no longer paired with anyone.</source>
<translation>Вы больше не стоите рядом ни с кем.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3840"/>
+ <location filename="../../src/courtroom.cpp" line="3865"/>
<source>Are you sure you typed that well? The char ID could not be recognised.</source>
<translation>Убедитесь в правильности введённой информации: персонаж с таким ID не найден.</translation>
</message>
@@ -1209,166 +1224,167 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<translation type="vanished">Вы установили сдвиг персонажа на </translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3861"/>
+ <location filename="../../src/courtroom.cpp" line="3886"/>
<source>Your offset must be between -100% and 100%!</source>
<translation>Сдвиг персонажа должен быть между -100% и 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3866"/>
+ <location filename="../../src/courtroom.cpp" line="3891"/>
<source>That offset does not look like one.</source>
<translation>Неверный сдвиг персонажа.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3879"/>
+ <location filename="../../src/courtroom.cpp" line="3904"/>
<source>You have set your vertical offset to %1%%.</source>
- <translation type="unfinished"></translation>
+ <translation>Сдвиг вашего персонажа по вертикали: %1%%.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3886"/>
+ <location filename="../../src/courtroom.cpp" line="3911"/>
<source>Your vertical offset must be between -100% and 100%!</source>
- <translation type="unfinished"></translation>
+ <translation>Сдвиг персонажа по вертикали должен быть между -100% и 100%!</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3891"/>
+ <location filename="../../src/courtroom.cpp" line="3916"/>
<source>That vertical offset does not look like one.</source>
- <translation type="unfinished"></translation>
+ <translation>Неверный сдвиг персонажа по вертикали.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3897"/>
+ <location filename="../../src/courtroom.cpp" line="3922"/>
<source>You switched your music and area list.</source>
- <translation>Вы переключили списки локаций и музыки.</translation>
+ <translation>Вы переключились между списками локаций и музыки.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3904"/>
+ <location filename="../../src/courtroom.cpp" line="3929"/>
<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="3918"/>
+ <location filename="../../src/courtroom.cpp" line="3943"/>
<source>Your pre-animations interrupt again.</source>
<translation>Персонаж будет говорить только после предварительной анимации.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3921"/>
+ <location filename="../../src/courtroom.cpp" line="3946"/>
<source>Your pre-animations will not interrupt text.</source>
<translation>Предварительные анимации не будут прерывать вывод текста.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3932"/>
+ <location filename="../../src/courtroom.cpp" line="3957"/>
<source>Couldn&apos;t open chatlog.txt to write into.</source>
- <translation>Невозможно открыть `chatlog.txt` для записи.</translation>
+ <translation>Невозможно открыть chatlog.txt для записи.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3945"/>
+ <location filename="../../src/courtroom.cpp" line="3970"/>
<source>The IC chatlog has been saved.</source>
<translation>История игрового чата сохранена.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3958"/>
+ <location filename="../../src/courtroom.cpp" line="3983"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely the case file you&apos;re looking for can&apos;t be found in there.</source>
<translation>Файл с делом не найден. Если найдёте, положите его в папку `base/cases/`, которую мы для вас создали.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="3985"/>
+ <location filename="../../src/courtroom.cpp" line="4010"/>
<source>Too many arguments to load a case! You only need one filename, without extension.</source>
- <translation>Введите имя файла без расширения.</translation>
+ <translation>Не удалось загрузить дело! Введите имя файла без расширения.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4034"/>
- <location filename="../../src/courtroom.cpp" line="4036"/>
+ <location filename="../../src/courtroom.cpp" line="4059"/>
+ <location filename="../../src/courtroom.cpp" line="4061"/>
<location filename="../../src/evidence.cpp" line="765"/>
<location filename="../../src/evidence.cpp" line="767"/>
<source>UNKNOWN</source>
<translation>н/д</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4056"/>
+ <location filename="../../src/courtroom.cpp" line="4081"/>
<source>You don&apos;t have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it&apos;s likely that you somehow deleted it.</source>
- <translation>Папка `base/cases/` отсутствует.</translation>
+ <translation>Папка `base/cases/` отсутствует. Она была создана.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4071"/>
+ <location filename="../../src/courtroom.cpp" line="4096"/>
<source>You need to give a filename to save (extension not needed) and the courtroom status!</source>
<translation>Введите имя файла (без расширения) и укажите статус зала суда.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4081"/>
+ <location filename="../../src/courtroom.cpp" line="4106"/>
<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="4108"/>
+ <location filename="../../src/courtroom.cpp" line="4133"/>
<source>Succesfully saved, edit doc and cmdoc link on the ini!</source>
<translation>Сохранение прошло успешно. Ссылки на документы можно редактировать в ini.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4135"/>
+ <location filename="../../src/courtroom.cpp" line="4160"/>
<source>Master</source>
<translation>Мастер</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4617"/>
+ <location filename="../../src/courtroom.cpp" line="4643"/>
<source>Stop Current Song</source>
- <translation type="unfinished"></translation>
+ <translation>Прервать текущую композицию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4618"/>
+ <location filename="../../src/courtroom.cpp" line="4644"/>
<source>Play Random Song</source>
<translation>Включить случайную композицию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4620"/>
+ <location filename="../../src/courtroom.cpp" line="4646"/>
<source>Expand All Categories</source>
<translation>Развернуть все категории</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4622"/>
+ <location filename="../../src/courtroom.cpp" line="4648"/>
<source>Collapse All Categories</source>
<translation>Свернуть все категории</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4626"/>
+ <location filename="../../src/courtroom.cpp" line="4652"/>
<source>Fade Out Previous</source>
<translation>Постепенное затухание предыдущей композиции</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4632"/>
+ <location filename="../../src/courtroom.cpp" line="4658"/>
<source>Fade In</source>
<translation>Постепенное нарастание</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4638"/>
+ <location filename="../../src/courtroom.cpp" line="4664"/>
<source>Synchronize</source>
<translation>Синхронизировать</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="4970"/>
+ <location filename="../../src/courtroom.cpp" line="4997"/>
<source>Default</source>
<translation>по умолчанию</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="5153"/>
+ <location filename="../../src/courtroom.cpp" line="5180"/>
<source>Reason:</source>
<translation>Причина:</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="5154"/>
+ <location filename="../../src/courtroom.cpp" line="5181"/>
<source>Call Moderator</source>
<translation>Вызов модератора</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="5162"/>
- <location filename="../../src/courtroom.cpp" line="5166"/>
+ <location filename="../../src/courtroom.cpp" line="5189"/>
+ <location filename="../../src/courtroom.cpp" line="5193"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="5162"/>
+ <location filename="../../src/courtroom.cpp" line="5189"/>
<source>You must provide a reason.</source>
<translation>Укажите причину.</translation>
</message>
<message>
- <location filename="../../src/courtroom.cpp" line="5166"/>
+ <location filename="../../src/courtroom.cpp" line="5193"/>
<source>The message is too long.</source>
<translation>Слишком длинное сообщение.</translation>
</message>
@@ -1406,7 +1422,7 @@ char.ini [Options] category, effects = &apos;miscname&apos; where it referes to
<source>Close the evidence display/editing overlay.
You will be prompted if there&apos;s any unsaved changes.</source>
<translation>Закрыть окно редактирования улики.
-Если вы не сохранили изменения, вы увидите диалоговое окно.</translation>
+Если вы не сохранили изменения, то увидите диалоговое окно.</translation>
</message>
<message>
<location filename="../../src/evidence.cpp" line="40"/>
@@ -1529,15 +1545,15 @@ Description:
<name>DemoServer</name>
<message>
<location filename="../../src/demoserver.cpp" line="38"/>
- <location filename="../../src/demoserver.cpp" line="152"/>
+ <location filename="../../src/demoserver.cpp" line="158"/>
<source>Load Demo</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузить демо</translation>
</message>
<message>
<location filename="../../src/demoserver.cpp" line="38"/>
- <location filename="../../src/demoserver.cpp" line="152"/>
+ <location filename="../../src/demoserver.cpp" line="158"/>
<source>Demo Files (*.demo)</source>
- <translation type="unfinished"></translation>
+ <translation>Файлы демо (*.demo)</translation>
</message>
</context>
<context>
@@ -1548,68 +1564,68 @@ Description:
<translation>Attorney Online 2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="35"/>
+ <location filename="../../src/lobby.cpp" line="36"/>
<source>Search</source>
<translation>Поиск</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="43"/>
+ <location filename="../../src/lobby.cpp" line="44"/>
<source>Name</source>
<translation>Никнейм</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="98"/>
+ <location filename="../../src/lobby.cpp" line="99"/>
<source>It doesn&apos;t look like your client is set up correctly.
Did you download all resources correctly from tiny.cc/getao, including the large &apos;base&apos; folder?</source>
<translation>Кажется, ваш клиент неправильно настроен.
-Вы точно скачали все ресурсы отсюда tiny.cc/getao, включая огромную папку `base`?</translation>
+Вы точно скачали все ресурсы с tiny.cc/getao, включая огромную папку `base`?</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="127"/>
+ <location filename="../../src/lobby.cpp" line="128"/>
<source>Version: %1</source>
<translation>Версия: %1</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="133"/>
+ <location filename="../../src/lobby.cpp" line="134"/>
<source>Settings</source>
- <translation>Опции</translation>
+ <translation>Настройки</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="136"/>
+ <location filename="../../src/lobby.cpp" line="137"/>
<source>Allows you to change various aspects of the client.</source>
- <translation>Изменить параметры работы программы.</translation>
+ <translation>Изменить параметры работы приложения.</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="180"/>
+ <location filename="../../src/lobby.cpp" line="181"/>
<source>Loading</source>
<translation>Загрузка</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="184"/>
+ <location filename="../../src/lobby.cpp" line="185"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="366"/>
- <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;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!&lt;p&gt;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.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
- <translation type="unfinished"></translation>
+ <location filename="../../src/lobby.cpp" line="367"/>
+ <source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator.&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball, in1tiate&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, windrammer, skyedeving&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Translations:&lt;/b&gt;&lt;br&gt;k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox (Русский), windrammer (Español, Português)&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;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!&lt;p&gt;The Attorney Online networked visual novel project is copyright (c) 2016-2021 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.&lt;p&gt;Running on Qt version %2 with the BASS audio engine.&lt;br&gt;APNG plugin loaded: %3&lt;p&gt;Built on %4</source>
+ <translation>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Симулятор драмы в зале суда.&lt;p&gt;&lt;b&gt;Исходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Основная разработка:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball, in1tiate&lt;p&gt;&lt;b&gt;Разработка клиента:&lt;/b&gt;&lt;br&gt;Cents02, windrammer, skyedeving&lt;p&gt;&lt;b&gt;Тестирование:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Translations:&lt;/b&gt;&lt;br&gt;k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox (Русский), windrammer (Español, Português)&lt;p&gt;&lt;b&gt;Благодарности:&lt;/b&gt;&lt;br&gt;CrazyJC (директор по выпуску версии 2.8) и MaximumVolty (продвижение версии 2.8); Remy, Hibiki, court-records.net (спрайты); Qubrick (webAO); Rue (вебсайт); Draxirch (дизайн интерфейса); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); держатели серверов, ГМ, ПД, создатели контента, и всё сообщество AO2!&lt;p&gt;Проект сетевой визуальной новеллы Attorney Online (c) 2016-2021 разработчики Attorney Online. Применяется лицензия на открытое ПО. Все прочие файлы являются собственностью их владельцев.&lt;p&gt;Работает на Qt версии %2 с аудио-движком BASS.&lt;br&gt;Плагин APNG загружен: %3&lt;p&gt;Сборка от %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="398"/>
+ <location filename="../../src/lobby.cpp" line="402"/>
<source>Yes</source>
- <translation type="unfinished"></translation>
+ <translation>Да</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="398"/>
+ <location filename="../../src/lobby.cpp" line="402"/>
<source>No</source>
- <translation type="unfinished"></translation>
+ <translation>Нет</translation>
</message>
<message>
<source>&lt;h2&gt;Attorney Online %1&lt;/h2&gt;The courtroom drama simulator&lt;p&gt;&lt;b&gt;Source code:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Major development:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Client development:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;QA testing:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Special thanks:&lt;/b&gt;&lt;br&gt;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!&lt;p&gt;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.&lt;p&gt;Running on Qt version %2 with the %3 audio engine.&lt;p&gt;Built on %4</source>
<translation type="vanished">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Симулятор драмы в зале суда&lt;p&gt;&lt;b&gt;Исходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Основная разработка:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball&lt;p&gt;&lt;b&gt;Разработка клиента:&lt;/b&gt;&lt;br&gt;Cents02, in1tiate, raidensnake, windrammer&lt;p&gt;&lt;b&gt;Тестирование:&lt;/b&gt;&lt;br&gt;CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso&lt;p&gt;&lt;b&gt;Благодарности:&lt;/b&gt;&lt;br&gt;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!&lt;p&gt;Проект сетевой визуальной новеллы Attorney Online (c) 2016-2020 разработчики Attorney Online. Применяется лицензия на открытое ПО. Все прочие файлы являются собственностью их владельцев.&lt;p&gt;Работает на Qt версии %2 с аудио-движком %3.&lt;p&gt;Сборка от %4</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="400"/>
+ <location filename="../../src/lobby.cpp" line="404"/>
<source>About</source>
<translation>О программе</translation>
</message>
@@ -1618,13 +1634,13 @@ Did you download all resources correctly from tiny.cc/getao, including the large
<translation type="obsolete">&lt;h2&gt;Attorney Online %1&lt;/h2&gt;Симулятор судебной драмы&lt;p&gt;&lt;b&gt;Исходный код:&lt;/b&gt; &lt;a href=&apos;https://github.com/AttorneyOnline/AO2-Client&apos;&gt;https://github.com/AttorneyOnline/AO2-Client&lt;/a&gt;&lt;p&gt;&lt;b&gt;Основной разработкой занимались:&lt;/b&gt;&lt;br&gt;OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter&lt;p&gt;&lt;b&gt;Особенная благодарность:&lt;/b&gt;&lt;br&gt;Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="551"/>
+ <location filename="../../src/lobby.cpp" line="555"/>
<source>Online: %1/%2</source>
<translation>Онлайн: %1/%2</translation>
</message>
<message>
- <location filename="../../src/lobby.cpp" line="146"/>
- <location filename="../../src/lobby.cpp" line="438"/>
+ <location filename="../../src/lobby.cpp" line="147"/>
+ <location filename="../../src/lobby.cpp" line="442"/>
<source>Offline</source>
<translation>Не в сети</translation>
</message>
diff --git a/src/aolayer.cpp b/src/aolayer.cpp
index efa0e447..f037b219 100644
--- a/src/aolayer.cpp
+++ b/src/aolayer.cpp
@@ -28,10 +28,6 @@ BackgroundLayer::BackgroundLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
}
-ForegroundLayer::ForegroundLayer(QWidget *p_parent, AOApplication *p_ao_app)
- : AOLayer(p_parent, p_ao_app)
-{
-}
CharLayer::CharLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
@@ -40,7 +36,7 @@ EffectLayer::EffectLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
}
-InterjectionLayer::InterjectionLayer(QWidget *p_parent, AOApplication *p_ao_app)
+SplashLayer::SplashLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
}
@@ -48,7 +44,6 @@ InterfaceLayer::InterfaceLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
}
-
StickerLayer::StickerLayer(QWidget *p_parent, AOApplication *p_ao_app)
: AOLayer(p_parent, p_ao_app)
{
@@ -135,27 +130,6 @@ void BackgroundLayer::load_image(QString p_filename)
start_playback(ao_app->get_image_suffix(ao_app->get_background_path(p_filename)));
}
-void ForegroundLayer::load_image(QString p_filename, QString p_charname)
-{
- play_once = false;
- cull_image = false;
- miscname = ao_app->get_char_shouts(p_charname);
- qDebug() << "[ForegroundLayer] FG loaded: " << p_filename;
- QList<QString> pathlist = {
- ao_app->get_image_suffix(ao_app->get_character_path(
- p_charname, p_filename)), // first check the character folder
- ao_app->get_image_suffix(ao_app->get_theme_path(
- "misc/" + miscname + "/" +
- p_filename)), // then check our theme's misc directory
- ao_app->get_image_suffix(ao_app->get_misc_path(
- miscname, p_filename)), // then check our global misc folder
- ao_app->get_image_suffix(
- ao_app->get_theme_path(p_filename)), // then check the user's theme
- ao_app->get_image_suffix(ao_app->get_default_theme_path(
- p_filename))}; // and finally check the default theme
- start_playback(find_image(pathlist));
-}
-
void CharLayer::load_image(QString p_filename, QString p_charname,
int p_duration, bool p_is_preanim)
{
@@ -219,12 +193,9 @@ void CharLayer::load_image(QString p_filename, QString p_charname,
this->start_playback(find_image(pathlist));
}
-void InterjectionLayer::load_image(QString p_filename, QString p_charname,
+void SplashLayer::load_image(QString p_filename, QString p_charname,
QString p_miscname)
{
- continuous = false;
- force_continuous = true;
- play_once = true;
transform_mode = ao_app->get_misc_scaling(p_miscname);
QList<QString> pathlist = {
ao_app->get_image_suffix(ao_app->get_character_path(
@@ -269,7 +240,7 @@ void EffectLayer::load_image(QString p_filename, bool p_looping)
void InterfaceLayer::load_image(QString p_filename, QString p_miscname)
{
- transform_mode = ao_app->get_misc_scaling(p_miscname);
+ stretch = true;
QList<QString> pathlist = {
ao_app->get_image_suffix(ao_app->get_theme_path(
"misc/" + p_miscname + "/" +
@@ -371,12 +342,9 @@ void AOLayer::start_playback(QString p_image)
int l_delay = m_reader.nextImageDelay();
movie_frames.append(l_pixmap);
movie_delays.append(l_delay);
- // qDebug() << "appending delay of " << l_delay;
}
}
last_path = p_image;
- // qDebug() << "CONT: " << continuous << " MAX: " << max_frames
- // << " LAST MAX: " << last_max_frames << " FRAME: " << frame;
QPixmap f_pixmap = this->get_pixmap(m_reader.read());
int f_delay = m_reader.nextImageDelay();
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 0e2c2805..e8b58a49 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -44,7 +44,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_viewport = new QWidget(this);
ui_vp_background = new BackgroundLayer(ui_viewport, ao_app);
- ui_vp_speedlines = new ForegroundLayer(ui_viewport, ao_app);
+ ui_vp_speedlines = new SplashLayer(ui_viewport, ao_app);
ui_vp_player_char = new CharLayer(ui_viewport, ao_app);
ui_vp_sideplayer_char = new CharLayer(ui_viewport, ao_app);
ui_vp_sideplayer_char->hide();
@@ -67,13 +67,18 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui_vp_message->setReadOnly(true);
- ui_vp_testimony = new InterfaceLayer(this, ao_app);
+ ui_vp_testimony = new SplashLayer(this, ao_app);
ui_vp_testimony->set_play_once(false);
ui_vp_testimony->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_vp_wtce = new InterjectionLayer(this, ao_app);
+ ui_vp_wtce = new SplashLayer(this, ao_app);
ui_vp_wtce->set_play_once(true);
+ ui_vp_wtce->continuous = false;
+ ui_vp_wtce->force_continuous = true;
ui_vp_wtce->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_vp_objection = new InterjectionLayer(this, ao_app);
+ ui_vp_objection = new SplashLayer(this, ao_app);
+ ui_vp_objection->set_play_once(true);
+ ui_vp_objection->continuous = false;
+ ui_vp_objection->force_continuous = true;
ui_vp_objection->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_ic_chatlog = new QTextEdit(this);
@@ -115,6 +120,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_music_display = new InterfaceLayer(this, ao_app);
ui_music_display->set_play_once(false);
+ ui_music_display->transform_mode = Qt::SmoothTransformation;
ui_music_display->setAttribute(Qt::WA_TransparentForMouseEvents);
ui_music_name = new ScrollText(ui_music_display);
@@ -165,6 +171,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
initialize_emotes();
ui_pos_dropdown = new QComboBox(this);
+ ui_pos_remove = new AOButton(this, ao_app);
ui_iniswap_dropdown = new QComboBox(this);
ui_iniswap_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
@@ -301,6 +308,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_pos_dropdown, SIGNAL(currentIndexChanged(int)), this,
SLOT(on_pos_dropdown_changed(int)));
+ connect(ui_pos_remove, SIGNAL(clicked()), this, SLOT(on_pos_remove_clicked()));
connect(ui_iniswap_dropdown, SIGNAL(currentIndexChanged(int)), this,
SLOT(on_iniswap_dropdown_changed(int)));
@@ -726,6 +734,15 @@ void Courtroom::set_widgets()
ui_pos_dropdown->setToolTip(
tr("Set your character's supplementary background."));
+ set_size_and_pos(ui_pos_remove, "pos_remove");
+ ui_pos_remove->setText("X");
+ ui_pos_remove->set_image("evidencex");
+ ui_pos_remove->setToolTip(tr("Reset your character's supplementary background to its default."));
+ if (current_side == "")
+ ui_pos_remove->hide();
+ else
+ ui_pos_remove->show();
+
set_size_and_pos(ui_iniswap_dropdown, "iniswap_dropdown");
ui_iniswap_dropdown->setEditable(true);
ui_iniswap_dropdown->setInsertPolicy(QComboBox::InsertAtBottom);
@@ -1285,26 +1302,50 @@ void Courtroom::set_background(QString p_background, bool display)
}
}
-void Courtroom::set_side(QString p_side)
+void Courtroom::set_side(QString p_side, bool block_signals)
{
+ QString f_side;
if (p_side == "")
- current_side = ao_app->get_char_side(current_char);
+ f_side = ao_app->get_char_side(current_char);
else
- current_side = p_side;
+ f_side = p_side;
+
+ if (f_side == "jud") {
+ ui_witness_testimony->show();
+ ui_cross_examination->show();
+ ui_not_guilty->show();
+ ui_guilty->show();
+ ui_defense_minus->show();
+ ui_defense_plus->show();
+ ui_prosecution_minus->show();
+ ui_prosecution_plus->show();
+ }
+ else {
+ ui_witness_testimony->hide();
+ ui_cross_examination->hide();
+ ui_guilty->hide();
+ ui_not_guilty->hide();
+ ui_defense_minus->hide();
+ ui_defense_plus->hide();
+ ui_prosecution_minus->hide();
+ ui_prosecution_plus->hide();
+ }
for (int i = 0; i < ui_pos_dropdown->count(); ++i) {
QString pos = ui_pos_dropdown->itemText(i);
- if (pos == current_side) {
+ if (pos == f_side) {
// Block the signals to prevent setCurrentIndex from triggering a pos
// change
- ui_pos_dropdown->blockSignals(true);
+ if (block_signals)
+ ui_pos_dropdown->blockSignals(true);
// Set the index on dropdown ui element to let you know what pos you're on
// right now
ui_pos_dropdown->setCurrentIndex(i);
// Unblock the signals so the element can be used for setting pos again
- ui_pos_dropdown->blockSignals(false);
+ if (block_signals)
+ ui_pos_dropdown->blockSignals(false);
// alright we dun, jobs done here boyos
break;
@@ -1321,6 +1362,7 @@ void Courtroom::set_pos_dropdown(QStringList pos_dropdowns)
ui_pos_dropdown->addItems(pos_dropdown_list);
// Unblock the signals so the element can be used for setting pos again
ui_pos_dropdown->blockSignals(false);
+ set_side(current_side);
}
void Courtroom::update_character(int p_cid)
@@ -1344,7 +1386,7 @@ void Courtroom::update_character(int p_cid)
}
current_char = f_char;
- current_side = ao_app->get_char_side(current_char);
+ set_side(current_side);
set_text_color_dropdown();
@@ -1366,27 +1408,6 @@ void Courtroom::update_character(int p_cid)
if (newchar) // Avoid infinite loop of death and suffering
set_iniswap_dropdown();
- if (current_side == "jud") {
- ui_witness_testimony->show();
- ui_cross_examination->show();
- ui_not_guilty->show();
- ui_guilty->show();
- ui_defense_minus->show();
- ui_defense_plus->show();
- ui_prosecution_minus->show();
- ui_prosecution_plus->show();
- }
- else {
- ui_witness_testimony->hide();
- ui_cross_examination->hide();
- ui_guilty->hide();
- ui_not_guilty->hide();
- ui_defense_minus->hide();
- ui_defense_plus->hide();
- ui_prosecution_minus->hide();
- ui_prosecution_plus->hide();
- }
-
ui_custom_objection->hide();
if (ao_app->custom_objection_enabled) // if setting is enabled
{
@@ -1693,9 +1714,12 @@ void Courtroom::on_chat_return_pressed()
// immediate_preanim#%
QStringList packet_contents;
+ QString f_side;
if (current_side == "")
- current_side = ao_app->get_char_side(current_char);
+ f_side = ao_app->get_char_side(current_char);
+ else
+ f_side = current_side;
QString f_desk_mod = "chat";
@@ -1722,7 +1746,7 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(ui_ic_chat_message->text());
- packet_contents.append(current_side);
+ packet_contents.append(f_side);
packet_contents.append(get_char_sfx());
@@ -1980,6 +2004,7 @@ void Courtroom::chatmessage_dequeue()
QString f_char = m_chatmessage[CHAR_NAME];
f_custom_theme = ao_app->get_chat(f_char);
}
+ ui_vp_chat_arrow->transform_mode = ao_app->get_misc_scaling(f_custom_theme);
ui_vp_chat_arrow->load_image("chat_arrow", f_custom_theme);
// Nothing to parse in the queue
@@ -2518,7 +2543,7 @@ void Courtroom::do_effect(QString fx_name, QString fx_sound, QString p_char,
// Static effects will linger.
ui_vp_effect->set_static_duration(0);
ui_vp_effect->set_max_duration(0);
- ui_vp_effect->load_image(effect, false);
+ ui_vp_effect->load_image(effect, true);
}
void Courtroom::play_char_sfx(QString sfx_name)
@@ -2574,18 +2599,16 @@ void Courtroom::initialize_chatbox()
// This should probably be called only if any change from the last chat
// arrow was actually detected.
- if (current_misc != last_misc) {
- pos_size_type design_ini_result = ao_app->get_element_dimensions(
- "chat_arrow", "courtroom_design.ini", customchar);
- if (design_ini_result.width < 0 || design_ini_result.height < 0) {
- qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
- ui_vp_chat_arrow->hide();
- }
- else {
- ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
- ui_vp_chat_arrow->combo_resize(design_ini_result.width,
- design_ini_result.height);
- }
+ pos_size_type design_ini_result = ao_app->get_element_dimensions(
+ "chat_arrow", "courtroom_design.ini", customchar);
+ if (design_ini_result.width < 0 || design_ini_result.height < 0) {
+ qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
+ ui_vp_chat_arrow->hide();
+ }
+ else {
+ ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
+ ui_vp_chat_arrow->combo_resize(design_ini_result.width,
+ design_ini_result.height);
}
pos_size_type default_width = ao_app->get_element_dimensions(
@@ -2701,7 +2724,7 @@ void Courtroom::handle_ic_speaking()
filename = "prosecution_speedlines";
else
filename = "defense_speedlines";
- ui_vp_speedlines->load_image(filename, m_chatmessage[CHAR_NAME]);
+ ui_vp_speedlines->load_image(filename, m_chatmessage[CHAR_NAME], ao_app->get_char_shouts(m_chatmessage[CHAR_NAME]));
}
// Check if this is a talking color (white text, etc.)
@@ -3290,12 +3313,14 @@ void Courtroom::chat_tick()
f_char = m_chatmessage[CHAR_NAME];
f_custom_theme = ao_app->get_chat(f_char);
}
- ui_vp_chat_arrow->load_image("chat_arrow",f_custom_theme); // Chat stopped being processed, indicate that.
+ ui_vp_chat_arrow->transform_mode = ao_app->get_misc_scaling(f_custom_theme);
+ ui_vp_chat_arrow->load_image("chat_arrow", f_custom_theme); // Chat stopped being processed, indicate that.
additive_previous =
additive_previous +
filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
QString f_message_filtered = filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
for (int c = 0; c < max_colors; ++c) {
+ additive_previous = additive_previous.replace("$c" + QString::number(c), char_color_rgb_list.at(c).name(QColor::HexRgb));
f_message_filtered = f_message_filtered.replace("$c" + QString::number(c), char_color_rgb_list.at(c).name(QColor::HexRgb));
}
additive_previous = additive_previous + f_message_filtered;
@@ -3430,6 +3455,7 @@ void Courtroom::chat_tick()
// Do the colors, gradual showing, etc. in here
QString f_message_filtered = filter_ic_text(f_message, true, tick_pos, m_chatmessage[TEXT_COLOR].toInt());
for (int c = 0; c < max_colors; ++c) {
+ additive_previous = additive_previous.replace("$c" + QString::number(c), char_color_rgb_list.at(c).name(QColor::HexRgb));
f_message_filtered = f_message_filtered.replace("$c" + QString::number(c), char_color_rgb_list.at(c).name(QColor::HexRgb));
}
ui_vp_message->setHtml(additive_previous + f_message_filtered);
@@ -3659,6 +3685,11 @@ void Courtroom::handle_song(QStringList *p_contents)
QString f_song = f_contents.at(0);
QString f_song_clear = f_song.left(f_song.lastIndexOf("."));
+ if (f_song.startsWith("http")) {
+ QByteArray f_song_bytearray = f_song.toUtf8();
+ QString f_song_decoded = QUrl::fromPercentEncoding(f_song_bytearray);
+ f_song_clear = f_song_decoded.left(f_song_decoded.lastIndexOf("."));
+ }
f_song_clear = f_song_clear.right(f_song_clear.length() -
(f_song_clear.lastIndexOf("/") + 1));
int n_char = f_contents.at(1).toInt();
@@ -3691,8 +3722,10 @@ void Courtroom::handle_song(QStringList *p_contents)
if (f_song == "~stop.mp3")
ui_music_name->setText(tr("None"));
else if (channel == 0) {
- if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))))
+ if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) & !f_song.startsWith("http"))
ui_music_name->setText(f_song_clear);
+ else if (f_song.startsWith("http"))
+ ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
else
ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
}
@@ -3733,8 +3766,10 @@ void Courtroom::handle_song(QStringList *p_contents)
if (f_song == "~stop.mp3")
ui_music_name->setText(tr("None"));
else if (channel == 0) {
- if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))))
+ if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) & !f_song.startsWith("http"))
ui_music_name->setText(f_song_clear);
+ else if (f_song.startsWith("http"))
+ ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
else
ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
}
@@ -3745,6 +3780,7 @@ void Courtroom::handle_song(QStringList *p_contents)
void Courtroom::handle_wtce(QString p_wtce, int variant)
{
QString sfx_file = "courtroom_sounds.ini";
+ QString bg_misc = ao_app->read_design_ini("misc", ao_app->get_background_path("design.ini"));
QString sfx_name;
QString filename;
ui_vp_wtce->set_static_duration(wtce_static_time);
@@ -3753,7 +3789,7 @@ void Courtroom::handle_wtce(QString p_wtce, int variant)
if (p_wtce == "testimony1") {
sfx_name = "witness_testimony";
filename = "witnesstestimony";
- ui_vp_testimony->load_image("testimony", "");
+ ui_vp_testimony->load_image("testimony", "", bg_misc);
}
// cross examination
else if (p_wtce == "testimony2") {
@@ -3775,7 +3811,6 @@ void Courtroom::handle_wtce(QString p_wtce, int variant)
ui_vp_testimony->stop();
}
}
- QString bg_misc = ao_app->read_design_ini("misc", ao_app->get_background_path("design.ini"));
sfx_player->play(ao_app->get_sfx(sfx_name, bg_misc));
ui_vp_wtce->load_image(filename, "", bg_misc);
ui_vp_wtce->set_play_once(true);
@@ -4260,12 +4295,36 @@ void Courtroom::on_pos_dropdown_changed(int p_index)
if (f_pos == "jud")
toggle_judge_buttons(true);
+
+ ui_pos_remove->show();
+
+ current_side = f_pos;
// YEAH SENDING LIKE 20 PACKETS IF THE USER SCROLLS THROUGH, GREAT IDEA
// how about this instead
set_side(f_pos);
}
+void Courtroom::on_pos_remove_clicked()
+{
+ QString default_side = ao_app->get_char_side(current_char);
+
+ for (int i = 0; i < ui_pos_dropdown->count(); ++i) {
+ QString pos = ui_pos_dropdown->itemText(i);
+ if (pos == default_side) {
+ ui_pos_dropdown->setCurrentIndex(i);
+ break;
+ }
+ }
+ int wit_index = ui_pos_dropdown->findText("wit");
+ if ((ui_pos_dropdown->currentText() != default_side) & (wit_index != -1)) //i.e. this bg doesn't have our pos
+ ui_pos_dropdown->setCurrentIndex(wit_index); // fall back to "wit"
+ else if (ui_pos_dropdown->currentText() != default_side) // we don't have "wit" either?
+ ui_pos_dropdown->setCurrentIndex(0); // as a last resort, choose the first item in the dropdown
+ current_side = "";
+ ui_pos_remove->hide();
+}
+
void Courtroom::set_iniswap_dropdown()
{
ui_iniswap_dropdown->blockSignals(true);
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 5a093e3c..53f6deb1 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -475,7 +475,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (courtroom_constructed) // We were sent a "set position" packet
{
- w_courtroom->set_side(f_contents.at(0));
+ w_courtroom->set_side(f_contents.at(0), false);
append_to_demofile(p_packet->to_string(true));
}
}