Hallo zusammen,
Ich schreibe ein Skript zum tunen von motorisierten Fahrzeugen.
Die Funktionalität habe ich fertig. Es wird der Torque scale multipliziert.(da hätte ich auchnoch fragen warum das bei mir nicht mit der registerOverwrittenFunctions geklappt hat, habe load Motor also komplett ersetzten müssen) Nur in der Shop anzeige (vlt. auch Performance) bereitet mir Probleme.
Ich lasse die Leistung aktuell im Configurationsfenster direkt anzeigein. Dazu möchte ich aber das sich die anzeige oben die von Giants da ist mit aktuallisiert. Doch da bekomme ich immer einen unendlichen feedbackloop, wenn ich die Leistung durch storeItem.specs.power = "die neue Power". Dazu wird die leistung in meinem Configurationsfenster nicht aktuallisiert wenn man die standart Motorkonfiguration ändert.
Das wollte ich beheben indem ich die leistung direkt aus der motor configuration entnommen wird. So wird im prinzip beides behoben. Aber es geht nicht, ich bekomme einen Fehler den ich bei einer ganz alten Version meines skriptes schonmal bekommen hab aber den ich beheben konnte, selbst aber nicht weiß wie, ich habe auch schon nur update oder onUpdate tick probiert, alles erfolglos:
im rot markierten müsste der fehler liegen, da das andere funktioniert wenn ich meine power aus storeItem.specs.power hole also:
seht selbst!:
-- script for tuning Motorized vehicles
-- V.0.1
-- By Marv63 2020
if g_specializationManager:getSpecializationByName("tuning") == nil then
g_specializationManager.addSpecialization('tuning', 'tuning', "tuning", Utils.getFilename("tuning.lua", g_currentModDirectory))
end
for vehicleTypeName, vehicleType in pairs(g_vehicleTypeManager.vehicleTypes) do
if vehicleType == nil then
elseif SpecializationUtil.hasSpecialization(tuning, vehicleType.specializations) then
elseif SpecializationUtil.hasSpecialization(SplineVehicle, vehicleType.specializations) then
elseif SpecializationUtil.hasSpecialization(Motorized, vehicleType.specializations) then
g_vehicleTypeManager:addSpecialization(vehicleTypeName, 'tuning')
else
end
end
function initNewStoreConfig()
print("initNewStoreConfig =============================================================")
g_configurationManager:addConfigurationType("tuning", g_i18n:getText("CONFIG_TITLE"), nil, nil, nil, nil, ConfigurationUtil.SELECTOR_MULTIOPTION)
StoreItemUtil.getConfigurationsFromXML = Utils.overwrittenFunction(StoreItemUtil.getConfigurationsFromXML, addNewStoreConfig)
end
function addNewStoreConfig(xmlFile, superFunc, baseXMLName, baseDir, customEnvironment, isMod, storeItem)
local configurations = superFunc(xmlFile, baseXMLName, baseDir, customEnvironment, isMod, storeItem)
local tPower
if storeItem ~= nil then
if storeItem.specs.power == nil then
tPower = 0
elseif storeItem.specs.power == "" then
tPower = 0
else
tPower = Utils.getNoNil(tonumber(storeItem.specs.power), 0)
end
if tPower == 0 and configurations == nil then
print(storeItem.categoryName)
end
if tPower > 0 then
if configurations == nil then
if storeItem.categoryName == "ANIMALPENS" then
elseif storeItem.categoryName == "PLACEABLEMISC" then
elseif storeItem.categoryName == "DECORATION" then
elseif storeItem.categoryName == "FARMHOUSES" then
elseif storeItem.categoryName == "SILOS" then
elseif storeItem.categoryName == "WOOD" then
elseif storeItem.categoryName == "ANIMALS" then
else
configurations = {}
print(configurations .. storeItemXmlFilename)
end
end
end
end
local integrateConfig = false
if storeItem == nil then
elseif configurations == nil then
elseif configurations["tuning"] ~= nil then
else
integrateConfig = true
end
if tPower > 0 and integrateConfig == true then
print(tPower .. tostring(integrateConfig))
local cName = {}
local cCost = {}
local dUpKeep = {}
configurations["tuning"] = {
{name = cName[1], index = 1, isDefault = true, price = cCost[1] , dailyUpkeep = dUpKeep[1], desc = "", configMultiplier = 1.00},
{name = cName[2], index = 2, isDefault = false, price = cCost[2], dailyUpkeep = dUpKeep[2], desc = "", configMultiplier = 1.05},
{name = cName[3], index = 3, isDefault = false, price = cCost[3], dailyUpkeep = dUpKeep[3], desc = "", configMultiplier = 1.10},
{name = cName[4], index = 4, isDefault = false, price = cCost[4], dailyUpkeep = dUpKeep[4], desc = "", configMultiplier = 1.15},
{name = cName[5], index = 5, isDefault = false, price = cCost[5], dailyUpkeep = dUpKeep[5], desc = "", configMultiplier = 1.20},
{name = cName[6], index = 6, isDefault = false, price = cCost[6], dailyUpkeep = dUpKeep[6], desc = "", configMultiplier = 1.25},
{name = cName[7], index = 7, isDefault = false, price = cCost[7], dailyUpkeep = dUpKeep[7], desc = "", configMultiplier = 1.30},
{name = cName[8], index = 8, isDefault = false, price = cCost[8], dailyUpkeep = dUpKeep[8], desc = "", configMultiplier = 1.35},
{name = cName[9], index = 9, isDefault = false, price = cCost[9], dailyUpkeep = dUpKeep[9], desc = "", configMultiplier = 1.40},
{name = cName[10],index = 10,isDefault = false, price = cCost[10], dailyUpkeep = dUpKeep[10], desc = "", configMultiplier = 1.45},
{name = cName[11],index = 11,isDefault = false, price = cCost[11], dailyUpkeep = dUpKeep[11], desc = "", configMultiplier = 1.50},
{name = cName[12],index = 12,isDefault = false, price = cCost[12], dailyUpkeep = dUpKeep[12], desc = "", configMultiplier = 1.60},
{name = cName[13],index = 13,isDefault = false, price = cCost[13], dailyUpkeep = dUpKeep[13], desc = "", configMultiplier = 1.70},
{name = cName[14],index = 14,isDefault = false, price = cCost[14], dailyUpkeep = dUpKeep[14], desc = "", configMultiplier = 1.80},
{name = cName[15],index = 15,isDefault = false, price = cCost[15], dailyUpkeep = dUpKeep[15], desc = "", configMultiplier = 1.90},
{name = cName[16],index = 16,isDefault = false, price = cCost[16], dailyUpkeep = dUpKeep[16], desc = "", configMultiplier = 2.00}
}
tMotor.i = tMotor.i + 1
tMotor.xmls[tMotor.i] = storeItem.xmlFilename
local i = 1
local oPowerPS = tPower
local powerkW
local powerPS
local multiplier
local vCost = StoreItemUtil.getDefaultPrice(storeItem, storeItem.configurations)
if i ~= nil then
for i = 1, 16, 1 do
multiplier = configurations["tuning"][i].configMultiplier
powerPS = math.floor(oPowerPS * multiplier)
powerkW = math.floor(powerPS / 1.35962)
cName[i] = "+" .. tostring((multiplier - 1) * 100) .. "% (" .. tostring(powerkW) .. "kW/" .. tostring(powerPS) .. g_i18n:getText("CONFIG_HPPOWER") .. ")"
if i == 1 then
cCost[i] = 0
dUpKeep[i] = 0
else
cCost[i] = tonumber(vCost * (math.log10(i + 1)+0.5) * 0.01) + 2000
dUpKeep[i] = tonumber(vCost * math.pow(i, 1.3) / 400)
end
end
end
end
return configurations
end
tMotor = {}
tMotor.xmls = {}
tMotor.i = 0
if g_configurationManager.configurations["tuning"] == nil then
initNewStoreConfig()
end
function tMotor:onUpdate(dt)
local ii = 0
for ii = 1, tMotor.i do
local storeItem = g_storeManager:getItemByXMLFilename(tMotor.xmls[ii])
local vehicle = g_currentMission.vehicles[tonumber(tMotor.xmls[ii])]
if storeItem ~= nil and storeItem.configurations ~= nil then
if storeItem.configurations["tuning"] ~= nil then
local i = 1
local powerkW
local powerPS
local oPowerPS --Utils.getNoNil(tonumber(storeItem.specs.power), 0)
local vCost = StoreItemUtil.getDefaultPrice(storeItem, storeItem.configurations)
for i = 1, 16, 1 do
local configId = vehicle.configurations["motor"]
local oPowerPS = storeItem.configurations["motor"][configId].power
multiplier = storeItem.configurations["tuning"][i].configMultiplier
powerPS = math.floor(oPowerPS * multiplier)
powerkW = math.floor(powerPS / 1.35962)
storeItem.configurations["tuning"][i].name = "+" .. tostring((storeItem.configurations["tuning"][i].configMultiplier - 1 ) * 100) .. "% (" .. tostring(powerkW) .. "kW/" .. tostring(powerPS) .. g_i18n:getText("CONFIG_HPPOWER") .. ")"
if i == 1 then
storeItem.configurations["tuning"][i].price = 0
storeItem.configurations["tuning"][i].dailyUpkeep = 0
else
storeItem.configurations["tuning"][i].price = tonumber(vCost * (math.log10(i + 1)+0.5) * 0.1)
storeItem.configurations["tuning"][i].dailyUpkeep = tonumber(vCost * math.pow(i, 1.3) / 400)
end
storeItem.specs.power = powerPS
end
end
end
end
end
if tMotor.active == nil then
tMotor.active = true
addModEventListener(tMotor)
end
Alles anzeigen
meine inspiration kam vom Adjust working speed script, REA und guidanceSteering.
Hoffe mir kann jemand helfen im giants forum bekam ich keine antwort...
PS: kann man irgendwie ein traceback von den Fehlern bekommen? weil manchmal bekomme ich welche meistens aber nicht, arbeite mit giants debugger das ist doch nicht so schwer zu implementieren für giants und würde eiem skripter bestimmt die hälfte der zeit sparen... oder bin ich dumm und man kann das irgendwie anschalten? weil was soll ich denn bitte mit einem math fehler anfangen?
Grüße Marv63
Ps: sorry wegen dem post ich hab davor den richtigen knopf verwischt, habe das grund fenster mit dem antwort fenster verwechselt
kleines update:
Wenn ich sachen im shop kaufen will und diese nicht von meinem mod beinträchtigt werden(alles ohne motor) kommt der fehler nicht, nur bei motorisierten.
Wenn ich die update function leer lasse, bekomme ich den gleichen fehler wie mit code.
Wenn ich die update function auf den self. variablen laufen lasse bekomme ich den gleichen fehler.
wenn ich die update function mit onupdate, onLoad(was im prinzip auch klappen sollte, da bei jedem config wechsel immer ein onLoad gecallt wird was mir ja reicht um die anzeige upzudaten) oder onUpdateTick.
ich bin deshalb zum entschluss gekommen, das ich wohl mit der function update leben muss, auch wenn ich nicht jeden tick ein update brauche eigentlich, das reicht ja wenn man im shop ist... es zieht halt aktuell schon ein wenig die Performance Runter find ich...
Wie kann ich abrufen welche motor configuration im von einem shopitem ausgewählt ist? Ich komm da nicht weiter.
Hoffe auf antwort, ich brauch doch eine beschäftigung wärend der Vorlesung und ich komm allein nicht weiter
Grüße Marv63