Hallo erstmal, ich hätte gerne mal ein Problem...
Ich habe mir, wie so manch anderer den showfilllevel aus LS09 umgeschrieben. Leider scheint der ursprüngliche Autor nicht mehr in dieser Richtung aktiv zu sein, weshalb es wohl keine aktuelle Version gibt. Aber zum Problem. Das Script an sich arbeitet fehlerfrei, Probleme entstehen erst, wenn ich einen Drescher, der mit dem Script ausgestattet ist, verkaufe. Dann gibt es folgenden Fehler in der LOG:
showFillLevel.lua(34) : attempt to index local 'veh' (a nil value)
In Zeile 34 der .lua wird diese Variable ausgewertet: "if veh.grainTankFillLevel > 0 then"
veh ist diese Variable: "local veh = g_currentMission.nodeToVehicle[ShowFillLevel.vehicles]"
Natürlich stimmt diese Bedingung damit nicht mehr. Wie sage ich dem Script also jetzt, das er den Drescher vergessen soll. Wäre es möglich, mit ner else - Bedingung dieses zu realisieren, in der ich dem Script sage, ignoriere alle Drescher mit Tankinhalt = 0? Allerdings überprüft das Script ja dann trotzdem, ob der Drescher vorhanden ist, und schmeißt ihn nicht aus der Updateschleife. Warum er die Funktion allerdings nicht beendet, da die Bedingung ja eigentlich nicht mehr vorhanden ist (nil) verstehe ich nicht wirklich.
Ja, ich gebe zu, so viel habe ich mich noch nicht mit dem Scripten versucht, komme auch nicht wirklich aus dieser Richtung. Allerdings will ich versuchen, so mehr zu verstehen. Ich habe auch nicht vor, irgendwelche Scripte zusammenzuklauen, ich will das nur für mich realisieren.
Ich hoffe daher auf Hilfe. Den Hauptteil der Funktion habe ich angehangen, das ist aber nicht die komplette lua. Will ja keine fremden Scripte hier veröffendlichen. Wenn Fragen zum Problemstellungsverständnis sind, versuche ich die gerne zu beantworten.
[hide][lua]function ShowFillLevel:update(dt)
if table.getn(ShowFillLevel.vehicles) > 0 and ShowFillLevel.vehicles[1] == self.rootNode then
local fillLevels = {}
local names = {}
local fruit = {}
local fastNum = {}
for i=1,table.getn(ShowFillLevel.vehicles) do
local veh = g_currentMission.nodeToVehicle[ShowFillLevel.vehicles[i]]
if veh.grainTankFillLevel > 0 then
local Level = veh.grainTankFillLevel*100/veh.grainTankCapacity
table.insert(fillLevels,Level)
table.insert(names,veh.name)
local fruitType = FruitUtil.fruitIndexToDesc[veh.currentGrainTankFruitType].name
if g_i18n:hasText(fruitType) then
fruitType = g_i18n:getText(fruitType)
end
table.insert(fruit,fruitType)
for k,v in pairs(g_currentMission.steerables) do
if v.rootNode == ShowFillLevel.vehicles[i] then
table.insert(fastNum,k)
end
end
end
end
for i=1,table.getn(names) do
setTextAlignment(2)
local posY = 0.85
local posX = 0.98
renderText(posX, posY - (i-1)*0.05, 0.021,names[i]..": ("..fastNum[i]..")");
if fillLevels[i] > 80 then setTextColor(1, 0, 0, 1); end
renderText(posX, posY - 0.021 - (i-1)*0.05, 0.02,""..string.format("(%d%%) %s",fillLevels[i],fruit[i]).."");
setTextColor(1, 1, 1, 1)
setTextAlignment(0)
end
end
end;[/lua][/hide]