h0N0r 341 Опубликовано 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 316 Опубликовано 16 Июня 2023 Поделиться Опубликовано 16 Июня 2023 Судя по записям в [xrGame\ActorCondition.cpp], расчеты в движке ссылаются на конфиг ГГ, а значения m_zone_max_power[тип] могут доходить до 1.0. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 30 Июня 2023 Поделиться Опубликовано 30 Июня 2023 Как в ЧН определяется защита от физического урона? Есть старый параметр strike_protection и новый physic_strike_wound_immunity; при одинаковых значениях 0.3 + 0.25 в конфигах комбезов "СЕВА" и Долг-1 (легкий) в описании брони в первом случае 37%, во втором – всего 5%. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 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 209 Опубликовано 29 Июля 2023 Поделиться Опубликовано 29 Июля 2023 Как править подобную проблему?: ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 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 209 Опубликовано 6 Сентября 2023 Поделиться Опубликовано 6 Сентября 2023 Подскажите, как засейвить одиночную логику НПС при переходе их с онлайн в оффлайн? Кондлисты не работают. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
NikBulldog 0 Опубликовано 16 Ноября 2023 Поделиться Опубликовано 16 Ноября 2023 Форумчане, подскажите пожалуйста, как исправить баг на сброс модификации на кратность прицела у ГП27 и ФН200М. Какие файлы подправить и в чем проблема там? Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 17 Ноября 2023 Поделиться Опубликовано 17 Ноября 2023 Подробнее, пожалуйста: при каких условиях и что именно случается? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
NikBulldog 0 Опубликовано 17 Ноября 2023 Поделиться Опубликовано 17 Ноября 2023 (изменено) @Norman Eisenherz В Чистом Небе после установки апгрейдов на изменение кратности прицелов на ГП27 и на ФН200М, эффект апгрейда сбивается (то есть визуально кратность прицела становится стоковой) при перезагрузке или установке любой другой модификации, хотя остается отмеченным в описании оружия. Изменено 17 Ноября 2023 пользователем NikBulldog Конкретизация Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 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 316 Опубликовано 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 Января Поделиться Опубликовано 27 Января (изменено) Здравствуйте, граждане. Назрел вопрос, хочу в определенный момент (при выдаче задания на зачистку определенного смарта) поссорить гг и группировку отличную от той которая дает задание. Как это грамотно реализовать и делается ли такое? @Nachzehrer_SS через файл faction_commander_initial по пути gamedata/script Изменено 27 Января пользователем !Stars! Ссылка на комментарий
Kirgudu 1 217 Опубликовано 28 Января Поделиться Опубликовано 28 Января @!Stars! есть штатная для ЧН функция установки отношения группировки к игроку, вызывается из кучи мест в логике, например: %=set_faction_community_to_actor(stalker:enemy)% Разумеется, никто не запрещает при необходимости вызвать её и из скрипта: xr_effects.set_faction_community_to_actor(nil, nil, { "stalker", "enemy" }) 3 Инструмент Ссылка на комментарий
!Stars! 25 Опубликовано 28 Января Поделиться Опубликовано 28 Января @Kirgudu за совет огромное спасибо, но прошу уточнить. В faction_renegade.ltx установил в expansion установил зачистку смарта. Я иду в all.spawn, в смарт добавляю логику, в файле логики пишу функцию указанную выше и при получении задания за группировку ренегаты в данном случае он становится врагом для иной фракции которую укажу так? Поправьте если не прав. Ссылка на комментарий
Kirgudu 1 217 Опубликовано 28 Января Поделиться Опубликовано 28 Января (изменено) @!Stars! выглядит избыточно сложно - с одной стороны. А с другой - цели в секциях expansion конфигов группировок (из первого вопроса было непонятно, что речь идёт именно о них, есть ведь и оторванные от войны группировок задания на захват смартов) выдаются автоматически симуляцией, и врезаться в них не так просто. Да, можно попробовать сделать именно так, только подумать, что именно прописать в логике смарта, какую проверку сделать до того, как запустить функцию. Более короткая альтернатива - врезаться с условием куда-нибудь в sim_faction_brain_human.faction_brain_human:init_player_task и сделать всё на скриптовом уровне. Но тут уровень владения скриптами в целом и скриптами/логикой симуляции ВГ в частности потребуется изрядный. Войну группировок легко поломать. Так да, всё вполне возможно. Изменено 28 Января пользователем Kirgudu Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти