Скорее всего это придется делать для каждой машины трафика в ручную (переключаться на каждый автомобиль чтобы там переключить свет) А так, это непредусмотренно, ведь трафик включает фары только когда темнеет
не) так не пойдет.. если при респауне нужно будет переключаться - это дичь. попробую на неделе приложение для трафика допилить.
В общем все просто оказалось. Если нужно, могу чуть позже доделать цивильно и оформить в моды. Сейчас оно просто включает ближний свет, на всех машинах... Первый вариант: просто вставлять в консоль Code: bngApi.engineLua(`for vid, veh in activeVehiclesIterator() do veh:queueLuaCommand("electrics.setLightsState(1)") end`) Второй вариант: Нужно вставить функцию в ui app Traffic(можно в любой, просто я этот использую) Code: this.headlights = function () { bngApi.engineLua(`for vid, veh in activeVehiclesIterator() do veh:queueLuaCommand("electrics.setLightsState(1)") end`) } затем в app.hml Code: <md-button class="md-raised button-alt" ng-click="ctrl.headlights()"></md-button> Spoiler: app.js Code: angular.module('beamng.apps') .directive('traffic', [function () { return { templateUrl: '/ui/modules/apps/traffic/app.html', replace: false, restrict: 'E', scope: false, controller: function ($scope, $element, $attrs) { $scope.unit = 'km/h' $scope.conversions = [2.2369, 3.6] $scope.metric = true $scope.legalSpeed = true $scope.amount = 1 $scope.speedLimit = 70 $scope.spawnValue = 1 $scope.aggression = 0.3 $scope.aiModeOptions = ['Traffic', 'Random', 'Flee', 'Chase', 'Follow', 'Stop'] $scope.debugOptions = ['Off', 'Traffic', 'Target', 'Speeds', 'Trajectory', 'Route'] $scope.awareOptions = ['Auto', 'Off', 'On'] this.aiModeOptions = $scope.aiModeOptions[0] this.debugOptions = $scope.debugOptions[0] this.awareOptions = $scope.awareOptions[0] this.amount = $scope.amount this.setAiMode = function () { bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({aiMode: this.aiModeOptions})} )`) bngApi.engineLua(`extensions.hook("trackAIAllVeh", ${bngApi.serializeToLua(this.aiModeOptions)} )`) } this.setDebugMode = function () { bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({aiDebug: this.debugOptions})} )`) } this.setAwareMode = function () { bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({aiAware: this.awareOptions})} )`) } this.setSpeedLimit = function () { var value = !$scope.legalSpeed ? this.speedLimit / $scope.conversions[Number($scope.metric)] : -1 bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({speedLimit: value})} )`) } this.toggleUnits = function () { $scope.metric = !$scope.metric $scope.unit = $scope.metric ? 'km/h' : 'mph' this.setSpeedLimit() } this.setSpawnValue = function () { bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({spawnValue: this.spawnValue})} )`) } this.setAggression = function () { bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars( ${bngApi.serializeToLua({baseAggression: this.aggression})} )`) } this.spawn = function () { bngApi.engineLua(`extensions.core_multiSpawn.spawnGroup(extensions.gameplay_traffic.createTrafficGroup(20), ${bngApi.serializeToLua(this.amount)})`) } this.delete = function () { bngApi.engineLua(`extensions.core_multiSpawn.deleteVehicles( ${bngApi.serializeToLua(this.amount)} )`) bngApi.engineLua(`extensions.hook("stopTracking", {Name = "TrafficEnabled"})`) } this.activate = function () { bngApi.engineLua(`extensions.gameplay_traffic.activate()`) bngApi.engineLua(`extensions.gameplay_traffic.setTrafficVars({enableRandomEvents = true})`) if (bngApi.engineLua(`gameplay_traffic.getNumOfTraffic()`) > 0) { bngApi.engineLua(`extensions.hook("startTracking", {Name = "TrafficEnabled"})`) } } this.deactivate = function () { bngApi.engineLua(`extensions.gameplay_traffic.deactivate(true)`) bngApi.engineLua(`extensions.hook("stopTracking", {Name = "TrafficEnabled"})`) } this.refresh = function () { bngApi.engineLua(`core_vehicle_manager.reloadAllVehicles()`) bngApi.engineLua(`be:queueAllObjectLua("recovery.loadHome(false)")`) } this.headlights = function () { bngApi.engineLua(`for vid, veh in activeVehiclesIterator() do veh:queueLuaCommand("electrics.setLightsState(1)") end`) } }, controllerAs: 'ctrl' } }]) Spoiler: app.html Code: <style> .traffic table { width: 100%; } .traffic td { vertical-align: middle; padding-bottom: 0.125em; } .traffic td:first-child { width: 40%; } .traffic input[type=number] { width: 50px; margin-right: 4px; } .traffic md-select { width: 140px; height: auto; } .traffic .checkbox-alt { display: inline-block; margin: 0px 4px; } .traffic .button-alt { display: inline-block; height: 2em; min-width: 50px; min-height: 2em; margin: 0 4px 0 0; padding: 0 8px; line-height: 1.5em; text-align: center; } .traffic .pad-bottom td { padding-bottom: 0.6em; } .traffic .disabled-option { opacity: 0.8; pointer-events: none; } </style> <div class="bngApp traffic" style="width: 100%; height: 100%"> <table> <tr> <td>{{:: "ui.apps.traffic.NumberofCars" | translate}}:</td> <td> <input class="input-light" flex type="number" min="0" max="150" step="1" ng-value="amount" ng-model="ctrl.amount" aria-label="_"> <md-button class="md-raised button-alt" ng-click="ctrl.spawn()">{{:: "ui.apps.traffic.Spawn" | translate}}</md-button> <md-button class="md-raised button-alt" ng-click="ctrl.delete()">{{:: "ui.apps.traffic.Delete" | translate}}</md-button> </td> </tr> <tr class="pad-bottom"> <td></td> <td> <md-button class="md-raised button-alt"> <md-icon class="material-icons" ng-click="ctrl.activate()">play_arrow</md-icon> </md-button> <md-button class="md-raised button-alt"> <md-icon class="material-icons" ng-click="ctrl.deactivate()">stop</md-icon> </md-button> <md-button class="md-raised button-alt"> <md-icon class="material-icons" ng-click="ctrl.refresh()">refresh</md-icon> </md-button> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.SpeedLimit" | translate}}:</td> <td> <input class="input-light" ng-class="{'disabled-option': legalSpeed == true}" flex type="number" min="0" max="300" step="5" ng-value="speedLimit" ng-model="ctrl.speedLimit" ng-change="ctrl.setSpeedLimit()" aria-label="_"> <md-button class="md-raised button-alt" ng-click="ctrl.toggleUnits()">{{unit}}</md-button> <md-checkbox class="checkbox-alt" ng-model="legalSpeed" ng-change="ctrl.setSpeedLimit()" aria-label="_">{{:: "ui.apps.traffic.Auto" | translate}}</md-checkbox> <md-button class="md-raised button-alt" ng-click="ctrl.headlights()"></md-button> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.RespawnRate" | translate}}:</td> <td> <input class="input-light" flex type="number" min="0" max="3" step="0.1" ng-value="spawnValue" ng-model="ctrl.spawnValue" ng-change="ctrl.setSpawnValue()" aria-label="_"> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.Risk" | translate}}:</td> <td> <input class="input-light" flex type="number" min="0.2" max="2" step="0.1" ng-value="aggression" ng-model="ctrl.aggression" ng-change="ctrl.setAggression()" aria-label="_"> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.AIMode" | translate}}:</td> <td> <md-select flex ng-model="ctrl.aiModeOptions" ng-change="ctrl.setAiMode()" aria-label="_"> <md-option ng-value="value" ng-repeat="value in aiModeOptions" aria-label="_">{{value}}</md-option> </md-select> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.AwarenessMode" | translate}}:</td> <td> <md-select flex ng-model="ctrl.awareOptions" ng-change="ctrl.setAwareMode()" aria-label="_"> <md-option ng-value="value" ng-repeat="value in awareOptions" aria-label="_">{{value}}</md-option> </md-select> </td> </tr> <tr> <td>{{:: "ui.apps.traffic.DebugMode" | translate}}:</td> <td> <md-select flex ng-model="ctrl.debugOptions" ng-change="ctrl.setDebugMode()" aria-label="_"> <md-option ng-value="value" ng-repeat="value in debugOptions" aria-label="_">{{value}}</md-option> </md-select> </td> </tr> </table> </div>