Суть такова
Когда "ванильно" садишься в машину рюкзак прет сквозь спинку сиденья, оружие может торчать сквозь крышу - разработчики просто не позаботились об этих нюансах, но предусмотрели функционал для решения этих "проблем"
Это нативная функция в двигле (сторона C++) SetInvisible
И штатная функция в скриптах игры SetInvisibleRecursive в классе EntityAI (базовый для всех сущностей игры) (которая юзает SetInvisible) + юзает рекурсивно саму себя, что бы скрыть/показать аттачменты аттачметнтов
Я просто покажу как сделать скрытие того, что находится в слотах игрока когда он садится в тачку и показать когда он вылезает из нее
Слоты имеют индексы (номера)
На стороне скриптов определяются они (для простоты программирования) через класс InventorySlots (inventoryslots.c) - это нативный класс в двигле игры (обьявленный на стороне скриптов, что бы иметь к нему доступ) (кстати есть еще классы
в двигле которые не обьявлены бисами на стороне скриптов, но которые можно обьявить самому и получить доступ к чудесатому функционалу - нужно ковырять экзешник и эксперементировать)
Так вот... не буду тянуть кота за его и без того оттянутые бисами ойца... собственно код
modded class PlayerBase extends ManBase
{
protected ref array<int> hideAttachmentsSlotsArray = new array<int>;
protected bool m_AttachmentsHide = false;
protected bool m_AttachmentsHidden = false;
void PlayerBase()
{
hideAttachmentsSlotsArray.Insert(InventorySlots.MELEE);
hideAttachmentsSlotsArray.Insert(InventorySlots.BACK);
hideAttachmentsSlotsArray.Insert(InventorySlots.SHOULDER);
}
void Init()
{
super.Init();
RegisterNetSyncVariableBool("m_AttachmentsHide");
}
override void OnCommandVehicleStart()
{
m_AttachmentsHide = true;
#ifdef SERVER
SetSynchDirty();
#endif
Print("::: ["+this+"]: OnCommandVehicleStart: m_AttachmentsHide: " + m_AttachmentsHide);
super.OnCommandVehicleStart();
}
override void OnCommandVehicleFinish()
{
m_AttachmentsHide = false;
Print("::: ["+this+"]: OnCommandVehicleFinish: m_AttachmentsHide: " + m_AttachmentsHide);
super.OnCommandVehicleFinish();
}
void HideAttachments(bool hiddenstate)
{
SetInvisibleRecursive(hiddenstate,this,hideAttachmentsSlotsArray);
}
override void OnVariablesSynchronized()
{
super.OnVariablesSynchronized();
if (m_AttachmentsHide != m_AttachmentsHidden)
{
m_AttachmentsHidden = m_AttachmentsHide;
HideAttachments(m_AttachmentsHide);
}
}
}
так можно скрыть ваще все и игрок сядет в тачку голый... ну тоесть весело задорно, жалко что не порно...
вобщем как-то так
P.S. Сорян - после почти 10 литров пива пишется хорошо, но чем больше количество символов, тем меньше хочется писать и больше хочется продолжить банкет
Всем удачи!