Turbotaste

Herbert61
Beiträge: 2
Registriert: Sa Jul 16, 2016 10:12 am

Turbotaste

Beitragvon Herbert61 » Sa Jul 16, 2016 10:28 am

Hallo zusammen

ich habe mir Euere Videotut's zum Thema scripting angesehen. Leider geht die Serie nicht weiter :roll:
Meine Frage :

Ich will per Tastendruck die Leistung ( torqueScale ) oder die Geschwindigkeit ( maxRpm ) veraendern.
Habe mich dabei an den Videos orientiert und komme aber nicht weiter.
Das ganze sollte auch MP sein und fuer LS15.

Turbo = {}

function Turbo.prerequisitesPresent(specializations)
return true
end;

function Turbo:load(xmlFile)
self.Leistung = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.motor.maxRpm"));
self.Turbostate = false
end

function Turbo:delete()

end;

function Turbo:mouseEvent(posX, posY, isDown, isUp, button)

end;

function Turbo:keyEvent(unicode, sym, modifier, isDown)

end;

function Turbo:update(dt)
if self:getIsActiveForInput ()then
if InputBinding.hasEvent(InputBinding.Taste_Turbo)then
self.Turbostate = (not self.Turbostate)
end
if self.Turbostate == true then self.Leistung = self.Leistung+300
else self.Leistung = self.Leistung-300
end
end;
end

function Turbo:draw()

end;


So funktioniert es jedenfalls nicht :oops:

Ich hoffe, jemand im Forum hat eine :idea: und teilt sie mir mit :shock:

Bis dahin - Euer Herbert61
Wer nicht weiter kommt ist zu faul um zu fragen

Benutzeravatar
ansomale
Schwabenrentner
Schwabenrentner
Beiträge: 1699
Registriert: Mo Jun 28, 2010 7:52 pm
Wohnort: NRW

Re: Turbotaste

Beitragvon ansomale » Sa Jul 16, 2016 5:40 pm

Hi,

ein Link zu dem genauen Thema wäre hilfreich, so müssen die User die helfen wollen nicht erst lange suchen.

Kann es sein das es ein LS13 Script ist der in LS15 dann halt nicht funktioniert weil er nicht dafür gedacht ist bzw.
verschiedene Bedingungen in LS 15 nicht erfüllt oder unterstützt werden?

Nur so eine Idee, habe selber kein Tiefe Kenntnis der Materie.

Lg
der anso
"I'm completely operational and all my circuits are functioning perfectly."

Herbert61
Beiträge: 2
Registriert: Sa Jul 16, 2016 10:12 am

Re: Turbotaste

Beitragvon Herbert61 » So Jul 17, 2016 12:33 pm

Hallo zusammen und danke fuer eine Antwort

das ist noch garkein script - ich will versuchen anhand des Videotut zu Thema scripting ein script zu erstellen.
Im Video werden die Hinterreifen scalliert - ich will einen Turbo einbauen (spoiler).
Aber es klappt einfach nicht :oops:
Wer nicht weiter kommt ist zu faul um zu fragen

Benutzeravatar
ansomale
Schwabenrentner
Schwabenrentner
Beiträge: 1699
Registriert: Mo Jun 28, 2010 7:52 pm
Wohnort: NRW

Re: Turbotaste

Beitragvon ansomale » So Jul 17, 2016 3:41 pm

Sry,
zu schnell gelesen.
Hatte es erst so verstanden, das ein bestehendes umgebaut werden soll.

Da muss ich dann leider passen.

Lg.
der anso
"I'm completely operational and all my circuits are functioning perfectly."

Online
Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Turbotaste

Beitragvon modelleicher » Mo Jul 18, 2016 10:05 am

Hallo..

Wie du selbst schon fest gestellt hast geht das so nicht.

Leider kann man auch nicht innerhalb eines Posts erklären wie es geht weil dein Vorhaben doch etwas Umfangreicher ist und ein wenig mehr Grundverständnis zum Thema voraussetzt.

Code: Alles auswählen

self.Leistung = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.motor.maxRpm"));


Damit holst du nur einen voreingestellten Wert aus der XML (und das auch noch falsch, dazu gleich noch). Das dient dazu um in der XML Werte anzugeben die später im Script verwendet werden. Du kannst damit nicht den tatsächlichen maxRpm Wert verändern, der wird von einem anderen Script beim Kauf des Mods aus dessen XML geladen und eben fortan in einer Variablen gespeichert.
Wenn du den Wert ändern willst musst du die Variable ändern.

Außerdem kannst du nicht mit Utils.indexToObject() einen Wert aus der XML laden der kein Index ist, die Funktion wie der Name schon sagt wandelt einen Index in eine objektID um.. Geht natürlich nur mit Indexen, nicht mit irgendwelchen Werten.
Im Fall eines Wertes musst du einfach nur getXMLString(xmlFile, "vehicle.motor.maxRpm") verwenden. Wobei auch das falsch ist, weil getXMLString einen string zurück gibt. Was du suchst wäre Integer (Ganzzahlen) oder float(Kommazahlen) also getXMLFloat oder getXMLInt. Abgesehen davon gibt es noch getXMLBool für Boolean Werte (true/false)
(Findest du alles hier https://gdn.giants-software.com/documen ... ipting.php unter XML)

Aber wie anfangs schon erwähnt hilft das alles erst mal nix weiter, weil du damit lediglich eine Variable in deinem Script änderst (self.Leistung) die eben keinen Einfluss auf die tatsächliche Leistung hat. (motor.maxRpm ist übrigens auch maximale Drehzahl, nicht Leistung)

Die tatsächlichen Variablen kannst du hier nach lesen:
http://www.ls-mods.de/scriptDocumentati ... hicleMotor
Ist allerdings ein Sonderfall weil das ganze am Ende in self.motor gepackt wird, also alles was in dem Script als self.variablenNamen geladen wird ist im restlichen LS dann self.motor.variablenNamen.
Wie du in Zeile 20 sehen kannst wäre das dann self.motor.maxRpm, das ist der Wert den du im Script verändern müsstest um die Drehzahl zu ändern.

Die Leistung zu ändern wird ein bisschen schwieriger, weil die in eine sogenannte AnimationCurve geladen wird (Drehmomentkurve z.b. für die Leistung) anhand der XML Werte woraus das Spiel dann die jeweilige Leistung bei der jeweiligen Drehzahl errechnet. Wenn du die Leistung ändern willst musst du also diese Drehmomentkurve ändern)


Abgesehen davon sind noch ein paar weitere logische Fehler in deinem Script.
InputBinding.hasEvent() wird immer aufgerufen wenn eine Taste gedrückt wird und zwar genau ein mal pro Tastendruck. In deinem Script heißt das wenn die Taste gedrückt wird ist self.TurboState auf true, wird sie nich mal gedrückt ist self.TurboState auf false.

Das bedeutet dann für dein Script dass sobald die Taste einmal gedrückt wird und self.turboState auf true steht wird zu self.Leistung immer 300 dazu addiert in jedem Update Loop (zwishen 20 und 60 mal die Sekunde) und wenn es auf false steht wird im selben Takt 300 abgezogen.
Du müsstest also dafür sorgen dass die Addition bzw. Subtraktion nur einmal passiert wenn der Tastendruck passiert und nicht dauerhaft im Loop ;)


LG


Zurück zu „Fragen und Probleme rund ums Modding“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast