Wie kann man auf self.fillLevel von einen Anhänger zugreifen?

  • Wie kann man auf self.fillLevel von einen Anhänger zugreifen?


    Ich hab folgenden Skript probiert.


    [lua]
    fill = {}
    print(" loadFill")
    function fill.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(Fillable, specializations);
    end;
    function fill:mouseEvent(posX, posY, isDown, isUp, button)
    end;
    function fill:keyEvent(unicode, sym, modifier, isDown)
    end;
    function fill:update(dt)
    local Level = self.fillLevel;
    print(" update:"..Level);
    if Level ~= nil then
    print(" Level:"..Level);
    local prozent = Level/self.capacity*100;
    if prozent > 0 then
    renderText(0.78, 0.84, 0.02, "Joskin Silospace: " .. tostring(math.floor(self.fillLevel-1)) .. " (" .. tostring(math.floor(prozent)) .. " % ) ");
    end;
    end;
    end;
    function fill:draw()
    end;
    addModEventListener(fill);
    [/lua]


    Ein teil des skrips ist von dem Forum: Füllstandsanzeige für Anhänger


    Folgender Fehler kommt:Lua: Error running function: update
    C:/Users/Benutzer/Documents/My Games/FarmingSimulator2011/mods/pronar_kipper/fill.lua(17) : attempt to concatenate local 'Level' (a nil value)

  • Hallo..


    Den Error kann ich leider auch nicht zuordnen, weil die Zeilennummern in deinem LUA-Quellcode nicht passen. Am besten du postest die komplette LUA, oder du sagst uns um wie weit sich die Zeilennummern verschieben?


    Btw. du hast die Spezi doch in einem Trailer eingebaut, oder? Es ist eine Spezi.. Zumindest den ersten Zeilen zu folge.
    Dann kannst/sollst/musst du " addModEventListener(fill);" weg lassen..


    LG

  • Dir fehlt erstmal die load() Funktion. Außerdem sollten/müssen Bildschirmanzeigen in der draw() Funktion reingeschrieben werden, nicht in der update() Funktion. Die draw() Funktion wird nämlich nur einmal pro Frame aufgerufen, die update() Funktion möglicherweise öfters.
    und in Zeile 12 und 14 fehlt dir das tostring für Level, das sollte immer als Sicherheit mit rein, damit dur keine solchen Fehler bekommst, wie du jetzt hast.

  • Wandelt einen numerischen (oder anderen..) Wert in einen String.


    bsp.


    [lua]
    local eineVariable = true;
    local zweiteVariable = 3;


    local ts1 = tostring(eineVariable); -- ts1 wäre dann "true" als String.
    local ts2 = tostring(zweiteVariable); -- ts2 wäre dann "3" als String.
    [/lua]


    Das ganze deswegen, weil nicht jede Funktion mit jedem Variablentyp umgehen kann. Generell sind Ausgabefunktionen immer auf Strings angewiesen. Also print() oder renderText() sollte zur Sicherheit nur mit Strings gefüttert werden ;)



    LG

  • Das was der Name schon sagt: die angegebene Variable wird in ein String umgewandelt. Strings kann man nämlich ohne Probleme in die LOG ausgeben (mit print), andere Datentypen nicht unbedingt.
    Aber du hast die tostring() Funktion ja auch schon in Zeile 17 zweimal verwendet.

  • wie gesagt es ist ein teil von dem forum oben!


    hab das ganze das 2.mal überarbeitet ,es kommt kein fehler aber der renderText kommt auch nicht und die log ausgabe kommt nicht auser loadFill!


    es ist die ganze lua:


    [lua]
    fill = {}
    print(" loadFill")
    function fill.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(Fillable, specializations);
    end;
    function fill:load(xmlFile)
    end;
    function fill:mouseEvent(posX, posY, isDown, isUp, button)
    end;
    function fill:keyEvent(unicode, sym, modifier, isDown)
    end;
    function fill:update(dt)
    print(" update");
    end;
    function fill:draw()
    print(" draw:"..tostring(self.fillLevel));
    local prozent = self.fillLevel/self.capacity*100;
    if prozent > 0 then
    renderText(0.78, 0.84, 0.02, "Joskin Silospace: " .. tostring(math.floor(self.fillLevel-1)) .. " (" .. tostring(math.floor(prozent)) .. "%)");
    end;
    end;
    [/lua]


    was kommt in die load() function?

  • Wenn das Script nur für die Ausgabe ist braucht in der load() Funktion nix zu stehen. Da kommen nämlich alle Variablen rein, die du im Script benutzt, bei dir kommt dann ja nix dazu, weil du nur auf schon vorhandene Variablen zugreifst.


    Das print(" loadFill") sollte aber da oben nicht so stehen. Wenn man schon so eine Ausgabe macht kommt die in der load() Funktion rein.


    Das print(" update"); solltest du rausnehmen. Ballert nur deine LOG zu und beeinträchtigt das Spiel extrem.


    Eine print-Ausgabe in der draw() Funktion macht auch keinen Sinn, auch nicht zum debuggen. Berechnungen werden nämlich in update() oder updateTick() gemacht, an dieser Stelle würden dann auch die debug-Ausgaben gemacht werden, falls du welche brauchst.


    Du brauchst aber eigentlich überhaupt keine debug-Ausgaben, weil du eh nur vorhandene Variablen benutzt.


    und in deiner renderText-Zeile hast du 2 ; zuviel drin, nur der letzte sollte da stehen bleiben, die anderen beiden löschen. Das ist vermutlich auch das Problem.

  • wenn ich dass so mache dann macht es nix:


    [lua]fill = {}
    function fill.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(Fillable, specializations);
    end;
    function fill:load(xmlFile)
    print(" loadFill")
    end;
    function fill:mouseEvent(posX, posY, isDown, isUp, button)
    end;
    function fill:keyEvent(unicode, sym, modifier, isDown)
    end;
    function fill:update(dt)
    end;
    function fill:draw()
    local prozent = self.fillLevel/self.capacity*100;
    if prozent > 0 then
    renderText(0.78, 0.84, 0.02, "Joskin Silospace: " .. tostring(math.floor(self.fillLevel-1)) .. " (" .. tostring(math.floor(prozent)) .. " % ) ");
    end;
    end;[/lua]

  • ich hab in der modDesc das hinzugefügt:


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!