Category | Farming Simulator 19 |
Created | 20.04.2019 14:29 |
Sven M. (fsven) (SvenFendt13) | 20.04.2019 14:29 |
---|---|
Hello, I converted the Green Mowing Script from FS17 to FS19. In FS17 it was possible to mow the grain in the green state, but if I use the Script in FS19 it doesn't work. Does anyone have experience with scripting here? Here's the script: GreenMowing = {}; GreenMowing.SCALE_FACTOR = 0.2; function GreenMowing.prerequisitesPresent(specializations) return true; end; function GreenMowing:load(savegame) self.processMowerAreas = Utils.overwrittenFunction(self.processMowerAreas, GreenMowing.processMowerAreas); self.setEffectEnabled = Utils.overwrittenFunction(self.setEffectEnabled, GreenMowing.setEffectEnabled); self.updateEffectFillTypes = GreenMowing.updateEffectFillTypes; local fruitTypesStr = Utils.getNoNil(getXMLString(self.xmlFile, "vehicle.mower#fruitTypes"), "wheat barley oat grass"); local fruitTypes = FruitUtil.getFruitTypesByNames(fruitTypesStr, "Warning ("..self.configFileName.."): Mower has invalid fruitType '%s'."); self.fruitTypes = {}; if fruitTypes ~= nil then for _,fruitType in pairs(fruitTypes) do self.fruitTypes[fruitType] = true; end; end; end; function GreenMowing:postLoad(savegame) end; function GreenMowing:delete() end; function GreenMowing:mouseEvent(posX, posY, isDown, isUp, button) end; function GreenMowing:keyEvent(unicode, sym, modifier, isDown) end; function GreenMowing:update(dt) end; function GreenMowing:draw() end; function GreenMowing:processMowerAreas(superFunc, workAreas, numWorkAreas, dropAreas, numDropAreas, remainingWindrowToDrop) local pickedUpWindrow = 0; local numDropAreasUsed = 0; for i=1, numWorkAreas do local area = workAreas[i]; local x0 = area.x; local z0 = area.z; local x1 = area.x1; local z1 = area.z1; local x2 = area.x2; local z2 = area.z2; for fruitType,_ in pairs(self.fruitTypes) do if Utils.getFruitArea(fruitType, x0,z0, x1,z1, x2,z2, true, true) > 0 then local areaPixelsSum, _, sprayFactor, ploughFactor, growthState = Utils.cutFruitArea(fruitType, x0,z0, x1,z1, x2,z2, true, true, true); if areaPixelsSum > 0 then local multi; if fruitType == FruitUtil.FRUITTYPE_GRASS then multi = g_currentMission:getHarvestScaleMultiplier(sprayFactor, 1); else multi = g_currentMission:getHarvestScaleMultiplier(sprayFactor, ploughFactor); end; areaPixelsSum = areaPixelsSum * multi; end; local fillType; local desc = FruitUtil.fruitIndexToDesc[fruitType]; local minHarvestGrowthState; if desc.ssOriginalMinHarvestingGrowthState == nil and growthState >= desc.minHarvestingGrowthState then fillType = FruitUtil.fruitTypeToWindrowFillType[Grass_windrow]; minHarvestGrowthState = desc.minHarvestingGrowthState; elseif desc.ssOriginalMinHarvestingGrowthState ~= nil and growthState >= desc.ssOriginalMinHarvestingGrowthState then fillType = FruitUtil.fruitTypeToWindrowFillType[Grass_windrow]; minHarvestGrowthState = desc.ssOriginalMinHarvestingGrowthState; end; if fillType == nil then fillType = FruitUtil.fruitTypeToWindrowFillType[FruitUtil.FRUITTYPE_GRASS]; minHarvestGrowthState = desc.ssOriginalMinHarvestingGrowthState; if minHarvestGrowthState == nil then minHarvestGrowthState = desc.minHarvestingGrowthState; end; end; local pixelToSqm = g_currentMission:getFruitPixelsToSqm(); local sqm = areaPixelsSum * pixelToSqm; local fruitToWindrow = FruitUtil.fruitTypeToWindrowFillType[fruitType]; if fruitToWindrow == nil then fruitToWindrow = FruitUtil.fruitTypeToWindrowFillType[FruitUtil.FRUITTYPE_GRASS]; end; local lpsqm = FruitUtil.getFillTypeLiterPerSqm(fruitToWindrow, 1); if growthState > minHarvestGrowthState then local dist = minHarvestGrowthState - growthState; lpsqm = lpsqm * (1 - (GreenMowing.SCALE_FACTOR * dist)); end; local litersChanged = sqm * lpsqm; if area.dropArea ~= nil then dropAreas[area.dropArea].valueAccum = dropAreas[area.dropArea].valueAccum + litersChanged; dropAreas[area.dropArea].lastFillType = dropAreas[area.dropArea].fillTypeToDrop; dropAreas[area.dropArea].fillTypeToDrop = fillType; else if not area.dropWindrow then pickedUpWindrow = pickedUpWindrow + litersChanged; else local lx_2 = 0.5*(area.x2 - area.x); local lz_2 = 0.5*(area.z2 - area.z); local sx = area.x + lx_2; local sz = area.z + lz_2; local ex = area.x1 + lx_2; local ez = area.z1 + lz_2; local sy = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, sx,0,sz); local ey = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, ex,0,ez); local toDrop = remainingWindrowToDrop + litersChanged; local dropped, lineOffset = TipUtil.tipToGroundAroundLine(self, toDrop, fillType, sx,sy,sz, ex,ey,ez, 0, nil, self.mowerLineOffset, false, nil, false); self.mowerLineOffset = lineOffset; remainingWindrowToDrop = remainingWindrowToDrop + (toDrop - dropped); end; end; end; end; end; local unitLength = TipUtil.densityToWorldMap; for i=1, numDropAreas do local area = dropAreas[i]; local widthX = area.x1 - area.x; local widthZ = area.z1 - area.z; local widthLength = Utils.vector2Length(widthX, widthZ); local widthLength_2 = 0.5 * widthLength; local widthX_norm = widthX / widthLength; local widthZ_norm = widthZ / widthLength; local middleX = 0.5 * (area.x1 + area.x); local middleZ = 0.5 * (area.z1 + area.z); local sx = middleX + ( widthX_norm * math.max(0, widthLength_2 - unitLength) ); local sz = middleZ + ( widthZ_norm * math.max(0, widthLength_2 - unitLength) ); local ex = middleX - ( widthX_norm * math.max(0, widthLength_2 - unitLength) ); local ez = middleZ - ( widthZ_norm * math.max(0, widthLength_2 - unitLength) ); local sy = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, sx,0,sz); local ey = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, ex,0,ez); local toDrop = area.valueAccum; local fillType = area.fillTypeToDrop; if fillType ~= area.lastFillType then self:updateEffectFillTypes(); end; local dropped, lineOffset = TipUtil.tipToGroundAroundLine(self, toDrop, fillType, sx,sy,sz, ex,ey,ez, 0, nil, area.mowerLineOffset, false, nil, false); area.mowerLineOffset = lineOffset; area.valueAccum = area.valueAccum - dropped; area.value = dropped; if dropped > 0 then numDropAreasUsed = numDropAreasUsed + 1; end; end; return numDropAreasUsed, pickedUpWindrow, remainingWindrowToDrop end; function GreenMowing:setEffectEnabled(superFunc, mowerEffect, isActive) if superFunc ~= nil then superFunc(self, mowerEffect, isActive); end; if self.isClient and isActive then local dropAreas = self:getTypedWorkAreas(WorkArea.AREATYPE_MOWERDROP); EffectManager:setFillType(mowerEffect.effects, dropAreas[mowerEffect.mowerCutArea].fillTypeToDrop); end; end; function GreenMowing:updateEffectFillTypes() if self.isClient then local dropAreas = self:getTypedWorkAreas(WorkArea.AREATYPE_MOWERDROP); for _, mowerEffect in pairs(self.mower.effects) do EffectManager:setFillType(mowerEffect.effects, dropAreas[mowerEffect.mowerCutArea].fillTypeToDrop); end; end; end; |
Bilbo Beutlin (BBeutlin) | 20.04.2019 14:38 |
---|---|
What did you "convert"? The script is still FS17 style and not compatible to FS19. Functions have changed and there are lots of new things to consider for porting to FS19. Begin with an easier project before working on such a complex one. |
Sven M. (fsven) (SvenFendt13) | 20.04.2019 16:15 |
---|---|
Ok thanks |
Note: Log in to post. Create a new account here.