Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 @UnLoaded, if data.custom_data:getString() == "" then data.custom_data:setString("сюда пишешь свою кастом дату") end @Dennis_Chikin, она даже часто оказывается в такой позе. Особенно во всяких модах когда туда какой-нибудь левый чувак раньше положенного залетает . Ссылка на комментарий
UnLoaded 313 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 (изменено) "сюда пишешь свою кастом дату" Символы переноса строки(\n) - легитимны ? Раз уж пошло такое хорошо по работе с нет-пакетом, спрошу: как правильно прописать StoryID неписю(при скриптовом спавне) с использованием того-же модуля Artos'а ? Изменено 20 Марта 2015 пользователем UnLoaded Ссылка на комментарий
Kirgudu 1 207 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 (изменено) @UnLoaded, для переноса строки в назначаемой скриптом кастом дате следует использовать "\n". Да, ты уже и сам догадался. Для изменения story_id необходимо поработать с абстрактной частью нет-пакета, которая доступна только в момент выхода объекта в онлайн или при сохранении. За инструкцией лучше всего обратиться к руководству от автора: Про специальный нет-пакет 'abstract': Библиотека может работать с абстрактной частью пакета, которая доступна ТОЛЬКО в момент выхода объекта в онлайн или сохранении.Поэтому напрямую (методами set и get) прочитать и записать такие данные нельзя.Для чтения и/или изменения используется специальный пакет 'net_abstract'.Хотя принцип работы отличается от работы остальных классов, но все же очень похож. Исключение составляет то, как изменять данные в пакете.Рассмотрим сразу на примере:а) создаем объект в игре: local obj = alife():create("exo_outfit", pos, lv, gv) б) получаем служебный пакет, которым будем менять свойства: local pk = m_netpk.get(obj,0) -- или m_netpk.net_cse_abstract(obj) в) вариант-1: используем функцию: pk:setCallback( function(data) data.direction = vector():set(1,1,1) end ) вариант-2: задаем желаемые изменения таблицей: pk:setCallback( {direction = vector():set(1,1,1)} ) Здесь мы создали объект и захотели изменить его абстрактную часть.Мы указали пакету коллбек, который будет передан основному коллбэку, будучи вызванам как только станет доступна абстрактная часть объекта.В колбек передается таблица с параметрами пакета, мы можем смело их менять, в примере мы наклонили объект по всем осям на 1 радиану.При спавне нового игрового объекта:изменения вступят в силу, как только мы выйдем из текущей скриптовой работы и управление вернется движку - он создаст объект и начнет записывать в него параметры.Для уже существующих объектов в игре:требуется после задания изменений свойст объекта, перевести объект в оффлайн и обратно в онлайн, что модулем делается автоматически.Изменения вступят в силу в момент выхода объекта в онлайн.Как получить возможность менять абстрактную часть пакетов?1) этот тип объектов должен иметь класс, который представляет такой тип объектов в игре (можно назвать биндером, а можно никак не называть)(то есть то, что будет вызвано, когда объект появится в игре)Завязка из class_registrator.script: cs_register (object_factory, "CStalkerOutfit", "se_item.se_outfit", "E_STLK", "equ_stalker_s") 2) обязательно добавить (если таковой отсутствует) метод биндера 'STATE_Write' (см. скрипты типа: 'se_XXX.script')Для примера с костюмом: function se_outfit:STATE_Write(packet) cse_alife_item_custom_outfit.STATE_Write(self, packet) end 3) В метод STATE_Write (см. выше) добавить строку: function se_outfit:STATE_Write(packet) if self.cb_netpk then self.cb_netpk(self, packet) end -- коллбэк для изменения свойств пакета cse_alife_item_custom_outfit.STATE_Write(self, packet) end Выполнение этих действий ОБЯЗАТЕЛЬНО. Зачем это нужно? Ну, например, можно поменять дирекшн или позишн, так как это read_only свойства объектов.А позишн при спавне смещается так, чтобы объект находился на ИИ сетке.То есть, можем спавнить всякие там лампочки, физические объкты так, чтоб они оказывались повернутыми в пространстве.Так же можно менять те свойства, которые, обычно, только для чтения. Например story_id, или position. Но такие вопросы больше относятся к теме «Скриптование». Изменено 20 Марта 2015 пользователем Kirgudu Инструмент Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 @UnLoaded, точно так же как и любой другой параметр. Там "прозрачная" система на таблицах, все как на ладони, Artos к тому же подробное сопровождение написал. Ссылка на комментарий
nego 35 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 Здравствуйте ВАМ. Кто может подсказать, как заспавнить монолитовцев в саркофаг вторично. По ходу нароботки, ГГ дважды идет в саркофаг. Сопротивления НОЛЬ, нет ни одного монолитовца после первой бойни. Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч. Ссылка на комментарий
Silver Raven 197 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 (изменено) Я конечно в скриптах полное днище, но почему не происходит спавна объекта понять не могу (на другой функции проверил - работает): Сам спавн вызывается из логики выключателя: [logic] active = ph_button@air_conditioning_system_off [ph_button@air_conditioning_system_off] on_info = {+lab_x7_air_conditioning_system_turned_on} ph_idle@nil anim = lab_primary_switcher_idle tooltip = tips_lab_x7_air_conditioning_system_switcher on_press = ph_button@air_conditioning_system_on %=lab_x7_air_conditioning_system_turned_on% [ph_button@air_conditioning_system_on] anim = lab_primary_switcher_off [ph_idle@nil] Дальше, стандартная переброска вызова функции из xr_effects.script в свой скрипт: function lab_x7_air_conditioning_system_turned_on() db.actor:db.actor:give_info_portion("lab_x7_air_conditioning_system_turned_on") this.remove_all_lab_x7_static_ventilators() this.create_lab_x7_animated_ventilators() end function remove_all_lab_x7_static_ventilators() local id, obj for id=0, 65535 do obj = level.object_by_id(id) if obj ~= nil and obj:section() == "lab_x7_static_ventilators" then alife():release(alife():object(id), true) end end end function create_lab_x7_animated_ventilators() local ser_obj = alife():create("lab_x7_animated_ventilator",vector():set(-99.62,-18.25,73.64),2889,802) -- пока один, для тестов if ser_obj then local pk = m_netpk.get(ser_obj) if pk and pk:isOk() then local data = pk:get() if data and data.upd then data.fixed_bones = "link" pk:set(data) if data.custom_data:getString() == "lab_x7_animated_ventilator" then data.custom_data:setString("alex_mod\lab_x7_ventilators.ltx") end end end end end Ну и секция предметов для спавна: [lab_x7_static_ventilator]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "alex_mod\devices\lab_x7_static_ventilator" class = O_PHYS_S cform = skeleton visual = alex_mod\objects\ventilator_lab_static.ogf custom_data = scripts\alex_mod\lab_x7_ventilators.ltx script_binding = bind_physic_object.init [lab_x7_animated_ventilator]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "alex_mod\devices\lab_x7_animated_ventilator" class = O_PHYS_S cform = skeleton visual = physics\decor\ventilator_mike.ogf custom_data = scripts\alex_mod\lab_x7_ventilators.ltx script_binding = bind_physic_object.init Может чего прописал не так, или не зарегестрировал? З.Ы. Вспомнил, что помимо спавна и удаления объектов с логикой и прикрепленными костями, необходимо еще иметь возможность их разворота, аналогично all.spawn-ому. Надеюсь для этого тоже чего-нибудь придумали? Изменено 20 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Charsi 440 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 , непонятно, что такое "стандартная переброска". Что мешает сразу поставить вентиляторы с анимированными моделями и переключать им анимации по получению инфопоршня? db.actor:db.actor:give_info_portion Тут должно быть db.actor:give_info_portion. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
BillyBones 0 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 (изменено) Ребят подскажите пжлста в чем проблема, где копать? Expression : assertion failedFunction : CKinematics::LoadFile : ..\xrRender\SkeletonCustom.cppLine : 208Description : data->find_chunk(OGF_S_BONE_NAMES)Очевидно, в моделях. Что-то не то с костями. Что, собственно, и написано в логе. dc Изменено 21 Марта 2015 пользователем Dennis_Chikin Ссылка на комментарий
Silver Raven 197 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) Stalker_AleX333, непонятно, что такое "стандартная переброска". Обычная функция вида: function test() my_script.test() end db.actor:db.actor:give_info_portion Тут должно быть db.actor:give_info_portion. Описался когда последний раз правил сообщение. В скрипте данной ошибки нет. Что мешает сразу поставить вентиляторы с анимированными моделями и переключать им анимации по получению инфопоршня? Предполагаю, что требуются правки логики похожие на этот пример: [collide] ignore_static [logic] active = ph_idle@ventilator_off [ph_idle@ventilator_off] anim = idle on_info = {+lab_x7_air_conditioning_system_turned_on} ph_idle@ventilator_on [ph_idle@ventilator_on] anim = work Если кто-то знает больше - просветите, буду безмерно благодарен. Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
UnLoaded 313 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 Так чего еще просвещать - нормальная логика, должна работать. Инфо-порцию lab_x7_air_conditioning_system_turned_on выдавай в логике переключателя: on_press = ph_button@air_conditioning_system_on %+lab_x7_air_conditioning_system_turned_on%. Секцию вентилятора оставь одну, логику пропиши в файл lab_x7_ventilators.ltx. нет ни одного монолитовца после первой бойни. Смотреть надо настройки смартов, под которыми эти монолитовцы работали. Вполне может быть, что по факту полного уничтожения населения смарта происходит его роспуск(т.е. смарт выключается и гулаг, приписанный к смарту, перестает работать). Ну и респавнеры стоит поискать и проверить - может просто нет пополнения смартов. Ссылка на комментарий
Silver Raven 197 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) @UnLoaded, как ни странно, но данный вариант тоже почему-то не хочет работать. Опишу по порядку, что делал (общая схема работы думаю уже ясна: дергаем выключатель - начинают "работать" вентиляторы): 1. В СДК подгрузил модельку вентилятора, изменил под себя анимации (медленное вращение - (idle) и собственно, работа (work) - быстрое вращение). Отдельно сделал копию модельки вентилятора с приставкой static, без анимаций. (для антуража, т.к. некоторые из них должны не работать) 2. Секция выключателя в all.spwne и его логика (выдаваемый им инфопоршень зарегистрировал): Секция в all.spawnе: [2247] ; cse_abstract properties section_name = physic_object name = labx7_ventilation_system_switcher position = -79.8399963378906, -9, 54.939998626709 direction = -1.95476889610291, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8990 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\alex_mod\lab_x7_ventilation_system_switcher.ltx END ; cse_visual properties visual_name = physics\keyboard\lab_primary_switcher ; cse_ph_skeleton properties skeleton_name = lab_primary_switcher_idle ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Последняя версия логики, на данный момент: [logic] active = ph_button@ventilation_system_off [ph_button@ventilation_system_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_idle@nil anim = lab_primary_switcher_idle tooltip = tips_lab_x7_ventilation_system_switcher on_press = ph_button@ventilation_system_on %+lab_x7_ventilation_system_turned_on% [ph_button@ventilation_system_on] anim = lab_primary_switcher_off [ph_idle@nil] 2. Секции для вентиляторов в all.spwne и их логика: Пример секций в all.spawne для статичных и анимированных моделей: [2358] ; cse_abstract properties section_name = physic_object name = labx7_ventilator_01 position = -99.6182250976563, -14.9479446411133, 73.6351470947266 direction = 0, -1.57079637050629, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8959 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\alex_mod\lab_x7_ventilators.ltx END ; cse_visual properties visual_name = alex_mod\objects\lab_x7_ventilator ; cse_ph_skeleton properties skeleton_name = idle ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [2362] ; cse_abstract properties section_name = physic_object name = labx7_ventilator_05 position = -75.750862121582, -15.3341751098633, 55.7204208374023 direction = 0, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8963 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static END ; cse_visual properties visual_name = alex_mod\objects\lab_x7_ventilator_static ; cse_ph_skeleton properties skeleton_name = ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Логика (для анимированных моделей): [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_idle@ventilators_on anim = idle [ph_idle@ventilators_on] anim = work Собственно, вроде все, надеюсь ничего не забыл. Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
UnLoaded 313 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) Такое вот в логе: ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2993][agr_flesh_normal], because it is not added ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2993][agr_flesh_normal], because it is not added ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2993][agr_flesh_normal], because it is not added ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2993][agr_flesh_normal], because it is not added ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2994][agr_flesh_normal_0000], because it is not added ~ cannot remove restriction with id [2919][agr_zone_radioactive_average] to the entity with id [2994][agr_flesh_normal_0000], because it is not added В СДК нашел на Агропроме этих двух плотей и радиоактивную зону, все в районе болота, где вагончик с солдатом-дезертиром. Сравнил с другими мобами и зонами на этой локе - все то-же самое. Вот только не пойму на что ругань, из моих познаний английского вроде: "Не возможно удалить рестриктор [...] у объекта [...], потому, что он не добавлен". Разъясните плиз, что и у чего не добавлено, и как исправить ? , все вроде нормально прописано. Собственно как не работает: выключатель отрабатывает анимацию ? А вентиляторы нет ? Попробуй добавить в логику и переключателю и вентиляторам вывод контрольных сообщений в лог или на худ, чтоб протестить в каком месте логика не срабатывает. Изменено 21 Марта 2015 пользователем UnLoaded Ссылка на комментарий
Silver Raven 197 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 @UnLoaded, проверил оба файла логики - отработка нормальная, но анимки вентиляторов никак не изменяются. upd. Проблему решил. Необходимо было изменить схему работы вентиляторов во второй части, с ph_idle на ph_button. 1 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) 2 UnLoaded: боюсь, есть только погадайки, а я сам на них здесь ругаюсь. Ну, в общем, зоны с радиацией монстрам не добавляются, а чистится все, что есть, без проверок. Забить, либо не пускать монстров в местность с радиацией. В данном случае - плотей в воду (ага, аи-сетка). Изменено 21 Марта 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
UnLoaded 313 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 Проблему решил. Необходимо было изменить схему работы вентиляторов во второй части, с ph_idle на ph_button.Не понял ниче. Покажи уж, что ты изменил, после чего заработало ? 1 Ссылка на комментарий
Silver Raven 197 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) @UnLoaded, без проблем (проверил сейвами - анимка запоминается): [logic] active = ph_idle@ventilators_off [ph_idle@ventilators_off] on_info = {+lab_x7_ventilation_system_turned_on} ph_button@ventilators_on [ph_button@ventilators_on] anim = work Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Charsi 440 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 , нет смысла писать в схему параметры, которые она не вычитывает. Смотри функции set_scheme в файлах, соответствующих схемам. Для ph_idle вычитываются параметры "hit_on_bone" - хитование по кости "nonscript_usable" - разрешает юзаемость "on_use" - событие на юзание "tips" - подсказка а для ph_button "on_press"- действие на юзание "tooltip" - подсказка "anim" - имя анимации "anim_blend" - смешивать анимации Поэтому anim для ph_idle у тебя и не работало. Кондлисты on_info просчитываются на обновлении текущей схемы логики, если оно есть. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Silver Raven 197 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) @Charsi, как-то не подумал об этом сразу, спасибо. Вот чего-то крашится такая конструкция: all.spawn: [2147] ; cse_abstract properties section_name = space_restrictor name = labx7_biohazard_space_restrictor position = -81.5000610351563, -7.43783712387085, 86.2225875854492 direction = 0, 0, 0 id = 65535 version = 118 script_version = 7 spawn_id = 8991 ; cse_alife_object properties game_vertex_id = 2870 level_vertex_id = 974 object_flags = 0xffffef3e custom_data = <<END [logic] cfg = scripts\alex_mod\lab_x7_biohazard.ltx END ; cse_shape properties shapes = 1 shape_0:type = box shape_0:axis_x = 80,0,0 shape_0:axis_y = 0,60,0 shape_0:axis_z = 0,0,70 shape_0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 0 Логика: [logic] active = sr_idle@biohazard [sr_idle@biohazard] on_actor_inside = {+lab_x7_ventilation_system_turned_on} nil, {=lab_x7_biohazard_check_actor_outfit -lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, {=lab_x7_biohazard_check_actor_outfit +lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit [sr_timer@no_bioprotection_outfit] type = dec start_value = 72000 on_value = 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_turned_on} nil string = lab_x7_biohazard_attention [sr_timer@with_bioprotection_outfit] type = dec start_value = 144000 on_value = 0 | nil %=aes_kill_actor% on_actor_outside = sr_idle@biohazard on_info = {+lab_x7_ventilation_system_turned_on} nil string = lab_x7_biohazard_attention Скрипт: function lab_x7_biohazard_check_actor_outfit() local outfit = db.actor:item_in_slot(6) if outfit:section() == "ecolog_outfit" or outfit:section() == "protection_outfit" or outfit:section() == "seva_outfit" or outfit:section() == "medic_seva_outfit" or outfit:section() == "svoboda_scientific_outfit" or outfit:section() == "dolg_scientific_outfit" then db.actor:give_info_portion("lab_x7_actor_have_bioprotection_outfit") else return false end end Изменено 21 Марта 2015 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Charsi 440 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 , нужно проверять наличие объекта перед действиями с ним( в данном случае применения метода section). Желательно принять за правило, что функция, вызываемая в качестве условия, предполагает, что её результат будет логическим значением. local vaild_outfits = { ["ecolog_outfit"] = true, ["protection_outfit"] = true, ["seva_outfit"] = true, ["medic_seva_outfit"] = true, ["svoboda_scientific_outfit"] = true, ["dolg_scientific_outfit"] = true} function lab_x7_biohazard_check_actor_outfit() local outfit = db.actor:item_in_slot(6) if outfit and vaild_outfits[outfit:section()] then db.actor:give_info_portion("lab_x7_actor_have_bioprotection_outfit") return true else return false end end 1 2 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Nazgool 250 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 (изменено) Посмотрел только функцию lab_x7_biohazard_check_actor_outfit. Кондишены должны возвращать либо true либо false. false у тебя может возвратиться. А true где? Поправь ... db.actor:give_info_portion("lab_x7_actor_have_bioprotection_outfit") return true ... З.Ы. Опоздал ) Изменено 21 Марта 2015 пользователем Nazgool Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти