diff options
| m--------- | base/themes | 0 | ||||
| -rw-r--r-- | include/aolayer.h | 46 | ||||
| -rw-r--r-- | include/courtroom.h | 12 | ||||
| -rw-r--r-- | resource/translations/ao_ru.qm | bin | 39989 -> 52533 bytes | |||
| -rw-r--r-- | resource/translations/ao_ru.ts | 722 | ||||
| -rw-r--r-- | src/aolayer.cpp | 38 | ||||
| -rw-r--r-- | src/courtroom.cpp | 165 | ||||
| -rw-r--r-- | src/packet_distribution.cpp | 2 |
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 Binary files differindex 6847fc96..5c10187b 100644 --- a/resource/translations/ao_ru.qm +++ b/resource/translations/ao_ru.qm 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 'name: message'.</source> - <translation type="unfinished"></translation> + <translation>Показывать новое сообщение на следующей строке после имени. +Если опция выключена, сообщения будут отображаться в следующем формате: "имя: сообщение".</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 'queue'. Set to 0 to disable this behavior.</source> - <translation type="unfinished"></translation> + <translation>Минимальное время (в миллисекундах), которое сообщение игрового чата должно отображаться перед показом следующего, образуя очередь. +Поставьте "0" для отключения очереди.</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>Показывать сообщения в истории игрового чата в реальном времени, +а в самом игровом чате - в соответствии с настройками очереди ("Задержка текста").</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>Если "Задержка текста" больше нуля, включение данной опции позволяет отобразить возглас, минуя сообщения в очереди.</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 'Custom shownames' tickbox, which in turn determines whether the client should display custom in-character names.</source> - <translation>Задать значение по умолчанию для настройки отображения пользовательских имён, -которая определяет возможность показа в игровом чате имён персонажей, установленных самими игроками.</translation> + <translation>Значение по умолчанию для переключателя "Пользовательские имена" в основном окне приложения.</translation> </message> <message> - <location filename="../../src/aooptionsdialog.cpp" line="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'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><html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html></source> - <translation><html><head/><body>Введите на отдельных строках свои позывные. Если кто-то в чате напишет их, вы услышите звуковой сигнал. Регистр символов не учитывается.<br>Не оставляйте в конце строк пробелы, иначе вы будете получать оповещения о каждом пробеле в чате.</body></html></translation> + <translation><html><head/><body>Введите в поле выше свои позывные. Если кто-то в чате напишет их, вы услышите звуковой сигнал. Регистр символов не учитывается.<br>Каждый позывной должен быть на отдельной строке. Не оставляйте в конце строк пробелы, иначе вы будете получать оповещения о каждом пробеле в чате.</body></html></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'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's default volume. Interjections and actual sound effects count as 'SFX'.</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 "once per every X symbols", where X is the blip rate.</source> - <translation>Проигрывать сигнал "каждые Х символов", где Х - частота.</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 'being said'.</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 'Objection!'.</source> - <translation>Останавливать музыку, когда кто-нибудь кричит "Objection!".</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'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 "%1" was loaded!</source> <translation>Ваше дело "%1" было загружено!</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'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'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 'iniswap', or an alternative character folder to refer to from your current character. Edit by typing and pressing Enter, [X] to remove. This saves to your base/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'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'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'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'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'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'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'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/<имя_персонажа>/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 'Preanim'. Leaving it on Default will use the emote-defined sound (if any). Edit by typing and pressing Enter, [X] to remove. This saves to your base/characters/<charname>/soundlist.ini</source> <translation>Выберите звук, который нужно воспроизвести со следующей пред. анимацией. @@ -1098,7 +1113,7 @@ Edit by typing and pressing Enter, [X] to remove. This saves to your base/charac Изменения сохраняются по следующему пути: base/characters/<имя_персонажа>/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 = 'miscname' where it referes to misc/<miscname>/effects.ini to read the effects.</source> @@ -1107,73 +1122,73 @@ char.ini [Options] category, effects = 'miscname' where it referes to в категории [Options] файла char.ini, effects = 'название', что отсылает к файлу misc/<название>/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'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>Теперь у вас есть кнопка "Не беспокоить".</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 = 'miscname' where it referes to <translation type="obsolete">Теперь у вас есть кнопка "Охрана".</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 = 'miscname' 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 = 'miscname' 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'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't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely the case file you're looking for can't be found in there.</source> <translation>Файл с делом не найден. Если найдёте, положите его в папку `base/cases/`, которую мы для вас создали.</translation> </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't have a `base/cases/` folder! It was just made for you, but seeing as it WAS just made for you, it's likely that you somehow deleted it.</source> - <translation>Папка `base/cases/` отсутствует.</translation> + <translation>Папка `base/cases/` отсутствует. Она была создана.</translation> </message> <message> - <location filename="../../src/courtroom.cpp" line="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 = 'miscname' where it referes to <source>Close the evidence display/editing overlay. You will be prompted if there'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't look like your client is set up correctly. Did you download all resources correctly from tiny.cc/getao, including the large 'base' folder?</source> <translation>Кажется, ваш клиент неправильно настроен. -Вы точно скачали все ресурсы отсюда tiny.cc/getao, включая огромную папку `base`?</translation> +Вы точно скачали все ресурсы с 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><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the BASS audio engine.<br>APNG plugin loaded: %3<p>Built on %4</source> - <translation type="unfinished"></translation> + <location filename="../../src/lobby.cpp" line="367"/> + <source><h2>Attorney Online %1</h2>The courtroom drama simulator.<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball, in1tiate<p><b>Client development:</b><br>Cents02, windrammer, skyedeving<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Translations:</b><br>k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox (Русский), windrammer (Español, Português)<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2021 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the BASS audio engine.<br>APNG plugin loaded: %3<p>Built on %4</source> + <translation><h2>Attorney Online %1</h2>Симулятор драмы в зале суда.<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основная разработка:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball, in1tiate<p><b>Разработка клиента:</b><br>Cents02, windrammer, skyedeving<p><b>Тестирование:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Translations:</b><br>k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox (Русский), windrammer (Español, Português)<p><b>Благодарности:</b><br>CrazyJC (директор по выпуску версии 2.8) и MaximumVolty (продвижение версии 2.8); Remy, Hibiki, court-records.net (спрайты); Qubrick (webAO); Rue (вебсайт); Draxirch (дизайн интерфейса); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); держатели серверов, ГМ, ПД, создатели контента, и всё сообщество AO2!<p>Проект сетевой визуальной новеллы Attorney Online (c) 2016-2021 разработчики Attorney Online. Применяется лицензия на открытое ПО. Все прочие файлы являются собственностью их владельцев.<p>Работает на Qt версии %2 с аудио-движком BASS.<br>Плагин APNG загружен: %3<p>Сборка от %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><h2>Attorney Online %1</h2>The courtroom drama simulator<p><b>Source code:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Major development:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Client development:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>QA testing:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Special thanks:</b><br>CrazyJC (2.8 release director) and MaximumVolty (2.8 release promotion); Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); Rue (website); Draxirch (UI design); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); server hosts, game masters, case makers, content creators, and the whole AO2 community!<p>The Attorney Online networked visual novel project is copyright (c) 2016-2020 Attorney Online developers. Open-source licenses apply. All other assets are the property of their respective owners.<p>Running on Qt version %2 with the %3 audio engine.<p>Built on %4</source> <translation type="vanished"><h2>Attorney Online %1</h2>Симулятор драмы в зале суда<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основная разработка:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, Crystalwarrior, Iamgoofball<p><b>Разработка клиента:</b><br>Cents02, in1tiate, raidensnake, windrammer<p><b>Тестирование:</b><br>CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, Veritas, Wiso<p><b>Благодарности:</b><br>CrazyJC (директор по выпуску версии 2.8) и MaximumVolty (продвижение версии 2.8); Remy, Hibiki, court-records.net (спрайты); Qubrick (webAO); Rue (вебсайт); Draxirch (дизайн интерфейса); Lewdton and Argoneus (tsuserver); Fiercy, Noevain, Cronnicossy, и FanatSors (AO1); держатели серверов, ГМ, ПД, создатели контента, и всё сообщество AO2!<p>Проект сетевой визуальной новеллы Attorney Online (c) 2016-2020 разработчики Attorney Online. Применяется лицензия на открытое ПО. Все прочие файлы являются собственностью их владельцев.<p>Работает на Qt версии %2 с аудио-движком %3.<p>Сборка от %4</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="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"><h2>Attorney Online %1</h2>Симулятор судебной драмы<p><b>Исходный код:</b> <a href='https://github.com/AttorneyOnline/AO2-Client'>https://github.com/AttorneyOnline/AO2-Client</a><p><b>Основной разработкой занимались:</b><br>OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter<p><b>Особенная благодарность:</b><br>Remy, Iamgoofball, Hibiki, Qubrick (webAO), Ruekasu (дизайн интерфейса), Draxirch (дизайн интерфейса), Unishred, Argoneus (tsuserver), Fiercy, Noevain, Cronnicossy</translation> </message> <message> - <location filename="../../src/lobby.cpp" line="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)); } } |
