Beiträge von Sven777b

    auf der benannten Seite setzt man kein ECHT-Geld ein - sondern LS-€ eine virtuelle Forumwährung die man durch das Posten von Beiträgen, durch "Spenden" anderer User und durch ansässige Lohnunternehmen bekommen kann. Das Konzept ist nicht neu und soll ein bissel mehr Aktivität ins Forum bringen.

    insbesondere bei Tauschangeboten von fremden WIP-Mods, Beta-Mods oder Privatversionen sollte normalerweise eine öffentliche Blackliste geführt werden. Denn es gibt sicherlich genug Leute die glauben sie könnten denen vertrauen.


    Ich erhielt auch schon Tauschanfragen - Privatmod gegen Privatmod - wobei mir teils privatmods von anderen Leuten angeboten wurden. Ich hab in dem Falle direkt den Autor des Mods darüber informiert dass er dieser Person nicht mehr vertrauen darf. Aber diese Mod-Tauschereien nehmen eindeutig überhand.


    ich meine wenn jemand anfragt ob er etwas bestimmtes haben kann, dann ist das ja was anderes als wenn er private Sachen verbreitet.

    ja es ist manualIgnition.lua (von Templaer) - wenn du die Spezi korrekt eingebaut hast, müsste beim Einsteigen in einen Traktor der Motor aus sein und der Hilfetext für die Zündung erscheinen. Diese Spezi sorgt eigentlich auch dafür das der Motor anbleibt wenn man aussteigt. Zumindest alle Versionen davon die mir bisher begegnet sind.


    Falls dein Motor beim Einsteigen schon an ist, dann hast du dich vermutlich beim Einbau der Spezi vertan.

    wo wir wieder bei den Punkten wären , die für einen Release das allerwichtigste darstellen...


    Punkt 1: wenn du aus fremden Spezis zusammen kopierst (klaust) , dann frag die Autoren vorher. Ich glaube nicht dass du das gemacht hast. Damit trittst du ihre Arbeit mit den Füßen, schmückst dich mit fremden Federn , hast dabei nichts gelernt , ziehst Ärger auf dich und verärgerst andere und schadest damit der gesamten Community.


    Punkt 2: wenn du etwas releasen willst, checke es vorher unter allen möglichen und unmöglichen Bedingungen. Wer etwas released, hat dafür support zu leisten. Wenn sein Script Fehler enthält, unsauber geschrieben ist oder schwer zu implementieren ist , dann hat sich der Autor drum zu kümmern das alle Probleme beseitigt und alle Fragen geklärt werden. Das kann eine Vollzeit-Beschäftigung werden wenn man ein fehlerhaftes Script released hat.


    Punkt 3: "Schuster bleib bei deinen Leisten" - wer scripten will sollte sich eingehend mit der Scriptsprache beschäftigen und versuchen zu lernen. Wer keinen Bock darauf hat das wirklich zu lernen, der sollte tunlichst die Finger davon lassen - auch wenn sich einige Sachen leicht zusammen kopieren lassen. An der Stelle greifen wieder Punkt 1 und 2.


    Glückwunsch - du hast soeben am praktischen Beispiel präsentiert wie man es nicht macht. :thumbup:

    es gibt mehrere Scripts dieser Art.


    Ich nehme an du hast bereits eine for-schleife die durch alle Hänger rennt und in deren Ausführungsbereich du das renderText untergebracht hast. Im Grunde ist es ganz simpel... du benötigst eine offset-Variable mit der du einfach festlegst um wieviel die nächste Zeile versetzt werden soll. Im renderText gibst du ja an : renderText( x-position, y-position, schriftgröße, text ) - damit es sich nicht überlappt musst du also nach jeder Zeile von der y-position die Schriftgröße (+ 0.01 für einen schmalen Abstand) abziehen (abziehen weil 0:0 unten links ist) .


    das ganze sieht dann zum Beispiel so aus:


    Code
    local offset=0;
    for k,v in pairs(self.gefundeneHaenger) do
    renderText(0.8, (0.8 - offset), 0.02, string.format("%s : %0d t",v.name,v.fillLevel));
    offset = offset + 0.03;
    end;


    wie du siehst wird innerhalb der Schleife das offset immer um 0.03 erhöht bei einer Schriftgröße von 0.02 - dadurch sollte alles untereinander stehen. Die Zeile mit dem renderText wird bei dir vermutlich anders aussehen.


    PS: John Deere: ich denke den meisten ist bewusst wo sie sich die Funktionen abgucken könnten wenn sie das wollten. Ich bin aber froh darüber dass es noch Leute wie derschreiner gibt, die es selber hinbekommen wollen und deswegen eine Erklärung wünschen anstatt sich einfach bei anderen zu bedienen und am Ende doch nicht zu kapieren was sie da kopiert haben.

    hat hier irgendwer geschrieben das es sich um eine Komplettlösung handelt ? Mitdenken solltest du schon selber. Du hast nach Scripthilfe gefragt - nicht nach jemanden der dir das Script mundgerecht serviert.


    Meine Antwort bezieht sich lediglich auf die Frage wie du die Richtung umkehrst.
    Antwort : in dem du in die andere Richtung rotierst - also einen negativen Winkel nimmst. Im Grunde muss man das nichtmal fragen weils eigentlich logisch ist.

    in dem du (basierend auf dem Beispiel von Skullman) self.speed einfach negierst..


    Wechsel Vorwärts/Rückwärts :
    self.speed = -self.speed


    Prinzip dahinter : self.speed (eigentlich irreführender Variablenname) definiert ja den Winkel um den rotiert werden soll (im Bogenmaß - nicht in Grad !) - positiver Winkel heisst rechts herum , negativer Winkel heisst links herum.

    dt ist die delay-time - die verzögerungszeit. Die benötigt man letztlich um eine Bewegung oder Aktion Zeitsyncron für jeden Rechner zu gestalten. Das Spiel geht nacheinander alle Update() Funktionen aller Mods durch und fängt dann direkt wieder von vorne an. Je nach Anzahl der Mods kann daher der Zeitraum bis zum erneuten Aufruf der Update-Routine variieren.

    anbei das minimalste Grundgerüst einer Spezialisierung. Die bereits eingetragenen Funktionen sind Pflicht und müssen immer vorhanden sein.
    Natürlich solltest du in deinem Falle alle "myScript" umbenennen in etwas , was zu deiner Spezi passt.


    alles was aus der XML geladen werden soll kommt in den Bereich load()
    alles was im Spielverlauf passieren soll (rotationen, bewegungen etc) gehört ins update().
    alle Ausgaben gehören in den Bereich draw().

    Dateien

    • myScript.lua

      (464 Byte, 173 Mal heruntergeladen, zuletzt: )

    öhm - also was der Unterschied zwischen "um" und "auf" ist, das definiert meines Erachtens nach die deutsche Sprache - und in Mathe hat man sowas auch mal gelernt - vom gesunden Menschenverstand mal ganz zu schweigen...


    ändere ich etwas von 10° auf 90° dann ist es danach bei 90°
    ändere ich etwas von 10° um 90° dann ist es danach (je nach Richtung) -80° oder 100°


    btw. deine Signatur ist in jeder Hinsicht eine Frechheit. >>Privat<< Mods tauschen und auch noch Hilfe verweigern die man selbst ständig in Anspruch nimmt.

    nächster Hinweis:


    Scripte, Klassen und Funktionen sollten keine Bindestriche enthalten. Prinzipiell sollte man sich in der Programmierung auf rein alphabetische Bezeichner beschränken. Der Bindestrich dürfte Probleme bereiten.


    Bzgl. InputBinding - die InputBindings gehören in die ModDesc - haste bestimmt schon bei anderen Mods gesehen:

    Code
    <inputBindings>
    <input name="FHrotieren" key="KEY_4" button="" />
    </inputBindings>


    den Name verwendest du später im Script - auch hier keine Sonderzeichen, keine Leerzeichen, nur alphanumerisch.
    um dem Script zu sagen was er rotieren soll gibt es in deinem Falle 2 Möglichkeiten.
    1. Gängig ist es , einen Eintrag in der Fahrzeug-XML zu hinterlegen, den du im Script ausliest. zB

    Code
    <frontFH index="13|0" />


    ausgelesen wird das im Script im :load() Abschnitt mit so einer Zeile :

    Code
    self.nodeId = Utils.indexToObject(getXMLString(xmlFile,"vehicle.frontFH#index"));


    indexToObject() verwendet den Index und liefert dafür die unique-ID der FH zurück.
    getXMLString holt einen String (text) aus der XML-Datei - aus dem Knoten <vehicle><frontFH index="" >


    2. Alternativ da es sich speziell um die FH eines Traktors handelt und diese von der Vehicle.lua sowieso bereits ausgelesen wird, kannst du dir den Eintrag sparen und auf die hinterlegte nodeId zurück greifen. Die NodeId die du benötigst lautet:

    Code
    local nodeId = self.attacherJoints[2].bottomArm.rotationNode;


    (attacherJoint 1 ist hinten , 2 ist vorn , 3 und folgende sind die Anhängekupplungen - so zumindest bei normalen Traktoren)


    um die Tasteneingabe abzufragen bitte nicht die Funktion :keyEvent() nutzen - die ist veraltet. Direkt im Update-Bereich die Tasteneingabe abfragen:

    Code
    if InputBinding.hasEvent(InputBinding.FHrotieren) then
    self.FHrotieren = not FHrotieren;
    end;


    so kannst du eine Statusvariable (self.FHrotieren) bei jedem Tastendruck wechseln lassen. Vorausgesetzt du hast sie im load() Bereich vorher definiert ( self.FHrotieren = false; )

    nachtrag bzw. kleine korrektur bzgl. rotieren...
    Wenn du ein Objekt um 90° drehen willst, verwende

    Code
    rotate(nodeID,0,math.rad(90),0);


    Wenn du ein Objekt auf 90° rotieren willst, dann verwendest du

    Code
    setRotation(nodeId,0,math.rad(90),0);


    der entscheidende Unterschied ist der, dass bei setRotation das Objekt auf eine bestimmte Rotation gesetzt wird. HeadshotXXL hat das in seinem Beispiel dadurch gelöst das er vorher die bisherige Rotation des Objekts ausliest und dann 90° dazu addiert. Das ist aber ein zusätzlicher Zwischenschritt der nicht notwendig ist. Natürlich ist der Zeit/Performance-Verlust zu vernachlässigen aber Kleinvieh macht auch Mist und bei einem großen Script kommen schnell mal 20 oder 30 unnötige Funktionen dazwischen und das macht dann auch mal 2-3 Frames aus.

    mit den Shadern bezog ich mich darauf, dass es sich dabei meist um komplexe mathematische Formeln handelt - wenn da ein Parameter fehlt also irgendwas nicht so ist , wie es vom Shader erwartet wird, dann gibts sofort nen Fehler und unter Umständen einen Crash.


    Deine letzte Log ist ja bzgl. Fehlern weitestgehend bereinigt - Aktuell sehe ich da zumindest keinen offensichtlichen Grund für einen Crash. Daher würde ich an deiner Stelle mal beobachten ob der Absturz immer bei bestimmten Aktionen stattfindet. Soweit ich sehen kann, ist deine letzte Aktion wohl das Befahren der BGA gewesen. Evtl. ist der Fehler dort zu suchen.

    also ein paar Ursachen die mir dafür einfallen :


    - zuviele Lichtquellen in der Szene - da kommt dieser Fehler sehr häufig vor. So ab 4 Lichtquellen


    - fehlgeleiteter Shader - zB die Spiegel aus LS08 - wenn die falsch konvertiert wurden oder bei LS09 Gold vergessen wurde diese XML´s auch auf UTF8 umzustellen


    - unwahrscheinlich aber auch möglich : ein defektes Partikelsystem. Davon scheinst du einige zu haben - darauf deuten die Meldungen von weiter oben

    wenn sich alle in die falsche Richtung drehen, dann mach einen x-tausch wie am PKW - die rechten nach links , die linken nach rechts. Die Dreh-Richtung wird bestimmt durch die lokale Achse der Räder.


    Sollte sich nur eine Seite in die falsche Richtung drehen (weil du zB nur ein Rad kopiert und für die andere Seite umgedreht hast) , dann musst du das entsprechende Rad einfach in eine TransformGroup setzen. Die TransformGroup bleibt in Ausrichtung 0 0 0 - das Rad darin kannst du anpassen wie du willst. In der XML wird die TransformGroup als Rad angegeben.

    downforce ist ein dauerhafter vertikal wirkender Anpressdruck. Standard (also wenn nicht angegeben) ist null. Die werte könnte man etwa in G verstehen. also werte im Bereich 1 bis 5 sind üblich.
    Im Gegensatz zum Fahrzeuggewicht hat die Downforce keinen Einfluss auf die Trägheit oder Zugkraft eines Fahrzeugs / Objekts.


    die Gear Ratios kann man wie die Ritzel einer klassischen Kettengangschaltung am Fahrrad betrachten. Sie beeinflussen also das Verhältnis zwischen Kraft und Geschwindigkeit. Ein höherer Wert erzeugt mehr Kraft bei geringerer Endgeschwindigkeit und umgekehrt. Die Angabe kann in der Form "3" oder in der Form "1 2 3" geschrieben werden. In letzterem Falle gelten die Werte für die jeweiligen Tempomat-Fahrstufen. Somit kann man dafür sorgen das der Traktor bei Fahrstufe 1 deutlich mehr Leistung hat als bei Fahrstufe 3 (bzw. freiem Gas)


    differentialRatio ist übrigens das Gegenstück zu den gearRatios.

    die scripte sind verschlüsselt weil das Spiel kein openSource ist. Das ist lizenzrechtlich einfach notwendig. Giants will schliesslich seine Engine auch verkaufen - und wer kauft schon eine Engine welche in einem Spiel komplett offen liegt. Niemand kann die dataS.gar öffnen - auch heady nicht - das ist technisch schlichtweg nicht möglich. Allerdings wurde ein Teil der Scripte ja bereits mit dem einen Patch mitgeliefert - was es uns erlaubt hat überhaupt mods zu erstellen. Und der Rest basiert schlichtweg auf Hilfestellungen seitens der Entwickler.