Перейти к содержанию

Рекомендуемые сообщения

 
 

warezeater а скинь какую-нибудь заценить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
19 часов назад, macron сказал:

 

shadept Попробуй прогой отсюда: https://ap-pro.ru/forums/topic/3577-object-editor-v395/page/4/

Загрузи туда как object, заранее в Settings выстави предустановки для SoC и экспортируй в ogf.

Тоже самое. Может я спрошу Pavel_Blend-а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, macron сказал:

warezeater а скинь какую-нибудь заценить.

mtl_walls9_bump.dds

Отсюда: https://ap-pro.ru/forums/topic/1283-stalker-two-k-paket-tekstur/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

warezeater так она и так уже зеленая.🤢

Изменено пользователем macron

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
10 часов назад, macron сказал:

warezeater так она и так уже зеленая.🤢

Я решил, что нужен пример.

А искомая текстура, требующая переделки, слишком большая -- из-за ограничений на размер файла сюда сложно прикрепить что-то внятное. Ладно уж.

Нашёл боле-менее рабочий алгоритм: 

Только здесь всё вручную и нужно долго подбирать настройки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

warezeater есть генератор бампов сталкерских, попробуй его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
25 минут назад, Invincible сказал:

warezeater есть генератор бампов сталкерских, попробуй его.

Это, возможно, то, что я ищу. А где он есть-то? Ссылка?

Я находил один, Bump_map_creator v0.1 от Скарабея, но он под старую версию Фш, у меня не заработал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

warezeater тема автора вроде слетела, но тут что-то должно быть. Если не найдешь, я тебе потом запакую со своего компа. https://gitlab.com/i-love-kfc/bump-generator

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
19 минут назад, Invincible сказал:

Если не найдешь, я тебе потом запакую со своего компа. https://gitlab.com/i-love-kfc/bump-generator

Спасибо! Боюсь, мне понадобится инструкция, как этим пользоваться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

warezeater там все слишком просто, чтобы запускать инструкцию. (Не обращайте внимание на то что выделено жёлтым)

Просто закидываете то что есть в папку с программой и выбираете нужные настройки.

unknown-6.png

  • Жму руку 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
38 минут назад, Invincible сказал:

Просто закидываете то что есть в папку с программой и выбираете нужные настройки.

В папку с какой программой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
15 минут назад, warezeater сказал:

В папку с какой программой?

с той, что скинули выше
 

 

3 часа назад, Invincible сказал:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Invincible  припоминаю, когда форум еще не откатился, писали, что прога криво какие-то бампы создавала, серым что ли просто заливала?

Изменено пользователем macron

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

macron да, я тоже с ней не справился. Но автор говорил, что у него все работает. Я и подумал, что дело во мне)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Как изменить clip distance оружия в ТЧ? Вот что у меня получаеться:spacer.png


Дополнено 2 минуты спустя
В 25.10.2022 в 00:53, macron сказал:

Дополнено 5 минуты спустя

shadept Попробуй прогой отсюда: https://ap-pro.ru/forums/topic/3577-object-editor-v395/page/4/

Загрузи туда как object, заранее в Settings выстави предустановки для SoC и экспортируй в ogf.

Короче, я теперь знаю в чём возможно дело - когда я убираю анимации модельку видно нормально. Я изменил её размер чтобы игра её не обрезала в поле зрения. Могу кинуть ссылку dropbox на модельку. Анимации в СДК тоже идут норм без проблем и всё только в игре не так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

вылетает с таким логом:
 

Спойлер

FATAL ERROR

[error]Expression    : FATAL ERROR
[error]Function      : CModelPool::Instance_Create
[error]File          : F:\Repos\OGSR-Engine\ogsr_engine\Layers\xrRender\ModelPool.cpp
[error]Line          : 75
[error]Description   : Unknown visual type

 


ещё может быть такое:

 

Спойлер

FATAL ERROR

[error]Expression    : FATAL ERROR
[error]Function      : dxRender_Visual::Load
[error]File          : F:\Repos\OGSR-Engine\ogsr_engine\Layers\xrRender\FBasicVisual.cpp
[error]Line          : 58
[error]Description   : Invalid visual
 


вылет при НИ, рандомный, может вообще не быть

есть вариант узнать кто это может быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
7 часов назад, macron сказал:

припоминаю, когда форум еще не откатился, писали, что прога криво какие-то бампы создавала, серым что ли просто заливала?

Проверил, подтверждаю -- bump# на выходе просто серая заливка.

  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
  • Жму руку 1

EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Кто подскажет как исправить респавн бандитов на Кордоне, в ДТ, на Свалке при каждом перезаходе на локацию. Совет Kolmogor с правкой se_respawn.script не помогает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

есть гайд по нетпакетам? с примерами использования?

  • Лайк 1

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 Есть модуль m_netpk, там всё более-менее понятно, но работает не совсем корректно, а бывает и не работает вовсе.

Спойлер

Интерфейс чтения/записи net-пакетов (SHoC:6/7(118),CS:8(124),SCoP:12(128))
m_netpk.script
==============================================================================================
 "Правильная" работа с нет-пакетами. (© xStream)
------------------------------------------------
    Интерфейс работы с классами нет-пакетов:

    0) Что это вообще такое и с чем едят?
    0.1) 'Нет-пакет' (net_packet) - это специальный объект (бинарный буфер), который содежит информацию,
        которой серверные объекты в игре обмениваются со своими клиентскими копиями, изменяя соответствующие параметры/свойства друг-друга.
        Позиция в пространстве, поворот, текущий режим стрельбы у оружия и т.п.
        Просто так эта информация не доступна стандартныи средствами из скриптов.
    0.2) Нет-пакет для каждого объекта в игре имеет две части/типа, независимых друг от друга: 'state' и 'update'.
        Возможна работа с каждым типом по отдельности или с обоими вместе.
    Все, что представлено в этом модуле (скрипте) - специальные классы,
    которые позволяют организовать ПРОСТОЙ доступ к этим данным и, в случае надобности, их изменять.
    Итак...

    1) Сначала необходимо создать объект необходимого класса, передав серверный или клиентский объект:
        В случае интеграции модуля в глобальную таблицу скриптов (модуль инициализирован):
        а) local pk = get_netpk(obj,flag) -- по классу переданного объекта будет автоматически подобран нужный класс нет-пакета.
        При прямых обращених к модулю и/или классу пакета:
        б) local pk = m_netpk.get(obj,flag) -- аналогично а).
        в) local pk = m_netpk.net_XXXXXX(obj,flag) -- указываем КОНКРЕТНЫЙ класс требуемого пакета, как подобрать, см. ниже

        Использование дополнительного аргумента (flag) при вызове модуля позволяет использовать один из трех вариантов получения типов пакетов
        для любого объекта игры или получить доступ к управлению специальным пакетом:
        а) flag: nil (опущен) - 'полный' пакет, т.е. оба типа пакетов 'state' и 'update' в едином объекте (нет-пакете);
        б) flag: 1 - пакет типа 'state';
        в) flag: 2 - пакет типа 'update'.
        г) flag: 0 - пакет для управления свойствами 'abstract' (об этом ниже);
        Учитывая, что в большинстве модификаций игры используется в основном работа со свойствами из 'state' пакетов,
        гонять в холостую коды обработки получения изменения и записи полного пакета (с 'update' частью) - расточительно.

    1.1) Чтобы узнать, все ли прошло хорошо, можно вызвать pk:isOk(), он вернет true, если класс пакета успешно создан. false - в случае неудачи.

    1.2) Все прочитанные/записываемые свойства (параметры) пакета расположены в таблице data (см. п.2).
        Если класс пакета содержит тип 'update' - все свойства этого пакета расположены в суб-таблице data.upd.

    1.3) Имеется возможность:
        Даже если пакет не создался правильно, можно это проигнорировать, так как функция возвращает специальный пакет net_dummy,
        с ним можно производить те же операции, что и с остальными, только просто он ничего не делает.
        Зачем он нужен? Он полезен при условных обработках пакетов.
        Пример:
        local pk = m_netpk.net_se_monster(obj,2)
        if not pk:isOk() then
            pk = m_netpk.net_se_stalker(obj,2)
        end
        local data = pk:get()
        data.upd.health = health -- свойство в 'update' пакете
        pk:set(data)

        Здесь НЕ проверяется, правильный ли пакет получился, когда и НЕ монстр и НЕ сталкер.
        Потому что в результате получаем net_dummy и работаем как с обычным пакетом.
        Меньше кода и проверок. Но злоупотреблять этим свойством не рекомендуется.
        Используйте лучше isOk() в критичных на ошибки местах. (Код, приведенный в примере, станет понятен ниже)

    2) Чтение данных из пакета:
        local data = pk:get() -- в результате получаем таблицу, содержащую ВСЕ свойства объекта (в зависимости от запрошенных типов!)
                              -- напоминание: все свойства пакета 'update' расположены в суб-таблице data.upd

    3) Меняем нужные нам свойства:
        data.xxx = yyy -- простое присваивание значения нужному элементу таблицы
    3.1) Для некоторых сложных свойств (custom_data, shapes, ...) имеются встроенные классы со своим интерфейсом доступа/изменения.
        Пример:
        local tbl = data.custom_data:getTable() -- получения массива из строки кастом-даты
        local status = data.custom_data:setTable(tbl) -- запись таблицы в строку кастом-даты с возможностью контроля выполнения
        Более подробная информация о классах custom_data и shapes приведена ниже.
    3.2) Если мы не знаем, какие свойства есть у объекта, то используем функцию:
        local description = pk:dumpDesc() -- возвращает строку, содержащую читабельное описание пакета (его можно, например, вывести в лог)

    4) После изменения, данные записываем в собственно нет-пакет объекта:
        pk:set(data)

    5) А все 🙂 Работа сделана.
        Дополнительный профит: такие "пакеты" - это объекты, их можно передавать в разные функции, хранить в таблицах и т.д.
        Они "помнят", с каким игровым объектом они связаны.

    6) Существует специальный пакет 'abstract', о котором читаем ниже.

=======================================================================
    -- Если требуется работать с объектом 'напрямую', т.е. с конкретным классом, то узнать, какой класс использовать можно очень просто:
    1) смотрим секцию объекта
    2) идем в папку со спавном и открываем ACDC (или качаем его отдельно) скрипт в редакторе
    3) листаем в конец - там есть сопоставление "секция -> пакет"
    4) смотрим пакет, добавляем префикс 'net_'
    Все.
    ----------------------
    Пример:
    В АСДС нашли
        physic_object => 'cse_alife_object_physic',

    Значит, чтобы получить обертку для работы с пакетом надо сделать так:

        local pk = m_netpk.net_cse_alife_object_physic(obj)
        local data = pk:get() -- прочитали пакет
        ...                   -- тут изменили данные
        pk:set(data)          -- записали пакет обратно

=======================================================================
    Про специальный нет-пакет 'abstract':
    Библиотека может работать с абстрактной частью пакета, которая доступна ТОЛЬКО в момент выхода объекта в онлайн или сохранении.
    Поэтому напрямую (методами set и get) прочитать и записать такие данные нельзя.
    Для чтения и/или изменения используется специальный пакет 'net_abstract'.
    Хотя принцип работы отличается от работы остальных классов, но все же очень похож. Исключение составляет то, как изменять данные в пакете.
    Рассмотрим сразу на примере:
        а) создаем объект в игре:
        local obj = alife():create("exo_outfit", pos, lv, gv)
        б) получаем служебный пакет, которым будем менять свойства:
        local pk = m_netpk.get(obj,0) -- или m_netpk.net_cse_abstract(obj)
        в)
         вариант-1: используем функцию:
        pk:setCallback( function(data)
            data.direction = vector():set(1,1,1)
        end )
         вариант-2: задаем желаемые изменения таблицей:
        pk:setCallback( {direction = vector():set(1,1,1)} )

    Здесь мы создали объект и захотели изменить его абстрактную часть.
    Мы указали пакету коллбек, который будет передан основному коллбэку, будучи вызванам как только станет доступна абстрактная часть объекта.
    В колбек передается таблица с параметрами пакета, мы можем смело их менять, в примере мы наклонили объект по всем осям на 1 радиану.
    При спавне нового игрового объекта:
     изменения вступят в силу, как только мы выйдем из текущей скриптовой работы и управление вернется движку - он создаст объект и начнет записывать в него параметры.
    Для уже существующих объектов в игре:
     требуется после задания изменений свойст объекта, перевести объект в оффлайн и обратно в онлайн, что модулем делается автоматически.
     Изменения вступят в силу в момент выхода объекта в онлайн.

    Как получить возможность менять абстрактную часть пакетов?

    1) этот тип объектов должен иметь класс, который представляет такой тип объектов в игре (можно назвать биндером, а можно никак не называть)
        (то есть то, что будет вызвано, когда объект появится в игре)
        Завязка из class_registrator.script:
        cs_register (object_factory, "CStalkerOutfit", "se_item.se_outfit", "E_STLK",    "equ_stalker_s")

    2) обязательно добавить (если таковой отсутствует) метод биндера 'STATE_Write' (см. скрипты типа: 'se_XXX.script')
        Для примера с костюмом:
        function se_outfit:STATE_Write(packet)
            cse_alife_item_custom_outfit.STATE_Write(self, packet)
        end

    3) В метод STATE_Write (см. выше) добавить строку:
        function se_outfit:STATE_Write(packet)
            if self.cb_netpk then self.cb_netpk(self, packet) end -- коллбэк для изменения свойств пакета
            cse_alife_item_custom_outfit.STATE_Write(self, packet)
        end

    Выполнение этих действий ОБЯЗАТЕЛЬНО.
    Зачем это нужно? Ну, например, можно поменять дирекшн или позишн, так как это read_only свойства объектов.
    А позишн при спавне смещается так, чтобы объект находился на ИИ сетке.
    То есть, можем спавнить всякие там лампочки, физические объкты так, чтоб они оказывались повернутыми в пространстве.
    Так же можно менять те свойства, которые, обычно, только для чтения. Например story_id, или position

