Кастомизация Авто
Попробую разъяснить как добавить возможность кастомизировать авто, через виртуальный арсенал например.
Вся эта кастомизация для игры — это по сути те же действия, что и при повреждении колес\стекол — т.е. мы анхайдим\хайдим нужный селекшн по нажатии кнопочки.
Вот допустим у меня есть 2 спойлера для машины, и хочу что бы в виртуальном арсенале я мог поставить любой из них, либо убрать все, при этом надо сделать так, что бы 2 спойлера сразу поставить нельзя было.
И так, создаем 2 селекшена для двух спойлеров, и называем как удобно:
Больше в модели ничего делать не нужно, переходим к model.cfg
Нам нужно добавить селекшены в скелетон нашего авто. Ищем название нашего .p3d в конфиге, и смотрим строку «skeletonName = «. Если «skeletonName = «civil_car» — ищем скелетон с названием «civil_car» и добавляем в него наши селекшены:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class civil_car: Car { skeletonInherit="Car"; skeletonBones[]= { "reverse_light","", "daylights","damageHide", "door1","", "door2","", "glass5","damageHide", "SPOILER_SPORT","", "SPOILER","" }; }; |
Не забываем в последней строчке селекшенов удалять запятую, иначе это будет считаться ошибкой!
Теперь в самом низу в классе нашего авто добавляем строки:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
class My_Car: Car { skeletonName = "civil_car"; sectionsInherit = "Car"; sections[]= { "Camo1", "Camo2", "Camo3", "body", "karoserie", "palivo" }; class Animations: Animations { ......... class Wheel_2_2_Damper: Wheel_1_1_Damper { selection="wheel_2_2_damper_land"; }; class ComponentSportSpoiler { type="hide"; hideValue=0; UnHidevalue = 1; minValue=0; maxValue=1; minPhase=0; maxPhase=1; source="ComponentSportSpoiler"; sourceAddress=0; selection="SPOILER_SPORT"; }; class ComponentSpoiler: ComponentSportSpoiler { source="ComponentSpoiler"; selection="SPOILER"; }; }; }; |
Теперь можно проверить в бульдозере — находим имя анимации, крутим колесиком, если спойлер пропадает\появляется — идем дальше
Переходим к config.cpp
Там в любом месте ОСНОВНОГО класса авто вставляем
0 1 2 3 4 5 |
animationList[] = { "ComponentSportSpoiler", 0, "ComponentSpoiler", 1, }; |
Цифры «1» и «0» в конце означают шанс появления этого селекшена когда ставим машину на карту. «0» — никогда не появится, «1» — будет всегда, значения можно варьировать (0.2, 0.5 и т.п.)
Далее в этом же конфиге находим класс «class AnimationSources» (если нет — то создаем так же в главном классе авто), и копируем туда следующее:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class AnimationSources : AnimationSources { class ComponentSportSpoiler { displayName = "Sport Spoiler"; source = "user"; animPeriod = 0.000001; initPhase = 0; forceAnimatePhase = 1; forceAnimate[] = {"ComponentSpoiler", 0}; }; class ComponentSpoiler { displayName = "Spoiler"; source = "user"; animPeriod = 0.000001; initPhase = 0; forceAnimatePhase = 1; forceAnimate[] = {"ComponentSportSpoiler", 0}; }; }; |
Объяснять тут особо нечего, кроме как «forceAnimate[]» — который как раз и не позволяет поставить 2 спойлера одновременно, т.е. при активации первого, второй выставлять в «0»
Сюда еще можно добавить параметры:
mass = 20;
Что добавляет массу при активации селекшена, правда не совсем понятно как она распределяется.
lockCargoAnimationPhase = 0; и lockCargo[] = {0,1,5};
Эти параметры убирают действие сесть на место пассажира при активации\деактивации селекшена (например если вместо заднего сиденья поставим какую-нибудь аппаратуру)
Массив «{0,1,5}» — вероятно ID прокси пассажиров.
Не советую включать в кастомизацию части авто, которые уже имеют анимацию (двери\стекла\турели\колеса), т.к. для этого нужно создавать зависимость между анимациями, а для этого желательно создавать свой скелетон, вообщем гемморой.
Спасибо большое, ваши статьи делают нас более продвинутыми с каждым разом!
Не совсем ясно куда вставлять: animationList[] =
Ну как же не ясно — все ясно в основной класс нашего авто, где задаются все параметры, указываем имя, путь до модели и т.п.
Все что ВНЕ этого класса — это лишь наследования родительских конфигов, где менять мы ничего не можем.
А если у того же спойлера есть тень, то как быть с ней?
Точно так же как и с основной моделью спойлера. В любом ЛОДе если дать такое же имя — оно будет хайдится\анхайдится, будь то тень, коллизийка, фаер-геометри…
Большое спасибо. Жаль нельзя все это дело вынести на прокси.
Как это?! Все можно. Длеаем модель спойлера отдельно, в ней все ЛОДы — тень, коллизийку, фаер-геометри.
И в основную модель потом прокси вставляем, движок сам понимает что если прокси стоит в теневом ЛОДе — то нужно извлекать из прокси теневой ЛОД.
Хитпоинты\мемори работать не будут. Коллизийка работать будет, но не будет влиять на общий вес авто, вес изменять в конфиге можно