Category | Scripting |
Created | 27.10.2023 12:01 |
Peter Mann (Ras77) | 27.10.2023 12:01 |
---|---|
Hello First up this is not my code I have been using this as a learning by adding more information into SimHub The below code works but I run into trouble with trying to export Herbicide, Fertilizer data Not sure if anyone can help but would be grateful if someone can show me where I'm going wrong. Cheers Ras77 -- -- SimHub Telemetry mod -- 2020 - Wotever -- This mod can be freely modified as long as it stays used in conjonction with SimHub -- Simhub will automatically discover any new telemetry data being added to the output -- SHTelemetry = {} SHTelemetryContext = {} SHTelemetryContext.isLoaded = false SHTelemetryContext.updateCount = 0 SHTelemetryContext.pipeName = "\\\\.\\pipe\\SHTelemetry" SHTelemetryContext.tabdata = {} SHTelemetryContext.tabLength = 1 function SHTelemetry:buildTelemetry() SHTelemetryContext.tabdata = {} SHTelemetryContext.tabLength = 1 -- Start self:addRawStringToTelemetry("{") local mission = g_currentMission -- Mission / Environment self:addNumberToTelemetry("money", mission.missionInfo.money) self:addNumberToTelemetry("dayTime", mission.environment.currentHour * 3600 + mission.environment.currentMinute * 60) self:addNumberToTelemetry("day", mission.environment.currentDay) self:addNumberToTelemetry("timeScale", mission.missionInfo.timeScale) self:addNumberToTelemetry("playTime", mission.missionInfo.playTime) self:addStringToTelemetry("nickName", mission.playerNickname) self:addNumberToTelemetry("Loan", mission.missionInfo.initialLoan) -- Vehicle if (g_currentMission.controlledVehicle ~= nil) then local vehicle = g_currentMission.controlledVehicle local engine = vehicle:getMotor() local level, capacity = self:getVehicleFuelLevelAndCapacity(vehicle) local Deflevel, Defcapacity = self:getVehicleDefLevelAndCapacity(vehicle) local Herblevel, Herbcapacity = self:getVehicleHerbLevelAndCapacity(vehicle) -- Content tabLength = self:addBoolToTelemetry("isInVehicle", true) tabLength = self:addStringToTelemetry("vehicleName", mission.currentVehicleName) if (vehicle.spec_motorized ~= nil) then local spec_motorized = vehicle.spec_motorized local spec_lights = vehicle.spec_lights local motorFan = vehicle.spec_motorized.motorFan local motorTemperature = vehicle.spec_motorized.motorTemperature local cruiseControl = vehicle.spec_drivable.cruiseControl local cruiseControlSpeed = cruiseControl.speed local reverserDirection = vehicle.getReverserDirection == nil and 1 or vehicle:getReverserDirection() local isReverseDriving = vehicle:getLastSpeed() > spec_motorized.reverseDriveThreshold and vehicle.movingDirection ~= reverserDirection -- Moves and basic engine self:addBoolToTelemetry("isMotorStarted", spec_motorized.isMotorStarted) self:addBoolToTelemetry("isReverseDriving", isReverseDriving) self:addBoolToTelemetry("isReverseDirection", vehicle.movingDirection == reverserDirection) self:addNumberToTelemetry("maxRpm", engine:getMaxRpm()) self:addNumberToTelemetry("minRpm", engine:getMinRpm()) self:addNumberToTelemetry("Rpm", engine.lastRealMotorRpm) self:addNumberToTelemetry("speed", vehicle:getLastSpeed()) self:addNumberToTelemetry("fuelLevel", level) self:addNumberToTelemetry("fuelCapacity", capacity) self:addNumberToTelemetry("DefLevel", Deflevel) self:addNumberToTelemetry("DefCapacity", Defcapacity) self:addNumberToTelemetry("HerbLevel", Herblevel) self:addNumberToTelemetry("HerbCapacity", Herbcapacity) -- Temps self:addNumberToTelemetry("motorTemperature", motorTemperature.value) self:addBoolToTelemetry("motorFanEnabled", motorFan.enabled) -- Cruise control self:addNumberToTelemetry("cruiseControlMaxSpeed", cruiseControlSpeed) self:addBoolToTelemetry("cruiseControlActive", cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_OFF) -- Lights local alpha = MathUtil.clamp((math.cos(7 * getShaderTimeSec()) + 0.2), 0, 1) local leftIndicator = spec_lights ~= nil and (spec_lights.turnLightState == Lights.TURNLIGHT_LEFT or spec_lights.turnLightState == Lights.TURNLIGHT_HAZARD) and alpha > 0.5 local rightIndicator = spec_lights ~= nil and (spec_lights.turnLightState == Lights.TURNLIGHT_RIGHT or spec_lights.turnLightState == Lights.TURNLIGHT_HAZARD) and alpha > 0.5 self:addBoolToTelemetry("leftTurnIndicator", leftIndicator) self:addBoolToTelemetry("rightTurnIndicator", rightIndicator) self:addBoolToTelemetry("beaconLightsActive", spec_lights.beaconLightsActive) end self:addNumberToTelemetry("vehiclePrice", vehicle:getPrice()) self:addNumberToTelemetry("vehicleSellPrice", vehicle:getSellPrice()) else self:addBoolToTelemetry("isInVehicle", false) end -- End self:addRawStringToTelemetry('"pluginVersion": "1.0"}') -- Send content local res = table.concat(SHTelemetryContext.tabdata) SHTelemetryContext.shfile:write(res) SHTelemetryContext.shfile:flush() end function SHTelemetry:getVehicleFuelLevelAndCapacity(vehicle) local fuelFillType = vehicle:getConsumerFillUnitIndex(FillType.DIESEL) local level = vehicle:getFillUnitFillLevel(fuelFillType) local capacity = vehicle:getFillUnitCapacity(fuelFillType) return level, capacity end function SHTelemetry:getVehicleDefLevelAndCapacity(vehicle) local defFillType = vehicle:getConsumerFillUnitIndex(FillType.DEF) local Deflevel = vehicle:getFillUnitFillLevel(defFillType) local Defcapacity = vehicle:getFillUnitCapacity(defFillType) return Deflevel, Defcapacity end function SHTelemetry:getVehicleHerbLevelAndCapacity(vehicle) local herbFillType = vehicle:getConsumerFillUnitIndex(FillType.DEF) local Herblevel = vehicle:getFillUnitFillLevel(herbFillType) local Herbcapacity = vehicle:getFillUnitCapacity(herbFillType) return Herblevel, Herbcapacity end function SHTelemetry:initPipe(dt) -- Re/Init file if (SHTelemetryContext.updateCount == 0) then if (SHTelemetryContext.shfile ~= nil) then SHTelemetryContext.shfile:flush() SHTelemetryContext.shfile:close() end local newfile = io.open(SHTelemetryContext.pipeName, "w") SHTelemetryContext.shfile = newfile end SHTelemetryContext.updateCount = SHTelemetryContext.updateCount + 1 if (SHTelemetryContext.updateCount == 300) then SHTelemetryContext.updateCount = 0 end end function SHTelemetry:update(dt) -- Init file self:initPipe(dt) -- If pipe is ready if (SHTelemetryContext.shfile ~= nil) then self:buildTelemetry() end end function SHTelemetry:addBoolToTelemetry(name, value) if (value ~= nil) then if (value) then SHTelemetryContext.tabdata[SHTelemetryContext.tabLength] = string.format('"%s": true, ', name) else SHTelemetryContext.tabdata[SHTelemetryContext.tabLength] = string.format('"%s": false, ', name) end self:incrementTablePosition() end end function SHTelemetry:addStringToTelemetry(name, value) if (value ~= nil) then SHTelemetryContext.tabdata[SHTelemetryContext.tabLength] = string.format('"%s": "%s", ', name, value:gsub('"', '\\"')) self:incrementTablePosition() end end function SHTelemetry:addRawStringToTelemetry(value) SHTelemetryContext.tabdata[SHTelemetryContext.tabLength] = value self:incrementTablePosition() end function SHTelemetry:addNumberToTelemetry(name, value) if (value ~= nil) then SHTelemetryContext.tabdata[SHTelemetryContext.tabLength] = string.format('"%s": %d, ', name, value) self:incrementTablePosition() end end function SHTelemetry:incrementTablePosition() SHTelemetryContext.tabLength = SHTelemetryContext.tabLength + 1 end addModEventListener(SHTelemetry) |
Note: Log in to post. Create a new account here.