=======================================================================
    Дополнительно - классы шейпов, комплексные шейпы состоят из пачки простых
    Шейпы бывают сферические и параллелепипеды.
    Сфера задается радиусом(число с запятой) и центром(смещение, вектор), параллелепипед - 4-мя векторами:
    три вектора (три ребра: длина, ширина, высота; можно делать, получается, "косые" параллелепипеды) и смещение
    Пример:
        data.shapes:addSphere(10):addSphere(5, vector():set(10,0,0))
    Это пример работы с левелченджером, в свойстве shapes находится complex_shape, добавляем две сферы,
    первая - с радиусом 10 м, вторая - с радиусом 5 м и смещенным центром.

=======================================================================
    Дополнительно - класс custom_data
    Для свойства custom_data поддерживается работа как с "сырой" строкой, так и с представлением её в виде таблицы.

    Если в конфигурационном файле m_netpk.ltx установлена настройка disable_convert_custom_data = true
    ("отключить конвертирование 'custom_data' из строки в таблицу (и обратно)", не рекомендуется к использованию из-за глобальности своего действия),
    свойство data.custom_data после чтения пакета (pk:get()) представляет собой простую строку.
    Изменение её значения осуществляется также присвоением простой строки.
    Пример:
    data.custom_data = "[logic]\nactive = remark\n[remark]\nanim = guard\nmeet = default_meet"

    Если в конфигурационном файле m_netpk.ltx установлена настройка disable_convert_custom_data = false (по умолчанию),
    свойство data.custom_data представляет собой экземпляр класса, данные в котором записаны в таблицу,
    полученную преобразованием из строки при чтении пакета.
    Однако при таком преобразовании в таблицу попадают только те данные, которые соответствуют формату ini:
    [section]
    key = value
    В некоторых модификациях в кастом-дату записываются не только данные формата ini, но и произвольная текстовая информация.
    Для сохранения возможнсти работы с этой информацией экземпляр класса хранит в себе не только "очищенную" от неформатных данных таблицу,
    но также, параллельно, полную "сырую" строку. Для работы с этой полной строкой предусмотрен ряд методов класса.
    Ниже представлен полный список публичных методов класса custom_data.
    data.custom_data:getTable() - возвращает таблицу, полученную конвертированием строки кастом-даты при чтении пакета. Данные не в формате ini игнорируются.
    Пример полученной таблицы:
    {
        ["logic"] = {
            ["active"] = "remark"
        },
        ["remark"] = {
            ["anim"] = "guard",
        ["meet"] = "default_meet"
        }
    }
    data.custom_data:getString() - возвращает генерированную из таблицы строку. Пример:
    "[logic]\nactive = remark\n[remark]\nanim = guard\nmeet = default_meet"
    data.custom_data:getStringRaw() - возвращает текущую "сырую" (полную) строку, полученную при чтении пакета. Пример (список секций артефактов в контейнере):
    "af_medusa,af_cristall_flower,af_night_star,af_vyvert"
    data.custom_data:setTable(tbl) - записывает новую таблицу в свойство экземпляра класса; генерирует "сырую" строку по этой таблице (предыдущая строка перезаписывается); устанавливает приоритет записи в пакет по таблице.
    data.custom_data:setString(str) - конвертирует строку в таблицу с одновременной фильтрацией данных не формате ini и записывает в свойство экземпляра класса; записывает эту же строку в "сырую" строку как есть, без фильтрации; устанавливает приоритет записи в пакет по таблице.
    data.custom_data:setStringRaw(str) - таблицу не трогает; записывает строку в "сырую" строку как есть, без фильтрации; устанавливает приоритет записи по "сырой" строке.
    data.custom_data:useStringRaw(mode) - если mode имеет значение, и это значение типа boolean - принудительно устанавливает режим приоритета "сырой" строки (true) или таблицы (false), в противном случае просто возвращает текущий режим.

    Надо иметь в виду, что после чтения данных из пакета свойство data.custom_data по умолчанию всегда имеет приоритет записи по таблице,
    то есть данные не в формате ini по умолчанию будут отфильтрованы.
    Если при работе с пакетом некоторого объекта изменение свойства data.custom_data не предполагается, но при этом известно,
    что оно может содержать данные не в формате ini (например, мы работаем с упомянутым выше контейнером артефактов),
    следует принудительно признак приоритета "сырой строки". Пример:
    local pk = get_netpk(sobj) --/ запрос нет-пакета
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
        local data = pk:get() --/ читаем данные из нет-пакета
        data.custom_data:useStringRaw(true) --/ устанавливаем приоритет "сырой" строки
        -- ... --/ проводим другие действия над пакетом, не связанные с изменением кастом-даты
        pk:set(data) --/ записываем изменения
    end

=======================================================================
    Заметки:
    - Версии нет-пакетов: ТЧ/ЧН/ЗП (SHoC/CS/SCoP), патч для ТЧ: 1.0004 и выше.
    - Позволяет максимально повторить работу утилиты ACDC, и правильную структуру пакета.
    - Легко расширяется, почти что копипастом, данных из скрипта ACDC.
    - Конфиг файл позволяет легко (в тектовом режиме) добавлять/изменять новые классы игровых объектов.
    - С целью автономности работы, некоторые сторонние функции (хелперы) включены в код модуля.
    - Встроен автоматический перевод объектов из он-лайна в офф-лайн и обратно при изменении свойств секции 'abstract'.
    - Наименования некоторых свойств в классах объектов, которые отличаются от имен в текущих версиях ACDC:
    (ACDC -> netpk)

    'cse_abstract'
      unknown_id -> object_id

    'cse_ph_skeleton'
      bone_count -> bones_count

    'se_respawn'
      spawned_obj -> spawned_ids

    Важно! Прямая запись пакетов для классов: se_smart_terrain и se_sim_faction в игре невозможно. Требуется правка скриптов, т.к.
    при записи пакетов происходит переинициализация объекта заново с чтением конфигов и пр. Т.о. необходимо блокировать переинициализацию
    объекта при перезаписи его пакета.

=======================================================================
Подключение модуля в модификациях игры:

1) Скопировать m_netpk.script в папку скриптов установленной игры.
2) Скопировать m_netpk.ltx в папку конфигов игры (Внимание! Имя папки для CS/SCoP - 'configs').
3) (опционально) Для возможности использовать короткое имя 'get_netpk' для вызовов из различных скриптов:
   Подключить первичную инициализацию модуля при старте игры для чего в скрипте _g.script
   дописать строку в конце функции 'start_game_callback':

   function start_game_callback()
     ...
     m_netpk.attach() -- инициализация модуля
    end

   ... или выполнить аналогичное при помощи функционала сэндбокса или его аналога.
=======================================================================
   Благодарности:
    Особая благодарность xStream, за идею (ООП+классы) и исходные коды, которые составляют более половины всего модуля.
==============================================================================================
--- Примеры использования:

function test_netpk()
    local spawn_section = "exo_outfit"
    local pos,dir = db.actor:position(),db.actor:direction()
    local lvid,gvid = db.actor:level_vertex_id(),db.actor:game_vertex_id()
    local sobj = alife():create(spawn_section, pos:add(dir), lvid, gvid)
    local pk = get_netpk(sobj) --/ запрос нет-пакета ('full')
    if pk:isOk() then --/ получен доступ к нет-пакету объекта?
        local data = pk:get() --/ читаем данные из нет-пакета
    end
    --
    spawn_section = "wpn_ak74"
    sobj = alife():create(spawn_section, pos:add(dir), lvid, gvid)
    local pk = get_netpk(sobj,0) --/ m_netpk.net_cse_abstract(sobj)
    if pk:isOk() then
        --/ var-1: function
        local func = function(data)
            data.direction = vector():set(1,1,1) --/ изменение параметра в 'cse_abstract'
        end
        local status = pk:setCallback(func)
        --[[ --/ var-2: table
        local params = { ["direction"] = vector():set(1,1,1) }
        local status = pk:setCallback(params)
        --]]
    end
end

function test_abstract()
    --/ Переносим вентилятор из каморки Сидоровича на тумбочку в подвальчике деревни новичков (на Кордоне)
    local sobj = alife():object("trader_ventilyator_0000") --/ находим в игре серверный объект вентилятора
    if sobj then --/ нашли?
        local pk = get_netpk(sobj,0) --/ или m_netpk.net_cse_abstract(sobj)
        if pk:isOk() then
            local vPos = vector():set(-212.8,-22.28,-127.20) --/ координаты 'на тумбочке в подвальчике'
            local vDir = vector():set(0,3.14,0) --/ направление: 'лопастями от стены'
            --/ var-1: установка колбэка с таблицей
            local status = pk:setCallback( { position = vPos, direction = vDir } )
            --[[ --/ var-2: установка колбэка с функцией
            local status = pk:setCallback( function(data)
                data.position  = vPos --/ change property 'position' in 'cse_abstract'
                data.direction = vDir --/ change property 'direction' in 'cse_abstract'
            end )
            --]]
        end
    end
end
==============================================================================================
Artos (09.10.2013)
Дополнено: Kirgudu (12.05.2017)
 

 

  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Доброго времени суток. Подскажите, пожалуйста, как сделать чтобы у монстров было по несколько трофеев(например рука контролёра и мозг). Заранее спасибо за ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Олег Олег в оригинале только спавнить в тушку после смерти

Изменено пользователем M31

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Не знаю та тема или нет, но напомните, как называется файл в папке sounds с записью тишины?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
26 минут назад, boy_next_door сказал:

как называется файл в папке sounds с записью тишины?

$no_sound.ogg - нет. A weapons\draw_silent.ogg подойдет лучше

Изменено пользователем Enframed
  • Спасибо 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн