h0N0r 369 Опубликовано 2 Июня 2023 Поделиться Опубликовано 2 Июня 2023 5 часов назад, alexej-oz сказал: 25 Это ограничение на силу отряда, искать в скрипте sim_squad_generic.script, там рядом и формула его подсчёта. 1 https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
alexej-oz 0 Опубликовано 3 Июня 2023 Поделиться Опубликовано 3 Июня 2023 13 часов назад, h0N0r сказал: Это ограничение на силу отряда, искать в скрипте sim_squad_generic.script, там рядом и формула его подсчёта. Ох спасибо Тебе ОГРОМНОЕ! Я поменял допустимую силу с 25 на 40, и теперь не вылетает. Ты просто мой спаситель!!! Ссылка на комментарий
bsanek628 1 Опубликовано 15 Июня 2023 Поделиться Опубликовано 15 Июня 2023 Actor.ltx - максимальные значения стат в 0.166 правятся? Или же это нужно сам движок править? Ссылка на комментарий
Norman Eisenherz 331 Опубликовано 16 Июня 2023 Поделиться Опубликовано 16 Июня 2023 Судя по записям в [xrGame\ActorCondition.cpp], расчеты в движке ссылаются на конфиг ГГ, а значения m_zone_max_power[тип] могут доходить до 1.0. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 331 Опубликовано 30 Июня 2023 Поделиться Опубликовано 30 Июня 2023 Как в ЧН определяется защита от физического урона? Есть старый параметр strike_protection и новый physic_strike_wound_immunity; при одинаковых значениях 0.3 + 0.25 в конфигах комбезов "СЕВА" и Долг-1 (легкий) в описании брони в первом случае 37%, во втором – всего 5%. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
imcrazyhoudini 213 Опубликовано 14 Июля 2023 Поделиться Опубликовано 14 Июля 2023 Как вернуть возможность спавнить монстров по инфопоршню как в ТЧ? По типу: [spawner] cond = {+info} Мои попытки ни к чему не привели: Скрытый текст --[[ Изменения script_version: 4 - сохранение поля job_online 5 - сохранение поля was_in_smart_terrain ]] class "se_monster" (cse_alife_monster_base) -------------------- function se_monster:__init (section) super (section) self.ini = nil self.ini_initialized = false self.spawner_present = false self.smart_terrain_conditions = nil self.smart_terrain_conditions_initialized = false self.check_distance = false self.min_distance = 150 -- этот флаг берётся из работы смарта -- true = всегда в онлайне -- false = всегда в офлайне -- condlist = условие, которое отпределяет true или false -- nil = смарту всё равно self.job_online = nil self.job_online_condlist = nil self.squad_id = nil --' Указатель на отряд в котором прописан чувак. self.m_registred = false self.sim_forced_online = false end -------------------- function se_monster:get_ini() if not self.ini_initialized then self.ini = self:spawn_ini () self.ini_initialized = true self.spawner_present = self.ini:section_exist ("spawner") if self.ini ~= nil and self.spawner_present == true then if self.ini:line_exist ("spawner", "check_distance") == true then self.check_distance = self.ini:r_bool ("spawner", "check_distance") if self.check_distance == nil then self.check_distance = false end if self.ini:line_exist ("spawner", "min_distance") == true then self.min_distance = self.ini:r_u32 ("spawner", "min_distance") end end if self.min_distance == nil then local sys = system_ini() if sys ~= nil and sys:line_exist ("alife", "switch_distance") == true then self.min_distance = sys:r_u32 ("alife", "switch_distance") - 50 if self.min_distance == nil then self.min_distance = 150 else if self.min_distance <= 50 then abort ("SE_MONSTER - SWITCH DISTANCE IS TOO SMALL !!!") end end else self.min_distance = 150 end end end end end -------------------- function se_monster:can_switch_offline() if self.sim_forced_online == true then return false end if self.job_online_condlist ~= nil then return xr_logic.pick_section_from_condlist(db.actor_proxy, self, self.job_online) ~= true end return cse_alife_monster_base.can_switch_offline(self) end -------------------- function se_monster:can_switch_online() if self.sim_forced_online == true then return true end if self.job_online_condlist ~= nil then return xr_logic.pick_section_from_condlist(db.actor_proxy, self, self.job_online) == true end if self.ini == nil or self.spawner == nil or self.spawner_present == false then return cse_alife_monster_base.can_switch_online(self) end if db.actor ~= nil and db.actor:alive () == false then return self.online end if self.online == false then if db.actor == nil or db.actor:alive () == false then return false end --если задана дистанция проверки, то проверим. if self.check_distance == true then --printf ("Check distance") --получим позицию. local pos = level.vertex_position (self.m_level_vertex_id) -- проверим дистанцию до игрока. если меньше требуемой, то от винта if pos:distance_to (db.actor:position ()) < self.min_distance then --printf ("Check distance 1") return false end end --все проверки прошли - финал, вызов спавнера return xr_spawner.check_spawn (self) and cse_alife_monster_base.can_switch_online (self) --return (xr_logic.pick_section_from_condlist(db.actor, self, self.spawner) ~= nil) and cse_alife_monster_base.can_switch_online(self) else if db.actor == nil or db.actor:alive () == false then return true end if xr_spawner.check_spawn (self) == true then return true end if self.check_distance == true then local pos = level.vertex_position (self.m_level_vertex_id) -- проверим дистанцию до игрока. если больше требуемой, то от винта if pos:distance_to (db.actor:position ()) > self.min_distance then return false end end return cse_alife_monster_base.can_switch_online (self) --if xr_logic.pick_section_from_condlist(db.actor, self, self.spawner) ~= nil then -- return true --end --return false end end function se_monster:switch_online() cse_alife_monster_base.switch_online(self) if self.squad_id ~= nil then local squad = self.board.squads[self.squad_id] squad:switch_online(true, self.id) end end function se_monster:switch_offline() cse_alife_monster_base.switch_offline(self) if self.squad_id ~= nil then local squad = self.board.squads[self.squad_id] squad:switch_online(false, self.id) end end ----------------------- function se_monster:STATE_Write(packet) cse_alife_monster_base.STATE_Write (self, packet) -- if self.m_registred ~= true then -- return -- end if self.job_online == true then packet:w_u8(0) elseif self.job_online == false then packet:w_u8(1) elseif self.job_online == nil then packet:w_u8(2) else packet:w_u8(3) packet:w_stringZ(self.job_online_condlist) end if self.squad_id == nil then packet:w_stringZ("nil") else packet:w_stringZ(tostring(self.squad_id)) end packet:w_bool(self.sim_forced_online) end -------------------- function se_monster:STATE_Read(packet, size) cse_alife_monster_base.STATE_Read (self, packet, size) -- if self.m_registred ~= true then -- return -- end local t = packet:r_u8() if t == 0 then self.job_online = true elseif t == 1 then self.job_online = false elseif t == 2 then self.job_online = nil else self.job_online_condlist = packet:r_stringZ() self.job_online = xr_logic.parse_condlist(nil, "se_monster:STATE_Read", "job_online", self.job_online_condlist) end if self.script_version >= 7 then self.squad_id = packet:r_stringZ() if self.squad_id == "nil" or tostring(self.squad_id) == "0" then self.squad_id = nil end end if self.script_version >= 8 then self.sim_forced_online = packet:r_bool() end local pos = self.position --printf(" mpos[%s][%s][%s]", tostring(pos.x), tostring(pos.y), tostring(pos.z)) end -------------------- function se_monster:on_before_register() self:fill_exclusives() end -------------------- function se_monster:on_register() cse_alife_monster_base.on_register( self ) printf("registering monster %s ", self:name()) self.m_registred = true self.board = sim_board.get_sim_board() self.tm = task_manager.get_task_manager() --' Отключаем старый метод выбора смарттеррейнов. self:brain():can_choose_alife_tasks(false) --' Выбор смарта local obj_ini = self:spawn_ini() local smart = utils.cfg_get_string(obj_ini, "logic", "smart_terrain", self, false, "", "") local smart_obj = self.board:get_smart_by_name(smart) if smart_obj == nil then return end alife():object(smart_obj.id):register_npc(self) end -------------------- function se_monster:on_unregister() local strn_id = self:smart_terrain_id() if strn_id ~= 65535 then local smart = alife():object(strn_id) if smart ~= nil then smart:unregister_npc(self) end end cse_alife_monster_base.on_unregister(self) end -------------------- function se_monster:on_death(killer) cse_alife_monster_base.on_death(self, killer) smart_terrain.on_death(self) if self.squad_id ~= nil then local squad = self.board.squads[self.squad_id] squad:on_npc_death(self) end end -------------------- function se_monster:fill_exclusives() self:get_ini() self.smart_terrain_conditions = smart_terrain.read_smart_terrain_conditions( self ) if self.smart_terrain_conditions then for name, condlist in pairs(self.smart_terrain_conditions) do smart_terrain.exclusives[name] = (smart_terrain.exclusives[name] or 0) + 1 end end end function se_monster:update() cse_alife_monster_base.update(self) -- Тут мы попробуем вызвать апдейт отряда if self.squad_id ~= nil then local squad = self.board.squads[self.squad_id] if squad ~= nil and squad.commander_id == self.id then squad:update() end end end ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
Nachzehrer_SS 0 Опубликовано 22 Июля 2023 Поделиться Опубликовано 22 Июля 2023 Народ, такой вопрос по Faction Commander, я год назад сделал так чтобы при выборе любой группировки стартовал с нулевым рангом, и определённым снаряжением, а сейчас год спустя начал делать такую же версию, но с реплейсером оружия, воткнув туда свои ранги, как задать стартовое снаряжение за опрделённую группировку и сделать чтобы присваивался нулевой ранг ??? Ссылка на комментарий
imcrazyhoudini 213 Опубликовано 29 Июля 2023 Поделиться Опубликовано 29 Июля 2023 Как править подобную проблему?: ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
imcrazyhoudini 213 Опубликовано 30 Июля 2023 Поделиться Опубликовано 30 Июля 2023 Подскажите почему могут возникать такие вылеты и как фиксить собственно: Спойлер ! [LUA][ERROR] ERROR: Path between [rad_monolith_perehod] and [yan_zombied_attack] doesnt exist for [12]. FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_pcall_failed [error]File : E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrServerEntities\script_engine.cpp [error]Line : 192 [error]Description : <no expression> [error]Arguments : LUA error: ...t.a.l.k.e.r. clear sky\gamedata\scripts\sim_board.script:729: attempt to index local 'smart' (a nil value) stack trace: 0x000000002BF52812 xrCore.dll, _Init_thread_footer + 86 byte(s), D:\a\_work\1\s\src\vctools\crt\vcstartup\src\misc\thread_safe_statics.cpp, 247 0x000000002BF7065F xrCore.dll, xrDebug::backend + 191 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrCore\xrDebugNew.cpp, 178 0x000000002BF70C5F xrCore.dll, xrDebug::fatal + 143 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrCore\xrDebugNew.cpp, 308 0x000000002A8FB10E xrGame.dll, CScriptEngine::lua_pcall_failed + 190 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrServerEntities\script_engine.cpp, 194 0x000000002C4154D0 LuaJIT.dll, wscanf_s + 12486 byte(s) 0x000000002C45355C LuaJIT.dll, wscanf_s + 266578 byte(s) 0x000000002C452606 LuaJIT.dll, wscanf_s + 262652 byte(s) 0x000000002C453306 LuaJIT.dll, wscanf_s + 265980 byte(s) 0x000000002C469910 LuaJIT.dll, wscanf_s + 357638 byte(s) 0x000000002C4159B7 LuaJIT.dll, wscanf_s + 13741 byte(s) 0x000000002C41F24A LuaJIT.dll, wscanf_s + 52800 byte(s) 0x0000000033B1FD55 luabind.dll, luabind::detail::pcall + 101 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\3rd party\luabind\src\pcall.cpp, 40 + 17 byte(s) 0x000000002A94BA86 xrGame.dll, luabind::detail::proxy_member_void_caller<>::~proxy_member_void_caller<> + 50 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\3rd party\luabind\include\luabind\detail\call_member.hpp, 269 + 19 byte(s) 0x000000002A9889BA xrGame.dll, CWrapperAbstractMonster<CSE_ALifeHumanStalker>::update + 54 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrServerEntities\xrServer_script_macroses.h, 171 + 54 byte(s) 0x000000002AB0C86C xrGame.dll, CALifeUpdateManager::update + 540 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\alife_update_manager.cpp, 110 + 235 byte(s) 0x00000000CDC1B2CD xrEngine.exe, mt_Thread + 109 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\device.cpp, 207 0x000000004ED7514B ucrtbase.dll, o__beginthread + 219 byte(s) 0x000000004F747034 KERNEL32.DLL, BaseThreadInitThunk + 20 byte(s) 0x0000000051162651 ntdll.dll, RtlUserThreadStart + 33 byte(s) Спойлер ! WARNING: SV: can't find child [wpn_l851449] of parent [wpn_l851449]! Children list: ! ERROR: can't detach independant object. entity[wpn_l851449][1449], parent[wpn_l851449][1449], section[wpn_l85] xrEngine.exe caused an EXCEPTION_ACCESS_VIOLATION in module xrGame.dll at 000000002AD0A240, CUIWindow::Draw()+0032 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIWindow.cpp, line 0162 stack trace: 0x000000002AD0A240 xrGame.dll, CUIWindow::Draw + 32 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIWindow.cpp, 162 0x000000002ACEF4D5 xrGame.dll, CUIStatic::Draw + 341 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIStatic.cpp, 147 0x000000002AD0A256 xrGame.dll, CUIWindow::Draw + 54 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIWindow.cpp, 161 0x000000002ACEF4D5 xrGame.dll, CUIStatic::Draw + 341 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIStatic.cpp, 147 0x000000002AC56A0C xrGame.dll, CUIZoneMap::Render + 28 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\UIZoneMap.cpp, 81 0x000000002ACB3B0B xrGame.dll, CUIMainIngameWnd::Draw + 891 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\ui\UIMainIngameWnd.cpp, 282 0x000000002AC3E0BD xrGame.dll, CUI::Render + 429 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\UI.cpp, 103 0x000000002AA38061 xrGame.dll, CHUDManager::RenderUI + 81 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\HUDManager.cpp, 271 + 17 byte(s) 0x000000002AA70606 xrGame.dll, CLevel::OnRender + 86 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrGame\Level.cpp, 930 0x00000000CDC1ADD5 xrEngine.exe, CRenderDevice::on_idle + 1893 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\device.cpp, 344 + 94 byte(s) 0x00000000CDC1A64F xrEngine.exe, CRenderDevice::message_loop + 111 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\device.cpp, 427 0x00000000CDC1A470 xrEngine.exe, CRenderDevice::Run + 480 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\device.cpp, 471 0x00000000CDC60308 xrEngine.exe, Startup + 344 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\x_ray.cpp, 277 0x00000000CDC5FA96 xrEngine.exe, WinMain_impl + 1846 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\x_ray.cpp, 757 0x00000000CDC5F2F9 xrEngine.exe, WinMain + 9 byte(s), E:\S.T.A.L.K.E.R. Clear Sky\Hike\xray\xrEngine\x_ray.cpp, 808 0x00000000CDC15CBE xrEngine.exe, __scrt_common_main_seh + 262 byte(s), D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl, 288 + 33 byte(s) 0x000000004F747034 KERNEL32.DLL, BaseThreadInitThunk + 20 byte(s) 0x0000000051162651 ntdll.dll, RtlUserThreadStart + 33 byte(s) ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
imcrazyhoudini 213 Опубликовано 6 Сентября 2023 Поделиться Опубликовано 6 Сентября 2023 Подскажите, как засейвить одиночную логику НПС при переходе их с онлайн в оффлайн? Кондлисты не работают. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
NikBulldog 0 Опубликовано 16 Ноября 2023 Поделиться Опубликовано 16 Ноября 2023 Форумчане, подскажите пожалуйста, как исправить баг на сброс модификации на кратность прицела у ГП27 и ФН200М. Какие файлы подправить и в чем проблема там? Ссылка на комментарий
Norman Eisenherz 331 Опубликовано 17 Ноября 2023 Поделиться Опубликовано 17 Ноября 2023 Подробнее, пожалуйста: при каких условиях и что именно случается? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
NikBulldog 0 Опубликовано 17 Ноября 2023 Поделиться Опубликовано 17 Ноября 2023 (изменено) @Norman Eisenherz В Чистом Небе после установки апгрейдов на изменение кратности прицелов на ГП27 и на ФН200М, эффект апгрейда сбивается (то есть визуально кратность прицела становится стоковой) при перезагрузке или установке любой другой модификации, хотя остается отмеченным в описании оружия. Изменено 17 Ноября 2023 пользователем NikBulldog Конкретизация Ссылка на комментарий
Norman Eisenherz 331 Опубликовано 17 Ноября 2023 Поделиться Опубликовано 17 Ноября 2023 (изменено) Подтверждаю ошибку для FN2K, G36 и L85. В нетпакете оружия установленные апгрейды перечислены правильно, так что, видимо, болезнь движковая. Добавил апгрейд оптики в схему СВД: та же проблема. Описание применения апгрейда в движке ЧН/ЗП одинаковое: Spoiler [xrGame\WeaponMagazined.cpp] bool CWeaponMagazined::install_upgrade_impl( LPCSTR section, bool test ) … if( IsScopeAttached() ) { //if ( m_eScopeStatus == ALife::eAddonAttachable ) { result |= process_if_exists( section, "scope_zoom_factor", &CInifile::r_float, m_zoom_params.m_fScopeZoomFactor, test ); } } else { if( IsZoomEnabled() ) { result |= process_if_exists( section, "scope_zoom_factor", &CInifile::r_float, m_zoom_params.m_fIronSightZoomFactor, test ); } } Ждем более продвинутых моддеров… Изменено 17 Ноября 2023 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 331 Опубликовано 18 Ноября 2023 Поделиться Опубликовано 18 Ноября 2023 Кое-что нашлось: в ЗП zoom_factor читается движком при загрузке оружия, в ЧН – нет. Spoiler [xrGame\Weapon.cpp] BOOL CWeapon::net_Spawn (CSE_Abstract* DC) … m_fRTZoomFactor = m_zoom_params.m_fScopeZoomFactor; -- только ЗП … iAmmoElapsed = E->a_elapsed; m_flagsAddOnState = E->m_addon_flags.get(); m_ammoType = E->ammo_type; … 2 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
NikBulldog 0 Опубликовано 18 Ноября 2023 Поделиться Опубликовано 18 Ноября 2023 (изменено) Стало быть, без правки движка это исправить невозможно? До перезагрузки-то распознается вродн как. Изменено 18 Ноября 2023 пользователем NikBulldog Ссылка на комментарий
!Stars! 25 Опубликовано 27 Января 2024 Поделиться Опубликовано 27 Января 2024 (изменено) Здравствуйте, граждане. Назрел вопрос, хочу в определенный момент (при выдаче задания на зачистку определенного смарта) поссорить гг и группировку отличную от той которая дает задание. Как это грамотно реализовать и делается ли такое? @Nachzehrer_SS через файл faction_commander_initial по пути gamedata/script Изменено 27 Января 2024 пользователем !Stars! Ссылка на комментарий
Kirgudu 1 274 Опубликовано 28 Января 2024 Поделиться Опубликовано 28 Января 2024 @!Stars! есть штатная для ЧН функция установки отношения группировки к игроку, вызывается из кучи мест в логике, например: %=set_faction_community_to_actor(stalker:enemy)% Разумеется, никто не запрещает при необходимости вызвать её и из скрипта: xr_effects.set_faction_community_to_actor(nil, nil, { "stalker", "enemy" }) 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий
!Stars! 25 Опубликовано 28 Января 2024 Поделиться Опубликовано 28 Января 2024 @Kirgudu за совет огромное спасибо, но прошу уточнить. В faction_renegade.ltx установил в expansion установил зачистку смарта. Я иду в all.spawn, в смарт добавляю логику, в файле логики пишу функцию указанную выше и при получении задания за группировку ренегаты в данном случае он становится врагом для иной фракции которую укажу так? Поправьте если не прав. Ссылка на комментарий
Kirgudu 1 274 Опубликовано 28 Января 2024 Поделиться Опубликовано 28 Января 2024 (изменено) @!Stars! выглядит избыточно сложно - с одной стороны. А с другой - цели в секциях expansion конфигов группировок (из первого вопроса было непонятно, что речь идёт именно о них, есть ведь и оторванные от войны группировок задания на захват смартов) выдаются автоматически симуляцией, и врезаться в них не так просто. Да, можно попробовать сделать именно так, только подумать, что именно прописать в логике смарта, какую проверку сделать до того, как запустить функцию. Более короткая альтернатива - врезаться с условием куда-нибудь в sim_faction_brain_human.faction_brain_human:init_player_task и сделать всё на скриптовом уровне. Но тут уровень владения скриптами в целом и скриптами/логикой симуляции ВГ в частности потребуется изрядный. Войну группировок легко поломать. Так да, всё вполне возможно. Изменено 28 Января 2024 пользователем Kirgudu Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти