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

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

 

010cdbd72f.png

Тема посвящена моддингу на платформе Тень Чернобыля.

 

Правила темы:

  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть.
  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
  • Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться.

Overfirst.png

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


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

Как пофиксить проблему с тем что
если величить переносимый вес комбеза то после 50 кг гг выдыхается?

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


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

Всем привет. Кто знает, как сделать часть текстуры прозрачной? Хочу сделать коллиматор, сделал текстуру сетки (залил изображение красным цветом, на альфа канале нарисовал саму сетку). В игре либо не учитывается альфа канал (весь прицел красный), либо при добавлении шейдеров на модель (и рабицу пробовал, и стекло) текстура полностью прозрачная. В SDK отображается все нормально. Кто подскажет, как правильно настроить текстуру?

Спойлер

eragy.png

ss-08-19-20-15-35-12-l01-escape.jpg

 

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

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


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

Можно ли перенести худ из нлс 7 в сталкер тч?

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


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

Всем привет! У меня проблема  с битьем 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

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


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

Pir@t@s ты не баловался, случаем, откатчиками версий, а потом до-обновлений до 1.0006?


 

 

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


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

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

 

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


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

Pir@t@s оригинал-стабилен, по крайней мере, в начале, на Кордоне, так что, греши на свою пиратку.


 

 

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


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

Всем привет! Не подскажете, как правильно использовать 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
 

 

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

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


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

Всем йоу!

Такая проблема: в моде Новый Арсенал 6.0 пытаюсь сделать карту локации (Х18) по инструкции "Создание текстуры локации для отображения на мини-карте и в PDA", но на ввод в консоли "demo_record 1" игра выдает "Command disabled".

Пожалусто, подскажите как быть? Хочется получить правильный bound_rect, а то отображение героя на карте глобальной некорректное.

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


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

Nesteroid, в моде правленный движок. Эта команда, судя по всему, была заблокирована разработчиком. Как вариант - можете попробовать с ним связаться, иначе Вам придется править карту вслепую.

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

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


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

Nesteroid, в моде правленный движок. Эта команда, судя по всему, была заблокирована разработчиком. Как вариант - можете попробовать с ним связаться, иначе Вам придется править карту вслепую.

Спасибо! Я понял. Буду искать авторов.

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


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

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

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


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

Alterisimo просто создай ящик(или рюкзак или бревно, не суть) в которой есть секция items, где укажи что и сколько тебе нужно. Возьми для примера любую секцию инвентарного ящика, где есть секция items.

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

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


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

Привет всем! 
Такая проблема: необходимо было вытаскивать данные из игры в отдельный файл, не связанный с игрой. На платформах ЧН и ЗП функция io. работает стабильно, однако в ТЧ выдает исключение, мол якобы переменная nil.

В чем может быть проблема? и есть ли другой способ записи в файл?

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


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

Всем привет!

Можно ли отследить тип урона, прошедшего по НПС? Хочу реализовать систему с выпадением уникального лута, в зависимости от того, в какой аномалии\от чьих рук умер НПС.

И еще, как проверить, является ли "убийца"(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() для сталкеров проверку на наличие инфопоршня, который мы выдали после взрыва.

 

 

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

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


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

Как можно создать новую группу для статьей в журнале КПК?


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

Как сделать вывод сообщения, о том что в КПК появилась новая статья.

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

trap alligator

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


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

Как исправляются вылеты с секциями террейнов?

Expression    : fatal error
Function      : CInifile::r_section
File          : .\Xr_ini.cpp
Line          : 342
Description   : <no expression>
Arguments     : Can't open section 'stalker_monolith_terrain'


trap alligator

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


Ссылка на сообщение
Поделиться на другие сайты
 
В 11.08.2020 в 09:42, Boomer сказал:

Никсон а без сдк? Через код убрать сталкеров с деревни, опять же. 

только скриптами, с сдк, и acdc

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


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

Igor_Misery Исправляются правильным оформление секции террейна.

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


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

Igor_Misery Исправляются правильным оформление секции террейна.

За это отвечает, какой-то конкретный .ltx файл?


trap alligator

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


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

Igor_Misery зависит от типа террейна. Если general_lager то там только all.spawn, а если уникальный террейн с работами, то там будет ещё как минимум 2 файла: 1-й в папке скрипт типа "название_локации_gulag.script" и плюс в папке misc, такой же файл только в расширении.Itx, хотя его может и не быть.

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
Только что, 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'ов нет, спавна нет. Тогда как? Почему игра вылетает? Буду значит щас химичить с файлами.

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

trap alligator

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


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

Igor_Misery это не обязательно должен быть смарт. Это может быть и название предмета, НПС или чего-угодно вообще.

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


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

Я в ТЧ в х16 поменял всех зомби на военных, сменил им пути до звуков в xml, но военные иногда издают звуки характерные зомби, в чем может быть причина?


И создание фанатских модов — это не следствие популярности S.T.A.L.K.E.R., это причина по которой когда-нибудь появится на свет S.T.A.L.K.E.R. 2
© С. Григорович.

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


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

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

Или ты без распаковки спавна работаешь? Так это глупость тогда получается. Там у зомбированных в спавне есть строка sound_idle = state возможно из-за неё они и воют, но это маловероятно. Скорее всего это у тебя где-то ошибка либо фоновые звуки локации.

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


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

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

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

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

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

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

Войти

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

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу