(released)courseplay by netjungle,Wolverin0815 und Lautschreier(und community!!!!)

  • heiligs blechle
    da biste mal 2 tage auf montage im ausland und schon hamse mein script so wiet umgebaut das ichs kaum selbst erkennen kann


    ich hab an so manchen dingen gerätselt und ihr schreibt das einfach rein
    so find ich das schön
    wenn ich dann mal ne verbesserung habe werd ich sie posten(glaub kaum das ich da rankommen werde)


    bin stolz auf euch

  • Kann mir bitte jemand erklären was dieses Stück Code wohl so macht?


    Ich ging bisher davon aus, dass raycastAll durch irgendeine "Magic" mal in die onTipTrigger Methode rein kommt, aber Pustekuchen.


    Weiß hier jemand was raycastAll so macht?
    [lua]local tx, ty, tz = getWorldTranslation(self.aiTrafficCollisionTrigger)local nx, ny, nz = localDirectionToWorld(self.aiTractorDirectionNode, 0, 0, 1) raycastAll(tx, ty, tz, nx, ny, nz, "onTipTrigger", 10, self)[/lua]

  • So das allabendliche Statusupdate kommt heute mal vor 3Uhr morgens - mein Körper signalisiert mir ziemlich deutlich, dass ich auf Dauer nicht mit 4-5 Stunden Schlaf pro Nacht auskomme, daher werde ich jetzt mal nicht ewig über dem aktuellen Problem brüten sondern es an euch weitergeben. Und hoffen, dass hier jemand eine Idee zur Lösung hat.


    Aber erstmal das Statusupdate:
    Der Schlepper erkennt jetzt auch zusätzlich angehängte Trailer, man wird also später auch mit mehreren Hängern hintereinander abfahren können.
    Das beladen beider Hänger klappt noch nicht, da der Schlepper noch nicht vorfährt wenn der erste voll ist.
    Auch das erkennen des Abladetriggers macht Fortschritte:
    Die raycastAll-Geschichte von gestern konnte ich mit tante googles Hilfe lösen und er springt auch brav in meine Funktion wenn ein Trigger in der nähe ist.


    Hier der Code:




    function courseplay:findTipTriggerCallback(transformId, x, y, z, distance)
    print("i am in onTipTrigger")
    print(transformId)

    local trigger = g_currentMission.tipTriggers
    local count = table.getn(trigger)
    print(count)
    for i = 1, count do
    print(trigger[i].triggerId)
    if trigger[i].triggerId == transformId then
    print("hab den trigger gefunden")
    self.currentTipTrigger = trigger[i]
    end
    end
    end





    Damit kommen wir auch zu meinem Problem:
    Ich habe mir gedacht: Wenn ein Trigger in der Nähe ist, hole ich mir alle TipTrigger der Map, gehe die durch und schaue ob die ID die gleiche ist wie bei dem der grad in der Nähe ist. Ich ging davon aus, dass in g_currentMission.tipTriggers alle Trigger enthalten sind, dem ist aber offenbar nicht so.


    Die Einträge im Log sind folgende:




    i am in onTipTrigger
    4022
    0


    er findet also was mit der ID 4022, aber "count" ist 0.. und 0 ist viel weniger als ich erwartet hatte.


    Ich habe auch was gelesen, dass man Trigger erst registrieren muss, daher meine Idee: beim Einfahren des Kurses könnte man beim Abkippen den Trigger registrieren. Aber muss ich das denn wirklich?


    Wäre für einen Denkanstoß/Lösung/Idee usw sehr dankbar, morgen kann ich zwar nicht weitermachen, aber am Wochenende würde ich gern dafür sorgen, dass das Laden und Abkippen funktioniert.

  • Hallo,


    das Problem mit der Anzahl der TipTrigger hatte ich auch. Hab mal im PDA-Mod "abgegeuckt". Scheinbar liefern table.getn und table.maxn keine vernünftige Info.
    Die Zahl der Elemente der Tiptrigger-Table kann man aber mit folgendem Code bekommen:


    local i=0
    table.foreach(g_currentMission.tipTriggers,function (c)
    i=i+1
    end)



    i entspricht dann der Zahl der Elemente und man kann die IDs durchgehen.



    Beste Grüße

  • YEAAAAAAH BABY ;)


    Also erstmal, vielen Dank, dass ich wegen euch jetzt doch nicht ins Bett gekommen bin - jetzt habt ihr mich quasi gezwungen doch wieder ewig zu machen :P


    Ich hab jetzt in Anlehnung an eure beiden Vorschläge folgendes gemacht:



    -- tip trigger
    function courseplay:findTipTriggerCallback(transformId, x, y, z, distance)
    for k,trigger in pairs(g_currentMission.tipTriggers) do
    if trigger.triggerId == transformId then
    self.currentTipTrigger = trigger
    end
    end
    end


    und es FUNKTIONIERT! Also vielen Dank für die tatkräftige Unterstützung.


    Also aktueller Status: Schlepper wartet bis Hänger voll und der Autopilot schaltet sich vor der Abladestelle ab.


    Dann werde ich doch mal schauen ob ich es morgen noch hinkriege, dass der schlepper über den trigger rüberfährt bis die hänger über ihm sind, diese dann entläd, und ab zurück zum startpunkt.


    Jungs, vielen Dank nochmal - so funktioniert das prima!

  • Moin Jungs!


    Erst mal ein riesen kompliement an euch ,was ihr hier auf die Beine stellt. Finde es richtig cool ,da ihr euch den Abfahrhelfer vorgenommen habt. Wer nur alleine Zockt und das auf grösseren Maps ist auf den Helfer schon irgenwie angewiesen. ZU 09 Zeiten war der bei mir auch im Einsatz. Würde mich freuen wenn ihr den zum laufen kriegt.Also von mir noch ein gutes gelingen. ;)


    ps.@netjunge auch mal abschalten sonst dreht man irgendwann durch und mit ner Mütze voll Schlaf geht dann auch wider besser :D

  • Hallo, ich hab noch etwas probiert - komme aber aktuell auch nicht weiter...
    Folgende Änderungen hab ich noch gemacht: um Zeile 360


    und bei --tip trigger


    Bewirkt, dass der Traktor 5m vor den Triggern effektiv auf Stufe 1 verzögert und langsam über den Trigger fährt. Leider fährt er danach langsam weiter :pinch: , da ich es nicht schaffe self.currentTipTrigger wieder auf nil zu setzen. Mir fehlt da etwas Wissen um die Positionen abzufragen... Jedenfalls ist das Bremsmannöver "heftiger" als nur die brakeforce aus der Fahrzeug-XML, die bei "self.drive = false" wirkt...
    Eventuell kann man ja was daraus machen.

  • [lua]-- tip trigger
    function courseplay:findTipTriggerCallback(transformId, x, y, z, distance)
    self.currentTipTrigger = nil
    if distance < 5 then
    for k,trigger in pairs(g_currentMission.tipTriggers) do
    if trigger.triggerId == transformId then
    self.currentTipTrigger = trigger
    end
    end
    end
    end
    [/lua]


    So ist auch gut:D

  • Hey,


    die Sache mit self.currentTipTrigger=nil am Anfang des TipTriggerCallbacks habe ich mal so übernommnen.
    Sonst hätte ich hier wohl nen ähnliches Bug verbaut wie ihn der PathTractor hatte: nämlich, dass das Ding zurück zum Feld schlecht, weil der Trigger noch aktiv ist. Das ist so behoben. Danke dafür.


    Mit der Distance 5 geschichte könnte ich auch beim raystackAll am Ende statt der 10 ne 5 schreiben, hab jetzt erstmal die 10 gewählt.
    Bisher ist das Script auch noch nicht ganz soweit. Ich baue jetzt gleich mal ein, dass der ganze Mod Fahrstufen hat.


    Micha hatte das glaubich damals auch so gemacht, dass er eine Geschwindigkeit auf dem Feld, eine auf der Straße und eine auf dem Hof hatte. Ich werde eventuell noch eine Trigger-Geschwindigkeit einführen.


    Also ich baue jetzt erstmal ein, dass er die geschwindigkeit reduziert, und dann die neu Funktion "unload_tippers" ausführt bis die Dinger leer sind.


    Ich schau mal wie weit ich komme, kann von hier aus leider nicht testen - ärgert mich auch, dass ich heute abend soziale kontakte pflegen muss, würde gerne weiter machen ;)

  • @John Deere 6930
    Sieht zumindest besser aus ;)
    Ändert aber nichts daran, dass self.currentTipTrigger nicht nil wird. Der letzte distance-Wert ist immer kleiner als 5. Ich bräuchte eine aktuelle Position des Traktors und wenn Differenz aus aktueller Position und 5 < 0 müsste self.currentTrigger auf nil gesetzt werden, denn dann dürfte der Wert nicht mehr überschrieben werden. Wird übrigens so im Update-Bereich aufgerufen:
    [lua] raycastAll(tx, ty, tz, nx, ny, nz, "findTipTriggerCallback", 10, self)[/lua]
    Ja, da ist noch Verbesserungspotential, deswegen auch nur die paar Fragmente...


    /edit: viel zu langsam...

Jetzt mitmachen!

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