Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Zagolski 74 Опубликовано 3 Июля 2017 Поделиться Опубликовано 3 Июля 2017 (изменено) Подскажите плз, что отвечает за невыпадение оружия из рук при убийстве непися, т.е. когда оно у него в руках остается и не берется с трупа? Скрипты это или движок - не имеет значения, хотя бы намекните где копать. Перестали вываливаться с мобов стволы и я в непонятках... После некоторых действий и в движке и в скриптах. Сразу я этого не заметил, а теперь не могу разобраться где вылез косяк. Изменено 3 Июля 2017 пользователем Zagolski Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 3 Июля 2017 Поделиться Опубликовано 3 Июля 2017 Вообще-то это делает движок. Если непись не висит. Ну а что где правилось для приведения движка в состояние полного изумления - это уже вопрос для телепатов. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Jekyll 92 Опубликовано 3 Июля 2017 Поделиться Опубликовано 3 Июля 2017 Здравствуйте. Как определить, что смерть одного монстра (неважно от чего) наступила на определенном расстоянии от другого монстра. Причем они не атаковали друг друга. Можно ли использовать для этого "distance_to"? Поясню. Если использовать в качестве "целевого монстра" актора, то все понятно и все работает как надо (при этом в смерти монстра актор не виноват), ссылка на сам скрипт в монстрячем death_callback'е. Скрытый текст function test(self) local monstr = self.object local pos = monstr:position() if monstr and monstr:section()=="dog_weak" and pos:distance_to(db.actor:position()) < 5 then .... end end Но как вместо db.actor впихнуть другого монстра? Либо здесь нужен иной подход? New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Ссылка на комментарий
UnLoaded 313 Опубликовано 3 Июля 2017 Поделиться Опубликовано 3 Июля 2017 Только что, Jekyll сказал: Но как вместо db.actor впихнуть другого монстра? Из смыслового понимания этой фразы, следует, что ГГ - это монстр. Прикольно... Собственно, по общему смыслу вопроса: а что мешает использовать "distance_to" для любого игрового объекта ? Метод абсолютно рабочий... Ссылка на комментарий
Jekyll 92 Опубликовано 3 Июля 2017 Поделиться Опубликовано 3 Июля 2017 Скрытый текст 26 минут назад, UnLoaded сказал: Прикольно... Если вырывать фразы из контекста, то да, прикольно... 27 минут назад, UnLoaded сказал: что мешает использовать "distance_to" для любого игрового объекта Мне не понятно, как в этом случае применить определенную секцию монстра. Не пропишешь же так: pos:distance_to("секция":position()). New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Ссылка на комментарий
gam 117 Опубликовано 4 Июля 2017 Поделиться Опубликовано 4 Июля 2017 (изменено) 14 часов назад, Jekyll сказал: Мне не понятно, как в этом случае применить определенную секцию монстра. Не пропишешь же так: pos:distance_to("секция":position()) Jekyll. На мой взгляд, ничто не мешает использовать готовые варианты разрабов, те реализовать как-то: например - в файле bind_monster.script для function generic_object_binder:death_callback(victim, who) внутри прописать условие: if IsMonster(who) then -- нужное значение дистанции больше\менньше if self.object:position():distance_to(who:position()) < 5 then -- код вставки end end Или как-то аналогично в файлах mob_death.script, или mob_alife_mgr.script, либо в подходящем для целей соответствующим mob_такой_то.script. Имхо. Изменено 4 Июля 2017 пользователем gam Ссылка на комментарий
Jekyll 92 Опубликовано 4 Июля 2017 Поделиться Опубликовано 4 Июля 2017 5 часов назад, gam сказал: в файле bind_monster.script для function generic_object_binder:death_callback(victim, who) внутри прописать условие: Хочу уточнить: приведенный здесь пример подразумевает систему "жертва-убийца", когда и жертва, и убийца известны? Точнее когда непосредственно между двумя монстрами (один - "self.object", другой - "who") произошло взаимодействие, закончившееся гибелью одного из них (первого) - так? Извиняйте за стиль изложения - издержки профессии. New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор Русификатор для игры Vendetta: Curse of Raven's Cry Ссылка на комментарий
Zagolski 74 Опубликовано 5 Июля 2017 Поделиться Опубликовано 5 Июля 2017 (изменено) Только что, Zagolski сказал: Подскажите плз, что отвечает за невыпадение оружия из рук при убийстве непися, т.е. когда оно у него в руках остается и не берется с трупа? Скрипты это или движок - не имеет значения, хотя бы намекните где копать. Перестали вываливаться с мобов стволы и я в непонятках... Как я понял, никто не знает. Ну и ладно. Я с этим разобрался, только опять не понял, где конкретно. В одном из stalker_...cpp файлов, то ли stalker_combat_planner.cpp, то ли в stalker_combat_actions.cpp. Точно проверять - перекомпиляцией заниматься не охота. До этого я переделывал инициализацию слотов на ЗП формат, так вот в нескольких этих файлах старая схема их получения осталась. Из-за этого оружие не выпадало из рук, а оставалсь прилепленным. Но в будущем, если подобное выпадение лута кто захочет сделать - копайте там. Изменено 5 Июля 2017 пользователем Zagolski Ссылка на комментарий
Dmitriy88kk 0 Опубликовано 8 Июля 2017 Поделиться Опубликовано 8 Июля 2017 Ребята,такой вот вопрос: хочу сделать чтобы в ЗП при лутании трупов выпадал броник рандомного состояния,но выпадал по сути,например: если убил бандита,то его же бронь,одиночку то одиночки и т.д. Знаю вот, нужно ковырятся в файле death_manager.script но с чего начать не знаю. Помогите,заранее спасибо! Ссылка на комментарий
WinCap 316 Опубликовано 8 Июля 2017 Поделиться Опубликовано 8 Июля 2017 @Dmitriy88kk Если делать без привязки к реально надетой на NPC броне, то проще прописать нужные броники в death_items_by_communities.ltx. 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Dmitriy88kk 0 Опубликовано 8 Июля 2017 Поделиться Опубликовано 8 Июля 2017 36 минут назад, WinCap сказал: @Dmitriy88kk Если делать без привязки к реально надетой на NPC броне, то проще прописать нужные броники в death_items_by_communities.ltx. Ну это да,проще,но хочу хоть какое-то разнообразие добавить в игру,ну и больше реалистики,так что прописать броники в death_items_by_communities.ltx. не вариант, а если не выйдет с death_manager.script то уже прописать в death_items_by_communities.ltx Ссылка на комментарий
UnLoaded 313 Опубликовано 8 Июля 2017 Поделиться Опубликовано 8 Июля 2017 1 час назад, Dmitriy88kk сказал: ... выпадал броник рандомного состояния,но выпадал по сути,например: если убил бандита,то его же бронь... Или подсмотреть, как сделано в модах, где подобная фишка уже реализована, или сделать самому. Как вариант, завести таблицу соответствия "визуал -> секция броника", соответственно по факту смерти непися получать визуал убиенного(тут наверное через нет-пакет, а может есть сразу готовый экспортированный метод), затем из таблицы выбирать соответствующую секцию и спавнить в инвентарь трупу. 1 Ссылка на комментарий
Zagolski 74 Опубликовано 8 Июля 2017 Поделиться Опубликовано 8 Июля 2017 (изменено) У меня давненько есть идея сделать всем неписям изначально базовый визуал - в свитере или вроде того, без броника. В профиле вместе с оружием спавнится неписи броник, он его одевает. Причем визуал непися зависит только от конкретного броника (он играет основную роль), который у него имеется в инвентаре. Соответственно, этот броник у него и выпадает. Это не столько для выпадения броников (конкретно это делается гораздо проще по вышеприведенному примеру), а вообще глобально на подобный способ переделать инициализацию визуалов НПС и их лута, броники в том числе. А вообще выпадение броников с трупов - дисбаланс, имхо. Только это меня пока и останавливает от воплощения приведенной выше затеи. Это так, пока мысли вслух. Изменено 8 Июля 2017 пользователем Zagolski Ссылка на комментарий
Nick_it_On 3 Опубликовано 9 Июля 2017 Поделиться Опубликовано 9 Июля 2017 Ребята, выручайте. Не знаю куда еще написать. В общем суть проблемы. Поставил на чистую игру ТЧ 1.0004 Slow medicine mod 0.2b, но при использовании аптечки или энергетика происходит вылет с логом : Скрытый текст FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: e:\games\s.t.a.l.k.e.r\gamedata\scripts\amk.script:45: attempt to index field 'pstor' (a nil value) Может кто сталкивался? Ссылка на комментарий
WinCap 316 Опубликовано 9 Июля 2017 Поделиться Опубликовано 9 Июля 2017 @Dmitriy88kk Попробуй следующий код: Скрытый текст В начале файла death_manager.script после всех локальных таблиц (т.е. перед функцией init_drop_settings()) нужно добавить таблицу: local outfit_from_visual = { ["actors\\stalker_bandit\\stalker_bandit_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_1"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_2"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_face_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_3_mask"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_4"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_1_face_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_face_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_3_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_1_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_face_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_face_2"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_3"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_3_face_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_cs_heavy"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_dolg_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_dolg_2"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_exo"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_freedom_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_freedom_2"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_military"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_neutral_nauchniy"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_novice_1"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_specops"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_stalker_1"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_1_face_1"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1_face_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_4"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_5"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_6"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_face_7"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_3_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_3"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_1_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_2"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_2_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_3_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_solider_ecolog_face_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_2"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_1"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_3"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_1"] = "novice_outfit", ["actors\\stalker_bandit\\stalker_bandit_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_1"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_face_2"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_2_mask"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_3"] = "novice_outfit", ["actors\\stalker_dolg\\stalker_dolg_4"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_1"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_2_mask"] = "novice_outfit", ["actors\\stalker_freedom\\stalker_freedom_4"] = "novice_outfit", ["actors\\stalker_hero\\stalker_hero_stc_strelok"] = "novice_outfit", ["actors\\stalker_lesnik\\stalker_lesnik_1"] = "novice_outfit", ["actors\\stalker_merc\\stalker_merc_2"] = "novice_outfit", ["actors\\stalker_merc\\stalker_merc_4"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_1"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_2"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_3"] = "novice_outfit", ["actors\\stalker_monolith\\stalker_monolith_4"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_1"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_2"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_3"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_face_4"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_2_mask"] = "novice_outfit", ["actors\\stalker_nebo\\stalker_nebo_3"] = "novice_outfit", ["actors\\stalker_nebo_2_face_1_pn_hm"] = "novice_outfit", ["actors\\stalker_nebo_2_face_hm"] = "novice_outfit", ["actors\\stalker_nebo_2_face_pn"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_1"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_2_mask"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_3"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_4"] = "novice_outfit", ["actors\\stalker_neutral\\stalker_neutral_nauchniy"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_ecolog_military"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_2"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_2_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_3"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_3_face_1"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_4"] = "novice_outfit", ["actors\\stalker_soldier\\stalker_soldier_ecolog_face_1"] = "novice_outfit", ["actors\\stalker_trader\\stalker_trader_1"] = "novice_outfit", ["actors\\stalker_ucheniy\\stalker_ucheniy_1"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_2"] = "novice_outfit", ["actors\\stalker_zombied\\stalker_zombied_4"] = "novice_outfit" } только броники нужные прописать. Далее в конце функции drop_manager:create_release_item() добавить код: local outfit = alife():create(outfit_from_visual[self.npc:get_visual_name()], self.npc:position(), self.npc:level_vertex_id(), self.npc:game_vertex_id(), self.npc:id()) level.client_spawn_manager():add(outfit.id, 0, function (id,obj) obj:set_condition((math.random(40)+40)/100) end) В принципе все работает, только на счет способа вызвать set_condition() я не уверен, подсмотрел здесь на форуме. S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
vampirnik77 121 Опубликовано 14 Июля 2017 Поделиться Опубликовано 14 Июля 2017 Доброго времени суток. Возник вопрос, простой вопрос, но меня он поставил в тупик. Как вызвать функцию один единственный раз за игру(при старте, при новой игре)? Официальная страница проекта Neof-One Crew Ссылка на комментарий
dsh 3 824 Опубликовано 14 Июля 2017 Поделиться Опубликовано 14 Июля 2017 @vampirnik77 ну, например в нетспауне актора проверяешь флаг. Если его нет, делаешь, что нужно и ставишь этот флаг. В качестве флага может использоваться поршень, а может и что угодно другое. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
vampirnik77 121 Опубликовано 14 Июля 2017 Поделиться Опубликовано 14 Июля 2017 @dsh Я так и собирался, думал может какие еще варианты есть. Официальная страница проекта Neof-One Crew Ссылка на комментарий
naxac 2 484 Опубликовано 15 Июля 2017 Поделиться Опубликовано 15 Июля 2017 @vampirnik77 , можно на месте спавна ГГ рестриктор поставить, который запустит функцию и после этого выключится/удалится. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
dsh 3 824 Опубликовано 15 Июля 2017 Поделиться Опубликовано 15 Июля 2017 @naxac не, если выключится, то получится тот же самый флаг, вид сбоку. А если удалится, то да, оптимизация, так сказать. @vampirnik77 ну вот ещё вариант. Выдавать из нетспауна поршень, у которого в action указана функция. Но опять же, это тот же флаг с видом сбоку, просто проверкой будет заниматься движок. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти