Overf1rst 1 502 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Иван Иванвч 121 Опубликовано 17 августа, 2020 Как пофиксить проблему с тем что если величить переносимый вес комбеза то после 50 кг гг выдыхается? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Sh0tri 0 Опубликовано 19 августа, 2020 (изменено) Всем привет. Кто знает, как сделать часть текстуры прозрачной? Хочу сделать коллиматор, сделал текстуру сетки (залил изображение красным цветом, на альфа канале нарисовал саму сетку). В игре либо не учитывается альфа канал (весь прицел красный), либо при добавлении шейдеров на модель (и рабицу пробовал, и стекло) текстура полностью прозрачная. В SDK отображается все нормально. Кто подскажет, как правильно настроить текстуру? Спойлер Изменено 19 августа, 2020 пользователем Sh0tri Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ScR1pt 543 Опубликовано 22 августа, 2020 Можно ли перенести худ из нлс 7 в сталкер тч? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pir@t@s 0 Опубликовано 30 августа, 2020 Всем привет! У меня проблема с битьем quicksave. Установлена игра: S.T.A.L.K.E.R. - Тень Чернобыля v1.0006. Начинаю новую игру, делаю сохранения, выхожу. А при попытке загрузить сохранение ловлю вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ень Чернобыля\gamedata\scripts\dialog_manager.script:393: attempt to compare number with nil Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hunter 2 523 Опубликовано 30 августа, 2020 Pir@t@s ты не баловался, случаем, откатчиками версий, а потом до-обновлений до 1.0006? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pir@t@s 0 Опубликовано 30 августа, 2020 Нет. Сразу установил 6 патч. Но мне уже подсказали что проблема может быть в логике НПС. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Hunter 2 523 Опубликовано 30 августа, 2020 Pir@t@s оригинал-стабилен, по крайней мере, в начале, на Кордоне, так что, греши на свою пиратку. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Etil 8 Опубликовано 2 сентября, 2020 (изменено) Всем привет! Не подскажете, как правильно использовать amk функцию set_weapon_data? Какие переменные передавать при вызове и как корректно применить измененные параметры для ствола? Заранее спасибо. Спойлер function get_weapon_data(sobj) local stpk=net_packet() -- local uppk=net_packet() sobj:STATE_Write(stpk) -- sobj:UPDATE_Write(uppk) local size=stpk:w_tell() -- local size1=uppk:w_tell() -- amk.mylog("rsp "..size.." "..size1) stpk:r_seek(0) -- uppk:r_seek(0) local t={} parse_object_packet(t,stpk,size)--,uppk parse_visual_packet(t,stpk,size)--,uppk parse_item_packet(t,stpk,size)--,uppk parse_item_weapon_packet(t,stpk,size)--,uppk -- amk.mylog("rsp "..size.." "..size1.." "..stpk:r_tell()) return t end function set_weapon_data(t,sobj) local stpk=net_packet() fill_object_packet(t,stpk)--,uppk fill_visual_packet(t,stpk)--,uppk fill_item_packet(t,stpk)--,uppk fill_item_weapon_packet(t,stpk)--,uppk local size=stpk:w_tell() stpk:r_seek(0) sobj:STATE_Read(stpk,size) end function parse_item_weapon_packet(ret,stpk)--,updpk ret.ammo_current = stpk:r_u16() ret.ammo_elapsed = stpk:r_u16() ret.weapon_state = stpk:r_u8() ret.addon_flags = stpk:r_u8() ret.ammo_type = stpk:r_u8() --[[ret.updgrenade_mode = updpk:r_u8() ret.updcurrent_fire_mode = updpk:r_u8() ret.updcondition = updpk:r_u8() ret.updweapon_flags = updpk:r_u8() ret.updammo_elapsed = updpk:r_u16() ret.updaddon_flags = updpk:r_u8() ret.updammo_type = updpk:r_u8() ret.updweapon_state = updpk:r_u8() ret.updweapon_zoom = updpk:r_u8()]] return ret end function parse_object_packet(ret,stpk)--,updpk ret.gvid=stpk:r_u16() ret.obf32u1=stpk:r_float() ret.obs32u2=stpk:r_s32() ret.lvid=stpk:r_s32() ret.oflags=stpk:r_s32() ret.custom=stpk:r_stringZ() ret.sid=stpk:r_s32() ret.obs32u3=stpk:r_s32() return ret end function parse_visual_packet(ret,stpk)--,updpk ret.visual=stpk:r_stringZ() ret.vsu8u1=stpk:r_u8() return ret end function parse_item_packet(ret,stpk)--,updpk ret.condition=stpk:r_float() --[[ret.updnum_items=updpk:r_u8() ret.updpos={} -- или поставить вектор? ладно потом ret.updpos.x=updpk:r_float() ret.updpos.y=updpk:r_float() ret.updpos.z=updpk:r_float() ret.updcse_alife_item__unk1_q8v4=readvu8uN(updpk,4) ret.updcse_alife_item__unk2_q8v3=readvu8uN(updpk,3) ret.updcse_alife_item__unk3_q8v3=readvu8uN(updpk,3)]] return ret end function readvu8uN(packet,n) local v={} for i=1,n,1 do table.insert(v,packet:r_u8()) end return v end function fill_item_weapon_packet(ret,stpk)--,updpk stpk:w_u16(ret.ammo_current) stpk:w_u16(ret.ammo_elapsed) stpk:w_u8(ret.weapon_state) stpk:w_u8(ret.addon_flags) stpk:w_u8(ret.ammo_type) --[[updpk:w_u8(ret.updgrenade_mode) updpk:w_u8(ret.updcurrent_fire_mode) updpk:w_u8(ret.updcondition) updpk:w_u8(ret.updweapon_flags) updpk:w_u16(ret.updammo_elapsed) updpk:w_u8(ret.updaddon_flags) updpk:w_u8(ret.updammo_type) updpk:w_u8(ret.updweapon_state) updpk:w_u8(ret.updweapon_zoom)]] return ret end function fill_item_packet(ret,stpk)--,updpk stpk:w_float(ret.condition) --[[updpk:w_u8(ret.updnum_items) updpk:w_float(ret.updpos.x) updpk:w_float(ret.updpos.y) updpk:w_float(ret.updpos.z) -- readvu8uN(updpk,ret.updcse_alife_item__unk1_q8v4) -- было в оригинале -- readvu8uN(updpk,ret.updcse_alife_item__unk2_q8v3) -- единственное, что я поправил -- readvu8uN(updpk,ret.updcse_alife_item__unk3_q8v3) -- иначе вылетало writevu8uN(updpk,ret.updcse_alife_item__unk1_q8v4) writevu8uN(updpk,ret.updcse_alife_item__unk2_q8v3) writevu8uN(updpk,ret.updcse_alife_item__unk3_q8v3)]] return ret end function fill_object_packet(ret,stpk)--,updpk stpk:w_u16(ret.gvid) stpk:w_float(ret.obf32u1) stpk:w_s32(ret.obs32u2) stpk:w_s32(ret.lvid) stpk:w_s32(ret.oflags) stpk:w_stringZ(ret.custom) stpk:w_s32(ret.sid) stpk:w_s32(ret.obs32u3) return ret end function fill_visual_packet(ret,stpk)--,updpk stpk:w_stringZ(ret.visual) stpk:w_u8(ret.vsu8u1) return ret end function writevu8uN(pk,v) local len=table.getn(v) --pk:w_u8(len) for i=1,len,1 do pk:w_u8(v) end end Изменено 2 сентября, 2020 пользователем Etil Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nesteroid 8 Опубликовано 4 сентября, 2020 Всем йоу! Такая проблема: в моде Новый Арсенал 6.0 пытаюсь сделать карту локации (Х18) по инструкции "Создание текстуры локации для отображения на мини-карте и в PDA", но на ввод в консоли "demo_record 1" игра выдает "Command disabled". Пожалусто, подскажите как быть? Хочется получить правильный bound_rect, а то отображение героя на карте глобальной некорректное. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0ouch 143 Опубликовано 4 сентября, 2020 (изменено) Nesteroid, в моде правленный движок. Эта команда, судя по всему, была заблокирована разработчиком. Как вариант - можете попробовать с ним связаться, иначе Вам придется править карту вслепую. Изменено 4 сентября, 2020 пользователем Stgs 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nesteroid 8 Опубликовано 4 сентября, 2020 25 минут назад, Stgs сказал: Nesteroid, в моде правленный движок. Эта команда, судя по всему, была заблокирована разработчиком. Как вариант - можете попробовать с ним связаться, иначе Вам придется править карту вслепую. Спасибо! Я понял. Буду искать авторов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alterisimo 0 Опубликовано 9 сентября, 2020 Привет. Как создать тайник, содержимое которого доступно со старта игры? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 299 Опубликовано 9 сентября, 2020 (изменено) Alterisimo просто создай ящик(или рюкзак или бревно, не суть) в которой есть секция items, где укажи что и сколько тебе нужно. Возьми для примера любую секцию инвентарного ящика, где есть секция items. Изменено 9 сентября, 2020 пользователем oleg19966 1 Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
chelovechek 0 Опубликовано 17 сентября, 2020 Привет всем! Такая проблема: необходимо было вытаскивать данные из игры в отдельный файл, не связанный с игрой. На платформах ЧН и ЗП функция io. работает стабильно, однако в ТЧ выдает исключение, мол якобы переменная nil. В чем может быть проблема? и есть ли другой способ записи в файл? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Etil 8 Опубликовано 18 сентября, 2020 (изменено) Всем привет! Можно ли отследить тип урона, прошедшего по НПС? Хочу реализовать систему с выпадением уникального лута, в зависимости от того, в какой аномалии\от чьих рук умер НПС. И еще, как проверить, является ли "убийца"(who) монстром\человеком? Upd: Короче, полазил я по различным ресурсам, да файлы игры проверил. Похоже, что такой проверки нет. Впрочем, это не означает, что подобное вовсе невозможно. Подключаем креативность и ищем пути обхода. Я опишу то, что использовал сам (однако, без приведения кусков кода, чисто на всякий случай). Спойлер Для начала проверим, является ли убийцей ГГ. Тут все просто: в секции death_callback() в биндере НПС сталкеров (xr_motivator.script) есть переменная "who", то бишь кто завалил данного NPC. Туда же (для простоты, в начало) и вписываем следующее : if who:id() == db.actor:id() then - - - остальное ограничивает только ваша фантазия end Второе - аномалии. Через string.find() проверяем наличие ключевого слова в названии (конфиги всех аномалий начинаются на zone, либо энтое слово в них присутствует). Если хотим проверять различный тип урона - прописываем через elseif комбинации аномалий, которые имеют общий тип наносимых повреждений. Идем далее. Дальше у нас люди\монстры: тут могла бы сгодиться более простая проверка, но т.к. подобную функцию я не нашел, придется проверять по все тому же названию секции "убийцы", есть ли ключевые слова (фрагменты названий всех видов мутантов (ВАЖНО, именно видов, секции по типу boar_weak, boar_normal, boar_strong дублировать НЕ НУЖНО!!!)). Затем люди. Тут я проверял по костям, в какую область тела был нанесен урон, и уже исходя из этого писал последнюю часть скрипта. Если не нужно - просто оставляем через else как последний оставшийся вариант, т.к. больше никто бедного сталкера убить не мог. Проверка по костям, прописывать в секцию hit_callback() - - - Соответствие индексов костям взято с сайта amk_team, не бейте. Спойлер if bone_index > 0 and who:id() == db.actor:id() then if bone_index == 14 or bone_index == 15 then - - - глаз elseif bone_index == 16 or bone_index == 13 then - - - голова elseif bone_index == 17 then - - - шея elseif bone_index == 9 or bone_index == 10 or bone_index == 11 or bone_index == 18 then - - - грудь elseif bone_index >= 1 and bone_index <= 8 then - - - нога elseif bone_index >= 19 and bone_index <= 42 then - - - рука end end Хотите проверить, убил ли ГГ сталкера ножом? Без проблем, вот, вставлять в death_callback() if victim:position():distance_to_sqr(db.actor:position()) <= 5 * 5 and db.actor:active_slot() == 0 then - - - снова таки, ваш код end P.S.: по поводу проверки убийства ножом: максимальная дистанция от убитого до ГГ (у меня - 5*5) зависит от дальности действия вашего холодного оружия, ее можно как уменьшать, так и увеличивать. P.P.S: и да, не верьте system.ltx, где написано, мол, слот ножа - 1. Первый - слот пистолета, а у ножа он нулевой. P.P.P.S: Фух, чуть кони не двинул, пока это все писал. А, нет, не все еще. Я же про гранаты забыл (вдруг еще кому нужно). Мой вариант реализации: Спойлер Снова таки, кода не будет, только советы по реализации. Мб, сделано топорно, но работает. Начнем-с: вешаем на ваши гранаты новый биндер (как - гуглите, пояснять не буду). В секции ваш_биндер:net_destroy(), перед object_binder.net_destroy(self) проверяем, что ГГ существует и что он живой. ( вот так: if db.actor and db.actor.health ~= 0 then ). Если все гуд - устанавливаем таймер на 2 секунды (примерно столько, можно выставить на 2300-2400 миллисекунд, мне же хватает и двух тысяч), по окончанию таймера выдается инфопоршень, оповещающий, мол, граната взорвалась, а также запускается функция, которая через 1 секунду удаляет инфопоршень. Все, что убито ГГ за это время (1000 миллисекунд после взрыва), скрипт будет интерпретировать как смерть от гранаты. Как? Ставим на все том же death_callback() для сталкеров проверку на наличие инфопоршня, который мы выдали после взрыва. Изменено 19 сентября, 2020 пользователем Etil Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 20 сентября, 2020 (изменено) Как можно создать новую группу для статьей в журнале КПК? Дополнено 32 минуты спустя Как сделать вывод сообщения, о том что в КПК появилась новая статья. Изменено 20 сентября, 2020 пользователем Igor_Misery Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 21 сентября, 2020 Как исправляются вылеты с секциями террейнов? Expression : fatal error Function : CInifile::r_section File : .\Xr_ini.cpp Line : 342 Description : <no expression> Arguments : Can't open section 'stalker_monolith_terrain' Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 299 Опубликовано 21 сентября, 2020 Igor_Misery Исправляются правильным оформление секции террейна. Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 21 сентября, 2020 Только что, oleg19966 сказал: Igor_Misery Исправляются правильным оформление секции террейна. За это отвечает, какой-то конкретный .ltx файл? Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 299 Опубликовано 21 сентября, 2020 (изменено) Igor_Misery зависит от типа террейна. Если general_lager то там только all.spawn, а если уникальный террейн с работами, то там будет ещё как минимум 2 файла: 1-й в папке скрипт типа "название_локации_gulag.script" и плюс в папке misc, такой же файл только в расширении.Itx, хотя его может и не быть. Изменено 21 сентября, 2020 пользователем oleg19966 Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Misery 433 Опубликовано 21 сентября, 2020 (изменено) Только что, oleg19966 сказал: Igor_Misery зависит от типа террейна. Если general_lager то там только all.spawn, а если уникальный террейн с работами, то там будет ещё как минимум 2 файла: 1-й в папке скрипт типа "название_локации_gulag.script" и плюс в папке misc, такой же файл только в расширении.Itx, хотя его может и не быть. Спс Дополнено 3 минуты спустя Только что, oleg19966 сказал: Igor_Misery зависит от типа террейна. Если general_lager то там только all.spawn, а если уникальный террейн с работами, то там будет ещё как минимум 2 файла: 1-й в папке скрипт типа "название_локации_gulag.script" и плюс в папке misc, такой же файл только в расширении.Itx, хотя его может и не быть. Странно, скриптов нет, ltx'ов нет, спавна нет. Тогда как? Почему игра вылетает? Буду значит щас химичить с файлами. Изменено 21 сентября, 2020 пользователем Igor_Misery Clear Sky: Gunslinger Addon Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 299 Опубликовано 21 сентября, 2020 Igor_Misery это не обязательно должен быть смарт. Это может быть и название предмета, НПС или чего-угодно вообще. Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Graff46 178 Опубликовано 21 сентября, 2020 Я в ТЧ в х16 поменял всех зомби на военных, сменил им пути до звуков в xml, но военные иногда издают звуки характерные зомби, в чем может быть причина? Не ... Сталкер могут сделать только русские.© С. Григорович. 03.10.2014 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
oleg19966 299 Опубликовано 22 сентября, 2020 Graff46 а зачем военным менять пути до звуков? Не проще просто вписать профиль любого военного и всё? Или ты без распаковки спавна работаешь? Так это глупость тогда получается. Там у зомбированных в спавне есть строка sound_idle = state возможно из-за неё они и воют, но это маловероятно. Скорее всего это у тебя где-то ошибка либо фоновые звуки локации. Внимание! Ищу любые фиксы/исправления для оригинального ТЧ. Спойлер Или людей, которые желают помочь с этим делом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Kostov 57 Опубликовано 23 сентября, 2020 (изменено) Делаю к ТЧ новый систем субтитров — там будет встречаться не только текст, а фон для субтитров. С помощью строчки vert_align="b" я решил все субтитры выравнивать по нижнему краю, но теперь это привело к такой проблеме: Спойлер Код: <closecaption_1 x="512" y="640" width="400" height="69" alignment="c"> <!-- "speaker" --> <texture width="400" height="37" a="192">intro\intro_back</texture> <text x="5" y="-2" font="graffiti32" r="225" g="225" b="250" align="l" vert_align="b"/> </closecaption_1> Как можно перемещать фон (именно фон, а не текст), чтобы всё выровнялось? Если вставить в <texture> параметры x= и y=, то фон всё равно останется на месте. Изменено 23 сентября, 2020 пользователем SashaRed Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты