manualIgnition für alle Fahrzeuge inkl. Standardfahrzeuge

  • Sorry ich schau hier selten rein bzw. ich vergess es immer hier rein zuschauen. :D


    Wie gesagt, das motorSoundLeave war die einzigste Variante (die mir gelungen ist), das man auch einen Sound hört sobald man ausgestiegen ist. Bei sämtlichen anderen Versionen die ich bis jetzt hatte gab es nichts zu hören. Vielleicht gelingt es dir ja das so umzuschreiben, das der automatisch den idle-Sound nimmt.


    Ich hatte auch schonmal dran gedacht, diesen komischen Bug mit dem Helfer zu beseitigen, aber bin irgendwie von abgekommen.


    Das mit dem fuelUsed usw. hab ich auch noch nicht geschaut ob das unbedingt benötigt wird. Da müsste man die Script-Doku durchforsten, ob es da irgendwie was von gibt.


    MfG

  • Ahh jetzerdla, du möchtest dass der motorSound und nicht der aiMotorSound außerhalb abgespielt wird! Richtig?


    Hab in dieser Richtung auch schon a weng rumprobiert... leider erfolglos.




    Und von den Variablen wird vom Spiel anscheinend nur "fuelUsed" genutzt... und das um den Spritverbrauch für die Spielstatistik zu berechnen:

    Zitat von Steerable.lua


    [lua]local fuelUsed = self.lastMovedDistance*self.fuelUsage;
    self:setFuelFillLevel(self.fuelFillLevel-fuelUsed);


    g_currentMission.missionStats.fuelUsageTotal = g_currentMission.missionStats.fuelUsageTotal + fuelUsed;
    g_currentMission.missionStats.fuelUsageSession = g_currentMission.missionStats.fuelUsageSession + fuelUsed;[/lua]


    Wie man hier sieht, wird der Spritverbrauch also schon in der Steerable.lua berechnet und braucht deshalb meiner Meinung nach nicht nochmal vom manualIgnition Skript berechnet werden! Also raus damit...


    Da ist mir übrigens noch ein kleines Feature eingefallen, was das ganze noch etwas realistischer macht: und zwar der Spritverbrauch im Stand, wenn der Motor läuft.
    Zur Zeit ist es ja so, dass nur Sprit verbraucht wird, wenn sich das Fahrzeug bewegt. Habs jetz mal so eingerichtet, dass er im Stand bei laufendem Motor 10% vom "Normalverbrauch" verbraucht.


    EDIT: Ach und der Motor geht jetzt automatisch aus und kann auch nicht wieder eingeschalten werden, wenn der Tank leer ist! Das hat auf jeden Fall noch gefehlt.



    All: Fällt jemanden noch irgendwas ein, was man in dem Skript noch einbauen könnte?

  • Ahh jetzerdla, du möchtest dass der motorSound und nicht der aiMotorSound außerhalb abgespielt wird! Richtig?


    Hab in dieser Richtung auch schon a weng rumprobiert... leider erfolglos.



    Genau. Das aber nur wenn keiner im Traktor sitzt. Sonst soll denn halt der aiMotorSound abgespielt werden (was auch in dem Script so ist). Bei einigen Mods ist der aiSound auch gleich der motorSound. Dadruch hört man keinen Unterschied.


    Spritverbrauch im Stand ist ganz gut. ;)


    Im ganzen sehr schön realisiert. :D:thumbsup:


    MfG

  • Finde ich echt toll, das es das Script soweit geschafft hat.


    Ich hätte noch eine kleine Idee, die jetzt nicht direkt etwas mit der ManualIgniton zu tun hat, aber dennoch die Realität sehr steigern würde.
    Und zwar hab ich vor ein paar Wochen mal versucht, ein Script zu schreiben, womit es möglich ist, ein Fahrzeug ab zu schließen.
    Sinn der Sache war es, dass man vor allem im Multiplayer nicht ständig durch die ganze Palette von Fahrzeugen switchen muss, sondern nur zwischen seinen eigenen bzw. unabgeschlossenden.


    Ich weiß nicht, wie weit das realisierbar ist, denn ich hatte damals einige Fehler, doch ich denke dass so etwas durchaus machbar ist :)


    Evtl. könnte man beide Scripte miteinander verknüpfen. Beispielsweise kann ein Spieler ein Fahrzeug nur starten, wenn er den passenden "Schlüssel" besitzt?


    MfG

  • jup, deine Idee mit dem "Schlüssel" klingt garnicht so schlecht, FIAT80-90DT. Wäre sicherlich nicht nur was für den Multiplayer (in dem z.B. der Host dann sozusagen seinen Mitspielern in der "allmorgendlichen Teambesprechung" gewisse Fahrzeuge und damit Tätigkeiten zuweisen kann) sondern auch im Singeplayer würde es Sinn machen, wenn man z.B. viele Fahrzeuge besitzt, nicht immer durch alle "durchzappen" und auch nicht einfach nur den FastSwitcher nutzen möchte. Dann könnte man vielleicht irgendwo auf der Map die Schlüssel für die Fahrzeuge abholen, die man für den nächsten Arbeitsgang benötigt?


    Mein nächster Gedanke ist allerdings, dass es wahrscheinlich nicht alle manualIgnition-Nutzer nutzen möchten und es somit irgendwie abschaltbar bzw. gleich gesondert als eigenständige Modifikation realisiert werden sollte. Wird sicherlich auch erstmal ne Menge Lesearbeit in der Skript-Doku voraussetzen, um zu verstehen, wie das genau mit dem Wechsel der Fahrzeuge im Spiel geregelt ist.
    Von daher möchte ich den Leuten die erste Version der ManualMotorIgnition erstmal ohne dieses Feature zur Verfügung stellen.
    Würde mir aber gern einmal deine ersten Versuche anschauen, wenn du nix dagegen hast... vielleicht sollten wir dazu ein neues Thema im WIP-Mods Bereich erstellen und es finden sich noch ein paar Leute die daran basteln wollen?






    @Mofa-Killer: Das Problem mit dem motorSound ist anscheinend nur so wie du es gelöst hast, also mit einer Kopie der Sound-Datei lösbar. Kann mir das nur so erklären, dass das Spiel direkt auf den Sound zugreift und eine solche Datei nicht für zwei Sachen gleichzeitig nutzen kann. Wobei ich mir eigentlich vorstellen könnte, dass man mit createAudioSource bzw. createSample irgendwie zwei Kopien von dem Sound erstellen könnte...
    Folgendes sagt mir jedenfalls meine Log und auch meine Recherche im Internet:

    Zitat von Log.txt

    Error: Can't load resource: C:/Users/TOM/Documents/My Games/FarmingSimulator2011/mods/MBTrac1600TurboV2/Sounds/MBTrac1600idle.wav with same name but different type
    Error: Can't load resource: C:/Users/TOM/Documents/My Games/FarmingSimulator2011/mods/MBTrac1600TurboV2/Sounds/MBTrac1600idle.wav
    Error: Can't load sample C:/Users/TOM/Documents/My Games/FarmingSimulator2011/mods/MBTrac1600TurboV2/Sounds/MBTrac1600idle.wav.



    Vielleicht kennt sich ja jemand genauer mit den Sounds aus und kann mir meine Vermutung bestätigen bzw. uns darüber etwas aufklären?

  • Mit createSample müsste man das mal austesten, ob man davon eine Kopie vom jeweiligen motorSound erstellen könnte ohne die xml extra umzuschreiben. innerRadius, Volume usw. könnte man ja vom motorSound nehmen bzw. aiMotorSound. Man müsste mal schauen ob in der Script-Doku was mit createSample steht. So hätte man ne bessere Vorlage.


    MfG

  • @Mofa-Killer: Im GDN stehen die Funktionen createAudioSource und createSample auch nochmal genauer Beschrieben.
    Meine Vermutung ist, dass von einer Sound-Datei nur eine AudioSource bzw. nur ein Sample erstellt werden kann.
    Vielleicht schreibt ja noch jemand etwas dazu, der sich damit etwas besser auskennt.




    Hier aber mal noch eine andere Sache, bei der ich einen Rat bzw. eine fachkundige Meinung bräuchte.


    Es geht um das Event im Multiplayer, dass überträgt, ob der Motor bei den anderen Spielern ein- bzw. ausgeschalten werden soll.
    Das alte Event ist quasi hinfällig geworden, da ich einiges geändert und dabei die alte Funktion invokeIgnition() durch eine neue Funktion setMotorIgnition() ersetzt habe.


    Wenn man übertragen möchte, ob der Motor ein- bzw. ausgeschalten ist, müßte man noch einige Variablen mehr übertragen...
    wie z.B. self.steeringEnabled und self.deactivateEngineOnLeave. Der "traffic" wäre also theoretisch dementsprechend höher.
    Mein Gedanke ist also dieser: Von einem Fahrzeug wird nur die Variable self.ignitionKey übertragen und bei den anderen Spielern wird aufgrund dieser Information der Motor in diesem Fahrzeug ein- bzw. ausgeschalten.


    Da ich in Sachen Multiplayer noch nicht viele Erfahrungen gesammelt habe (und auch hauptsächlich noch Probleme mit den Parametern der einenzelnen Funktionen habe), wäre es schön, wenn ihr euch die folgenden Skriptabschnitte anschauen und eventuelle Auffälligkeiten/Fehler/Verbesserungsvorschläge posten könntet. Getestet ist die Multiplayer-Fähigkeit noch nicht.


    Zur besseren Übersichtlichkeit, sind die Zeilen in einzelne Lua-Quellcodes aufgeteilt. Die Zeilen stehen also alle in der ManualMotorIgnition.lua ;)


    Zum besseren Verständnis sind die meisten Zeilen kommentiert. Die Kommentare stammen teilweise auch von Face (aus einem Beispiel, dass er hier im Forum gepostet hat). Dazu auch noch ein wichtiger Hinweis vorab:
    Ist self.ignitionKey = true und self.allowedIgnition = true, wird der Motor eingeschalten (siehe function ManualMotorIgnition:updateTick(dt)).
    Ist self.ignitionKey = false und self.allowedIgnition = true, wird der Motor ausgeschalten.
    Beim Ein-/Ausschalten wird dann self.allowedIgnition wieder auf false gesetzt, damit die Bedingung zum Ein-/Ausschalten nicht mehr erfüllt ist und der Motor somit nicht andauernd (also mehrmals in der Sekunde) ein-/ausgeschalten wird.




    [lua]function ManualMotorIgnition:load(xmlFile)


    self.setMotorIgnition = SpecializationUtil.callSpecializationsFunction("setMotorIgnition");
    self.ignitionKey = false;
    self.allowedIgnition = false;
    -- ...
    end;[/lua]


    [lua]function ManualMotorIgnition:readStream(streamId, connection) -- wird Aufgerufen wenn ich selber ein Spiel join


    self.ignitionKey = streamReadBool(streamId);
    if self.ignitionKey then
    self.allowedIgnition = true; -- damit der Motor auch eingeschalten wird
    -- Der Motor muß nicht extra ausgeschalten werden(?), da der Motor im Ausgangszustand beim Laden schon ausgeschalten ist
    end;
    end;
    [/lua]
    [lua]function ManualMotorIgnition:writeStream(streamId, connection) -- wird am Server aufgerufen wenn ein Spieler joint


    streamWriteBool(streamId, self.ignitionKey);

    end;[/lua]


    [lua]function ManualMotorIgnition:update(dt)
    -- ...
    if InputBinding.hasEvent(InputBinding.MOTORIGNITION_STARTSTOP) then
    self:setMotorIgnition();
    end;
    -- ...
    end;[/lua]



    [lua]function ManualMotorIgnition:updateTick(dt)


    if self.ignitionKey and self.allowedIgnition then -- start the engine if setMotorIgnition()
    self:startMotor();
    -- ...
    elseif not self.ignitionKey and self.allowedIgnition then --stop the engine if setMotorIgnition()
    self:stopMotor();
    -- ...
    end;[/lua]


    [lua]function ManualMotorIgnition:setMotorIgnition(ignitionKey, noEventSend)


    SetMotorIgnitionEvent.sendEvent(self, ignitionKey, noEventSend); -- Wir verschicken self.ignitionKey mit dem Ausgangszustand (false/true), also vor dem anschließenden Ändern dieser Variable, da diese Variable ja dann auch bei den Empfängern geändert wird.


    self.ignitionKey = not self.ignitionKey; -- self.ignitionKey = true wird zu self.ignitionKey = false umgeändert... und umgekehrt, aus false wird true.
    self.allowedIgnition = true;
    -- Ist self.ignitionKey = true und self.allowedIgnition = true, wird der Motor eingeschalten (siehe function ManualMotorIgnition:updateTick(dt))
    -- Ist self.ignitionKey = false und self.allowedIgnition = true, wird der Motor ausgeschalten
    end;[/lua]



    [lua]SetMotorIgnitionEvent = {};
    SetMotorIgnitionEvent_mt = Class(SetMotorIgnitionEvent, Event);


    InitEventClass(SetMotorIgnitionEvent, "SetMotorIgnitionEvent");


    function SetMotorIgnitionEvent:emptyNew() -- hier wird ein leeres Event objekt erzeugt
    local self = Event:new(SetMotorIgnitionEvent_mt);
    self.className="SetMotorIgnitionEvent";
    return self;
    end;


    function SetMotorIgnitionEvent:new(vehicle, ignitionKey) -- Der konsturktor des Events (erzeugt eben ein neues Event). Wir wollen das vehicle (aufrufer) und die Variable speichern bzw. übertragen
    local self = SetMotorIgnitionEvent:emptyNew()
    self.vehicle = vehicle;
    self.ignitionKey = ignitionKey;
    return self;
    end;[/lua]


    [lua]function SetMotorIgnitionEvent:readStream(streamId, connection) -- wird aufgerufen wenn mich ein Event erreicht
    local id = streamReadInt32(streamId); -- hier lesen wir die übertragene ID des vehicles aus
    self.ignitionKey = streamReadBool(streamId); -- hier lesen wir die Variable ignitionKey aus
    self.vehicle = networkGetObject(id); -- wir wandeln nun die ID des vehicles in das passende Objekt um
    self:run(connection); -- das event wurde komplett empfangen und kann nun "ausgeführt" werden
    end;


    function SetMotorIgnitionEvent:writeStream(streamId, connection) -- Wird aufgrufen wenn ich ein event verschicke (merke: reihenfolge der Daten muss mit der bei readStream übereinstimmen (z.B. hier: erst die Vehicle-Id und dann die Variable senden, und bei Readstream dann eben erst die vehicleId lesen und dann die Variable)
    streamWriteInt32(streamId, networkGetObjectId(self.vehicle)); -- wir übertragen das Vehicle in form seiner ID
    streamWriteBool(streamId, self.ignitionKey); -- wir übertragen die Variable ignitionKey
    end;[/lua]


    [lua]function SetMotorIgnitionEvent:run(connection) -- wir führen das empfangene event aus
    if not connection:getIsServer() then -- wenn der Empfänger des Events der Server ist, dann soll er das Event an alle anderen Clients schicken
    g_server:broadcastEvent(SetMotorIgnitionEvent:new(self.vehicle, self.ignitionKey), nil, connection, self.vehicle);
    end;

    self.vehicle:setMotorIgnition(self.ignitionKey, true); -- wir rufen die funktion setMotorIgnition auf, damit auch hier bei uns der Motor ein- bzw. ausgeschalten wird.
    --Das true ist hier wichtig, denn wir haben ein event erhalten, d.h. wir brauchen es nicht mehr versenden, weil es alle anderen mitpsieler schon erreicht hat! Das true also hier nie vergessen!!!!!!
    --Haben wir self.ignitionKey = false empfangen, wird self.ignitionKey und self.allowedIgnition in der Funktion setMotorIgnition auf true gesetzt und der Motor eingeschalten.
    --Haben wir self.ignitionKey = true empfangen, wird in der Funktion setMotorIgnition self.ignitionKey auf false und self.allowedIgnition auf true gesetzt und der Motor ausgeschalten.

    end;[/lua]


    [lua]function SetMotorIgnitionEvent.sendEvent(vehicle, ignitionKey) -- hilfsfunktion, die Events anstößt (wird von setMotorIgnition() in der Spezi aufgerufen)
    if g_server ~= nil then -- wenn wir der Server sind dann schicken wir das event an alle clients
    g_server:broadcastEvent(SetMotorIgnitionEvent:new(vehicle, ignitionKey), nil, nil, vehicle);
    else -- wenn wir ein Client sind dann schicken wir das event zum server
    g_client:getServerConnection():sendEvent(SetMotorIgnitionEvent:new(vehicle, ignitionKey));
    end;
    end;[/lua]


    Soweit meine Theorie... was meint ihr dazu?

  • hmmm... ich fange wohl besser erstmal mit grundlegenden Fragen an, um den Ablauf im Multiplayer zu verstehen:


    Der Client verschickt ein Event nur an den Server, der Server verschickt darauf hin das Event an alle Clients? Ist das richtig?


    Bekommt dann der Client, der das Event an den Server geschickt hat, das Event vom Server zurück? Oder bekommen es nur die anderen Clients?

  • Hallo,


    bräuchte mal wieder Unterstützung bei der ManualMotorIgnition...


    Folgendes Problem: Die beiden Skripte OperatingHours.lua und DynamicExhaustingSystem.lua benötigen eine kleine Änderung, damit sie mit der MMI kompatibel sind.
    Da es anscheinend nicht möglich ist, die einzelnen Funktionen der beiden Spezies irgendwie zu überschreiben oder sonst wie zu beeinflussen, bleibt wohl nur noch die Möglichkeit die beiden Spezies auszutauschen.


    Jetzt wäre es sehr praktisch, wenn die geänderten Versionen bei der Installation der MMI in den betreffenden Fahrzeugen gleich automatisch mit ausgetauscht werden könnten.
    Das Einfügen ist kein Problem, dazu müßten allerdings vorher noch die alten Versionen der Spezies entfernt werden... und bei diesem Punkt bleib ich z.Z. hängen :(


    Hier einmal die Funktion aus der "register.lua" von der MMI:


    [lua]function ManualMotorIgnition_Register:loadMap(name)
    if self.firstRun == nil then
    self.firstRun = false;

    print("--- ManualMotorIgnition - specialization for manual motor ignition --- test version! not for public use!!");

    for k, v in pairs(VehicleTypeUtil.vehicleTypes) do
    local allowInsertion = true;
    if SpecializationUtil.hasSpecialization(Steerable, v.specializations) then
    local v_name_string = v.name
    local point_location = string.find(v_name_string, ".", nil, true)
    if point_location ~= nil then
    local _name = string.sub(v_name_string, 1, point_location-1);
    if rawget(SpecializationUtil.specializations, string.format("%s.manualIgnition", _name)) ~= nil then
    allowInsertion = false;
    print(tostring(v.name)..": Specialization manualIgnition is present! manualMotorIgnition was not inserted!");
    end;
    if rawget(SpecializationUtil.specializations, string.format("%s.ManualIgnition", _name)) ~= nil then
    allowInsertion = false;
    print(tostring(v.name)..": Specialization ManualIgnition is present! manualMotorIgnition was not inserted!");
    end;



    --hier beginnt das Austauschen der Spezi:
    if rawget(SpecializationUtil.specializations, string.format("%s.operatingHours", _name)) ~= nil then

    --damit man die Spezi mit table.remove entfernen kann,
    --benötigt man die Stelle in dem table, an der die Spezi abgespeichert ist:
    local speziLocation
    --mit der folgenden Schleife gehe ich die einzelnen Spezies durch:
    for i=1, table.getn(v.specializations) do
    local s = v.specializations[i];
    if s ~= nil then

    --hier bräuchte man ja theoretisch nur noch schauen, ob der Name der Spezi im table "v.specializations"
    --mit dem Namen der gesuchten Spezi übereinstimmt,
    --wenn dies der Fall ist, ist "i" die Stelle im table!


    end;
    end;

    print("speziLocation: "..tostring(i))

    print("deleting old operatingHours from:"..tostring(v.name));
    table.remove(v.specializations, speziLocation);
    print("adding new operatingHours to:"..tostring(v.name));
    table.insert(v.specializations, SpecializationUtil.getSpecialization("operatingHours"));
    end;
    end;
    if allowInsertion then
    print("adding manualMotorIgnition to:"..tostring(v.name));
    table.insert(v.specializations, SpecializationUtil.getSpecialization("manualMotorIgnition"));
    end;
    end;
    end;
    end;
    end;[/lua]


    Hab schon einiges ausprobiert, leider ohne Erfolg... ich bekomme einfach nicht den Namen der Spezi ausgegeben :(


    Hat jemand von euch eine Idee, wie man den Namen der Spezi bekommt?


    Oder vielleicht eine ganz andere Art die Spezies zu löschen?


    Bin für jeden Hinweis dankbar...


    Gruessla TOM

  • okay... könntest du aber bitte deine Meinung noch Begründen? Vielleicht überseh ich ja irgendwas was wirklich dafür spricht, nicht derart in die Spezies anderer Mods einzugreifen. Für jeden Hinweis bin ich sehr dankbar. Schließlich soll die Modifikation das Spiel bereichern und nicht verschlechtern ;)



    Zum Verständnis möchte ich auch noch gern mal kurz aufzeigen, was an der OperatingHours.lua und der DynamicExhaustingSystem.lua geändert werden müßte:


    In beiden Skripts wird davon ausgegangen, dass der Motor automatisch läuft wenn sich ein Spieler darin befindet und automatisch ausgeschalten wird wenn der Spieler das Fahrzeug verläßt. In der OperatingHours.lua noch zusätzlich wenn der Helfer aktiv ist.


    Die Auspuffklappen werden also bewegt sobald man das Fahrzeug betritt, sobald man das Fahrzeug verläßt hört die Bewegung auf.
    [lua]if self:getIsActive() then
    if self.exhaustingSystem.cap ~= nil then
    local angle = math.rad(math.random(-20,5)) + self.exhaustingSystem.maxRot * self.motor.lastMotorRpm / self.exhaustingSystem.maxRpm;
    angle = math.max(math.min(angle, 0), self.exhaustingSystem.maxRot);
    setRotation(self.exhaustingSystem.cap, angle,0,0);
    end;
    ...[/lua]
    Genauso die Betriebsstunden, sie werden nur/sobald gezählt wenn sich ein Spieler im Fahrzeug befindet bzw. wenn der Helfer aktiv ist.
    [lua] if self:getIsActive() or self.isHired then
    self:addOperatingTime(dt);
    end;[/lua]


    Wenn man diese Bedingungen jetzt gegen die Bedingung "Wenn der Motor gestartet ist" (if self.isMotorStarted then) austauscht, dürften die Spezies noch genauso problemlos laufen wie vorher und wären sogar für den manuellen Motorstart geeignet... wenn ich da jetzt keinen Denkfehler habe, ist das in meinen Augen doch eine Bereicherung für das Spiel. Oder was meint ihr dazu?

  • Sicher, ist nur die Frage welche Ausmaße das noch annimmt wenn man irgendwann jede LUA ändern muss um mit dem Motorstart klar zu kommen.


    Falls es dir hilft, so macht es sven777b in seiner removeAttachable.lua, die spezi Attachable zu enfernen:


    [lua]function removeAttachable:load(xmlFile)
    for i,v in ipairs(self.specializations) do
    if v == Attachable then
    table.remove(self.specializations,i);
    break;
    end;
    end;
    end;[/lua]


    Auf diese Art und Weise müsstest dann eben in die manualIgniton.lua selbst den Austausch einbauen, nicht in die Register.lua


    Also in etwa so:
    [lua]function deineLUA:load(xmlFile)
    for i,v in ipairs(self.specializations) do
    if v == dieAlteVersionDerSpezi then
    table.remove(self.specializations,i);
    table.insert(self.specializations, SpecializationUtil.getSpecialization("deineVersionDerSpezi"));
    break;
    end;
    end;
    end;[/lua]


    Ist nur laut gedacht.. Viell. hilfts dir ja.. :)



    LG

  • Man kann und sollte davon ausgehen, dass Specis evtl. vom Erbauer eines Mods -aus welchen Gründen auch immer- verändert werden. Du gehst davon aus, dass überall die gleiche Version verbaut ist, und ersetzt diese einfach. Damit änderst Du maßgeblich einen Mod und baust möglicherweise Fehlerquellen ein, die sehr schwer nachzuvollziehen sind.


    Ich hoffe, Du verstehst was ich meine.

  • jup, verstehe was du meinst webalizer... genau aus diesem Grund hab ich beim Einfügen der MMI auch darauf geachtet, dass sie nur eingefügt wird wenn keine andere manualIgnition schon verbaut ist.
    Bei der OperatingHours und der DynamicExhaustingSystem konnt ich mir nur einfach nicht vorstellen, dass diese irgendwie verändert sein würden... aber du hast Recht!
    Die Möglichkeit besteht und damit sollte man davon auch ausgehen. Im Prinzip versuch ich ja auch gerade selber nix anderes... verändern/anpassen ;)
    Danke für deinen Hinweis!



    Auch ein dickes Dankeschön an dich, modelleicher, für den heißen Tip mit der removeAttachable.lua von Sven!
    Mit den Standard-Spezies (Attachable, Honk etc.) funktioniert es auch einwandfrei... nur leider wieder nicht mit den eingebauten Spezies (wie OperatingHours bzw. DynamicExhaustingSystem). Es scheint wohl das gleiche Problem zu sein, wie wir es hier weiter vorn im thread schon behandelt haben... man muß anscheinend noch angeben, wo die Spezi zu finden ist.


    Dafür gibt es zwar sicherlich auch wieder eine Lösung, aber aus dem oben genannten Grund sollte wohl lieber ein anderer Weg gegangen werden.
    Und zwar der Weg mit den originalen Spezies OperatingHours bzw. DynamicExhaustingSystem... wird dann zwar keine optimale Lösung sein, weil dann z.B. bei ausgeschaltetem Motor die Betriebsstunden auch gezählt werden wenn man im Fahrzeug sitzt oder die Auspuffklappe mit Gewalt von der MMI "zugedrückt" wird obwohl die DynamicExhaustingSystem.lua sie gleichzeitig "tanzen" lassen möchte :D
    ...aber gut, im Prinzip ist ja die ganze manualIgniton-Geschichte schon die reinste Rumpfuscherei: so sagt ja z.B. die Steerable.lua beim Einsteigen "starte den Motor" während die manualIgnition gleichzeitig sagt "mach den Motor aus" und so weiter und so fort...


    EDIT: Wenn ich die geänderte OperatingHours bzw. DynamicExhaustingSystem mit beilegen darf und sie sich somit jeder bei Bedarf in seine Mod-Fahrzeuge einbauen kann, ist das doch auch eine Lösung mit der man leben kann würd ich meinen!


    Da wäre es vielleicht eleganter, gleich die Steerable.lua dahingehend zu überarbeiten und zu ersetzen... von ihr dürften ja auch noch keine veränderten Versionen in Mods "rumfahren" und somit dürfte es durch das Ersetzen auch nicht zu Fehlern kommen... theoretisch^^
    EDIT: Dumme Idee, das würde natürlich noch mehr Fehler verursachen, da es einige Skripte gibt, die von der originalen Steerable.lua abhängig sind!

Jetzt mitmachen!

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