Сталкер зов припяти как добавить предмет в инвентарь
Итак многие знают что есть длинная функций на выдавание предмета(Забыл просто как она пишеться полностью) так же есть длинная функция на выдачу предмета в диалоге:
dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
Сейчас расскажу как можно упростить.Создаем любой скрипт.Например test.script.Пишем туда вот такую функцию
Написали?Хорошо!Создадим теперь ту самую упрощеную функцию.Пишеться она так
Итак сделали?Супер!Лезем теперь в config/gameplay/info_l01escape.xml и после строчки:
Пишем: <action>test.give_equip</action> Там где test это название скрипта.give_equip название функции В итоге должно получиться вот так:
Теперь при начале новой игры будет выдаваться экипировка! Итак.Многие кто хоть немного разбираються в скриптах уже догадались что функция стремная.Нету такой упрощеной штуки как выдавание сразу нескольких предметов за один вызов.Но ничего.И тут мы выкрутимся.Будем пользоваться функцией for i do.Привожу пример:
Итак если хотите регулировать число выдаваемых предметов то после i=1, ставим то число которое вам нужно Фух.Вроде все разобрали. Привел статью в полный порядок так же устранил пару недочетов:Fireman3000
Предлагаю свой вариант рандомного спавна. В данном способе нет проблем с проваливанием объектов под землю. Но рандомность, к сожалению, фиксирована. Хотя, это даже к лучшему, так как появляется возможность спавнить только по укромным местам, а также возможность указывать не только координаты, но и sid объектов, в том числе и нпс. Функция универсальна, что расширяет её возможности.
Итак, в файле xr_effects.script вписываем новую функцию:
elseif type(tbl) == 'table' and type(tbl[ms]) == 'string' or type(tbl) == 'string' then
Разберём возможности функции. Данная функция имеет 4 типа спавна:
1. Рандомно, случайный(ые) объект(ы) (из предлагаемого списка). 2. Рандомно, определённый(ые) объект(ы). 3. В определённом месте, случайный(ые) объект(ы) (из предлагаемого списка). 4. В определённом месте, определённый(ые) объект(ы).
Можно указывать количество объектов, наборы объектов и количество каждого объекта в наборе. Также есть возможность указать количество циклов спавна (по объектам). Где при каждом цикле выбирается случайный объект или набор объектов.
Функция является общей, а значит при запуске функции, нам потребуется передавать ей данные для спавна. Передача данных будет производиться из других функций.
local kol = 5 --количество спавн-циклов (по объектам). При каждом цикле выбирается случайный объект или набор объектов.
Строку можно не указывать, если спавнится один объект или набор объектов.
this.uni_random_spawn(items, tbl, kol) --если обе функции находятся в одном файле.
Если функция с данными прописывается в другом файле, то вместо this пишется имя файла без расширения, в котором находится общая функция. В нашем случае, это xr_effects.script. То есть получится так:
Таблица tbl содержит в себе разные типы мест для спавна. Такие как id, актор и непосредственные координаты. Весь список данных записывается в фигурных скобках, через запятую. Непосредственные координаты, заключаются в дополнительные фигурные скобки, как в нашем примере. Строки, могут содержать в себе любую информацию. Это не имеет значения, так как проверка идёт на тип значения 'string'. Если строка, то спавнить в инвентаре актора.
Таблица items содержит в себе, список возможных объектов и(или) возможных наборов объектов. Которые так же, вписываются в фигурные скобки, через запятую. Наборы объектов, заключаются в дополнительные фигурные скобки. После каждого объекта, можно указывать количество, через запятую. Можно также указать количество спавна набора объектов, через запятую, после закрытия фигурной скобки набора.
Сталкер зов припяти как добавить предмет в инвентарь
Спаун через xrSpawner 1. Предварительные телодвижения
1.1 Итак, прежде чем мы приступим к созданию собственных модов, не помешает проветрить, все ли необходимое у нас есть.
a) Собственно, сама игра, установленная на компьютер.
b) Распаковщик архивов игры STALKER_Data_Unpacker
c) Текстовый редактор, подойдет практически любой, даже Блокнот. Если у вас есть редактор с подсветкой синтаксиса, это будет плюсом.
d) Редактор файла all.spawn. Если вы корифей в HEX-редакторах, берите тот, который нравится. Тем же, кто даже толком не представляет, что такое НЕХ-редактор, крайне рекомендую xrSpawner 0.13.0 Beta от небезызвестного в сталкеровском комьюнити Zeed’а. Удивительно удобная штука, тем более что в дальнейшем речь пойдет именно о xrSpawner.
e) Ровные руки и мыслящая голова.
Если все это у вас есть, продолжим. В том случае, если вы уже распаковали архивы игры, переходите сразу ко второму пункту. Если же нет, то…
2. Добавление транспорта.
3 Поиск координат и расстановка объектов на других локациях.
Накатавшись вволю по Кордону, вы, несомненно, захотите попутешествовать по остальным локациям уже на своих четырех. Вот тут вы и столкнетесь с проблемой, поскольку точка перехода Кордон-Свалка находится в здании за шлагбаумом, куда машина, по понятным причинам, не пролазит. Это значит, что вам понадобится новый автомобиль, который встречал бы вас на Свалке. В общем случае речь может идти не только о машинах, но и о монстрах, артефактах, сталкерах, предметах и прочих объектах. Для спауна любого предмета необходимо, как мы уже убедились, задать координаты той точки, где он появится. Алгоритм следующий: спаунимся на локацию, куда вы хотите добавить объект, визуально выбираем наиболее подходящую для этого точку и фиксируем ее координаты, выходим из игры, создаем интересующий нас объект с заранее полученными координатами, вновь спаунимся и проверяем корректность добавления объекта. Теперь опишем все это более подробно на примере автомобиля.
3.1 Допустим, вы хотите поместить белую Ниву неподалеку от перехода Армейские склады – Бар. В окне списка объектов поставьте маркер на первый объект. В окне «Поиск» наберите level_changer. Уже в процессе набора маркер переместиться на объект номер 284, который и будет нашим первым левел-ченджером. Level_cahnger, это точка, в которой расположен триггер, который выдает на экран окошко «Вы хотите перейти на другую локацию?». Объект за номером 284 с именем exit_to_garbage_01 отвечает за переход Кордон-Свалка и нам он не нужен. Нажимайте кнопку «Следующий» до тех пор, пока маркер на остановится на нужной нам точке перехода. Определить, какой level_changer за что отвечает, достаточно просто, смотрите на имя объекта, он подскажет в какую локацию переносит вас триггер. Триггеры одной карты обычно группируются вместе. Объекты 5286 (exit_to_bar_01) и 5287 (exit_to_radar_01) явно принадлежат к одной локации, по совокупности того, куда ведут выходы, можно определить, что триггеры принадлежат Армейским складам, только с нее есть выходы на Бар и Радар. Отлично, значит нас интересует номер 5286 exit_to_bar_01 с координатами (-372,6236/ -21,69933/ -4,806515). Запомните эти числа, затем открывайте строчку 63 actor (это вы), меняйте в поле Level_ID l01_escape на l07_military, измените ваши текущие координаты на координаты точки перехода (-372,6236/ -21,69933/ -4,806515), сохраняйте строчку («принять изменения») и файл («Файл - Сохранить»). Обратите внимание, сразу после загрузки вы попадете в триггер выхода. Это не страшно, достаточно нажать «нет» и вы появитесь на локации Армейские склады. Если же это обстоятельство вам неприятно, попросту измените горизонтальные координаты на 1-2 метра.
3.2 Начинаем новую игру. После загрузки и отказа переходить на другую локацию, нам необходимо найти подходящее место для расположения автомобиля и определить его координаты. Делается это одним из следующих способов.
a) В консоли прописываем команду «rs_stats on» без кавычек и слева на экране появится статистическая информация. Нас интересует последняя строчка Camera position, которая отражает текущие координаты камеры. Почему я заостряю на этом внимание. Камера поднята над поверхностью на 1,5 метра, поэтому, когда будете вписывать данные для спауна, вычитайте из вертикальной координаты полтора метра. Топаем ножками на понравившуюся площадку и записываем на листочке цифры с экрана.
b) Точно так же топаем ножками на понравившееся место и там сохраняемся с помощью quiksave(F6).
c) Принимая во внимание, что вы появляетесь на карте с болтами и биноклем в карманах, ваша персона может сильно заинтересовать недружественных товарищей и мутантов. Дабы обезопасить себя во время проведения топографических съемок, набирайте в консоли команду «demo_record 1», которая освобождает камеру, давая возможность «полетать» по уровню. Управлять камерой просто, нажимаете «огонь» и летите вперед («прицел» - назад), стрелки отвечают за поворот вокруг осей. Далее аналогично – прилетаем на место, запускаем «rs_stats on» и записываем текущие координаты.
3.3 Выходим из игры. Если вы сохранялись при помощи быстрого сохранения, ставьте маркер на объект 63 actor и нажимайте кнопку «Получить координаты из файла сохранения». В окошках должны появится те же самые данные, что вы получили при помощи «rs_stats on». Единственное дополнительное преимущество состоит в том, что при загрузке данных с сейва вы получаете также данные об угле поворота вашего персонажа. Это вам поможет в том случае, если вы хотите определенным образом сориентировать вашу машину относительно, скажем, дороги или другой техники.
3.4 Добавить объект - Транспорт - Niva_White. В поле Level_ID выбираем l07_military (если оно уже не стоит там по умолчанию), в поля координат заносим данные, полученные в п.3.2 Сохраняем строчку и файл. Снова запускаем новую игру. Если вы ничего не изменяли в actor, то вы появитесь в том же месте, что и в прошлый раз, на дороге по пути к Бару, а пробежавшись немного вперед, обнаружите свежепоявившуюся Ниву белого цвета.
Если кому-то интересно, автомобиль на скриншоте заспаунен в координаты (-305,38/-22,53/61,93), углы поворотов относительно осей (0/0/0). Это важно – когда будите вписывать числовые значения координат, дробная часть отделяется от целой с помощью запятой. Если вы поставите точку, при сохранении редактор выдаст ошибку.
Вот таким образом вы можете получать и присваивать нужные координаты любым объектам, начиная от табуретки и заканчивая вертолетами. Внимание, при создании объектов на других локациях всегда сохраняйте изменения и обращайте внимание на то, какое значение Level_ID у вас сохранено. Нередки случаи, когда вместо того, что бы расквартироваться по всей Зоне, монстры сосредоточились на Кордоне, из-за того, что моде (известный вам Бастард), забыл сменить левел _айди у части монстров.
4 Добавление новых монстров
С чисто технической точки зрения заспаунить, скажем, бюрера, никаких трудностей не представляет. Выполняйте все те же операции, что и для автомобиля. То есть, выбираем Добавить объект а Mutants а Burer, корректируем координаты и локацию, если есть необходимость, сохраняемся, заходим и любуемся. НО . Каждый житель Зоны, от тушкана до сталкера, должен быть зафиксирован в куче файлов: статистика, описание, инвентарь (то, что вы видите, нажав «обыскать труп») и прочее. Давать описание того, что нужно сделать в каждом фале, это слишком долго и муторно, получится гора сухой писанины, причем, не факт ни я (при наборе) ни вы (при переписывании) не допустим какую-нибудь ошибку. А отсутствие простой запятой в одном файле может привести к крашу игры. Поэтому лучшим выходом из ситуации будет, если вы найдете любой мод, добавляющий монстров и найдете там необходимые файлы, которые нужно добавить/заменить в игре.
Обратите внимание, что у вас есть возможность добавлять не только новых монстров и машины, но и спаунить оружие, предметы, артефакты, старых монстров, сталкеров и проч. Если хотите, выложу и про это.
1: Спавн ГГ
Тут ничего сложного нету, открываеш all.spawn, в поиске ищеш actor (только в Entity) и меняеш его координаты (не забудь выставить Level_ID) вот собственно и всё
2: Спавн предметов в рюкзаке у ГГ
В этом же параметре actor есть скрип в котом прописаны все предметы он выглядит так:
][spawn]
wpn_binoc
detector_simple
novice_outfit
device_torch
далее берём и вписываем названия предметов, оружия, патронов после device_torch, количество указываетсо = xxx (где х - число), тоже всё
3: Спавн НПС
Тут тоже ничего сложного, ищем в поиске к примеру контролёра, вводим m_controller и видим в табле ниже m_controller_normal(normal - сила контролёра), далее добавляем его в базу, потом выбираем этого контролёра в базе, выбераем Level_ID и добавляем столько сколько нужно , прописываем координаты и фсё запускаем и мочим
4: Спавн аномалии
Насечот аномалий не знаю (никогда не пробовал спавнить) но всётки помоему тут всё просто. Ищем в поиске zone_xxx (х - название аномалии) к прмеру zone_gravi, в табле ниже м ыувидим zone_gravi_zone_weak, добавляем в базу и спавним
[dont_spawn_character_supplies]
[spawn]
dialogs.relocate_item_section(trader, "wpn_binoc", "in")
dialogs.relocate_item_section(trader, "wpn_knife", "in")
dialogs.relocate_item_section(trader, "detector_elite", "in")
dialogs.relocate_item_section(trader, "exo_outfit", "in")
dialogs.relocate_item_section(trader, "dolg_scientific_outfit", "in")
dialogs.relocate_item_section(trader, "protection_outfit", "in")
dialogs.relocate_item_section(trader, "device_torch", "in")
dialogs.relocate_item_section(trader, "af_medusa", "in")
dialogs.relocate_item_section(trader, "af_cristall_flower", "in")
dialogs.relocate_item_section(trader, "af_night_star", "in")
dialogs.relocate_item_section(trader, "af_vyvert", "in")
dialogs.relocate_item_section(trader, "af_gravi", "in")
dialogs.relocate_item_section(trader, "af_gold_fish", "in")
dialogs.relocate_item_section(trader, "af_blood", "in")
dialogs.relocate_item_section(trader, "af_mincer_meat", "in")
dialogs.relocate_item_section(trader, "af_soul", "in")
dialogs.relocate_item_section(trader, "af_electra_sparkler", "in")
dialogs.relocate_item_section(trader, "af_electra_flash", "in")
dialogs.relocate_item_section(trader, "af_electra_moonlight", "in")
dialogs.relocate_item_section(trader, "af_rusty_thorn", "in")
dialogs.relocate_item_section(trader, "af_rusty_kristall", "in")
dialogs.relocate_item_section(trader, "af_rusty_sea-urchin", "in")
dialogs.relocate_item_section(trader, "af_ameba_slime", "in")
dialogs.relocate_item_section(trader, "af_ameba_slug", "in")
dialogs.relocate_item_section(trader, "af_ameba_mica", "in")
dialogs.relocate_item_section(trader, "af_drops", "in")
dialogs.relocate_item_section(trader, "af_fireball", "in")
dialogs.relocate_item_section(trader, "af_cristall", "in")
dialogs.relocate_item_section(trader, "af_dummy_glassbeads", "in")
dialogs.relocate_item_section(trader, "af_dummy_pellicle", "in")
dialogs.relocate_item_section(trader, "af_dummy_battery", "in")
dialogs.relocate_item_section(trader, "af_dummy_dummy", "in")
dialogs.relocate_item_section(trader, "af_dummy_spring", "in")
dialogs.relocate_item_section(trader, "af_fuzz_kolobok", "in")
dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_9x18_pmm", "in")
dialogs.relocate_item_section(trader, "ammo_9x19_pbp", "in")
dialogs.relocate_item_section(trader, "ammo_9x19_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_11.43x23_hydro", "in")
dialogs.relocate_item_section(trader, "ammo_11.43x23_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_12x70_buck", "in")
dialogs.relocate_item_section(trader, "ammo_12x76_dart", "in")
dialogs.relocate_item_section(trader, "ammo_12x76_zhekan", "in")
dialogs.relocate_item_section(trader, "ammo_5.45x39_ap", "in")
dialogs.relocate_item_section(trader, "ammo_5.45x39_fmj", "in")
dialogs.relocate_item_section(trader, "ammo_9x39_sp5", "in")
dialogs.relocate_item_section(trader, "ammo_9x39_ap", "in")
dialogs.relocate_item_section(trader, "ammo_9x39_pab9", "in")
dialogs.relocate_item_section(trader, "ammo_5.56x45_ss190", "in")
dialogs.relocate_item_section(trader, "ammo_5.56x45_ap", "in")
dialogs.relocate_item_section(trader, "ammo_7.62x54_7h14", "in")
dialogs.relocate_item_section(trader, "ammo_7.62x54_7h1", "in")
dialogs.relocate_item_section(trader, "ammo_7.62x54_ap", "in")
dialogs.relocate_item_section(trader, "ammo_og-7b", "in")
dialogs.relocate_item_section(trader, "ammo_vog-25p", "in")
dialogs.relocate_item_section(trader, "ammo_vog-25", "in")
dialogs.relocate_item_section(trader, "grenade_f1", "in")
dialogs.relocate_item_section(trader, "ammo_m209", "in")
dialogs.relocate_item_section(trader, "ammo_gauss", "in")
dialogs.relocate_item_section(trader, "wpn_colt1911", "in")
dialogs.relocate_item_section(trader, "wpn_desert_eagle", "in")
dialogs.relocate_item_section(trader, "wpn_toz34", "in")
dialogs.relocate_item_section(trader, "wpn_vintorez", "in")
dialogs.relocate_item_section(trader, "wpn_rg-6", "in")
dialogs.relocate_item_section(trader, "wpn_rpg7", "in")
dialogs.relocate_item_section(trader, "wpn_fn2000", "in")
dialogs.relocate_item_section(trader, "wpn_gauss", "in")
dialogs.relocate_item_section(trader, "wpn_addon_scope", "in")
dialogs.relocate_item_section(trader, "wpn_addon_scope_susat", "in")
dialogs.relocate_item_section(trader, "wpn_addon_silencer", "in")
dialogs.relocate_item_section(trader, "wpn_addon_grenade_launcher", "in")
dialogs.relocate_item_section(trader, "wpn_addon_grenade_launcher_m203", "in")
dialogs.relocate_item_section(trader, "bandage", "in")
dialogs.relocate_item_section(trader, "medkit", "in")
dialogs.relocate_item_section(trader, "medkit_scientic", "in")
dialogs.relocate_item_section(trader, "medkit_army", "in")
dialogs.relocate_item_section(trader, "antirad", "in")
dialogs.relocate_item_section(trader, "bread", "in")
dialogs.relocate_item_section(trader, "kolbasa", "in")
dialogs.relocate_item_section(trader, "conserva", "in")
dialogs.relocate_item_section(trader, "vodka", "in")
dialogs.relocate_item_section(trader, "energy_drink", "in")
dialogs.relocate_item_section(trader, "wpn_ak74_m1", "in")
dialogs.relocate_item_section(trader, "wpn_abakan_m1", "in")
dialogs.relocate_item_section(trader, "wpn_fort_m1", "in")
dialogs.relocate_item_section(trader, "wpn_ak74u_m1", "in")
dialogs.relocate_item_section(trader, "wpn_mp5_m1", "in")
dialogs.relocate_item_section(trader, "wpn_groza_m1", "in")
dialogs.relocate_item_section(trader, "wpn_spas12_m1", "in")
dialogs.relocate_item_section(trader, "wpn_winchester_m1", "in")
dialogs.relocate_item_section(trader, "wpn_l85_m1", "in")
dialogs.relocate_item_section(trader, "wpn_lr300_m1", "in")
dialogs.relocate_item_section(trader, "wpn_svd_m1", "in")
dialogs.relocate_item_section(trader, "wpn_sig_m1", "in")
dialogs.relocate_item_section(trader, "wpn_eagle_m1", "in")
dialogs.relocate_item_section(trader, "wpn_val_m1", "in")
dialogs.relocate_item_section(trader, "wpn_mp5_m2", "in")
dialogs.relocate_item_section(trader, "wpn_abakan_m2", "in")
dialogs.relocate_item_section(trader, "wpn_l85_m2", "in")
dialogs.relocate_item_section(trader, "wpn_sig_m2", "in")
dialogs.relocate_item_section(trader, "wpn_rg6_m1", "in")
dialogs.relocate_item_section(trader, "wpn_walther_m1", "in")
Вот тебе все добро при спауне у тебя в инвентаре. все уникальное, плюс три комбеза (зеленый ученый, экзоскелет и Скат, вроде бы ).
вот только обрати внимание, что все это добро разом весит почти тонну двести кэгэ. поднимай грузоподъемность или не жадничай. А вот если появится желание скинуть это все и распихать по нычкам - не советую. Достаточно выкинуть пару сотен патронов и игра начинает подтормаживать.
okolо выжигателиа СВДшник, там в дсыру в заборе и через лес. Доходим до вертолета, и на север. Там две скалы каменные и междуними щел. Кидаем в них ствол и идем. Выходим, начинаетса загрузка и мы в Саркофаге уже в нутри. баг?
Общие правки игровых файлов Сталкер
SaZoN , как сделаю, скину в личку, примерно через пару часиков.
Всё сделал, смотри в личке! Удачи!
Всем привет.
Думаю, что эта инструкция нужна всем.
Как правильно, установить несколько Сталкеров одной версии, на один компьютер!
ВНИМАНИЕ: СПОЙЛЕР!После всех выполненных действий, установленную по умолчанию игру, можно полностью удалить (Деинсталлировать) из системы, что бы освободить место на Жёстком диске.
ТАКИМ СПОСОБОМ МОЖНО СОЗДАВАТЬ, НЕ ОГРАНИЧЕННОЕ ЧИСЛО СТАЛКЕРОВ, ПРИЧЁМ КАЖДЫЙ СТАЛКЕР, БУДЕТ НЕ ЗАВИСИМЫМ.
Сталкер зов припяти как добавить предмет в инвентарь
Структуру папок и местонахождение основных файлов игры Сталкер смотрим здесь Структура файлов и папок
Короче, нашел у себя в загашнике решение (вроде как от самого Архары) и испытал, создав ситуацию с неотключившимся выбросом (не уходил с локации пока таймер не обнулился), вот описание (подправил немного):
затем, вызов функции в таком виде: <action>arhara_dialog.dell_duratskiy_timer</action>
вставить в любой ближайший диалог.
под строку: function actor_binder:update(delta)
добавить вызов: arhara_dialog.dell_duratskiy_timer()
Сохранить изменения, грузить сейв перед заходом на ЧАЭС-1 и потом переходить, или загружаться с автосейва перехода, тоже сработает.
После, как перешли на ЧАЭС-1 и выброс отключился - сохраняемся, выходим из игры и удаляем строку arhara_dialog.dell_duratskiy_timer() из файла bind_stalker.script
Ключи для быстрого запуска игры , также немного разгружает память .
На рабочем столе , правой кнопкой мышки кликаем на ярлык.S.T.A..L.K.E.R
Далее , выбираем Свойства
Далее , в Объект , после кавычек , делаем пробел и прописываем
. XR_3DA.exe" -nointro -noprefetch -noshadows
Подходит к любому Сталкеру , Н.И. не нужна , удачи .
Ряд дополнительных команд, которые можно запускать при старте STALKER'а называются Переключателями Командной Строки. Эти 'переключатели' - это команды посланные главному исполняемому файлу XR_3DA.exe, говорящие движку выполнить определённые действия при запуске игры. Для использования переключателей командной строки, кликните правой кнопкой мыши на ярлыке STALKER'a и выберите 'Свойства'. Далее в поле 'Объект', через пробел от последнего символа, вставьте переключатель(и) которые вы хотите использовать. Например:
Переключатели -nointro, -noprefetch и -noshadows добавлены для отключения вводных заставок с логотипами, предварительной загрузки информации (ускоряет запуск и загрузку сохранений) и отключения всех не солнечных теней в игре. По другому не возможно использовать предигровые настройки. Можно вернуть настройки в любой момент просто удалив переключатель с ненужной настройкой из ярлыка или создав другой с требуемыми переключателями и использовать его когда ты захочешь запустить игру с другими настройками. дополнение от --HikeR 14:17, 31 мая 2007 (MSD)][
Для различных ситуаций можно создать несколько копий ярлыков для запуска игры с различными параметрами. Например можно использовать ключ -nointro для всех вариантов, комбинацию -noprefetch -noshadows -nosound -r4xx для всяких экспериментов (отключен звук, префетч, тени, форсированно используется DX8, максимально быстрая загрузка), и просто ярлык для обычной игры
Полный список Переключателей Командной Строки для STALKER'а приведённый ниже сопровождается также кратким пояснение для каждого, где это было возможно. Я протестировал каждый и все переключатели, но некоторые переключатели не имеют видимого эффекта или просто подвешивают игру во время загрузки. Инструкции по предполагаемому использованию наиболее полезных переключателей приведены на протяжении этого гида:
Читайте также: