S.T.A.L.K.E.R.: Global War <<<>>> Инструмент - теперь и для ТЧ! <<<>>> NS OGSR: Сборка от 30.12.2023
-
Число публикаций
869 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
58 [Подарить AMKoin]
Сообщения опубликованы Kondr48
-
-
Цитата
Насчет введения в движок "объема" для рюкзака - тут уже будет посложнее добавления слота
Так по сути уже сделано. Там на репозитории KD есть правка которая включает объем рюкзака ограниченный ячейками инвентаря. Перевязать на некую величину, которая будет браться из броника или даже отдельного рюкзака большого труда не составит. Если будет время, выложу правочку.
-
В 11.03.2018 в 15:42, DoberBull сказал:
Но везде одна проблема. Почему практически нет звука ? Слышен только звук оружия в руках и звуки урона по ГГ. Больше вообще ничего. Ни амбиента, ни аномалий, ни сталкеров с живностью.
Это проблема вроде на репозитории была изначально.
-
- Это популярное сообщение.
- Это популярное сообщение.
В дополнение к посту @Shkiper2012
Скрытый текстЭту же фичу можно сделать опциональной.
case kWPN_ZOOM:
Скрытый текстcase kWPN_ZOOM:
if (IsZoomEnabled())
{
if (psActorFlags.test(AF_ZOOM_CLICK_ENABLE))
{
if (flags&CMD_START && !IsPending())
OnZoomIn();
else if (IsZoomed())
OnZoomOut();
}
else
{
if( flags&CMD_START && !IsPending() && !IsZoomed() )
OnZoomIn();
else if( flags&CMD_START && IsZoomed() )
OnZoomOut();
}
return true;
}
else
return false;Затем, добавляем новый флаг в Actor_Flags.h
AF_ZOOM_CLICK_ENABLE = (1<<11),
И регистрируем консольную команду в файле console_commands.cpp
void CCC_RegisterCommands() { ... CMD1(CCC_GameDifficulty, "g_game_difficulty" ); CMD3(CCC_Mask, "zoom_click_enable", &psActorFlags, AF_ZOOM_CLICK_ENABLE); ... }
Осталось лишь зарегистрировать новый пункт меню в файлах игры.
1. ui_mm_opt_gameplay.script :
_st = xml:InitStatic("tab_gameplay:templ_item", self.scroll_v) xml:InitCheck("tab_gameplay:check_zoom_click_enable", _st)
2. ui_mm_opt(_16).xml:
<check_zoom_click_enable x="10" y="0" width="243" height="21"> <options_item entry="zoom_click_enable" group="mm_opt_gameplay"/> <text font="letterica18" r="215" g="195" b="170">ui_mm_zoom_click_enable</text> </check_zoom_click_enable>
3. Любой текстовый файл:
<string id="ui_mm_zoom_click_enable"> <text>Удерживать ($$ACTION_WPN_ZOOM$$) для прицеливания</text> </string>
- 2
- 3
- 2
-
Ищу папку шейдеров от ОГСЕ последнего.
-
@Romann А что за процесс хоть? Я так и не нашел.
-
При запуске собранного движка (ТЧ) выскакивает маленькое нечто вроде окошка, с надписью "MSCTFIME UI" причем передвинуть или как то убрать его не получается. При перезагрузке системы пропадает. Кто-нибудь сталкивался? Как его убрать вообще? А желательно бы еще понять что это такое и как сделать, чтобы вообще не возникало.
-
Так фикс же предлагал SkyLoadet, разве нет?
-
Цитата
Есть ли смысл фиксить, заплаточки пилить?
Есть, не знаю отчего зависит, но на некоторых ПК иногда подобные ошибки все-таки приводят к вылету. Да и вообще накапливание ошибок в ходе игры не самая хорошая идея =)
- 1
-
- 3
-
Нужны текстуры из обеих метро (Желательно Redux версии, но подойдет и от обычных). Конкретно интересует все что связано с худом противогаза: стекло, капли, мухи и т.п. Также интересует звук смены фильтра.
- 1
-
CRAZY_STALKER666, возможно террейн не прописан в textures.ltx?)
- 1
-
- Это популярное сообщение.
- Это популярное сообщение.
Исправление пулестойкости костюмов.
Скрытый текстКто-то слышал, кто-то нет, как разработчики некоторых глобальных модов упоминали (ну по крайней мере я что-то подобное помню), что в движок закралась какая-то чудовищная ошибка и на самом деле бронежилеты от пуль не защищают и чуть ли не чем больше показатель, тем хуже. Однако, в принципе, не так все страшно. На самом деле в этом плане никакой ошибки нет. Просто в Сталкере (речь идет о ТЧ, насчет других частей серии - не уверен, хотя суть та же скорее всего) расчет хита от пули происходит иначе, чем от любого другого воздействия. А конкретно, берутся настройки костей, что позволяет более гибко эту самую пулестойкость настроить. Подробнее можно почитать здесь. Пулестойкость ГГ рассчитывается также, как у НПС.
На самом деле, это легко исправить. Возможно ,кому-то не понравится такой способ, ибо если выставить у костюма 100% защиты, то новый костюм будет полностью защищать от пуль (ну пока не износится само собой) не учитывая, что какие-то участки защищены сильнее/слабее.
Как по мне, защита по костям, конечно, реалистичнее, но вариант просто в процентах - более играбельный, ведь игрок видит в инвентаре насколько его защищает данный костюм и эта цифра соответствует действительности.
Итак. Как сделать работу пулестойкости такой же, как остальные воздействия?
Для начала стоит вынести это дело под дефайн, дабы иметь возможность при необходимости включить/отключить данную правку.
Для этого, в файл build_config_defines.h нужно добавить:#define FIRE_WOUND_HIT_FIXED // Kondr48: "Фикс" пулестойкости для шлемов и брони. По факту просто выключен механизм расчета хита по костям. Считается также, как остальные хиты.
Затем, нам нужен файл EntityCondition.cpp
Находим:
float CEntityCondition::HitOutfitEffect(float hit_power, ALife::EHitType hit_type, s16 element, float AP) { CInventoryOwner* pInvOwner = smart_cast<CInventoryOwner*>(m_object); if(!pInvOwner) return hit_power; CCustomOutfit* pOutfit = (CCustomOutfit*)pInvOwner->inventory().m_slots[OUTFIT_SLOT].m_pIItem; if(!pOutfit) return hit_power; float new_hit_power = hit_power; if (hit_type == ALife::eHitTypeFireWound) new_hit_power = pOutfit->HitThruArmour(hit_power, element, AP); else new_hit_power *= pOutfit->GetHitTypeProtection(hit_type,element); //увеличить изношенность костюма pOutfit->Hit (hit_power, hit_type); return new_hit_power; }
и переписываем вот так:
float CEntityCondition::HitOutfitEffect(float hit_power, ALife::EHitType hit_type, s16 element, float AP) { CInventoryOwner* pInvOwner = smart_cast<CInventoryOwner*>(m_object); if(!pInvOwner) return hit_power; CCustomOutfit* pOutfit = (CCustomOutfit*)pInvOwner->inventory().m_slots[OUTFIT_SLOT].m_pIItem; if(!pOutfit) return hit_power; float new_hit_power = hit_power; #ifndef FIRE_WOUND_HIT_FIXED if (hit_type == ALife::eHitTypeFireWound) new_hit_power = pOutfit->HitThruArmour(hit_power, element, AP); else #endif new_hit_power *= pOutfit->GetHitTypeProtection(hit_type,element); //увеличить изношенность костюма pOutfit->Hit (hit_power, hit_type); return new_hit_power; }
В принципе, на этом можно было бы и закончить, однако можно под дефайн вынести и неиспользуемые функции в CustomOutfit. Это будет более правильно, потому что исключит неиспользуемые участки кода.
Итак, дальше я буду приводить только участки под дефайном. Соответственно, Вам нужно будет найти эту часть в файле и сделать также.
1. CustomOutfit.h
Добавим инклуд вначале:
#include "..\..\..\build_config_defines.h"
#ifndef FIRE_WOUND_HIT_FIXED struct SBoneProtections; #endif
#ifndef FIRE_WOUND_HIT_FIXED float HitThruArmour (float hit_power, s16 element, float AP); #endif
#ifndef FIRE_WOUND_HIT_FIXED SBoneProtections* m_boneProtection; #endif
#ifndef FIRE_WOUND_HIT_FIXED virtual BOOL BonePassBullet (int boneID); #endif
2. CustomOutfit.cpp
#ifndef FIRE_WOUND_HIT_FIXED #include "BoneProtections.h" #endif
#ifndef FIRE_WOUND_HIT_FIXED m_boneProtection = xr_new<SBoneProtections>(); #endif
#ifndef FIRE_WOUND_HIT_FIXED xr_delete(m_boneProtection); #endif
Функцию CCustomOutfit::GetHitTypeProtection приводим к такому виду:
float CCustomOutfit::GetHitTypeProtection(ALife::EHitType hit_type, s16 element) { float fBase = m_HitTypeProtection[hit_type]*GetCondition(); #ifndef FIRE_WOUND_HIT_FIXED float bone = m_boneProtection->getBoneProtection(element); return 1.0f - fBase*bone; #else return 1.0f - fBase; #endif }
#ifndef FIRE_WOUND_HIT_FIXED float CCustomOutfit::HitThruArmour(float hit_power, s16 element, float AP) { float BoneArmour = m_boneProtection->getBoneArmour(element)*GetCondition()*(1-AP); float NewHitPower = hit_power - BoneArmour; if (NewHitPower < hit_power*m_boneProtection->m_fHitFrac) return hit_power*m_boneProtection->m_fHitFrac; return NewHitPower; }; BOOL CCustomOutfit::BonePassBullet (int boneID) { return m_boneProtection->getBonePassBullet(s16(boneID)); }; #endif
#ifndef FIRE_WOUND_HIT_FIXED if(pSettings->line_exist(cNameSect(),"bones_koeff_protection")) m_boneProtection->reload( pSettings->r_string(cNameSect(),"bones_koeff_protection"), smart_cast<CKinematics*>(pActor->Visual()) ); #endif
Вот и всё, если есть какие-то вопросы - пишите, возможно, я забыл что-то указать.
- 1
- 2
- 4
-
Эти 8 КБ хранилища сто лет как канули в небытие, да и инфопопшни там никогда не хранились.
-
Инфопопшень на апдейт как в оригинале ТЧ?)
-
-
Я собрал с этой правкой, все работает как положено.
-
-
Раз уж так вышло, что на выложенную ссылку на Яндекс жаловались, мол она битая - скачал с меги и залил на свой.
- 1
-
Карлан, да, получилось . Контроль артефактов? Ну почему же, если это то, что я думаю. Дистанция до артефакта определяется, звук, собственно чем ближе, тем чаще. А если речь об исчезновении и проявлении артефактов, то нет, оно мне по сути своей не нравится, мы скорее всего просто модели уменьшим, а детектор как вспомогательный инструмент будет для поисков, т. е. можно без него, но удобнее с ним.
на этом запросто делаются все детекторы
Это хорошая новость. Дальше думаю тоже двигаться с ними. Сейчас пока мне не нравится что лампочка рассинхронизирована со звуком. Особенно в глаза бросается на средней дистанции, там она почти всегда горит, а не моргает. Сейчас перенес этот set_hud_mode для источников света, посмотрим что изменится, ну и с длительностью "горения" немного балуюсь. В общем этот настрою, пойду дальше.
Про разделение рук новость хорошая, с такой схемой можно уже и пистолеты/ножи в руку другую брать. Конечно когда их ты тоже к плеер худу прицепишь
-
-
function actor_binder:taynik_spawn(obj, who) if obj then news_manager.send_tip(db.actor, "Использован предмет: "..obj:section()) if obj:section() == "rukzak_taynik" then kristi.spawn_item("taynik_sect") end end end
eat_portions_num = -1 таки поменяли на единицу? Не знаю как сказывается такое значение. Мб из-за этого какие сбои при использовании...
-
Какое еще начало \ конец? Вот в эту функцию добавляли?
function actor_binder:taynik_spawn(obj, who) if obj then if obj:section() == "rukzak_taynik" then kristi.spawn_item("taynik_sect") end end end
-
Подобной чему? С закладкой тайника? Нет.
-
UriZzz, да нет, в таком случае однозначно колбек на юз работать должен.
в порядке бреда попробуйте
if obj:section() == 'rukzak_taynik' then
а так не особо понятно что не так. Если только в имени секции нет опечатки. Попробуйте такое отладочное сообщение в колбек:
news_manager.send_tip(db.actor, "Использован предмет: "..obj:section())
И смотрите что будет выскакивать при юзе вашего рюкзака / аптечек и т. п.
---
eat_portions_num = -1
Еще здесь можно (да и наверное нужно) поставить единицу.
Рендеры из ЧН на движок ТЧ
в Мастерская ТЧ
Опубликовано
Любопытная вещь, а репозиторий имеется?