Сталкер Лом 357 Опубликовано 20 Марта 2013 (изменено) Ставим новые метки в ПДА [ЗП]Дело было как ни странно, днём... Появилась необходимость поставить метки переходов с одной локации на другую - покопавшись малость в теме "ковырялки ЗП" увидел, что до меня были такие попытки создания меток, но по-крупному копаться в скриптах я не люблю по причине неопытности в скриптах - решил сделать сам. Для начала идём в pda.script:После таблицы под названием sleep_zones_tbl добавим ещё одну, должно получиться так: local sleep_zones_tbl = { {target = "zat_a2_sr_sleep_id", hint = "st_ui_pda_sleep_place"}, {target = "jup_a6_sr_sleep_id", hint = "st_ui_pda_sleep_place"}, {target = "pri_a16_sr_sleep_id", hint = "st_ui_pda_sleep_place"}, {target = "escape_podval_sr_sleep_id", hint = "st_ui_pda_sleep_place"}, {target = "garbage_base_sr_sleep_1_id", hint = "st_ui_pda_sleep_place"}, {target = "garbage_base_sr_sleep_2_id", hint = "st_ui_pda_sleep_place"}, {target = "garbage_dolg_zastava_sr_sleep_id", hint = "st_ui_pda_sleep_place"}, } -- это таблица отметок спального места, её мы не трогаем local level_changer_tbl = { {target = "perehod_darks_esc", hint="perehod_darks_esc_name"}, {target = "id_перехода", hint="надпись над переходом"}, } --А это наша новая таблица, содержащие переходы и надписи над ними После этой добавки идём в самый конец файла и добавляем саму функцию показания перехода function fill_level_changers() for k,v in pairs(level_changer_tbl) do local obj_id = get_story_object_id(v.target) if(obj_id) then level.map_add_object_spot(obj_id, "level_changer_up", v.hint) end end end Где, ui_inGame2_icon_level_changer - имя значка нашего перехода, можно поставить из оригинальной игры, но я создам свойИтак, теперь нам нужно создать вызов нашей функции - далеко ходить не будем (ибо лень ): находим функцию fill_primary_objects и добавляем вызов нашей: function fill_primary_objects() for k,v in pairs(primary_objects_tbl) do local obj_id = get_story_object_id(v.target) if(obj_id) then level.map_add_object_spot(obj_id, "primary_object", v.hint) end end change_anomalies_names() fill_sleep_zones() fill_level_changers() --Вот вызов нашей функции end Со скриптами мы закончили, теперь нужно создать наш переход и текст к нему.Для того, чтобы наш переход отображался нужно придать ему id, для этого создадим его секцию в all.spawn, но с одной добавкой: [8057] ; cse_abstract properties section_name = level_changer name = perehod_darks_esc position = -618.825927,-2.623994,-380.298706 direction = 0,0,0 cse_abstract__unk1_h16 = 0x1 ; cse_alife_object properties game_vertex_id = 1789 distance = 0 level_vertex_id = 404 object_flags = 0xffffff3e custom_data = <<END ;Вот тут и нужно добавить его id, а далее - как раньше [story_object] story_id = perehod_darks_esc END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 6 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties dest_game_vertex_id = 1407 dest_level_vertex_id = 593260 dest_position = 363.344421,15.172136,-39.722797 dest_direction = 0,0,0 dest_level_name = l01_escape dest_graph_point = start_actor_01 silent_mode = 1 ; se_level_changer properties Идём в st_land_names.xml и добавляем в конец файла описания наших переходов: <!-- Переходы --> <string id="perehod_darks_esc_name"> <text>На Кордон</text> </string> <!-- Переходы --> - Результат Собственно всё, таким образом можно создать не только отметки переходов, но и для чего-другого с разными иконками (в данном случае, ну никак иконки "спального места" и "интересного места" под переход не подходили) - допустим, для любителей "читерки", можно добавить отметку к укрытиям (добавив в секцию укрытия в all.spawn строки присвоения id) или чего-другого, это зависит от потребности. Изменено 19 Сентября 2014 пользователем World_Stalker 2 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 23 Июля 2013 (изменено) Добавление новых кнопок в ПДА (ЗП) Примечание: Сей "фокус" можно проделывать только с правками от проекта X-Ray extensions, а конкретно, с правками ПДА. Итак, всё-таки захотели мы создать вкладку в ПДА. Но не знаем как. Проблемы, согласен. Вот некоторая часть решения этой проблемы: 1. Заходим в pda.xml, ищем таблицу: <tab x="443" y="57" width="468" height="27"><button x="0" y="0" width="172" height="27" id="eptTasks" hint="pda_btn_quests_hint" frame_mode="0"> <text align="c" vert_align="c" x="0" y="0" width="157" height="27" font="letterica16">pda_btn_quests</text> <texture>ui_inGame2_pda_button</texture> <text_color> <t r="255" g="255" b="255"/> <d r="255" g="255" b="255"/> <e r="200" g="200" b="200"/> <h r="170" g="170" b="170"/> </text_color></button><button x="148" y="0" width="172" height="27" id="eptRanking" hint="pda_btn_ranking_hint" frame_mode="0"> <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_ranking</text> <texture>ui_inGame2_pda_button</texture> <text_color> <t r="255" g="255" b="255"/> <d r="255" g="255" b="255"/> <e r="200" g="200" b="200"/> <h r="170" g="170" b="170"/> </text_color></button><button x="296" y="0" width="172" height="27" id="eptLogs" hint="pda_btn_logs_hint" frame_mode="0"> <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_logs</text> <texture>ui_inGame2_pda_button</texture> <text_color> <t r="255" g="255" b="255"/> <d r="255" g="255" b="255"/> <e r="200" g="200" b="200"/> <h r="170" g="170" b="170"/> </text_color></button></tab> 2. Для лучшего понимания, разберём это дело по блокам: Это блок является "колбой", в которой находятся кнопки в ПДА: <tab x="Смещение колбы по Х" y="Смещение колбы по У" width="Ширина колбы" height="Высота колбы"></tab> А этот блок как раз и является кнопкой: <button x="Смещение кнопки по Х" y="Смещение кнопки по У" width="Ширина" height="Высота" id="Уникальное Айди (id) кнопки" hint="Подсказка, всплывающая при наведении на кнопку" frame_mode="0"> <text align="c" vert_align="c" x="0" y="0" font="letterica16">Ссылка на текст-описание кнопки</text> <texture>Имя текстуры кнопки</texture> <text_color> <!-- Цветовые настройки текста в кнопке --> <t r="255" g="255" b="255"/> <d r="255" g="255" b="255"/> <e r="200" g="200" b="200"/> <h r="170" g="170" b="170"/> </text_color></button> 3. А теперь приступим к созданию новой кнопки: В колбе, содержащей кнопки, нужно изменить параметр "Смещения по Х", отняв от значения число, равное значению "Смещения кнопки по Х" от ВТОРОЙ кнопки: <tab x="296" y="57" width="468" height="27"></tab> А так же, нужно к параметру "width="468"" (и последующему значению, если добавляете больше одной кнопки) прибавить число 172, которое равно ширине кнопки. Первый пункт делается для того, чтобы новая кнопка не "налезала" на другие части ПДА (Часы, другие кнопки и т.п.), а второй, чтобы кнопка была в "колбе" и была активной, то есть, доступной для нажимания. Делается это для того, чтобы новая кнопка не "налезала" на другие части ПДА (Часы, другие кнопки и т.п.). Далее, создадим саму кнопку (в данном случае для энциклопедии): <button x="444" y="0" width="172" height="27" id="eptEncyclopedia" hint="pda_btn_encyclopedia_hint" frame_mode="0"> <text align="c" vert_align="c" x="0" y="0" font="letterica16">pda_btn_encyclopedia</text> <texture>ui_inGame2_pda_button</texture> <text_color> <t r="255" g="255" b="255"/> <d r="255" g="255" b="255"/> <e r="200" g="200" b="200"/> <h r="170" g="170" b="170"/> </text_color></button> Всё, кнопка создана и функционирует, её название некоректно отображается ("pda_btn_encyclopedia" вместо "Энциклопедия"), исправим это. 4. Идём в файл configs\text\rus\ui_st_pda.xml и добавим две секции в самый конец: <string id="pda_btn_encyclopedia"> <text>Энциклопедия</text></string><string id="pda_btn_encyclopedia_hint"> <text>Открыть энциклопедию</text></string> (Здесь, для энциклопедии, а вам нужно вписать ссылку на свою кнопку и её название по образцу). Всё, теперь кнопка работает, даже отображается корректно, но не открывает новый раздел: когда нажимаем на неё, то перед нами остаётся предыдущая активная вкладка, хоть и наша новая кнопка активна. Вот объяснение этого явления от тов. @Malandrinus: Текущее содержимое окна при активации свой кнопки не убирается, поэтому придётся закрывать его своим содержимым с помощью помещения диалога поверх окна. К сожалению, получение текущего окна в ЧН и ЗП стало невозможно и пока решения этой проблемы не видно.Так что новой вкладки мы не получим - только кнопочка. Даже не расскажу, как это окно сделать, т.к. я пробовал и у меня, пока, ничего не вышло. Будем пытаться, а пока - всё.P.S. Вот так это будет выглядеть: P.P.S. Добавлена информация, из за отсутствия которой не функционировала кнопка. Изменено 19 Сентября 2013 пользователем ColR_iT Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 30 Июля 2013 Создание энциклопедии для ПДА в ЗП.Примечание: Аналогично предыдущему уроку, энциклопедию реализовать можно только при помощи проекта X-Ray extensions. Для того, чтобы кнопка энциклопедии появилась, нужно выполнить мой предыдущий урок "Добавление новых кнопок в ПДА (ЗП)".Ссылка на готовую энциклопедию+видеодемонстрация: http://rghost.ru/47774542 Как мы уже знаем из слов тов. malandrinus, "родные" для ПДА вкладки нам нужно будет закрывать собственной. Для этого нам нужен свой GUI и нам нужна "ловля" инфопоршня при открытии вкладки. Мастерить велосипед самому мне не понравилось: хоть уроки по GUI есть, но мне показалось, что с моим опытом я могу сделать только несколько окошечек, не более. Про вкладку в ПДА, которая соответствовала бы стилю нашего электронного друга я вообще даже не мечтал, поэтому взял наработки тов. DEXXX (записная книжка в ЧН) и Geonezis (Энциклопедия оружия, на основе предыдущей работы). Скачиваем готовую энциклопедию, там есть пометки, для понимания, как это всё работает, тут объясню чуть подробней. Адаптация: С другими модами (и с оригиналом) конфликтуют только два скрипта: _g.script и bind_stalker.script. В _g.script добавлены глобальные функции: function run_gui(gui, close_inv) --Функция для запуска GUI, в нашем случае, энциклопедии if close_inv == true then gui:ShowDialog(true) game_hide_menu() level.show_weapon(false) else gui:ShowDialog(true) end end function GetString(id) --Функция для инициализации имён if not(id) then return "" end return game.translate_string(id) end А в bind_stalker.script добавлен вызов скрипта, который отлавливает инфопоршень при открытии вкладки энциклопедии: function actor_binder:update(delta) gui_callbacks.on_info() --Вызов нашего "Ловчего поршней" object_binder.update(self, delta) ... Всё, адаптация пройдена - должна функционировать. А теперь - как этой с энциклопедией работать. Допустим, мы решили добавить нового мутанта - Тарк (Tark). Делается это так: Добавляем этого мутанта в таблицу мутантов, что в скрипте gui_main.script: local pda_enc_mutants={ "Mutant_boar", "Flesh", "Pseudo_flesh", "Tark", --Вот он "Bloodsucker", ... Теперь, от выбранного нами имени будет зависеть, как будет называться текстура-иконка, текст с описанием, название мутанта на "человеческом" языке (а не на машинном) и и название инфопоршня, при получении которого мы получим статью в энциклопедию. Текстура должна иметь следующее имя: ui_enc_#Имя мутанта# . Текст с описанием: enc_#Имя мутанта#. Название будет равно Имени мутанта. А инфопоршень будет "величаться": #Имя мутанта#_info. Для лучшей ориентации и унификации, подобная структура, описанная выше, будет актуальна и для мутанта и для группировок и для всего остального. Думаю, так будет лучше. Как я говорил ранее, инфопоршень нужно выдавать через что-либо: диалоги, награды за задания, "отловы" на то, что вы кого-то убили, либо некоторая вероятность получения поршня при обыске трупов. Парт-текстура, по умолчанию, читается из файла ui_pda_encyclopedia.dds. Если хотим добавить иконку, то нужно вставить в файл иконку (по умолчанию, она должна быть 165 на 107 пикселей, иначе будет растянута\сплющена), измерить её координаты по аналогии с прудыдущими и задать имя, как я уже описал выше. Описание и название указывается в фале configs\text\rus\st_notepad.xml. В принципе, можно вставить в другой файл, но лучше соблюдать порядок - вам же будет лучше. Всё, на этом я удаляюсь - пользуйтесь и указывайте авторов. Доброй Зоны, сталкеры. 2 2 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 17 Апреля 2014 (изменено) Работа с Sound_occluder.Примечание: искал (не очень тщательно) в интернете более-менее подробную инструкцию по Окклюдеру, но не нашёл. Пожалуй, черкну тут для чего он нужен и как его использовать.Итак, вы сделали тоннель под землёй, но не отдельной локацией, а как небольшое дополнение к другой, например, как у меня: Сделали, скомпилили локацию для пробы, но находясь в тоннеле мы слышим, как на асфальте плоти доедают бандюка, смачно чавкая и хрюкая, ещё гудение трансформатора в комнатушке, шум ветра от елей (если они являются статичным звуком на локации), а если мы на поверхности, то слышим, как в тоннеле шуршат крысы и скрепит, вращаясь, лампочка. Не порядок.Вот для этих целей и существуют и sound_occluder - для отсечения звуков, находящихся "по ту сторону" плоскости окклюдера. Это работает как для ГГ, так и для NPC. Можно сделать окклюдер в виде плоскостей, коробок и т.п. и в СДК расставлять так, как нужно, но в данном случае, геометрия сложная и с так плоскостями придётся повозиться, поэтому сделаем в 3д редакторе. Я этот тоннель делал в Милке, там буду делать и окклюдер. Вот:Кстати говоря, эту модель можно будет использовать и для HOM, для лучшей оптимизации.Теперь настроим Occluder (и HOM. если вы захотели поставить и её) в СДК: И ещё во вкладке Surface нужно указать параметр "2 Sided". Объект станет синим и полупрозрачным - значит, что Окклюдер готов, осталось разместить его в нужном месте.Для того, чтобы расположить окклюдер на том же месте ,что и наш тоннель, нам нужно скопировать (ctrl+c, ctrl+v) наш тоннель и, выбрав один из них, нажать Enter и в поле Reference заменить исходную модель на наш sound_occluder, должно получится так: Вот и всё, теперь на локации будут отсекаться звуки, проигрываемые за окклюдером, но не все!Sound_occluder в сталкере не отсекает ambient (окружение), так как эти звуки проигрываются в позиции ГГ. Так же не отсекаются все собственные звуки ГГ, что логично. Так же окклюдер в сталкере не совершенен: в реальности, если мы находимся в том же тоннеле, то звук мы бы слышали, но тихо и со стороны выхода из него, а вот в сталкере мы не будем слышать ничего. Так же и с NPC - сли за стеной с окклюдером будет хрюкать кабан, то NPC его не услышит. Да и мы тоже...Ссылка на скачивание архива со статьёй+иллюстрации: https://yadi.sk/d/vC18bUaZX5c7X Изменено 19 Сентября 2014 пользователем World_Stalker оформил 3 2 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 9 Марта 2015 Создание LOD статических объектов. Первый видеоурок. На днях решил сделать ЛОД этой самой цистерны, да не сразу вспомнил, что для него надо делать. Сравнил с оригинальными ЛОДами и решил и себе, и другим памятку сделать. Советы\пожелания лучше в личку, чтобы тут тему не засорять. 2 3 2 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 8 Апреля 2015 (изменено) По просьбам трудящихся... Создание играющего магнитофона\радио для ЗП. 0. Первый пункт - если вы будете складывать секции звуков в отдельный файл. Если добавляете в уже имеющийся (например, script_sound_zaton) - переходите к пункту 2. 1. Сначала мы зарегистрируем наши звуки. Для этого пройдём в configs\misc\script_sound.ltx и сделаем регистрацию нашего нового файла с музыкой (можно сделать в уже существующем). Для этого после строки: #include "script_sound_underpass.ltx" Вставим нашу регистрацию нового файла: #include "script_sound_bar.ltx" ;Допустим, я работаю с локацией Бар - поэтому, _bar, но названия могут быть и произвольными А также добавим наш файл в лист: [list]: list_music_and_stories, list_script_sound_zaton, list_script_sound_jupiter, list_script_sound_pripyat, list_script_sound_underpass, list_script_sound_bar ;Вот он: последний в списке 2. Зарегистрировали, перейдём к файлу, для этого создадим его под именем list_script_sound_bar (новый текстовый документ -> сменить имя и расширение на .ltx). Наполняем: [list_script_sound_bar] ;Имя с секциями звуков в этом файле bar_music_main [bar_music_main] ;Конкретно секция нужного нам звука type = 3d npc_prefix = false path = music\radio\bar_main_ ;Путь до наших звуков shuffle = rnd idle = 2,4,100 Подробно о настройке можно (и нужно) почитать вот эту хорошую статейку: http://stalkerin.gameru.net/wiki/index.php?title=CoP._Разбор_звуковых_конфигов_в_script_sound_*** 3. Соответственно, в папку sounds\music\radio положим файлы в формате .ogg с именем bar_main_<Номер_звука>. Со звуками закончили, теперь надо создать логику для объекта, который будет проигрывать наши звуки. 4. Идём в папку configs\scripts\bar (как вы помните, имя папки bar у каждого будет своя) и создаём там файл bar_a1_radio.ltx. Наполним его: [logic] active = ph_sound@idle [ph_sound@idle] sound = bar_music_main Также подробнее про схему ph_sound можно почитать тут: http://stalkerin.gameru.net/wiki/index.php?title=Настройка_логики._Часть_4 Дело за малым, нужно создать само радио. 5. Тут уж, кто как: кто в all.spawn добавлять секцию будет, кто в СДК. 5.1. All.spawn [49] ; cse_abstract properties section_name = physic_destroyable_object name = bar_radio position = -141.697998046875,-22.3415851593018,-353.995544433594 :Позиция, вертексы, направление - это вы знаете direction = -1.70000002981396e-005,3.14159202575684,0 ; cse_alife_object properties game_vertex_id = 1407 distance = 0 level_vertex_id = 747615 object_flags = 0xffffff3a custom_data = <<END [logic] cfg = configs\scripts\bar\bar_a1_radio.ltx ;Путь до логики END ; cse_visual properties visual_name = dynamics\el_tehnika\radio ;Путь до визуала ; cse_ph_skeleton properties ; cse_alife_object_physic properties physic_type = 0x3 mass = 3 fixed_bones = link ;кость, которая будет зафиксирована, чтобы не утащили 5.2. СДК 6. Последний штрих - нужно вернуть в ЗП схему проигрывания звуков объектами - она в оригинале отключена за ненадобностью. Идём в scripts\modules.script и после строки №60 (ph_oscillate) пишем load_scheme("ph_sound", "ph_sound", stype_item) Скрипт схемы нужно создать и заполнить его таким содержимым: --[[ Сталкер Лом Чуть переделал схему: * Настроил на проигрывание звуков из ltx файла - так привычнее. * Соответственно, теперь не надо указывать в секции логики тип звука - берётся из ltx файла 19.02.14 ]] class "snd_source" function snd_source:__init (obj, storage) self.object = obj self.st = storage self.destructed = false end function snd_source:reset_scheme(loading) self.last_update = 0 self.st.signals = {} self.played_sound = nil self.first_sound = true self.st.pause_time = 0 self.st.sound_set = true if loading == false then self.destructed = false else self.destructed = xr_logic.pstor_retrieve (self.object, "destr") end end function snd_source:save () xr_logic.pstor_store (self.object, "destr", self.destructed) end function snd_source:hit_callback(obj, amount, local_direction, who, bone_index) if self.st.no_hit == true then return end printf ("SOUND SOURCE HAVE A HIT") local who_name if who then who_name = who:name() else who_name = "nil" end printf("_bp: snd_source:hit_callback obj='%s', amount=%d, who='%s'", obj:name(), amount, who_name) if self.played_sound ~= nil then self.played_sound:stop () self.played_sound = nil end self.destructed = true end function snd_source:update(delta) if self.destructed == true then return end if xr_logic.try_switch_to_another_section (self.object, self.st, db.actor) then return end if self.st.pause_time - device ():time_global () > 0 then return end self.st.pause_time = 0 if self.st.sound_set == true then self.st.sound_set = false --[[ if self.st.random then self.played_sound = xr_sound.get_sound_object(self.st.theme, "random") elseif self.st.looped then self.played_sound = xr_sound.get_sound_object(self.st.theme, "looped") else self.played_sound = xr_sound.get_sound_object(self.st.theme, "seq") end ]] self.played_sound = xr_sound.set_sound_play(self.object:id(), self.st.theme) if self.played_sound ~= nil then self.played_sound:play_at_pos (self.object, self.object:position ()) else self.st.signals["theme_end"] = true end self.first_sound = false end if self.last_update == 0 then self.last_update = device ():time_global () else if device ():time_global () - self.last_update > 50 then self.last_update = 0 else return end end if self.played_sound ~= nil then if self.played_sound:playing () == false then if self.first_sound == false then self.st.signals["sound_end"] = true end self.st.sound_set = true if self.st.pause_min ~= 0 or self.st.pause_max ~= 0 then local time = math.random (self.st.pause_min, self.st.pause_max) self.st.pause_time = device ():time_global () + time end self.first_sound = false else self.played_sound:set_position (self.object:position ()) end end end function snd_source:deactivate () if self.played_sound ~= nil then self.played_sound:stop () self.played_sound = nil end end function add_to_binder (npc, ini, scheme, section, storage) local new_action = snd_source (npc, storage) -- Зарегистрировать все actions, в которых должен быть вызван метод reset_scheme при изменении настроек схемы: xr_logic.subscribe_action_for_events(npc, storage, new_action) end function set_scheme(npc, ini, scheme, section, gulag_name) local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section) st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc) st.theme = utils.cfg_get_string(ini, section, "sound", npc, false, "") -- st.looped = utils.cfg_get_bool (ini, section, "looped", npc, false, false) -- st.random = utils.cfg_get_bool (ini, section, "random", npc, false, true) st.pause_min = utils.cfg_get_number (ini, section, "min_idle", npc, false, 0) st.pause_max = utils.cfg_get_number (ini, section, "max_idle", npc, false, 0) st.no_hit = utils.cfg_get_bool (ini, section, "no_hit", npc, false, true) if st.pause_max < st.pause_min then abort ("PH_SOUND - invalid time range !!!") end end Это чуть правленая мною схема, чтобы можно было использовать звуки из ltx файлов, как это принято в ЗП. Вот, собственно, и всё. Да, конечно, есть урок из поста 42, но каждый раз править скрипт, добавляя\убирая звуки - не гуд, а вот делать всё через ltx файлы гораздо удобнее. Стандартизация, так сказать. В общем, кому что, а мне так сподручнее, может быть и вам будет лучше. Изменено 8 Апреля 2015 пользователем Сталкер Лом 2 2 2 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 29 Апреля 2015 Создание LOD динамических объектов. Пожелания, критика приветствуется 4 3 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 30 Мая 2018 17 часов назад, Den “Angry Wolf” Koslov сказал: ...хотелось бы узнать, что именно было изменено проектом xray extentions в исходном коде игры В дополнении к тому, что я вам черканул в ЛС Сам я правку не смотрел, но, предполагаю, что в движке подправились данные о количестве правок и, по большому счёту, всё. Эти правки очень старые. Может быть, сегодня уже есть что-то посерьёзнее увеличения количества (а не функционала) вкладок, но я не знаю - давно уже этой темой не интересовался. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение
Сталкер Лом 357 Опубликовано 1 Февраля 2019 Просьба к куратору темы заменить в этом посте ссылку на энциклопедию. Вот: https://yadi.sk/d/OzLu-NeoeAFaY 1 1 Работы на Artstation - https://www.artstation.com/artist/stalker_lom Поделиться этим сообщением Ссылка на сообщение