dan 6 Опубликовано 25 Мая 2008 Поделиться Опубликовано 25 Мая 2008 WodkaGT <phrase id="1"> <text>МЕДВЕД По ко...А, ну ладно. В общем так, какие-то сволочи обчистили мою нычку с жрачкой. Уж кому она понадобилась в таком количестве, черт его знает. Не помог бы ты мне, а то скоро тут юбилей у нас намечается, уже месяц как группировка образовалась, а тут, р-раз и на тебе, а еды-то и нету.</text> <next>2</next> <next>3</next> </phrase> <phrase id="2"> <text>Нет, ты что, я тебе, что, склад продовольственный ходячий, что ли???</text> </phrase> <phrase id="3"> <text>Я тут подумал, а чего у тебя не хватает-то?</text> </phrase> Понятно? Ссылка на комментарий
WodkaGT 109 Опубликовано 25 Мая 2008 Поделиться Опубликовано 25 Мая 2008 WodkaGT ... Понятно? Ага. Спасибо тебе большое. Ссылка на комментарий
Menoc 0 Опубликовано 26 Мая 2008 Поделиться Опубликовано 26 Мая 2008 [оффтоп]Ладно, раз уж отправили сюда, то тут и отвечу. Хотя мой вопрос не по этой теме, а именно по ОДНОТИПНЫМ квестам, ну да ладно[/оффтоп] Вот собсно вопрос: Я сделал несколько однотипных квестов по статье на вики, но не знаю как добавить их своему челу (на вики есть пример добавления этих квестов уже существующим работодателям, по типу сидора, бармена, петренко, скряги, сахара и т.п.). Есть ли какой-нить туториал по прикручиванию однотипных квестов к новым, собственноручно заспавненным неписям? Апд: я заспавнил своего торговца, и хочу добавить однотипные квесты именно ему. Тоесть с веткой диалогов как у Судора\Бармена "Мне нужна работа..." АПД 2: и все-таки я считаю, что зря закрыли мою тему, ведь вопрос не по самодельным, а по однотипным квестам!!! Ссылка на комментарий
Volyna 0 Опубликовано 30 Мая 2008 Поделиться Опубликовано 30 Мая 2008 Нужна помощь! Добавил в игру кошку, сделал чтобы при ее убийстве у нее появлялась шкура с описанием в инвентаре. Решил сделать квест от Сидора на добычу этой шкуры. Добавил в файл task_manager.ltx задание: ;--[tm_monster_part_3] ;--type = monster_part ;--community = actor ;--text = tm_monster_part_3_text ;--description = tm_monster_part_3_descr ;--parent = trader ;--target = mutant_cat_skin ;--reward_money = 2000 ;--reward_reputation = +10 ;--reward_rank = 5 ;--time = 604800 ;--reward_item = ammo_9x39_ap, ammo_9x39_ap, ammo_9x39_ap, ammo_9x39_ap ;--prior = 1 (закоментировал потом,т.к. возникли проблемы). Далее добавил описание квеста в файл stable_task_manager.xml: <string id="tm_monster_part_3"> <text>Притащить шкуру кота</text> </string> <string id="tm_monster_part_3_descr"> <text>Заказ Сидоровича: "Притащить шкуру кота"\n Награда: 2000, 4 пачки патронов для моего "Винтореза".</text> </string> <string id="tm_monster_part_3_text"> <text>Короче, Меченный, у нас тут последнее время за железнодорожным мостом кошаков развелось тьма, надо бы отстрелять их. А заодно принесешь мне шкурку этого кота-баюна. Говорят, на Большой земле они спросом пользуются, потому что мех их на бобровый похож. Ну, короче, принеси мне шкуру этого "бобрового" мутанта, а я тебя не обижу.\n В награду дам 2000 и 4 пачки для твоего винтореза. Возьмешься?</text> </string> Как только я хочу взять этот квест игра вылетает и Выдает такую ошибку: FATAL ERROR [error]Expression : no_assert [error]Function : CXML_IdToIndex<class CEncyclopediaArticle>::GetById [error]File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h [error]Line : 112 [error]Description : item not found, id [error]Arguments : tm_monster_part_3_descr Я так понимаю, что не найден id итема. Что делать? И еще если я разблокирую дополнительные квесты в файле task_manager.ltx, то опять ршибка: 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> Если один человек что-то сделал, то другой завсегда разломать сможет Ссылка на комментарий
dan 6 Опубликовано 30 Мая 2008 Поделиться Опубликовано 30 Мая 2008 Volyna я так понимаю что ты добавил шкуру кошки и она у тебя спавниться по типу хвостов собачьих, щупалец кровососа? Если так то добавил ты ее(свою новую шкуру) в monster_items? Вот это <string id="tm_monster_part_3"> <text>Притащить шкуру кота</text> </string> <string id="tm_monster_part_3_descr"> <text>Заказ Сидоровича: "Притащить шкуру кота"\n Награда: 2000, 4 пачки патронов для моего "Винтореза".</text> </string> <string id="tm_monster_part_3_text"> <text>Короче, Меченный, у нас тут последнее время за железнодорожным мостом кошаков развелось тьма, надо бы отстрелять их. А заодно принесешь мне шкурку этого кота-баюна. Говорят, на Большой земле они спросом пользуются, потому что мех их на бобровый похож. Ну, короче, принеси мне шкуру этого "бобрового" мутанта, а я тебя не обижу.\n В награду дам 2000 и 4 пачки для твоего винтореза. Возьмешься?</text> </string> надо прописывать в файле stable_task_manager.xml А еще в storyline_info_taskmanager.xml надо писать примерно следующие <article id="tm_monster_part_3_descr" name="monster_part_3" article_type="task"> <text>tm_monster_part_3_descr</text> </article> Ссылка на комментарий
dan 6 Опубликовано 2 Июня 2008 Поделиться Опубликовано 2 Июня 2008 Вообщем метод не мой, я его взял у banderosa(а он в свою очередь взял Linspiro) как создать квест с рандомными наградами. Беру любого торгоша или любого другого уникального непися и добавляяю ему диалог. Например Волк. Создадим квест что если мы принесем 3 хвоста или 3 копыта Волку он нам выдаст рандомно(т.е. случайно) награду. 1)В character_desc_escape к уже прописанным диалогам Волка добавляю свой <actor_dialog>prinesi_hvost</actor_dialog> - вот мой диалог. <start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog> <actor_dialog>escape_lager_volk_story</actor_dialog> <actor_dialog>escape_lager_volk_story2</actor_dialog> 2) Откроем файл stable_dialogs_escape и в конце напишем следующий диалог: <string id="prinesi_hvost_0"> <text>Здорово! Что делаешь?</text> </string> <string id="prinesi_hvost_1"> <text>Привет меченый да вот бизнес налаживаю. Послушай ты же по зоне мотаешся, живность всякую отстреливаешь принеси мне 3 хвоста слепых собак либо 3 копыта кабанов местных.А то у меня заказчик появился на живность всякую,говорят он из них лекарства делает. А на местных новичков разве можно расчитывать? они ж при виде кабана сами своих копыта готовы отдать. Вообщем принесешь, отблагодарю нормально, не обижу.</text> </string> <string id="prinesi_hvost_2"> <text>Ну что Волк принес я копыта принимай.</text> </string> <string id="prinesi_hvost_3"> <text>Ну что Волк принес я хвосты принимай.</text> </string> <string id="prinesi_hvost_4"> <text>Копыта принес, это хорошо,получи расчет.</text> </string> <string id="prinesi_hvost_5"> <text>Хвосты принес ну ладно тоже ничего, может и они на что-нибудь сгодятся.</text> </string> <string id="prinesi_hvost_6"> <text>Сегодня пустой, так поболтать заскочил.</text> </string> 3)Дальше открываем файл dialogs_escape( в принципе лучше создать свой диалоговый файл типа"dialogs_new" потом легче если что совмещать с другими модами главное не забудьте прописать свой файл в файле systems) и в конце пишу диалог пример: <game_dialogs> <dialog id="prinesi_hvost"> это id диалога то что мы добавили волку в его секцию <phrase_list> <phrase id="0"> <text>prinesi_hvost_0</text> <next>1</next> </phrase> <phrase id="1"> <text>prinesi_hvost_1</text> <next>2</next> <next>3</next> <next>6</next> </phrase> <phrase id="2"> <precondition>new_dialog.prines_kopyto</precondition> это условие при котором открывается данная <text>prinesi_hvost_2</text> фраза в нашем диалоге(должна выполниться <next>4</next> функция prines_kopyto из файла new_dialog </phrase> <phrase id="3"> <precondition>new_dialog.prines_hvost</precondition> аналогично 1 условию тоолько там копыта, <text>prinesi_hvost_3</text> а здесь хвосты <next>5</next> </phrase> <phrase id="4"> <action>new_dialog.otdal_kopyto</action> здесь срабатывает функция передачи копыта и получение <text>prinesi_hvost_4</text> рандомной награды. </phrase> <phrase id="5"> <action>new_dialog.otdal_hvost</action> аналогично, только отдаются хвосты. <text>prinesi_hvost_5</text> </phrase> <phrase id="6"> <text>prinesi_hvost_6</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> 4)Теперь надо создать наш скриптовый файл и прописать наши функции. Создаем файл new_dialog а в нем пишем следующие local nagrad = { level_1 = { "ammo_9x39_sp5", "ammo_7.62x54_7h14", "ammo_5.45x39_ap", это список того из чего будет выбираться награда 1 и2 уровня.Для хвостов 1 уровень "ammo_5.56x45_ap", Для копыт второй. Специально добавил колбасу и хлеб, ну чтобы разочаровываться "ammo_11.43x23_hydro", иногда(рулетка). "bread", "kolbasa", "ammo_5.56x45_ss190" }, level_2 = { "af_armor_1", "af_babka_1", "af_cry_1", "af_dik_1", "af_kol_1", "af_pudd_1", "af_spirit_1", "bread", "kolbasa", "af_night_star", "af_gold_fish", "af_electra_moonlight", "af_rusty_sea-urchin", "af_dummy_glassbeads" } } function prines_kopyto(first_speaker, second_speaker) local actor, trader if db.actor and db.actor:id() == first_speaker:id() then actor = first_speaker trader = second_speaker else actor = second_speaker trader = first_speaker end local mutant_boar_leg = 0 actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_boar_leg" then mutant_boar_leg = mutant_boar_leg+1 end end, nil) if mutant_boar_leg>=3 then return true else return false end end function otdal_kopyto(first_speaker, second_speaker) local item = "" local actor, trader if db.actor and db.actor:id() == first_speaker:id() then actor = first_speaker trader = second_speaker else actor = second_speaker trader = first_speaker end item = nagrad.level_2[math.random(table.getn(nagrad.level_2))] flamethrower.relocate_n_items_section(trader, "mutant_boar_leg", "out", 3) dialogs.relocate_item_section(second_speaker, item , "in") end function prines_hvost(first_speaker, second_speaker) local actor, trader if db.actor and db.actor:id() == first_speaker:id() then actor = first_speaker trader = second_speaker else actor = second_speaker trader = first_speaker end local mutant_dog_tail = 0 actor:iterate_inventory(function (dummy, item) if item:section()=="mutant_dog_tail" then mutant_dog_tail=mutant_dog_tail+1 end end, nil) if mutant_dog_tail>=3 then return true else return false end end function otdal_hvost(first_speaker, second_speaker) local item = "" local actor, trader if db.actor and db.actor:id() == first_speaker:id() then actor = first_speaker trader = second_speaker else actor = second_speaker trader = first_speaker end item = nagrad.level_1[math.random(table.getn(nagrad.level_1))] flamethrower.relocate_n_items_section(trader, "mutant_dog_tail", "out", 3) flamethrower.relocate_n_items_section(actor, item , "in", count) end Функции prines_kopyto и prines_hvost проверяют наличие у нас в инвентаре 3 хвостов либо 3 копыт и соответственно допускают нас к фразам(<precondition>new_dialog.prines_kopyto</precondition>) в которых у нас происходит обмен копыт и хвостов на рандомную награду. Функции otdal_hvost и otdal_kopyto забирают у нас копыта и хвосты и выдают награды из соответствующего списка. Все. Ссылка на комментарий
Zorndaik 0 Опубликовано 3 Июня 2008 Поделиться Опубликовано 3 Июня 2008 У меня такая проблема: один маркер на карте нужно поставить на Гордоне Фримене (<class>mil_stalker_freeman</class> - в character_desc_military) а второй - на wpn_gungauss (заспавнен в инвентаре у Призрака\для теста у шизоида на болотах Милитари) - если не ошибаюсь - изменения нужно вносить в tasks_military.xml не знаю как и где шоб не вылетало Ссылка на комментарий
dan 6 Опубликовано 3 Июня 2008 Поделиться Опубликовано 3 Июня 2008 Zorndaik смотри в tasks прописываешь задание а в нем в конце такие строчки <map_location_type hint="Пличко">blue_location</map_location_type> вот это метка на Пличко <object_story_id>bar_dolg_guard_commander</object_story_id> здесь bar_dolg_guard_commander это взято id из файла game_story_ids. У сумасшедшего id "Mil_Crazy", а у фримена точно незнаю, но возможно id "rostok_naemnik". Ты game_story_ids еще раз сам посмотри. Если у тебя уже составлено в tasks_military твое заданние выложы сюда посмотрим как его сделать правильно. Ссылка на комментарий
Zorndaik 0 Опубликовано 4 Июня 2008 Поделиться Опубликовано 4 Июня 2008 Квест делал на основе "Вернуть фмильное ружье" для Охотника. Вот секция из tasks_military: <game_task id="mil_freeman_gauss"> <title>mil_freeman_gauss</title> <objective> <text>mil_bring_freeman_gauss</text> <icon>ui_iconsTotal_mil_gordon_gauss</icon> <infoportion_complete>mil_freeman_quest_finish</infoportion_complete> </objective> <objective> <text>mil_freeman_find_gauss</text> <icon>ui_iconsTotal_mil_gordon_gauss</icon> <map_location_type hint="bar_hunter_find_rifle">green_location</map_location_type> <object_story_id>bar_hunter_toz</object_story_id> <function_complete>task_dialogs.has_gordon_gauss</function_complete> <infoportion_set_complete>mil_freeman_quest_find_gauss</infoportion_set_complete> </objective> <objective> <text>mil_freeman_return_gauss</text> <icon>ui_iconsTotal_mil_gordon_gauss</icon> <map_location_type hint="bar_hunter_return_rifle">green_location</map_location_type> <object_story_id>bar_hunter_toz</object_story_id> <infoportion_complete>mil_freeman_quest_finish</infoportion_complete> </objective> </game_task> Все маркеры перекидываются на Охотника в баре - bar_hunter_find_rifle - понимаю, шо эта строчка, но не знаю, на какую ее заменить. ЗЫ. Фримен у меня живой - находится на Милиари - вот его секция: <!-- ************************ Гордон Фримен *********************** --> <specific_character id="mil_stalker_freeman" team_default = "1"> <name>ros_freeman_name</name> <icon>ui_npc_u_green_stalker_7</icon> <map_icon x="0" y="0"></map_icon> <bio>ros_freeman_bio</bio> <class>mil_stalker_freeman</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <money min="200" max="6000" infinitive="0"></money> <rank>201</rank> <reputation>90</reputation> <visual>actors\novice\green_stalker_7</visual> <snd_config>characters_voice\human_01\newbie\</snd_config> <crouch_type>0</crouch_type> <supplies> [spawn] \n wpn_desert_eagle \n ammo_11.43x23_fmj \n </supplies> #include "gameplay\character_criticals_3.xml" #include "gameplay\character_dialogs.xml" <start_dialog>mil_freeman_start</start_dialog> <actor_dialog>mil_freeman_quest_start</actor_dialog> <actor_dialog>mil_freeman_quest_finish</actor_dialog> </specific_character> Да и еще. про wpn_gungauss не забудьте (работал над квестом по статье от BAC-FC9L - он в ней на tasks_*** особо не останавливался. Ссылка на комментарий
Zorndaik 0 Опубликовано 4 Июня 2008 Поделиться Опубликовано 4 Июня 2008 Wpn_gungauss - новое оружие(сам сделал) Ссылка на комментарий
dan 6 Опубликовано 4 Июня 2008 Поделиться Опубликовано 4 Июня 2008 Zorndaik маркер указывает на то что у тебя в этих строчках <object_story_id>bar_hunter_toz</object_story_id> А это - bar_hunter_return_rifle- название твоего маркера, его можно писать и по-русски(т.е. в твоем случае на маркере будет написано bar_hunter_return_rifle) bar_hunter_toz - по id это по-моему оружие, которое нужно принести охотнику. "bar_hunter" это сам охотник. Я так понимаю тебе нужно чтобы маркер указывал сначало на твою пушку, а затем на гордона фримена? Видишь ли чтобы повесить маркер на что-нибудь у этого непися либо вещи должен быть id либо При спавне непися или оружия присваивать ему sid. Например когда я спавню непися то это выглядеть так function add_monolit() local obj=amk.spawn_item("mil_monolit_rush_respawn_1",vector():set(32.9309,-0.00135,197.588),1242,20400) local tbl = amk.read_stalker_params(obj) tbl.sid = 9498 -- это и есть sid присвоенный в данном случае мертвому монолитовцу. Зато теперь я могу tbl.health = 0 повесить на него метку в таске:<object_story_id>9498</object_story_id> tbl.updhealth = 0 amk.write_stalker_params(tbl, obj) end Правда я непробовал присваивать sid вещям, так что не знаю точно получится или нет. А ты случаем фримена не через all.spawn спавнил? тогда в его секции(в all.spawn) можно было прописать ему id. Попробуй так. game_task id="mil_freeman_gauss"> <title>Принести гаусс-пистолет Фримену</title> <objective> <text>Найти гаусс-пистолет</text> <icon>ui_iconsTotal_mil_gordon_gauss</icon> <infoportion_complete>mil_freeman_quest_finish</infoportion_complete> </objective> <objective> <text>Найти гаусс-пистолет</text> <icon height="50" width="50" x="100" y="50">ui\ui_icons_task</icon> <function_complete>task_dialogs.has_gordon_gauss</function_complete> <infoportion_set_complete>mil_freeman_quest_find_gauss</infoportion_set_complete> </objective> <objective> <text>Принести гаусс-пистолет Фримену</text> <icon>ui_iconsTotal_mil_gordon_gauss</icon> <map_location_type hint="Фримен">green_location</map_location_type> <object_story_id>mil_stalker_freeman</object_story_id> <infoportion_complete>mil_freeman_quest_finish</infoportion_complete> </objective> </game_task> Ссылка на комментарий
mr_F 0 Опубликовано 12 Июня 2008 Поделиться Опубликовано 12 Июня 2008 Кстати если уж говорить, то можно квест сделать и прапору на воротах у долга. А то вот есть конечно что можно и за деньгу. но почемуб не сделать так что мол вот хочешь плати ...а если нет или нет денег то вот выполни для прапора че нить и он так уж и быть попустит ... На вскидку можно что то типа. Что Прапор должен Сидору но вот не может отдать долг так как дежурство у него а долг отдать нужно вот и нужно сбегать Ссылка на комментарий
Dunadan 0 Опубликовано 14 Июня 2008 Поделиться Опубликовано 14 Июня 2008 Помогите создать разветлённый диалог т.е. в зависимости от варианта ответа будет разная реакция НПС. Dуше Uносящий Nатуральный Aндроид Dелающий Aнанасы Nормально! <a href="http://www.radikal.ru" rel="nofollow" target="_blank" onclick='PopShow3()'></a> Ссылка на комментарий
dan 6 Опубликовано 14 Июня 2008 Поделиться Опубликовано 14 Июня 2008 Помогите создать разветлённый диалог т.е. в зависимости от варианта ответа будет разная реакция НПС. Dunadan а мы ведь чуть выше это разбирали как это сделать на примере Wodka или не понятно получилось? Ссылка на комментарий
Dunadan 0 Опубликовано 14 Июня 2008 Поделиться Опубликовано 14 Июня 2008 Dunadan а мы ведь чуть выше это разбирали как это сделать на примере Wodka или не понятно получилось? Нет, у меня другая тема. К примеру: -Ну вот я принес тебе щупальца кровососа... -Ой спасибо выручил. Выбирай что хочешь лунный свет или морской ёж. -Лунный свет <=> морской ёж (тут выбор надо сделать потом ответ: -Лунный свет так лунный свет <=> ну держи ежа. И тут происходит отдача артефакта Dуше Uносящий Nатуральный Aндроид Dелающий Aнанасы Nормально! <a href="http://www.radikal.ru" rel="nofollow" target="_blank" onclick='PopShow3()'></a> Ссылка на комментарий
dan 6 Опубликовано 14 Июня 2008 Поделиться Опубликовано 14 Июня 2008 Нет, у меня другая тема. К примеру: -Ну вот я принес тебе щупальца кровососа... -Ой спасибо выручил. Выбирай что хочешь лунный свет или морской ёж. -Лунный свет <=> морской ёж (тут выбор надо сделать потом ответ: -Лунный свет так лунный свет <=> ну держи ежа. И тут происходит отдача артефакта Dunadan а тебе не подойдет то что я про рандомные награды писал(сообщение 26 в этой теме)? Там как раз награда разная. Правда при таком варианте не предсказуемо что ты в итоге получишь. Ссылка на комментарий
ViNT 132 Опубликовано 6 Июля 2008 Поделиться Опубликовано 6 Июля 2008 Прочитал инструкцию, сделал квест на получение перехода Агр-Кор от Кузнецова за плейбой (надо же их как-то пристраивать)... Проблема следующая, когда я жму строку отказа от беготни, то квест все равно начинается... Как я понял за отказ и сброс отвечает слудующий код... (Не смотрите что это Шерстюком обозвано, я на Кузнецове диалог проверяю) <phrase id="4"> <text>sherstpda_1_dialog_4</text> <action>sak_dialog.sherstpda_have</action> <give_info>sherstpda_start</give_info> </phrase> <phrase id="5"> <text>sherstpda_1_dialog_5</text> <give_info>sherstpda_start</give_info> <action>dialogs.break_dialog</action> </phrase> А вот при удалении инфопоршня, диалог обрывается, но при повторном разговоре он все равно есть... Что-то не так? и еще вопрос косвенно касающийся квестов - как встроить проверку количества денег? А то у меня 10000 отнимается только "на бумаге", а реально как было 40 рублей, так и осталось Ссылка на комментарий
Kostya V 31 Опубликовано 10 Июля 2008 Поделиться Опубликовано 10 Июля 2008 function bar_dolg_propusk_done(first_speaker, second_speaker) эта функция отдачи арта Пличко dialogs.relocate_item_section(second_speaker, "af_armor_3", "out",) second_speaker:set_relation(game_object.friend, first_speaker) эта строчка делает Пличко другом. end Нашел ошибку в этой функции. После слова "out" стоит запятая. Она здесь совсем не нужна. 1 Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет! Ссылка на комментарий
Botanic 0 Опубликовано 10 Июля 2008 Поделиться Опубликовано 10 Июля 2008 При создании квеста его имя в task_manger.ltx можно писать любое(по-английски разумеется) или есть какие-то правила? Я - заядлый АМКаголик! Ссылка на комментарий
dan 6 Опубликовано 10 Июля 2008 Поделиться Опубликовано 10 Июля 2008 Нашел ошибку в этой функции. После слова "out" стоит запятая. Она здесь совсем не нужна. Это моя ошибка но так как пост не мой исправить я не могу. Уже исправлено. PS. И зачем было стирать? potap При создании квеста его имя в task_manger.ltx можно писать любое(по-английски разумеется) или есть какие-то правила? <map_location_type hint="Пличко">blue_location</map_location_type> в этом месте текст произвольный, но обычно пишут по русски имя к кому надо принести что то или прийти за наградой <object_story_id>bar_dolg_guard_commander</object_story_id> здесь указываются данне из game_story_ids (bar_dolg_guard_commander это и есть Пличко) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти