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:
- "stuffandthings" https://forum.giants-software.com/viewtopic.php?f=886&t=97394&start=45
- https://www.modhoster.de/mods/filltypemassadjustment-fur-ls17-realistische-ladegewichte
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
-
09. April, 20:01 UhrVersion 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 angepasstV1.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 UhrVersion 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 gefixtNow 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 UhrVersion 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 UhrVersion 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 UhrVersion 1.3.5.2 Fix
3. Versuch
GroundResponse.lua in ZIP verpackt. -
28. Februar, 22:00 UhrVersion 1.3.5.2
Link
-
28. Februar, 17:51 UhrVersion Original Link zum 4Real Modul 3.Ground Response
-
von rachederasen
vor mehr als 7 Jahre
-
von rachederasen
vor mehr als 7 Jahre
-
von rachederasen
vor etwa 8 Jahren
-
von rachederasen
vor etwa 8 Jahren
-
von rachederasen
vor etwa 8 Jahren
-
von rachederasen
vor etwa 8 Jahren
-
von rachederasen
vor etwa 8 Jahren
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Rsonic30
vor mehr als 7 Jahre
-
von Fendt Fan 12
vor mehr als 7 Jahre
-
von Farmer_Fl0
vor mehr als 7 Jahre
-
von DerDauerZocker
vor mehr als 7 Jahre
-
von DerDauerZocker
vor mehr als 7 Jahre
-
von DerDauerZocker
vor mehr als 7 Jahre
-
von kalli4661
vor mehr als 7 Jahre
-
von kalli4661
vor mehr als 7 Jahre
-
von Howie
vor etwa 8 Jahren
-
von Fendt Fan 12
vor etwa 8 Jahren
-
von Grizzu07
vor etwa 8 Jahren
-
von Grizzu07
vor etwa 8 Jahren
-
von Grizzu07
vor etwa 8 Jahren
-
von skorpion1411
vor etwa 8 Jahren
-
von Grabschneck
vor etwa 8 Jahren
-
von Route_66
vor etwa 8 Jahren
-
von Route_66
vor etwa 8 Jahren
-
von rachederasen
vor etwa 8 Jahren -
von rachederasen
vor mehr als 7 Jahre -
von Marcady
vor mehr als 7 Jahre -
von Fendt 1
vor mehr als 7 Jahre
135 Kommentare
Hier eine Video Demo zur V1.5
https://www.youtube.com/watch?v=-69hhRQXO2w
Gruß Andy
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
Also ich nutze ja schon von Anfang an deine LUA-Änderungen und finde die Lösung, einfach und Bequem, die LUA einfach nur austauschen zu müssen. Bei Bedarf noch etwas, nach deiner Anleitung, die Werte ändern und man hat einen riesen Spaß.
Für die Offroader unter uns kann man sogar noch mehr Schwierigkeit rein bringen und richtige Geschicklichkeitsrennen ausfechten.
Für deine Mühe und das Einbringen von mehr Realismus bin ich sehr dankbar. Jetzt kommt auch der von Giants so gepriesene dynamische Boden erst richtig zur Wirkung.
Deine Bemühungen, immer noch mehr daran zu feilen, kann man gar nicht mit genug Lob aufwiegen.
1000 Dank dafür.
https://www.youtube.com/watch?v=hDYKXnZPhXI
Hier ein Video zur Installation
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.
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
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
hallo rachederrasen
kann man diese groundresponse.lua auch mit giants neuem groundresponsemod v 1.0.2.0 verwenden?
lg
andreas
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
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
Kommentarfunktion immer noch inaktiv...
Hier das Video zum Test mit dem MF 7700:
https://www.youtube.com/watch?v=bHvn0MkCaO8
Gruß Andy
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
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
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
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.
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
Hallo ihr könnt mir bestimmt helfen ist die v1.5 final mp fähig?
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
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
wie kann ich den die einsinktiefe beim pflügen erhöhen ?
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