Overf1rst 1 490 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 909 Опубликовано 25 октября, 2022 warezeater а скинь какую-нибудь заценить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
shadept 11 Опубликовано 25 октября, 2022 19 часов назад, macron сказал: shadept Попробуй прогой отсюда: https://ap-pro.ru/forums/topic/3577-object-editor-v395/page/4/ Загрузи туда как object, заранее в Settings выстави предустановки для SoC и экспортируй в ogf. Тоже самое. Может я спрошу Pavel_Blend-а. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 25 октября, 2022 1 час назад, macron сказал: warezeater а скинь какую-нибудь заценить. mtl_walls9_bump.dds Отсюда: https://ap-pro.ru/forums/topic/1283-stalker-two-k-paket-tekstur/ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 909 Опубликовано 25 октября, 2022 (изменено) warezeater так она и так уже зеленая.🤢 Изменено 25 октября, 2022 пользователем macron Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 26 октября, 2022 10 часов назад, macron сказал: warezeater так она и так уже зеленая.🤢 Я решил, что нужен пример. А искомая текстура, требующая переделки, слишком большая -- из-за ограничений на размер файла сюда сложно прикрепить что-то внятное. Ладно уж. Нашёл боле-менее рабочий алгоритм: Только здесь всё вручную и нужно долго подбирать настройки. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AfterGlow 565 Опубликовано 26 октября, 2022 warezeater есть генератор бампов сталкерских, попробуй его. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 26 октября, 2022 25 минут назад, Invincible сказал: warezeater есть генератор бампов сталкерских, попробуй его. Это, возможно, то, что я ищу. А где он есть-то? Ссылка? Я находил один, Bump_map_creator v0.1 от Скарабея, но он под старую версию Фш, у меня не заработал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AfterGlow 565 Опубликовано 26 октября, 2022 warezeater тема автора вроде слетела, но тут что-то должно быть. Если не найдешь, я тебе потом запакую со своего компа. https://gitlab.com/i-love-kfc/bump-generator Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 26 октября, 2022 19 минут назад, Invincible сказал: Если не найдешь, я тебе потом запакую со своего компа. https://gitlab.com/i-love-kfc/bump-generator Спасибо! Боюсь, мне понадобится инструкция, как этим пользоваться... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AfterGlow 565 Опубликовано 26 октября, 2022 warezeater там все слишком просто, чтобы запускать инструкцию. (Не обращайте внимание на то что выделено жёлтым) Просто закидываете то что есть в папку с программой и выбираете нужные настройки. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 26 октября, 2022 38 минут назад, Invincible сказал: Просто закидываете то что есть в папку с программой и выбираете нужные настройки. В папку с какой программой? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 088 Опубликовано 26 октября, 2022 15 минут назад, warezeater сказал: В папку с какой программой? с той, что скинули выше 3 часа назад, Invincible сказал: https://gitlab.com/i-love-kfc/bump-generator Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
macron 909 Опубликовано 26 октября, 2022 (изменено) Invincible припоминаю, когда форум еще не откатился, писали, что прога криво какие-то бампы создавала, серым что ли просто заливала? Изменено 26 октября, 2022 пользователем macron Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AfterGlow 565 Опубликовано 26 октября, 2022 macron да, я тоже с ней не справился. Но автор говорил, что у него все работает. Я и подумал, что дело во мне) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
shadept 11 Опубликовано 26 октября, 2022 Как изменить clip distance оружия в ТЧ? Вот что у меня получаеться: Дополнено 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 на модельку. Анимации в СДК тоже идут норм без проблем и всё только в игре не так. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
imcrazyhoudini 1 088 Опубликовано 26 октября, 2022 вылетает с таким логом: Спойлер 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 вылет при НИ, рандомный, может вообще не быть есть вариант узнать кто это может быть? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
warezeater 78 Опубликовано 26 октября, 2022 7 часов назад, macron сказал: припоминаю, когда форум еще не откатился, писали, что прога криво какие-то бампы создавала, серым что ли просто заливала? Проверил, подтверждаю -- bump# на выходе просто серая заливка. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WolfHeart 908 Опубликовано 27 октября, 2022 warezeater Bump и Bump# для игры Сталкер Создание bump карты Как я делаю bump 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DarkFace 257 Опубликовано 29 октября, 2022 Кто подскажет как исправить респавн бандитов на Кордоне, в ДТ, на Свалке при каждом перезаходе на локацию. Совет Kolmogor с правкой se_respawn.script не помогает Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 230 Опубликовано 29 октября, 2022 есть гайд по нетпакетам? с примерами использования? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Paracetamol 829 Опубликовано 29 октября, 2022 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Олег Олег 0 Опубликовано 29 октября, 2022 Доброго времени суток. Подскажите, пожалуйста, как сделать чтобы у монстров было по несколько трофеев(например рука контролёра и мозг). Заранее спасибо за ответ. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
N42 687 Опубликовано 30 октября, 2022 (изменено) Олег Олег в оригинале только спавнить в тушку после смерти Изменено 30 октября, 2022 пользователем M31 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
boy_next_door 7 Опубликовано 31 октября, 2022 Не знаю та тема или нет, но напомните, как называется файл в папке sounds с записью тишины? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Enframed 154 Опубликовано 31 октября, 2022 (изменено) 26 минут назад, boy_next_door сказал: как называется файл в папке sounds с записью тишины? $no_sound.ogg - нет. A weapons\draw_silent.ogg подойдет лучше Изменено 31 октября, 2022 пользователем Enframed 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты