imcrazyhoudini 197 Опубликовано 24 Марта 2023 Где можно отключить использование смарт каверов зомби? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 24 Марта 2023 9 минут назад, Lieutenant Novikov сказал: Чем вскрывать xrGame? Чем-чем, исходя из того, под какую студию исходники. Визуалкой открывать соответствующей. 1 ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 2 Апреля 2023 Каким образом можно сделать кровососа-прыгуна? Должно выглядеть так: Игрок разворачивается и видит как кровосос совершает прыжок в его сторону, после по классике идёт бойня как с обычным кровососом. Каким образом сделать прыжок? Конечно подумал о схеме remark, но сами анимации не высокие или как правильно сказать, в общем в сценках ЧН видимо где-то это регулируется, но логики в config/scripts/agroprom или marsh не нашёл. Находил скрипт sr_bloodsucker, но там чёрт ногу сломит... Вопрос: как же правильно создать прыжок кровососа? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 7 Апреля 2023 Чёт опять не понимаю почему зомби не нападают на сталкеров, как-то всё сломалось непонятно чего, я и не трогал ничего. Скрытый текст [settings] glory_0 = 0 glory_1 = 0 glory_2 = 0 glory_3 = 0 glory_4 = 0 glory_5 = 0 [spawn_by_resource] 0 = sim_default_zombied_1, 30, sim_default_zombied_2, 40, sim_default_zombied_3, 20, sim_default_zombied_4, 10 [spawn_by_level] l01_yantar = sim_default_zombied_1, 10, sim_default_zombied_2, 20, sim_default_zombied_3, 30, sim_default_zombied_4, 40 [expansion_0] base_squad_number = 30 respawn_idle_time = 100 ;Время между двумя попытками доспауна отрядов в игровых минутах. respawn_hours = 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 ;Время, в который можно спаунить отряды (задаются времена суток) precondition_target = yan_base [expansion_1] ; Расслабить булки. base_squad_number = 30 [start_position] yan_zombied = yan_zombied Скрытый текст [smart_terrain] targets = yan_base sim_type = base important_point = true squad_capacity = 2 mutant_lair = false group_id = 3 spawn_point = yan_zombied_spawn_point att_restr = yan_zombied_rest def_restr = yan_zombied_rest sim_avail = true respawn_sector = zombied actor_hides = surge_hide_avaliable = false Скрытый текст [yan_zombied] faction = zombied npc = sim_default_zombied_1, sim_default_zombied_2, sim_default_zombied_3, sim_default_zombied_4, sim_default_zombied_1 target_smart = yan_base attack_power = 400 Где косяк? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 9 Апреля 2023 @Lieutenant Novikov это типо если есть поршень - атакуем? Не помогло. По-любому в faction_zombied дело, но что конкретно ковырять там - не знаю, вроде по примеру делал с оригинала, а бестолку. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 9 Апреля 2023 @Lieutenant Novikov решил сделать спавн отряда отдельно, вне зависимости от данного смарта, ибо сидеть над этим можно вечность... ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 11 Апреля 2023 Каким образом можно отключить ожидание после боя для некоторых НПС? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 18 Апреля 2023 [danger_condition@ignore] ignore_distance = 20 Я же правильно понимаю - противники за 20 метров для НПС существовать НЕ будут? Кстати, и почему такая конструкция убивает combat_ignore?: combat_ignore_cond = {=check_fighting(26) =enemy_gulag(yan_zombied:yan_zombied_attack)} Без =enemy_gulag(yan_zombied:yan_zombied_attack) работает. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 20 Апреля 2023 @Kirgudu вот оно что... А по отдельности оно существовать не может? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 20 Апреля 2023 48 минут назад, Kirgudu сказал: но не обязательно двух сразу? Нет, как раз обоих сразу, но чтобы враг с стори_ид 26 был как раз-таки вне смартов. Короче говоря игнор моба с стори_ид 26 и обоих смартов. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 7 Мая 2023 @ZeeK работает только на снорках, на остальных мутантах нет, проверено. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 8 Мая 2023 @h0N0r ща проверим... Кстати, в mob_jump не вижу friendly - не работает что ли? @h0N0r чудо, пашет. 1. Есть вариант сделать действительно видимым? 2. Возможно объединить это со схемой ремарк? Думал сделать, чтобы он отыграл крик (анимка есть такая), и лишь потом прыгнул. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 11 Мая 2023 (изменено) @h0N0r mob_remark не работает, прыжок отыгрывает только с mob_walker. Думал отыграть анимацию вот так: Скрытый текст [logic] active = mob_walker@2 [mob_walker@2] path_walk = yan_bloodsucker_normal_spawn_way path_look = yan_monstr_look braindead = true state = vis on_game_timer = 40 | mob_jump [mob_jump] path_jump = yan_monstr_look ph_jump_factor = 0.6 offset = 0,1,0 braindead = true state = vis on_signal = jumped | mob_walker [mob_walker] path_walk = yan_krovo_walk path_look = yan_krovo_look В вэйпоинт писал (как и look, так и walk): wp00|s=yan_bloodsucker|a=boloto_attack_link_bone Анимку как и звук не отыгрывает. Есть варианты? Изменено 11 Мая 2023 пользователем imcrazyhoudini ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 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. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 29 Июля 2023 Как править подобную проблему?: ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 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 197 Опубликовано 6 Сентября 2023 Подскажите, как засейвить одиночную логику НПС при переходе их с онлайн в оффлайн? Кондлисты не работают. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 16 Февраля @BеST дело не в этом скрипте, откатывай изменения которые делал до сего вылета, у меня на ТЧ такое было. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 24 Февраля Если НПС переходит с одной в другую логику, то НПС следовавший за ним в логике follower - виснет до сейв-лоада. Есть пути решения?.. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение
imcrazyhoudini 197 Опубликовано 24 Июня Ребята, есть готовый пример реализации поддержки кондлистов для логики НПС не в смартах? Хочу попытаться побороть баг связанный с сбросом активной логики при переходе НПС в оффлайн. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Поделиться этим сообщением Ссылка на сообщение