Ifko's Modwerkstatt

  • Habe schlechte Nachrichten, was das Script für die Schwader betrifft.. Leider kann ich das nicht umsetzten, geht wohl doch nicht so einfach, wie gedacht.. :( Nur damit ihr Bescheid wisst..

    Edit:

    Aber ich will euch mal das hier zeigen:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Ballensammelwagen lädt vollkommen automatisch ab. Er geht danach auch wieder automatisch in die Arbeitsposition. Das ganze ist zwar nicht vollkommen real, zumindest sah ich das noch nicht, aber es spart Sprit. :D Ballen muss man auch nimmer zusammen suchen und dadurch vergisst man keinen.. Wie oft lag bei mir beim Grubbern noch einer auf dem Feld.. Sollte das Feld zu uneben sein, kann es natürlich passieren, das der Stroß umfällt..

    Das ganze ist wieder nur eine reine spielerei meinerseits.. :D

    MFG Ifko :thumbup:

  • Das hängt aber auch vom Strohschwad ab.. Bei Gerste, so wie im Vid, passt es genau.. Bei Weizen ist der Ballen etwas zu schnell fertig.. Roggen- und Haferstroh und andere Multifruit Strohsorten sind nochmal ein anderes Thema, da hier jeder Mapper eine andere Werte für 'windrowLiterPerSqm', (das ist der Wert für die Strohmenge da nun wirklich lieg), angeben könnte. Etwas schneller werde ich den Abladevorgang also noch machen. Das ist aber feinarbeit.. :D

    Zuerst will ich es noch schaffen, das die kleine Platte, die die Ballen stackt, nicht mehr runtergeht, wenn der Ballenwagen voll und das automatische Abladen aktiviert ist. Damit wäre ein reibungsloser Abladevorgang möglich. Nun ist es ja noch so, das die die kleine Platte sich zuerst wieder senkt und dann gleich wieder hebt, wenn der Ballenwagen voll ist. Das sieht man eigendlich sehr gut im Vid. Ist einfach unnötig, daher will ich das raus haben.. Zeit is Geld. :D

    Edit:

    Und genau das hab ich eben geschafft! So langsam wirds mit den luas.. :D Feinschliff steht noch an.. Text 'Ballen entlanden' aus dem Hilfefenster entfernen, wenn das automatische Abladen aktiviert ist, da sich der Ballenwagen dann nur im vollen zustand abladen lässt. Das geschieht dann ja automatisch, und somit ist der überflüssing. Ist das automatische Abladen deaktiviert, dann wird der Text selbstverständlich wieder in der Hilfebox sein.. :D

    MFG Ifko 8)

  • Huhu @all,

    ich habe hier ein Video, wo man eine etwas erweitete Version des 'automaticUnloadForBaleLoaders' Scriptes sieht. Man kann nun wählen, ob der volle oder halbvolle Ballensammelwagen automatisch entleert wird. Auch sieht man nun, das die kleine Platte, die die Ballen stackt, nicht mehr runtergeht, wenn der Ballenwagen das automatische Abladen aktiviert.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Diese Version ist aber auch schon wieder veraltet... :D Inzwischen hat man schon die Möglichkeit, selber einstellen zu können, bei wievielen Ballen der Ballensammelwagen automatisch ablädt. Kleine Vorschau:

    Denke dazu mach ich auch noch ein Vid. Wenn es interessiert, hier mal die vorläufige Version des Scriptes: (Für den globalen Modus erstellt, ist also nicht für den 'händischen' einbau geeignet, da einem sonst alle Texte für das Hilfefenster fehlen)

    AutomaticUnloadForBaleLoaders.lua


    [lua]
    --[[
    AutomaticUnloadForBaleLoaders
    Spezi damit die zwischen manuellen und automatischen Abladen eines Ballensammelnwagens, (gewählte Ballenanzahl, halbvoll oder voll), hin und her schalten kann.

    Author: Ifko[nator]
    Datum: 27.03.2015

    Version: v1.0
    History: v1.0 - initial implementation -- GLOBAL VERSION!
    ]]

    AutomaticUnloadForBaleLoaders = {};

    function AutomaticUnloadForBaleLoaders.prerequisitesPresent(specializations)
    return SpecializationUtil.hasSpecialization(BaleLoader, specializations);
    end;

    function AutomaticUnloadForBaleLoaders:load(xmlFile)
    BaleLoader.update = Utils.appendedFunction(BaleLoader.update, AutomaticUnloadForBaleLoaders.baleLoaderUpdate);
    BaleLoader.getAllowsStartUnloading = Utils.overwrittenFunction(BaleLoader.getAllowsStartUnloading, AutomaticUnloadForBaleLoaders.getAllowsStartUnloading);
    BaleLoader.draw = Utils.overwrittenFunction(BaleLoader.draw, AutomaticUnloadForBaleLoaders.baleLoaderDraw);
    BaleLoader.moveToTransportPosition = Utils.overwrittenFunction(BaleLoader.moveToTransportPosition, AutomaticUnloadForBaleLoaders.moveToTransportPosition);

    self.automaticUnloadBaleLoader = false;
    self.unloadFullBaleLoader = true;
    self.unloadHalfFullBaleLoader = false;
    self.choiceNumBales = false;
    self.chosenNumBales = 2;
    end;

    function AutomaticUnloadForBaleLoaders:delete()
    end;

    function AutomaticUnloadForBaleLoaders:mouseEvent(posX, posY, isDown, isUp, button)
    end;

    function AutomaticUnloadForBaleLoaders:keyEvent(unicode, sym, modifier, isDown)
    end;

    function AutomaticUnloadForBaleLoaders.moveToTransportPosition(self)
    if not self.automaticUnloadBaleLoader then
    self:playAnimation("baleGrabberTransportToWork", -1, Utils.clamp(self:getAnimationTime("baleGrabberTransportToWork"), 0, 1), true);
    self:playAnimation("closeGrippers", 1, Utils.clamp(self:getAnimationTime("closeGrippers"), 0, 1), true);

    if self.startBalePlace.count == 1 then
    self:playAnimation("bale1ToOtherSide", 0.5, nil, true);
    end;
    end;
    end;

    function AutomaticUnloadForBaleLoaders:baleLoaderUpdate(dt)
    if self:getIsActive() then
    if self:getIsActiveForInput()
    and self.fillLevel < self.capacity
    and self.grabberMoveState == nil
    then
    if InputBinding.hasEvent(InputBinding.TOGGLE_AUTOMAIC_UNLOAD_BALELOADER_BUTTON) then
    self.automaticUnloadBaleLoader = not self.automaticUnloadBaleLoader;
    end;

    if InputBinding.hasEvent(InputBinding.TOGGLE_UNLOAD_HALF_FULL_BALELOADER_BUTTON) and self.automaticUnloadBaleLoader and not self.choiceNumBales then
    if self.unloadFullBaleLoader then
    if self.fillLevel <= (self.capacity / 2) then
    self.unloadFullBaleLoader = false;
    self.unloadHalfFullBaleLoader = true;
    else
    self.unloadFullBaleLoader = true;
    self.unloadHalfFullBaleLoader = false;
    end;
    else
    self.unloadFullBaleLoader = true;
    self.unloadHalfFullBaleLoader = false;
    end;
    end;

    if InputBinding.hasEvent(InputBinding.CHOICE_NUM_BALES) and self.automaticUnloadBaleLoader then
    if self.choiceNumBales then
    self.choiceNumBales = false;
    self.unloadFullBaleLoader = true;
    else
    self.choiceNumBales = true;

    if self.unloadFullBaleLoader then
    self.unloadFullBaleLoader = false;
    elseif self.unloadHalfFullBaleLoader then
    self.unloadHalfFullBaleLoader = false;
    end;
    end;
    end;

    if self.choiceNumBales and self.automaticUnloadBaleLoader then
    if InputBinding.hasEvent(InputBinding.SET_NUM_BALES) then
    if self.chosenNumBales < self.capacity then
    self.chosenNumBales = self.chosenNumBales + 1;
    else
    self.chosenNumBales = 2;
    end;
    end;
    end;
    end;

    if self.automaticUnloadBaleLoader then
    if not self.choiceNumBales then
    if self.unloadFullBaleLoader then
    if self.fillLevel == self.capacity then
    --## baleloader is full - rotate platform to unload
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_EMPTY));
    end;
    elseif self.unloadHalfFullBaleLoader then
    if self.fillLevel >= (self.capacity / 2) then
    --## baleloader is half full - rotate platform to unload
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_EMPTY));
    end;
    end;
    else
    if self.fillLevel >= self.chosenNumBales then
    --## baleloader has the number of bales, they are chosen, loaded - rotate platform to unload
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_EMPTY));
    end;
    end;

    if self.emptyState == BaleLoader.EMPTY_WAIT_TO_REDO then
    --## platform is completely rotatet - drop bales
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_DROP_BALES));
    end;

    if self.emptyState == BaleLoader.EMPTY_WAIT_TO_SINK then
    --## bales are dropped - rotate platform back
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_EMPTY));
    end;

    if self.emptyState == BaleLoader.EMPTY_NONE and not self.isInWorkPosition then
    --## platform is rotatet back and grabber is not in work postion - move grabber to work position
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_WORK_TRANSPORT));
    end;
    else
    if self.fillLevel == self.capacity
    and self.emptyState == BaleLoader.EMPTY_NONE
    and self.grabberMoveState == nil
    and self.rotatePlatformDirection == 0
    and self.isInWorkPosition
    then
    --[[##
    automatic unload is deactivated,
    baleloader is full,
    baleloader state is 'none',
    grabber is not moving,
    stackplatform is set down,
    and grabber is in work position
    -
    move grabber to transport position
    ]]
    g_client:getServerConnection():sendEvent(BaleLoaderStateEvent:new(self, BaleLoader.CHANGE_BUTTON_WORK_TRANSPORT));
    end;
    end;
    end;
    end;

    function AutomaticUnloadForBaleLoaders:baleLoaderDraw()
    if self:getIsActiveForInput()
    and self.fillLevel < self.capacity
    and self.grabberMoveState == nil
    then
    if self.automaticUnloadBaleLoader then
    g_currentMission:addHelpButtonText(BaleLoader.STOP_AUTOMATIC_UNLOAD, InputBinding.TOGGLE_AUTOMAIC_UNLOAD_BUTTON);

    if not
    ((self.emptyState >= BaleLoader.EMPTY_TO_WORK
    and self.emptyState <= BaleLoader.EMPTY_ROTATE2
    ) or self.emptyState == BaleLoader.EMPTY_SINK
    ) then
    if not self.choiceNumBales then
    g_currentMission:addHelpButtonText(BaleLoader.START_CHOICE_NUM_BALES, InputBinding.CHOICE_NUM_BALES);

    if self.unloadFullBaleLoader then
    if self.fillLevel < (self.capacity / 2) then
    g_currentMission:addHelpButtonText(BaleLoader.UNLOAD_HALF_BALELOADER, InputBinding.TOGGLE_UNLOAD_HALF_FULL_BALELOADER_BUTTON);
    end;

    g_currentMission:addExtraPrintText(BaleLoader.FULL_UNLOAD_ACTIVATET);
    elseif self.unloadHalfFullBaleLoader then
    g_currentMission:addHelpButtonText(BaleLoader.UNLOAD_FULL_BALELOADER, InputBinding.TOGGLE_UNLOAD_HALF_FULL_BALELOADER_BUTTON);
    g_currentMission:addExtraPrintText(BaleLoader.HALF_FULL_UNLOAD_ACTIVATET);
    end;
    else
    g_currentMission:addHelpButtonText(BaleLoader.STOP_CHOICE_NUM_BALES, InputBinding.CHOICE_NUM_BALES);
    g_currentMission:addHelpButtonText(BaleLoader.SET_NUM_BALES, InputBinding.SET_NUM_BALES);
    g_currentMission:addExtraPrintText(string.format(BaleLoader.CHOSEN_NUM_BALES_DO_UNLOAD, self.chosenNumBales));
    end;
    end;
    else
    g_currentMission:addHelpButtonText(BaleLoader.START_AUTOMATIC_UNLOAD, InputBinding.TOGGLE_AUTOMAIC_UNLOAD_BUTTON);
    end;
    end;

    if self.emptyState == BaleLoader.EMPTY_NONE then
    if self.grabberMoveState == nil and not self.automaticUnloadBaleLoader then
    if self.isInWorkPosition then
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_TRANSPORT, InputBinding.IMPLEMENT_EXTRA);
    else
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_WORK, InputBinding.IMPLEMENT_EXTRA);
    end;
    end;

    if BaleLoader.getAllowsStartUnloading(self) then
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_UNLOAD, InputBinding.IMPLEMENT_EXTRA3);
    end;
    else
    if self.emptyState >= BaleLoader.EMPTY_TO_WORK and self.emptyState <= BaleLoader.EMPTY_ROTATE2 then
    g_currentMission:addExtraPrintText(BaleLoader.BALELOADER_UP);
    elseif self.emptyState == BaleLoader.EMPTY_CANCEL or self.emptyState == BaleLoader.EMPTY_SINK then
    g_currentMission:addExtraPrintText(BaleLoader.BALELOADER_DOWN);
    elseif self.emptyState == BaleLoader.EMPTY_WAIT_TO_DROP then
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_READY, InputBinding.IMPLEMENT_EXTRA3);
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_ABORT, InputBinding.IMPLEMENT_EXTRA2);
    elseif self.emptyState == BaleLoader.EMPTY_WAIT_TO_SINK then
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_SINK, InputBinding.IMPLEMENT_EXTRA3);
    elseif self.emptyState == BaleLoader.EMPTY_WAIT_TO_REDO then
    g_currentMission:addHelpButtonText(BaleLoader.BALELOADER_UNLOAD, InputBinding.IMPLEMENT_EXTRA3);
    end;
    end;
    end;

    function AutomaticUnloadForBaleLoaders.getAllowsStartUnloading(self)
    if self.automaticUnloadBaleLoader then
    if self.unloadFullBaleLoader then
    return self.fillLevel == self.capacity and (self.rotatePlatformDirection == 0 or self.rotatePlatformDirection == 1) and self.grabberMoveState == nil;
    elseif self.unloadHalfFullBaleLoader then
    return self.fillLevel >= (self.capacity / 2) and (self.rotatePlatformDirection == 0 or self.rotatePlatformDirection == 1) and self.grabberMoveState == nil;
    elseif self.choiceNumBales then
    return self.fillLevel >= self.chosenNumBales and (self.rotatePlatformDirection == 0 or self.rotatePlatformDirection == 1) and self.grabberMoveState == nil;
    end;
    else
    return self.fillLevel > 0 and self.rotatePlatformDirection == 0 and self.frontBalePusherDirection == 0 and not self.grabberIsMoving and self.grabberMoveState == nil and self.emptyState == BaleLoader.EMPTY_NONE;
    end;
    end;

    function AutomaticUnloadForBaleLoaders:update(dt)
    end;

    function AutomaticUnloadForBaleLoaders:draw()
    end

    function AutomaticUnloadForBaleLoaders:loadFromAttributesAndNodes(xmlFile, key, resetVehicles)
    if not resetVehicles then
    local automaticUnloadBaleLoader = Utils.getNoNil(getXMLBool(xmlFile, key .. "#automaticUnloadBaleLoader"), self.automaticUnloadBaleLoader);
    local unloadFullBaleLoader = Utils.getNoNil(getXMLBool(xmlFile, key .. "#unloadFullBaleLoader"), self.unloadFullBaleLoader);
    local unloadHalfFullBaleLoader = Utils.getNoNil(getXMLBool(xmlFile, key .. "#unloadHalfFullBaleLoader"), self.unloadHalfFullBaleLoader);
    local choiceNumBales = Utils.getNoNil(getXMLBool(xmlFile, key .. "#choiceNumBales"), self.choiceNumBales);
    local chosenNumBales = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#chosenNumBales"), self.chosenNumBales);

    self.automaticUnloadBaleLoader = automaticUnloadBaleLoader;
    self.unloadFullBaleLoader = unloadFullBaleLoader;
    self.unloadHalfFullBaleLoader = unloadHalfFullBaleLoader;
    self.choiceNumBales = choiceNumBales;
    self.chosenNumBales = chosenNumBales;
    end;

    return BaseMission.VEHICLE_LOAD_OK;
    end;

    function AutomaticUnloadForBaleLoaders:getSaveAttributesAndNodes(nodeIdent)
    local attributes =
    'automaticUnloadBaleLoader="' .. tostring(self.automaticUnloadBaleLoader) ..
    '" unloadFullBaleLoader="' .. tostring(self.unloadFullBaleLoader) ..
    '" unloadHalfFullBaleLoader="' .. tostring(self.unloadHalfFullBaleLoader) ..
    '" choiceNumBales="' .. tostring(self.choiceNumBales) ..
    '" chosenNumBales="' .. tostring(self.chosenNumBales) ..
    '"';

    return attributes, nil;
    end;
    [/lua]

    MFG Ifko 8)

  • Also wenn ich mir das Maschinen Setup anschaue denke ich du hast die Zielgruppe des Faulen LS Spielers perfekt getroffen, eig. fehlt nur noch das der Drescher direkt auch den
    Hänger fürs Korn dabei hat xD dann brauch auch den Trecker nicht mehr benutzen um aufm Feld zum Drescher zu gurken ^^

  • Wie ich das bei Marhu schon geschrieben hatte, es gibt so was in der Art mit dem automatischen sammeln und abladen der Ballen.
    Ich habe endlich den Clip wiedergefunden, wenn ich Modelle für den LS basteln könnte würde ich Dir so nen Sammelanhänger machen ;)

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.