igor klesarev Опубликовано 18 августа, 2018 Опубликовано 18 августа, 2018 (изменено) 18.08.2018 17:45:47, Azazellz сказал(-а): Вот скажи, где ты в моем варианте скрипта увидел { } такие вот скобки? Почему у меня их нет, а в твоем скрипте в этих скобках оказался весь скрипт целиком, кроме финального property? Яхз как они там работают, но у меня есть ощущение, что это что-то по типу комментария. Т.е. в этом случае в твоем скрипте после компиляция не остается ничего, кроме property. Естественно, такая конструкция работать не будет. Извиняюсь,ступил,понадеявшись на образец.Без скобок выдает loop did not match anything at input 'Auto' D:\games\Elder Scrolls Skyrim\Data\Scripts\Source\temp\AddSpell.psc(3,25): mismatched input '\\r\\n' expecting STATE.Удалил Auto во второй строчке и заклинание появилось.Хоть и без оповещений как у азидалова поджига,но это не критично. Изменено 18 августа, 2018 пользователем igor klesarev
Azazellz Опубликовано 18 августа, 2018 Опубликовано 18 августа, 2018 (изменено) 18.08.2018 18:23:30, igor klesarev сказал(-а):А без них выдает Starting 1 compile threads for 1 files... Потому что у тебя на третьей строчке ерунда какая-то стоит. Выше в моем сообщении готовый и рабочий скрипт лежит. Создаешь новый скрипт с именем GodsCloak, копируешь в него содержимое, и используешь. Ну или у себя убираешь вот эти вот {} скобки и третью строчку целиком. Изменено 18 августа, 2018 пользователем Azazellz
UntitledX Опубликовано 21 августа, 2018 Опубликовано 21 августа, 2018 (изменено) Доброго вечерочка! СпойлерХотелось бы узнать вашего совета. Захотелось попробовать себя в создании сцен Actor Dialogue Event, не сразу, но получилось. Теперь, захотелось двинуться дальше. Почему бы спутнику, не начать реагировать на сторонние сцены? Начал с квеста MS06Start Мужчина, который кричал "Волки" Когда ГГ входит в Синий дворец, триггером активирует квест MS06Start, Варний начинает диалог. Заготовка: Я проследил последовательность Phase и Action в этой сцене. Что бы не ковырять оригинал, сделал новый квест, поставил TRIGSpecificActor, на тот случай, если ГГ придет один, а не компанией. Результат: ГГ поднимается на балкон, Варний начинает диалог, спутник делает вид заинтересованности, встает сзади Варния и слушает весь диалог, по окончании, выдает свое мнение о его "ложной" тревожности. Занавес. Такой же триггер стоит в пещере, где спутник видит Потему, и комментирует это, далеко не ложной тревогой. Занавес. Так вот теперь меня осенило, что если в первый раз ГГ придет один, а во второй раз с этим разговорчивым спутником? Проверил... Занавес открылся :) Спутник пытается повторить все действия из своей сцены, но фазы в ней, отслеживают действия в сцене Варния. Занавес застрял :( Если брать триггер, который активирует ГГ, то спутник, согласно заложенному пакету в сцене (типа мне тоже интересно, я послушаю) идет в Солитьюд, в этом я убедился, портанув ГГ консолью к спутнику, который уверенным шагом топал по дорожке. Все что мне пришло на ум, так это еще один квест, который будет следить и отключать триггеры, если MS06Start выше 5 и т.д. и включать если MS06 = 50, и т.д. Заготовил Alias(ы) во втором квесте, расписал действия в блокноте: MS06Start.GetStage() > 5 (Варний начинает диалог на 5 стадии) Alias_TriggerMS06Start10.GetReference().Disable() (пустой старт квеста содержащий сцены) Alias_TriggerMS06Start20.GetReference().Disable() (именно тут спутник слушает первый диалог) MS06Start.GetStage() > 100 (пора возвращаться к Фолку) Alias_TriggerMS06DetectPotema.GetReference().Disable() (спутник откомментировал присутствие Потемы) Для следующего квеста: MS06.GetStage() == 50 (в тот момент когда Фолк посылает нас :) к Стирру. Активировать триггер, запускающий сцену? Или сразу запустить сцену?) Alias_TriggerMS06ListenFolk.GetReference().Enable() (спутник откомментировал принятие квеста (не сработало) MS06.GetStage() > 100 (стоит ли так отключать, вдруг ГГ вернется в Синий дворец раньше встречи со Стирром, наверно лучше вырубить сразу, как закончится сцена) Alias_TriggerMS06ListenFolk.GetReference().Disable() И тут мой мозг застыл. Я не пойму в каком виде все это реализовать. Думал по стадиям в "следящем" квесте, но не уверен, что квест вовремя на них будет перескакивать. Если слежение по стадиям запустить по кругу с начала игры/квеста, триггеры будут мигать как огни на елке, это такая каша будет... что сама Потема взвоет, если Скайрим раньше не закроет занавес. Или можно как-то еще отключать триггеры, если спутника не было рядом? Хотел узнать совета, но теперь жду приговор :) Убрал все под спойлер, кажется сам нашел решение. Изменено 21 августа, 2018 пользователем UntitledX
Leh Опубликовано 24 августа, 2018 Опубликовано 24 августа, 2018 Очень надоело перепиливать консолью поместья Озерное и прочие. Хочется сделать это модом, но ни одного нормального мода на обстановку поместья я не видел. Имеет ли смысл заниматься таким модом или там все так заскриптовано, что тронешь одно и все посыпется? При условии, что в скриптах я ничего не смыслю, а мой СС главный строительный скрипт "BIOHHouse Building" (кажется так он называется) вообще не грузит и на него ругается.
Azazellz Опубликовано 24 августа, 2018 Опубликовано 24 августа, 2018 (изменено) 24.08.2018 09:50:32, Leh сказал(-а): Очень надоело перепиливать консолью поместья Озерное и прочие. Хочется сделать это модом, но ни одного нормального мода на обстановку поместья я не видел. Имеет ли смысл заниматься таким модом или там все так заскриптовано, что тронешь одно и все посыпется? При условии, что в скриптах я ничего не смыслю, а мой СС главный строительный скрипт "BIOHHouse Building" (кажется так он называется) вообще не грузит и на него ругается. Есть вот такая штука. Теоретически позволяет "вырезать" содержимое ячейки (то бишь обстановку твоего дома) как отдельный мод с .esp-файлом. Но сам я им не пользовался, так что хз, насколько это реально и сложно. Изменено 24 августа, 2018 пользователем Azazellz
Vita2016 Опубликовано 25 августа, 2018 Опубликовано 25 августа, 2018 Добрый день! Я нуб в модостроении, сейчас делаю свой мод, в котором в результате диалога с NPC предполагается триггер события из другого мода. Автор второго мода оставил для этого такой код: Function game.Getplayer.SLHHActivate(Actor pTarget, Actor pTargetFriend = None) Keyword SLHHScriptEventKeyword = Game.GetFormFromFile(0x0000C510, "SLHH.esp") as Keyword SLHHScriptEventKeyword.SendStoryEvent(None, pTarget, pTargetFriend) endFunction Я попытался вставить этот код в разделе Creation Kit Character/Quest/DialogViews/DialogBranch/Response - в поле фрагмента скрипта "end" (как на скриншоте), но он не хочет там компилироваться с ошибкой: Debug message: ...(11,0): mismatched input 'Function' expecting ENDFUNCTION ...(18,0): missing EOF at 'EndFunction' Подскажите, что я не так делаю?
Vita2016 Опубликовано 25 августа, 2018 Опубликовано 25 августа, 2018 проблему решил. там не нужна была функция
stanislavd Опубликовано 5 сентября, 2018 Опубликовано 5 сентября, 2018 приветствую! есть 2 задачи: 1) в локации harmugstahl есть квест с открыванием прохода. 4 переключателя двигают 4 пики, после их убирания пики стоящие сзади тоже убираются. как заменить эти 4 пики на 4 водопада, а пики стоящие сзади на открывание двери? полностью все элементы квеста я скопировал в свою локу. либо сделать так чтобы каждый водопад был привязан ко своей пике. пика выдвинута, водопад отключён, задвинута - включён.. скрипт по включению и отключению предметов есть: Bool bToggle ObjectReference Property MyThing1 Auto Event OnActivate(ObjectReference akActionRef) MyThing1.Disable() bToggle = !bToggle If bToggle ; True MyThing1.Enable() Else ; False EndIf EndEvent 2) с тестлоки беседки ware... скопировал паука (триггер, маркер, анимация спуска)... - нужно сделать его респаун, т.е. при его убийстве он должен опять ресануться таких точек 10)... - после некоторого количества убитых пауков реснулся паук в другом такомже месте (генерится только 1 раз)... - после убиства этого паука генерация полностью закрывается...
Azazellz Опубликовано 5 сентября, 2018 Опубликовано 5 сентября, 2018 (изменено) 05.09.2018 12:40:30, stanislavd сказал(-а): полностью все элементы квеста я скопировал в свою локу. Так ты их не копируй бездумно Ты разберись, как оно работает. У тебя же все исходники есть - в СК лежат. 05.09.2018 12:40:30, stanislavd сказал(-а): 2) с тестлоки беседки ware... скопировал паука (триггер, маркер, анимация спуска)... - нужно сделать его респаун, т.е. при его убийстве он должен опять ресануться таких точек 10)... - после некоторого количества убитых пауков реснулся паук в другом такомже месте (генерится только 1 раз)... - после убиства этого паука генерация полностью закрывается... В игре существуют defaultQuestRespawn (квест), а так же defaultAliasRespawnScript и defaultQuestRespawnScript (скрипты). Прям в самом скае, сделано разработчиками. Как раз делают респавн того, что забито в алиас квеста. Копай туда. Хотя он не совсем то делает, как я понимаю - тебе нужны ambushes, а это просто спавнит цель на маркеры. Попробуй вместо placeatme юзать reset на пауков, которые внутри ambush'а сидят. Изменено 5 сентября, 2018 пользователем Azazellz
stanislavd Опубликовано 5 сентября, 2018 Опубликовано 5 сентября, 2018 так я и пытаюсь разобраться... стоит на отшибе.. я же написал что либо сделать подмену, либо связать с элемент.. пауки не забиты в квест.. просто жители локи...
Azazellz Опубликовано 5 сентября, 2018 Опубликовано 5 сентября, 2018 05.09.2018 15:20:16, stanislavd сказал(-а):так я и пытаюсь разобраться... стоит на отшибе.. я же написал что либо сделать подмену, либо связать с элемент.. Ну тогда вот тебе туториал на скриптовый рычаг. А тут в секции Basic Activation Parenting есть инструкция по связи объектов и рычагов. Тебе нужен, скорее, первый - на скриптах. Водопады "активироваться" не умеют - их надо "включать" и "отключать" (enable\disable). 05.09.2018 15:20:16, stanislavd сказал(-а):пауки не забиты в квест.. просто жители локи... Ну так сделай квест, скрипты которого будут оперировать этими пауками. Скайрим - это скриптовая игра. И огромная часть скриптов работает как раз через квесты. Вампиризм или ликантропия? Это квест. Система спутников? Тоже квест. Ну и все в таком духе.
stanislavd Опубликовано 6 сентября, 2018 Опубликовано 6 сентября, 2018 С помощью рычага enable и default элементов я делал... Выше как раз такой скрипт и написан... Меня интересует г-образные триггеры в квесте той локации... По ним информацию нормальную получить... Через них идёт связь с элементами...
stanislavd Опубликовано 6 сентября, 2018 Опубликовано 6 сентября, 2018 (изменено) как я понял этот элемент (TrapLinker) служит передатчиком активного состояния... поэтому требуется преобразовать скрипт на состояние TrapLinker: Bool bToggle ObjectReference Property MyThing1 Auto Event OnActivate(ObjectReference akActionRef) MyThing1.Disable() bToggle = !bToggle If bToggle ; True MyThing1.Enable() Else ; False EndIf EndEvent потому что скрипт отслеживает состояние рычага... его функция заключается в том, что можно вешать большое количество элементов, которые будут срабатывать одновременно... без него срабатывание идет последовательно, так как элементы цепляют друг за другом... а не на рычаг... тоже самое можно сделать и на пике.. но как??? если найдется решение, то автоматом сделается и другой мой квест.. Изменено 6 сентября, 2018 пользователем stanislavd
Azazellz Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) 06.09.2018 19:38:41, stanislavd сказал(-а):его функция заключается в том, что можно вешать большое количество элементов, которые будут срабатывать одновременно... Открою секрет - в скрипт можно запихивать и больше одного disable и enable. И их можно даже комбинировать. И управлять скрипт может огромным числом объектов, а не чем-то одним. MyThing1.Disable() MyThing2.Disable() MyThing3.Disable() Отключатся все три "MyThing". MyThing1.Disable() MyThing2.Enable() MyThing3.Disable() Отключается первая и третья "MyThing", а вторая - включается. ТрапЛинкер тебе тут не нужен совершенно. Изменено 7 сентября, 2018 пользователем Azazellz
stanislavd Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) твой секрет мне известен был еще в 14 году... задача состоит не в том чтобы это делать, а чтобы это привязать! квест с копьями из локации: 4 рычага - 4 копья, и на другом траплинкере колизия и копья... мне надо либо привязать к копьям, либо заменить (вместо копий поставить водопады) траплинкер нужен для одновременного запуска...я в разрыв поставил отдельно траплинкер на одно копьё и оно работает... Изменено 7 сентября, 2018 пользователем stanislavd
stanislavd Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) хорошо, тогда другая задача: как отследить что все 4 водопада включены? 3 из них? 2 из них? или один из них? это во первых... во вторых мне нужен сам квест с пиками...чтобы можно было включить все водопады... а так по твоей формуле какието водопады будут постоянно отключены!!! Изменено 7 сентября, 2018 пользователем stanislavd
stanislavd Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) вот тебе скрипт квеста: scriptName dunHarmugstahlLeverScript extends objectReference import Debug import Utility ObjectReference Property doorStart Auto ObjectReference Property door01 Auto ObjectReference Property door02 Auto ObjectReference Property door03 Auto ObjectReference Property door04 Auto ObjectReference Property door05 Auto ;ObjectReference Property doorController Auto ObjectReference Property lever01 Auto ObjectReference Property lever02 Auto ObjectReference Property lever03 Auto ObjectReference Property lever04 Auto ObjectReference Property startTrigger Auto default2StateActivator door01Script default2StateActivator door02Script default2StateActivator door03Script default2StateActivator door04Script ObjectReference Property Collision Auto bool isComplete = false event OnCellLoad() door01Script = door01 as default2StateActivator door02Script = door02 as default2StateActivator door03Script = door03 as default2StateActivator door04Script = door04 as default2StateActivator door01script.SetOpen(False) door02script.SetOpen(False) door03script.SetOpen(False) door04script.SetOpen(False) endEvent event OnActivate (objectReference TriggerRef) ;checkAllOpen() if (isComplete == false) if (TriggerRef == lever01) openDoorPatternA() checkAllOpen() elseif (TriggerRef == lever02) openDoorPatternB() checkAllOpen() elseif (TriggerRef == lever03) openDoorPatternC() checkAllOpen() elseif (TriggerRef == lever04) openDoorPatternD() checkAllOpen() elseif (TriggerRef == startTrigger) ;Notification("Start Trigger") puzStart() endif endif endevent function puzStart() startTrigger.Disable() openDoorStart() endFunction function openDoorPatternA() lever01.BlockActivation() lever02.BlockActivation() lever03.BlockActivation() lever04.BlockActivation() openDoor01() openDoor02() lever01.BlockActivation(false) lever02.BlockActivation(false) lever03.BlockActivation(false) lever04.BlockActivation(false) endfunction function openDoorPatternB() lever01.BlockActivation() lever02.BlockActivation() lever03.BlockActivation() lever04.BlockActivation() openDoor01() openDoor02() openDoor03() lever01.BlockActivation(false) lever02.BlockActivation(false) lever03.BlockActivation(false) lever04.BlockActivation(false) endfunction function openDoorPatternC() lever01.BlockActivation() lever02.BlockActivation() lever03.BlockActivation() lever04.BlockActivation() openDoor02() openDoor03() openDoor04() lever01.BlockActivation(false) lever02.BlockActivation(false) lever03.BlockActivation(false) lever04.BlockActivation(false) endfunction function openDoorPatternD() lever01.BlockActivation() lever02.BlockActivation() lever03.BlockActivation() lever04.BlockActivation() openDoor03() openDoor04() lever01.BlockActivation(false) lever02.BlockActivation(false) lever03.BlockActivation(false) lever04.BlockActivation(false) endfunction function openDoor01() wait(0.1) door01script.SetOpen(!door01script.isOpen) endFunction function openDoor02() ;lever01.goToState( "Inactive" ) ;lever02.goToState( "Inactive" ) ;lever03.goToState( "Inactive" ) ;lever04.goToState( "Inactive" ) door02script.SetOpen(!door02script.isOpen) endFunction function openDoor03() ;lever01.goToState( "Inactive" ) ;lever02.goToState( "Inactive" ) ;lever03.goToState( "Inactive" ) ;lever04.goToState( "Inactive" ) door03script.SetOpen(!door03script.isOpen) endFunction function openDoor04() ;lever01.goToState( "Inactive" ) ;lever02.goToState( "Inactive" ) ;lever03.goToState( "Inactive" ) ;lever04.goToState( "Inactive" ) door04script.SetOpen(!door04script.isOpen) endFunction function openDoorStart() ;lever01.goToState( "Inactive" ) ;lever02.goToState( "Inactive" ) ;lever03.goToState( "Inactive" ) ;lever04.goToState( "Inactive" ) door05.Activate(self) ;openDoor01() ;openDoor02() ;openDoor03() ;openDoor04() endFunction function checkAllOpen() if (door01script.isOpen && door02script.isOpen && door03script.isOpen && door04script.isOpen) ;Notification("COMPLETED") isComplete = true lever01.goToState( "Inactive" ) lever02.goToState( "Inactive" ) lever03.goToState( "Inactive" ) lever04.goToState( "Inactive" ) lever01.BlockActivation() lever02.BlockActivation() lever03.BlockActivation() lever04.BlockActivation() Collision.Disable() door05.Activate(self) door01script.SetOpen(TRUE) door02script.SetOpen(TRUE) door03script.SetOpen(TRUE) door04script.SetOpen(TRUE) else ;Notification("NOT COMPLETED") endif endfunction сюда можно вставить MyThing1.Disable() и MyThing1.Enable() но лопатить придется прилично! чтобы он работал.... а можно привязать отслеживание состояния пики и относительно его включать и выключать водопад! вот я и спрашиваю как это сделать?! Изменено 7 сентября, 2018 пользователем stanislavd
Azazellz Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) Ну так привяжи к каждой пике свой скрипт с ивентом OnActivate, в котором и будет прописаны enable и disable для соответствующих водопадов.Пика активируется - водопад отключается. Еще раз активируется - водопад включается.Только механизм придумай, чтоб мониторить, в каком состоянии пика находится в момент ивента (bool какой-нибудь поставь, который каждым ивентом будет инвертироваться). 07.09.2018 08:05:40, stanislavd сказал(-а):хорошо, тогда другая задача: как отследить что все 4 водопада включены? 3 из них? 2 из них? или один из них?4 глобальных переменных ввести, по одной для каждого водопада, и по ним мониторить, например?07.09.2018 09:15:24, stanislavd сказал(-а):вот тебе скрипт квеста:Это не скрипт квеста, это портянка текста.Используй функцию кода, если хочешь что-то подобное вставить. Изменено 7 сентября, 2018 пользователем Azazellz
stanislavd Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) так я и пытаюсь это сделать... только то что я показывал в самом начале с относится к рычагу... вот мне и надо понять как сажать мониторинг на элементы типа пик...мелкие вещи я делать могу, а в остальном я нуб... вот где разжеванные уроки по написанию квестов: хмаркер (как носитель квеста), трамплинкеры (как передаточное звено), активаторы, исполняющие устройства??? поэтому я и пишу задачу.... но вместо ответа сплошная демогогия и пальцы веером... мне и нужен этот механизм о чём я и толкую давно... данный скрипт содержится в хмаркере в хормугстале.. и мои мизерные познания позволили поверхостно его прочитать... да кстати, как вводить тексты скриптов?? Изменено 7 сентября, 2018 пользователем stanislavd
Azazellz Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) Ты тут просто какую-то ерунду пишешь, а не "задачу". Задача это не "помогите связать пики и водопады, я все скопировал, но тут еще буква Г какая-то, что этовобщетакое?!?". Задача это "у меня есть проход, который должен быть закрыт водопадами, и чтоб игрок смог пройти через него - нужно отключить все водопады четырьмя рычагами, каждый из которых отключает и включает свой набор водопадов". Так что как ты спрашиваешь - так тебе и ответят. 07.09.2018 11:56:43, stanislavd сказал(-а):вот мне и надо понять как сажать мониторинг на элементы типа пик... Ну так берешь и делаешь коде переменную типа bool (может принимать два состояния - true или false). Блок IF Если bool истина - делаешь один код. Если bool ложь - делаешь второй код. Конец блока IF Инверсия bool (как-то так это должно работать, синтаксис папируса мне вспоминать лень). Можно еще это сделать через GlobalVariable. Делаешь 4 этих переменных в СК (или сколько тебе их нужно, на каждый водопад или пику). В скрипте, в зависимости от текущего состояния переменной, делаешь нужный тебе код, потом в конце этого кода меняешь значение переменной. Блок IF Если Переменная = 1 - делаешь код, ставишь переменную на 0. Если Переменная = 0 - делаешь код, ставишь переменную на 1. Конец IF Плюс такого метода в том, что можно чрезвычайно легко отследить внешним скриптом, в каком состоянии эти переменные находятся. 07.09.2018 11:56:43, stanislavd сказал(-а):вот где разжеванные уроки по написанию квестов: хмаркер (как носитель квеста), трамплинкеры (как передаточное звено), активаторы, исполняющие устройства??? Вперед на СК-вики. Все, что есть - все там. Если там этого нет - придумывай это сам, либо ищи моды, где это придумано до тебя, и разбирай, как оно там устроено. Короче, если тебе нужно что-то конкретное - опиши это конкретно. А не такой кашей, как у тебя сейчас. 07.09.2018 11:56:43, stanislavd сказал(-а):да кстати, как вводить тексты скриптов?? Кнопочка "Код" (<>) сверху. Жмешь, копируешь свой скрипт. Табуляция при этом сохраняется. Изменено 7 сентября, 2018 пользователем Azazellz
stanislavd Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 вообщето я в самом начале так и написал: в такойто локе есть такойто квес... и мне необходимо вместо пик поставить водопады.... либо прииязать вкл/выкл водопадов к состоянию пик этого квеста...
Azazellz Опубликовано 7 сентября, 2018 Опубликовано 7 сентября, 2018 (изменено) Ну вот и разбирайся тогда. Как TrapLinker работает - ссылка есть. На создание скриптовых и обычных рычагов ссылка есть. В СК тоже все есть в открытом виде. Информации достаточно. За тебя никто этот "квест" не сделает (и я в том числе, да). Если же ума понять, как оно все работает, не хватает - ну, значит пока не судьба. Отложи, что-нибудь другое поделай, потом с новым опытом вернешься. У меня такое постоянно бывает - и ничего, живу как-то =) Изменено 7 сентября, 2018 пользователем Azazellz
stanislavd Опубликовано 8 сентября, 2018 Опубликовано 8 сентября, 2018 Прикольно то, что ты не прочитав внимательно первый мой пост писал воды огромное количество! И в конце концов пришёл к тому же что написано было мной в самом начале беседы! Несколько дней потрачены на тебя в пустую!!! Мне весь квест за меня писать не надо! Мне нужно отслеживание состояния таких элементов как выдвигающаяся пика или передаточного звена траплинкера... Ты мне дать не всостоянии!... Отсюда возникает вопрос: зачем ты вмешиваешься в беседу выливая кучу волы и тратя чужое время?? Если ответа дать не можешь или не хочешь!!!
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти