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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
phalcor 60 Опубликовано 10 Ноября 2024 Поделиться Опубликовано 10 Ноября 2024 2 часа назад, Norman Eisenherz сказал: В чем может быть причина? level.map_add_object_spot(v, "green_location") --v вместо id? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492200
Norman Eisenherz 355 Опубликовано 10 Ноября 2024 Поделиться Опубликовано 10 Ноября 2024 Нет, v – таблица с данными NPC 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492208
Ghilli 0 Опубликовано 10 Ноября 2024 Поделиться Опубликовано 10 Ноября 2024 При попытке заменить чтение нет-пакета с состоянием актора(бег, шаг, прыжок и т.д.) "вручную": se_upk:w_begin(0) alife():actor():UPDATE_Write(se_upk) se_upk:r_seek(41) local state = se_upk:r_u16() на чтение с помощью функционала m_netpk: local act = alife():actor() local se_upk = get_netpk(act, 2) local data = se_upk:get() local state = data.actor_state or 0 Стал получать следующий вылет: Скрытый текст [print_output()] SCRIPT RUNTIME ERROR: attempt to call a nil value stack traceback: [C]: at 0x7ff9775bf180 [C]: in function 'get_netpk' Не понимаю, в чем конкретно прокол Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492214
phalcor 60 Опубликовано 10 Ноября 2024 Поделиться Опубликовано 10 Ноября 2024 @Norman Eisenherz @Norman Eisenherz , а если так: for id,_ in pairs(gobj.Object) do --вместо npc_info используем таблицу объектов в гулаге level.map_add_object_spot(id, "green_location") end 57 минут назад, Ghilli сказал: Не понимаю, в чем конкретно прокол У меня пару лет назад также начались вылеты при юзании m_netpk, решил заменой строки if stpk:r_elapsed()~=0 or uppk:r_elapsed()~=0 then на if (stpk and stpk:r_elapsed()~=0) or (uppk and uppk:r_elapsed()~=0) then Вдруг поможет? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492217
Это популярное сообщение. Kirgudu 1 370 Опубликовано 10 Ноября 2024 Это популярное сообщение. Поделиться Опубликовано 10 Ноября 2024 (изменено) 1 час назад, Ghilli сказал: в чем конкретно прокол Скорее всего в использованном модуле m_netpk. Предположу, что взята версия от 2017 года, что выкладывалась тут неоднократно, в том числе мной, а эксперименты проводятся на платформе ЧН или ЗП (но не ТЧ). Есть в ней один авторский недосмотр: для класса net_se_actor использован конструктор function net_cse_alife_creature_actor:__init(obj,mode), вероятно взятый копипастом из предыдущего одноимённого класса. Попытка создать экземпляр класса net_se_actor (при чтении нет-пакета актора) очевидным образом должна завершиться ошибкой. Решение простое: классу net_se_actor должен соответствовать конструктор funstion net_se_actor:__init(obj,mode). Нужный код уже давно можно найти в разных модах (не помню, у кого первого заметил соотв. правку), а вот сделать аналогичную замену в теме "Сборочный цех" я почему-то забыл. Исправляюсь. Свежую версию m_netpk можно скачать здесь: Изменено 10 Ноября 2024 пользователем Kirgudu 1 4 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492218
Norman Eisenherz 355 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 @phalcor Те же шарики. Нашел: в ЧН сталкивался с остановкой скрипта без вылета при пустом тексте подсказки – видимо, это проблема всей трилогии, потому что при добавлении хотя бы текста "" выводятся все метки. 2 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492235
Stalkersof 232 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 Поторопился я и обнадежился. Вопрос повторяю можно на ОГСР движке сохранять данные таблицы в хранилище и считывать их. В игре все работает при загрузке сейвов скрипт выполняется. Надо сохранять данные таблицы подобранных предметов в хранилище, но как? Скрытый текст local items_podobral = {} function item_take(obj) local sect = obj:section() local reputation local rang for i=1,#list_items do if sect == list_items[i].section then if not items_podobral[ sect ] then reputation = list_items[i].reputation rang = list_items[i].rang db.actor:change_character_reputation(reputation) db.actor:set_character_rank(db.actor:character_rank() + rang) local text = "%c[255,160,160,160]".."Уникальный предмет".."\\n".."%c[default]".."Ранг+ "..rang.." ".."Репутация+ "..reputation local hud = get_hud() hud:AddCustomStatic("main_task", true) hud:GetCustomStatic("main_task"):wnd():SetTextST(text) hud:GetCustomStatic("main_task").m_endTime = time_global()/300 + 5 items_podobral[sect] = list_items[i].section log1(list_items[i].section.."-"..rang.."-"..reputation) break end end end end Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492237
Kirgudu 1 370 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 (изменено) @Stalkersof можно использовать SCRIPT_VARS_STORAGE Изменено 11 Ноября 2024 пользователем Kirgudu 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492240
Stalkersof 232 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 (изменено) 39 минут назад, Kirgudu сказал: @Stalkersof можно использовать SCRIPT_VARS_STORAGE Да мне бы пример нормальный. Как записать в таблицу и как считать и хранилища. В вики написано, как с обычными таблицами. Объявил таблицу так: local xvars = get_stored_vars() xvars.items_podobral = {} Вылет. Дайте пример. Изменено 11 Ноября 2024 пользователем Stalkersof Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492241
Kirgudu 1 370 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 @Stalkersof вылет может быть и не связан с приведённым кодом, по крайней мере я в нём ошибки не вижу. А пример уже давали ранее, целый набор функций для работы с этим хранилищем: 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492243
Stalkersof 232 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 Не знаю у меня не получается работать с хранилищем как с переменными. У меня эти функции в отдельном файле ogsr_vars. Вот так сделал вылет. Скрытый текст local xvars = get_stored_vars() xvars.items_podobral = {} --items_podobral = {} function item_take(obj) local sect = obj:section() local reputation local rang for i=1,#list_items do if sect == list_items[i].section then --if items_podobral[ sect ] then log1( ogsr_vars.get_value_safe("items_podobral")) if not ogsr_vars.get_value_safe( "items_podobral" ) then reputation = list_items[i].reputation rang = list_items[i].rang db.actor:change_character_reputation(reputation) db.actor:set_character_rank(db.actor:character_rank() + rang) local text = "%c[255,160,160,160]".."Уникальный предмет".."\\n".."%c[default]".."Ранг+ "..rang.." ".."Репутация+ "..reputation local hud = get_hud() hud:AddCustomStatic("main_task", true) hud:GetCustomStatic("main_task"):wnd():SetTextST(text) hud:GetCustomStatic("main_task").m_endTime = time_global()/300 + 5 --items_podobral[sect] = list_items[i].section ogsr_vars.set_value( "items_podobral", list_items[i].section) log1(list_items[i].section.."-"..rang.."-"..reputation) break end end end end Ну блин подскажите как работать с таблицами в хранилище. Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492247
Kirgudu 1 370 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 17 минут назад, Stalkersof сказал: Вот так сделал вылет ...Ну блин подскажите как работать с таблицами в хранилище. Поделиться текстом ошибки в голову, видимо, не приходит? Какая ещё, в таком случае, требуется подсказка, если она уже дана? Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492248
UriZzz 1 004 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 @Kirgudu ещё бы таймеры на SCRIPT_VARS_STORAGE, было бы замечательно. А пока пользуюсь модулями от Артоса и прочих причастных. Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492249
Stalkersof 232 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 44 минуты назад, Kirgudu сказал: Поделиться текстом ошибки в голову, видимо, не приходит? Какая ещё, в таком случае, требуется подсказка, если она уже дана? Вылет был по строке log1 по первой строке в коде. Скрытый текст local xvars = get_stored_vars() xvars.items_podobral = {} --items_podobral = {} function item_take(obj) local sect = obj:section() local reputation local rang for i=1,#list_items do if sect == list_items[i].section then --if not items_podobral[ sect ] then if not ogsr_vars.get_value_safe( "items_podobral" ) then reputation = list_items[i].reputation rang = list_items[i].rang db.actor:change_character_reputation(reputation) db.actor:set_character_rank(db.actor:character_rank() + rang) local text = "%c[255,160,160,160]".."Уникальный предмет".."\\n".."%c[default]".."Ранг+ "..rang.." ".."Репутация+ "..reputation local hud = get_hud() hud:AddCustomStatic("main_task", true) hud:GetCustomStatic("main_task"):wnd():SetTextST(text) hud:GetCustomStatic("main_task").m_endTime = time_global()/300 + 5 --items_podobral[sect] = list_items[i].section ogsr_vars.set_value( "items_podobral", list_items[i].section) log1(list_items[i].section.."-"..rang.."-"..reputation) break end end end end Такой код и не вылетает и не работает. Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492253
Balavnik 178 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 @Stalkersof Так а ошибка-то какая? Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492255
Stalkersof 232 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 (изменено) 1 час назад, Balavnik сказал: @Stalkersof Так а ошибка-то какая? Скрытый текст [C]: in function 'log1' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\nagrada.script:101: in function 'fun' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\ogse_signals.script:382: in function 'process_call' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\ogse_signals.script:320: in function 'call' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\bind_stalker.script:210: in function <d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\bind_stalker.script:207> [11.11.24 18:15:12.169] ********************************************************************************* [11.11.24 18:15:12.169] FATAL ERROR [error]Expression : FATAL ERROR [error]Function : CScriptEngine::lua_pcall_failed [error]File : D:\a\OGSR-Engine\OGSR-Engine\ogsr_engine\COMMON_AI\script_engine.cpp [error]Line : 52 [error]Description : [CScriptEngine::lua_pcall_failed]: [luabind::detail::free_functions::function_dispatcher] Caught unhandled exception! [11.11.24 18:15:12.169] ***************************[ScriptCrashHandler]********************************** [11.11.24 18:15:12.169] stack traceback: [C]: at 0x7ff804e87af4 [C]: in function 'log1' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\nagrada.script:101: in function 'fun' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\ogse_signals.script:382: in function 'process_call' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\ogse_signals.script:320: in function 'call' d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\bind_stalker.script:210: in function <d:\Мод fgm\fgm_v_1_7_4\gamedata\scripts\bind_stalker.script:207> ПС Вроде сделал на поршнях как Хикс советовал. 78 поршней. С таблицей конечно проще но как? Изменено 11 Ноября 2024 пользователем Stalkersof 1 Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492256
Kirgudu 1 370 Опубликовано 11 Ноября 2024 Поделиться Опубликовано 11 Ноября 2024 6 часов назад, UriZzz сказал: ещё бы таймеры на SCRIPT_VARS_STORAGE, было бы замечательно. А пока пользуюсь модулями от Артоса и прочих причастных. Если только m_timers от того же Артоса на OGSR переделать... Вот только зачем? 5 лет назад уже был предложен простой и действенный способ подменить хранилище se_stor Артоса на вариант из OGSR, при этом не меняя ни строчки кода в использующих хранилище скриптах. Внутри модуля таймеров вызываются глобальные GetVar и SetVar, которые можно подменить ровно таким же способом. @Stalkersof ничего сложного в работе с таблицами в OGSR нет, информации достаточно даже той, что представлена в официальном Wiki. Вот такой код выполнится без ошибок (проверил только что за 5 минут): local xvars = get_stored_vars() xvars.items_podobral = {} xvars.items_podobral[1] = { section = "111", rang = 1 } xvars.items_podobral[2] = { section = "222", rang = 2 } xvars.items_podobral[3] = { section = "333", rang = 3 } Но далее надо помнить, что любые таблицы в хранилище размещаются не как таблицы, а как значения с типом "userdata", даже сразу после первичного присвоения. То есть по сформированной выше таблице, например, не получится итерироваться: for k,v in pairs(xvars.items_podobral) do -- do something end такой код вызовет ошибку вида «"userdata" не является таблицей». Не получится использовать table.insert и table.remove, не выйдет посчитать кол-во элементов #xvars.items_podobral и так далее, то есть совершить любое действие, которое доступно для стандартных таблиц. Чтобы работать с таблицей, записанной в хранилище, необходимо её сначала конвертировать в понятный для lua вид: local t = xvars.items_podobral() -- выполнить одноименный метод -- после выполнения переменная t содержит в себе стандартную таблицу Но вот если требуется переприсвоить какой-то элемент таблицы, это можно сделать посредством прямого доступа, без конвертирования: xvars.items_podobral[2] = "новое строковое значение" В общем, всё необходимое описано на оф. ресурсе. Сверх этого рассказать что-то сложно. Пробуй, экспериментируй. 2 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492287
rost2000 0 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 05.11.2024 в 12:35, rost2000 сказал: Написал скрипт на проверку нахождения в спейс рестрикторе НПС, чтобы ГГ зачистил указанную зону, кроме НПС с группировкой "stalker". Вылетает с таким логом. Как я понимаю, методы применяются ко всем объектам, а нужно, чтобы только к НПС. Искал проверку, что объект является НПС, но не нашел. function storyline_complex_clear() local sim = alife() if sim then local zone = sim:story_object(904) for id = 1, 65534 do sobj = sim:object(id) return sobj and zone and zone:inside(sobj:position()) and not sobj:community() == "stalker" end end end Показать FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: No such operator defined stack trace: Продолжение по этому скрипту, который отказывается работать (проверка всегда возвращает false). Решил проверить, работает ли проверка на присутствие объекта в рестрикторе. Вызвал такую функцию: function sander_test() local sim = alife() local obj if sim then local zone = sim:story_object(904) for id = 1, 65534 do obj = sim:object(id) if zone and zone:inside(obj:position()) then news_manager.send_tip(db.actor, "NEW_INFO = " .. tostring(obj:name()), nil, "trader", 5000, 92) end end end end Что привело к вылету: Скрытый текст [13.11.24 12:14:13.051] [2912] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR: ! No such operator [__call] defined in class [___VECTOR] stack traceback: [C]: at 0x7ff6a879ff50 [C]: in function 'position' d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:222: in function 'sander_test' d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:189: in function <d:\games\s.t.a.l.k.e.r\gamedata\scripts\ui_main_menu.script:164> [13.11.24 12:14:13.051] [2912] ********************************************************************************* [13.11.24 12:14:13.051] [2912] FATAL ERROR [error]Expression : FATAL ERROR [error]Function : CScriptEngine::lua_pcall_failed [error]File : F:\Repos\OGSR-Engine\ogsr_engine\COMMON_AI\script_engine.cpp [error]Line : 60 [error]Description : [CScriptEngine::lua_pcall_failed]: ! No such operator [__call] defined in class [___VECTOR] Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492359
Капрал Хикс 567 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 Подскажите простенький скрипт для того, чтобы оружие можно было использовать только в надетой экзе, а то не найду... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492369
Pir@t@s 36 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 @Капрал Хикс Это то? Скрытый текст function check_armor() local armor = db.actor:item_in_slot(6) local weapon = db.actor:item_in_slot(2) if db.actor:active_slot()==2 and weapon then local tmp = armor and armor:section() or "" if not string.find(tmp, "exo") and (weapon:section()=="wpn_pkm") then db.actor:drop_item(weapon) local tmpw = alife():create(weapon:section(), db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) db.actor:transfer_item(weapon,db.actor) alife():release(tmpw) news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000) end end end function actor_binder:update(delta) my_script.check_armor() 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/627/#findComment-1492374
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти