https://xray-engine.org/api.php?action=feedcontributions&user=RedPython&feedformat=atomxrWiki - Вклад участника [ru]2024-03-28T15:16:18ZВклад участникаMediaWiki 1.27.7https://xray-engine.org/index.php?title=%D0%A2%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&diff=1270Типичные ошибки и методы их устранения2024-02-24T22:16:32Z<p>RedPython: </p>
<hr />
<div>Для поиска по страничке используйте '''Ctrl+F'''<br />
<br />
==xrAI==<br />
<syntaxhighlight lang="text">[error]Expression : tpGraphs.size()<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : X:\xray\utils\xrAI\xr_graph_merge.cpp<br />
[error]Line : 599<br />
[error]Description : empty [levels] section in configs!</syntaxhighlight><br />
Секция уровня не добавлена в game_levels.ltx<br />
----<br />
<syntaxhighlight lang="text">! AI-node [87.500, 9.188, 160.300] not connected to AI-map<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : error_nodes.empty()<br />
[error]Function : CGameGraphBuilder::check_fill<br />
[error]File : X:\xray\utils\xrAI\game_graph_builder.cpp<br />
[error]Line : 273<br />
[error]Description : Some ai-node is not connected to AI-map. See log for details.</syntaxhighlight><br />
Причин такой ошибки может быть две: одна явная, другая неочевидная.<br />
Явная – если в логе вы видите нижнюю секцию с текстом про <code>Some ai-node is not connected to AI-map</code>. Значит, одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.<br /><br />
Если же в логе тьма-тьмущая строк вида <code>! AI-node [-216.650, -0.023, 198.450] not connected to AI-map</code>, а в конце нет внятного сообщения об ошибке, лишь какой-то мутный стектрейс, то скорее всего, компилятор рухнул, воспринимая каждую ноду ИИ-карты как несвязную, и не успел дойти до стадии загрузки точек графа. Нужно проверить, есть ли на уровне точки графа, если нет, то добавить и переэкспортировать спаун.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGameGraphBuilder::save_cross_table<br />
[error]File : .\game_graph_builder.cpp<br />
[error]Line : 351<br />
[error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex</syntaxhighlight><br />
На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : F<br />
[error]Function : xrLoad<br />
[error]File : .\compiler_load.cpp<br />
[error]Line : 272<br />
[error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight><br />
В папке с уровнем gamedata\level\escape отсутствует build.aimap<br /><br />
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map<br />
----<br />
<syntaxhighlight lang="text">! Cannot build GAME path! (object esc_tutorial_wounded0826)<br />
! CURRENT LEVEL : escape<br />
! CURRENT game point position : [-146.011078][-20.711269][-147.502380]<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : I != levels().end()<br />
[error]Function : GameGraph::CHeader::level<br />
[error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h<br />
[error]Line : 153<br />
[error]Description : there is no specified level in the game graph : 205</syntaxhighlight><br />
Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f)<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CVertexAllocatorFixed<2097152>::CDataStorage<struct CVertexPath<1>::DataStoragePath<struct CVertexManagerFixed<unsigned int,unsigned int,8>::VertexManager<struct CDataStorageSingleLinkedList<0>::SingleLinkedList<struct CDataStorageDoubleLinkedList<0>::DoubleLinkedList<struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>::BucketList<struct CDijkstra<float,struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>,struct CVertexManagerFixed<unsigned int,unsigned int,8>,struct CVertexAllocatorFixed<2097152>,1,struct CVertexPath<1>,struct AStar::_Vertex<float,class CEmptyClassTemplate>::_vertex,struct CBuilderAllocatorConstructor,struct CManagerBuilderAllocatorConstructor,struct CDataStorageConstructor,unsigned int>::_Vertex>::_vertex>::_vertex>::_vertex>::_vertex>::_vertex>::create_vertex<br />
[error]File : x:\clearsky\src\engine\utils\xrai\vertex_allocator_fixed_inline.h<br />
[error]Line : 51<br />
[error]Description : m_vertex_count < reserved_vertex_count - 1</syntaxhighlight><br />
Эту ошибку можно обойти ключом [[xrAI|-no_separator_check]]<br />
<br />
По какой причине она вообще возникает и не допустить её возникновения?<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !m_border.empty()<br />
[error]Function : CSpaceRestrictorWrapper::build_border<br />
[error]File : .\space_restrictor_wrapper.cpp<br />
[error]Line : 215<br />
[error]Description : space restrictor has no border<br />
[error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight><br />
Аномалия расположена не на ИИ-сетке.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : xr_graph_merge.cpp<br />
[error]Line : 621<br />
[error]Description : M != (*K).second->m_tVertexMap.end()</syntaxhighlight><br />
Одной из точек графа для [[level changer|перехода между уровнями]] задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки.<br />
<br />
== Красные строки в логе ==<br />
<syntaxhighlight lang="text">! level_path().failed() during navigation</syntaxhighlight><br />
Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды.<br />
<br />
==Редакторы==<br />
<syntaxhighlight lang="text">Expression : assertion failed<br />
Function : IReader::advance<br />
File : x:\clearsky\src\engine\xrcore\FS.h<br />
Line : 276<br />
Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight><br />
Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать.<br />
<br />
==Actor Editor==<br />
<syntaxhighlight lang="text">!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Can't find bone: 'bip01'<br />
!Can't find bone: 'root_stalker'<br />
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47']<br />
! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'.<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : assertion failed<br />
[error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 732<br />
[error]Description : m_Motions.size()</syntaxhighlight><br />
В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет.<br />
<br />
==Игра==<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_error<br />
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp<br />
[error]Line : 180<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight><br />
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620]<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : false<br />
[error]Function : CXml::Load<br />
[error]File : xrXMLParser.cpp<br />
[error]Line : 87<br />
[error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.</syntaxhighlight><br />
В указанном файле ошибка синтаксиса: где-то не закрыт тег.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility()<br />
[error]Function : CALifeSpawnRegistry::load<br />
[error]File : E:\priquel\sources\engine\xrGame\alife_spawn_registry.cpp<br />
[error]Line : 110<br />
[error]Description : Saved game doesn't correspond to the spawn : DELETE SAVED GAME!</syntaxhighlight><br />
Файл сохранения не соответствует спавну, нужно пересобрать спавн. Можно обойти ключом <code>-ignore_save_incompatibility</code>, в таком случае спавн будет соответствовать учтённому в сохранении.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()<br />
[error]Function : CAI_Space::load<br />
[error]File : ai_space.cpp<br />
[error]Line : 110<br />
[error]Description : cross_table doesn't correspond to the AI-map</syntaxhighlight><br />
Аналогично предыдущему вылету: данные из спавна не соответствуют новой ИИ-сетке. Нужно пересобрать спавн.<br />
----<br />
<syntaxhighlight lang="text"><br />
Expression : fatal error<br />
Function : out_of_memory_handler<br />
File : .\xrDebugNew.cpp<br />
Line : 318<br />
Description : <no expression><br />
Arguments : Out of memory. Memory request: 3506347 K</syntaxhighlight><br />
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут]<br />
<br />
==Геометрия уровней==<br />
Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1:<br />
<syntaxhighlight lang="text">Expression : fatal error<br />
Function : CBlender_default::Compile<br />
File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp<br />
Line : 50<br />
Description : <no expression><br />
Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02</syntaxhighlight><br />
Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default.<br />
<br /><br />
Без перекомпиляции уровня исправить это можно с помощью [[level. compiler/decompiler (level. cdc) | распаковщика файла .level]]. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида<br />
<syntaxhighlight lang="ini">[58]<br />
shader = default<br />
textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm</syntaxhighlight><br />
и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так:<br />
<syntaxhighlight lang="ini">[58]<br />
shader = def_shaders\def_vertex<br />
textures = floor\floor_dirty_gr_02</syntaxhighlight><br />
Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем.<br />
----<br />
<syntaxhighlight lang="text">Expression : fs<br />
Function : CResourceManager::_CreateVS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 203<br />
Description : shader file doesnt exist<br />
Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs<br />
<br />
Expression : R<br />
Function : CResourceManager::_CreatePS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 309<br />
Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps</syntaxhighlight><br />
Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках.<br />
Чтобы игра не валилась, нужно подсунуть [https://files.xray-engine.org/shaders/r2_deffer_impl_lmh_pseudofix.7z те файлы, что она хочет]. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри.<br />
<br />
== Динамические модели ==<br />
<syntaxhighlight lang="text">Expression : m_attack_animation.valid()<br />
Function : CVisualZone::net_Spawn<br />
File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp<br />
Line : 34<br />
Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]</syntaxhighlight><br />
На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : motion_ID.valid()<br />
[error]Function : CKinematicsAnimated::ID_Cycle<br />
[error]File : ..\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 208<br />
[error]Description : ! MODEL: can't find cycle: <br />
[error]Arguments : death_init</syntaxhighlight><br />
Не найдена анимация с именем '''death_init'''. Возможно, к модели не подключен нужный .omf<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : BI_NONE!=f_bones.back()<br />
[error]Function : P_build_Shell<br />
[error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp<br />
[error]Line : 136<br />
[error]Description : wrong fixed bone</syntaxhighlight><br />
Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя '''link1''', а для физического объекта в редакторе уровней было указано имя '''link'''.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)</syntaxhighlight><br />
Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться.<br />
<br />
== Симуляция ==<br />
<syntaxhighlight lang="text">[error]Expression : m_path<br />
[error]Function : CPatrolPathParams::CPatrolPathParams<br />
[error]File : patrol_path_params.cpp<br />
[error]Line : 19<br />
[error]Description : There is no patrol path<br />
[error]Arguments : esc_hit_point</syntaxhighlight>На уровне отсутствует точка пути esc_hit_point.<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1.<br />
----<br />
<syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight><br />
В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_south_checkpoint_st_patrol_2_walk] is inaccessible for object [sim_default_military_00323]</syntaxhighlight><br />
Похоже, что точки пути '''patrol''' находятся вне рестриктора, накрывающего смарт, и неписи не могут попасть на работу. Нужно расширить рестриктор, чтобы он накрывал эти точки.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: 'Attempt to read a non-existant string field 'npc' in section 'esc_flesh_generic'</syntaxhighlight><br />
Не очень вразумительный лог, который в одном из случаев указывал на то, что в '''faction_monster.ltx''' в секции ''[start_position]'' указано имя, которое не существует в '''squad_descr_*.ltx'''. <br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_granary_st_kamp_1_task] is inaccessible for object [sim_default_bandit_00413]</syntaxhighlight><br />
Такая ошибка была, когда одной из аномалий в пределах смарта задали тип рестриктора OUT. При этом путь esc_granary_st_kamp_1_task состоит из одной точки, и совершенно точно не входит в шейп аномалии. Нужно объяснение.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ.<br />
----<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : ..\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)</syntaxhighlight>Такая ошибка вылезла, когда на карту был добавлен спейсрестриктор без каких-либо настроек.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id)<br />
[error]Function : CPatrolPoint::verify_vertex_id<br />
[error]File : C:\xray\xrGame\patrol_point.cpp<br />
[error]Line : 46<br />
<br />
! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex!<br />
</syntaxhighlight>Точка пути находится не на ИИ-сетке. Необходимо либо подвинуть точку, либо проложить ноды ИИ-сетки под ней. Такую ошибку можно увидеть лишь в отладочной сборке, в релизной же выдаётся лог ниже.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)<br />
[error]Function : CALifeSwitchManager::add_online<br />
[error]File : X:\xray\xrGame\alife_switch_manager.cpp<br />
[error]Line : 64<br />
[error]Description : Invalid vertex for object<br />
[error]Arguments : sim_default_military_1_sniper1561</syntaxhighlight><br />
Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше.<br />
<br />
== Сетевая игра ==<br />
<syntaxhighlight lang="text">[error]Expression : rpoints[0].size()<br />
[error]Function : game_sv_Deathmatch::Create<br />
[error]File : game_sv_deathmatch.cpp<br />
[error]Line : 101<br />
[error]Description : rpoints for players not found</syntaxhighlight><br />
На карте отсутствуют точки респавна для игроков.<br />
<br />
[[Категория:Справка]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A2%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&diff=1269Типичные ошибки и методы их устранения2024-02-24T22:07:56Z<p>RedPython: /* xrAI */</p>
<hr />
<div>Для поиска по страничке используйте '''Ctrl+F'''<br />
<br />
==xrAI==<br />
<syntaxhighlight lang="text">[error]Expression : tpGraphs.size()<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : X:\xray\utils\xrAI\xr_graph_merge.cpp<br />
[error]Line : 599<br />
[error]Description : empty [levels] section in configs!</syntaxhighlight><br />
Секция уровня не добавлена в game_levels.ltx<br />
----<br />
<syntaxhighlight lang="text">! AI-node [87.500, 9.188, 160.300] not connected to AI-map<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : error_nodes.empty()<br />
[error]Function : CGameGraphBuilder::check_fill<br />
[error]File : X:\xray\utils\xrAI\game_graph_builder.cpp<br />
[error]Line : 273<br />
[error]Description : Some ai-node is not connected to AI-map. See log for details.</syntaxhighlight><br />
Причин такой ошибки может быть две: одна явная, другая неочевидная.<br />
# Одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.<br />
# Либо же на уровне нет ни одной точки графа и компилятор рушится, воспринимая каждую ноду ИИ-карты как несвязную, даже не дойдя до выдачи адекватной ошибки.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGameGraphBuilder::save_cross_table<br />
[error]File : .\game_graph_builder.cpp<br />
[error]Line : 351<br />
[error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex</syntaxhighlight><br />
На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : F<br />
[error]Function : xrLoad<br />
[error]File : .\compiler_load.cpp<br />
[error]Line : 272<br />
[error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight><br />
В папке с уровнем gamedata\level\escape отсутствует build.aimap<br /><br />
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map<br />
----<br />
<syntaxhighlight lang="text">! Cannot build GAME path! (object esc_tutorial_wounded0826)<br />
! CURRENT LEVEL : escape<br />
! CURRENT game point position : [-146.011078][-20.711269][-147.502380]<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : I != levels().end()<br />
[error]Function : GameGraph::CHeader::level<br />
[error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h<br />
[error]Line : 153<br />
[error]Description : there is no specified level in the game graph : 205</syntaxhighlight><br />
Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f)<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CVertexAllocatorFixed<2097152>::CDataStorage<struct CVertexPath<1>::DataStoragePath<struct CVertexManagerFixed<unsigned int,unsigned int,8>::VertexManager<struct CDataStorageSingleLinkedList<0>::SingleLinkedList<struct CDataStorageDoubleLinkedList<0>::DoubleLinkedList<struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>::BucketList<struct CDijkstra<float,struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>,struct CVertexManagerFixed<unsigned int,unsigned int,8>,struct CVertexAllocatorFixed<2097152>,1,struct CVertexPath<1>,struct AStar::_Vertex<float,class CEmptyClassTemplate>::_vertex,struct CBuilderAllocatorConstructor,struct CManagerBuilderAllocatorConstructor,struct CDataStorageConstructor,unsigned int>::_Vertex>::_vertex>::_vertex>::_vertex>::_vertex>::_vertex>::create_vertex<br />
[error]File : x:\clearsky\src\engine\utils\xrai\vertex_allocator_fixed_inline.h<br />
[error]Line : 51<br />
[error]Description : m_vertex_count < reserved_vertex_count - 1</syntaxhighlight><br />
Эту ошибку можно обойти ключом [[xrAI|-no_separator_check]]<br />
<br />
По какой причине она вообще возникает и не допустить её возникновения?<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !m_border.empty()<br />
[error]Function : CSpaceRestrictorWrapper::build_border<br />
[error]File : .\space_restrictor_wrapper.cpp<br />
[error]Line : 215<br />
[error]Description : space restrictor has no border<br />
[error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight><br />
Аномалия расположена не на ИИ-сетке.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : xr_graph_merge.cpp<br />
[error]Line : 621<br />
[error]Description : M != (*K).second->m_tVertexMap.end()</syntaxhighlight><br />
Одной из точек графа для [[level changer|перехода между уровнями]] задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки.<br />
<br />
== Красные строки в логе ==<br />
<syntaxhighlight lang="text">! level_path().failed() during navigation</syntaxhighlight><br />
Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды.<br />
<br />
==Редакторы==<br />
<syntaxhighlight lang="text">Expression : assertion failed<br />
Function : IReader::advance<br />
File : x:\clearsky\src\engine\xrcore\FS.h<br />
Line : 276<br />
Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight><br />
Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать.<br />
<br />
==Actor Editor==<br />
<syntaxhighlight lang="text">!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Can't find bone: 'bip01'<br />
!Can't find bone: 'root_stalker'<br />
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47']<br />
! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'.<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : assertion failed<br />
[error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 732<br />
[error]Description : m_Motions.size()</syntaxhighlight><br />
В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет.<br />
<br />
==Игра==<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_error<br />
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp<br />
[error]Line : 180<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight><br />
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620]<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : false<br />
[error]Function : CXml::Load<br />
[error]File : xrXMLParser.cpp<br />
[error]Line : 87<br />
[error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.</syntaxhighlight><br />
В указанном файле ошибка синтаксиса: где-то не закрыт тег.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility()<br />
[error]Function : CALifeSpawnRegistry::load<br />
[error]File : E:\priquel\sources\engine\xrGame\alife_spawn_registry.cpp<br />
[error]Line : 110<br />
[error]Description : Saved game doesn't correspond to the spawn : DELETE SAVED GAME!</syntaxhighlight><br />
Файл сохранения не соответствует спавну, нужно пересобрать спавн. Можно обойти ключом <code>-ignore_save_incompatibility</code>, в таком случае спавн будет соответствовать учтённому в сохранении.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()<br />
[error]Function : CAI_Space::load<br />
[error]File : ai_space.cpp<br />
[error]Line : 110<br />
[error]Description : cross_table doesn't correspond to the AI-map</syntaxhighlight><br />
Аналогично предыдущему вылету: данные из спавна не соответствуют новой ИИ-сетке. Нужно пересобрать спавн.<br />
----<br />
<syntaxhighlight lang="text"><br />
Expression : fatal error<br />
Function : out_of_memory_handler<br />
File : .\xrDebugNew.cpp<br />
Line : 318<br />
Description : <no expression><br />
Arguments : Out of memory. Memory request: 3506347 K</syntaxhighlight><br />
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут]<br />
<br />
==Геометрия уровней==<br />
Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1:<br />
<syntaxhighlight lang="text">Expression : fatal error<br />
Function : CBlender_default::Compile<br />
File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp<br />
Line : 50<br />
Description : <no expression><br />
Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02</syntaxhighlight><br />
Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default.<br />
<br /><br />
Без перекомпиляции уровня исправить это можно с помощью [[level. compiler/decompiler (level. cdc) | распаковщика файла .level]]. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида<br />
<syntaxhighlight lang="ini">[58]<br />
shader = default<br />
textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm</syntaxhighlight><br />
и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так:<br />
<syntaxhighlight lang="ini">[58]<br />
shader = def_shaders\def_vertex<br />
textures = floor\floor_dirty_gr_02</syntaxhighlight><br />
Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем.<br />
----<br />
<syntaxhighlight lang="text">Expression : fs<br />
Function : CResourceManager::_CreateVS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 203<br />
Description : shader file doesnt exist<br />
Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs<br />
<br />
Expression : R<br />
Function : CResourceManager::_CreatePS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 309<br />
Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps</syntaxhighlight><br />
Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках.<br />
Чтобы игра не валилась, нужно подсунуть [https://files.xray-engine.org/shaders/r2_deffer_impl_lmh_pseudofix.7z те файлы, что она хочет]. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри.<br />
<br />
== Динамические модели ==<br />
<syntaxhighlight lang="text">Expression : m_attack_animation.valid()<br />
Function : CVisualZone::net_Spawn<br />
File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp<br />
Line : 34<br />
Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]</syntaxhighlight><br />
На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : motion_ID.valid()<br />
[error]Function : CKinematicsAnimated::ID_Cycle<br />
[error]File : ..\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 208<br />
[error]Description : ! MODEL: can't find cycle: <br />
[error]Arguments : death_init</syntaxhighlight><br />
Не найдена анимация с именем '''death_init'''. Возможно, к модели не подключен нужный .omf<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : BI_NONE!=f_bones.back()<br />
[error]Function : P_build_Shell<br />
[error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp<br />
[error]Line : 136<br />
[error]Description : wrong fixed bone</syntaxhighlight><br />
Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя '''link1''', а для физического объекта в редакторе уровней было указано имя '''link'''.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)</syntaxhighlight><br />
Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться.<br />
<br />
== Симуляция ==<br />
<syntaxhighlight lang="text">[error]Expression : m_path<br />
[error]Function : CPatrolPathParams::CPatrolPathParams<br />
[error]File : patrol_path_params.cpp<br />
[error]Line : 19<br />
[error]Description : There is no patrol path<br />
[error]Arguments : esc_hit_point</syntaxhighlight>На уровне отсутствует точка пути esc_hit_point.<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1.<br />
----<br />
<syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight><br />
В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_south_checkpoint_st_patrol_2_walk] is inaccessible for object [sim_default_military_00323]</syntaxhighlight><br />
Похоже, что точки пути '''patrol''' находятся вне рестриктора, накрывающего смарт, и неписи не могут попасть на работу. Нужно расширить рестриктор, чтобы он накрывал эти точки.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: 'Attempt to read a non-existant string field 'npc' in section 'esc_flesh_generic'</syntaxhighlight><br />
Не очень вразумительный лог, который в одном из случаев указывал на то, что в '''faction_monster.ltx''' в секции ''[start_position]'' указано имя, которое не существует в '''squad_descr_*.ltx'''. <br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_granary_st_kamp_1_task] is inaccessible for object [sim_default_bandit_00413]</syntaxhighlight><br />
Такая ошибка была, когда одной из аномалий в пределах смарта задали тип рестриктора OUT. При этом путь esc_granary_st_kamp_1_task состоит из одной точки, и совершенно точно не входит в шейп аномалии. Нужно объяснение.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ.<br />
----<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : ..\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)</syntaxhighlight>Такая ошибка вылезла, когда на карту был добавлен спейсрестриктор без каких-либо настроек.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id)<br />
[error]Function : CPatrolPoint::verify_vertex_id<br />
[error]File : C:\xray\xrGame\patrol_point.cpp<br />
[error]Line : 46<br />
<br />
! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex!<br />
</syntaxhighlight>Точка пути находится не на ИИ-сетке. Необходимо либо подвинуть точку, либо проложить ноды ИИ-сетки под ней. Такую ошибку можно увидеть лишь в отладочной сборке, в релизной же выдаётся лог ниже.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)<br />
[error]Function : CALifeSwitchManager::add_online<br />
[error]File : X:\xray\xrGame\alife_switch_manager.cpp<br />
[error]Line : 64<br />
[error]Description : Invalid vertex for object<br />
[error]Arguments : sim_default_military_1_sniper1561</syntaxhighlight><br />
Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше.<br />
<br />
== Сетевая игра ==<br />
<syntaxhighlight lang="text">[error]Expression : rpoints[0].size()<br />
[error]Function : game_sv_Deathmatch::Create<br />
[error]File : game_sv_deathmatch.cpp<br />
[error]Line : 101<br />
[error]Description : rpoints for players not found</syntaxhighlight><br />
На карте отсутствуют точки респавна для игроков.<br />
<br />
[[Категория:Справка]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A2%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&diff=1268Типичные ошибки и методы их устранения2024-02-24T22:00:42Z<p>RedPython: /* xrAI */</p>
<hr />
<div>Для поиска по страничке используйте '''Ctrl+F'''<br />
<br />
==xrAI==<br />
<syntaxhighlight lang="text">[error]Expression : tpGraphs.size()<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : X:\xray\utils\xrAI\xr_graph_merge.cpp<br />
[error]Line : 599<br />
[error]Description : empty [levels] section in configs!</syntaxhighlight><br />
Секция уровня не добавлена в game_levels.ltx<br />
----<br />
<syntaxhighlight lang="text">! AI-node [87.500, 9.188, 160.300] not connected to AI-map<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : error_nodes.empty()<br />
[error]Function : CGameGraphBuilder::check_fill<br />
[error]File : X:\xray\utils\xrAI\game_graph_builder.cpp<br />
[error]Line : 273<br />
[error]Description : Some ai-node is not connected to AI-map. See log for details.</syntaxhighlight><br />
Одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : F<br />
[error]Function : xrLoad<br />
[error]File : .\compiler_load.cpp<br />
[error]Line : 272<br />
[error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight><br />
В папке с уровнем gamedata\level\escape отсутствует build.aimap<br /><br />
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGameGraphBuilder::save_cross_table<br />
[error]File : .\game_graph_builder.cpp<br />
[error]Line : 351<br />
[error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex</syntaxhighlight><br />
На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game<br />
----<br />
<syntaxhighlight lang="text">! Cannot build GAME path! (object esc_tutorial_wounded0826)<br />
! CURRENT LEVEL : escape<br />
! CURRENT game point position : [-146.011078][-20.711269][-147.502380]<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : I != levels().end()<br />
[error]Function : GameGraph::CHeader::level<br />
[error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h<br />
[error]Line : 153<br />
[error]Description : there is no specified level in the game graph : 205</syntaxhighlight><br />
Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f)<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CVertexAllocatorFixed<2097152>::CDataStorage<struct CVertexPath<1>::DataStoragePath<struct CVertexManagerFixed<unsigned int,unsigned int,8>::VertexManager<struct CDataStorageSingleLinkedList<0>::SingleLinkedList<struct CDataStorageDoubleLinkedList<0>::DoubleLinkedList<struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>::BucketList<struct CDijkstra<float,struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>,struct CVertexManagerFixed<unsigned int,unsigned int,8>,struct CVertexAllocatorFixed<2097152>,1,struct CVertexPath<1>,struct AStar::_Vertex<float,class CEmptyClassTemplate>::_vertex,struct CBuilderAllocatorConstructor,struct CManagerBuilderAllocatorConstructor,struct CDataStorageConstructor,unsigned int>::_Vertex>::_vertex>::_vertex>::_vertex>::_vertex>::_vertex>::create_vertex<br />
[error]File : x:\clearsky\src\engine\utils\xrai\vertex_allocator_fixed_inline.h<br />
[error]Line : 51<br />
[error]Description : m_vertex_count < reserved_vertex_count - 1</syntaxhighlight><br />
Эту ошибку можно обойти ключом [[xrAI|-no_separator_check]]<br />
<br />
По какой причине она вообще возникает и не допустить её возникновения?<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !m_border.empty()<br />
[error]Function : CSpaceRestrictorWrapper::build_border<br />
[error]File : .\space_restrictor_wrapper.cpp<br />
[error]Line : 215<br />
[error]Description : space restrictor has no border<br />
[error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight><br />
Аномалия расположена не на ИИ-сетке.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : xr_graph_merge.cpp<br />
[error]Line : 621<br />
[error]Description : M != (*K).second->m_tVertexMap.end()</syntaxhighlight><br />
Одной из точек графа для [[level changer|перехода между уровнями]] задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки.<br />
<br />
== Красные строки в логе ==<br />
<syntaxhighlight lang="text">! level_path().failed() during navigation</syntaxhighlight><br />
Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды.<br />
<br />
==Редакторы==<br />
<syntaxhighlight lang="text">Expression : assertion failed<br />
Function : IReader::advance<br />
File : x:\clearsky\src\engine\xrcore\FS.h<br />
Line : 276<br />
Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight><br />
Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать.<br />
<br />
==Actor Editor==<br />
<syntaxhighlight lang="text">!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Can't find bone: 'bip01'<br />
!Can't find bone: 'root_stalker'<br />
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47']<br />
! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'.<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : assertion failed<br />
[error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 732<br />
[error]Description : m_Motions.size()</syntaxhighlight><br />
В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет.<br />
<br />
==Игра==<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_error<br />
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp<br />
[error]Line : 180<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight><br />
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620]<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : false<br />
[error]Function : CXml::Load<br />
[error]File : xrXMLParser.cpp<br />
[error]Line : 87<br />
[error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.</syntaxhighlight><br />
В указанном файле ошибка синтаксиса: где-то не закрыт тег.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility()<br />
[error]Function : CALifeSpawnRegistry::load<br />
[error]File : E:\priquel\sources\engine\xrGame\alife_spawn_registry.cpp<br />
[error]Line : 110<br />
[error]Description : Saved game doesn't correspond to the spawn : DELETE SAVED GAME!</syntaxhighlight><br />
Файл сохранения не соответствует спавну, нужно пересобрать спавн. Можно обойти ключом <code>-ignore_save_incompatibility</code>, в таком случае спавн будет соответствовать учтённому в сохранении.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()<br />
[error]Function : CAI_Space::load<br />
[error]File : ai_space.cpp<br />
[error]Line : 110<br />
[error]Description : cross_table doesn't correspond to the AI-map</syntaxhighlight><br />
Аналогично предыдущему вылету: данные из спавна не соответствуют новой ИИ-сетке. Нужно пересобрать спавн.<br />
----<br />
<syntaxhighlight lang="text"><br />
Expression : fatal error<br />
Function : out_of_memory_handler<br />
File : .\xrDebugNew.cpp<br />
Line : 318<br />
Description : <no expression><br />
Arguments : Out of memory. Memory request: 3506347 K</syntaxhighlight><br />
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут]<br />
<br />
==Геометрия уровней==<br />
Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1:<br />
<syntaxhighlight lang="text">Expression : fatal error<br />
Function : CBlender_default::Compile<br />
File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp<br />
Line : 50<br />
Description : <no expression><br />
Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02</syntaxhighlight><br />
Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default.<br />
<br /><br />
Без перекомпиляции уровня исправить это можно с помощью [[level. compiler/decompiler (level. cdc) | распаковщика файла .level]]. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида<br />
<syntaxhighlight lang="ini">[58]<br />
shader = default<br />
textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm</syntaxhighlight><br />
и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так:<br />
<syntaxhighlight lang="ini">[58]<br />
shader = def_shaders\def_vertex<br />
textures = floor\floor_dirty_gr_02</syntaxhighlight><br />
Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем.<br />
----<br />
<syntaxhighlight lang="text">Expression : fs<br />
Function : CResourceManager::_CreateVS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 203<br />
Description : shader file doesnt exist<br />
Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs<br />
<br />
Expression : R<br />
Function : CResourceManager::_CreatePS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 309<br />
Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps</syntaxhighlight><br />
Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках.<br />
Чтобы игра не валилась, нужно подсунуть [https://files.xray-engine.org/shaders/r2_deffer_impl_lmh_pseudofix.7z те файлы, что она хочет]. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри.<br />
<br />
== Динамические модели ==<br />
<syntaxhighlight lang="text">Expression : m_attack_animation.valid()<br />
Function : CVisualZone::net_Spawn<br />
File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp<br />
Line : 34<br />
Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]</syntaxhighlight><br />
На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : motion_ID.valid()<br />
[error]Function : CKinematicsAnimated::ID_Cycle<br />
[error]File : ..\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 208<br />
[error]Description : ! MODEL: can't find cycle: <br />
[error]Arguments : death_init</syntaxhighlight><br />
Не найдена анимация с именем '''death_init'''. Возможно, к модели не подключен нужный .omf<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : BI_NONE!=f_bones.back()<br />
[error]Function : P_build_Shell<br />
[error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp<br />
[error]Line : 136<br />
[error]Description : wrong fixed bone</syntaxhighlight><br />
Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя '''link1''', а для физического объекта в редакторе уровней было указано имя '''link'''.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)</syntaxhighlight><br />
Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться.<br />
<br />
== Симуляция ==<br />
<syntaxhighlight lang="text">[error]Expression : m_path<br />
[error]Function : CPatrolPathParams::CPatrolPathParams<br />
[error]File : patrol_path_params.cpp<br />
[error]Line : 19<br />
[error]Description : There is no patrol path<br />
[error]Arguments : esc_hit_point</syntaxhighlight>На уровне отсутствует точка пути esc_hit_point.<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1.<br />
----<br />
<syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight><br />
В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_south_checkpoint_st_patrol_2_walk] is inaccessible for object [sim_default_military_00323]</syntaxhighlight><br />
Похоже, что точки пути '''patrol''' находятся вне рестриктора, накрывающего смарт, и неписи не могут попасть на работу. Нужно расширить рестриктор, чтобы он накрывал эти точки.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: 'Attempt to read a non-existant string field 'npc' in section 'esc_flesh_generic'</syntaxhighlight><br />
Не очень вразумительный лог, который в одном из случаев указывал на то, что в '''faction_monster.ltx''' в секции ''[start_position]'' указано имя, которое не существует в '''squad_descr_*.ltx'''. <br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_granary_st_kamp_1_task] is inaccessible for object [sim_default_bandit_00413]</syntaxhighlight><br />
Такая ошибка была, когда одной из аномалий в пределах смарта задали тип рестриктора OUT. При этом путь esc_granary_st_kamp_1_task состоит из одной точки, и совершенно точно не входит в шейп аномалии. Нужно объяснение.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ.<br />
----<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : ..\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)</syntaxhighlight>Такая ошибка вылезла, когда на карту был добавлен спейсрестриктор без каких-либо настроек.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id)<br />
[error]Function : CPatrolPoint::verify_vertex_id<br />
[error]File : C:\xray\xrGame\patrol_point.cpp<br />
[error]Line : 46<br />
<br />
! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex!<br />
</syntaxhighlight>Точка пути находится не на ИИ-сетке. Необходимо либо подвинуть точку, либо проложить ноды ИИ-сетки под ней. Такую ошибку можно увидеть лишь в отладочной сборке, в релизной же выдаётся лог ниже.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)<br />
[error]Function : CALifeSwitchManager::add_online<br />
[error]File : X:\xray\xrGame\alife_switch_manager.cpp<br />
[error]Line : 64<br />
[error]Description : Invalid vertex for object<br />
[error]Arguments : sim_default_military_1_sniper1561</syntaxhighlight><br />
Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше.<br />
<br />
== Сетевая игра ==<br />
<syntaxhighlight lang="text">[error]Expression : rpoints[0].size()<br />
[error]Function : game_sv_Deathmatch::Create<br />
[error]File : game_sv_deathmatch.cpp<br />
[error]Line : 101<br />
[error]Description : rpoints for players not found</syntaxhighlight><br />
На карте отсутствуют точки респавна для игроков.<br />
<br />
[[Категория:Справка]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&diff=1267Настройка физических объектов2024-02-24T09:01:54Z<p>RedPython: </p>
<hr />
<div>== Вводная ==<br />
Система координат в ODE аналогична используемой в OpenGL: вертикальная Y направлена снизу вверх, X слева направо, Z к наблюдателю.<br />
<br />
В сталкире доступно 5 видов сочлений:<br />
* '''Rigid''' – твёрдое тело<br />
* '''Cloth''' – мягкое тело (тряпка)<br />
* '''Joint''' – сустав или шарнир (вращение по XYZ)<br />
* '''Wheel''' – колесо (можно управлять осью X при вращении по оси Z)<br />
* '''Slider''' – скольжение (перемещение и вращение по Z)<br />
<br />
Виды примитивов (collision shape) для просчёта столкновений:<br />
* '''Box''' (параллелепипед)<br />
* '''Sphere''' (сфера)<br />
* '''Cylinder''' (цилиндр)<br />
В простых объектах обычно используется один примитив (например, бочка использует один цилиндр). Сложные (составные) модели могут использовать несколько примитивов (например, стол использует один параллелепипед для столешницы и четыре для ножек).<br />
<br />
== Свойства тела ==<br />
Жесткие тела в сталкире обладают следующими основными свойствами:<br />
* '''Mass''' (масса)<br />
* '''Center of Mass''' (позиция центра массы)<br />
* '''Friction''' – коэффициент трения. Чем меньше, тем более "скользким" считается элемент.<br />
* '''Spring Factor''' – пружинистость. Чем меньше, тем мягче пружина.<br />
* '''Damping Factor''' – демпфирование. Чем больше, тем быстрее затухают колебания.<br />
<br />
== Свойства движения и остановки ==<br />
Диапазон движения/остановки ограничивается т.н. лимитами. Они задают диапазон, в котором сустав может перемещаться/вращаться.<br />
<br />
== Примеры ==<br />
=== Пример жёсткого тела: ящик и бочка ===<br />
=== Пример мягкого тела: мешок с песком ===<br />
=== Пример сустава: цепь с грузом ===<br />
=== Пример с колесами: тележка ===<br />
=== Пример скольжения: выдвижной ящик ===<br />
<br />
== Параметры отключения физики ==<br />
Актуальны для любой модели. Если не установлены – используются значения по умолчанию.<br />
<syntaxhighlight lang="ini">[disable]<br />
linear_factor = 0.3<br />
angular_factor = 0.3</syntaxhighlight><br />
<br />
== Захват предметов ==<br />
Если нет этой секции, то возможность отключена.<br />
<syntaxhighlight lang="ini">[capture]<br />
bone = bip01_tail ; кость, за которую хватать<br />
distance = 0.45 ; объект можно захватить в пределах этого расстояния<br />
time_limit = 500 ; максимальное время в секундах для попытки захвата<br />
pull_force = 50000. ; максимальная сила для захвата<br />
pull_distance = 2. ; максимальное расстояние, на которое можно перетащить объект<br />
velocity_scale = 0.015 ; скорость вытаскивания<br />
capture_force = 10000. ; максимальная сила для удержания</syntaxhighlight><br />
<br />
[[Категория:Actor Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&diff=1266Настройка физических объектов2024-02-24T08:53:17Z<p>RedPython: </p>
<hr />
<div>== Вводная ==<br />
Система координат в ODE аналогична используемой в OpenGL: вертикальная Y направлена снизу вверх, X слева направо, Z к наблюдателю.<br />
<br />
В сталкире доступно 5 видов сочлений:<br />
* '''Rigid''' -- твёрдое тело<br />
* '''Cloth''' -- мягкое тело (тряпка)<br />
* '''Joint''' -- сустав или шарнир (вращение по XYZ)<br />
* '''Wheel''' -- колесо (можно управлять осью X при вращении по оси Z)<br />
* '''Slider''' -- скольжение (перемещение и вращение по Z)<br />
<br />
Виды примитивов (collision shape) для просчёта столкновений:<br />
* '''Box''' (параллелепипед)<br />
* '''Sphere''' (сфера)<br />
* '''Cylinder''' (цилиндр)<br />
В простых обхъектах обычно используется один примитив (например, бочка использует один цилиндр). Сложные (составные) модели могут использовать несколько примитивов (например, стол использует один параллелепипед для столешницы и четыре для ножек).<br />
<br />
== Свойства тела ==<br />
Жесткие тела в сталкире обладают следующими основными свойствами:<br />
* '''Mass''' (масса)<br />
* '''Center of Mass''' (позиция центра массы)<br />
* '''Friction''' -- коэффициент трения. Чем меньше, тем более "скользким" считается элемент.<br />
* '''Spring Factor''' -- пружинистость. Чем меньше, тем мячге пружина.<br />
* '''Damping Factor''' -- демпфирование. Чем больше, тем быстрее затухают колебания.<br />
<br />
== Свойства движения и остановки ==<br />
Диапазон движения/остановки ограничивается т.н. лимитами. Они задают диапазон, в котором сустав может перемещаться/вращаться.<br />
<br />
== Примеры ==<br />
=== Пример жёсткого тела: ящик и бочка ===<br />
=== Пример мягкого тела: мешок с песком ===<br />
=== Пример сустава: цепь с грузом ===<br />
=== Пример с колесами: тележка ===<br />
=== Пример скольжения: выдвижной ящик ===<br />
<br />
== Параметры отключения физики ==<br />
Актуальны для любой модели. Если не установлены — используются значения по умолчанию.<br />
<syntaxhighlight lang="ini">[disable]<br />
linear_factor = 0.3<br />
angular_factor = 0.3</syntaxhighlight><br />
<br />
== Захват предметов ==<br />
Если нет этой секции, то возможность отключена.<br />
<syntaxhighlight lang="ini">[capture]<br />
<br />
bone = bip01_tail ; bone for capture<br />
distance = 0.45 ; distance - less this distance between <br />
; bome and capture taget object is captured<br />
time_limit = 500 ; max time (seconds) for trying to capture object<br />
pull_force = 50000. ; max force used to bring the taget to capture bone<br />
pull_distance = 2. ; max distance taget can be puled<br />
velocity_scale = 0.015 ; velocity scale for pulling 1- normal<br />
capture_force = 10000. ; max force for holding taget</syntaxhighlight><br />
<br />
[[Категория:ActorEditor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:skeletal-model-flowchart-simplest.webp&diff=1265Файл:skeletal-model-flowchart-simplest.webp2024-02-24T08:49:03Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:skeletal-model-flowchart-w-omf.webp&diff=1264Файл:skeletal-model-flowchart-w-omf.webp2024-02-24T08:42:36Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82_%D1%81%D0%BA%D0%B5%D0%BB%D0%B5%D1%82%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9&diff=1263Экспорт скелетных моделей2024-02-24T08:16:22Z<p>RedPython: </p>
<hr />
<div>На этой странице не рассматриваются подробно настройки, даётся лишь краткий обзор процесса экспорта скелетной модели в основных вариантах:<br />
* без анимаций и без физики<br />
* без анимаций с физикой<br />
* со встроенными анимациями в формате '''.skl'''<br />
* с использованием библиотеки анимаций в формате '''.omf'''<br />
__NOTOC__<br />
==Простейший вариант экспорта модели==<br />
[[Файл:skeletal-model-flowchart-simplest.webp]]<br />
<br />
Из 3д-редактора меш экспортируется в промежуточный формат '''.object''' и открывается в настройщике персонажей ActorEditor, а из него экспортируется в формат '''.ogf''', который понимает движок. В игре мы получаем модель, которая никак не взаимодействует с окружающим миром, более того, не будучи "прибита" к полу фиксированной костью, она просто проваливается сквозь террейн и летит к пределам зоны расчёта физики. Как правило, такой вариант не используется нигде, кроме декоративных мешей для задников уровня, недоступных для игрока.<br />
<br />
== Модель без анимации==<br />
Если настроить физические шейпы, то модель будет взаимодействовать с окружением. Если настраиваются однотипные модели, то во избежание многократного повторения одной и той же работы, их настройки физики экспортируются в файл '''.bones''' рядом с моделью, а затем просто импортируются в следующую модель.<br /><br />
Также можно указать параметры захвата, чтобы можно было перемещать её "руками" наподобие тому, как сделано в Half-Life 2. Такой вариант использует основная масса реквизита в игре (бочки, ящики, прочий мусор).<br />
<br />
[[Файл:skeletal-model-flowchart-simple.webp]]<br />
<br />
Подробнее о настройках физики см. [[Настройка физических объектов|настройку физических объектов AE]] и [[:Категория:Схемы логики физических объектов|скриптовые схемы физических объектов]].<br />
<br />
==Модель со встроенной анимацией==<br />
[[Файл:skeletal-model-flowchart-w-skl.webp]]<br />
<br />
Из 3д-редактора модель экспортируется в промежуточный формат '''.object''', рядом экспортируются её анимации в формате '''.skl'''; модель открывается в ActorEditor, к ней добавляются анимации, настраивается физика, и производится экспорт в '''.ogf''' – одним файлом модель и анимации.<br />
<br />
==Модель с внешней анимацией==<br />
Наиболее сложный вариант необходим для моделей, которые подразумевают использование множества анимаций (как правило, это персонажи-сталкеры и монстры).<br />
<br />
[[Файл:skeletal-model-flowchart-w-omf.webp]]<br />
<br />
Чтобы избежать напрасной траты ресурсов, и не зашивать в каждую модель набор идентичных анимаций, все однотипные модели должны использовать ссылку на общую библиотеку анимаций в формате '''.omf''' (к примеру, если у вас есть 10 видов собак, с 10 разными моделями, то все они должны использовать одну-единственную .omf-библиотеку).<br />
<br />
По причине убогой архитектуры редактора весь массив .skl-анимаций для создания .omf приходится хранить внутри '''дубликата рабочей .object-модели''', и из него же экспортировать эти анимации в .omf-файл.<br />
<br />
Одновременно использовать .skl и .omf для одной модели нельзя, нужно выбрать что-то одно.<br />
<br />
<br />
[[Категория:Actor Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82_%D1%81%D0%BA%D0%B5%D0%BB%D0%B5%D1%82%D0%BD%D1%8B%D1%85_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9&diff=1262Экспорт скелетных моделей2024-02-24T08:10:00Z<p>RedPython: </p>
<hr />
<div>На этой странице не рассматриваются подробно настройки, даётся лишь краткий обзор строения скелетной модели в основных вариантах:<br />
* без анимаций и без физики<br />
* без анимаций с физикой<br />
* со встроенными анимациями в формате '''.skl'''<br />
* с использованием библиотеки анимаций в формате '''.omf'''<br />
__NOTOC__<br />
==Простейший вариант строения сталкерской модели==<br />
[[Файл:skeletal-model-flowchart-simplest.webp]]<br />
<br />
Из 3д-редактора меш экспортируется в промежуточный формат '''.object''' и открывается в настройщике персонажей ActorEditor, а из него экспортируется в формат '''.ogf''', который понимает движок. В игре мы получаем модель, которая никак не взаимодействует с окружающим миром, более того – она просто проваливается сквозь террейн и летит к пределам зоны расчёта физики. Как правило, такой вариант не используется нигде, кроме декоративных мешей для задников уровня, недоступных для игрока.<br />
<br />
== Модель без анимации==<br />
Если настроить физические шейпы, то модель будет взаимодействовать с окружением. Если настраиваются однотипные модели, то во избежание многократного повторения одной и той же работы, их настройки физики экспортируются в файл '''.bones''' рядом с моделью, а затем просто импортируются в следующую модель.<br /><br />
Также можно указать параметры захвата, чтобы можно было перемещать её "руками" наподобие тому, как сделано в Half-Life 2. Такой вариант использует основная масса реквизита в игре (бочки, ящики, прочий мусор).<br />
<br />
[[Файл:skeletal-model-flowchart-simple.webp]]<br />
<br />
Подробнее о настройках физики см. [[Настройка физических объектов|настройку физических объектов AE]] и [[:Категория:Схемы логики физических объектов|скриптовые схемы физических объектов]].<br />
<br />
==Модель со встроенной анимацией==<br />
[[Файл:skeletal-model-flowchart-w-skl.webp]]<br />
<br />
Из 3д-редактора модель экспортируется в промежуточный формат '''.object''', рядом экспортируются её анимации в формате '''.skl'''; модель открывается в ActorEditor, к ней добавляются анимации, настраивается физика, и производится экспорт в '''.ogf''' – одним файлом модель и анимации.<br />
<br />
==Модель со ссылкой на библиотеку анимаций==<br />
Наиболее сложный вариант необходим для моделей, которые подразумевают использование множества анимаций (как правило, это персонажи-сталкеры и монстры).<br />
<br />
[[Файл:skeletal-model-flowchart-w-omf.webp]]<br />
<br />
Чтобы избежать напрасной траты ресурсов, и не зашивать в каждую модель набор идентичных анимаций, все однотипные модели должны использовать ссылку на общую библиотеку анимаций в формате '''.omf''' (к примеру, если у вас есть 10 видов собак, с 10 разными моделями, то все они должны использовать одну-единственную .omf-библиотеку).<br />
<br />
По причине убожеской архитектуры редактора весь массив .skl-анимаций для создания .omf приходится хранить внутри '''дубликата рабочей .object-модели''', и из него же экспортировать эти анимации в .omf-файл.<br />
<br />
Одновременно использовать .skl и .omf для одной модели нельзя, нужно выбрать что-то одно.<br />
<br />
<br />
[[Категория:Actor Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:skeletal-model-flowchart-simple.webp&diff=1261Файл:skeletal-model-flowchart-simple.webp2024-02-24T08:03:13Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:skeletal-model-flowchart-w-skl.webp&diff=1260Файл:skeletal-model-flowchart-w-skl.webp2024-02-24T07:46:04Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%90%D0%BD%D0%BE%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%BE%D0%BD%D1%8B&diff=1259Аномальные зоны2024-02-18T16:29:46Z<p>RedPython: </p>
<hr />
<div>Для того, чтобы поставить аномальную зону, необходимо:<br />
# Поставить зону накрывающего аномального поля ('''Spawn Element -> zones -> field_тип_поля_силя_поля'''), постоянно наносящего небольшое повреждение. Радиус поля по желанию можно изменить (scale).<br />
# В её пределах расставить зоны аномалий-мин ('''Spawn Element -> zones -> mine_тип_мины_сила_мины'''), при попадании в которые наносится сильное повреждение. Радиус мин менять нельзя.<br />
# В пределах зоны '''field''' проложить один или несколько путей (way), по которым будет двигаться артефакт.<br />
# В пределах зоны '''field''' поставить несколько групп партиклов поля ('''Static Particles -> zones -> zone_тип_поля_idle'''), соответствующих типу '''field''', благодаря которым поле можно будет заметить снаружи (для радиационного поля партиклы не нужны).<br />
# Поставить зону управления поведением артефакта ('''Spawn Element -> ai -> anomal_zone''').<br />
<br />
В [[custom data]] зоны управления '''anomal_zone''' нужно прописать следующее:<br />
<syntaxhighlight lang="ini"><br />
[anomal_zone]<br />
artefact_ways = имя_пути, имя_пути, имя_пути...<br />
artefacts = идентификатор_артефакта, идентификатор_артефакта...<br />
artefact_count = количество_артефактов<br />
idle_time = время_между_рождениями_артефактов<br />
applying_force_xz = прилагаемая_сила_в_горизонтальной_плоскости<br />
applying_force_y = прилагаемая_сила_по_вертикали<br />
</syntaxhighlight><br />
<br />
{|class="wikitable" style="text-align:center;"<br />
!Имя параметра ||Описание ||Умолчания<br />
|-<br />
|'''artefact_ways'''||Имена одного или нескольких путей (через запятую), по которым будет двигаться артефакт.||<br />
|-<br />
|'''artefacts'''||Идентификаторы одного или нескольких типов артефактов, которые будут рождаться в этой аномальной зоне.||<br />
|-<br />
|'''artefact_count'''||Максимальное одновременное количество артефактов в аномальной зоне. ||1<br />
|-<br />
|'''idle_time'''||Время (в секундах), через которое в аномальной зоне родится новый артефакт после того, как количество артефактов в ней стало меньше, чем artefact_count.||14400<br />
|-<br />
|'''applying_force_xz'''||Сила, которая прилагается к артефакту по горизонтали. Чем это число больше, тем дальше прыгает артефакт.||200<br />
|-<br />
|'''applying_force_y'''||Сила, которая прилагается к артефакту по вертикали. Чем это число больше, тем выше прыгает артефакт.||400<br />
|}<br />
<br />
Таким образом, в аномальной зоне по путям, случайным образом выбраным из путей '''artefact_ways''', передвигаются артефакты, случайным образом выбранные из типов '''artefacts''', общим количеством '''artefact_count'''. Если игрок забирает один или несколько артефактов, то новые рождаются по тем же правилам, по одному, с промежутком времени в '''idle_time'''. Артефакты передвигаются прыжками, которые задаются с помощью '''applying_force_xz''' и '''applying_force_y'''.<br />
<br />
Обычно ставятся только те сочетания '''field''' и '''mine''', пересечения которых отмечены плюсами в следующей таблице, причём желательно, чтобы в пределах одной аномальной зоны стояли мины только одного типа. Другие сочетания или несколько типов мин ставятся только в исключительных случаях, когда это оправдано геометрией.<br />
<br />
{|class="wikitable" style="text-align:center;"<br />
|+<br />
! colspan="2" style="color:green; background-color:#ccffcc;" |'''Мина (mine)'''<br />
!Thermal (Огненная)<br />
!Gravitational (Гравитационная)<br />
!Acidic (Кислотная)<br />
!Electric (Электрическая)<br />
|-<br />
! rowspan="4" style="color:blue; background-color:#ccccff;" |'''Поле (field)'''<br />
!Thermal (Огненное)<br />
| +<br />
| +<br />
| -<br />
| -<br />
|-<br />
!Radioactive (Радиоактивное)<br />
| -<br />
| +<br />
| +<br />
| +<br />
|-<br />
!Acidic (Кислотное)<br />
| -<br />
| +<br />
| +<br />
| -<br />
|-<br />
!Psychic (Психическое)<br />
| +<br />
| -<br />
| -<br />
| +<br />
|}<br />
Также в таблице указаны радиусы зон '''mine''' и типы артефактов, которые могут рождаться в аномальной зоне с таким типом '''mine'''.<br />
{|class="wikitable"<br />
! colspan="12" |'''Радиус мины по её силе'''<br />
|-<br />
! colspan="3" style="color: orange; background-color:#ffffcc;"|Thermal (Огненная)<br />
! colspan="3" style="color: black; background-color:#cccccc;" |Gravitational (Гравитационная)<br />
! colspan="3" style="color: green; background-color:#ccffcc;" |Acidic (Кислотная)<br />
! colspan="3" style="color: blue;background-color:#ccccff;" |Electric (Электрическая)<br />
|-<br />
|'''weak (слабая)''' <br />
|'''average (средняя)'''<br />
|'''strong (сильная)'''<br />
|'''weak (слабая)'''<br />
|'''average (средняя)'''<br />
|'''strong (сильная)'''<br />
|'''weak (слабая)'''<br />
|'''average (средняя)'''<br />
|'''strong (сильная)'''<br />
|'''weak (слабая)'''<br />
|'''average (средняя)'''<br />
|'''strong (сильная)'''<br />
|-<br />
|1.5<br />
|1.5<br />
|1.5<br />
|3<br />
|4<br />
|4<br />
|1<br />
|1<br />
|1<br />
|1.5<br />
|1.5<br />
|1.5<br />
|-<br />
! colspan="12" |'''Типы артефактов по типам мин'''<br />
|-<br />
| colspan="3" |af_cristall<br />
af_fireball<br />
<br />
af_dummy_glassbeads<br />
<br />
af_eye<br />
<br />
af_fire<br />
| colspan="3" |af_medusa<br />
af_cristall_flower<br />
<br />
af_night_star<br />
<br />
af_vyvert<br />
<br />
af_gravi<br />
<br />
af_gold_fish<br />
| colspan="3" |af_blood<br />
af_mincer_meat<br />
<br />
af_soul<br />
<br />
af_fuzz_kolobok<br />
<br />
af_baloon<br />
<br />
af_glass<br />
| colspan="3" |af_electra_sparkler<br />
af_electra_flash<br />
<br />
af_electra_moonlight<br />
<br />
af_dummy_battery<br />
<br />
af_dummy_dummy<br />
<br />
af_ice<br />
|}<br />
Радиус зоны '''field''' можно менять в соответствии с необходимостью. Радиус зон '''mine''' нельзя менять ни в коем случае, так как визуальная часть зоны размера не меняет. Таким образом при увеличении радиуса '''mine''' игрок будет получать повреждение, визуально находясь вне аномалии-мины, а при уменьшении — бродить в аномалии-мине, не получая повреждения.<br />
<br />
Диаметр группы партиклов поля '''zone__idle''' — примерно 10 метров. Потому для аномальной зоны диаметром 30 метров достаточно пяти '''zone__idle''', поставленных по кругу. Можно поставить шестую '''zone__idle''' посредине. Соответственно, чем меньше аномальная зона — тем меньше нужно ставить '''zone__idle''', и наоборот. Избыток '''zone__idle''' в кадре приведёт к тормозам.<br />
<br />
Группы партиклов '''zone__idle''' должны находиться в пределах зоны '''field''', и быть того же типа, что и '''field'''. Для '''field''' типа '''radioactive''' партиклы не нужны.<br />
<br />
Зоны '''mine''' должны быть в пределах зоны '''field''', и стоять так, чтобы пройти между ними было можно, но сложно.<br />
<br />
Пути передвижения артефактов '''way''' не должны быть слишком близко к краю зоны '''field''', иначе игрок сможет схватить артефакт, не заходя в аномальную зону.<br />
<br />
Как правило, одного пути '''way''' на аномальную зону с одним артефактом вполне достаточно. Один из лучших вариантов пути — ломаное кольцо, идущее параллельно границе '''field'''. Как показали опыты, желательно, чтобы каждая точка пути была соединена со следующей и предыдущей точками пути, и не была соединена ни с какими другими.<br />
<br />
Максимальное количество артефактов '''artefact_count''' должно быть небольшим (одного вполне достаточно), а время рождения '''idle_time''' — достаточно долгим (несколько часов). Если вам не нужно изобразить что-то особо хитрое — не указывайте эти значения.<br />
<br />
Если не готовы много экспериментировать, не указывайте значения '''applying_force_xz''' и '''applying_force_y'''. Слишком большие цифры могут привести к тому, что артефакт будет выпрыгивать за аномальную зону, а слишком маленькие — к медленному передвижению артефакта.<br />
<br />
[[Категория:A-Life]][[Категория:Level Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F&diff=1258Шаблон:Главная2024-02-18T13:37:40Z<p>RedPython: </p>
<hr />
<div>{| class="wikitable" style="color: black; width: 100%;"<br />
! Ролевая часть !! Общая часть !! Настройка предметов<br />
|-<br />
| [[Инфопорции]] || [[Формат XML]] || [[Аномалии]]<br />
|-<br />
| [[Задания]] || [[Профили персонажей]] || [[Артефакты]]<br />
|-<br />
| [[Озвучка диалогов]] || [[Карта и работа с ней]] || [[Бинокль]]<br />
|-<br />
!colspan="3" | [[:Категория:A-Life|Система симуляции жизни A-Life]]<br />
|-<br />
| [[Лагерь (smart terrain)]] || [[Группировки (factions)]] || [[Пространственный ограничитель (space restrictor)]] <br />
|-<br />
| [[Точки графа (graph point)]] || [[Точки пути (Way Points)]] || [[Переход между уровнями (level changer)]]<br />
|-<br />
| [[Укрытие (smart cover)]] || [[Аномальные зоны]] || [[Вертолёт]]<br />
|-<br />
| [[Выброс]] || [[Аномалии]] || [[Тайники]]<br />
|-<br />
!colspan="3" | Настройка логики<br />
|-<br />
| [[:Категория:Схемы space restrictor'ов | Схемы space restrictor'ов]] || [[:Категория:Схемы логики монстров | Схемы логики монстров]] || [[:Категория:Схемы логики физических объектов | Схемы логики физических объектов]]<br />
|-<br />
!colspan="3" | [[:Категория:X-Ray SDK | Официальный SDK ]]<br />
|-<br />
| [[:Категория:LevelEditor | Level Editor]] || [[:Категория:Actor Editor | Actor Editor]] || [[Particle Editor]]<br />
|-<br />
| [[Shader Editor]] || [[Postprocess Editor]] || [[xrCompress]] <br />
|-<br />
| [[xrLC]] || [[xrAI]] || [[xrDO_Light]]<br />
|-<br />
!colspan="3" | [[:Категория:Инструментарий | Фанатский инструментарий]]<br />
|-<br />
| [[:Категория:X-Ray game asset tools | X-Ray game asset tools]] ([[converter]], [[aiwrapper]], [[X-Ray Maya tools]]) || [[:Категория:Perl | Perl-скрипты]] ([[acdc]] и прочие компиляторы/декомпиляторы) || <br />
|-<br />
| [[S.T.A.L.K.E.R. Object Editor | Многофункциональный редактор предметов, сюжета, диалогов S.T.A.L.K.E.R. Object Editor]] || [[OGFViewer | OGFViewer — просмотрщик моделей и уровней движков X-Ray и 4A]] || [[:Категория:Архиваторы | Распаковщики и запаковщики игровых архивов]]<br />
|-<br />
!colspan="3" | 3D-редакторы и руководства к ним<br />
|-<br />
| [[:Категория:Maya | Maya]] || [[:Категория:3ds Max | 3ds Max]] || [[:Категория:Blender | Blender]]<br />
|-<br />
!colspan="3" | [[:Категория:Текстуры | Текстуры]]<br />
|-<br />
| [[S.T.A.L.K.E.R. Icon Editor (SIE) | Редактор иконок]] || [[Создание bump map]] ||<br />
|-<br />
!colspan="3" | Дизайн уровней<br />
|-<br />
| [[Рекомендации и требования по расстановке освещения]] || [[Рекомендации по именованию объектов в редакторе]] || [[Правила спавна]]<br />
|-<br />
| [[Деревья]] || [[Сокращённые имена уровней]] ||<br />
|-<br />
!colspan="3" | [[:Категория:Справка | Справочные данные]]<br />
|-<br />
| [[Параметры командной строки]] || [[Консольные команды]] || [[Типичные ошибки и методы их устранения]]<br />
|-<br />
| [[Режим настройки HUD]] || [[Режим сборки билда]] || [[Предзагрузка динамических моделей (prefetching)]]<br />
|-<br />
| [[Списки соответствий текстур]] || [[Настройки материалов]] || [[:Категория:Глоссарий | Глоссарий]]<br />
|-<br />
!colspan="3" | [[:Категория:Движок | X-Ray Engine и его модернизация]]<br />
|-<br />
| [[X-Ray extensions]] || [[:Категория:Форматы файлов | Форматы файлов]] ||<br />
|}</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D1%91%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8%D0%BC%D0%B5%D0%BD%D0%B0_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B9&diff=1257Сокращённые имена уровней2024-02-18T13:33:27Z<p>RedPython: </p>
<hr />
<div>Список префиксов для использования в редакторе.<br />
<br />
{| class="wikitable" style="color: black; background-color: #8e6c4b; width: 50%;"<br />
|+Тень Чернобыля<br />
|-<br />
|style="width: 20%; background-color: #9e6c4b;" |'''Префикс''' || style="width: 20%; background-color: #9e6c4b;" |'''Имя уровня'''<br />
|-<br />
| esc || Escape<br />
|-<br />
| gar || Garbage<br />
|-<br />
| agr || Agroprom<br />
|-<br />
| agru || AgropromUnderground<br />
|-<br />
| val || DarkValley<br />
|-<br />
| x18 || LabX18<br />
|-<br />
| bar || Rostok<br />
|-<br />
| yan || Yantar<br />
|-<br />
| x16 || LabX16<br />
|-<br />
| mil || Military<br />
|-<br />
| cit || DeadCity (уровень вырезан из финалки)<br />
|-<br />
| swa || Swamp (уровень вырезан из финалки)<br />
|-<br />
| rad || Radar<br />
|-<br />
| bun || Bunker<br />
|-<br />
| pri || Pripyat<br />
|-<br />
| aes || Stancia<br />
|-<br />
| sar || Sarcofag<br />
|-<br />
| mon || ControlMonolith<br />
|-<br />
| gen || Generators (уровень вырезан из финалки)<br />
|-<br />
| lab || MainLab (уровень вырезан из финалки)<br />
|-<br />
| aes2 || Stancia2<br />
|}<br />
<br />
<br />
{| class="wikitable" style="color: black; background-color: #4b597e; width: 50%;"<br />
|+Чистое небо<br />
|-<br />
|style="width: 20%; background-color: #6b597e;" |'''Префикс''' || style="width: 20%; background-color: #6b597e;" |'''Имя уровня'''<br />
|-<br />
| mar || Marsh<br />
|-<br />
| esc || Escape<br />
|-<br />
| gar || Garbage<br />
|-<br />
| agr || Agroprom<br />
|-<br />
| agru || AgropromUnderground<br />
|-<br />
| val || DarkValley<br />
|-<br />
| yan || Yantar<br />
|-<br />
| red || RedForest<br />
|-<br />
| mil || Military<br />
|-<br />
| lim || Limansk<br />
|-<br />
| kat || KatakombHospital (в игру вошёл в неполном виде)<br />
|-<br />
| aes2 || Stancia2<br />
|}<br />
<br />
<br />
{| class="wikitable" style="color: black; background-color: #515151; width: 50%;"<br />
|+Зов Припяти<br />
|-<br />
|style="width: 20%; background-color: #615151;" |'''Префикс''' || style="width: 20%; background-color: #615151;" |'''Имя уровня'''<br />
|-<br />
| jup || Jupiter<br />
|-<br />
| pas || JupiterUnderground<br />
|-<br />
| zat || Zaton<br />
|-<br />
| pri || Pripyat<br />
|-<br />
| labx8 || LabX8<br />
|}<br />
<br />
[[Категория:Level Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B5&diff=1256Рекомендации по именованию объектов в редакторе2024-02-18T13:33:03Z<p>RedPython: </p>
<hr />
<div>== Рекомендации по выбору имён объектов, расставляемых в редакторе ==<br />
<br />
Имена сталкеров и монстров должны быть информативными и отражать их предназначение. Также в имени сталкера нужно указывать имя уровня, чтобы иметь возможность определить при отладке, с какого уровня пришел сталкер. Например, командир группировки Долг с двумя солдатами и охранником около ворот на уровне Garbage:<br />
<syntaxhighlight lang="ini"> gar_dolg_commander<br />
gar_dolg_soldier1<br />
gar_dolg_soldier2<br />
gar_dolg_gate_guard</syntaxhighlight><br />
<br />
Здесь <code>gar</code> — [[Сокращённые имена уровней | префикс имени уровня]].<br />
<br />
В именах путей нужно указывать либо:<br />
* в случае, если по пути всегда ходит один и тот же персонаж, задать в префиксе имени пути имя персонажа. Пример: путь коммандира группировки получит имя '''gar_dolg_commander_walk''', '''gar_dolg_commander_look'''<br />
* в случае, если на путь схемой управления назначаются произвольные персонажи, то задать в имени пути место действия, либо должность, на которую назначаются персонажи. Пример: путь, по которому кто-то из солдат патрулирует второй этаж завода, получит имя '''gar_factory_2nd_floor_walk''', '''gar_factory_2nd_floor_look'''<br />
<br />
В идеале, увидев имя пути в списке объектов уровня, дизайнер должен быть способен определить, о каком конкретно месте уровня идет речь.<br />
<br />
Имена предметов также должны быть информативными и включать в себя название места, куда кладётся предмет, например, аптечка на крыше здания фабрики:<br />
<syntaxhighlight lang="ini"> gar_factory_roof_medikit </syntaxhighlight><br />
<br />
Те же правила относятся и к прочим объектам.<br />
<br />
Постфикс, т.е. вторую часть имени пути (или других объектов), желательно формировать по имени поля в [[customdata]] скрипта, который Вы настраиваете. Пример customdata и имён путей:<br />
<br />
<syntaxhighlight lang="ini">[zoneguard]<br />
path_main_walk = gar_dolg_gate_guard_main_walk<br />
path_main_look = gar_dolg_gate_guard_main_look<br />
path_side_walk = gar_dolg_gate_guard_side_walk<br />
path_side_look = gar_dolg_gate_guard_side_look</syntaxhighlight><br />
<br />
Обратите внимание, что в префиксе имен путей отражены место/должность персонажа, а в постфиксе — имя поля из customdata скрипта, которому присвоен путь.<br />
<br />
<br />
== Рекомендации по выбору уникального имени команды для скриптов ==<br />
В скриптах, где у нескольких персонажей используется общая память (грабители, охранники и т.п.), требуется с помощью поля <code>team</code> в customdata задать уникальный идентифиактор их общей памяти (так называемое имя команды). Правила выбора имен этих идентификаторов следующие: в имя должно включаться название уровня, а также имя места, где происходят события, и, возможно, название схемы. Примеры:<br />
<syntaxhighlight lang="ini"> team = gar_garage<br />
team = esc_factory_robbers<br />
team = esc_factory_defenders </syntaxhighlight><br />
<br />
Важно, чтобы имя команды было уникальным для '''ВСЕЙ ИГРЫ''', а не только в пределах одного уровня, поэтому и используется [[Сокращённые имена уровней | сокращённое имя уровня]] в качестве префикса.<br />
<br />
<br />
== Расстановка гулагов ==<br />
Имена секций для файла ''misc\gulag_tasks.ltx'' составляются так:<br />
<br />
<syntaxhighlight lang="ini">[walker1@agr_mil]<br />
<br />
^ имя схемы<br />
<br />
^ имя уровня из таблицы LevelNameAbbrevs<br />
<br />
^ имя места </syntaxhighlight><br />
<br />
Пожалуйста, везде используйте СОКРАЩЁННЫЕ имена уровней из вышеуказанной таблицы. Не придумывайте других аббревиатур! <br />
<br />
<br />
----<br />
'''Скопировано из X-Wiki за 2004 год, составитель — Andrey Fidrya (Zmey)'''<br />
<br />
{{#related:Сокращённые имена уровней}}<br />
<br />
[[Категория:Level Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=1255Заглавная страница2024-02-17T17:20:45Z<p>RedPython: </p>
<hr />
<div>[https://forum.xray-engine.org/index.php/topic,252 '''→ → → Обновления BORSCHT SDK ← ← ←''']<br />
<br />
{{Шаблон:Главная}}</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:RedPython&diff=1253Участник:RedPython2024-02-11T18:40:46Z<p>RedPython: Новая страница: «== Статистика по вики == Статей: {{NUMBEROFARTICLES}}, правок: {{NUMBEROFEDITS}}<br /> Файлов: {{NUMBEROFFILES}}<br /> Юзер…»</p>
<hr />
<div>== Статистика по вики ==<br />
Статей: {{NUMBEROFARTICLES}}, правок: {{NUMBEROFEDITS}}<br /><br />
Файлов: {{NUMBEROFFILES}}<br /><br />
Юзеров: {{NUMBEROFUSERS}}, из них активных: {{NUMBEROFACTIVEUSERS}}</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0_%D0%B8_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D1%8F_Steam-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_S.T.A.L.K.E.R.&diff=1252Специфика и различия Steam-версии S.T.A.L.K.E.R.2024-02-11T18:02:00Z<p>RedPython: </p>
<hr />
<div>==Различия==<br />
===Shadow of Chernobyl===<br />
Существует две версии игры - '''RU''' и '''WW'''. Первая издавалась в странах СНГ, а вторая за его пределами. Позже обе версии были размещены в Steam ([https://steamdb.info/app/4830/ 4830] и [https://steamdb.info/app/4500/ 4500] соответственно) примерно по такой же региональной логике, однако еще через некоторое время поддержка '''RU'''-версии была прекращена, а страница удалена из магазина. '''WW''' стала основной версией игры, доступной теперь уже во всех регионах.<br/><br />
В данном разделе приведен результат сравнения последней '''WW'''-версии и '''RU'''-версии (она же "коробочная") с 1.0006 патчем.<br/><br />
Надо также учитывать, что [[GSC]] до сих пор время от времени обновляют игру, не меняя при этом порядковый номер патча. Впрочем, большинство изменений связаны в основном с поддержкой игры на новых системах и железе, как например [https://steamcommunity.com/games/STALKERShadowofChernobyl/announcements/detail/3689057232254569213 обновление с исправлением работы на новых процессорах Intel]. Результат сравнения учитывает изменения на момент 09.07.2023.<br />
<br />
'''bin'''<br/><br />
<br />
<span style="color:orange;">файлы отличаются</span><br />
<syntaxhighlight lang="ini"><br />
\dedicated\XR_3DA.exe<br />
\XR_3DA.exe<br />
\xrGameSpy.dll<br />
\xrRender_R2.dll<br />
</syntaxhighlight><br />
<span style="color:red;">файлы удалены</span><br />
<syntaxhighlight lang="ini"><br />
\protect.dll<br />
\protect.drv<br />
\protect.exe<br />
</syntaxhighlight><br />
<span style="color:green;">файлы добавлены</span><br />
<syntaxhighlight lang="ini"><br />
\testapp.exe<br />
</syntaxhighlight><br />
{| style="background-color: #fffdee;" width="100%"<br />
|<span style="color:#172172;">'''Примечание'''</span><br />
----<br />
Судя по характеру изменений, как минимум ''XR_3DA.exe'' (основной) и ''xrRender_R2.dll'' были полностью пересобраны.<br />
|}<br />
'''gamedata'''<br/><br />
<br />
<span style="color:orange;">файлы отличаются</span><br />
<syntaxhighlight lang="ini"><br />
\config\ui\carbody_new_16.xml - исправлены переводы надписей на широкоформатных мониторах в окне обыска инвентаря<br />
\config\ui\game_tutorials.xml - немного скорректирована длительность КПК-туториалов от Сидоровича в начале игры (+/- 1 сек)<br />
\config\ui\ui_credits.xml - в титры добавлена надпись "st_thanks_fanbase23", для которой нет перевода в русской локализации (отображается техническое название)<br />
\config\ui\ui_movies.xml - убрано видео "GSC World Publishing" (издатель в СНГ) при запуске игры<br />
</syntaxhighlight><br />
<span style="color:red;">файлы удалены</span><br />
<syntaxhighlight lang="ini"><br />
\textures\intro\intro_gsc-wp.ogm - то самое видео с издателем<br />
</syntaxhighlight><br />
<span style="color:green;">файлы добавлены</span><br />
<syntaxhighlight lang="ini"><br />
\config\text\cze\*<br />
\config\text\eng\*<br />
\config\text\esp\*<br />
\config\text\fra\*<br />
\config\text\ger\*<br />
\config\text\ita\*<br />
\config\text\pol\*<br />
<br />
7 новых локализаций - чешская, английская, испанская, французская, немецкая, итальянская, польская<br />
</syntaxhighlight><br />
==Отключение менеджера скриншотов и облачных сохранений==<br />
Как известно, у Steam есть собственный механизм создания скриншотов. Они хранятся локально внутри папки Steam: ''...\Steam\userdata\<Your_SteamID>\[https://steamdb.info/app/760/ 760]\remote\<AppID>\screenshots''.<br/><br />
Для того, чтобы избежать дублирования скриншотов игрой и клиентом, можно отключить их создание в последнем. Для этого нужно отключить оверлей Steam через снятие соответствующего флажка: '''Свойства игры -> Общие -> Включить оверлей Steam в игре'''. После этого скриншоты будут создаваться только самой игрой как обычно.<br/><br />
Можно еще отключить '''Облачные сохранения''' (флажок чуть ниже), чтобы всякие тестовые сохранения и скриншоты не захламляли хранилище на сервере.<br />
<br />
Альтернативным способом отключения и того, и другого является запуск игры от имени администратора.<br />
==Удаление файлов из Steam Cloud==<br />
Данную инструкцию в принципе можно использовать для любой игры.<br/><br />
Для того, чтобы удалить файлы из облачного хранилища Steam Cloud, необходимо:<br />
# Убедиться, что Steam Cloud включен: '''Настройки -> Облако -> Включить Steam Cloud'''<br />
# Также Steam Cloud должен быть включен для конкретной игры, в нашем случае S.T.A.L.K.E.R.: '''Свойства игры -> Общие -> Включить синхронизацию сохранений со Steam Cloud'''<br />
# Перейти в локальные файлы игры, там где находятся сохранения, скриншоты и прочее: '''Свойства игры -> Установленные файлы -> Обзор'''. В данном случае, в Steam Cloud лежат файлы из папки ''_appdata_''. В другой игре они могут находиться в ином месте, например в папке ''...\Steam\userdata\<Your_SteamID>\<AppID>'', но сути это не меняет - главное найти эти файлы.<br />
# При помощи любой подходящей программы, например ''Notepad++'' открываем все файлы, которые залиты в облако и обнуляем их (выделяем все и удаляем). После этого они должны весить 0 байт.<br />
# Запускаем игру, доходим до главного меню и выходим из игры. Steam Cloud загружает пустые файлы в облако и те распознаются им как некорректные, после чего они удаляются. Это можно проверить, зайдя в свое хранилище на сайте.<br />
# Некоторые файлы при выходе из игры автоматически обновляются самой игрой, в S.T.A.L.K.E.R. это файл ''user.ltx''. Чтобы избежать этого, сперва обнуляем файл, потом заходим в игру, сворачиваем ее и завершаем процесс через диспетчер задач. Выход из игры корректно не отработает, но Steam Cloud синхронизирует пустой файл и удалит его в облаке.<br />
# После того, как вы убедились, что в облаке не осталось никаких файлов (папка с игрой должна удалиться с сайта), необходимо отключить Steam Cloud для нашей игры: '''Свойства игры -> Общие -> Включить синхронизацию сохранений со Steam Cloud'''<br />
# Готово!<br />
Просмотреть все загруженные файлы в облачном хранилище можно по [https://store.steampowered.com/account/remotestorage этой ссылке], предварительно авторизовавшись.<br />
{| style="background-color: #fffdee;" width="100%"<br />
|<span style="color:#172172;">'''Подсказка'''</span><br />
----<br />
Узнать '''AppID''' нужной игры: '''Свойства игры -> Обновления -> Номер приложения'''<br />
|}<br />
----<br />
Автор: '''RayTwitty (aka Shadows)'''<br />
<br />
[[Категория:Справка]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9&diff=1251Категория:Системы контроля версий2024-02-11T16:21:41Z<p>RedPython: Новая страница: «Помощь с различными СКВ»</p>
<hr />
<div>Помощь с различными СКВ</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%97%D0%B2%D1%83%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%82%D0%B5%D0%BC%D1%8B&diff=1250Звуковые темы2024-02-11T14:50:58Z<p>RedPython: </p>
<hr />
<div>Чтобы добавить новую звуковую тему, нужно прописать её в файле <code>script_sound.ltx</code>, либо в одном из включенных в него файлов.<br />
<br />
В секции '''[list]''' указать название звука, и создать секцию с тем же названием:<br />
<syntaxhighlight lang="ini">[list]<br />
lvl_sound_name_1<br />
lvl_sound_name_2<br />
…<br />
[lvl_sound_name_1]<br />
type = actor<br />
npc_prefix = false<br />
path = characters_voice\scenario\scenario\level\lvl_sound_name_1<br />
shuffle = rnd<br />
idle = 3,5,100</syntaxhighlight><br />
<br />
* '''type = …''' <br />Тип звука:<br />
** '''actor''' — в голове у актера<br />
** '''npc''' — звук голоса NPC<br />
** '''3d''' — звук от объекта<br />
* '''path = …''' <br />Путь к звуковому файлу относительно папки <code>gamedata\sounds</code> (если тип звука — '''npc''', то путь к файлу указывается от папки <code>gamedata\sounds\characters_voice</code>)<br />Если указать неполное имя файла (<code>lvl_sound_name_</code>), то проигрываться будут все звуковые файлы, название которых начинается на указанное имя.<br />
* '''shuffle = …''' <br />Задает режим проигрывания:<br />
** rnd — случайный повторяющийся звук<br />
** seq — одноразовый звук<br />
** loop — зацикленный звук<br />
* '''idle = …''' <br />Первые две цифры — задержка (в сек.) перед повторным проигрыванием звука, третья — вероятность проигрывания.<br />
<br />
<br />
Для проигрывания звука в логике NPC или другого объекта, нужно воспользоваться функцией <code>=play_sound(имя_звука)</code>, чтобы остановить — <code>=stop_sound(имя_звука)</code>.<br />
<br />
В этих функциях работают сигналы:<br />
* '''sound_end''' — конец звука<br />
* '''theme_end''' — конец звуковой темы<br />
<br />
Если нужно проигрывать звук постоянно, используйте функцию <code>=play_sound_looped(имя_звука)</code>.<br />
Чтобы остановить зацикленный звук — <code>=stop_sound_looped(имя_звука)</code><br />
<br />
Пример:<br />
<syntaxhighlight lang="ini">[walker@talk]<br />
path_walk = walk1<br />
path_look = look1<br />
on_info = {+info1} %=play_sound(lvl_sound_name_1)%<br />
on_signal = sound_end | nil</syntaxhighlight><br />
<br />
[[Категория:A-Life]][[Категория:Звук]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Xraysucks_kinda&diff=1249Участник:Xraysucks kinda2024-02-11T14:48:58Z<p>RedPython: Новая страница: «Если не знаешь русского языка, то пиши на родном языке. У нас нет ограничений в этой облас…»</p>
<hr />
<div>Если не знаешь русского языка, то пиши на родном языке. У нас нет ограничений в этой области.</div>RedPythonhttps://xray-engine.org/index.php?title=pdfimages&diff=1248pdfimages2024-02-11T14:41:56Z<p>RedPython: </p>
<hr />
<div>[https://www.xpdfreader.com/download.html pdfimages] – консольная утилита для извлечения изображений из файлов PDF.<br />
<br />
== Примеры использования ==<br />
Извлечение JPEG:<br />
<syntaxhighlight lang="winbatch">pdfimages.exe -j myfile.pdf -out</syntaxhighlight><br />
Пакетом:<br />
<syntaxhighlight lang="winbatch">@echo off<br />
<br />
set "IN_DIR=C:\test"<br />
set "OUT_DIR=C:\test\exx"<br />
<br />
if not exist "%OUT_DIR%" md "%OUT_DIR%"<br />
<br />
for %%A in ("%IN_DIR%\*.pdf") do (pdfimages.exe -j "%%~A" "%OUT_DIR%\%%~nA")<br />
<br />
pause</syntaxhighlight><br />
<br />
[[Категория:PDF]]</div>RedPythonhttps://xray-engine.org/index.php?title=MuPDF&diff=1247MuPDF2024-02-11T14:41:20Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''MuPDF'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Просмотрщик PDF<br />
|-<br />
| '''Автор''' || Artifex Software, Inc. <br />
|-<br />
| '''Последняя версия''' || [https://mupdf.com/downloads/ 1.18.0 (2020-10-07)]<br />
|}<br />
</div><br />
<br />
MuPDF - опенсорсная и скоростная программа для просмотра PDF-файлов. Работает куда быстрее Adobe Reader и браузерных просмотрищиков. Незаменима, если вам приходится просматривать десятки и сотни файлов сканированной конструкторской документации.<br />
<br />
Интерфейс предельно минималистичен, навигация осуществляется [https://mupdf.com/docs/manual-mupdf-gl.html горячими клавишами]<br />
<br />
<br />
[[Категория:PDF]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&diff=1246Категория:Консольные команды2024-02-11T14:38:25Z<p>RedPython: </p>
<hr />
<div>Подробно о консольных командах.<br />
<br />
[[Категория:Движок]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9A%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&diff=1245Консольные команды2024-02-11T14:38:06Z<p>RedPython: </p>
<hr />
<div>{| class="wikitable"<br />
! Команда || Аргументы/допустимые значения || Описание<br />
|-<br />
|_preset ||<nowiki> <Minimum|Low|Default|High|Extreme> </nowiki> ||Предустановки качества графики<br />
|-<br />
|ai_aim_max_angle ||[0.000,31.416] ||<br />
|-<br />
|ai_aim_min_angle ||[0.000,31.416] ||<br />
|-<br />
|ai_aim_min_speed ||[0.000,31.416] ||<br />
|-<br />
|ai_aim_predict_time ||[0.000,10.000] ||<br />
|-<br />
|ai_use_old_vision ||'1/0'||<br />
|-<br />
|ai_use_torch_dynamic_lights ||'on/off' или '1/0' ||Использование фонариков неигровыми персонажами (NPC)<br />
|-<br />
|cam_inert ||[0.000,1.000] ||Раскачивание камеры в режиме быстрой ходьбы<br />
|-<br />
|cam_slide_inert ||[0.000,1.000] ||Раскачивание камеры в режиме ходьбы<br />
|-<br />
|cdkey ||строка до 64 символов ||Лицензионный ключ игры<br />
|-<br />
|cfg_load ||cfg_load <имя_файла> ||Загрузить пользовательские настройки из файла<br />
|-<br />
|cfg_save ||cfg_save <имя_файла> ||Сохранить пользовательские настройки в файл<br />
|-<br />
|chat ||не принимает аргументов ||<br />
|-<br />
|check_for_updates ||не принимает аргументов ||Проверить наличие обновлений<br />
|-<br />
|cl_cod_pickup_mode ||'1/0'||Если включено, то можно подбирать предметы в определённом радиусе, также выводятся иконки предметов. Если выключено, можно подбирать только те предметы, что находятся под курсором, иконки в таком случае не отображаются.<br />
|-<br />
|cl_dynamiccrosshair ||'on/off' или '1/0' ||Динамический прицел<br />
|-<br />
|cl_mpdemosave ||'1/0'||<br />
|-<br />
|cl_voteno ||не принимает аргументов ||Проголосовать "Нет"<br />
|-<br />
|cl_votestart ||не принимает аргументов ||Запустить голосование<br />
|-<br />
|cl_voteyes ||не принимает аргументов ||Проголосовать "Да"<br />
|-<br />
|clear_log ||не принимает аргументов ||Очистить лог<br />
|-<br />
|con_sensitive ||[0.010,1.000] ||<br />
|-<br />
|config_dump_all || ||Сделать дамп конфигов для каждого игрока. См. также [[Настройка сервера S.T.A.L.K.E.R. Зов Припяти]]<br />
|-<br />
|default_controls ||не принимает аргументов ||Сбросить настройки клавиш на стандартные (указаны в gamedata\configs\default_controls.ltx)<br />
|-<br />
|demo_play ||<имя_демозаписи> ||Проиграть указанный деморолик<br />
|-<br />
|demo_record ||<имя_демозаписи> ||Режим записи деморолика<br />
|-<br />
|demo_set_cam_position||vector3 в пределах [-3.402823e+038,-3.402823e+038,-3.402823e+038] - [3.402823e+038,3.402823e+038,3.402823e+038] ||<br />
|-<br />
|disconnect ||не принимает аргументов ||Отсоединиться от сервера/завершить игру<br />
|-<br />
|draw_downloads ||'1/0'||<br />
|-<br />
|flush ||не принимает аргументов ||Принудительная запись лога в файл<br />
|-<br />
|g_autopickup ||'on/off' или '1/0' ||Подбирать предметы автоматически (в релизе не работает)<br />
|-<br />
|g_backrun ||'on/off' или '1/0' ||Режим бега "спиной вперёд" (в релизе не работает)<br />
|-<br />
|g_corpsenum ||[0,100] ||Количество трупов<br />
|-<br />
|g_crouch_toggle ||'on/off' или '1/0' ||Режим "сесть/встать"<br />
|-<br />
|g_dynamic_music ||'on/off' или '1/0' ||Динамическая музыка<br />
|-<br />
|g_eventdelay ||[0,1000] ||<br />
|-<br />
|g_game_difficulty ||<nowiki> <gd_novice|gd_stalker|gd_veteran|gd_master> </nowiki> ||Сложность игры<br />
|-<br />
|g_important_save ||on/off' или '1/0' ||Сохранение в ключевых точках<br />
|-<br />
|g_kill ||не принимает аргументов ||Убить игрока<br />
|-<br />
|g_restart ||не принимает аргументов ||Перезапуск игры<br />
|-<br />
|g_restart_fast ||не принимает аргументов ||Быстрый перезапуск игры<br />
|-<br />
|g_sleep_time ||[1,24] ||<br />
|-<br />
|help ||не принимает аргументов ||Вывести список команд консоли<br />
|-<br />
|hide || ||Скрыть консоль<br />
|-<br />
|hud_crosshair ||'on/off' или '1/0' ||Показывать прицел<br />
|-<br />
|hud_crosshair_dist ||'on/off' или '1/0' ||Показывать дистанцию под прицелом<br />
|-<br />
|hud_draw ||'on/off' или '1/0' ||Показывать HUD<br />
|-<br />
|hud_info ||'on/off' или '1/0' ||Показывать информацию под прицелом<br />
|-<br />
|hud_weapon ||'on/off' или '1/0' ||Показывать оружие<br />
|-<br />
|input_exclusive_mode ||не принимает аргументов ||<br />
|-<br />
|keypress_on_start ||'1/0'||Ожидать ли после загрузки уровня нажатия клавиши для перехода в игру. По умолчанию включено.<br />
|-<br />
|load ||<имя_сохранения> ||Загрузить указанное сохранение<br />
|-<br />
|load_last_save ||не принимает аргументов ||Загрузить последнее сохранение<br />
|-<br />
|main_menu ||не принимает аргументов ||Выйти в главное меню<br />
|-<br />
|mouse_invert ||'on/off' или '1/0' ||Инвертировать мышь<br />
|-<br />
|mouse_sens ||[0.001,0.600] ||Чувствительность мыши<br />
|-<br />
|name || ||Имя игрока<br />
|-<br />
|ph_frequency || ||Чем больше, тем качественнее просчёт коллизий<br />
|-<br />
|ph_iterations ||[15,50] ||Число итераций при просчёте физики (?)<br />
|-<br />
|quit ||не принимает аргументов ||Выход в Windows<br />
|-<br />
|r1_detail_textures ||'on/off' или '1/0' ||Детальные текстуры на статичном освещении<br />
|-<br />
|r1_dlights ||'on/off' или '1/0' ||Динамические источники света на статичном освещении (фонарики NPC)<br />
|-<br />
|r1_dlights_clip ||[10.000,150.000] ||<br />
|-<br />
|r1_fog_luminance ||[0.200,5.000] ||<br />
|-<br />
|r1_glows_per_frame ||[2,32] ||<br />
|-<br />
|r1_lmodel_lerp ||[0.000,0.333] ||<br />
|-<br />
|r1_pps_u ||[-1.000,1.000] ||<br />
|-<br />
|r1_pps_v ||[-1.000,1.000] ||<br />
|-<br />
|r1_software_skinning ||[0,2] ||<br />
|-<br />
|r1_ssa_lod_a ||[16.000,96.000] ||<br />
|-<br />
|r1_ssa_lod_b ||[16.000,64.000] ||<br />
|-<br />
|r1_tf_mipbias ||[-0.500,0.500] || Уровень детализации текстур на расстоянии (r1)<br />
|-<br />
|r2_aa ||'on/off' или '1/0' ||"Псевдосглаживание" на динамическом освещении<br />
|-<br />
|r2_aa_break ||vector3 в пределах [0.000000e+000,0.000000e+000,0.000000e+000] - [1.000000e+000,1.000000e+000,1.000000e+000] || Расстояние, на котором действует эффект<br />
|-<br />
|r2_aa_kernel ||[0.300,0.700] || "Базовая" величина эффекта<br />
|-<br />
|r2_aa_weight ||vector3 в пределах [0.000000e+000,0.000000e+000,0.000000e+000] - [1.000000e+000,1.000000e+000,1.000000e+000] || "Тонкая" величина эффекта<br />
|-<br />
|r2_allow_r1_lights ||'on/off' или '1/0' || Источники света как на r1<br />
|-<br />
|r2_detail_bump ||'on/off' или '1/0' || Детальный бамп<br />
|-<br />
|r2_dof ||vector3 в пределах [-10000.000000,-10000.000000,0.000000] - [10000.000000,10000.000000,10000.000000] || Общее значение глубины резкости<br />
|-<br />
|r2_dof_enable ||'on/off' или '1/0' ||Глубина резкости<br />
|-<br />
|r2_dof_far ||[0.000,10000.000] ||Задняя граница резко изображаемого пространства<br />
|-<br />
|r2_dof_focus ||[-10000.000,10000.000] ||Фокусное расстояние (?)<br />
|-<br />
|r2_dof_kernel ||[0.000,10.000]||Допустимое значение рассеяния (?)<br />
|-<br />
|r2_dof_near ||[-10000.000,10000.000]||Передняя граница резко изображаемого пространства<br />
|-<br />
|r2_dof_sky ||[-10000.000,10000.000]|| Значение DoF неба<br />
|-<br />
|r2_exp_donttest_shad ||'on/off' или '1/0'||<br />
|-<br />
|r2_gi ||'on/off' или '1/0'||Глобальное освещение<br />
|-<br />
|r2_gi_clip ||[0.000,0.100]||Дальность действия эффекта<br />
|-<br />
|r2_gi_depth ||[1,5]||Глубина теней<br />
|-<br />
|r2_gi_photons ||[8,256]||Число лучей для трассировки<br />
|-<br />
|r2_gi_refl ||[0.001,0.990]||Отражательная способность поверхностей<br />
|-<br />
|r2_gloss_factor ||[0.000,10.000]||Уровень блеска поверхностей (глосс-фактор)<br />
|-<br />
|r2_ls_bloom_fast ||'on/off' или '1/0'||<br />
|-<br />
|r2_ls_bloom_kernel_b ||[0.010,1.000]||<br />
|-<br />
|r2_ls_bloom_kernel_g ||[1.000,7.000]||<br />
|-<br />
|r2_ls_bloom_kernel_scale ||[0.500,2.000]||<br />
|-<br />
|r2_ls_bloom_speed ||[0.000,100.000]||<br />
|-<br />
|r2_ls_bloom_threshold ||[0.000,1.000]||<br />
|-<br />
|r2_ls_depth_bias ||[-0.500,0.500]||<br />
|-<br />
|r2_ls_depth_scale ||[0.500,1.500]||<br />
|-<br />
|r2_ls_dsm_kernel ||[0.100,3.000]||<br />
|-<br />
|r2_ls_psm_kernel ||[0.100,3.000]||<br />
|-<br />
|r2_ls_squality ||[0.500,1.000]||Качество теней<br />
|-<br />
|r2_ls_ssm_kernel ||[0.100,3.000]||<br />
|-<br />
|r2_mblur ||[0.000,1.000]||Эффект размытия в движении (требуется запуск с ключом -mblur). Реализация сырая, в релизе отключен.<br />
|-<br />
|r2_parallax_h ||[0.000,0.500]||<br />
|-<br />
|r2_shadow_cascede_old ||'on/off' или '1/0'||<br />
|-<br />
|r2_shadow_cascede_zcul ||'on/off' или '1/0'||<br />
|-<br />
|r2_slight_fade ||[0.200,1.000]||Дальность освещения<br />
|-<br />
|r2_soft_particles ||'on/off' или '1/0'||Мягкие частицы<br />
|-<br />
|r2_soft_water ||'on/off' или '1/0'||Мягкая вода<br />
|-<br />
|r2_ssa_lod_a ||[16.000,96.000] ||Уровень детализации динамических объектов<br />
|-<br />
|r2_ssa_lod_b ||[32.000,64.000] ||Уровень детализации статических объектов<br />
|-<br />
|r2_ssao ||<nowiki> <st_opt_off|st_opt_low|st_opt_medium|st_opt_high|st_opt_ultra> </nowiki>||Эффект Screen space ambient occlusion<br />
|-<br />
|r2_ssao_blur ||'on/off' или '1/0'||<br />
|-<br />
|r2_ssao_half_data ||'on/off' или '1/0'||<br />
|-<br />
|r2_ssao_hbao ||'on/off' или '1/0'||Эффект Horizon-based ambient occlusion<br />
|-<br />
|r2_ssao_hdao ||'on/off' или '1/0'||Эффект High-definition ambient occlusion<br />
|-<br />
|r2_ssao_mode ||<nowiki> <disabled|default|hdao|hbao> </nowiki>||Режим AO: выкл/SSAO/HDAO/HBAO<br />
|-<br />
|r2_ssao_opt_data ||'on/off' или '1/0'||<br />
|-<br />
|r2_steep_parallax ||'on/off' или '1/0'||<br />
|-<br />
|r2_sun ||'on/off' или '1/0'||Тени от солнца<br />
|-<br />
|r2_sun_depth_far_bias ||[-0.500,0.500] ||<br />
|-<br />
|r2_sun_depth_far_scale ||[0.500,1.500] ||<br />
|-<br />
|r2_sun_depth_near_bias ||[-0.500,0.500]||<br />
|-<br />
|r2_sun_depth_near_scale ||[0.500,1.500]||<br />
|-<br />
|r2_sun_details ||'on/off' или '1/0'||Тени от травы и других детальных объектов (в релизе не работает)<br />
|-<br />
|r2_sun_far ||[51.000,180.000]||Дальняя граница отрисовки теней от солнца<br />
|-<br />
|r2_sun_focus ||'on/off' или '1/0'||<br />
|-<br />
|r2_sun_lumscale ||[-1.000,3.000]||Яркость солнца<br />
|-<br />
|r2_sun_lumscale_amb ||[0.000,3.000]||Яркость фонового освещения солнца<br />
|-<br />
|r2_sun_lumscale_hemi ||[0.000,3.000]||Яркость отраженных (статических) источников света<br />
|-<br />
|r2_sun_near ||[1.000,50.000]||Ближняя граница отрисовки теней от солнца<br />
|-<br />
|r2_sun_near_border ||[0.500,1.000]||<br />
|-<br />
|r2_sun_quality ||<nowiki> <st_opt_low|st_opt_medium|st_opt_high|st_opt_ultra|st_opt_extreme> </nowiki>|| Качество солнца<br />
|-<br />
|r2_sun_shafts ||<nowiki> <st_opt_off|st_opt_low|st_opt_medium|st_opt_high> </nowiki>||Качество солнечных лучей<br />
|-<br />
|r2_sun_tsm ||'on/off' или '1/0' ||Четкость дальнего каскада солнечных теней<br />
|-<br />
|r2_sun_tsm_bias ||[-0.500,0.500] ||<br />
|-<br />
|r2_sun_tsm_proj ||[0.001,0.800] ||<br />
|-<br />
|r2_tf_mipbias ||[-0.500,0.500] ||<br />
|-<br />
|r2_tonemap ||'on/off' или '1/0' ||Эффект тонального отображения, чаще называемый просто HDR<br />
|-<br />
|r2_tonemap_adaptation ||[0.010,10.000] ||Скорость адаптации к смене освещённости. Чем выше значение, тем быстрее привыкает "глаз".<br />
|-<br />
|r2_tonemap_amount ||[0.000,1.000] ||Интенсивность эффекта<br />
|-<br />
|r2_tonemap_lowlum ||[0.000,1.000] ||Нижний порог яркости. Чем выше значение, тем выше порог.<br />
|-<br />
|r2_tonemap_middlegray ||[0.000,2.000] ||Значение для средне-серого цвета<br />
|-<br />
|r2_volumetric_lights ||'on/off' или '1/0' ||Объемный свет<br />
|-<br />
|r2_wait_sleep ||'1/0'||<br />
|-<br />
|r2_zfill ||'on/off' или '1/0' ||<br />
|-<br />
|r2_zfill_depth ||[0.001,0.500] ||<br />
|-<br />
|r2em ||[0.000,4.000] ||<br />
|-<br />
|r3_dynamic_wet_surfaces ||'on/off' или '1/0' || Намокание поверхностей (DX10)<br />
|-<br />
|r3_dynamic_wet_surfaces_far ||[30.000,100.000] ||<br />
|-<br />
|r3_dynamic_wet_surfaces_near ||[10.000,70.000] ||<br />
|-<br />
|r3_dynamic_wet_surfaces_sm_res ||[64,2048] ||Качество отрисовки намокания<br />
|-<br />
|r3_gbuffer_opt ||'on/off' или '1/0' ||<br />
|-<br />
|r3_minmax_sm ||<nowiki> <off|on|auto|autodetect> </nowiki>||<br />
|-<br />
|r3_msaa ||<nowiki> <st_opt_off|2x|4x> </nowiki>||Качество сглаживания (DX10)<br />
|-<br />
|r3_msaa_alphatest ||<nowiki> <st_opt_off|st_opt_atest_msaa_dx10_0|st_opt_atest_msaa_dx10_1> </nowiki>||Сглаживание прозрачных текстур (DX10.1)<br />
|-<br />
|r3_use_dx10_1||'on/off' или '1/0' ||Использовать DX10.1<br />
|-<br />
|r3_volumetric_smoke ||'on/off' или '1/0' ||Объемный дым (DX10)<br />
|-<br />
|r4_enable_tessellation||'on/off' или '1/0'||Тесселяция (DX11)<br />
|-<br />
|r4_wireframe ||'on/off' или '1/0'||Отображать каркас динамических моделей (DX11)<br />
|-<br />
|r__detail_density ||[0.200,0.600]||Плотность травы<br />
|-<br />
|r__dtex_range ||[5.000,175.000]||<br />
|-<br />
|r__geometry_lod ||[0.100,1.200]||Степень детализации объектов<br />
|-<br />
|r__supersample ||[1,8]||Сглаживание<br />
|-<br />
|r__tf_aniso ||[1,16]||Анизотропная фильтрация<br />
|-<br />
|r__wallmark_ttl ||[1.000,300.000]||Время жизни воллмарков<br />
|-<br />
|r_restore_quad_ib_data ||не принимает аргументов ||<br />
|-<br />
|ra ||не принимает аргументов ||<br />
|-<br />
|render_memory_stats ||не принимает аргументов ||Вывод статистики по используемой видеопамяти в консоль<br />
|-<br />
|renderer ||<nowiki> <renderer_r1|renderer_r2a|renderer_r2|renderer_r2.5|renderer_r3|renderer_r4> </nowiki>||Тип рендера (статическое освещение, динамическое освещение объектов, полное динамическое освещение, улучшенное полное освещение, DX10, DX11)<br />
|-<br />
|rs_c_brightness ||[0.500,1.500]||Яркость<br />
|-<br />
|rs_c_contrast ||[0.500,1.500]||Контраст<br />
|-<br />
|rs_c_gamma ||[0.500,1.500]||Гамма<br />
|-<br />
|rs_cam_pos ||'on/off' или '1/0'||Вывод позиции камеры на экран<br />
|-<br />
|rs_detail ||'on/off' или '1/0'||Отрисовывать ли детальные объекты. В релизной версии не работает.<br />
|-<br />
|rs_fullscreen ||'on/off' или '1/0'||Полноэкранный режим<br />
|-<br />
|rs_refresh_60hz ||'on/off' или '1/0'||Частота обновления экрана 60Гц<br />
|-<br />
|rs_skeleton_update ||[2,128]||<br />
|-<br />
|rs_stats ||'on/off' или '1/0'||Вывод статистики по движку на экран<br />
|-<br />
|rs_v_sync ||'on/off' или '1/0'||Вертикальная синхронизация (не работает без [[Официальные патчи|патча 2014г.]])<br />
|-<br />
|rs_vis_distance ||[0.400,1.500]||Дальность видимости<br />
|-<br />
|save ||<имя_сохранения>||Сохранить игру<br />
|-<br />
|screenshot ||не принимает аргументов||Сделать снимок экрана<br />
|-<br />
|screenshot_all || ||Make screenshot of each player in the game<br />
|-<br />
|slot_0 ||строка до 32 знаков ||Предмет в первом слоте<br />
|-<br />
|slot_1 ||строка до 32 знаков ||Предмет во втором слоте<br />
|-<br />
|slot_2 ||строка до 32 знаков ||Предмет в третьем слоте<br />
|-<br />
|slot_3 ||строка до 32 знаков ||Предмет в четвертом слоте<br />
|-<br />
|snd_acceleration ||'on/off' или '1/0'||Аппаратное ускорение звука<br />
|-<br />
|snd_cache_size ||[4,32] ||Объем звукового кэша<br />
|-<br />
|snd_device || ||Устройство звуковоспроизведения<br />
|-<br />
|snd_efx ||'on/off' или '1/0' ||<br />
|-<br />
|snd_restart ||не принимает аргументов ||Перезапуск звукового движка<br />
|-<br />
|snd_targets ||[4,32] ||Максимальное количество активных звуков<br />
|-<br />
|snd_volume_eff ||[0.000,1.000] ||Громкость звуковых эффектов<br />
|-<br />
|snd_volume_music ||[0.000,1.000] ||Громкость музыки<br />
|-<br />
|start || ||Запуск игры<br />
|-<br />
|stat_memory ||не принимает аргументов ||Вывод статистики по используемой памяти в консоль<br />
|-<br />
|texture_lod ||[0,4] ||Уровень детализации импостеров<br />
|-<br />
|vid_mode ||<nowiki> <800x600|1024x768|1152x864|1280x720|1280x768|1280x800|1280x960|1280x1024| 1360x768|1600x900|1600x1024|1600x1200|1680x1050|1920x1080|1440x900> </nowiki>||Разрешение экрана<br />
|-<br />
|vid_restart ||не принимает аргументов ||Перезапустить графический движок<br />
|-<br />
|wpn_aim_toggle ||'1/0'||<br />
|}<br />
<br />
<br />
== Команды для сетевой игры ==<br />
{| class="wikitable"<br />
! Команда || Описание<br />
|-<br />
|g_swapteams ||не принимает аргументов ||swap teams for artefacthunt game<br />
|-<br />
|get_server_address ||не принимает аргументов ||Список игроков<br />
|-<br />
|gs_create_account ||<ник> <уникальный_ник> <email> <пароль>||Создать аккаунт GameSpy<br />
|-<br />
|gs_delete_profile ||<имя_профиля>||Удалить текущий профиль<br />
|-<br />
|gs_list_profiles ||<email> <пароль> ||Lists account profiles<br />
|-<br />
|gs_login ||<email> <ник> <пароль> ||Войти в GameSpy<br />
|-<br />
|gs_logout || ||Выйти из GameSpy<br />
|-<br />
|gs_print_profile || ||Печатать информацию текущего профиля<br />
|-<br />
|gs_profile || ||Загрузить информацию текущего профиля<br />
|-<br />
|gs_register_unique_nick || ||Зарегистрировать уникальный ник для текущего профиля<br />
|-<br />
|gs_suggest_unicks || ||Подсказать уникальный ник<br />
|-<br />
|make_config_dump ||<nowiki> <player session id | 'last_printed'> <ban_time_in_sec> </nowiki>||Сделать дамп конфигов указанного игрока (для получения списка идентификаторов игроков см. sv_listplayers)<br />
|-<br />
|make_screenshot ||<nowiki> <player session id | 'last_printed'> <ban_time_in_sec> </nowiki>||Сделать снимок экрана указанного игрока (для получения списка идентификаторов игроков см. sv_listplayers)<br />
|-<br />
|mm_mm_net_srv_dedicated ||'on/off' или '1/0' ||Режим выделенного (dedicated) сервера<br />
|-<br />
|mm_net_con_publicserver ||'on/off' или '1/0' ||Доступность сервера в интернете (локальный или интернет-сервер)<br />
|-<br />
|mm_net_con_spectator ||[1,32] ||Максимальное количество наблюдателей<br />
|-<br />
|mm_net_con_spectator_on ||'on/off' или '1/0' ||Разрешить наблюдателей<br />
|-<br />
|mm_net_filter_empty ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_filter_full ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_filter_listen ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_filter_pass ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_filter_wo_ff ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_filter_wo_pass ||'on/off' или '1/0' ||<br />
|-<br />
|mm_net_player_name ||строка до 64 знаков||Имя игрока для сетевой игры<br />
|-<br />
|mm_net_srv_gamemode ||<nowiki> <st_deathmatch|st_team_deathmatch|st_artefacthunt|st_capture_the_artefact> </nowiki> ||Режим сетевой игры (все против всех, команда против команды, охота за артефактом, захват артефакта)<br />
|-<br />
|mm_net_srv_maxplayers ||[2,32] ||Максимальное количество игроков<br />
|-<br />
|mm_net_srv_name ||строка до 64 знаков||Имя сервера для сетевой игры<br />
|-<br />
|mm_net_srv_reinforcement_type ||[0,2] ||<br />
|-<br />
|mm_net_weather_rateofchange ||[0.000,100.000] ||<br />
|-<br />
|mpdemoplay_cancel_pause_on || ||Cancels mpdemoplay_pause_on<br />
|-<br />
|mpdemoplay_divspeed || ||Уменьшить скорость проигрывания демо<br />
|-<br />
|mpdemoplay_mulspeed || ||Увеличить скорость проигрывания демо<br />
|-<br />
|mpdemoplay_pause_on ||<roundstart,kill,die,artefacttake,artefactdrop,artefactdeliver> [player name]|| Play demo until specified event (then pause playing)<br />
|-<br />
|mpdemoplay_restart || ||Restarts playing demo<br />
|-<br />
|mpdemoplay_rewind_until ||<roundstart,kill,die,artefacttake,artefactdrop,artefactdeliver> [player name] ||Rewind demo until specified event (then pause playing)<br />
|-<br />
|mpdemoplay_speed_set ||[0.0, 8.0] ||Установить скорость проигрывания демо<br />
|-<br />
|mpdemoplay_stop_rewind || ||Stops rewinding (mpdemoplay_rewind_until).<br />
|-<br />
|net_cl_clearstats || ||Очистить сетевую статистику клиента<br />
|-<br />
|net_cl_icurvesize ||[0,2000] ||<br />
|-<br />
|net_cl_icurvetype ||[0,2] ||<br />
|-<br />
|net_cl_interpolation ||[-1.000,1.000] ||<br />
|-<br />
|net_cl_log_data ||'on/off' или '1/0' ||<br />
|-<br />
|net_cl_resync || ||Синхронизировать клиента<br />
|-<br />
|net_compressor_enabled ||'1/0'||<br />
|-<br />
|net_compressor_gather_stats ||'1/0'||<br />
|-<br />
|net_compressor_status ||<info|info_full|on|off> ||<br />
|-<br />
|net_dbg_dump_export_obj ||'1/0'||<br />
|-<br />
|net_dbg_dump_import_obj ||'1/0'||<br />
|-<br />
|net_dbg_dump_update_read ||'1/0'||<br />
|-<br />
|net_dbg_dump_update_write ||'1/0'||<br />
|-<br />
|net_dedicated_sleep ||[0,64] ||<br />
|-<br />
|net_sv_clearstats || ||Очистить сетевую статистику сервера<br />
|-<br />
|net_sv_gpmode ||[0,2] ||<br />
|-<br />
|net_sv_log_data ||'on/off' или '1/0' ||<br />
|-<br />
|net_sv_pending_lim ||[0,10] ||<br />
|-<br />
|net_sv_update_rate ||[1,100] ||<br />
|-<br />
|sv_activated_return ||'1/0'||<br />
|-<br />
|sv_addmap || ||Добавить карту в список карт<br />
|-<br />
|sv_adm_menu_ban_time ||<nowiki> <ui_mp_am_10_minutes|ui_mp_am_30_minutes|ui_mp_am_1_hour |ui_mp_am_6_hours|ui_mp_am_1_day|ui_mp_am_1_week |ui_mp_am_1_month|ui_mp_am_3_monthes|ui_mp_am_forever> </nowiki> ||<br />
|-<br />
|sv_adm_menu_ping_limit ||[1,200] ||<br />
|-<br />
|sv_anomalies_enabled ||'1/0'||Аномалии в сетевой игре<br />
|-<br />
|sv_anomalies_length ||[0,180] ||<br />
|-<br />
|sv_artefact_respawn_delta ||[0,600] ||Время до рождения артефакта, сек.<br />
|-<br />
|sv_artefact_returning_time ||[0,300] ||<br />
|-<br />
|sv_artefact_spawn_force ||'1/0'||<br />
|-<br />
|sv_artefact_stay_time ||[0,180] ||Время жизни артефакта, мин.<br />
|-<br />
|sv_artefacts_count ||[1,100] ||Количество артефактов<br />
|-<br />
|sv_auto_team_balance ||'1/0'||Автобаланс команд<br />
|-<br />
|sv_auto_team_swap ||'1/0'||Автосмена команд<br />
|-<br />
|sv_banplayer ||<nowiki> <player session id | 'last_printed'> <ban_time_in_sec> </nowiki>||Ban player. To receive list of players ids see sv_listplayers<br />
|-<br />
|sv_banplayer_by_digest ||<nowiki> <hex digest> <ban_time_in_sec> </nowiki>|| Ban player by hex digest (CAREFULLY: low level command). To get player hex digest you can enter: sv_listplayers_banned<br />
|-<br />
|sv_banplayer_ip ||<ip-адрес>||Заблокировать игрока по IP<br />
|-<br />
|sv_bearercantsprint ||'1/0'||Разрешить бег игроку с артефактом<br />
|-<br />
|sv_changegametype ||<dm>,<tdm>,<ah>,<cta>||Сменить тип игры<br />
|-<br />
|sv_changelevel ||<имя_уровня> <версия_уровня>||Сменить игровой уровень<br />
|-<br />
|sv_changelevelgametype ||<имя_уровня> <версия_уровня> <тип_игры>||Сменить уровень, версию и тип игры<br />
|-<br />
|sv_client_reconnect_time ||[0,60] ||Период сохранения профилей игроков, мин.<br />
|-<br />
|sv_console_update_rate ||[1,100] ||<br />
|-<br />
|sv_cta_runkup_to_arts_div ||[0,10] ||<br />
|-<br />
|sv_dedicated_server_update_rate ||[1,1000] ||<br />
|-<br />
|sv_dmgblockindicator ||'1/0'||Индикатор неуязвимости<br />
|-<br />
|sv_dmgblocktime ||[0,600] ||Время неуязвимости после рождения, сек.<br />
|-<br />
|sv_dump_online_statistics ||не принимает аргументов||Показать текущие настройки сервера<br />
|-<br />
|sv_dump_online_statistics_period ||[0,60] ||<br />
|-<br />
|sv_forcerespawn ||[0,3600] ||Время до возрождения игрока<br />
|-<br />
|sv_fraglimit ||[0,1000] ||Лимит фрагов<br />
|-<br />
|sv_friendly_indicators ||'1/0'||Отображать значки над дружественными игроками<br />
|-<br />
|sv_friendly_names ||'1/0'||Отображать имена дружественных игроков<br />
|-<br />
|sv_friendlyfire ||[0.000,2.000] ||Разрешен ли огонь по своим<br />
|-<br />
|sv_hail_to_winner_time ||[0,60] ||Время для поздравления победителя по окончании матча<br />
|-<br />
|sv_invincible_time ||[0,60] ||<br />
|-<br />
|sv_kick||<имя> ||Выбросить игрока по имени<br />
|-<br />
|sv_kick_id <id> ||sv_kick_id <id> ||Выбросить игрока по ID<br />
|-<br />
|sv_listmaps || ||List maps in map rotation list<br />
|-<br />
|sv_listplayers ||sv_listplayers [filter string]||Список игроков<br />
|-<br />
|sv_listplayers_banned ||[filter string]||Список заблокированных игроков<br />
|-<br />
|sv_max_ping_limit ||[1,2000] ||Лимит пинга<br />
|-<br />
|sv_nextanomalyset || ||Activating pointed Anomaly set<br />
|-<br />
|sv_nextmap || не принимает аргументов ||Переключиться на следующую карту из списка<br />
|-<br />
|sv_pda_hunt ||'1/0'||<br />
|-<br />
|sv_prevmap || не принимает аргументов ||Переключиться на предыдущую карту из списка<br />
|-<br />
|sv_reinforcement_time ||[-1,3600] ||<br />
|-<br />
|sv_remove_corpse ||[-1,1] ||Удалять тело игрока после смерти<br />
|-<br />
|sv_remove_weapon ||[-1,1] ||Удалять оружие игрока после его смерти<br />
|-<br />
|sv_return_to_base ||не принимает аргументов ||<br />
|-<br />
|sv_returnplayers ||'1/0'||<br />
|-<br />
|sv_rpoint_freeze_time ||[0,60000] ||<br />
|-<br />
|sv_saveconfigs ||'1/0'||<br />
|-<br />
|sv_savescreenshots ||'1/0'||<br />
|-<br />
|sv_setenvtime ||[0,23] ||Игровое время, час.<br />
|-<br />
|sv_setweather <имя_погодной_секции>|| ||Установить указанную погоду<br />
|-<br />
|sv_shieldedbases ||'1/0'||Защищённые базы<br />
|-<br />
|sv_show_player_scores_time ||[1,20] ||<br />
|-<br />
|sv_spectr_firsteye ||'1/0'||<br />
|-<br />
|sv_spectr_freefly ||'1/0'||<br />
|-<br />
|sv_spectr_freelook ||'1/0'||<br />
|-<br />
|sv_spectr_lookat ||'1/0'||<br />
|-<br />
|sv_spectr_teamcamera ||'1/0'||<br />
|-<br />
|sv_startteammoney || ||Начальное кол-во денег у команды<br />
|-<br />
|sv_statistic_collect ||'1/0'||<br />
|-<br />
|sv_statistic_save || ||saving statistic data<br />
|-<br />
|sv_status || ||Показать текущие настройки сервера<br />
|-<br />
|sv_teamkill_limit ||[0,100] ||<br />
|-<br />
|sv_teamkill_punish ||'1/0'||<br />
|-<br />
|sv_timelimit ||[0,180] ||<br />
|-<br />
|sv_traffic_optimization_level ||[0,7] ||<br />
|-<br />
|sv_unbanplayer ||<nowiki> <banned player index | 'last_printed_banned'> </nowiki>||Unban player. To receive list of banned players see sv_listplayers_banned<br />
|-<br />
|sv_unbanplayer_ip ||<nowiki> <ip-адрес> </nowiki>||Разблокировать игрока по IP<br />
|-<br />
|sv_vote_enabled ||[0,255] ||<br />
|-<br />
|sv_vote_participants ||'1/0'||<br />
|-<br />
|sv_vote_quota ||[0.000,1.000] ||<br />
|-<br />
|sv_vote_time ||[0.500,10.000] ||<br />
|-<br />
|sv_votestop || ||Остановить текущее голосование<br />
|-<br />
|sv_warm_up ||[0,3600] ||<br />
|-<br />
|sv_write_update_bin ||'1/0'||<br />
|}<br />
<br />
<br />
== Команды для работы с клавишами ==<br />
{| class="wikitable"<br />
! Команда || Описание<br />
|-<br />
| bind <команда> <клавиша> || Привязать клавишу '''имя_клавиши'''<br />
|-<br />
| bind_sec <команда> <клавиша> || Привязать дублирующую клавишу '''имя_дублирующей_клавиши'''<br />
|-<br />
| unbind <команда> <клавиша> || Отвязать клавишу '''имя_клавиши'''<br />
|-<br />
| unbind_sec <команда> <клавиша> || Привязать дублирующую клавишу '''имя_дублирующей_клавиши'''<br />
|-<br />
| unbindall || Отвязать все клавиши от команд<br />
|-<br />
| default_controls || Сбросить привязку клавиш на стандартную<br />
|-<br />
| list_actions || Вывести список активных консольных команд <br />
|-<br />
| bind_list || Вывести список команд, привязанных к клавишам <br />
|-<br />
| bind_console <команда> <клавиша> || Привязать консольную команду '''имя_команды'''<br />
|-<br />
| unbind_console <команда> <клавиша> || Отвязать консольную команду '''имя_команды'''<br />
|}<br />
<br />
== Список имён клавиш ==<br />
<syntaxhighlight lang="ini"><br />
k0<br />
k1<br />
k2<br />
k3<br />
k4<br />
k5<br />
k6<br />
k7<br />
k8<br />
k9<br />
<br />
kA<br />
kB<br />
kC<br />
kD<br />
kE<br />
kF<br />
kJ<br />
kH<br />
kI<br />
kJ<br />
kK<br />
kL<br />
kM<br />
kN<br />
kO<br />
kP<br />
kQ<br />
kR<br />
kS<br />
kT<br />
kU<br />
kV<br />
kW<br />
kX<br />
kY<br />
kZ<br />
<br />
kADD<br />
kAPOSTROPHE<br />
kAPPS<br />
kAT<br />
kAX<br />
kBACK<br />
kBACKSLASH<br />
kCAPITAL<br />
kCIRCUMFLEX<br />
kCOLON<br />
kCOMMA<br />
kCONVERT<br />
kDECIMAL<br />
kDELETE<br />
kDIVIDE<br />
kDOWN<br />
kEND<br />
kEQUALS<br />
kESCAPE <br />
<br />
kF1<br />
kF2<br />
kF3<br />
kF4<br />
kF5<br />
kF6<br />
kF7<br />
kF8<br />
kF9<br />
kF10<br />
kF11<br />
kF12<br />
kF13<br />
kF14<br />
kF15<br />
<br />
kGRAVE<br />
kHOME<br />
kINSERT<br />
kKANA<br />
kKANJI<br />
kLBRACKET<br />
kLCONTROL<br />
kLEFT<br />
kLMENU<br />
kLSHIFT <br />
kLWIN<br />
kMINUS<br />
kMULTIPLY<br />
kNEXT<br />
kNOCONVERT<br />
<br />
kNUMPAD0<br />
kNUMPAD1<br />
kNUMPAD2<br />
kNUMPAD3<br />
kNUMPAD4<br />
kNUMPAD5<br />
kNUMPAD6<br />
kNUMPAD7<br />
kNUMPAD8<br />
kNUMPAD9<br />
<br />
kNUMLOCK<br />
kNUMPADCOMMA<br />
kNUMPADENTER<br />
kNUMPADEQUALS<br />
<br />
kPAUSE<br />
kPERIOD<br />
kPRIOR<br />
kRBRACKET<br />
kRCONTROL<br />
kRETURN<br />
kRIGHT<br />
kRMENU<br />
kRSHIFT<br />
kRWIN<br />
kSCROLL<br />
kSEMICOLON<br />
kSLASH<br />
kSPACE<br />
kSTOP<br />
kSUBTRACT<br />
kSYSRQ<br />
kTAB<br />
kUNDERLINE<br />
kUNLABELED<br />
kUP<br />
kYEN<br />
<br />
mouse1<br />
mouse2<br />
mouse3<br />
mouse4<br />
mouse5<br />
mouse6<br />
mouse7<br />
mouse8<br />
</syntaxhighlight><br />
<br />
Спасибо '''K.D.''' за пояснения.<br />
<br />
[[Категория:Консольные команды]][[Категория:Движок]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_S.T.A.L.K.E.R._%D0%97%D0%BE%D0%B2_%D0%9F%D1%80%D0%B8%D0%BF%D1%8F%D1%82%D0%B8&diff=1244Настройка сервера S.T.A.L.K.E.R. Зов Припяти2024-02-11T14:37:31Z<p>RedPython: </p>
<hr />
<div>= Запуск игрового сервера =<br />
Для запуска игрового сервера вы можете воспользоваться bat-файлами (находящимися в папке с установленной игрой), которые содержат стандартные конфигурации игровых серверов.<br />
<br />
== Параметры среды окружение сервера ==<br />
Для запуска процесса выделенного сервера (dedicated\xrEngine.exe) требуется, чтобы рабочей папкой была та, в которой находятся dll-файлы игры (обычно это в папке bin, установленной игры). Т.е. из папки bin, запустить <code>.\dedicated\xrEngine.exe</code><br />
<br />
После того, как серверный процесс запущен, он должен загрузить файловую систему.<br />
Файловая система определяется конфигурационным файлом '''fsgame.ltx''' (который обычно находится на уровень выше папки bin).<br />
<br />
Чтобы задать путь к этому конфигурационному файлу, используйте параметер командной строки <code>-fsltx</code><br />
Т.е. из папки ''bin'' запустить <code>.\dedicated\xrEngine.exe -fsltx ..\fsgame.ltx</code><br />
<br />
Итак, процесс сервера запущен. Движемся дальше.<br />
<br />
Для сервера нужна папка '''$app_data_root$''', заданная в конфигурационном файле ('''fsgame.ltx''').<br />
В этой папке хранятся все необходимые конфигурационные файлы.<br />
Если у вас несколько игровых серверов на одной машине, вы можете создать несколько разных '''fsgame.ltx''' для каждого с<br />
разными директориями ''$app_data_root$''.<br />
<br />
== Параметры командной строки ==<br />
Рассмотрим стандартную команду запуска:<br />
<syntaxhighlight lang="winbatch">.\dedicated\xrEngine.exe [ -fsgltx путь_к_fsgame.ltx ] [ -ltx путь_к_user.ltx ] [ -start server(имя_карты/режим_игры/public=1/hname=имя_сервера/другие_параметры) client(localhost/другие_параметры) ]</syntaxhighlight><br />
Подробнее по ключам:<br />
* '''-fsltx''' - путь к файлу конфигурации fsgame.ltx<br />
* '''-ltx''' - путь к файлу конфигурации игры.<br />
* '''-start server(параметры) client(localhost)''' - запустить сервер с параметрами и подключиться к нему (client(localhost) - обязательный)<br />
<br />
Подробнее по параметрам:<br />
* '''public''' – интернет сервер (будет проверять CD-key и только для залогиненых в GameSpy пользователей)<br />
* '''hname''' – Имя сервера<br />
* '''psw''' – пароль (строка)<br />
* '''spectrmds''' – режимы наблюдателя (битовая маска):<br />
** бит 0: свободный полет<br />
** бит 1: наблюдать из глаз других игроков (если наблюдатель)<br />
** бит 2: наблюдать со стороны (вид от 3-его лица)<br />
** бит 3: свободно крутить камерой (при виде от 3-его лица)<br />
** бит 4: зарезервировано<br />
** бит 5: наблюдать из глаз можно только за игроками из своей команды.<br />
<br />
По умолчанию задано значение 34 (что в бинарном коде выглядит так: 100010), это означает:<br />
# свободный полет запрещен<br />
# наблюдать за другими игроками из их глаз разрешено<br />
# наблюдать со стороны после убиства запрещено<br />
# крутить камерой после убийства нельзя<br />
# зарезервировано<br />
# наблюдать за другими из их глаз можно только из своей команды<br />
<br />
* '''estime''' – начальное время в игре (по умолчанию 9.00 утра)<br />
* '''fraglimit''' – лимит фрагов (если 0 – значит лимита нет)<br />
* '''timelimit''' – лимит времени игры (если 0 – значит лимита нет)<br />
* '''dmgblock''' – время бессмертия после рождения в секундах.<br />
* '''dmbi''' – показывать индикатор неуязвимости (значения: 0 или 1)<br />
* '''ans''' – включить аномалии (значения: 0 или 1)<br />
* '''anslen''' – время через которое аномалии меняются<br />
* '''warmup''' – время разминки в секундах<br />
* '''pdahunt''' – давать 100$ при поднятии рюкзачков (значения: 0 или 1)<br />
<br />
* '''abalance''' – автоматический баланс команд перед началом раунда (значения: 0 или 1)<br />
* '''aswap''' – автоматический обмен командами (значения: 0 или 1)<br />
* '''ffire''' – коэффициент повреждения по дружественным целям (значения: от 0.0 до 1.0, по умолчанию: 1.0)<br />
* '''fn''' – показывать имена игроков твоей команды<br />
* '''anum''' – количество артефактов для победы<br />
<br />
Для режима «Охота за артефактом»:<br />
* '''ardelta''' – время через которое родится артефакт (в секундах, по умолчанию 30 секунд)<br />
* '''astime''' – время жизни артефакта (в минутах, по умолчанию: 3 минуты)<br />
* '''reinf''' – время через которое будут рождены игроки (в секундах, по умолчанию 20)<br />
<br />
Для режима «Захват артефакта»:<br />
* '''artrettime''' – время, через которое артефакт вернется на базу, если его выронили (в секундах, по умолчанию: 45)<br />
* '''dmgblock''' – время неуязвимости игроков на базе (в секундах, по умолчанию: 5 секунд)<br />
<br />
<br />
= Параметры сети =<br />
Необходимые сетевые параметры:<br />
* UDP ports range: [5445 - 5646]<br />
* UDP ports: 27900, 29910,<br />
* TCP ports: 80, 29900, 29901, 28910<br />
<br />
== Настройка портов сервера ==<br />
При запуске сервера можно задать, на какой UDP порт будет завязан игровой сервер.<br />
На этот порт будет производится первоначальные запросы при соединении.<br />
Если у Вас на одной физической машине размещаются несколько игровых серверов, то эти порты должны отличаться. Желательно на число большее 32-ух.<br />
Этот порт можно задать с помощью параметра сервера '''portsv'''.<br />
<br />
Также серверу в интернете понадобится привязать (забиндить) порт для взаимодействия с сервером GameSpy (GameGSC :) ). Этот порт тоже должен быть уникален, и задается параметром '''portgs'''.<br />
<br />
Если не задать порты, то система попытается их определить автоматически, например:<br />
<syntaxhighlight lang="winbatch">start server(mp_agroprom/dm/portsv=5450/portgs=5451) client(localhost)<br />
start server(mp_agroprom/dm/portsv=5490/portgs=5491) client(localhost)<br />
start server(mp_agroprom/dm/portsv=5530/portgs=5531) client(localhost)</syntaxhighlight><br />
<br />
== Настройка фильтра IP адресов ==<br />
Сервер можно настроить для видимости в определенной подсети, т.е. клиенты из другой подсети его не увидят и не смогут к нему присоединится.<br />
<br />
Доступные подсети задаются в конфигурационном файле '''ip_filter.ltx''', который находится в папке, заданной значением ключа ''$app_data_root$''<br />
<br />
Этот файл должен содержать секцию '''subnet_list''', в которой перечислены маски подсетей в формате CIDR.<br />
<br />
Например (содержание файла '''...\_appdata_\ip_filter.ltx'''):<br />
<syntaxhighlight lang="ini">[subnet_list]<br />
62.16.0.0/19<br />
62.64.64.0/18<br />
62.72.160.0/19<br />
62.80.160.0/19<br />
62.149.0.0/19</syntaxhighlight><br />
<br />
= Права доступа администраторов =<br />
Права доступа администраторов задаются конфигурационным файлом '''radmins.ltx''', который находится в папке, заданной значением ключа ''$app_data_root$''<br />
<br />
Этот файл должен содержать секцию ''radmins'', в которой задаются пары ''<имя пользователя>=<пароль>''<br />
<br />
Например (содержание файла '''...\_appdata_\radmins.ltx'''):<br />
<syntaxhighlight lang="ini">[radmins]<br />
mega_admin=mega_password</syntaxhighlight><br />
<br />
= Настройка статистики сервера =<br />
Для того, чтобы включить сбор статистики игр на сервере, необходимо ввести две команды в консоль:<br />
# '''sv_statistic_collect 1''' - включает сбор статистики по играм.<br />
# '''sv_dump_online_statistics_period 3''' – включает сброс статистики по игре в файл '''online_dump.ltx''' каждые 3 минуты.<br />
Файлы статистики записываются в папочку, заданную значением ключа ''$logs$'' плюс ''\mp_stats\имя сервера\''<br />
<br />
Подробная статистика записывается только в конце игры. Поэтому если вы выйдите из игры перед концом, то ваша статистика не сохранится.<br />
<br />
Очень важно помнить о том, что '''sv_statistic_collect 1''' и '''sv_dump_online_statistics_period 3''' — это консольные команды, которые записываются в '''user.ltx''', поэтому проследите, чтобы '''user.ltx''' грузился правильный.<br />
<br />
<br />
= Игровые настройки =<br />
== Для режима Deathmatch ==<br />
* '''sv_dmgblocktime''' – время бессмертия после рождения<br />
* '''sv_fraglimit''' – лимит фрагов (если 0 - бесконечно)<br />
* '''sv_timelimit''' – лимит времени (если 0 – бесконечно)<br />
<br />
== Для режима TeamDeathmatch ==<br />
Такие же как и в Deathmatch-е, плюс:<br />
* '''sv_friendlyfire''' – коэфициент повреждения от огня по своим. (по умолчанию: 1.0)<br />
* '''sv_teamkill_limit''' – максимальное количество убийств своих, после которого будет произведен кик<br />
<br />
== Для режима ArtefactHunt ==<br />
Такие же как и в TeamDeathmatch (кроме '''sv_fraglimit'''), плюс:<br />
* '''sv_artefacts_count''' – количество артефактов для победы<br />
<br />
== Для режима CaptureTheArtefact ==<br />
Такие жк как и в ArtefactHunt, плюс:<br />
* '''sv_artefact_returning_time''' – время, через которое артефакт будет возвращен, если его выронили<br />
<br />
== Кик игроков ==<br />
Для того чтобы кикнуть игрока, Вы можете воспользоваться командой '''sv_kick_id''' которая прнимает как параметер ''идентификатор сессии игрока''.<br />
<br />
Чтобы получить идентификатор сессии игрока, используется команда '''sv_listplayers''', которая выводит список игроков и их идентификаторы. <br />
Вы можете передать часть ника игрока этой команде. Например '''sv_listplayers cheater''' и тогда эта команда выведет только тех игроков, в имени которых есть подстрока '''chetaer'''.<br />
<br />
Вы можете использовать макрос '''last_printed''', который будет указывать на последнего выведенного игрока командой '''sv_listplayers'''.<br />
<br />
Например, нужно быстро кикнуть читера с именем '''mega_cheater''':<br />
<syntaxhighlight lang="winbatch">sv_listplayers mega_chea<br />
sv_kick_id last_printed</syntaxhighlight><br />
<br />
== Бан игроков ==<br />
Бан игроков осуществляется командой <br />
<syntaxhighlight lang="winbatch">sv_banplayer <идентификатор сессии игрока> <время в секундах></syntaxhighlight><br />
<br />
Например, нужно быстро забанить на час читера с именем '''mega_cheater''':<br />
<syntaxhighlight lang="winbatch">sv_listplayers mega_chea<br />
sv_banplayer last_printed 3600</syntaxhighlight><br />
<br />
== Снятие и проверка скриншотов экрана игроков ==<br />
Для того, чтобы сделать скриншот игрока, сначала вы должны залогинится в игре под администратором ('''ra login <имя> <пароль>''').<br />
<br />
Затем ввести следующую команду:<br />
<syntaxhighlight lang="winbatch">ra make_screenshot <идентификатор сессии игрока></syntaxhighlight><br />
<br />
Чтобы проверить подлинность скриншота, вы можете воспользоваться утилитой '''mp_screenshots_info.exe'''<br />
<br />
Чтобы ее запустить, войдите в папку с '''fsgame4mpu.ltx''', и запустите<br />
<syntaxhighlight lang="winbatch">.\bin\mp_screenshots_info.exe <имя файла скриншота без пути></syntaxhighlight><br />
<br />
Если у вас нет файла '''fsgame4mpu.ltx''', скопируйте '''fsgame.ltx''' в '''fsgame4mpu.ltx'''<br />
<br />
Скриншоты утилита будет искать в папке, заданной ключом ''$logs$\screenshots''<br />
<br />
== Снятие и проверка дампов образа игры игроков ==<br />
Аналогично предыдущей команде ('''ra make_screenshot'''), делается и дамп конфигов игрока.<br />
<br />
Синтаксис команды:<br />
<syntaxhighlight lang="winbatch">ra make_config_dump <идентификатор сессии игрока></syntaxhighlight><br />
<br />
Конфиг-дампы хранятся в папке заданной ключом ''$logs$\screenshots''<br />
<br />
Как и в случае скриншота, вы можете проверить валидность конфиг дампа утилитой '''mp_configs_verifyer.exe''' (которая запускается также как и '''mp_screenshots_info.exe''')<br />
<br />
Например:<br />
<syntaxhighlight lang="winbatch">.\bin\mp_configs_verifyer.exe -f 091007-182149_stalker.ltx</syntaxhighlight><br />
<br />
<br />
= Секретные функции =<br />
== Баннер провайдера и правила игры на сервере ==<br />
Вы можете разместить свой баннер и правила поведения на Вашем сервере прямо в игре!<br />
<br />
Для этого поместите в папку ''$app_data_root$'' два файла:<br />
# '''server_logo.jpg''' - (658 x 215 пикселей)<br />
# '''server_rules.txt''' – файл с правилами поведения на сервере<br />
<br />
<br />
= Источник =<br />
Скопировано из доков GSC<br />
<br />
[[Категория:Справка]][[Категория:Движок]][[Категория:Сетевая игра]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8&diff=1243Параметры командной строки2024-02-11T14:36:07Z<p>RedPython: </p>
<hr />
<div>{| class="wikitable" style="color: #black; background-color: #efffef; width: 100%;"<br />
|-<br />
|style="width: 40%; background-color: #efffef;"|'''Ключ'''<br />
|style="width: 60%; background-color: #efffef;"|'''Описание'''<br />
|-<br />
| -$ <имя_консольной_команды> ||Выполнить [[Консольные команды|консольную команду]] сразу после загрузки уровня. Например, <code>demo_record 1</code><br />
|-<br />
| -batch_benchmark ||Запуск пакетного бенчмарка<br />
|-<br />
| -gpu_nopure ||Переключить GPU в режим упрощенного ускорения<br />
|-<br />
| -gpu_ref ||Отключить кеширование кадров (полезно во время просмотра демок)<br />
|-<br />
| -gpu_sw ||Переключить GPU в режим программного ускорения<br />
|-<br />
| -start server(имя_спавна[имя_уровня]/single/[alife]) [client(localhost/name=<имя_игрока>)] ||Запустить карту [при отсутствии ИИ-компонент] или начать новую игру [с симуляцией жизни].<br/><br />
Подробнее см. [[Режимы запуска движка]]<br />
|-<br />
| -load <имя_сохранения> ||Загрузить указанное сохранение<br />
|-<br />
| -ltx <имя_файла> ||Использовать указанный файл пользовательских настроек (по умолчанию используется user.ltx)<br />
|-<br />
| -fsltx <имя_файла> ||Использовать указанный конфиг файловой системы (по умолчанию используется fsgame.ltx)<br />
|-<br />
| -nes_texture_storing ||Не выгружать текстуры из памяти при загрузке нового уровня (наверное). Может ускорить загрузки последующих уровней.<br />
|-<br />
| -noprefetch ||Отключить [[Предзагрузка динамических моделей (prefetching)|предварительную загрузку динамических объектов]]<br />
|- <br />
| -nointro ||Не проигрывать стартовый ролик<br />
|- <br />
| -openautomate ||Нечто связанное с [https://www.nvidia.com/en-us/drivers/openautomate/ нвидьевским софтом]<br />
|-<br />
| -perfhud_hack ||Не проверять поддержку версии DirectX операционной системой<br />
|-<br />
| -r2 ||Запуск в режиме r2 (полное динамическое освещение)<br />
|-<br />
| -r2a ||Запуск в режиме r2a (динамическое освещение объектов)<br />
|-<br />
| -tune ||Параметр для запуска с профилировщиком Intel vTune (вызывается vTuneAPI.dll)<br />
|-<br />
| -xclsx ||Отключить принудительный вывод критических ошибок на экран красными строками (только в отладочной сборке)<br />
|-<br />
| -auto_load_arch ||Автоматически загружать даже те архивы, в заголовке которых не указана опция автозагрузки<br />
|-<br />
| -build ||[[Режим сборки билда]] игровых ресурсов (только в отладочной сборке)<br />
|-<br />
| -ebuild ||Расширенная версия ключа -build. При загрузке текстур и звуков будет копировать в $build_copy$ соответствующие им файлы из rawdata, а так же .thm для них и объектов (только в отладочной сборке)<br />
|-<br />
| -editor ||Запустить игру в [[Редактор погоды|редакторе погоды]]<br />
|-<br />
| -file_activity ||Записывать в лог все обращения к некэшированным файлам<br />
|-<br />
| -mem_debug ||<br />
|-<br />
| -no_call_stack_assert ||Отключить вывод stack trace в лог при вылете<br />
|-<br />
| -no_memory_usage ||<br />
|-<br />
| -nolog ||Отключить запись лога в файл<br />
|-<br />
| -overlaypath ||Использовать указанную директорию для сохранений/скриншотов/конфигов/шейдерного кэша ($app_data)<br />
|-<br />
| -pure_alloc ||Отключает инициализацию пулов памяти<br />
|-<br />
| -silent_error_mode ||Не использовать BugTrap. При креше просто сохранится лог, и не будет выводиться вечновисящее окно зелёного жука.<br />
|-<br />
| -swap_on_compact ||Принудительно установить размер памяти для процесса в 4Гб при каждом HeapCompact<br />
|-<br />
| -x86 ||Режим совместимости с древними x86 процессорами (отключает использование более современных по отношению к ним инструкций)<br />
|-<br />
| -debug_ge ||<br />
|-<br />
| -demomode ||Проиграть указанную демозапись (*.xrdemo) сразу после загрузки уровня<br />
|-<br />
| -designer ||<br />
|-<br />
| -i ||Не перехватывать устройства ввода сразу после запуска<br />
|-<br />
| -ignore_save_incompatibility ||Игнорировать несовместимость версий сохранений. В этом режиме не будут учитываться различия версий текущего спавна игры и спавна, учтённого в сохранении, и движок не рухнет с ошибкой.<br />
|-<br />
| -nojit ||Отключить luaJIT<br />
|- <br />
| -keep_lua ||Запретить перезапуск Lua Virtual Machine при перезагрузке уровня. По умолчанию движок перезагружает все скрипты при загрузке сохранения. С данным флагом этого не происходит.<br />
|- <br />
| -psp ||Запуск с видом от третьего лица<br />
|-<br />
| -svcfg ||<br />
|-<br />
| -mt_cdb ||Построение коллижн-модели в отдельном потоке<br />
|-<br />
| -dump_traffic ||Сохранять дамп сетевого трафика<br />
|-<br />
| -netsim ||<br />
|-<br />
| -center_screen ||Выровнять окно игры по центру экрана<br />
|-<br />
| -disasm ||Выводить дизассемблированные шейдеры в <code>$logs\disasm</code> (только в отладочной сборке)<br />
|-<br />
| -nocolormap ||<br />
|-<br />
| -nodistort ||Отключить эффекты искажения (distort)<br />
|-<br />
| -skinw ||Усиливает в модели одну из составляющих цвета, в зависимости от типа скиннинга<br />
|-<br />
| -ss_tga ||Сохранять скриншоты не только в JPG, но и в формате TGA (с высоким качеством)<br />
|-<br />
| -bug ||<br />
|-<br />
| -depth16 || Установить глубину карты теней 16 бит???<br />
|-<br />
| -gloss <значение> ||Установить значение gloss<br />
|-<br />
| -hq ||Использовать шейдеры бампа с постфиксом -hq (высококачественные)<br />
|-<br />
| -mblur ||Позволяет включить и настроить блюр<br />
|-<br />
| -no_dialog_header ||Не отображать строку состояния (в оконном режиме игра будет запускаться без рамки)<br />
|-<br />
| -no_occq ||Запретить использование occlusion query<br />
|-<br />
| -nodf24 ||Не использовать карты теней с 24-х битной глубиной<br />
|-<br />
| -nonvs ||Запуск без стенсильных теней???<br />
|-<br />
| -noshadows ||Запуск без карты теней???<br />
|-<br />
| -r4xx ||Эмуляция видеокарт ATI серий R4xxx<br />
|-<br />
| -sjitter ||<br />
|-<br />
| -smap1536 || Установить размер карты теней в 1536px<br />
|-<br />
| -smap2048 || Установить размер карты теней в 2048px<br />
|-<br />
| -smap2560 || Установить размер карты теней в 2560px<br />
|-<br />
| -smap3072 || Установить размер карты теней в 3072px<br />
|-<br />
| -smap4096 || Установить размер карты теней в 4096px<br />
|-<br />
| -sunfilter ||<br />
|-<br />
| -tsh ||<br />
|-<br />
| -no_staging || Использовать для хранения текстур только видеопамять (по умолчанию используется и ОЗУ, и память ГПУ). Работает на DX10, DX11. Полезно, если оригинальный движок валится от нехватки памяти<br />
|-<br />
| -nosound || Отключить звуковой движок<br />
|-<br />
| -slowdown || Замедление, режим slowmotion (только в отладочной сборке)<br />
|-<br />
| -slowdown2x || То же, что и -slowdown, только два раза :)<br />
|-<br />
| -noaref || ??? (только в отладочной сборке)<br />
|}<br />
<br />
[[Категория:Движок]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC%D1%8B_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BA%D0%B0&diff=1242Режимы запуска движка2024-02-11T14:35:41Z<p>RedPython: </p>
<hr />
<div>При разработке мода движок удобнее запускать из нескольких заранее подготовленных [[Пакетный файл|командных файлов]]. Ниже приведены примеры типовых режимов запуска.<br />
__NOTOC__<br />
== Стандартный режим==<br />
<syntaxhighlight lang="dos">start bin\xrEngine.exe</syntaxhighlight><br />
Движок запускается в главное меню.<br />
<br />
==Запуск уровня без симуляции==<br />
<syntaxhighlight lang="dos">start bin\xrEngine.exe -start server(escape/single)</syntaxhighlight><br />
Здесь escape – это имя карты с минимально необходимым спауном.<br />
<br />
==Запуск уровня с симуляцией==<br />
<syntaxhighlight lang="dos">start bin\xrEngine.exe -start server(escape/single/alife)</syntaxhighlight><br />
Здесь escape – это имя [[all.spawn|спаун-файла]], собранного для одиночной игры.<br />
<br />
==Запуск по сети==<br />
<syntaxhighlight lang="dos">start bin\xrEngine.exe -start localserver(имя_уровня/режим_игры) client(localhost/name=<имя_игрока>)</syntaxhighlight><br />
'''режим_игры''' может быть '''deathmatch''', '''teamdeathmatch''', '''artefacthunt'''.<br /><br />
Подробнее о настройке сервера для сетевой игры см. [[Настройка сервера S.T.A.L.K.E.R. Зов Припяти]]<br />
<br />
[[Категория:Движок]]</div>RedPythonhttps://xray-engine.org/index.php?title=Git&diff=1241Git2024-02-11T14:34:03Z<p>RedPython: </p>
<hr />
<div>==Как удалить ненужный коммит в Git==<br />
Отмена последнего коммита (файлы на локальной машине сохраняются):<br /><br />
<code>git reset HEAD~</code><br />
<br />
Удаление последнего коммита (файлы на локальной машине удаляются):<br /><br />
<code>git reset --hard HEAD~1</code><br />
<br />
Принудительно отправить изменения на сервер, где всё ещё лежит ненужный коммит:<br /><br />
<code>git push --force origin master</code><br />
<br />
<br />
[[Категория:Системы контроля версий]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_Mercurial-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_Git&diff=1240Преобразование Mercurial-репозитория в формат Git2024-02-11T14:33:40Z<p>RedPython: </p>
<hr />
<div>== Преобразование из .hg в .git с помощью расширения hggit для клиента TortoiseHG==<br />
=== Подготовка ===<br />
Предполагается, что в системе уже установлены [[TortoiseHG]] и [[Git]].<br />
<br />
Расширение hggit поставляется в комплекте с самой черепахой. Его нужно включить в настройках ('''Файл -> Настройки -> hggit''').<br />
<br />
[[Файл:hg-to-git-tutorial-hggit-01.png|center|640px]]<br />
<br />
Но это не всё. Далее нужно залезть в файл настроек (путь к нему указан на в окошке настроек черепахи) и удостовериться, что секции '''[extensions]''' и '''[git]''' существуют и выглядят так:<br />
<syntaxhighlight lang="ini">[extensions]<br />
hggit = <br />
hgext.bookmarks =<br />
<br />
[git]<br />
intree = True</syntaxhighlight><br />
Если какие-то параметры отсутствуют, то их нужно дописать.<br />
<br />
Далее нужно слить все ветки hg-репозитория в одну под стандартным именем '''default'''. Иначе преобразуется не всё.<br />
<br />
Только после этого можно приступать к собственно процессу преобразования.<br />
<br />
=== Преобразование ===<br />
Открыть консоль Git и последовательно вводить команды:<br />
# <code>hg bookmark -r default master</code> – создать закладку master на ветке default<br />
# <code>hg gexport --debug</code> – преобразует репозиторий в формат git<br />
# <code>git config --bool core.bare false</code> – некое специфичное для git преобразование "пустого" репо в "рабочий"<br />
# <code>git reset HEAD -- .</code> - некая специфичная для git манипуляция с индексом файлов, без неё репо будет неработоспособным<br />
<br />
[[Файл:hg-to-git-tutorial-hggit-02.png|center|640px]]<br />
<br />
Если что-то не получилось и вы потерялись, то всегда можно вбить команду <code>gclear</code> – она уничтожит каталог .git и все файлы в нём, не затрагивая hg-репо.<br />
<br />
=== Проверка результатов ===<br />
Полученный git-репозиторий можно открыть в одном из более-менее дружелюбных клиентов (и это НЕ TortoiseGit!), например, SmartGit или SourceTree (последний не устанавливается под Windows 7). Если всё получилось, то вы должны увидеть адекватный граф изменений. <br />
[[Файл:hg-to-git-tutorial-hggit-03.png|center|800px]]<br />
После этого нужно обязательно указать ссылку на ваш git-репозиторий, расположенный на удалённом сервере (параметр remote или что-то подобное). HTTPS-ссылка даётся в следующем формате:<br />
<code>https://имя_юзера@bitbucket.org/stalker/имя_репозитория.git</code><br />
После указания ссылки на сервер можно затягивать и проталкивать изменения.<br />
<br />
[[Категория:Системы контроля версий]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9C%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%B0%D0%BB&diff=1239Материал2024-02-10T20:35:48Z<p>RedPython: </p>
<hr />
<div>В движке X-Ray под материалом подразумевается набор свойств поверхности, а именно:<br />
* [[текстура]]<br />
* [[шейдер]], используемый в игре (файл shaders.xr)<br />
* шейдер, используемый [[xrLC|компилятором уровней]] (файл shaders_xrlc.xr)<br />
* набор флагов и констант поверхности как собственно игровой материал (файл gamemtl.xr)<br />
* набор звуков/частиц/декалей, возникающих при взаимодействии с объектами (файл gamemtl.xr)<br />
<br />
Понять, как всё это уживается вместе, очень просто, если привести в пример обычный деревянный забор (например тот, что красил Том Сойер). Благодаря текстуре мы видим, что забор сделан из дерева. Игровой шейдер, используя [[бамп]], придаёт объём и затенения плоской текстуре. Шейдер для компилятора создаёт невидимую [[Геометрия для просчёта столкновений|коллижн-геометрию]], благодаря которой через забор невозможно будет пройти насквозь. А набор звуков определяет, что будет проигрываться при контакте брошенного болта с забором - звук удара железа о деревяшку или же "да-да?" Сахарова.<br />
<br />
Задать нужный материал выбранной поверхности можно в 3д-редакторе с подключенными сталкерскими плагинами.<br /><br />
Сменить или перенастроить материал можно в [[LE]] или [[AE]].<br /><br />
Создать новый материал можно лишь в [[SE]].<br />
<br />
См. также: [[Настройки материалов]], [[Настройки материалов (Чистое небо)]]<br />
<br />
[[Категория:Глоссарий]]</div>RedPythonhttps://xray-engine.org/index.php?title=SE&diff=1238SE2024-02-10T20:34:13Z<p>RedPython: Перенаправление на Shader Editor</p>
<hr />
<div>#перенаправление [[Shader_Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F&diff=1236Деревья2024-02-10T20:22:33Z<p>RedPython: </p>
<hr />
<div>__NOTOC__<br />
== Геометрия ==<br />
[[Файл:xray-tree-geometry-01.PNG|thumb|320px|frame|Слева направо: видимая крона, видимый ствол, невидимый ствол, невидимая крона]]<br />
<br />
Любое дерево состоит из:<br />
* видимой геометрии<br />
* невидимой геометрии для просчёта коллизии<br />
<br />
Геометрия для коллижена ствола создаётся простым дублированием видимой геометрии.<br /><br />
Геометрия для коллижена кроны создаётся в виде максимально упрощённого меша, предназначение которого – отыгрывать звуки и партиклы при контакте с физическим объектом.<br />
<br />
Ствол дерева в 3д-редакторе [https://xray-engine.org/index.php?title=File:xray-tree-geometry-02.PNG утапливается ниже мирового центра], чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.<br />
<br />
Кустарник и камыш отличаются от дерева только отсутствием объекта ствола, в остальном всё то же самое.<br />
<br />
== Настройки материалов ==<br />
Для каждой части дерева - ствола, листьев, и невидимых частей - существуют особые настройки [[Материал|материалов]] со специальными шейдерами, которые реализуют реалистичное покачивание деревьев от несуществующего ветра.<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|flora/trunk_wave<br />
|flora/trunk_wave<br />
|materials/tree_trunk<br />
|Ствол (кора)<br />
|-<br />
|flora/leaf_wave<br />
|flora/leaf<br />
|materials/bush<br />
|Крона (ветки с листьями)<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/tree_trunk<br />
|Невидимый дубликат ствола<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/bush<br />
|Упрощённый меш кроны<br />
|}<br />
Видимая крона должна иметь флаг двусторонней поверхности (2-sided). Невидимой кроне тоже можно добавить такой флаг, но это, как правило, излишне.<br />
<br />
== Улучшенные возможности ==<br />
Для ускорения создания и чистки [[Сетка навигации ИИ (AI Map) | ИИ-сетки]] в проекте [[Б.О.Р.Ж.Ч.]] была реализована гениальная идея: создавать вокруг ствола дерева обечайку, в которую бы утыкались ноды в процессе генерации. Это нужно для того, чтобы вокруг ствола сохранялась буферная зона без ИИ-нод. Обечайка обладает специальным шейдером, который указывает [[xrLC | компилятору]] игнорировать данную поверхность. В результате такая геометрия работает в редакторе уровней, но не попадает в игру.<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|def_shaders/def_trans<br />
|special/ai_obstacle<br />
|default<br />
|Обечайка вокруг ствола<br />
|}<br />
Размер обечайки выбирается таким, чтобы она перекрывала диаметр ствола плюс по одной ноде с каждой стороны, а по высоте была больше параметра '''Can Up''' в настройках кисти генератора ИИ-сетки.<br />
Для работы опции требуется [https://forum.xray-engine.org/index.php/topic,252 борщовский СДК и компиляторы].<br />
<br />
== Настройки объекта ==<br />
Объекту дерева нужно задать специальный [[Типы геометрии в X-Ray| тип геометрии]] для инстансирования, так называемый '''Multiple Usage'''. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов [[Level Editor | редактора уровней]]. Для этого в меню '''Objects -> Object Library''' выбрать нужный объект, нажать кнопочку '''Properties''' и на вкладочке '''Main Options''' задать '''Object Type''' как '''Multiple Usage'''.<br /><br />
Если забыть это сделать, то при сборке уровня LE выдаст ошибку о невозможности применять шейдеры флоры на обычном статичном объекте.<br />
<syntaxhighlight lang="text">Object 'mu\flora\trees\tree_sosna_1_01': engine shader 'flora\trunk_wave' not compatible with static objects<br />
surface: 'trees_bark_sosna_01_SG'</syntaxhighlight><br />
Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку '''Preview Object''' и нажать кнопку '''Make LOD'''. Создастся текстура '''''gamedata\textures\lod\имя_текстуры_объекта.dds'''''. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл '''''X:\gamedata\levels\имя_уровня\level_lods.dds'''''<br />
<br />
== Расстановка деревьев ==<br />
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]).<br />
<br />
[[Категория:X-Ray SDK]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F&diff=1235Деревья2024-02-10T20:06:37Z<p>RedPython: </p>
<hr />
<div>__NOTOC__<br />
== Геометрия ==<br />
[[Файл:xray-tree-geometry-01.PNG|thumb|320px|frame|Слева направо: видимая крона, видимый ствол, невидимый ствол, невидимая крона]]<br />
<br />
Любое дерево состоит из:<br />
* видимой геометрии<br />
* невидимой геометрии для просчёта коллизии<br />
<br />
Геометрия для коллижена ствола создаётся простым дублированием видимой геометрии.<br /><br />
Геометрия для коллижена кроны создаётся в виде максимально упрощённого меша, предназначение которого – отыгрывать звуки и партиклы при контакте с физическим объектом.<br />
<br />
Ствол дерева в 3д-редакторе [https://xray-engine.org/index.php?title=File:xray-tree-geometry-02.PNG утапливается ниже мирового центра], чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.<br />
<br />
Кустарник и камыш отличаются от дерева только отсутствием объекта ствола, в остальном всё то же самое.<br />
<br />
== Настройки материалов ==<br />
Для каждой части дерева - ствола, листьев, и невидимых частей - существуют особые настройки [[Материал|материалов]] со специальными шейдерами, которые реализуют реалистичное покачивание деревьев от несуществующего ветра.<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|flora/trunk_wave<br />
|flora/trunk_wave<br />
|materials/tree_trunk<br />
|Ствол (кора)<br />
|-<br />
|flora/leaf_wave<br />
|flora/leaf<br />
|materials/bush<br />
|Крона (ветки с листьями)<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/tree_trunk<br />
|Невидимый дубликат ствола<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/bush<br />
|Упрощённый меш кроны<br />
|}<br />
Видимая крона должна иметь флаг двусторонней поверхности (2-sided). Невидимой кроне тоже можно добавить такой флаг, но это, как правило, излишне.<br />
<br />
== Улучшенные возможности ==<br />
Для ускорения создания и чистки [[Сетка навигации ИИ (AI Map) | ИИ-сетки]] в проекте [[Б.О.Р.Ж.Ч.]] была реализована гениальная идея: создавать вокруг ствола дерева обечайку, в которую бы утыкались ноды в процессе генерации. Это нужно для того, чтобы вокруг ствола сохранялась буферная зона без ИИ-нод. Обечайка обладает специальным шейдером, который указывает [[xrLC | компилятору]] игнорировать данную поверхность. В результате такая геометрия работает в редакторе уровней, но не попадает в игру.<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|def_shaders/def_trans<br />
|special/ai_obstacle<br />
|default<br />
|Обечайка вокруг ствола<br />
|}<br />
Размер обечайки выбирается таким, чтобы она перекрывала диаметр ствола плюс по одной ноде с каждой стороны, а по высоте была больше параметра '''Can Up''' в настройках кисти генератора ИИ-сетки.<br />
Для работы опции требуется [https://forum.xray-engine.org/index.php/topic,252 борщовский СДК и компиляторы].<br />
<br />
== Настройки объекта ==<br />
Объекту дерева нужно задать специальный [[Типы геометрии в X-Ray| тип геометрии]] для инстансирования, так называемый '''Multiple Usage'''. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов [[Level Editor | редактора уровней]]. Для этого в меню '''Objects -> Object Library''' выбрать нужный объект, нажать кнопочку '''Properties''' и на вкладочке '''Main Options''' задать '''Object Type''' как '''Multiple Usage'''.<br /><br />
Если забыть это сделать, то при сборке уровня LE выдаст ошибку о невозможности применять шейдеры флоры на обычном статичном объекте.<br />
<syntaxhighlight lang="text">Object 'mu\flora\trees\tree_sosna_1_01': engine shader 'flora\trunk_wave' not compatible with static objects<br />
surface: 'trees_bark_sosna_01_SG'</syntaxhighlight><br />
Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку '''Preview Object''' и нажать кнопку '''Make LOD'''. Создастся текстура '''''gamedata\textures\lod\texture_name.dds'''''. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл ''''''X:\gamedata\levels\darkvalley<br />
''<br />
== Расстановка деревьев ==<br />
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]).<br />
<br />
[[Категория:X-Ray SDK]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82_%D1%81%D1%86%D0%B5%D0%BD%D1%8B_%D0%B2_.obj&diff=1234Экспорт сцены в .obj2024-02-10T18:59:13Z<p>RedPython: </p>
<hr />
<div>Иногда возникает необходимость вставить в 3d-редактор группу объектов из LevelEditor'а как референс или полноценный объект. Как правило, это случаи создания анимационных сцен среди реквизита, добавленного в редакторе уровней. На этот случай предусмотрена опция экспорта в формат Wavefront object (.obj):<br />
*'''Scene -> Export entire scene as Obj''' (экспортировать всю сцену как .obj)<br />
*'''Scene -> Export selection as Obj''' (экспортировать только выделенное)<br />
<br />
[[Файл:le-obj-exports.jpg|480px]]<br />
<br />
Экспортируются как mesh'и, так и материалы.<br />
<br />
[[Файл:le-obj-export-maya-shaded.jpg|480px]] [[Файл:le-obj-export-maya-textured.jpg|480px]]<br />
<br />
Известная проблема - в оригинальном LE не сохраняется информация о группах сглаживания и инвертируются нормали на некоторых объектах ([https://bitbucket.org/stalker/xray-borscht/commits/8e084e5 исправлено] в борщовском LE).<br />
<br />
[[Категория:Level Editor]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D1%8C%D1%8F&diff=1233Деревья2024-02-10T18:33:28Z<p>RedPython: Новая страница: «__NOTOC__ == Геометрия == Файл:xray-tree-geometry-01.PNG|thumb|320px|frame|Слева направо: видимая крона, видимый с…»</p>
<hr />
<div>__NOTOC__<br />
== Геометрия ==<br />
[[Файл:xray-tree-geometry-01.PNG|thumb|320px|frame|Слева направо: видимая крона, видимый ствол, невидимый ствол, невидимая крона]]<br />
<br />
Любое дерево состоит из:<br />
* видимой геометрии<br />
* невидимой геометрии для просчёта коллизии<br />
<br />
Геометрия для коллижена ствола создаётся простым дублированием видимой геометрии.<br /><br />
Геометрия для коллижена кроны создаётся в виде максимально упрощённого меша, предназначение которого – отыгрывать звуки и партиклы при контакте с физическим объектом.<br />
<br />
Ствол дерева в 3д-редакторе [https://xray-engine.org/index.php?title=File:xray-tree-geometry-02.PNG утапливается ниже мирового центра], чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.<br />
<br />
== Настройки материалов ==<br />
Для каждой части дерева - ствола, листьев, и невидимых частей - существуют особые настройки [[Материал|материалов]].<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|flora/trunk_wave<br />
|flora/trunk_wave<br />
|materials/tree_trunk<br />
|Ствол (кора)<br />
|-<br />
|flora/leaf_wave<br />
|flora/leaf<br />
|materials/bush<br />
|Крона (ветки с листьями)<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/tree_trunk<br />
|Невидимый дубликат ствола<br />
|-<br />
|def_shaders/def_trans<br />
|flora/flora_collision<br />
|materials/bush<br />
|Упрощённый меш кроны<br />
|}<br />
Видимая крона должна иметь флаг двусторонней поверхности (2-sided). Невидимой кроне тоже можно добавить такой флаг, но это, как правило, излишне.<br />
<br />
== Улучшенные возможности ==<br />
Для ускорения создания и чистки [[Сетка навигации ИИ (AI Map) | ИИ-сетки]] в проекте [[Б.О.Р.Ж.Ч.]] была реализована гениальная идея: создавать вокруг ствола дерева обечайку, в которую бы утыкались ноды в процессе генерации. Это нужно для того, чтобы вокруг ствола сохранялась буферная зона без ИИ-нод. Обечайка обладает специальным шейдером, который указывает [[xrLC | компилятору]] игнорировать данную поверхность. В результате такая геометрия работает в редакторе уровней, но не попадает в игру.<br />
{| class="wikitable" style="color: black; background-color: white; width: 60%;"<br />
|-<br />
|style="background-color: #cdcdcd;"|'''Engine Shader'''<br />
|style="background-color: #cdcdcd;"|'''Compiler Shader'''<br />
|style="background-color: #cdcdcd;"|'''Game Material'''<br />
|style="background-color: #cdcdcd;"|'''Описание'''<br />
|-<br />
|def_shaders/def_trans<br />
|special/ai_obstacle<br />
|default<br />
|Обечайка вокруг ствола<br />
|}<br />
Размер обечайки выбирается таким, чтобы она перекрывала диаметр ствола плюс по одной ноде с каждой стороны, а по высоте была больше параметра '''Can Up''' в настройках кисти генератора ИИ-сетки.<br />
Для работы опции требуется [https://forum.xray-engine.org/index.php/topic,252 борщовский СДК и компиляторы].<br />
<br />
== Настройки объекта ==<br />
Объекту дерева нужно задать специальный [[Типы геометрии в X-Ray| тип геометрии]] для инстансирования, так называемый '''Multiple Usage'''. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов [[Level Editor | редактора уровней]]. Для этого в меню '''Objects -> Object Library''' выбрать нужный объект, нажать кнопочку '''Properties''' и на вкладочке '''Main Options''' задать '''Object Type''' как '''Multiple Usage'''.<br />
<br />
== Расстановка деревьев ==<br />
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]).<br />
<br />
[[Категория:X-Ray SDK]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:xray-tree-geometry-02.PNG&diff=1232Файл:xray-tree-geometry-02.PNG2024-02-10T18:14:08Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:xray-tree-geometry-01.PNG&diff=1231Файл:xray-tree-geometry-01.PNG2024-02-10T18:00:41Z<p>RedPython: </p>
<hr />
<div></div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A3%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5_(smart_cover)&diff=1230Укрытие (smart cover)2024-02-09T15:56:01Z<p>RedPython: </p>
<hr />
<div>Смарткавер — это спаун-объект, который управляет анимациями NPC. Используется для создания сценок со сложной анимацией.<br />
<br />
Тип смарткавера (анимации которые может использовать NPC в смарткавере), зависят от параметра description (выбирается в Level editor).<br />
<br />
Боевые смарткаверы управляют боевыми анимациями, их могут использовать NPC в универсальной боевой схеме. Также боевые смарткаверы могут использоваться для построения скриптовых сцен. Набор анимаций, используемый NPC в смарткавере, зависит от выбранной бойницы (loophole). NPC может вести огонь из смарткавера, только если противник находится внутри радиуса действия лупхолы. Названия лупхол для боевых смарткаверов смотреть в файле [https://files.xray-engine.org/stk_sdk/help/Combat%20loopholes.xls Combat loopholes.xls]<br />
<br />
Анимационные смарткаверы настраиваются аналогично боевым, но используют специальные анимации, и применяются только для скриптовых сцен. Названия лупхол для анимационных смарткаверов смотреть в файле [https://files.xray-engine.org/stk_sdk/help/Lead%20loopholes.xls Lead loopholes.xls]<br />
<br />
<syntaxhighlight lang="ini">[smartcover]<br />
cover_name = cover_1 ; имя смарткавера, обязательный параметр<br />
loophole_name = lh1 ; имя лупхолы, какие лупхолы доступны, зависит от типа смарткавера (в боевых смарткаверах, имя лупхолы )<br />
cover_state = <значение> ; состояние NPC в смарткавере:<br />
fire_target ; стреляет по цели<br />
fire_no_lookout_target ; стреляет по цели вслепую, не высовываясь<br />
idle_target ; спрятался<br />
lookout_target ; выглядывает<br />
default_behaviour ; прячется, выглядывает, если есть цель - атакует<br />
use_in_combat = true ; использование смарткавера в бою. Если не поставить этот параметр, то NPC будут срываться в универсальную боевую схему<br />
target_enemy = ; куда стрелять: в actor или в story_id<br />
target_path = <имя_пути> ; будет стрелять в первую точку указанного пути<br />
idle_min_time = <n> ; настройка таймингов между анимациями (по умолчанию 6)<br />
idle_max_time = <n> ; настройка таймингов между анимациями (по умолчанию 10)<br />
lookout_min_time = <n> ; настройка таймингов между анимациями (по умолчанию 6)<br />
lookout_max_time = <n> ; настройка таймингов между анимациями (по умолчанию 10)<br />
exit_body_state = <имя> ; ???<br />
use_precalc_cover = true/false ; ???<br />
def_state_moving = <имя> ; ???<br />
sound_idle = <имя> ; ???<br />
</syntaxhighlight><br />
<br />
{| style="background-color: #fffdee;" width="100%"<br />
|<span style="color:#172172;">'''Внимание!'''</span><br />
----<br />
Перед тем, как прописать в смарткавере лупхолу, нужно убедиться, что лупхола с таким названием есть в этом смарткавере (см. в файлах [https://files.xray-engine.org/stk_sdk/help/Combat%20loopholes.xls Combat loopholes.xls], [https://files.xray-engine.org/stk_sdk/help/Lead%20loopholes.xls Lead loopholes.xls]).<br />
|}<br />
<br />
Смарткаверы используют стандартные сигналы:<br />
* '''enemy_in_fov''' – противник находится в лупхоле<br />
* '''enemy_not_in_fov''' – противник не находится в лупхоле<br />
<br />
[[Категория:A-Life]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A3%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5_(smart_cover)&diff=1229Укрытие (smart cover)2024-02-09T15:52:34Z<p>RedPython: </p>
<hr />
<div>Смарткавер — это спаун-объект, который управляет анимациями NPC. Используется для создания сценок со сложной анимацией.<br />
<br />
Тип смарткавера (анимации которые может использовать NPC в смарткавере), зависят от параметра description (выбирается в Level editor).<br />
<br />
Боевые смарткаверы управляют боевыми анимациями, их могут использовать NPC в универсальной боевой схеме. Также боевые смарткаверы могут использоваться для построения скриптовых сцен. Набор анимаций, используемый NPC в смарткавере, зависит от выбранной бойницы (loophole). NPC может вести огонь из смарткавера, только если противник находится внутри радиуса действия лупхолы. Названия лупхол для боевых смарткаверов смотреть в файле [https://files.xray-engine.org/stk_sdk/help/Combat%20loopholes.xls Battle loopholes.xls]<br />
<br />
Анимационные смарткаверы настраиваются аналогично боевым, но используют специальные анимации, и применяются только для скриптовых сцен. Названия лупхол для анимационных смарткаверов смотреть в файле [https://files.xray-engine.org/stk_sdk/help/Lead%20loopholes.xls Lead loopholes.xls]<br />
<br />
<syntaxhighlight lang="ini">[smartcover]<br />
cover_name = cover_1 ; имя смарткавера, обязательный параметр<br />
loophole_name = lh1 ; имя лупхолы, какие лупхолы доступны, зависит от типа смарткавера (в боевых смарткаверах, имя лупхолы )<br />
cover_state = <значение> ; состояние NPC в смарткавере:<br />
fire_target ; стреляет по цели<br />
fire_no_lookout_target ; стреляет по цели вслепую, не высовываясь<br />
idle_target ; спрятался<br />
lookout_target ; выглядывает<br />
default_behaviour ; прячется, выглядывает, если есть цель - атакует<br />
use_in_combat = true ; использование смарткавера в бою. Если не поставить этот параметр, то NPC будут срываться в универсальную боевую схему<br />
target_enemy = ; куда стрелять: в actor или в story_id<br />
target_path = <имя_пути> ; будет стрелять в первую точку указанного пути<br />
idle_min_time = <n> ; настройка таймингов между анимациями (по умолчанию 6)<br />
idle_max_time = <n> ; настройка таймингов между анимациями (по умолчанию 10)<br />
lookout_min_time = <n> ; настройка таймингов между анимациями (по умолчанию 6)<br />
lookout_max_time = <n> ; настройка таймингов между анимациями (по умолчанию 10)<br />
exit_body_state = <имя> ; ???<br />
use_precalc_cover = trus/false ; ???<br />
def_state_moving = <имя> ; ???<br />
sound_idle = <имя> ; ???<br />
</syntaxhighlight><br />
<br />
{| style="background-color: #fffdee;" width="100%"<br />
|<span style="color:#172172;">'''Внимание!'''</span><br />
----<br />
Перед тем, как прописать в смарткавере лупхолу, нужно убедиться, что лупхола с таким названием есть в этом смарткавере (см. в файлах [https://files.xray-engine.org/stk_sdk/help/Combat%20loopholes.xls Battle loopholes.xls], [https://files.xray-engine.org/stk_sdk/help/Lead%20loopholes.xls Lead loopholes.xls]).<br />
|}<br />
<br />
Смарткаверы используют стандартные сигналы:<br />
* '''enemy_in_fov''' – противник находится в лупхоле<br />
* '''enemy_not_in_fov''' – противник не находится в лупхоле<br />
<br />
[[Категория:A-Life]]</div>RedPythonhttps://xray-engine.org/index.php?title=S.T.A.L.K.E.R._db_unpacker_(%D0%B0%D1%80%D1%85%D0%B8%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD_%D0%B4%D0%BB%D1%8F_Total_Commander)&diff=1228S.T.A.L.K.E.R. db unpacker (архиваторный плагин для Total Commander)2024-02-09T15:50:19Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''S.T.A.L.K.E.R. db unpacker'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Архиваторный плагин для Total Commander<br />
|-<br />
| '''Автор''' || malandrinus<br />
|-<br />
| '''Последняя версия''' || [https://files.xray-engine.org/malandrinus/wcx_stalker_db_003_x32_x64.zip 0.0.3 (15.04.2016)]<br />
|-<br />
| '''Платформа''' || x32, x64<br />
|}<br />
</div><br />
<br />
Архиваторный плагин позволяет просматривать и распаковывать игровые архивы формата серии С.Т.А.Л.К.Е.Р.<br />
<br />
== Установка и настройка ==<br />
* Запустите Total Commander и откройте архив — вам будет предложено установить плагин. Следуйте инструкциям программы.<br />
* По завершении установки желательно вручную задать ассоциации расширениям типа .dbX с плагином. Откройте меню настройки: ''Конфигурация -> Настройки -> Плагины -> Архиваторные плагины (.WCX)'' и задайте соответствия для расширений '''.db0 — .db9''', '''.dba — .dbc'''.<br />
[[Файл:stalker-wcx-totalcmd-setup.png|800px]]<br />
<br />
Иначе можно входить в архивы сочетанием клавиш '''Ctrl+PgPn'''.<br />
<br />
=== Примечание ===<br />
Версия архива определяется автоматически по содержимому. Плагин должен поддерживать <br />
как русскую, так и английскую версию архивов от ТЧ, однако поддержка английской версии <br />
не протестирована.<br />
<br />
{{#related:S.T.A.L.K.E.R. db explorer (плагин файловой системы для Total Commander)}}<br />
<br />
[[Категория: Инструментарий]][[Категория:Архиваторы]]</div>RedPythonhttps://xray-engine.org/index.php?title=S.T.A.L.K.E.R._db_explorer_(%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%B4%D0%BB%D1%8F_Total_Commander)&diff=1227S.T.A.L.K.E.R. db explorer (плагин файловой системы для Total Commander)2024-02-09T15:50:05Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''S.T.A.L.K.E.R. db explorer'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Плагин файловой системы для Total Commander<br />
|-<br />
| '''Автор''' || malandrinus<br />
|-<br />
| '''Последняя версия''' || [https://files.xray-engine.org/malandrinus/wfx_stalker_db_004_x32_x64.zip 0.0.4 (15.04.2016)]<br />
|-<br />
| '''Платформа''' || x32, x64<br />
|}<br />
</div><br />
<br />
Архиваторный плагин позволяет работать с игровыми архивами серии С.Т.А.Л.К.Е.Р. как с внешними дисками.<br />
<br />
== Установка и настройка ==<br />
Запустите Total Commander и откройте в нём архив — вам будет предложено установить плагин. Следуйте инструкциям программы.<br />
<br />
По умолчанию плагин сам ищет установленные игры, используя значения из реестра, но может работать и с незарегистрированными играми — при этом используется создаваемый пользователем в каталоге ''$TOTALCMD\pluguns\wfx\stalker\'' файл '''stalker.ini''' следующей структуры:<br />
<syntaxhighlight lang="ini">[main]<br />
use_registry = 1<br />
<br />
[installations]<br />
SHOC1 = 3312ru|D:\Games\S.T.A.L.K.E.R\<br />
CS1 = 3795|D:\Games\С.Т.А.Л.К.Е.Р. - Чистое Небо\<br />
COP1 = 3967|D:\Games\С.Т.А.Л.К.Е.Р. - Зов Припяти\</syntaxhighlight><br />
<br />
Замечания по структуре файла:<br />
* Комментарии недопустимы.<br />
* Параметр '''use_registry''' принимает значение '''0''' или '''1''' и указывает, что плагин будет искать установленные игры в реестре в дополнение к пользовательским установкам. Значение по умолчанию 1.<br />
* Каждая строка из секции '''installations''' имеет формат<br />
<code><имя корневого узла> = <версия игры>|<каталог установки игры></code><br />
* <code><имя корневого узла></code><br />Имя корневого каталога в виртуальной файловой системе для конкретной пользовательской установки. Избегайте использовать имена "SHOC", "CS" и "COP" — они зарезервированы для штатно установленных игр.<br />
*<code><версия игры></code><br />Имя релиза. Возможные варианты:<br />
** <code>3312, 3312ru</code> — любая русская версия "Тени Чернобыля"<br />
** <code>3312en, 3312ww, 3312us</code> — любая НЕ русская версия "Тени Чернобыля"<br />
** <code>3795</code> — "Чистое Небо"<br />
** <code>3967</code> — "Зов Припяти"<br />
* <code><каталог установки игры></code><br />Полный путь к каталогу установки игры. Может включать пробелы.<br />
* Пробелы или символы табуляции до и после символа "|" недопустимы.<br />
<br />
{{#related:S.T.A.L.K.E.R. db unpacker (архиваторный плагин для Total Commander)}}<br />
<br />
[[Категория: Инструментарий]][[Категория:Архиваторы]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B8_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BD%D0%B5%D0%B9&diff=1226Карта и работа с ней2024-02-09T15:47:22Z<p>RedPython: </p>
<hr />
<div>Карта в игре бывает двух видов: маленькая (MiniMap, отображается на игровом радаре) и большая (LevelMap, в ПДА)<br />
<br />
В конфиге карта описывается двумя параметрами:<br />
* bound_rect — координаты '''левого верхнего''' и '''правого нижнего''' углов прямоугольника '''карты уровня'''<br />
* global_rect — координаты '''левого верхнего''' и '''правого нижнего''' углов карты уровня '''на глобальной карте Зоны'''<br />
<br />
<br />
== Настройка карты уровня ==<br />
В Тени Чернобыля координаты '''bound_rect''' пишутся в имя скриншота в следующем формате:<br /><br />
<code>ss_user_date_time_#levelname_[a, -a1]-[b, b1] </code><br />
<br />
Где:<br />
*'''a''' и '''a1''' — координаты левого верхнего угла (в метрах)<br />
*'''b''' и '''b1''' — координаты правого нижнего угла (в метрах)<br />
Чтобы получить снимок уровня с координатами, нужно запустить игру на статичном освещении, в консоли включить режим записи демки <code>demo_record 1</code> и нажать '''F11'''. В папке $appdata$/screenshots образуется скрин с искомыми координатами. Его можно сразу [[Импорт текстур|экспортировать]] в ''gamedata/textures/maps'' под именем '''map_имя_уровня''', не забыв сохранить исходный .tga для художественной обработки в фотошопе.<br />
<br />
В LevelEditor'е предусмотрен специальный недоредактор миникарты: Images -> Edit minimap<br /><br />
В него можно подгрузить скриншот с именем вышеупомянутого формата и обвести рамочкой нужную область картинки, а затем скопировать значение '''bound_rect''' из поля внизу:<br />
[[Файл:tminimap-editor-01.png|480px|center]]<br />
<br />
А в Чистом небе и Зове Припяти значение '''bound_rect''' автоматически пишется при построении при построении уровня в LE (Compile -> Build) в файл '''gamedata/levels/имя_уровня/level.ltx''' в секцию '''[level_map]''' и не требует дальнейшего редактирования.<br />
<br />
== Настройка глобальной карты ==<br />
<br />
Положение карты уровня на глобальной карте определяет параметр '''global_rect'''. Его можно просто и удобно настроить в программулине Map dragger от камрада XiaNi ([https://map.xray-engine.org/ онлайновая версия] или [https://files.xray-engine.org/xiani/map_dragger_rel.7z архив]).<br />
<br />
<br />
[[Категория:Справка]][[Категория:Текстуры]]</div>RedPythonhttps://xray-engine.org/index.php?title=S.T.A.L.K.E.R._Icon_Editor_(SIE)&diff=1225S.T.A.L.K.E.R. Icon Editor (SIE)2024-02-09T15:46:14Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''S.T.A.L.K.E.R. Icon Editor'''</big><br />
----<br />
[[Файл:sie-0.6.3-ui.png|center|200px]]<br />
{| style="border: none"<br />
| '''Тип''' || Редактор иконок<br />
|-<br />
| '''Автор''' || malandrinus<br />
|- <br />
| '''Последняя версия''' || [https://files.xray-engine.org/malandrinus/S.T.A.L.K.E.R._Icon_Editor_v.0.6.3.7z 0.6.3 (16.11.2009)]<br />
|-<br />
| '''Написан на''' || Visual C++<br />
|-<br />
| '''Обратная связь''' || [https://www.amk-team.ru/forum/index.php?showtopic=1506 AMK форум]<br />
|}<br />
</div><br />
<br />
SIE — это простой и удобный редактор иконок, хранящихся в DDS-формате.<br />
<br />
Иконки инвентаря в игре хранятся в файле '''\gamedata\textures\ui\ui_icon_equipment.dds''' — это файл однослойной текстуры, упакованной методом DXT5 (по сути, обычный растровый файл). Иконки в нём выровнены по квадратам 50х50. В файлах ltx в описании каждого предмета (который может показаться в инвентаре) имеются такие строки:<br />
<syntaxhighlight lang="ini">inv_grid_width = 3 ; это ширина иконки<br />
inv_grid_height = 1 ; и высота "в квадратах"<br />
inv_grid_x = 5 ; это координаты иконки,<br />
inv_grid_y = 11 ; измеренные опять же "в квадратах"</syntaxhighlight><br />
<br />
Для редактирования этого и подобных файлов и предназначена программа.<br />
<br />
{| style="background-color: #fffdee;" width="100%"<br />
|<span style="color:#172172;">'''Важно!'''</span><br />
----<br />
Для работы программы может потребоваться отдельная установка [http://files.xray-engine.org/redist/Microsoft%20Visual%20C++%202005-2008-2010-2012-2013%20%5b32-64%5d%20(26-02-2015).exe RunTime библиотек (a.k.a Microsoft Visual C++ Redistributable)]<br />
|}<br />
<br />
== Основные возможности ==<br />
* Открывает файлы DDS — пакованные DXT1/3/5 и непакованные ABGR и ARGB, а также файлы PNG. Ограничения на свойства поддерживаемых текстур:<br />
** поддерживаются только однослойные текстуры, т.е. текстуры с числом mipmap уровней равным одному. Это вполне естественное ограничение, поскольку текстуры для худов, а также все текстуры для оформления интерфейса, включая файлы с иконками всех видов и элементами окошек не требуют дополнительных mipmap-уровней, поскольку отображаются в любом случае в полный размер, и дополнительные слои только будут занимать память. Что такое эти уровни и в каком случае нужны читайте [http://wiki.polycount.com/MipMap здесь]. Поскольку, однако, реально встречались файлы иконок с активированными mipmap уровнями, то имеется возможность открыть такой файл. Редактироваться и сохраняться будет при этом только основной (нулевой) слой. При этом будет дважды (при открытии и при сохранении) выдано соответствующее предупреждение.<br />
** Поддерживаются только полноцветные текстуры (по 8 бит на каждый цвет и канал прозрачности). Иные открыть будет невозможно.<br />
* Программа пытается по возможности сохранить качество пакованных текстур. Для этого при сохранении сохраняются только изменённые блоки. При увеличении/уменьшении текстуры статус нетронутых блоков сохраняется. При экспорте (в том числе и в том же формате) всё всегда сохраняется с полной перепаковкой.<br />
* "Знает" несколько стандартных файлов с иконками и умеет открывать их из каталога установки игры (ТЧ и ЧН).<br />
* Есть режим просмотра канала прозрачности.<br />
* Показывает сетку. Есть предопределённый набор размеров: 1х1, 30х27, 32х32, 50х50, 83х47, 165х108. Можно установить свои шаги. Выделение привязано к сетке. В режиме 1х1 сетка не показывается, а выделение осуществляется попиксельно, т.е. фактически свободно. Видимость сетки и её внешний вид можно регулировать.<br />
* Позволяет выделить отдельную иконку (точнее, произвольную область из квадратов). Далее можно узнать её (области) координаты. Можно сразу получить сформированный текст с уже подставленными значениями.<br />
* Выделение можно скопировать и вставить в другое место в текущем файле или в другом. Таким образом можно копировать иконки из разных источников в свой файл или переставлять их местами.<br />
* Разные операции по редактированию: копирование фрагментов (иконок) в пределах одного и между разными файлами, очистка области. Полезно для интеграции разных модов. Разные дополнительные режимы вставки (зеркалирование, поворот на 90, -90, 180 градусов, копирование с использованием прозрачности).<br />
* Команды "Отменить"/"Вернуть" вплоть до последнего сохранения.<br />
* Есть операции расширения/уменьшения текстуры в два раза по горизонтали или вертикали.<br />
* Есть экспорт текстуры во все из поддерживаемых форматов (DDS или PNG).<br />
* Умеет рассчитывать координаты аддонов к оружию. '''Калькулятор аддонов''' вызывается из меню "Правка".<br />
* Цвета фона, сетки и выделения можно изменить из диалога с настройками. Меню "Вид" -> "Настройки".<br />
* Разные настройки внешнего вида и прочее. Всё сохраняется в файле настроек.<br />
* Новая экспериментальная фишка: парсинг всех файлов конфигурации на предмет поиска инвентарных предметов и отображение сетки, соответствующей иконкам этих предметов. При движении мыши подсвечивается, иконки из каких секции находятся под курсором. Сетку можно скрыть.<br />
* При вставке масштабировать фрагмент произвольным образом:<br />
** выбираете способ копирования "Масштабировать". Войдя в режим вставки, можно управлять масштабом или требуемыми размерами с помощью панели инструментов, которая находится рядом. Фишка сделана на скорую руку, поэтому есть некоторые недочёты:<br />
**# Для фиксации введённого значения надо нажать Enter.<br />
**# Пока не нажали <Enter>, не уводите курсор за пределы поля ввода, иначе значение собьётся на значение по умолчанию.<br />
**# Для собственно масштабирования надо нажать кнопку с буквой '''U''' (Update) на той же панели.<br />
Есть некритичный баг. После использования масштабирования уже имеющаяся в буфере картинка будет вставляться с неправильным масштабом. Так что надо обязательно скопировать фрагмент заново. <br />
<br />
[[Категория:Текстуры]]</div>RedPythonhttps://xray-engine.org/index.php?title=S.T.A.L.K.E.R._Object_Editor&diff=1224S.T.A.L.K.E.R. Object Editor2024-02-09T15:42:17Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''S.T.A.L.K.E.R. Object Editor'''</big><br />
----<br />
[[Файл:STLKObjectMan-v2.0.1-ui.png|center|200px]]<br />
{| style="border: none"<br />
| '''Тип''' || Редактор конфигов<br />
|-<br />
| '''Автор''' || [https://www.amk-team.ru/forum/index.php?showuser=2874 frags]<br />
|-<br />
| '''Последняя версия''' || [https://files.xray-engine.org/frags/STLKObjectMan_v3.0.0.rar 3.0.0 (27 декабря 2014)]<br />
|-<br />
| '''Обратная связь''' || [https://www.amk-team.ru/forum/index.php?showtopic=1481&page=9#entry712051 AMK форум]<br />
|}<br />
</div><br />
<br />
Программа позволяет просматривать и редактировать все (ну или почти все) параметры игровых объектов (оружие, патроны, артефакты, монстры, ГГ и т.п.) находящиеся в папке ''gamedata\config(s)\''.<br /><br />
Для полноценного функционирования нужна полностью распакованная папка ''gamedata\config(s)\'' и файл '''gamedata\textures\ui\ui_icon_equipment.dds''' (наличие этого файла позволит просматривать и редактировать иконки инвентаря).<br />
<br />
== Особенности программы ==<br />
# Построение дерева связей родитель-потомок для наследованных объектов и связанных объектов (оружие-патроны).<br />
# Отдельное редактирование секций параметров для каждого объекта.<br />
# Графическое выделение и назначение иконок инвентаря (два клика на требуемую картинку в общей карте иконок и перетаскивание выделенного на требуемый объект или из меню по правому клику мышки на выделенном изображении).<br />
# Сортировка объектов по их характеристикам (убойность, защита и т.п.)<br />
# Опции фильтрация для показа только наиболее важных параметров объектов.<br />
# Чтение и редактирование комментариев для параметров из ltx-файлов.<br />
# И многое другое — см. историю версий.<br />
<br />
Многие функции доступны по клику правой кнопкой мышки.<br /><br />
При сохранении изменений программа меняет только строку с отредактированным параметром и не трогает остальной текст в файле.<br /><br />
Программа не требует каких-либо сторонних компонентов для работы.<br />
<br />
== История версий ==<br />
<br />
=== Версия 3.0.0 ===<br />
[[Файл:STLKObjectMan-v3.0.0-ui.png|right|480px]]<br />
* Добавлен редактор диалогов. Ниже приведена краткая инструкция к редактору диалогов.<br />
* Добавлено разделение папок с "gamedata" на Рабочую и Оригинал. Теперь программа будет запрашивать две папки при открытии "gamedata" (меню Файл|Открыть):<br />
** Оригинал — папка, в которой содержатся исходные распакованные файлы gamedata. <br />
** Рабочая папка (выбирается первой) — сюда будут сохранятся все изменения при редактировании методом копирование-на-запись из папки Оригинал(copy-on-write). Таким образом Оригинал остается нетронутым, а все изменения попадут в копию соответствующего файла из Рабочей папки. Можно отказаться от выбора папки Оригинала или выбрать ту же папку что и Рабочая — тогда программа будет работать по-старому, с одной папкой.<br />
* Для артефактов добавлена панелька с визуализацией свойств как в самой игре (Кровотечение, Ожог, Радиоактивность и т.п.).<br />
* Добавлена возможность просматривать/редактировать иконки из других ui_icon_equipment.dds файлов (меню Файл|Открыть файл иконок). Это легко позволяет, например, вставлять иконки в ваш мод из других модов.<br />
* Добавлен флаг Резервное сохранение (в левой нижней части экрана) — создавать или нет резервные файлы (*.bak). <br />
* Теперь резервные файлы создаются на сессию программы, а не на каждое сохранение.<br />
<br />
====Краткая инструкция к редактору диалогов====<br />
[[Файл:STLKObjectMan-v3.0.0-dialog.png|right|480px]]<br />
В дереве объектов слева выбираем персонаж в ветке Диалоги Квестовые или Диалоги Общие. В меню по правой кнопке мышки выбираем Новый диалог для нового диалога<br />
или Добавить диалог для добавления этому персонажу любого существующего диалога. Для редактирования существующего диалога просто кликаем на него в дереве.<br />
<br />
Справа появится редактор на закладке "Редактор диалога <id диалога>".<br />
<br />
Верхняя часть редактора диалога относится ко всему диалогу (условия, инфопоршены и т.п.). Нижняя часть редактора относится к текущей выбранной фразе.<br />
Условия, инфопоршены, действия и т.п. задаются в соответствующих полях по одному на строку.<br />
<br />
Слева дерево фраз построенное согласно связям между фразами. Справа расположена таблица фраз, где все фразы показаны просто списком.<br />
<br />
Фразы можно таскать мышкой в дереве или из таблицы в дерево. Перетаскивание фразы из дерева в таблицу - отсоединяет её от родительской фразы.<br />
<br />
Дерево имеет всплывающее меню с разными действиями по правой кнопке мышки. Кнопка или меню Удалить удаляют выбранную фразу из диалога.<br />
<br />
Созданный или отредактированный диалог можно сразу протестировать на закладке Тест.<br />
<br />
Сохранение изменений как обычно - меню Файл|Сохранить.<br />
<br />
===Версия 2.0.1===<br />
* Исправлен косяк с перезагрузкой диалогов (не перезагружались диалоги/фразы из ''#include'' файлов).<br />
* Добавил копирование ID диалогов и персонажей в дереве по правой кнопке мыши.<br />
<br />
===Версия 2.0.0===<br />
* Добавлен инструмент для тестирования диалогов. Он позволяет протестировать диалоги без необходимости запуска игры и создания соответствующей ситуации в игре.<br />
* В дереве слева появились две дополнительных ветки "Диалоги Квестовые" и "Диалоги Общие". Каждая ветка диалогов содержит подсветки групп (Одиночка, Военный, Бандит и т.п.), которые в свою очередь содержат имена персонажей (Сидорович, Волк и т.п.). Далее для каждого персонажа есть подсветки с диалогами. "Диалоги Общие" содержит диалоги для персонажей с генерируемыми именами (GENERATE_NAME).<br />
* Можно тестировать все диалоги вместе для определенного персонажа (т.е. так как они появляются в игре) или каждый диалог в отдельности.<br />
* Для тестирования всех диалогов вместе нужно выбрать персонаж в дереве. Для тестирования индивидульного диалога — выбрать собственно диалог.<br />
* После выбора персонажа или диалога, слева на закладке "Свойства" появится инструмент тестирования выбранного диалога (диалогов). Инструмент поддерживает списки условий ('''precodition''') и инфопорций ('''infoportions'''). Их можно установить перед запускам диалога с персонажем.<br />
* Запуск диалога с персонажем осуществляется кнопкой "Старт". Если тестируется индивидуальный диалог, то необходимые условия для его активации будут установлены автоматически.<br />
* На списке фраз Главного Героя нужно делать двойной щелчок левой кнопки мышки для их использования.<br />
* По мере продвижения по диалогу включаются/выключаются инфопорции, прописанные во фразах. Список активных условий и инфопорций глобальный и сохраняется при переходе от одного диалога к другому, это позволяет тестировать связанные диалоги для разных персонажей. В окне диалога выводятся как фразы участников диалога так и его результат ('''Give Info''', '''Disable Info''', '''Actions'''), а также сообщения об ошибках при неправильно сконфигурированном диалоге.<br />
* Кнопка "Очистить" очищает текущее окно диалога. Кнопка "Сбросить" прекращает текущий диалог, очищает окно диалога и сбрасывает ВСЕ условия и инфопоршны.<br />
* Кнопка "Перезагрузить" перечитывает текущий диалог (диалоги) и фразы из исходных файлов. Таким образом можно отредактировать диалог во внешнем текстовом редакторе и сразу его протестировать.<br />
* Кнопка "Установить" устанавливает начальные условия для активации выбранного индивидуального диалога.<br />
* Диалоги в дереве помечаются значками следующий цветов:<br />
# Красный — стартовый диалог ('''start_dialog''').<br />
# Синий — диалог с актером ('''actor_dialog''').<br />
# Серый — диалог не активен из-за текущих условий (precondition)/инфопорций (infoportion).<br />
* Перезагружать профили персонажей и диалогов можно также в дереве из меню по правой кнопке мышки. Также в этом меню доступен пункт "Открыть Файл" который открывает во внешнем редакторе файл с профилем персонажа или файл диалога с файлом русского текста соответственно.<br />
<br />
===Версия 1.9.4===<br />
* Исправил вылет при составлении списка аддонов, если объект аддона отсутствует.<br />
* Подправил определение аддонов для ЗП.<br />
<br />
===Версия 1.9.3===<br />
* Исправил сохранение переноса строки в описаниях объектов (''\n'' в xml-файлах).<br />
* Добавил аддоны оружия (прицелы, глушители и подствольники) отдельным узлом в дереве с подсписком оружия для которого можно вешать аддон.<br />
* Улучшил алгоритм получения типа объекта (в ранних версиях РПГ-7, например, не показывался).<br />
* Переименовал узел "Еда/Напитки/Медикаменты" в "Используемые вещи" — фактически там показываются вещи которые можно использовать.<br />
<br />
===Версия 1.9.2===<br />
* Добавил опции поиска объекта. Искать можно по имени секции или названию, точной фразе или частичной (Ctrl+F).<br />
* Добавил возможность продолжить поиск следующего объекта (клавиша F3).<br />
* Добавил поиск объекта, соответствующего выбранной иконке (выделить иконку и кликнуть "Найти Объект" в меню по правой кнопке мыши).<br />
* Улучшил алгоритм определения типа объекта (артефакт, вещь и т.п., наиболее актуально для Зова Припяти).<br />
* Исправил расчет повреждений для ЗП и ЧН.<br />
<br />
===Версия 1.9===<br />
* Добавлена возможность прописывать предметы (оружие, патроны, еда, костюмы и т.п.) в списках '''buy_condition''' и '''sell_condition''' схем торговли. Для этого нужно в дереве выбрать предмет, который хотите прописать и в меню по правому клику мышки выбрать "Добавить в торговлю" — предмет будет добавлен во все секции торговли, если его там еще не было.<br />
* Добавлена возможность удалять наследованные и клонированные объекты (меню "Удалить" с помощью ПКМ в дереве). При удалении объекта он будет отписан из всех секций торговли. Удаление работает только для вновь созданных объектов — после сохранения их уже нельзя удалить.<br />
* Добавлена прокрутка изображений иконок инвентаря колесиком мышки по вертикали, и с зажатой клавишей Ctrl по горизонтали.<br />
* Добавлена возможность вставки иконки из буфера обмена по правому клику мышки в любом месте, начиная с того квадрата, где был сделан клик (необязательно выделять область вставки рамкой).<br />
* Другие мелкие исправления и улучшения.<br />
<br />
===Версия 1.8===<br />
* Добавлена возможность редактировать (добавлять/удалять/копировать и т.д.) иконки инвентаря. Полностью поддерживаются 32-битовые изображения с альфа-каналом.<br /><br />
* Добавлена возможность просматривать прозрачность иконок (альфа-канал). Чекбокс "Показать прозрачность". Чтобы редактировать иконку, выделите небходимую область с помощью двух левых кликов мышки — появится зеленая рамочка выделенной области. В меню по правому клику мышки доступно следующее:<br />
# "Копировать" — копирует содержимое выделенной области в буфер обмена как 32бит Windows Bitmap (формат CF_DIBV5). После этого содержимое буфера обмена можно использовать в любом графическом редакторе (желательно в таких, которые поддерживают канал прозрачности).<br />
# "Вставить" — вставляет содержимое буфера обмена в выделенную область с масштабированием (используется Pixel Averaging алгоритм для более высокого качества смасштабированного изображения). Здесь также поддерживается формат CF_DIBV5. Если вставляемое изображение 32-битное, то канал прозрачности будет взят как есть. Если изображение не 32-битное (24 бита, 16 бит и т.п.), то все пикселы с цветом как у самого левого-нижнего пиксела будут определены как прозрачные.<br />
# "Сохранить в файл" — то же, что и копировать, только во внешний 32-битный BMP-файл.<br />
# "Импорт из файла" — то же, что и вставить, только из внешнего BMP-файла.<br />
# "Очистить" — очищает выделенную область и делает ее прозрачной. <br />
Сохранение измененных иконок выполняется вместе с другими изменениями через меню "Файл -> Сохранить".<br />
<br />
===Версия 1.7===<br />
* Добавлен инструмент для анализа уязвимости НПС/ГГ от оружия в зависимости от надетой брони (закладка Оружие-Броня). Выбирайте в дереве оружие, патроны и костюм (или бронезащиту) которые хотите анализировать в инструменте.<br />
* Добавлен инструмент для анализа уязвимости монстров от оружия (закладка Оружие-Монстры). Выбирайте в дереве оружие, патроны и монстров которые хотите анализировать в инструменте. Таблицы уязвимостей показывают процент урона от одного выстрела и количество выстрелов для убийства при каждой выбранной комбинации оружие-патрон и костюм (бронезащита)/монстр. Алгоритм расчета также учитывает уязвимость по костям ('''bip01*'''), '''fire_wound_immunity''' и '''health_hit_part'''.<br /><br />
Значения убойных параметров оружия и патронов можно редактировать непосредственно в таблицах.<br /><br />
Значения бронезащиты, уязвимости по костям и иммунитет к огнестрелу (для монстров) можно редактировать выбрав поле в таблице для соответствующей колонки и нажав '''Enter''', или через меню по правому клику мышки — появится всплывающая панелька с параметрами, которые можно редактировать. Чтобы подтвердить параметры, измененные в панельке, нажмите '''Enter'''. Чтобы спрятать панельку нажмите '''Esc'''.<br /><br />
* Добавлен селектор уровня Мастер, Ветеран, Сталкер и Новичок (в главном меню) — влияет на вышеуказанные инструменты.<br />
<br />
===Версия 1.6===<br />
# Добавлено редактирование схем торговли. Секции покупки, продажи и наличия товаров доступны при включении опции "Включить секции".<br />
# Исправлена ошибка, при которой, если отредактировать параметр, а затем сразу создать новый, то отредактированный параметр может быть утерян.<br />
<br />
===Версия 1.5===<br />
# Добавлена настройка названий и важности параметров (меню "Файл -> Настройка параметров"). <br />
# Теперь построение дерева объектов работает намного быстрее.<br />
# Мелкие исправления.<br />
<br />
===Версия 1.4===<br />
# Исправлена сортировка в таблице сравнения.<br />
# Добавлена возможность создавать новые названия и описания объектов. Для этого нужно назначить новые значения параметрам '''inv_name''' и/или '''description''', написать текстовые описания в полях "Название" и/или "Описание", при сохранении код создаст новые секции в xml файлах из ''text\rus''. <br />
# Добавлена возможность построить дерево секций на которые ссылаются объекты (контрол "Включить секции" под деревом).<br />
# Добавлен поиск объектов по имени секции (Ctrl+F).<br />
<br />
===Версия 1.3===<br />
# Добавлены параметры погоды.<br />
# Добавлена возможность редактирования названия и описания объекта, если они присутствуют в xml-файлах из папки ''config\text\rus''. <br />
# Добавлен экспорт и импорт в/из CSV-файл(а) для таблицы сравнения (кнопки внизу).<br />
<br />
===Версия 1.2===<br />
Добавлен механизм анализа и сравнения полезности свойств объектов, который может быть использован при настройке баланса.<br /><br />
Работает это так:<br />
* На закладке "Сравнение" есть таблица в котороую можно выбирать исследуемые объекты и их параметры.<br />
* Выбор объектов осуществляется в дереве пометкой галочками требуемых объектов (возможен множественный выбор объектов с помощью Ctrl+LMB или Shifе+LMB и меню "Выбрать" по правому клику мышки).<br />
* Выбор параметров осуществляется из таблицы на закладке "Свойства" по двойному клику или через меню "Выбрать" по правому клику мышки.<br />
* Далее на закладке "Сравнение" в поле "Формула" пишем формулу вычисления полезности, наример, для еды — '''eat_satiety/(cost*inv_weight)''' и нажимаем '''Enter''' или кнопку справа — в таблице будет посчитаны коэффициенты полезности включенных объектов (выше — лучше).<br />
Формула поддерживает ''sin()'', ''cos()'', ''tan()'', ''exp()'', степень (''^'') и логарифмы (''ln()'', ''log10()'', ''log2()'').<br /><br />
Значения параметров объектов в таблице сравнения можно редактировать. Для использования параметра в формуле его необязательно добавлять в таблицу сравнения. Также доступны меню для удаления параметров из таблицы сравнения по правому клику мышки.<br />
* Для некоторых объектов поддерживаются ссылочные параметры которые преобразуются в число при сравнении:<br />
# Для оружия '''ammo_class''' — возвращает '''k_hit''' самого мощного патрона.<br />
# Для костюмов '''bones_koeff_protection''' — возвращает усредненный коэффициент бронезащиты.<br />
# Для артефактов параметры из '''hit_absorbation_sect''' ('''burn_immunity''', '''stike__immunity''' и т.п.) — возвращает значения этих параметров.<br />
# Для монстров '''attack_params''' возвращает значение наносимого повреждения при максимальной атаке; '''immunities_sect''' возвращает значение усредненной уязвимости.<br /><br />
Если после вычисления полезности, значения в таблице пустые, то в формуле есть ошибка или какие-то параметры отсутствуют для некоторых объектов.<br />
<br />
Еще было сделано и исправлено в версии 1.2:<br />
# Починена поддержка названий и описаний объектов для ЧН и ЗП.<br />
# Добавлено сохранение пути к последней папке с конфигами игры (gamedata).<br />
# Добавлено сохранение состояния кнопок Список/Дерево.<br />
# Добавлена кнопка "Только выбранные", которая показывает в дереве только объекты помеченные галочкой.<br />
<br />
===Версия 1.1===<br />
# Создание новых объектов через наследование или клонирование (меню по правому клику мышки на объекте в дереве).<br />
# Сортировки по различным характеристикам объектов (меню по правому клику на группе в дереве).<br />
# Добавление и удаление параметров объектов (меню по правому клику в таблице параметров).<br />
# Возможность открыть для редактирования любую секцию на которую указывает параметр (меню по правому клику в таблице параметров).<br />
<br />
[[Категория:Редакторы конфигурационных файлов]]</div>RedPythonhttps://xray-engine.org/index.php?title=%D0%A2%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B8%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F&diff=1223Типичные ошибки и методы их устранения2024-02-08T23:30:04Z<p>RedPython: /* Геометрия уровней */</p>
<hr />
<div>Для поиска по страничке используйте '''Ctrl+F'''<br />
<br />
==xrAI==<br />
<syntaxhighlight lang="text">! AI-node [87.500, 9.188, 160.300] not connected to AI-map<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : error_nodes.empty()<br />
[error]Function : CGameGraphBuilder::check_fill<br />
[error]File : X:\xray\utils\xrAI\game_graph_builder.cpp<br />
[error]Line : 273<br />
[error]Description : Some ai-node is not connected to AI-map. See log for details.</syntaxhighlight><br />
Одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : F<br />
[error]Function : xrLoad<br />
[error]File : .\compiler_load.cpp<br />
[error]Line : 272<br />
[error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight><br />
В папке с уровнем gamedata\level\escape отсутствует build.aimap<br />
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGameGraphBuilder::save_cross_table<br />
[error]File : .\game_graph_builder.cpp<br />
[error]Line : 351<br />
[error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex</syntaxhighlight><br />
На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game<br />
----<br />
<syntaxhighlight lang="text">! Cannot build GAME path! (object esc_tutorial_wounded0826)<br />
! CURRENT LEVEL : escape<br />
! CURRENT game point position : [-146.011078][-20.711269][-147.502380]<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : I != levels().end()<br />
[error]Function : GameGraph::CHeader::level<br />
[error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h<br />
[error]Line : 153<br />
[error]Description : there is no specified level in the game graph : 205</syntaxhighlight><br />
Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f)<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CVertexAllocatorFixed<2097152>::CDataStorage<struct CVertexPath<1>::DataStoragePath<struct CVertexManagerFixed<unsigned int,unsigned int,8>::VertexManager<struct CDataStorageSingleLinkedList<0>::SingleLinkedList<struct CDataStorageDoubleLinkedList<0>::DoubleLinkedList<struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>::BucketList<struct CDijkstra<float,struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>,struct CVertexManagerFixed<unsigned int,unsigned int,8>,struct CVertexAllocatorFixed<2097152>,1,struct CVertexPath<1>,struct AStar::_Vertex<float,class CEmptyClassTemplate>::_vertex,struct CBuilderAllocatorConstructor,struct CManagerBuilderAllocatorConstructor,struct CDataStorageConstructor,unsigned int>::_Vertex>::_vertex>::_vertex>::_vertex>::_vertex>::_vertex>::create_vertex<br />
[error]File : x:\clearsky\src\engine\utils\xrai\vertex_allocator_fixed_inline.h<br />
[error]Line : 51<br />
[error]Description : m_vertex_count < reserved_vertex_count - 1</syntaxhighlight><br />
Эту ошибку можно обойти ключом [[xrAI|-no_separator_check]]<br />
<br />
По какой причине она вообще возникает и не допустить её возникновения?<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !m_border.empty()<br />
[error]Function : CSpaceRestrictorWrapper::build_border<br />
[error]File : .\space_restrictor_wrapper.cpp<br />
[error]Line : 215<br />
[error]Description : space restrictor has no border<br />
[error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight><br />
Аномалия расположена не на ИИ-сетке.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : assertion failed<br />
[error]Function : CGraphMerger::CGraphMerger<br />
[error]File : xr_graph_merge.cpp<br />
[error]Line : 621<br />
[error]Description : M != (*K).second->m_tVertexMap.end()</syntaxhighlight><br />
Одной из точек графа для [[level changer|перехода между уровнями]] задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки.<br />
<br />
== Красные строки в логе ==<br />
<syntaxhighlight lang="text">! level_path().failed() during navigation</syntaxhighlight><br />
Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды.<br />
<br />
==Редакторы==<br />
<syntaxhighlight lang="text">Expression : assertion failed<br />
Function : IReader::advance<br />
File : x:\clearsky\src\engine\xrcore\FS.h<br />
Line : 276<br />
Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight><br />
Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать.<br />
<br />
==Actor Editor==<br />
<syntaxhighlight lang="text">!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Can't find bone: 'bip01'<br />
!Can't find bone: 'root_stalker'<br />
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count<br />
!Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47']<br />
! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'.<br />
<br />
FATAL ERROR<br />
<br />
[error]Expression : assertion failed<br />
[error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 732<br />
[error]Description : m_Motions.size()</syntaxhighlight><br />
В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет.<br />
<br />
==Игра==<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_error<br />
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp<br />
[error]Line : 180<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight><br />
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620]<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : false<br />
[error]Function : CXml::Load<br />
[error]File : xrXMLParser.cpp<br />
[error]Line : 87<br />
[error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.</syntaxhighlight><br />
В указанном файле ошибка синтаксиса: где-то не закрыт тег.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility()<br />
[error]Function : CALifeSpawnRegistry::load<br />
[error]File : E:\priquel\sources\engine\xrGame\alife_spawn_registry.cpp<br />
[error]Line : 110<br />
[error]Description : Saved game doesn't correspond to the spawn : DELETE SAVED GAME!</syntaxhighlight><br />
Файл сохранения не соответствует спавну, нужно пересобрать спавн. Можно обойти ключом <code>-ignore_save_incompatibility</code>, в таком случае спавн будет соответствовать учтённому в сохранении.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()<br />
[error]Function : CAI_Space::load<br />
[error]File : ai_space.cpp<br />
[error]Line : 110<br />
[error]Description : cross_table doesn't correspond to the AI-map</syntaxhighlight><br />
Аналогично предыдущему вылету: данные из спавна не соответствуют новой ИИ-сетке. Нужно пересобрать спавн.<br />
----<br />
<syntaxhighlight lang="text"><br />
Expression : fatal error<br />
Function : out_of_memory_handler<br />
File : .\xrDebugNew.cpp<br />
Line : 318<br />
Description : <no expression><br />
Arguments : Out of memory. Memory request: 3506347 K</syntaxhighlight><br />
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут]<br />
<br />
==Геометрия уровней==<br />
Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1:<br />
<syntaxhighlight lang="text">Expression : fatal error<br />
Function : CBlender_default::Compile<br />
File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp<br />
Line : 50<br />
Description : <no expression><br />
Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02</syntaxhighlight><br />
Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default.<br />
<br /><br />
Без перекомпиляции уровня исправить это можно с помощью [[level. compiler/decompiler (level. cdc) | распаковщика файла .level]]. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида<br />
<syntaxhighlight lang="ini">[58]<br />
shader = default<br />
textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm</syntaxhighlight><br />
и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так:<br />
<syntaxhighlight lang="ini">[58]<br />
shader = def_shaders\def_vertex<br />
textures = floor\floor_dirty_gr_02</syntaxhighlight><br />
Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем.<br />
----<br />
<syntaxhighlight lang="text">Expression : fs<br />
Function : CResourceManager::_CreateVS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 203<br />
Description : shader file doesnt exist<br />
Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs<br />
<br />
Expression : R<br />
Function : CResourceManager::_CreatePS<br />
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp<br />
Line : 309<br />
Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps</syntaxhighlight><br />
Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках.<br />
Чтобы игра не валилась, нужно подсунуть [https://files.xray-engine.org/shaders/r2_deffer_impl_lmh_pseudofix.7z те файлы, что она хочет]. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри.<br />
<br />
== Динамические модели ==<br />
<syntaxhighlight lang="text">Expression : m_attack_animation.valid()<br />
Function : CVisualZone::net_Spawn<br />
File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp<br />
Line : 34<br />
Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]</syntaxhighlight><br />
На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : motion_ID.valid()<br />
[error]Function : CKinematicsAnimated::ID_Cycle<br />
[error]File : ..\xrRender\SkeletonAnimated.cpp<br />
[error]Line : 208<br />
[error]Description : ! MODEL: can't find cycle: <br />
[error]Arguments : death_init</syntaxhighlight><br />
Не найдена анимация с именем '''death_init'''. Возможно, к модели не подключен нужный .omf<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : BI_NONE!=f_bones.back()<br />
[error]Function : P_build_Shell<br />
[error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp<br />
[error]Line : 136<br />
[error]Description : wrong fixed bone</syntaxhighlight><br />
Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя '''link1''', а для физического объекта в редакторе уровней было указано имя '''link'''.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)</syntaxhighlight><br />
Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться.<br />
<br />
== Симуляция ==<br />
<syntaxhighlight lang="text">[error]Expression : m_path<br />
[error]Function : CPatrolPathParams::CPatrolPathParams<br />
[error]File : patrol_path_params.cpp<br />
[error]Line : 19<br />
[error]Description : There is no patrol path<br />
[error]Arguments : esc_hit_point</syntaxhighlight>На уровне отсутствует точка пути esc_hit_point.<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1.<br />
----<br />
<syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight><br />
В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_south_checkpoint_st_patrol_2_walk] is inaccessible for object [sim_default_military_00323]</syntaxhighlight><br />
Похоже, что точки пути '''patrol''' находятся вне рестриктора, накрывающего смарт, и неписи не могут попасть на работу. Нужно расширить рестриктор, чтобы он накрывал эти точки.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: 'Attempt to read a non-existant string field 'npc' in section 'esc_flesh_generic'</syntaxhighlight><br />
Не очень вразумительный лог, который в одном из случаев указывал на то, что в '''faction_monster.ltx''' в секции ''[start_position]'' указано имя, которое не существует в '''squad_descr_*.ltx'''. <br />
----<br />
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object)<br />
[error]Function : CPatrolPathManager::select_point<br />
[error]File : patrol_path_manager.cpp<br />
[error]Line : 155<br />
[error]Description : any vertex in patrol path [esc_granary_st_kamp_1_task] is inaccessible for object [sim_default_bandit_00413]</syntaxhighlight><br />
Такая ошибка была, когда одной из аномалий в пределах смарта задали тип рестриктора OUT. При этом путь esc_granary_st_kamp_1_task состоит из одной точки, и совершенно точно не входит в шейп аномалии. Нужно объяснение.<br />
----<br />
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ.<br />
----<br />
<syntaxhighlight lang="text"><br />
[error]Expression : fatal error<br />
[error]Function : CScriptEngine::lua_pcall_failed<br />
[error]File : ..\xrServerEntities\script_engine.cpp<br />
[error]Line : 192<br />
[error]Description : <no expression><br />
[error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)</syntaxhighlight>Такая ошибка вылезла, когда на карту был добавлен спейсрестриктор без каких-либо настроек.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id)<br />
[error]Function : CPatrolPoint::verify_vertex_id<br />
[error]File : C:\xray\xrGame\patrol_point.cpp<br />
[error]Line : 46<br />
<br />
! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex!<br />
</syntaxhighlight>Точка пути находится не на ИИ-сетке. Необходимо либо подвинуть точку, либо проложить ноды ИИ-сетки под ней. Такую ошибку можно увидеть лишь в отладочной сборке, в релизной же выдаётся лог ниже.<br />
----<br />
<syntaxhighlight lang="text">[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)<br />
[error]Function : CALifeSwitchManager::add_online<br />
[error]File : X:\xray\xrGame\alife_switch_manager.cpp<br />
[error]Line : 64<br />
[error]Description : Invalid vertex for object<br />
[error]Arguments : sim_default_military_1_sniper1561</syntaxhighlight><br />
Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше.<br />
<br />
== Сетевая игра ==<br />
<syntaxhighlight lang="text">[error]Expression : rpoints[0].size()<br />
[error]Function : game_sv_Deathmatch::Create<br />
[error]File : game_sv_deathmatch.cpp<br />
[error]Line : 101<br />
[error]Description : rpoints for players not found</syntaxhighlight><br />
На карте отсутствуют точки респавна для игроков.<br />
<br />
[[Категория:Справка]]</div>RedPythonhttps://xray-engine.org/index.php?title=shaders.xr_compiler/decompiler_(shaders.xr_cdc)&diff=1222shaders.xr compiler/decompiler (shaders.xr cdc)2024-02-08T22:47:14Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''shaders.xr compiler/decompiler'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Компилятор/декомпилятор<br />
|-<br />
| '''Автор''' || K.D.<br />
|-<br />
| '''Последняя версия''' || 0.2<br />
|-<br />
| '''Написан на''' || Perl 5<br />
|-<br />
| '''Обратная связь''' || [https://www.amk-team.ru/forum/index.php?showtopic=11568 AMK форум]<br />
|}<br />
</div><br />
Утилита предназначена для распаковки в текстовый или бинарный формат и запаковки файла '''[[shaders.xr]]'''<br />
<br />
== Установка ==<br />
# Установите [[ActivePerl]].<br />
# Распакуйте [https://files.xray-engine.org/k.d./perl_scripts/xr_unpackers/shaders.xr_cdc_v.0.2.rar архив со скриптом] в нужную папку.<br />
# Скопируйте библиотеку модулей [[stkutils]] в папку с библиотеками Perl (например, <code>C:\Perl\lib</code>) или в папку со скриптом.<br />
<br />
==Использование==<br />
Декомпиляция:<syntaxhighlight lang="winbatch"> perl sxrcdc.pl -d <input_file> [-o <outdir> -m <ltx|bin> -l <logfile>]</syntaxhighlight><br />
* <code>-d <input_file></code> — входной файл (shaders.xr)<br />
* <code>-o <outdir></code> — папка, куда сохранять шейдеры<br />
Компиляция:<syntaxhighlight lang="winbatch"> perl sxrcdc.pl -c <input_dir> [-o <outfile> -mode <ltx|bin> -l <logfile>]</syntaxhighlight><br />
* <code>-c <input_dir></code> — папка, где лежат шейдеры<br />
* <code>-o <outfile></code> — выходной файл<br />
Общие опции:<br />
* <code>-m <ltx|bin></code> — режим декомпиляции. <code>bin</code> — разбивать на бинарные файлы, <code>ltx</code> — полная декомпиляция.<br />
* <code>-l <logfile></code> — файл лога<br />
<br />
==История версий==<br />
'''0.2'''<br />
* полный рефакторинг кода<br />
'''0.1'''<br />
* начальный релиз<br />
<br />
[[Категория:Perl]]</div>RedPythonhttps://xray-engine.org/index.php?title=ActivePerl&diff=1221ActivePerl2024-02-08T22:46:12Z<p>RedPython: </p>
<hr />
<div>ActivePerl — это дистрибутив компилятора Perl от компании ActiveState. Модули из этого пакета использует [[acdc]] и другие скрипты. К нашему неудобству, ActiveState в каждом релизе ломает совместимость и коварно удаляет старые дистрибутивы со своего сайта. Последнее недоразумение мы исправили — качайте старые дистры прямо с этой странички.<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.6.1.633-MSWin32-x86.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.8.0.806-MSWin32-x86.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.8.8.819-MSWin32-x64-267479.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.8.8.819-MSWin32-x86-267479.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.8.8.822-MSWin32-x86-280952.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.8.9.827-MSWin32-x86-291969.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.2.1202-MSWin32-x64-293621.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.2.1202-MSWin32-x86-293621.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.3.1204-MSWin32-x86-294330.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.4.1205-i686-linux-glibc-2.3.6-294981.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.4.1205-MSWin32-x64-294981.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.4.1205-MSWin32-x86-294981.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.12.4.1205-x86_64-linux-glibc-2.3.5-294981.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.1.1401-i686-linux-glibc-2.3.6-294969.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.1.1401-MSWin32-x64-294969.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.1.1401-MSWin32-x86-294969.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.1.1401-x86_64-linux-glibc-2.3.5-294969.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.2.1402-MSWin32-x64-295342.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.2.1402-MSWin32-x86-295342.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.3.1404-MSWin32-x64-296513.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.14.3.1404-MSWin32-x86-296513.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.16.2.1602-MSWin32-x64-296513.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.16.2.1602-MSWin32-x86-296513.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.20.3.2003-MSWin32-x64-299574.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.20.3.2003-MSWin32-x86-64int-299574.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.20.3.2003-x86_64-linux-glibc-2.15-299574.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.22.1.2201-MSWin32-x64-299574.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.22.1.2201-MSWin32-x86-64int-299574.msi<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.22.1.2201-x86_64-linux-glibc-2.15-299574.tar.gz<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.24.0.2400-MSWin32-x64-300558.exe<br />
<br />
https://files.xray-engine.org\perl\ActivePerl-5.24.0.2400-MSWin32-x86-64int-300560.exe<br />
<br />
[[Категория:Perl]]</div>RedPythonhttps://xray-engine.org/index.php?title=shaders_xrlc.xr_compiler/decompiler_(shaders_xrlc.xr_cdc)&diff=1220shaders xrlc.xr compiler/decompiler (shaders xrlc.xr cdc)2024-02-08T22:44:57Z<p>RedPython: </p>
<hr />
<div>{{DISPLAYTITLE:shaders_xrlc.xr compiler/decompiler (shaders_xrlc.xr cdc)}}<br />
<div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''shaders.xr compiler/decompiler'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Компилятор/декомпилятор<br />
|-<br />
| '''Автор''' || K.D.<br />
|-<br />
| '''Последняя версия''' || 0.2<br />
|-<br />
| '''Написан на''' || Perl 5<br />
|-<br />
| '''Обратная связь''' || [https://www.amk-team.ru/forum/index.php?showtopic=11568 AMK форум]<br />
|}<br />
</div><br />
Утилита предназначена для распаковки в текстовый или бинарный формат и запаковки файла '''[[shaders_xrlc.xr]]'''<br />
<br />
== Установка ==<br />
# Установите [[ActivePerl]].<br />
# Распакуйте [https://files.xray-engine.org/k.d./perl_scripts/xr_unpackers/shaders_xrlc.xr_cdc_v.0.2.rar архив со скриптом] в нужную папку.<br />
# Скопируйте библиотеку модулей [[stkutils]] в папку с библиотеками Perl (например, <code>C:\Perl\lib</code>) или в папку со скриптом.<br />
<br />
==Использование==<br />
Декомпиляция:<syntaxhighlight lang="winbatch"> perl sxxrcdc.pl -d <input_file> [-o <outfile> -l <logfile>]</syntaxhighlight><br />
* <code>-d <input_file></code> — входной файл (shaders_xrlc.xr)<br />
* <code>-o <outdir></code> — папка, куда сохранять шейдеры<br />
Компиляция:<syntaxhighlight lang="winbatch"> perl sxxrcdc.pl -c <input_file> [-o <outfile> -l <logfile>]</syntaxhighlight><br />
* <code>-c <input_dir></code> — входной ltx-файл<br />
* <code>-o <outfile></code> — выходной файл<br />
Общие опции:<br />
* <code>-l <logfile></code> — имя лог-файла<br />
<br />
==История версий==<br />
'''0.2'''<br />
* полный рефакторинг кода<br />
'''0.1'''<br />
* начальный релиз<br />
<br />
[[Категория:Perl]]</div>RedPythonhttps://xray-engine.org/index.php?title=senvironment.xr_compiler/decompiler_(senvironment.xr_cdc)&diff=1219senvironment.xr compiler/decompiler (senvironment.xr cdc)2024-02-08T22:44:17Z<p>RedPython: </p>
<hr />
<div><div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"><br />
<big>'''senvironment.xr compiler/decompiler'''</big><br />
----<br />
{| style="border: none"<br />
| '''Тип''' || Компилятор/декомпилятор<br />
|-<br />
| '''Автор''' || K.D.<br />
|-<br />
| '''Последняя версия''' || 0.2<br />
|-<br />
| '''Написан на''' || Perl 5<br />
|-<br />
| '''Обратная связь''' || [https://www.amk-team.ru/forum/index.php?showtopic=11568 AMK форум]<br />
|}<br />
</div><br />
Утилита предназначена для распаковки в текстовый формат и запаковки файла '''[[senvironment.xr]]'''<br />
<br />
==Установка==<br />
# Установите [[ActivePerl]].<br />
# Распакуйте [https://files.xray-engine.org/k.d./perl_scripts/xr_unpackers/senvironment.xr_cdc_v.0.2.rar архив со скриптом] в нужную папку.<br />
# Скопируйте библиотеку модулей [[stkutils]] в папку с библиотеками Perl (например, <code>C:\Perl\lib</code>) или в папку со скриптом.<br />
<br />
==Использование==<br />
Декомпиляция: <syntaxhighlight lang="winbatch">perl sexrcdc.pl -d <input_file> [-o <outfile> -l <logfile>]</syntaxhighlight> <br />
* <code>-d <input_file></code> — входной файл (senvironment.xr)<br />
* <code>-o <outfile></code> — выходной ltx-файл<br />
Компиляция:<syntaxhighlight lang="winbatch">perl sexrcdc.pl -c <input_file> [-o <outfile> -l <logfile>]</syntaxhighlight> <br />
* <code>-c <input_file></code> — входной ltx-файл<br />
* <code>-o <outfile></code> — выходной файл<br />
Общие опции:<br />
* <code>-l <logfile></code> — имя лог-файла<br />
<br />
==История версий==<br />
'''0.2'''<br />
* полный рефакторинг кода<br />
'''0.1'''<br />
* начальный релиз<br />
<br />
[[Категория:Perl]]</div>RedPython