Mit der Tankkapazität rechnen?

  • Hi,


    inspiriert von diesen Tutorials hab ich mich jetzt auch mal hingesetzt und wollte mich mal an LUA versuchen.
    Mir schwirrt schon seit einiger Zeit eine Idee im Kopf rum, die auf den ersten Blick recht einfach um zu setzten schien.
    Allerdings scheitere ich bereits daran.


    Kurz zur Funktion des Scripts:


    Es soll die aktuelle Kraftstofftankkapazität des Schleppers abgefragt werden und wenn dieser Wert unter 10% fällt, soll ein Text ausgegeben werden.


    Den aktuellen Wert hole ich mir über die load Funktion mit folgenden Code:
    [lua]
    self.fuelLevel = getXMLFloat (xmlFile, "vehicle.fuelCapacity");
    [/lua]


    In der update Funktion soll dann die Berechnung stattfinden (die 90% sind nur zu Testzwecken ;) ):
    [lua]
    if self.fuelLevel == (self.fuelLevel / 100) * 90 then
    lowFuelIndicator.draw
    end;
    [/lua]


    Die draw Funktion soll dann lediglich einen Text ausgeben:
    [lua]
    renderText(0.05, 0.3, 0.02, "Kraftstoff tanken");
    [/lua]


    Ich habe das Ganze richtig in der modDesc.xml eingetragen und das Spiel gestartet.
    Wenn ich meinen Testschlepper kaufen will, bekomme ich einen Logfehler:

    Zitat


    Error loadVehicle: unknown type 'Fendt716VarioCE.716VarioCE' in 'C:/Users/PC/Documents/My Games/FarmingSimulator2011/mods/Fendt716VarioCE/fendt716vario.xml'


    Hat jemand eine Idee, wo ich da einen Fehler gemacht habe?


    THX&CU
    Webby

  • Also..


    Zunächst mal geht das was du vor hast so nicht.
    self.fuelLevel = getXMLFloat (xmlFile, "vehicle.fuelCapacity");


    Damit lädst du ja einen Statischen Wert aus der XML.. Nämlich die maximale Füllmenge des Tanks. Die Zahl wird sich im laufenden Spiel nie ändern.. ;)
    (Weil der load-Teil ja nur ein mal beim laden des Spiels aufgerufen wird, und selbst wenn es im laufenden Spiel aufgerufen werden würde würde sich die Zahl in der XML aus der du es lädst ja nicht ändern)
    Dass das ganze funktioniert brauchst die Variable die das Spiel für die Berechnungen des Spritverbrauchs usw. nutzt.


    [lua]self.fuelFillLevel [/lua]


    Damit kannst du dann rechnen.. ;)



    Um aber auf deinen Error zurück zu kommen:
    Der Fehler kommt immer wenn irgendwas mit irgend einer Spezi nicht stimmt. Im Grunde sagt der Fehler ja aus dass ein Unbekannter Vehicletype verwendet wurde.
    D.h.
    1. Entweder hast du in der Farzeug-XML einen VT (vehicletype) den es nicht gibt, bzw. den du in der Moddesc nicht definiert hast (evtl. schreibfehler)
    2. Oder du hast eine Spezi eingebaut die nicht funktioniert. Dadurch wird der VT den du in der Moddesc definierst nicht definiert, und das Spiel kennt ihn logischerweiße nicht. Da in der fahrzeug-XML der Typ aber eingetragen ist geht der Mod nur wenn der Typ auch definiert ist ---> Error
    3. Als letzte Möglichkeit wäre dann noch dass eine funktionierende Spezi falsch eingebaut wurde, und daher der VT nicht definiert wird.


    MASTER_OF_DESASTER, bei dir kommt wohl 1. oder 3. in Betracht..


    @Threadersteller
    Poste bitte mal die gesamte LUA..



    LG

  • Dass die Berechnung nur mit self.fuelFillLevel funktionieren kann, hat modelleicher ja schon geschrieben.
    Im Update-Bereich prüfst Du ob ein Wert exakt gleich dem anderen ist, Du willst doch aber die Meldung ab 10% Restfüllstand haben?! Desweiteren wird die draw-Funktion bei jedem Bildaufbau durchlaufen. D.h. bei 60FPS wird auch 60x die Funktion durchlaufen. Aktuell würde deine Meldung immer erscheinen. Da müsste z.B. eine if-Bedingung hin, welche auf eine Variable prüft, welche gesetzt wird, wenn die Schleife Bedingung aus dem Update-Bereich ausgeführt wird erfüllt ist...


    Sorry, ist jetzt alles etwas vage ausgedrückt, aber ich wollte dir da nicht alles vorkauen ;)


    /edit: kleine Korrektur :rolleyes:

  • Also..


    Falsch ist erst mal das da:
    [lua]function lowFuelIndicator.prerequisitesPresent(Motorized, specializations)
    return true;
    end;[/lua]
    Das muss so:
    [lua]function lowFuelIndicator.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(Motorized, specializations);
    end;[/lua]


    Dann ist zumindest dein Error weg...
    Aber zu der Sache an sich hat dir bazillus ja schon die passenden Tips gegeben ;)



    LG

  • Super, dann stricke ich mal weiter, danke euch ;)


    EDIT: Hmm also der Logfehler besteht immer noch...


    Mir ist noch nicht ganz klar, was ich nun jetzt mit der load Funktion holen soll.
    fuelCapacity ist ja ein fixer Wert, wie ich gelernt habe.
    Dann brauche ich den doch gar nicht aus der XML holen oder?


    Und wenn doch, dann hätte ich als Berechnung folgendes im Angebot:
    [lua]
    if self.fuelLevel < (self.fuelFillLevel / 100) * 90 then
    -- nächste Aktion
    end;
    [/lua]

  • In der load-Funktion brauchst du in deinem Fall nur ein Boolean anlegen, der für die Anzeige vom Text zuständig ist. Die Tankwerte werden durch "motorized" schon angelegt, kannst du also einfach benutzen (siehe dazu auch http://ls-mods.de/scriptDocumentation.php ). Berechnungen werden immer in update bzw updateTick gemacht. Da überprüfst du also, ob dein Text angezeigt werden soll und in der draw-Funktion fragst du halt den Boolean ab und lässt bei Bedarf den Text anzeigen.

  • Wegen des Fehlers beim Kaufen prüfe mal in der modDesc ob specialization name="xXx" jeweils gleich ist. Außerdem muss der className exakt dem Namen in der LUA entsprechen, also in deinem Fall lowFuelIndicator.


    bassaddict: Die Berechnung der Tankanzeige wird im Original im draw-Bereich gemacht ;) Müsste man im Extremfall mal testen, was seltener aufgerufen wird - updateTick oder draw, bzw. wo es weniger Last verursacht, aber bei den Kleinigkeiten wohl völlig schnuppe...

  • Wegen des Fehlers beim Kaufen prüfe mal in der modDesc ob specialization name="xXx" jeweils gleich ist. Außerdem muss der className exakt dem Namen in der LUA entsprechen, also in deinem Fall lowFuelIndicator.


    Ist alles korrekt verbaut!
    Ich kann aber gerne mal die modDesc dranhängen ;)

  • Also gut.. Was die Berechnung betrifft.


    Im Load-Teil musst du, wenn du die Berechnung im draw-Teil machst, nix schreiben.


    Du machst im Draw einfach folgendes:
    Wenn self.fuelFillLevel kleiner oder gleich deinem Minimum ist dann
    hier den renderText rein
    end;


    Übersetzen kannst es dir nun selbst in LUA ;)


    self.fuelFillLevel ist eine Variable die im Standartscript verwendet wird. So weit ich weiß wird die im motorized-Script definiert. Sie entspricht immer exakt dem Füllstand den das Fahrzeug an Sprit hat. Also genau die Variable die du brauchst.
    Da die Variablen ja alle im selben Table (self) sind, kannst du von jeder Spezi die im Mod eingebaut ist aus auf die Variable zugreifen. Darum musst du diese nicht irgendwo definieren, weil das ja schon eine andere LUA macht, die Variable also schon existiert wenn deine LUA aufgerufen wird.



    Was deinen Error betrifft, den du immer noch hast.. Poste am besten die LUA so wie du sie jetzt geändert hast noch ein mal. Vielleicht hat sich ja immer noch irgend ein Fehler eingeschlichen.. ;)


    Falls du immer noch "lowFuelIndicator.draw" drinne stehen hast könnte auch das der Grund sein. Das geht so nämlich auch nicht.. ;)



    LG
    Nachtrag:
    self.fuelCapacity ist eine weitere Variable die du brauchst. Die Variable enthält im Grunde das was du in deiner ersten LUA im load-Teil aus der XML geladen hast. Ist genau so wie die andere Variable eine die im motorized-Script definiert ist und auf die du einfach so zugreifen kannst.
    Dementsprechend kannst du dann dein Minimumwert mit Hilfe der Variablen ausrechnen lassen.

  • So,


    hier mal das Script wie ich es jetzt habe.
    Das Ausdokumentierte kann ignoriert werden.


    Oh bevor ich es vergesse... immernoch Log Error X(
    (sonst meckert die Engine über jeden Furz, warum nicht bei dem Script? :( )


    EDIT: Ja deinen Nachtag hab ich jetzt zu spät gesehen, ist aktuell nicht drin!

  • Also..


    lowFuelIndicator = ();


    muss


    lowFuelIndicator = {};


    Erklärung:
    Mit = {}; wird ein (zunächst leerer) Table definiert.. = () gibt es nicht..


    Sorry, hatte ich bei der ersten LUA übersehen.. :(



    LG
    ps. steht aber auch in der Log, in welcher Zeile der Fehler ist, und zwar recht weit oben, da wo die Mods geladen werden. Lohnt sich, wenn was nicht funktioniert auch mal da zu schauen, nicht nur da wo man den Mod kauft ;)

  • Das wird so nicht funktionieren. Du brauchst ein <= bzw ein >=, weil deine Anzeige ja ab einem bestimmten Wert angezeigt werden soll.
    Außerdem muss irgendwo "self.fuelCapacity" auftauchen, weil das ja die Tankgröße ist. Wenn du nur mit dem aktuellen Füllstand rechnest wird deine Anzeige nie eingeblendet werden.

Jetzt mitmachen!

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