Hallo zusammen,
Ich mache gerade ein Mod zum Fahrzeuge tunen. Man kann im shop dann +10%, +15%, +20% usw auswählen.
Da das im Echten leben ja auch normal ist die Maschinen zu Chip tunen. Zudem stößt man durch Realismusmods schon manchmal an leistungsgrenzen im LS. Was ja auch gut ist.
Aufjedenfall: Grundlegend soll jedem motorisiertem fahrzeug, das kein spline fahrzeug ist anpassungen an Leistungskurve, Spritverbrauch und Wartungskosten(evtl. auch intervall) vorgenommen werden können. So ähnlich wie beim guidance steering Mod von Wopster (viel code ist daran auch orientiert) soll im shop ein weiteres auswahlfenster erscheinen.
Doch es hapert bei mir, ich bin auch nicht sehr erfahren mit lua...
Zuerst kommt
2020-10-09 14:57 dataS/scripts/vehicles/VehicleTypeManager.lua(223) : attempt to call field 'prerequisitesPresent' (a nil value) und dannach viele folge fehler nehme ich an...
Seht selbst im anhang...
Mein script besteht aus einem Ladepart "Tuning.lua" und einem specialisations part "tuneablespec.lua"
zudem hab ich eine xml in der die config möglichkeiten gespeichert sind.
Natürlich ist alles noch nicht ehh fertig... die ganze funktionalität kommt noch, bis jetzt will ich nur, dass bei jedem Motorisierten fahrzeug die auswahl kommt.
ladepart "Tuning.lua"
-- Script for tuning Motorized vehicles
-- By Marv63 2020
local directory = g_currentModDirectory
local modName = g_currentModName
local tuning
local tuningconfig = {}
local function isEnabled()
return tuning ~= nil
end
print("pre load")
function init()
print("init Tuning...")
FSBaseMission.delete = Utils.appendedFunction(FSBaseMission.delete, unload)
Mission00.load = Utils.prependedFunction(Mission00.load, loadMission)
VehicleTypeManager.validateVehicleTypes = Utils.prependedFunction(VehicleTypeManager.validateVehicleTypes, validateVehicleTypes)
StoreItemUtil.getConfigurationsFromXML = Utils.overwrittenFunction(StoreItemUtil.getConfigurationsFromXML, addGPSConfigurationUtil)
end
function loadMission(mission)
addModEventListener(Tuning)
print("loading Tuning...")
--[[ local xmlFile = loadXMLFile("ConfigurationXML", directory .. "res/tuningConfiguration.xml")
if xmlFile ~= nil then
for i = 1, 11 do
local key = ("buyableTuneConfigurations.buyableTuneConfiguration(%d)"):format(i - 1)
local config = {}
config.desc = ""
config.isDefault = getXMLBool(xmlFile, key .. "#isDefault")
config.dailyUpkeep = 0
config.index = i
config.price = getXMLInt(xmlFile, key .. "#price")
config.name = g_i18n:getText(getXMLString(xmlFile, key .. "#name"))
config.multiplier = getXMLBool(xmlFile, key .. "#multiplier")
table.insert(tuningconfig, config)
end
delete(xmlFile)
end]]
end
function unload()
if not isEnabled() then
return
end
removeModEventListener(Tuning)
Tuning = nil
end
function validateVehicleTypes(vehicleTypeManager)
Tuning.installSpecializations(g_vehicleTypeManager, g_specializationManager, directory, modName)
end
function Vehicle:Tuning_getModName()
return modName
end
function Vehicle:Tuning_getSpecTable(name)
local spec = self["spec_" .. modName .. "." .. name]
if spec ~= nil then
return spec
end
return self["spec_" .. name]
end
function Tuning.installSpecializations(vehicleTypeManager, specializationManager, modDirectory, modName)
specializationManager:addSpecialization("tuning", "Tuning", Utils.getFilename("src/Tuneablespec.lua", modDirectory), nil)
for typeName, typeEntry in pairs(vehicleTypeManager:getVehicleTypes()) do
if SpecializationUtil.hasSpecialization(Drivable, typeEntry.specializations) and
not SpecializationUtil.hasSpecialization(SplineVehicle, typeEntry.specializations) then
vehicleTypeManager:addSpecialization(typeName, modName .. ".tuning")
end
end
end
init()
Alles anzeigen
und hier die speci part
Tuneablespec = {}
function Tuneablespec.prerequisitesPresent(specializations)
return SpecializationUtil.hasSpecialization(Drivable, specializations)
end
function Tuneablespec.registerFunctions(vehicleType)
SpecializationUtil.registerFunction(vehicleType, "getIsTuned", Tuneablespec.getIsTuned)
SpecializationUtil.registerFunction(vehicleType, "getMultiplier", Tuneablespec.getMultiplier)
end
function Tuneablespec:onLoad(savegame)
local isTuned = false
local configId = self.configurations[Tuneablespec.CONFIG_NAME]
if configId ~= nil then
local item = g_storeManager:getItemByXMLFilename(self.configFileName)
local config = item.configurations[Tuneablespec.CONFIG_NAME][configId]
if config ~= nil then
isTuned = config.multiplier < 1
ObjectChangeUtil.updateObjectChanges(self.xmlFile, "vehicle.buyableTuneConfigurations.buyableTuneConfiguration", configId, self.components, self)
end
end
self.spec_Tuneablespec = self:Tuning_getSpecTable("Tuneablespec")
local spec = self.spec_Tuneablespec
spec.isTuned = isTuned
if not spec.isTuned then
return
end
end
function Tuneablespec.initSpecialization()
g_configurationManager:addConfigurationType(Tuneablespec.CONFIG_NAME, g_i18n:getText("configuration_buyableTuning"), nil, nil, nil, nil, ConfigurationUtil.SELECTOR_MULTIOPTION)
end
function Tuneablespec:getIsTuned()
local spec = self.spec_Tuneablespec
return spec.isTuned
end
Alles anzeigen
Grüße
Marv63