GroundResponse.lua

V 1.5 Final (Realism Version) Mod für Landwirtschafts Simulator 17

10
Downloads heute
92.648
Downloads gesamt
283
Kommentare

Beschreibung

Empfehlung:

Hi Leute

 

dies ist für alle, die auch lieber etwas tiefer einsinkende Räder, schnelleres Festfahren bergauf und allgemein etwas realistischeren Grip auf Feldern hätten.

 

Auf trockenem und ganz besonders auf nassem Feldboden macht sich dies bemerkbar - je nach Bodenart.

 

Habe dazu die "GroundResponse.lua" aus dem For "Real Modul 3:Ground Response" von Giants erheblich bearbeitet.

Da Giants es nicht gestattet, das "4Real Modul 3:Ground Response" selbst erneut oder in veränderter Form hochzuladen, ist es nötig das script, die GroundResponse.lua als Mod hochzuladen und in das Giants "4Real Modul 3" einzubauen!

Die "GroundResponse.lua wird einfach in das "For Real Modul 3:Ground Response" eingefügt, und damit die standard "GroundResponse.lua" ersetzt (Backup ist nicht nötig, da ihr jederzeit im Hauptmenü im Spiel nur in "Mods aktualisieren" klicken müsst, und dort das "For Real Modul 3:Ground Response" aktualisiert-dadurch wirde meine ".lua" einfach wieder auf den Standard überschrieben).

 

 

Veränderungen:

  • tieferes Einsinken der Räder, vor allem bei Feuchtigkeit
  • viel geringere Traktion durch das tiefere Einsinken der Räder
  • mehr Einfluss von Reifendurchmesser und -breite auf das Einsinkverhalten
  • Ladung verursacht jetzt tieferes Einsinken der Räder
  • weniger unkontrollierte Kippneigungen auf der Straße
  • Räder sinken mehr nach Physikalischen Einflüssen ein, z.B. Kurvenfliehkraft, schräges fahren am Hang, Bodenunebenheiten
  • fahren mit Geschwindigkeiten von über 25 km/h auf weichem oder unebenem Boden wird mehr bestraft durch physikalische Kräfte

 

 

 

Da bis jetzt nur wenige an einer Verbesserung der Fahrphysik im LS 17 gearbeitet hat, war dies der Anlass für mich, es selbst zu versuchen, das Bodenverhalten etwas mehr nach meinen Wünschen umzugestalten, denn in dem Real Modul 3:Ground Response sind dafür schon alle Möglichkeiten gegeben-jedoch nicht umgesetzt.

 

Ich empfehle dringend die beiden Mods von "Modelleicher" ebenfalls zu installieren, damit der Effekt gut zur Geltung kommt:

  

Wichtig: damit bei gezogenen Geräten wie etwa Grubbern oder Pflügen kein "Aufbäumen" entsteht passt bitte in der Stuffandthings den Wert "realismUpdate_powerConsumer.lua" an: Standart ist 1.7 und empfehlen kann ich 1.2, dazu eine angepasste Arbeitsgeschindigkeit von 5-8 km/h beim Grubbern oder Pflügen.

 

Wichtig2: damit der Druck des Pfluges auf die Hinterachse des Traktors passt, stellt bitte in der stuffandthings den "realismUpdate_plough.lua" auf 1.0 bis 1.2 ein, je nach belieben (seit der V1.5 sind 1.4 als Wert zu viel).

 

Ich bin kein erfahrener Modder, habe aber in unzähligen Stunden und Versuchen die Werte in der "GroundResponse.lua" immer wieder verändert um mit dem Taschenrechner schlussendliche etwas mehr Spielspaß herauszuholen.

Wem diese Idee nicht gefällt, der brauch es nicht herunterladen, oder daran herumnörgeln-der solls besser machen.

Habe dieses script freiwillig und ohne irgendwelche finanziellen Beweggründe veröffentlicht, damit alle etwas mehr Spass an der Sache haben.

 

Des weiteren beheben die von mir veränderten Werte nicht das "Wegrutschen" am Hang, das mit dem Real Modul 3 zusammenhängt. Hier gilt weiterhin nur der Behelf den Traktor abzuschalten und abzusteigen, damit seine Position statisch wird.

 

Jeder kann diese Werte frei verändern. Probiert es aus, stellt es euch nach euren Wünschen ein.

 

Viele Grüße Andy

 

Credits

Modell: 
Textur: 
Script: Giants
Idee / Konzept: Giants
Tester: Giants/Rachederasen
Sonstige: Abänderung der von Giants vorgegebenen Werte Rachederasen

Änderungen

  • 09. April, 20:01 Uhr
    Version 1.5 Final (Realism Version)

    V1.5 Final

    Realismus Version

    - Einsinkverhalten und Grip auf nassem und trockenem Boden individuell angepasst
    - das Einsinken verhält sich je nach Bodenart anders
    - die sinktirefriction richtet sich speziell nach den steerable`s (lenkbaren Fahrzeugen), damit diese mit stark einsinkenden Rädern fast keine Zugkraft mehr haben
    - Anhänger und Geräte haben hohe Längs- und Quersteiffigkeit, damit wird das um die Ecke ziehen bei weichem Boden sehr viel schwieriger
    - asynchrone Tragfähigkeit zum Reifendurchmesser damit sich das Einsinkverhalten mehr echten Schleppern in verschiedensten Klassen entspricht
    - das Auf- und Abwandern der Anhängerreifen ist nun behoben
    - Einsinktiefe der Anhängerräder angepasst

    V1.5 Final

    Realism Version of V1.5

    - sinking depth and grip on wet and dry ground individually adjusted
    - the sinking is different depending on the type of soil
    - the sinktirefriction is specifically directed to the steerable (steerable vehicles) so that they have almost no pulling force with strongly sinking wheels
    - Trailers and equipment have high longitudinal and transverse stiffness, so the pull around the corner on soft ground is much more difficult
    - asynchronous load capacity to the tire diameter, so that the sinking behavior corresponds to more real tugs in different classes
    - the "up- and down- movement" of the trailer tires is fixed now
    - The sinking depth of the trailer wheels is adjusted

  • 28. März, 21:18 Uhr
    Version 1.4.1 dry/wet TwinWheel FIX

    Hier wie versprochen eine divergente Version der V1.4.1, in der das Einsinken auf trockenem Feld fast so tief ist, wie auf nassem Feld

    - 90% Einsinktiefe auf trockenem Feld
    - Zwillingsreifen gefixt

    Now as promised, here is the reverse Version of 1.4.1 for more sinking into dry field, almost like on wet field.

    Changelog:
    - 90 % sinking depth on dry ground
    - Twinwheels are fixed now

  • 21. März, 21:16 Uhr
    Version 1.4.1 ZIP

    - Einsinkverhalten jetzt gleichermaßen abhängig von der Reifenbreite wie auch dem Reifendurchmesser
    - auf trockener Koppel etwas mehr Grip, weniger schnelles Einsinken
    - max. Einsinktiefe um 8% erhöht

  • 21. März, 21:05 Uhr
    Version 1.4.1

    - Einsinkverhalten jetzt gleichermaßen abhängig von der Reifenbreite wie auch dem Reifendurchmesser
    - auf trockener Koppel etwas mehr Grip, weniger schnelles Einsinken
    - auf nasser Koppel abhängig von der Reifentragfläche und des Gewichtes auf diesem Reifen geringeres Einsinken von Reifen...
    - max. Einsinktiefe bei extremer Beladung um 8% erhöht

  • 01. März, 00:29 Uhr
    Version 1.3.5.2 Fix

    3. Versuch
    GroundResponse.lua in ZIP verpackt.

  • 28. Februar, 22:00 Uhr
    Version 1.3.5.2

    Link

  • 28. Februar, 17:51 Uhr
    Version Original Link zum 4Real Modul 3.Ground Response

Bilder



Videos



Dateien


28.02 2017
Modhoster Userbewertung
4.85 / 165 Stimmen

Empfehlungsrate

94,89%
nach 176 Stimmen

Ist dieser Mod besonders empfehlenswert?

Beschwerde: diesen Mod melden
V Original Link zum 4Real Modul 3.Groun...
Landwirtschafts Simulator 17
GroundResponse.lua
21,0 KB 47442
28. 02 2017 47.442
V 1.5 Final (Realism Version)
Landwirtschafts Simulator 17
GroundResponse V1.5 Final.zip
4,6 KB 21345
09. 04 2017 21.345
V 1.4.1 ZIP
Landwirtschafts Simulator 17
GroundResponse.zip
4,5 KB 8587
21. 03 2017 8.587
4 ältere Versionen

334 Kommentare

Um Kommentare schreiben zu können musst du dich einloggen.
Du kannst dich auch kostenlos registrieren, falls du noch keinen Account hast - dauert nur eine Minute.

  1. rachederasen 11. 04 2017

    Hier eine Video Demo zur V1.5

    https://www.youtube.com/watch?v=-69hhRQXO2w

    Gruß Andy


  2. rachederasen 10. 04 2017

    Die V1.5 der Ground Response.lua ist endlich fertig.

    (Die V1.5 beruht noch auf einem umgeschriebenen 4Real Modul 3: V1.0.0.0, und behebt nicht das Verrutschen durch beladene Frontlader).

    V1.5 Final
    Realismus Version
    - Einsinkverhalten und Grip auf nassem und trockenem Boden individuell angepasst
    - das Einsinken verhält sich je nach Bodenart anders
    - die sinktirefriction richtet sich speziell nach den steerable`s (lenkbaren Fahrzeugen), damit diese mit stark einsinkenden Rädern fast keine Zugkraft mehr haben
    - Anhänger und Geräte haben hohe Längs- und Quersteiffigkeit, damit wird das um die Ecke ziehen bei weichem Boden sehr viel schwieriger
    - asynchrone Tragfähigkeit zum Reifendurchmesser damit sich das Einsinkverhalten mehr echten Schleppern in verschiedensten Klassen entspricht
    - das Auf- und Abwandern der Anhängerreifen ist nun behoben
    - Einsinktiefe der Anhängerräder angepasst

    In dieser Version gilt wieder : Auf nassem Boden starkes Einsinken, wenig Grip...bestimmte Bodenarten haben aber auch auf trockem Boden bei hohem Gewicht/cm² hohes Einsinken (z.B. gegrubberter Boden ist sehr weich, gepflügter richtig weich,...)

    Damit das "Festbuddeln" auch so gelingt, wie ich es in ungefähr in echt habe, habe ich die Friction Werte der StuffAndThings auf overall 0.85, und field auf 0.60 gestellt !!
    (Keine Sorge, dies passt jetzt, da die Anhänger ja nicht von der sinkTireFriction betroffen sind, und somit etwas mehr Quersteiffigkeit beim fahren am Hang bieten.)



    Des weiteren hat Giants Stellung bezogen, bezüglich meiner Anfrage nach einem einbaufertigem Modul 3: Ground Response V1.5

    Sie möchten dieses nicht selbst als Volldownload anbieten, da sie ja grade ein Update mit diversen fixes (V1.0.1.0) ausgeliefert haben (und wir alle kennen das Ergebnis...)
    und möchten auch NICHT das ich es zum Download anbiete, wegen der Verwechslungsgefahr mit ihrem.
    Deshalb bleibt uns/euch leider weiterhin nichts anderes übrig, als die .lua ins Originale Modul einzubauen (passt bei V1.0.0.0 und V1.0.1.0).

    Schade ist, das ihr so nicht die angepassten Matschpartikel nutzen könnt aus der soilwet.i3D,..

    Private Nutzung und Verbreitung ist aber weiterhin kein Problem für sie.
    Deshalb wird hilfsbedürftigen auch weiterhin unter die Arme gegriffen! Wie gehabt.

    Sobald ich Zeit habe, werde ich auch ein paar Videos hochladen.


    Gruß Andy

    1 Antworten

  3. rachederasen 04. 03 2017

    https://www.youtube.com/watch?v=hDYKXnZPhXI

    Hier ein Video zur Installation


  4. rachederasen 01. 03 2017

    Noch mal für alle, die Fragen zur Installation haben:

    http://marhu.net/phpBB3/viewtopic.php?f=194&t=5849&start=10

    ...hier ist eine bebilderte Einbauanleitung ziemlich weit unten auf der Seite, mit der Überschrift ".lua ins Modul einbauen". Bitte nach dieser Anleitung verfahren.
    Wem die Bilder zu klein sind, kann diese mir strg+ auf seiner Tastatur vergrößern (anschließend mit strg- wieder verkleinern).

    Bei dem Entpacken (sowie auch wieder an ZIP-Kompremierten Ordner senden) des "FS17_ForRealModule03_GroundResponse" bitte beachten:

    Entpacken: Wenn ihr die"FS17_ForRealModule03_GroundResponse" entpackt, müssten da Folgende Dateien seinen:

    particleSystems (gelber Ordner)
    shaders (gelber Ordner)
    GroundResponse (.lua Datei)
    icon (Bild, DDS DAtei)
    modDesc (xml Datei)
    register (.lua Datei)
    (und nochmal die ursprüngliche "FS17_ForRealModule03_GroundResponse"-Zip)

    Dann die GroundResponse.lua durch meine neue hier erstzen.

    Verpacken: zum "verpacken" markiert ihr alle Dateien bis auf die "FS17_ForRealModule03_GroundResponse"-Zip und sendet diese per Rechtsklick eurer Maus an einen "ZIP-kompremierten" Ordner.

    Jetzt habt ihr 2 ZIP-Dateien stehen, davon sollte die alte ursprüngliche gelöscht werden, und die neue ZIP (die vorläufig einen Namen der 6 Unterdateien annimmt).

    Diese bitte noch umbenennen in "FS17_ForRealModule03_GroundResponse" und dann ab in de LS17 Modordner.

    Das wars schon.


  5. Ich kann mir die mod nicht downloaden dann kommt dieser Text:
    -- -- GroundResponse -- -- -- @author GIANTS Software -- @date 15/10/2016 -- @tester rachederasen 28/02/2017 -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved. GroundResponse = {}; function GroundResponse.prerequisitesPresent(specializations) return true; end function GroundResponse:load(savegame) self.loadParticleSystemsForWheel = GroundResponse.loadParticleSystemsForWheel; self.updateWheelDirtPS = GroundResponse.updateWheelDirtPS; self.updateWheelSink = GroundResponse.updateWheelSink; self.getWheelCurrentSink = GroundResponse.getWheelCurrentSink; self.updateWheelTireFriction = Utils.overwrittenFunction(self.updateWheelTireFriction, GroundResponse.updateWheelTireFriction); self.applyRandomForceToWheels = GroundResponse.applyRandomForceToWheels; if g_currentMission.wheelDirt ~= nil and g_currentMission.wheelDirt.referenceShape ~= nil and g_currentMission.wheelDirt.referencePS["soilDry"] ~= nil and g_currentMission.wheelDirt.referencePS["soilWet"] ~= nil then if self.wheels ~= nil and table.getn(self.wheels) > 0 then local numWheels = table.getn(self.wheels); for iWheel=1,numWheels do local wheel = self.wheels[iWheel]; if wheel.hasParticles then local refNode = wheel.node; self:loadParticleSystemsForWheel(refNode, wheel) if wheel.additionalWheels ~= nil then for _,additionalWheel in pairs(wheel.additionalWheels) do self:loadParticleSystemsForWheel(refNode, additionalWheel); end end end end for iWheel=1,numWheels do local wheel1 = self.wheels[iWheel]; if wheel1.oppositeWheelIndex == nil then for jWheel=1,numWheels do if iWheel ~= jWheel then local wheel2 = self.wheels[jWheel]; if math.abs(wheel1.positionX + wheel2.positionX) < 0.1 and math.abs(wheel1.positionZ - wheel2.positionZ) < 0.1 and math.abs(wheel1.positionY - wheel2.positionY) < 0.1 then wheel1.oppositeWheelIndex = jWheel; wheel2.oppositeWheelIndex = iWheel; break; end end end end end end end self.dirtParticleSystemDirtyFlag = self:getNextDirtyFlag(); end function GroundResponse:postLoad(savegame) for _,wheel in pairs(self.wheels) do wheel.sink = 0; wheel.sinkTarget = 0; wheel.radiusOriginal = wheel.radius; wheel.sinkFrictionScaleFactor = 1; wheel.sinkLongStiffnessFactor = 1; wheel.sinkLatStiffnessFactor = 1; end end function GroundResponse:loadParticleSystemsForWheel(refNode, wheel) wheel.dirtPS = {}; local psEmitterShape = clone(g_currentMission.wheelDirt.referenceShape, false, false, false); link(refNode, psEmitterShape); local x,y,z; if wheel.wheelTire == nil then x,y,z = localToLocal(wheel.driveNode, refNode, 0, 0, 0); else x,y,z = localToLocal(wheel.wheelTire, refNode, 0, 0, 0); end setTranslation(psEmitterShape, x+wheel.xOffset,y,z); setRotation(psEmitterShape, 0, 0, 0); setScale(psEmitterShape, 2*wheel.width, 2*wheel.radius, 2*wheel.radius); for _,name in pairs( {"soilDry", "soilWet"} ) do if g_currentMission.wheelDirt.referencePS[name] ~= nil then wheel.dirtPS[name] = {}; local psClone = clone(g_currentMission.wheelDirt.referencePS[name].shape, true, false, true); ParticleUtil.loadParticleSystemFromNode(psClone, wheel.dirtPS[name], false, g_currentMission.wheelDirt.referencePS[name].worldSpace, g_currentMission.wheelDirt.referencePS[name].forceFullLifespan); ParticleUtil.setEmitterShape(wheel.dirtPS[name], psEmitterShape); wheel.dirtPS[name].isActive = false; wheel.dirtPS[name].isActiveSend = false; wheel.dirtPS[name].particleSpeed = ParticleUtil.getParticleSystemSpeed(wheel.dirtPS[name]); wheel.dirtPS[name].particleRandomSpeed = ParticleUtil.getParticleSystemSpeedRandom(wheel.dirtPS[name]); --wheel.dirtPS[name].particleNormalSpeed = ParticleUtil.getParticleSystemNormalSpeed(wheel.dirtPS[name]); --wheel.dirtPS[name].particleTangentSpeed = ParticleUtil.getParticleSystemTangentSpeed(wheel.dirtPS[name]); end end end function GroundResponse:delete() for _,wheel in pairs(self.wheels) do ParticleUtil.deleteParticleSystems(wheel.dirtPS); if wheel.additionalWheels ~= nil then for _,additionalWheel in pairs(wheel.additionalWheels) do ParticleUtil.deleteParticleSystems(additionalWheel.dirtPS); end end end end function GroundResponse:mouseEvent(posX, posY, isDown, isUp, button) end function GroundResponse:keyEvent(unicode, sym, modifier, isDown) end function GroundResponse:readUpdateStream(streamId, timestamp, connection) if connection:getIsServer() then local dirty = streamReadBool(streamId); if dirty then for _,wheel in pairs(self.wheels) do wheel.dirtParticlesActive = streamReadBool(streamId); end end end end function GroundResponse:writeUpdateStream(streamId, connection, dirtyMask) if not connection:getIsServer() then if streamWriteBool(streamId, bitAND(dirtyMask, self.dirtParticleSystemDirtyFlag) ~= 0) then for _,wheel in pairs(self.wheels) do streamWriteBool(streamId, wheel.dirtParticlesActive); end end end end function GroundResponse:update(dt) if self.isServer then if self:getIsActive() then self:updateWheelSink(dt); self:applyRandomForceToWheels(dt); end end end function GroundResponse:updateTick(dt) if self.isClient then for _,wheel in pairs(self.wheels) do if wheel.dirtPS ~= nil then if wheel.netInfo.xDriveLast == nil then wheel.netInfo.xDriveLast = wheel.netInfo.xDrive; end local xDriveDiff = wheel.netInfo.xDrive - wheel.netInfo.xDriveLast; if xDriveDiff > math.pi then wheel.netInfo.xDriveLast = wheel.netInfo.xDriveLast + 2*math.pi; elseif xDriveDiff < -math.pi then wheel.netInfo.xDriveLast = wheel.netInfo.xDriveLast - 2*math.pi; end xDriveDiff = wheel.netInfo.xDrive - wheel.netInfo.xDriveLast; wheel.netInfo.xDriveLast = wheel.netInfo.xDrive; local wheelRotSpeed = math.deg(xDriveDiff) / (0.001 * dt); local maxWheelRotSpeed = 1080; local wheelRotFactor = math.abs(wheelRotSpeed) / maxWheelRotSpeed; wheelRotFactor = wheelRotFactor * wheel.radius; self:updateWheelDirtPS(wheel, wheelRotFactor, wheel.steeringAngle); if wheel.additionalWheels ~= nil then for _,additionalWheel in pairs(wheel.additionalWheels) do self:updateWheelDirtPS(additionalWheel, wheelRotFactor, wheel.steeringAngle); end end end end end end function GroundResponse:updateWheelDirtPS(wheel, wheelRotFactor, steeringAngle) if wheel.dirtPS ~= nil then local sizeScale = 2 * wheel.width * wheel.radius; for _,ps in pairs(wheel.dirtPS) do ParticleUtil.setEmittingState(ps, ps.isActive); if ps.isActive then -- emit count local speedEmitScale = wheelRotFactor * sizeScale; local speedEmitScaleWet = math.pow( 2*wheelRotFactor*sizeScale*g_currentMission.environment.groundWetness, 2 ); local emitScale = 0.5 * (speedEmitScale + speedEmitScaleWet); ParticleUtil.setEmitCountScale(ps, emitScale); -- speeds local speedFactor = 0.3 * wheelRotFactor; local speed = ps.particleSpeed * speedFactor; speed = math.min(speed, 0.001); ParticleUtil.setParticleSystemSpeed(ps, speed); --ParticleUtil.setParticleSystemNormalSpeed(ps, 1.0 ); --ParticleUtil.getParticleSystemTangentSpeed(ps, 0.4 ); ParticleUtil.setParticleSystemSpeedRandom(ps, ps.particleRandomSpeed * speedFactor); -- adjust position local dirSign = 1; if self.movingDirection < 0 then dirSign = -1; end local x,y,z; if wheel.wheelTire == nil then x,y,z = localToLocal(wheel.driveNode, getParent(ps.emitterShape), wheel.xOffset, 0, 0); else x,y,z = localToLocal(wheel.wheelTire, getParent(ps.emitterShape), 0, 0, 0); end setTranslation(ps.emitterShape, x,y,z); if self.movingDirection < 0 then setRotation(ps.emitterShape, 0,math.pi+steeringAngle,0); else setRotation(ps.emitterShape, 0,steeringAngle,0); end end end end end function GroundResponse:draw() end function GroundResponse:updateWheelSink(dt) local speed = self:getLastSpeed(); local detailId = g_currentMission.terrainDetailId; for _,wheel in pairs(self.wheels) do local width = 0.25 * wheel.width; local length = 0.25 * wheel.width; local x0,y0,z0; local x1,y1,z1; local x2,y2,z2; if wheel.repr == wheel.driveNode then x0,y0,z0 = localToWorld(wheel.node, wheel.positionX + width, wheel.positionY, wheel.positionZ - length); x1,y1,z1 = localToWorld(wheel.node, wheel.positionX - width, wheel.positionY, wheel.positionZ - length); x2,y2,z2 = localToWorld(wheel.node, wheel.positionX + width, wheel.positionY, wheel.positionZ + length); else local x,_,z = localToLocal(wheel.driveNode, wheel.repr, 0,0,0); x0,y0,z0 = localToWorld(wheel.repr, x + width, 0, z - length); x1,y1,z1 = localToWorld(wheel.repr, x - width, 0, z - length); x2,y2,z2 = localToWorld(wheel.repr, x + width, 0, z + length); end local x,z, widthX,widthZ, heightX,heightZ = Utils.getXZWidthAndHeight(nil, x0,z0, x1,z1, x2,z2); setDensityCompareParams(detailId, "greater", 0); local density, area, _ = getDensityParallelogram(detailId, x,z, widthX,widthZ, heightX,heightZ, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels); setDensityCompareParams(detailId, "greater", -1); local terrainValue = 0; if area > 0 then terrainValue = math.floor(density/area + 0.5); end local minVal, maxVal = 0, 1; local sinkSpeed = (dt/1000) * (speed/10) * (0.01 * math.random(120)); local maxSink = math.min(0.3, wheel.radius*0.7 * (0.8 + 0.5*g_currentMission.environment.groundWetness)) * 1.0; -- Multiplikator Zieleinsinktiefe von 0.6 - 1.3 if terrainValue == 1 then -- cultivator_gegrubberter Boden minVal, maxVal = 180, 180; -- Verhealtniswert im Ziel zum maximalem Einsinken sinkSpeed = sinkSpeed * 0.5; elseif terrainValue == 2 then -- plough_gepflügter Boden minVal, maxVal = 100, 100; sinkSpeed = sinkSpeed * 0.6; elseif terrainValue == 3 then -- sowing_gesähter Boden wie Weizen_Gerste_Raps minVal, maxVal = 110, 110; sinkSpeed = sinkSpeed * 0.3; elseif terrainValue == 4 then -- sowingWidth_gedrillter Boden wie Mais_Sonnenblumen minVal, maxVal = 120, 120; sinkSpeed = sinkSpeed * 0.4; elseif terrainValue == 5 then -- grass_Gras minVal, maxVal = 20, 30; sinkSpeed = sinkSpeed * 0.5; end local ploughEffect = false; if area == 0 then wheel.sinkTarget = 0; else if wheel.sink == wheel.sinkTarget or wheel.lastTerrainValue ~= terrainValue then local currentSink = self:getWheelCurrentSink(wheel); wheel.sinkTarget = math.min(maxSink, 0.01 * math.random(minVal, maxVal) * currentSink); -- 'ploughing effect' if terrainValue == 2 and wheel.oppositeWheelIndex ~= nil then local oppositeWheel = self.wheels[wheel.oppositeWheelIndex]; if oppositeWheel.lastTerrainValue ~= nil and oppositeWheel.lastTerrainValue ~= 2 then wheel.sinkTarget = wheel.sinkTarget * 1.5; ploughEffect = true; end end end end if wheel.sinkTarget ~= wheel.sink then local sinkDelta = maxSink * sinkSpeed; if terrainValue ~= wheel.lastTerrainValue then sinkDelta = maxSink * (dt/250); end if wheel.sink < wheel.sinkTarget then wheel.sink = math.min(wheel.sinkTarget, wheel.sink + sinkDelta); elseif wheel.sink > wheel.sinkTarget then wheel.sink = math.max(wheel.sinkTarget, wheel.sink - sinkDelta); end wheel.radius = wheel.radiusOriginal - wheel.sink; self:updateWheelBase(wheel); local sinkFactor = (wheel.sink/maxSink) * (0.4 + 0.6*g_currentMission.environment.groundWetness); -- bestimmt Einsinkverhalten_erste Zahl trockener Boden_zweite Zahl nasser Boden wheel.sinkFrictionScaleFactor = (1.0 - math.min(0.7, sinkFactor)); -- Traktion bei Einsinktiefe wheel.sinkLongStiffnessFactor = (1.0 - math.min(0.2, sinkFactor)); -- Bodensteiffigkeit in Fahrtrichtung beim Einsinken wheel.sinkLatStiffnessFactor = (1.0 - math.min(0.0, sinkFactor)); -- Bodensteiffigkeit in Querrichtung beim Einsinken self:updateWheelTireFriction(wheel); end wheel.lastTerrainValue = terrainValue; if wheel.dirtPS ~= nil then local enableSoilPS = false; if terrainValue == 1 then -- cultivator enableSoilPS = true; elseif terrainValue == 2 then -- plough enableSoilPS = true; elseif terrainValue == 3 then -- sowing enableSoilPS = true; elseif terrainValue == 4 then -- sowingWidth enableSoilPS = true; elseif terrainValue == 5 then -- grass enableSoilPS = false; end for _,ps in pairs(wheel.dirtPS) do ps.isActive = false; end if enableSoilPS and (speed > 1) and wheel.sink > 0 then if g_currentMission.environment.groundWetness > 0.2 then if wheel.dirtPS["soilWet"] ~= nil then wheel.dirtPS["soilWet"].isActive = true; end else if wheel.dirtPS["soilDry"] ~= nil then wheel.dirtPS["soilDry"].isActive = true; end end end if wheel.additionalWheels ~= nil then for _,additionalWheel in pairs(wheel.additionalWheels) do for _,ps in pairs(additionalWheel.dirtPS) do ps.isActive = enableSoilPS and (speed > 1) and wheel.sink > 0; end end end end end end function GroundResponse:getWheelCurrentSink(wheel) if wheel.maxDeformation == nil or wheel.wheelTire == nil then return 0; end local gravity = 9.81; local tireLoad = getWheelShapeContactForce(wheel.node, wheel.wheelShape); if tireLoad ~= nil then local nx,ny,nz = getWheelShapeContactNormal(wheel.node, wheel.wheelShape); local dx,dy,dz = localDirectionToWorld(wheel.node, 0,-1,0); tireLoad = -tireLoad*Utils.dotProduct(dx,dy,dz, nx,ny,nz); tireLoad = tireLoad + math.max(ny*gravity, 0.0) * wheel.mass; -- add gravity force of tire else tireLoad = 0; end tireLoad = tireLoad / gravity; local loadFactor = (tireLoad / wheel.restLoad); local totalWidth = wheel.width; if wheel.additionalWheels ~= nil then for _,additionalWheel in pairs(wheel.additionalWheels) do totalWidth = totalWidth + additionalWheel.width; end end local length = 2 * math.pi * (wheel.radius *1.5) * (20/360); -- Tragfähigkeit Reifenumfang local area = totalWidth * length; local loadFactor = math.min(10, loadFactor * 0.4 * (1.0/area) * (0.5 + (0.5*g_currentMission.environment.groundWetness))); -- bestimmt Einfluss der Ladung auf das Einsinken maxSink = loadFactor * wheel.maxDeformation; return maxSink; end function GroundResponse:updateWheelTireFriction(superFunc, wheel) if self.isServer and self.isAddedToPhysics then setWheelShapeTireFriction(wheel.node, wheel.wheelShape, wheel.sinkFrictionScaleFactor*wheel.maxLongStiffness, wheel.sinkLatStiffnessFactor*wheel.maxLatStiffness, wheel.maxLatStiffnessLoad, wheel.sinkFrictionScaleFactor*wheel.frictionScale*wheel.tireGroundFrictionCoeff); end; end function GroundResponse:applyRandomForceToWheels(dt) local numWheels = table.getn(self.wheels); if numWheels == 0 or not self:getIsActive() then return; end local speed = self:getLastSpeed(); local forceFactor = 0.001; local totalMass = 0; for _,component in pairs(self.components) do totalMass = totalMass + getMass(component.node); end for i=1, numWheels do local wheel = self.wheels[i]; if speed > 1 then if wheel.nextRandomHitTime == nil then local hitDistance = math.random(1, numWheels) * 0.5; local speedMS = speed / 3.6; local timeDelta = math.min(1000, (1000 * hitDistance / speedMS)); wheel.nextRandomHitTime = g_currentMission.time + timeDelta; end end if wheel.nextRandomHitTime ~= nil and wheel.nextRandomHitTime < g_currentMission.time then if wheel.hasGroundContact and wheel.contact == Vehicle.WHEEL_GROUND_CONTACT and wheel.forcePercentage == nil then local r1, r2 = Utils.getNormallyDistributedRandomVariables(5, 5*0.333); r1 = math.max(0.0001, r1); r2 = math.max(1, r2); -- linear influence of speed results in too intense hits --local force = forceFactor * totalMass * speed * r1; -- square root is better local force = forceFactor * totalMass * math.sqrt(speed) * r1 * 0.2; local maxForce = forceFactor * (totalMass * 0.5); force = math.min(force, maxForce); wheel.timeTillFullForce = r2 * 50; -- max. ~500ms wheel.forcePercentage = 0; wheel.currentForce = force; end end if wheel.currentForce ~= nil then local delta = (dt/wheel.timeTillFullForce) * 0.01 * math.random(20); if speed > 1 and not wheel.maxForceReached then wheel.forcePercentage = math.min(1, wheel.forcePercentage + delta); else wheel.forcePercentage = math.max(0, wheel.forcePercentage - delta); end local currentForce = wheel.forcePercentage * wheel.currentForce; local dx,dy,dz = 0,-currentForce,0; --local dx,dy,dz = localDirectionToWorld(wheel.node, 0,-currentForce,0); local px,py,pz = localToLocal(wheel.driveNode, wheel.node, 0,0,0); addImpulse(wheel.node, dx,dy,dz, px,py,pz, true); --addForce(wheel.node, dx,dy,dz, px,py,pz, true); if wheel.forcePercentage == 1 then wheel.maxForceReached = true; end if wheel.maxForceReached and wheel.forcePercentage == 0 then wheel.forcePercentage = nil; wheel.currentForce = nil; wheel.nextRandomHitTime = nil; wheel.maxForceReached = false end end end end

    1 Antworten

  6. olhund 14. Januar

    LUA call stack:
    =C:/Users/olhun/Documents/My Games/FarmingSimulator2017/mods/FS17_ForRealModule03_GroundResponse/register.lua (71) : delete
    dataS/scripts/BaseMission.lua (371) : deleteMap
    dataS/scripts/FSBaseMission.lua (537) : delete
    dataS/scripts/utils/Utils.lua (1870) : oldFunc
    dataS/scripts/utils/Utils.lua (1858) : oldFunc
    dataS/scripts/missions/mission00.lua (84) : delete
    dataS/scripts/events.lua (125) : delete
    dataS/scripts/gui/InGameMenu.lua (457) : OnInGameMenuMenu
    dataS/scripts/gui/InGameMenu.lua (715) : leaveCurrentGame
    dataS/scripts/gui/dialogs/YesNoDialog.lua (62) : callbackFunc
    dataS/scripts/gui/dialogs/YesNoDialog.lua (50) : sendCallback
    dataS/scripts/gui/elements/ButtonElement.lua (191) : raiseCallback
    dataS/scripts/gui/elements/GuiElement.lua (279) : mouseEvent
    dataS/scripts/gui/elements/GuiElement.lua (279) : mouseEvent
    dataS/scripts/gui/elements/GuiElement.lua (279) : mouseEvent
    dataS/scripts/gui/elements/GuiElement.lua (279) : mouseEvent
    dataS/scripts/gui/elements/Gui.lua (270) : mouseEvent
    dataS/scripts/main.lua (1857) : mouseEvent


  7. anthu 03. 08 2017

    hallo rachederrasen
    kann man diese groundresponse.lua auch mit giants neuem groundresponsemod v 1.0.2.0 verwenden?

    lg
    andreas

    2 Antworten

  8. gerrit0476 23. 05 2017

    Moin,

    ich habe mal eine Frage. Dein Script läuft super und es macht riesig Spaß aber beim Mod-Traktor "John Deere 7R TechMod V2" klappt es nicht! Dieser rutscht und hat auf dem Feld nur durchdrehende Reifen. Die einsinktiefen auf den Böden sind auch deutlich höher!
    Muss ich bei dem Traktor (Reifen) noch etwas anpassen?

    Gruß Gerrit

    1 Antworten

  9. Omat1998 12. 05 2017

    Moin Andy,
    erst einmal Danke, dass du dich so bemühst den Fehler zu finden!
    Ich habe noch ein bisschen getestet und ich weis nicht woran es lag, aber der Fehler ist weg. Frag mich nicht woran es jetzt lag. Ich habe zwar immer noch den ,,Fehler", dass die Trecker beim original Modul ein/zwei mal schaukeln, aber bei der überarbeiteten Version ist dies weg.
    Falls du mal sehen willst, was ich meine kann ich dir ein Video schicken, wo das zu sehen ist.

    Gruß Omat :D

    1 Antworten

  10. rachederasen 11. 05 2017

    Kommentarfunktion immer noch inaktiv...

    Hier das Video zum Test mit dem MF 7700:

    https://www.youtube.com/watch?v=bHvn0MkCaO8

    Gruß Andy


  11. rachederasen 11. 05 2017

    Moin Omat,

    danke für die Info.
    Habe jetzt noch mal kurz auf der Testmap getestet nur mit dem Modul 3 V1.5.2, Drive Controll, FillMassAdjust, Gearbox, und den Fahrzeugmods...Kein Schaukeln :( bin ratlos

    Kanns mir net erklären, habe den 7700 MF mal aufgenommen auf der "an der Ostsee"-Map, meinem TestAreal, der hat die beladenen Bandit 750 und den Fetten Krone Tridem hinter, auf 3 verschidenen Untergründen (Gras, Feld, Straße), kein Schaukeln, auf der neuen Südharz-Map schon.

    Das ist für mich grad unverständlich...
    Lade gerne ein Video hoch zum Beweis.

    Gruß Andy


  12. rachederasen 10. 05 2017

    Moin Omat.

    Das Problem, das du beschreibst, mit dem Schaukeln ist mir (wenn auch nur in abgeschwächter Form) auch aufgefallen.

    Nur bei mir sind nur einige Tridem (und auch nur voll beladen) betroffen. Der Bandit 750 machts z.B. net.

    Wenn ich die nächsten Tage mal wieder Zeit finde mich etwas länger an den PC zu setzen, als nur 5 min, dann schaue ich mal wo durch dies ausgelöst werden könnte.

    Hatte auch schon mal in einem meiner unzähligen Tests beobachtet, dass das Schaukeln mit dem Standart Modul 3 genau so auftritt.

    Könnte auch an einer anderen Mod liegen,...

    Um nach dem Problem mit einigen Rädern von Modschleppern zu suchen bin ich auch nocht nicht gekommen,...

    Gruß Andy

    1 Antworten

  13. Omat1998 10. 05 2017

    Moin Moin,
    ich habe dieses Skript runtergeladen und war erst einmal begeistert. Endlich müssen die Schlepper auch mal n bisschen Leistung haben um die Maschinen zu ziehen.
    Jetzt habe ich aber folgendes Problem entdeckt:
    Wenn ich an einen Schlepper einen Tandem oder Tridem Hänger hänge fängt dieser im Stillstand an zu schaukeln, was sich nur ändert wenn ich den Hänger abkoppel.
    Besonders fällt es auf mit dem MF 7700 und dem Krampe Bandit 750 auf einem Feld (egal ob gegrubert/gepflügt oder abgeerntet).

    Ich habe schon viel ausprobiert finde den Fehler aber nicht.
    Ich nutze das Modul 03 in der neuesten Version ( 1.0.1.0 ) und die Ground Response Version 1.5.
    kann mir einer helfen oder hat einer das gleiche Problem ?
    Grüße Omat


  14. Bomberman82 03. 05 2017

    Habe erst kürzlich mal Zeit gefunden es zu testen die neueste Version und muss sagen Top. Volle Punktzahl und klare Empfehlung aufjedenfall. Einzig bei einem vollen Ballenwagen wie dem Brandtner den man über Modhub beziehen kann, kann es passieren das der Hinterteil manchmal wegdriftet. Aufjedenfall genial und ein muss auf der Sosnovkamap da es ja in den Ostblockstaaten ja eh etwas rauher und schwerer zugeht mit dem lehmartigen Boden. Wer es noch realistischer mag kann auch den Manual Attacher nutzen. Danke fürs teilen.


  15. Fortschritt 29. 04 2017

    Genialer Mod war mit einem Xerion 5000 unterwegs und bin im Schlamm (bei Regen) auf dem Feld stecken geblieben trotz Allrad und Vorder- und Hinterachssperre. Einfach fehlende Traction aber der Kirovets 9450 zieht sauber durch wobei er sich auch quält mit dem Lemken 800 Dolomit Tiefenlockerer, genail manchmal zählt doch das größere Eigengewicht und nicht die PS-Anzahl :D

    1 Antworten

  16. matze210788 18. 04 2017

    Hallo ihr könnt mir bestimmt helfen ist die v1.5 final mp fähig?

    1 Antworten

  17. Metalhead1999 15. 04 2017

    Servus, ich hatte die vorherige Version der 4Real Module 03 - Bodenbeschaffenheit von ModHub installiert und dort diese lua Datei eingefügt. Es funktionierte Einwandfrei. Als ich aber mit einem Freund MP spielen wollte, (er hatte die neue Version der 4Real Module 03 Bodenbeschaffenheit) habe ich die neue Version runtergeladen und die alte durch die neue Version ersetzt. Jetzt aber wird der Mod im Spiel nicht mehr angezeigt, obwohl ich ihn im Modsordner habe. Kann mir da jemand helfen? Danke im voraus

    1 Antworten

  18. bogi11 12. 04 2017

    Hallo rachederasen,

    Ich will mich auch bei Dir für deine geniale Arbeit bedanken.
    Du hast es echt drauf, da kann sich Giants eine Scheibe abschneiden, dein skript
    ist einfach nur der Hammer jetzt macht der LS richtig Spass.

    Vielen ,vielen Dank ,das du deine Arbeit mit uns teilst.
    Empfehlung und alle Sterne die es gibt gehören Dir.

    Lieben gruß aus München Bogi11

    1 Antworten

  19. Darukiri 11. 04 2017

    wie kann ich den die einsinktiefe beim pflügen erhöhen ?

    2 Antworten

  20. rachederasen 11. 04 2017

    Moin Sven90,

    also ich müsste wissen, welcher Schlepper dies ist.
    Normalerweise wenn du die Stuffandthings so eingestellt hast, wie in der Beschreibung, dann passt das gut.

    Doch weiß ich aus Erfahrung das es Mod Schlepper wie den Xerion 4000 z.B. gibt, die wenig Bodenfreiheit und eine zu niedrige Kolli haben, und sich tatsächlich mit dem Pflug oder Grubber festfahren.

    Ist aber schnell im GE angepasst, so habe ich auch den Radium 45 repariert.

    Gruß Andy

    1 Antworten


} Plista_widget&sz=1x1&t=&c=1545163894