IC Problem: "Status" wird nicht geändert.

  • Hi...
    Ich habe in einen Mod die Ic Components eingebaut, zum einen die zusätzlichen Cameras und auch die "normalen" IC Buttons. Es handelt sich dabei um die StandartSelbstfahrspritze, als Mod. Zudem hat sie modelleichers "wheelScale.LUA" eingebaut bekommen.


    Die wheelScale funktioniert auch ohne Probleme, wird im Mod auch vor den IC Einträgen geladen.
    Die ICs funktionieren,bis auf einer, auch ohne Problem, folgende Dinge werden per IC (zusätzlich) bedient:


    -Licht an/aus
    -Fernlicht an/aus
    -Arbeitslichter (es sind 3 verbaut, einzeln zu schalten um keine LOG fehler zu bekommen, klappt auch)
    -Spritze aufklappen/zuklappen
    -Rundumleuchten an/aus
    -Spritze an/ausschalten


    diese IC bedienungen funktionieren alle, mit Texten usw.


    Nur der IC für die wheelScale geht nicht.
    Vielleicht kann mir da jemand weiterhelfen, damit ich auch verstehe warum es nicht geht. Die IC skripte stammen aus dem Lexion 770, die IC Button.LUA muss ja angepasst werden an die unterschiedlichen Buttons. Dort gebe ich jetzt mal die Zeilen für die Lichter/RUL und das anschalten der Spritze


    [lua]
    function Button:update(dt)
    if self.vehicle ~= nil then
    if self.event == "toggleHighbeam" then --Fernlicht
    self.isOpen = self.vehicle.B3["highbeam"][1].a;
    elseif self.event == "toggleBeaconLights" then --Rundumleuchten
    self.isOpen = self.vehicle.beaconLightsActive;
    elseif self.event == "toggleLight" then --normales Licht
    self.isOpen = self.vehicle.lightsActive;
    elseif self.event == "toggleSprayerActivate" then --Sprayer anschalten
    self.isOpen = self.vehicle.isTurnedOn;
    end;
    end;


    function Button:doAction(noEventSend, forceAction)
    if self.vehicle ~= nil then
    if self.event == "toggleHighbeam" then --Fernlicht
    if forceAction == nil then
    local lt = self.vehicle.B3["highbeam"];
    self.vehicle:setState("highbeam", not lt[1].a, true); --hier wird dann je nach zustand umgeschaltet zwischen
    else
    self.vehicle:setState("highbeam", forceAction, true); --State true or not true, also an/aus
    end;
    elseif self.event == "toggleBeaconLights" then --Rundumleuchten
    if self.vehicle ~= nil then
    if self.vehicle.beaconLightsActive then
    self.vehicle:setBeaconLightsVisibility(false); --hier wie in StandartSpezi set Visibility false/true
    else
    self.vehicle:setBeaconLightsVisibility(true);
    end;
    end;
    elseif self.event == "toggleLight" then --normales Licht
    if self.vehicle ~= nil then
    if self.vehicle.lightsActive then
    self.vehicle:setLightsVisibility(false); --hier wie in StandartSpezi set Visibility false/true
    else
    self.vehicle:setLightsVisibility(true);
    end;
    end;
    elseif self.event == "toggleSprayerActivate" then --Spritze anschalten
    if self.vehicle ~= nil then
    if self.vehicle.isTurnedOn then
    self.vehicle:setIsTurnedOn(false); --wie in Standartspezi "isTurnedON) true/false
    else
    self.vehicle:setIsTurnedOn(true);
    end;



    [/lua]


    das klappt auch alles, die Texte werden auch richtig angezeigt, mit anschalten oder ausschalten.


    Nun das Problem mit der "wheelScale", da ist der Status beim laden "false", der Button zeigt mit auch den Text für "aufziehen" korrekt an, beim klicken passiert aber nix, wenn ich über den definierten InputBinding die wheelScale setze, also Reifen scaliere und dann auf den IC Button gehe, dann zeigt er mir auch den Text an, für "abziehen" der Räder, also das IC Skript erkennt den Status, setzt ihn dann aber halt nicht von false auf true bzw umgekehrt.
    Und das müsste mir mal jemand erklären, bitte... ich habe es im IC Skript zur zeit so stehen:


    [lua]update(dt)
    elseif self.event == "toggleCareTyreIC" then --unter die oben reinkopierten events,
    self.isOpen = self.vehicle.wheelScaleState;
    end;



    doAction(noEventSend, forceAction)


    elseif self.event == "toggleCareTyreIC" then
    if self.vehicle ~= nil then
    if self.vehicle.wheelScaleState then
    self.vehicle:setWheelScaleState(true);
    else
    self.vehicle:setWheelScaleState(false);
    end;
    end;



    [/lua]
    So sieht es zur zeit aus... habe es auch schon nur mit
    [lua]
    self.wheelScaleState(true);
    [/lua]
    versucht, ging aber auch nicht. Oder funktioniert das so einfach nicht wie ich das Versuche???
    Die Variable sollte er ja kenne, da die "wheelScale.LUA" vor den Ic Skripten geladen wird, und somit sollte sie doch wie bei den Standart Spezis auch bekannt sein, oder?


    Wenn mir da jemand helfen kann, bin ich dankbar, es wäre auch nett wenn ich dann nicht einfach nen Code bekommen, sondern es mir auch erklärt wird, damit auch ich es verstehe.


    Achso, die LOG ist sauber, keine Einträge das Fehler vorhanden sind.

  • Moin..


    self.vehicle:setWheelScaleState(false)


    kannst du nur aufrufen wenn setWheelScaleState auch eine Funktion in deiner LUA ist...


    In deinem Fall hast du aber keine Funktion innerhalb der Wheelscale-LUA die du damit aufrufen kannst, logisch, passiert nix.


    Du kannst nun entweder deiner LUA eine zusätzliche Function verpassen (Falls das Ding irgendwann mal MP Ready machen willst zu empfehlen), oder vom IC-Script aus einfach die Variable direkt ändern.


    [lua]elseif self.event == "toggleCareTyreIC" then
    if self.vehicle ~= nil then
    if self.vehicle.wheelScaleState then
    self.vehicle.wheelScaleState = true;
    else
    self.vehicle.wheelScaleState = false;
    end;
    end;[/lua]



    EDIT: Noch bissel Erklärung..


    Eine Funktion in einer Spezi sieht immer so aus:


    [lua]
    function speziName:functionName(optionalerParameter, mehrOptionaleParameter)
    end;[/lua]


    Eine extra Funktion wird immer dann Sinnvoll wenn man das ganze MP-Ready machen will. Ganz einfach weil man in der Funktion dann die Variable auf ihren neuen Wert setzt, und diese Funktion von einem MP-Event aus aufrufen kann.
    Noch viel mehr Sinn macht eine Funktion bei einer bestimmten Berechnung zum Beispiel, die in einer LUA mehrmals vorkommt. Die packt man dann in eine Funktion, und ruft diese wiederum von den entsprechenden Stellen der LUA aus auf:


    [lua]
    function beispielSpezi:rechneAus(zahl1,zahl2)
    local ergebnis = nil;
    if zahl1 ~= nil and zahl2 ~= nil then
    ergebnis = zahl1 + zahl2;
    end;
    return ergebnis; -- auch das hier ist Optional, der Sinn dahinter gleich.
    end;
    [/lua]


    Eine Funktion kann mit return einen oder mehrere Werte zurück geben. Also so:



    [lua]
    function beispielSpezi:update(dt)
    local derAusgerechneteWert = self:rechneAus(2, 4);
    end;
    [/lua]


    Damit wird also die lokale Variable derAusgerechneteWert mit dem Ergebnis was die Funktion rechneAus zurück gibt belegt ;) Das zurückgeben ist Optional, wenn die Funktion nur etwas ausführen soll, ohne Ergebnis, lässt man die return Zeile einfach weg.


    So viel zum Thema Hintergrundwissen, falls ich was vergessen haben sollte verbessert mich bitte. Ach ja, wenn du eine neue Funktion in einer Spezi verwenden willst, musst du diese erst deklarieren. Am besten im load() Teil.


    [lua]
    function beispielSpezi:load(xmlFile)
    self.rechneAus = beispielSpezi.rechneAus; -- so wird die Funktion deklariert
    end;
    [/lua]



    LG

  • Hab das schnell mal geändert... geht aber auch nicht. Über IC scaliert er die Reifen nicht, setzt den Status also immer noch nicht um...!
    Text wird richtig angezeigt, und wenn ich per InputBinding ändere, wechselt auch der Text... nur die Reifen bleiben wie sie sind...werden nicht scaliert!

  • Hab oben noch was zum Thema funktionen geschrieben..


    Aber zu deinem Problem, sorry.. Falsch herum :D



    [lua]if self.vehicle ~= nil then
    if self.vehicle.wheelScaleState then -- hier wird ja überprüft ob true ist
    self.vehicle.wheelScaleState = false; -- wenn true ist müssen wir auf false setzen, nicht wieder auf true.. Sonst funktioniert das nicht ^^
    else
    self.vehicle.wheelScaleState = true;
    end;
    end;[/lua]


    Eben erst aufgefallen, hatte das einfach so von dir übernommen^^



    LG

  • Danke!!! Jetzt geht es, der fehler (true/false) hat sich wohl bei meinen Versuchen eingeschlichen,da hab ich das wohl mal gewchselt. Da heißt es wohl lernen, lernen ,lernen...


    Werd das mit der zusätzlichen Funktion, im wheelScale aber trotzdem mal versuchen.


    Danke für die Hilfe...

Jetzt mitmachen!

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