Наборы улучшений Train Simulator
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
gBrakeState берёт значения движкового TrainBrakeControl и может быть от 0 до 1 с десятыми, сотыми и тысячными долями. Не туда копаем просто. Здесь в чём-то другом соль. Или я код не в том месте пишу, либо чего-то там не хватает.
gBrakeState берёт значения движкового TrainBrakeControl и может быть от 0 до 1 с десятыми, сотыми и тысячными долями. Не туда копаем просто. Здесь в чём-то другом соль. Или я код не в том месте пишу, либо чего-то там не хватает.
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Вот ещё один вариант блокировки, принципиальное различие заключается в подмене значения переменной gBrakeState:
Хотя, опять таки, сразу после того, как педаль DSD была нажата, в реальный контрол будет мгновенно передано положение рукояти, независимо от того, где она находится. В принципе, здесь также можно применить двойное блокирование, тогда движок будет стабильно получать данные о положении виртуального контрола, в момент срабатывания DSD движок будет "думать", что рукоять в положении "экстренный тормоз", хотя это будет не так; а после того, как педаль DSD будет нажата и рукоять переведена туда, куда надо, в движок снова пойдут реальные данные о положении виртуального контрола. В этом алгоритме для движка не будет резкого изменения положения тормозов, когда связь контролов восстанавливается, а ручка в случайной позиции.
Вот ещё один вариант блокировки, принципиальное различие заключается в подмене значения переменной gBrakeState:
Код: Выделить всё
function Initialise ()
gBrakeState = 0 -- эта штука служит связующим звеном между движковым и виртуальным тормозом.
gBrakeLock = false -- данная переменная служит проверочным звеном (по умолчанию выключена)
end
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then
if (gBrakeLock == false) then --Если ручка разблокирована,
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) --мы считываем её значение
else --если же блок не снят,
gBrakeState = 1 --мы подставляем значение, независимое от положения ручки
end
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState ) -- разрешаем передачу состояния ручки реальному контролу
end
...
if gDSDStartCount > DSDDELAY + 5 and not isDSDTriggered and not isSafetyIsolated then
isDSDTriggered = true
Call( "*:SetControlValue", "TrainBrakeControl", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
gBrakeLock = true -- видим, что значение приобрело TRUE, а условие на синхронизацию было FALSE. То есть так мы рассинхрон сделали и теперь ручка тормоза двигается, но сам движковый тормоз в экстренном и заблокирован.
end
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
немного не так. gBrakeState задаёт положения как раз ручки тормоза, так что поставив её на 1 мы не добьёмся разблокировки управления.
во второй части кода есть условие
По логике вещей я так понимаю, что дальше нужно писать условие проверки, что isDSDTriggered == true and gBrakeLock == true тогда
если активна пищалка тогда
если получить значение педали DSD == 1 тогда
если получить значение виртуального тормоза == 1 тогда
gBrakeLock = false
isDSDTriggered = false
Это должно по идее вернуть синхронизацию, когда выполнено условие отключения пищалки, затем тормоз переведён в "экстренное" и на этом моменте, если потянуть ручку назад, то мы свяжемся с TrainBrakeControl и сможем снова контроллировать параметр. Но этого почему-то не происходит. Вот оно как блокируется разово, так и всё
немного не так. gBrakeState задаёт положения как раз ручки тормоза, так что поставив её на 1 мы не добьёмся разблокировки управления.
во второй части кода есть условие
Код: Выделить всё
если начало отсчёта таймера больше задержки в 5 секунд и DSD ещё не сработала и система в целом не изолирована, тогда
isDSDTriggered = true -- DSD срабатывает и ниже применяет значения для движковых функций
Call( "*:SetControlValue", "TrainBrakeControl", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
gBrakeLock = true -- блокирует тормоз из условия выше в первой части скрипта.
если активна пищалка тогда
если получить значение педали DSD == 1 тогда
если получить значение виртуального тормоза == 1 тогда
gBrakeLock = false
isDSDTriggered = false
Это должно по идее вернуть синхронизацию, когда выполнено условие отключения пищалки, затем тормоз переведён в "экстренное" и на этом моменте, если потянуть ручку назад, то мы свяжемся с TrainBrakeControl и сможем снова контроллировать параметр. Но этого почему-то не происходит. Вот оно как блокируется разово, так и всё
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Вот тот вариант, а котором я пишу, с учетом Вашей поправки:
Суть алгоритма: данные на движковый тормоз передаются постоянно, т.е. с точки зрения движка с момента срабатывания DSD ручка тормоза неподвижна и стабильно находится в положении "экстренный тормоз". Мы можем её двигать, но это ничего не даст, даже если мы поставим её в положение 1, т.е. блокировка будет, хотя движок этого даже не заметит . После нажатия педали DSD ручка все равно будет "отсоединена" от реального тормоза, зато мы получим возможность снять второй блок, установив её в положение 1. Когда ручка будет поставлена в положение 1, движок начнет получать данные уже от нее, хотя даже не "заметит" этого - ведь он получит 1, и до этого получал 1. Значит, движок будет "уверен", что он ни на секунду не терял контроль над положением ручки. После этого смена положения ручки будет передаваться без резкого скачка. Вернее, будет 1 скачок - в момент срабатывания DSD, но ведь это предусмотрено, а других не будет.
--- добавлено позже в 09 авг 2015, 14:20 ---
Все же мне кажется, что основной причиной является восстановление связи при различных значениях виртуального и реального контрола. Ведь, насколько я понимаю, на реальном тормозе завязана анимация тормозных механизмов, звуки, и вот - он стоит на 1, а мы восстанавливаем связь, и он получает новое значение, допустим, 0,4. Разве это не стресс для движка? Мой алгоритм позволяет этого избежать, попробуйте, пожалуйста, кто знает, вдруг поможет? Хуже точно не будет . Скорей всего, в моем коде есть ошибки синтаксиса, но сам алгоритм однозначно должен быть рабочий.
Вот тот вариант, а котором я пишу, с учетом Вашей поправки:
Код: Выделить всё
function Initialise ()
gBrakeState = 0 -- эта штука служит связующим звеном между движковым и виртуальным тормозом.
gBrakeLock = false -- данная переменная служит первым блоком (пока пищит DSD (по умолчанию выключена)
gBrakeLock_2 = false-- данная переменная служит вторым блоком (пока есть рассинхрон)(по умолчанию выключена)
gBrakeState_2 = 0 -- буферная переменная;
end
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) --Считываем значение виртуального контрола
gBrakeState_2 = gBrakeState --копируем это значение в буфер
if (gBrakeLock == true) or (gBrakeLock_2 == true) then --если стоит хотя бы 1 блок
gBrakeState_2 = 1 --мы подставляем значение, независимое
--от положения ручки
if (gBrakeLock == false) then --и проверяем, какой именно блок установлен
--Выполнение условия означает, что педаль DSD нажата
if (gBrakeState == TrainBrakeControl) then --теперь, если ручка тормоза в положении 1
--(как и сам реальный тормоз)
gBrakeLock_2 = false --мы можем отключить второй блок
end
end
end
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState_2 ) -- передаем значение реальному контролу
end
...
if gDSDStartCount > DSDDELAY + 5 and not isDSDTriggered and not isSafetyIsolated then
isDSDTriggered = true
Call( "*:SetControlValue", "TrainBrakeControl", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
gBrakeLock = true
gBrakeLock_2 = true -- До тех пор, пока переменные содержат такое значение,
-- на реальный тормоз будет передаваться подмененные данные
-- т.е. движение ручки влиять на него не будет
end
--- добавлено позже в 09 авг 2015, 14:20 ---
А разве isDSDTriggered == true и gBrakeLock == true не дублируют друг друга? Ведь фактически, при срабатывании DSD обе эти переменные получают значение "да", а после нажатия педали - "нет". По-моему, можно отказаться от переменной gBrakeLock и ориентироваться на isDSDTriggered. Но это так, заметка, проблему это не решит. (Возможно, я не до конца понимаю значения переменной isDSDTriggered).Cross писал(а):По логике вещей я так понимаю, что дальше нужно писать условие проверки, что isDSDTriggered == true and gBrakeLock == true тогда
если активна пищалка тогда
если получить значение педали DSD == 1 тогда
если получить значение виртуального тормоза == 1 тогда
gBrakeLock = false
isDSDTriggered = false
Это должно по идее вернуть синхронизацию, когда выполнено условие отключения пищалки, затем тормоз переведён в "экстренное" и на этом моменте, если потянуть ручку назад, то мы свяжемся с TrainBrakeControl и сможем снова контроллировать параметр. Но этого почему-то не происходит. Вот оно как блокируется разово, так и всё
Все же мне кажется, что основной причиной является восстановление связи при различных значениях виртуального и реального контрола. Ведь, насколько я понимаю, на реальном тормозе завязана анимация тормозных механизмов, звуки, и вот - он стоит на 1, а мы восстанавливаем связь, и он получает новое значение, допустим, 0,4. Разве это не стресс для движка? Мой алгоритм позволяет этого избежать, попробуйте, пожалуйста, кто знает, вдруг поможет? Хуже точно не будет . Скорей всего, в моем коде есть ошибки синтаксиса, но сам алгоритм однозначно должен быть рабочий.
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
попозже посмотрю, спасибо за советы.
--------------------------------------------------
Наконец-то допилил обновление для патча на DB Class 101, пришлось исправлять некоторые свои баги, ну а куда ж без них.
Рекомендую всем ознакомиться с инструкцией, а её важные пункты продублирую здесь.
Примечание: Озвучка для вагонов из патча убрана! Кто качал патч раньше 10.08.15, те могут удалить папку Bvmz 185 по пути
Assets\Kuju\RailSimulator\Audio\RailVehicles\Wagons. Звуки для этих вагонов теперь используются из дополнения DB BR 120 Bpmbdzf IC (vR), поэтому данное дополнение обязательно к установке.
В меню быстрой игры все локомотивы собраны в один класс (назван DB Class 101), в котором можно выбрать локомотив из разных дополнений.
ПС прописан с метками: MA, HH, CK, MR и без меток Kuju версии - Метки являются сокращёнными названиями машрутов, в комплект которых входят данные ПС.
Буду рад, если кто-нибудь поможет с составлением Quick Drive составов для ещё бОльшего разнообразия
Список изменений версии 1.02:
- Поддержка локомотива из дополнения Munchen - Rosenheim.
- В первую версию патча я не вложил Quick Drive, не уследил за этим. Пришлось создавать всё заново, но теперь все файлы на своих местах.
- Пропущенные файлы из перекраски Metropolitan (Clean) так же добавил в патч.
- Незначительные правки в конфигах озвучки. Уменьшен радиус у некоторых внутренних звуков кабины.
- Новые превью картинки в разрешении 512х256.
- Поправлено положение внешней камеры (Shift+F2), по умолчанию камера будет активироваться справа, со стороны машиниста.
попозже посмотрю, спасибо за советы.
--------------------------------------------------
Наконец-то допилил обновление для патча на DB Class 101, пришлось исправлять некоторые свои баги, ну а куда ж без них.
Рекомендую всем ознакомиться с инструкцией, а её важные пункты продублирую здесь.
Примечание: Озвучка для вагонов из патча убрана! Кто качал патч раньше 10.08.15, те могут удалить папку Bvmz 185 по пути
Assets\Kuju\RailSimulator\Audio\RailVehicles\Wagons. Звуки для этих вагонов теперь используются из дополнения DB BR 120 Bpmbdzf IC (vR), поэтому данное дополнение обязательно к установке.
В меню быстрой игры все локомотивы собраны в один класс (назван DB Class 101), в котором можно выбрать локомотив из разных дополнений.
ПС прописан с метками: MA, HH, CK, MR и без меток Kuju версии - Метки являются сокращёнными названиями машрутов, в комплект которых входят данные ПС.
Буду рад, если кто-нибудь поможет с составлением Quick Drive составов для ещё бОльшего разнообразия
Список изменений версии 1.02:
- Поддержка локомотива из дополнения Munchen - Rosenheim.
- В первую версию патча я не вложил Quick Drive, не уследил за этим. Пришлось создавать всё заново, но теперь все файлы на своих местах.
- Пропущенные файлы из перекраски Metropolitan (Clean) так же добавил в патч.
- Незначительные правки в конфигах озвучки. Уменьшен радиус у некоторых внутренних звуков кабины.
- Новые превью картинки в разрешении 512х256.
- Поправлено положение внешней камеры (Shift+F2), по умолчанию камера будет активироваться справа, со стороны машиниста.
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
параллельно с другими разработками сделал Патч для Class 380. Ещё одна единица, на которой станет приятней кататься в симуляторе railworks.
Список изменений v1.0:
- Текстуры кабины пережаты в более качественный DXT5 формат, исправлен "пятнистый" альфа канал.
Убрана текстура псевдосвечения от лампочек на приборной панели.
- В кабине машиниста полноценно реализовано освещение. Добавил свет от монитора.
- Поправлена ручка тифона: анимация изначально настроена для высокого тона, однако звучал низкий - исправлено.
- Новые, более детализированные текстуры фар и красных огней в разрешении 512х512 пикселей. На фарах имеется эффект линзы (TS 2014). К сожалению текстура маркеров и фары связаны с одним "нодом", поэтому маркеры имеют ту же текстуру, что и фары. Исправить не представляется возможным.
- Новое превью изображение поезда в разрешении 512х256 пикселей.
- Поправлена камера в кабине, её положение соответствует уровню головы машиниста.
Внешняя камера сдвинута ближе к центру бокового окна.
- На HUD выведены визуальные обозначения комбинированной рукоятки тяги/тормоза и реверса, а также настроена их чувствительность.
При наведении указателя мыши на органы управления появляются подсказки с обозначениями назначенных на них клавиш.
- Озвучка для Class 380 вынесена в отдельный proxy c дополнительными правками под патч.
- Своя уникальная схема управления.
- Правки Quick Drive составов на 3 и 4 вагонов. Теперь составы обозначаются Class 380/0 - 3 вагона и Class 380/1 - 4 вагона.
Остальные не затрагивались.
- DRA теперь функционирует, но нет анимации на кнопке.
- Функционирующий реостатный тормоз.
Список изменений v1.0:
- Текстуры кабины пережаты в более качественный DXT5 формат, исправлен "пятнистый" альфа канал.
Убрана текстура псевдосвечения от лампочек на приборной панели.
- В кабине машиниста полноценно реализовано освещение. Добавил свет от монитора.
- Поправлена ручка тифона: анимация изначально настроена для высокого тона, однако звучал низкий - исправлено.
- Новые, более детализированные текстуры фар и красных огней в разрешении 512х512 пикселей. На фарах имеется эффект линзы (TS 2014). К сожалению текстура маркеров и фары связаны с одним "нодом", поэтому маркеры имеют ту же текстуру, что и фары. Исправить не представляется возможным.
- Новое превью изображение поезда в разрешении 512х256 пикселей.
- Поправлена камера в кабине, её положение соответствует уровню головы машиниста.
Внешняя камера сдвинута ближе к центру бокового окна.
- На HUD выведены визуальные обозначения комбинированной рукоятки тяги/тормоза и реверса, а также настроена их чувствительность.
При наведении указателя мыши на органы управления появляются подсказки с обозначениями назначенных на них клавиш.
- Озвучка для Class 380 вынесена в отдельный proxy c дополнительными правками под патч.
- Своя уникальная схема управления.
- Правки Quick Drive составов на 3 и 4 вагонов. Теперь составы обозначаются Class 380/0 - 3 вагона и Class 380/1 - 4 вагона.
Остальные не затрагивались.
- DRA теперь функционирует, но нет анимации на кнопке.
- Функционирующий реостатный тормоз.
*Train Simulator 2018*
- British Railways
- Специалист
- Сообщения: 237
- Зарегистрирован: 28 авг 2012
- Репутация: 27
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross, мне кажется, что ты переборщил с заглушением class 170! Тифон почти не слышно.
webmoney R133610033561
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
British Railways
ещё поправлю, за этим не заржавеет. Там ещё баг есть звуком колёс, который слышится в кабинах, если 170 где-то рядом проезжает. Так что скоро обновление будет
ещё поправлю, за этим не заржавеет. Там ещё баг есть звуком колёс, который слышится в кабинах, если 170 где-то рядом проезжает. Так что скоро обновление будет
*Train Simulator 2018*
- British Railways
- Специалист
- Сообщения: 237
- Зарегистрирован: 28 авг 2012
- Репутация: 27
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Жду с нетерпением! Cross, ты героически исправляешь косяки DTG, продолжая славное дело AP!
webmoney R133610033561
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
иной раз приходится сильно поизощряться, чтобы добиться желаемого результата, кыс допускают частенько нелепые ошибки или оставляют сильно недоделанным кое-что. Надеюсь охватить как можно больше дополнений со временем, но проблему создают закрытые скрипты, не подсмотреть нужный мне код, хотя за последнее время скрипты стал лучше понимать и могу уже сам кое-что писать. Есть в планах патч для 170-го обновить и следом за ним займусь обновлением патча на Class 444-450, в который войдут дополнительно Class 360 и Class 350 из дополнения WCML Trent Valley, так как это одна Desiro серия поездов. У Class 360 планируется с нуля писать скрипт, сделать DSD с возможностью отключения и добавить новых ливрей
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross, ты ничего не перепутал, у Class 360 (GEML) же есть DVD?
В целом, по ливреям для Desiro (кроме Class 185), известные мне:
Class 350: Neutral (совместно Silverlink и Central Trains), London Midland (половина тамбура жёлтая), London Midland (весь тамбур жёлтый), Neutral (TransPennine), First TransPennine Express, London Midland 'Project 110' (350110)
Class 360: First Great Eastern, National Express East Anglia (ex-FGE), National Express East Anglia (360115), Abellio Greater Anglia (ex-FGE), Heathrow Connect, Heathrow Express (старая), Heathrow Express (новая)
Class 380: First ScotRail, Abellio ScotRail
Class 444: SouthWest Trains
Class 450: SouthWest Trains, Southwest Trains HC
В целом, по ливреям для Desiro (кроме Class 185), известные мне:
Class 350: Neutral (совместно Silverlink и Central Trains), London Midland (половина тамбура жёлтая), London Midland (весь тамбур жёлтый), Neutral (TransPennine), First TransPennine Express, London Midland 'Project 110' (350110)
Class 360: First Great Eastern, National Express East Anglia (ex-FGE), National Express East Anglia (360115), Abellio Greater Anglia (ex-FGE), Heathrow Connect, Heathrow Express (старая), Heathrow Express (новая)
Class 380: First ScotRail, Abellio ScotRail
Class 444: SouthWest Trains
Class 450: SouthWest Trains, Southwest Trains HC
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
pROssO
Class 360 есть DVD, или DSD, нужно уточнить, но она не выключается и я хочу это исправить.
Список ливрей пригодится. Где-то на UKTS что-то было, тоже глянем
Class 360 есть DVD, или DSD, нужно уточнить, но она не выключается и я хочу это исправить.
Список ливрей пригодится. Где-то на UKTS что-то было, тоже глянем
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross, там DVD. Вообще, как я выяснил из документов, DVD - это DSD с дополнительным контролем бдительности. То есть, минутные проверки бдительности в связи с бездействием машиниста - работа DVD. C UKTS будь аккуратен, там есть вымышленные ливреи. Ситуация по краскам такова:
Кстати, есть ещё новая краска Heathrow Express, список поправил
Спойлер
C350
LM (Half Yellow) - WCML TV, DPS (из Class 450)
Neutral (FTPE), LM (Full Yellow) и FTPE - DPS (Class 450)
C360
GA (ex-FGE) - GEML (+ бренд-патч UKTS)
FGE - AP
HConnect - UKTS
HXpress (old) - UKTS (есть неточности в связи с расположением номера)
C380
FSR - GARL
C444
RSC
C450
SWT - BML и PDL
SWT HC - UKTS - есть неточности в связи с компоновкой салона
LM (Half Yellow) - WCML TV, DPS (из Class 450)
Neutral (FTPE), LM (Full Yellow) и FTPE - DPS (Class 450)
C360
GA (ex-FGE) - GEML (+ бренд-патч UKTS)
FGE - AP
HConnect - UKTS
HXpress (old) - UKTS (есть неточности в связи с расположением номера)
C380
FSR - GARL
C444
RSC
C450
SWT - BML и PDL
SWT HC - UKTS - есть неточности в связи с компоновкой салона
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
никак не могу запомнить отличия в работе этих двух систем. Но помню, что DSD работает по принципу, если не трогаешь тифон, педаль DSD, AWS кнопку и регулятор тяги в течение минуты, тогда срабатывает система. А вот DVD, кажется, с 48 секундным интервалом срабатывает и не зависит от того, дёргаешь ли ты рычаги, или нет. Надо бы уточнить, тогда и я точнее смогу её реализовать
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
DSD - просто требует, чтобы педаль всегда была нажата при положении реверса "вперёд" или "назад". Если педаль отпустить, через 5-7 секунд задействует экстренное торможение. Присутствует на любом локомотиве (или почти любом, возможно, некоторые первые тепловозы не имели), кроме паровозов.
DSD + DVD (или просто DVD) - в случае бездействия машиниста (основные рычаги не перемещаюся), раз в минуту производит дополнительную проверку бдительности, в ходе которой нужно отпустить, а затем снова нажать педаль. Времени на это отведено столько же. Присутствует на современных поездах и модернизированных локомотивах.
DSD + DVD (или просто DVD) - в случае бездействия машиниста (основные рычаги не перемещаюся), раз в минуту производит дополнительную проверку бдительности, в ходе которой нужно отпустить, а затем снова нажать педаль. Времени на это отведено столько же. Присутствует на современных поездах и модернизированных локомотивах.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Начал потихоньку обновлять Class 170. Первым делом решил взяться за освещение в кабине. Что из этого вышло можно увидеть на двух скриншотах ниже.
*Train Simulator 2018*
- fighter2012
- Ветеран
- Сообщения: 2993
- Зарегистрирован: 07 мар 2011
- Откуда: Россия
- Репутация: 1329
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
как тестовый вариант сойдёт, но текстуру нужно будет всё равно получше сделать
*Train Simulator 2018*
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
и немного о желтить или что то в этом роде а то белые квадраты, так же сделать вид что это лампочки или люминесцентные или накаливания.
Электроника БК0010-01 и БК0011м.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
maxvel, логика подсказывает, что это люминесцентные лампы, для которых молочно-белый в самый раз.
Конечно, есть вопрос, одна там лампа или две, что будет влиять на желаемую текстуру плафона, но и то, что имеется, уже неплохо.
Конечно, есть вопрос, одна там лампа или две, что будет влиять на желаемую текстуру плафона, но и то, что имеется, уже неплохо.