Dennis_Chikin 3 658 Опубликовано 30 Января 2015 Автор Поделиться Опубликовано 30 Января 2015 (изменено) "Вскрытие показало, что больной умер от вскрытия."Тема для "крупной формы", то есть, на уровне скриптов целиком или больших частей оных скриптов. "Что у него внутри, зачем оно там, и что с этим можно сделать ?" Изменено 30 Января 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 1 Мая 2016 Поделиться Опубликовано 1 Мая 2016 (изменено) @Zander_driver, мне кажется, полезно будет сделать snd_ini = system_ini() вместо snd_ini = ini_file("misc\\script_sound.ltx") В самом script_sound.ltx добавить определенный префикс ко всем секциям. Я использую "script_sound.". Конечно не забыть этот ltx за-include-ить в системные конфиги. А в самом скрипте добавить этот префикс везде, где используются имена секций. Какой смысла загружать script_sound.ltx при загрузке каждого сейва, если это можно сделать один раз, при первом запуске игры. Это, на мой взгляд, полезно сделать вообще для всех таких конфигов, типа death_generic, treasure_manager и т.п. Изменено 1 Мая 2016 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Zander_driver 10 333 Опубликовано 1 Мая 2016 Поделиться Опубликовано 1 Мая 2016 (изменено) Формально это полезно, но вообще то как раз из разряда тех "оптимизаций" которые добавляют считанные микросекунды и мало что меняют. Тем более что это "изменение" расположено во время загрузки... Загружу я сейв за 40 секунд, или за 40,1 - мне от такого ни холодно ни жарко. впрочем, это мое предположение, я это не тестировал. Если результаты тестов покажут что я ошибаюсь, возьму свои слова назад) Изменено 1 Мая 2016 пользователем Zander_driver 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Мая 2016 Автор Поделиться Опубликовано 6 Мая 2016 "История одной пессимизации", смею напомнить, да... Всего-то 2 минуты вместо 40 секунд оригинала и 5 секунд для сделанного по-человечески. Это к тому, что не все ltxы надо пихать во все подряд, и не все, что можно запихнуть в ltxы - нужно запихивать в ltxы. Касательно же звука, рекомендую поискать в теме "разработки" солянковской. Там все разжевано весьма избыточно. И про чтение конфига, и про загрузку в неписей и прочие громкоговорители с вертолетами, и что с этим делать. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 333 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 (изменено) Касательно же звука, рекомендую поискать в теме "разработки" солянковской Смею заметить, инструкции к подключению скриптовых модулей, выкладываются все же не так. Я думаю ты помнишь когда я сам об этом спрашивал. Твой ответ тот раз был примерно такой же. Изменено 6 Мая 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Мая 2016 Автор Поделиться Опубликовано 6 Мая 2016 Ну, там не инструкция, там разбор полетов. И готовый код. К которому надо еще все звуки отслушать и переложить правильно. Смысл же дублировать ? Сам же знаешь, что все равно ни кто читать не будет, зато будет очередная пачка Униженных и Оскорбленных. Помнится, когда в тот раз выкладывалось, нашлось сразу с десяток этих самых униженных и оскорбленных тем, что я указал на БТР, у которого из двигателя звуки балалайки доносятся. Вот мне уже 4 года это напоминать не устают - как я Унизил И Оскорбил Очень Уважаемых Людей, а также грубо нарушил ихние аффтырьские права. И, разумеется, исправлять проблемы ни кто не собирается в принципе. Мыши плакали, кололись, но продолжали жрать кактус. Суть кактуса описана здесь: http://www.amk-team.ru/forum/topic/8830-narodnaia-2010-razrabotka/page-34#entry763618ну и далее, вот по сюда: http://www.amk-team.ru/forum/topic/8830-narodnaia-2010-razrabotka/page-39#entry794407 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 Две минуты. 40 секунд. Во первых, это же зависит от кол-ва загружаемого, да? А во вторых, насколько я вижу, основное время тратиться в npc:add_sound() и что-то я не вижу никакого способа это ускорить. Ведь ему нельзя передать уже загруженный звук. Да и не имеет это смысла. Насколько я вижу в исходниках, он сам звуки кэширует и не загружает с диска уже загруженный звук. Что касается скрипта, так у меня, к примеру, он не дал никакого ускорения. Как было около 14 секунд на звуки при холодном старте, и примерно 4 при повторной загрузке сейва (в Баре), так и осталось. Мне собственно не понятно даже, а как там что-то может ускоряться. Насколько я вижу, по сути, скрипт кэширует результаты check_prefix() и чтение ltx-а. Ни первое, ни второе кэшировать нет смысла. Первое - это string.sub() и второе такое же движковое. Миллисекунды максимум. Совершенно не в обиду сказано. Может я чего не заметил? Тогда ткните меня носом, где именно там ускорение должно происходить? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Мая 2016 Автор Поделиться Опубликовано 6 Мая 2016 "Насколько я вижу в исходниках, он сам звуки кэширует и не загружает с диска уже загруженный звук." Именно так. По-этому, перекладываем одинаковые звуки по соответствующему пути, и прописываем им тип 2 или 3. В результате - одинаковые звуки читаются один раз. (2 минуты и 40 секунд - это несколько про другое. Здесь - скорее про лаги уже по ходу игры. Впрочем, некоторая разница, в районе десятка секунд при загрузке, скажем, в "деревне новичков" и тем более, центре бара - будет. Плюс к тому уникальные звуки надо вынести по уникальным путям, и грузить вообще не через themes. Ибо если включить лог, и посмотреть, кому что читается - это - страшно. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 Именно так. По-этому, перекладываем одинаковые звуки по соответствующему пути, и прописываем им тип 2 или 3. В результате - одинаковые звуки читаются один раз. Ну вот, собственно. Самая лучшая оптимизация - это разгребание этих самых звуков, как ты и писал про конюшни. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Zander_driver 10 333 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 Может я чего не заметил? Наверное тестов моих не заметил. Там цифры какие-то есть, и они почему-то разные. Плюс к тому уникальные звуки надо вынести по уникальным путям, и грузить вообще не через themes. Ибо если включить лог, и посмотреть, кому что читается - это - страшно. Вот это справедливо, плюсую. логи включал, смотрел, выпадал в осадок от увиденного. зы. кактусы не люблю, мышью быть не хочется Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
dsh 3 824 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 Наверное тестов моих не заметил. Там цифры какие-то есть, и они почему-то разные. Не, ну я не знаю, что там у тебя раньше было-то. Может предыдущий скрипт, ltx в цикле каждый раз заново читал или еще что-нибудь подобное. Я вижу только то, что есть сейчас, а в нем ничего ускорительного не нахожу. Вот и пишу, может у меня взгляд замылился и я чего-то в упор не замечаю. Ты словами и конкретными строками поясни, в чем именно ускорение? И это я не просто что-бы поспорить, а что бы понять. Вообще, насколько я себе представляю кухню npc:add_sound(). Да, сделано не красиво с точки зрения искусства. В непися загружаются все звуки, в том числе и те, которые он использовать не будет. Типа речей Сахарова или что там еще есть. Но что происходит внутри? Выходит в онлайн первый непись. В него загружается все. А на самом деле, загружаются звуки в некоторый, назовем его так, кэш. А в непися грузится табличка с id этих звуков. Далее выходит в онлайн второй непись. В него загружаются все звуки опять. Но так как они уже загружены в тот "кэш" первым неписем, то самой загрузки уже не происходит, а во второго непися загружается только табличка с id звуков. И так далее для каждого следующего. Что тут можно ускорить? Даже если убрать загрузку всех звуков в непися и оставить только те, которые он может использовать, это ускорит процесс только на время однократного чтения тех, лишних, звуков. Стоит-ли оно того? А может у меня неверное представление и все происходит совсем по другому? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Мая 2016 Автор Поделиться Опубликовано 6 Мая 2016 Ну вот например звуки бормотания зомбей и раненых по psy_health. Почему-то читаются очень долго. Дублированы для ВСЕХ профилей. То есть, нужно во-первых переложить в один каталог для всех, и выставить тип "общего" - то есть, брать из того каталога, а не из синтетического, с профилем. То есть, оно тогда прочитается только один раз, а не столько, сколько неписей с разными профилями находится в онлайне. Во вторых, стоит подумать о том, чтобы вообще тему подгружать из xr_wounded, раз уж там включаются. Когда включать собрались. Что это даст: отсутствие лага при входе в онлайн непися с новым профилем. Сокращение времени загрузки в местах с толпами неписей. А сахаров не нужен ни кому, кроме собственно сахарова. Это даст как сокращение лагов, так и собственно загрузки. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 333 Опубликовано 7 Мая 2016 Поделиться Опубликовано 7 Мая 2016 (изменено) Не, ну я не знаю, что там у тебя раньше было-то sound_theme.script оригинального ТЧ был. Там как бы сама кухня эта, в процессе определения кому и какие звуки подрубать в npc:add_sound() - уже сама по себе жрала прилично, потому что цикл, а в нем еще цикл, а в нем может быть еще, а внутри вызываем функции но результаты их работы никуда не запоминаем и потому дергаем на каждой итерации цикла заново. Вот это безобразие и исправил, результат - в посте под спойлером. Про внутри-движковое кэширование звуков я тоже в курсе, видел его проявление в логах, вот только нпс с профилем, таким же как у кого-то из уже загруженных неписей, грузился на оригинальной "кухне" в три раза дольше при всем движковом кэшировании. Изменено 7 Мая 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Zander_driver 10 333 Опубликовано 7 Мая 2016 Поделиться Опубликовано 7 Мая 2016 (изменено) Кстати Денис, я тебя конечно уважаю, но http://www.amk-team.ru/forum/topic/13078-prozektorskaia/?view=findpost&p=904591 ты прости, работу этого файла проверял? игру с ним запускал? Я между прочим знаю что нет. Не проверял, не тестировал, не запускал. История то давняя... когда этот файл тут появился, я его сначала в WinMerge открывал. там просто все оранжевое) ладно думаю, попробую напролом. поменял свой старый на этот. вылет, один, другой, третий. отложил на потом. Вот пришло это потом, стал ковыряться в чем дело... local c_wnp = _G.c_wpn or {} -- здесь должна быть табличка clsid стволов. объявляешь ее локально для модуля как c_wnp, потом в модуле используешь как c_wpn. Просто некрасиво но сразу доказывает что код тупо не проверялся на вот такие ляпы. Дальше веселее. function parse_data1( s ) function parse_syn_data( s ) функции находятся прямо в коде модуля. и в этом же модуле далее по тексту local t_def_nil = { ["meet_state"] = parse_data1( "5|wait@wait" ), ["meet_state_wpn"] = parse_data1( "5|backoff@threat_weap" ), ["victim"] = parse_data1( "5|actor" ), ["victim_wpn"] = parse_data1( "5|actor" ), ["use"] = { { ["section"] = "true", ["infop_check"] = {}, ["infop_set"] = {} } }, ["use_wpn"] = { { ["section"] = "false", ["infop_check"] = {}, ["infop_set"] = {} } }, ["syndata"] = parse_syn_data( "backoff@threat_weap" ), ["init_meet"] = "talk_hello", ["precond"] = "visibility", ["abuse"] = "true" } т.е. элементы таблицы, локально объявленной для данного модуля, мы формируем с помощью функции которая находится в этом же модуле. Знаете это видимо заразно. Писать индусский-солянкоподобный код который по щучьему велению что-то может быть делает а может быть нет, но проверять делает ли он вообще что то и работает ли, мы не будем, не царское это дело. Разжевываю для тех кто не понял. При первом упоминании xr_meet где-нибудь, движок приступает к компиляции модуля. Модуль будет доступен тогда, когда она завершится, до этого - он как бы еще не существует. и вот компилятор добирается до строчки ["meet_state"] = parse_data1( "5|wait@wait" ), он видит parse_data1. ее как бы надо вызвать, но где она? в этом же модуле который еще не собран. т.е. функция - не доступна. И знаете что происходит? компиляция прекращается на этом самом месте, что несложно установить просто поставив вызовы printf("проверка") между функций и таблиц. Компиляция обрывается, вернув скомпилированный обрубок кода в качестве модуля. проверки if xr_meet then return true end - исправно возвращают true, функции расположенные в нем ДО проблемного места исправно работают. Кусок кода расположенный ПОСЛЕ этого чудного маневра, просто отваливается. И такое выкладывается на публику, пользуйтесь мол, господа, а если у вас что-то вылетает так вы сами криворучки. Солянка блин, во всей своей красе и заразности. 2016 год на дворе. Изменено 7 Мая 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Struck 61 Опубликовано 7 Мая 2016 Поделиться Опубликовано 7 Мая 2016 Че ты взъелся? Все, кто пишет на луа не первый год, знают о видимости переменных и докапываться до такого совершенно не серьезно. У Дениса хорошие решения, и он там все подписал, кто не понял - сам виноват. Со звуками поддержу, беда-беда, причем катастрофическая и везде. Планово переписывается, сложного ничего нет вообще. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Мая 2016 Автор Поделиться Опубликовано 8 Мая 2016 (изменено) "ты прости, работу этого файла проверял? игру с ним запускал? Я между прочим знаю что нет. Не проверял, не тестировал, не запускал." Ты неправильно знаешь. Про затычку там написано. Если определено, хоть где-то, то работает. Ага, опечатка c_wnp - да, имеет место быть, но вот проверить проблему именно с ней - по понятной причине невозможно. В чем проблема с обратиться к функции, описанной до обращения - ВАЩЕ ни панимаю. Судя по тому, что ты используешь printf, который У ТЕБЯ работает - это какие-то проблемы с особенностями твоего компилятора. P.S. И, да, опечатки в именах переменных - это вечная проблема языков без нормального декларирования оных переменных. Хорошо, когда переменная нигде больше не определена, и получаем вылет. Если, как у меня, определена в global_space - ну не выловить ни какими тестами. 8( Хоть тресни, но работает, пока кто-нибудь не займется переносом. Изменено 8 Мая 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 333 Опубликовано 8 Мая 2016 Поделиться Опубликовано 8 Мая 2016 (изменено) В чем проблема с обратиться к функции, описанной до обращения - ВАЩЕ ни панимаю. в том что модуль еще не собран. а она нужна для его сбора. Денис, я же не утверждаю что ты какую-то чепуху написал. Скрипт в конечном итоге полезный, и я его к своему моду прикрутил, но для этого мне потребовалось над ним изрядно поколдовать - сбор этих таблиц упаковать в функцию, и дергать ее из известных мест... для тебя, для меня, это не проблема, сделать чтобы вот этот выложенный тобою скрипт, работал. Но выкладывать работу в таком виде, когда для подключения к чему-угодно она требует определенных танцев с бубном при наличии определенных знаний - это не красиво как минимум, не стоит так делать имхо. А вот представь что человек ничего не смыслящий в скриптах, не скриптер вообще, возьмет твой файл и попробует поставить в свой проект. Что будет? у него ничего не получится. Желательно все же скрипты выкладывать в таком виде чтоб их могли не-скриптеры использовать. Изменено 8 Мая 2016 пользователем Ааз 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Мая 2016 Автор Поделиться Опубликовано 8 Мая 2016 (изменено) Если их выкладывать "в таком виде" - а это как ? Опять передавать в xr_logic непися с гулагом, чтобы он там благополучно повис, хотя достаточно простого разбора в таблицу простой строки ? Угадать, какое оружие используется у этого "не-скриптера", и магическим образом сделать так, чтобы он скачивал файл с индивидуально заполненной под него табличкой ? Или опять откатиться до if object_type(obj) == "item", и получить роскошный висяк, если item почему-то оказался ни разу не оружием ? Опять везде вернуть чертово if db.actor then db.actor:чегототам(), которое ни от чего не спасает, но само по себе раздолье для вот таких вот опечаток с переставленными буквами ? Я просто не понимаю: ну ВОТ КАК ??? Кроме того, что все описано в комментариях непосредственно в начале файла. Опиши, если не сильно затрудняет. P.S. function test_jit() return true end if test_jit() then log( "info", "test_jit ok" ) end! Cannot find saved game ~info~ [cheat] test_jit ok ЧТО Я ДЕЛАЮ НЕ ТАК ??? Изменено 8 Мая 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 333 Опубликовано 8 Мая 2016 Поделиться Опубликовано 8 Мая 2016 Да причем тут xr_logic и откат к древнеиндусским монстрокодам. Я же не об этом толкую блин. Просто чтобы файл требовал меньше телодвижений при его подключении к произвольно-стороннему проекту. ну ВОТ КАК ??? -- Функция чтения настроек. В нее передается секция, откуда их нужно читать. local t_def_nil local t_def_kamp local t_def_fotoman local t_def_bandit local t_def_other function init_tables() t_def_nil = { ["meet_state"] = parse_data1( "5|wait@wait" ), и тэ дэ по тексту... Ну вот так например. local xr_meet_initialized = false function init() if not xr_meet_initialized then init_tables() xr_meet_initialized = true end return true end и вот так. И наконец в начале функций где эти таблички используются, вот так. function init_meet( npc, ini, sect, st, scheme ) xr_meet.init() далее тело функции И все будет крутиться само при помещении этого файла в какой угодно проект. Список clsid стволов согласен, должны уж сами догадываться занести. Впрочем я вряд ли ошибусь, если скажу что в большинстве модов этот список не отличается от оригинала. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Мая 2016 Автор Поделиться Опубликовано 8 Мая 2016 Смысл этих шаманских плясок ? Я реально не понимаю, что у тебя за компилятор такой, который компилирует/запускает не построчно. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 333 Опубликовано 8 Мая 2016 Поделиться Опубликовано 8 Мая 2016 (изменено) Не считая расширения от RvP, у меня стандартный движок ТЧ. Оригинальный. Как можно запустить построчно, скомпилировав только часть - вот это мне интересно. Мы тут собрали пол-функции, что там дальше еще не знаем, но вы уже можете ее вызвать - так чтоли? И что будет выполняться при вызове такой функции... Может быть стоит обращать внимание на то, что после чего создается, и что после чего может быть создано. Нельзя вычислить сумму а и б до тех пор пока мы не узнаем чему равны а и б например, это просто логично. И у меня такое ощущение что ты это упускаешь из виду) Изменено 8 Мая 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти