Hallo zusammen,
ich hab ein paar kleine Zusatzfunktionen bzw. -snippets für Courseplay geschrieben, die dazu führen dass Stefan Maurus' Tebbe HS180, sein Fuchs Güllefass und bassaddict's Universal Bale Trailer (besser) mit CP funktioneren. Wer möchte kann sich das einbauen, ich beschreibe weiter unten was zu tun ist und wie der Code funktioniert.
Ich möchte aber zunächst ein paar Sachen betonen:
- Die Änderungen führen dazu dass CP (und teilweise auch die Mods selber) seine Multiplayer-Fähigkeit verliert (es sei denn ihr tauscht untereinander eure CP-Dateien aus, wovon ich mich strengstenst distanziere!).
- Ich werde nicht die gesamten fertigen Dateien zur Verfügung stellen. Die jeweiligen Autoren haben allesamt lange und hart an ihren Projekten gearbeitet, und daher halte ich es für 1. frevelhaft da jetzt gänzlich veränderten Teile online zu stellen, und 2. zumutbar dass ihr die Mods sowohl von den Originallinks runterladen als auch selbst verändern könnt.
- Ich habe das ganze mit CP v2.99 gemacht, da das die Version ist die ich primär benutze. Die Änderungen müssten in v3.12 quasi genauso funktionieren, aber ich habe es nicht getestet.
Tebbe HS180 Miststreuer von Stefan Maurus (v2.1)
Der Tebbe funktioniert eigentlich 1a mit CP. Folgende zwei Funktionen habe ich aber hinzugefügt:
- Die Klappe wird entweder automatisch geöffnet und geschlossen (wenn "Fruchtumfahrung" auf "ein" gesetzt ist) wenn der Tebbe anfängt zu streuen bzw. wenn er aufhört (leer ist); oder sie bleibt gänzlich zu (wenn "Fruchtumfahrung" auf "aus" gesetzt ist).
- Die Rückwand fährt automatisch auf eine vom User eingestellte Stufe (1, 2 oder 3) und wird geschlossen wenn er aufhört (leer ist). Der User kann (muss) diese Stufe über die Courseplay-Arbeitsbreite eingeben: 1m = Stufe 1, 2m = Stufe 2, 3m = Stufe 3. Ich habe mich aufgrund von 3 Faktoren für 1, 2 und 3 entschieden:
- Es ist simpel und an sich intuitiv. Man kann schneller zwischen den einzelnen Stufen wechseln.
- Ich wollte nicht die Illusion aufkommen lassen man könne dadurch die wirkliche Arbeits- (Streu-)breite des Gerätes einstellen. Sondern "nur" die Rückwändstufe (die dann die Arbeitsbreitenveränderung, den Mistverbrauch etc. mit sich bringt).
- Die Courseplay-Default-Arbeitsbreite ist 3m. Damit wäre das dann schon von Anfang an gesetzt.
- Die Zeilenangaben stimmen jeweils wenn ihr den Code bis dahin so wie angegeben eingebaut habt.
An dieser Stelle Respekt und Danke an Stefan Maurus für sein einfaches und sauberes Scripten. Hat die Sache relativ einfach gemacht.
Einbau:
Zunächst lassen wir CP wissen dass der aktuelle Miststreuer der Tebbe HS180 ist:
mode4.lua - Z56 (unter "local is_ux5200 = workTool.state ~= nil and workTool.state.isTurnedOn ~= nil")
[lua]local is_tebbeHS180Maurus = workTool.flapopen ~= nil and workTool.setDoorHigh ~= nil[/lua]
Danach frägt CP ob es quasi an ist und gefahren wird etc. Dann folgt die Abfrage ob das Gerät die UX5200-Spritze ist, ergo gehen wir in den else-Bereich darunter.
mode4.lua - Z74 (nach "else", vor "if isFoldable")
[lua]
if is_tebbeHS180Maurus then
--Klappe, gekoppelt an CP-Fruchtumfahrung (true false)
local flapOpenBool = self.realistic_driving
if flapOpenBool ~= nil then
if type(flapOpenBool) == "boolean" then
workTool:setFlapOpen(flapOpenBool)
end
else
workTool:setFlapOpen(false)
end
--Rückwand, gekoppelt an CP-Arbeitsbreite (1 2 3)
local doorOpenStage = self.toolWorkWidht
if type(doorOpenStage) ~= "int" then
local doorOpenStage = tonumber(self.toolWorkWidht)
end
local doorOpenStageValid = false
if doorOpenStage ~= nil then
if doorOpenStage == 1 or doorOpenStage == 2 or doorOpenStage == 3 then
doorOpenStageValid = true
end
end
if doorOpenStageValid then
workTool:setDoorHigh(doorOpenStage)
else
allowedToDrive = false
--"Rückwand-Stufe muss per Arbeitsbreite gesetzt sein (1, 2 oder 3)"
self.global_info_text = courseplay:get_locale(self, "TebbeHS180DoorStage")
end
end
[/lua]
Der Code macht folgendes:
[lua]
if is_tebbeHS180Maurus then --wenn das Gerät der Tebbe HS180 ist
--Klappe, gekoppelt an CP-Fruchtumfahrung (true false)
local flapOpenBool = self.realistic_driving -- Neue Variable, frägt die vom User eingestellte Fruchtumfahrung ab
if flapOpenBool ~= nil then -- wenn die Fruchtumfahrung existiert...
if type(flapOpenBool) == "boolean" then -- ...und sie boolean ist
workTool:setFlapOpen(flapOpenBool) -- setze die die Klappe auf den eingestellten wert (true bzw. false)
end
else -- andernfals
workTool:setFlapOpen(false) -- schließe die Klappe
end
--Rückwand, gekoppelt an CP-Arbeitsbreite (1 2 3)
local doorOpenStage = self.toolWorkWidht -- Neue Variable, frägt die vom User eingestellte CP-Arbeitsbreite ab [toolWorkWidht = sic!]
if type(doorOpenStage) ~= "int" then -- wenn die CP-Arbeitsbreite nicht im Integer-Format ist
local doorOpenStage = tonumber(self.toolWorkWidht) -- konvertiere sie ins Integer-Format
end
local doorOpenStageValid = false
if doorOpenStage ~= nil then -- wenn die CP-Arbeitsbreite existiert ...
if doorOpenStage == 1 or doorOpenStage == 2 or doorOpenStage == 3 then -- ... und wenn die CP-Arbeitsbreite entweder 1, 2 oder 3 ist ...
doorOpenStageValid = true -- ... dann ist alles okay mit der CP-Arbeitsbreite und wir können fortfahren
end
end
if doorOpenStageValid then -- wenn alles okay mit der CP-Arbeitsbreite ist
workTool:setDoorHigh(doorOpenStage) -- öffne die Rückwand auf die per CP-Arbeitsbreite eingestellte Stufe
else --andernfalls
allowedToDrive = false -- halte an, schalte den Streuer aus
--* folgendes ist optional *
--* EXTRA-INFO ZUR NACHRICHT-EINBLENDUNG WEITER UNTEN *
--"Rückwand-Stufe muss per Arbeitsbreite gesetzt sein (1, 2 oder 3)"
self.global_info_text = courseplay:get_locale(self, "TebbeHS180DoorStage") -- und verkünde die Nachricht dass hier was nicht stimmt
end
end
[/lua]
So, jetzt weiß er was zu tun ist wenn er zu streuen beginnt. Nun noch die Aktionen beim aufhören (wenn er leer ist). Wir gehen ist den workSpeed = false Bereich:
mode4.lua - Z128 (nach "else", vor "if isFoldable")
[lua]
if is_tebbeHS180Maurus then
workTool:setFlapOpen(false) --Schließe die Klappe
workTool:setDoorHigh(0) --Setze die Rückwand auf Stufe 0 (= geschlossen).
end
[/lua]
Optional: Nachricht-Einblendung wenn die Rückwandstufe nicht stimmt
base.lua - Z66 oder irgendwo in dem Bereich wo die ganzen self.locales-Dingers angegeben sind.
[lua]self.locales.TebbeHS180DoorStage = g_i18n:getText("TebbeHS180DoorStage")[/lua]
moddesc.xml - in den l10n-Bereich
<text name="TebbeHS180DoorStage">
<en>Door must be set via CP work width (1, 2 or 3)</en>
<de>Rückwand-Stufe muss per CP-Arbeitsbreite gesetzt sein (1, 2 oder 3)</de>
Und das war's. Wenn ihr alles richtig gemacht habt öffnet er jetzt beim Streu-Anfang die Klappe und setzt die Rückwand auf die von euch über die Arbeitsbreite angegebene Stufe, und schließt beide wenn er leer ist und zum Auffüllen fährt.
Fuchs Güllefass von Stefan Maurus (v1.1)
Das Güllefass ist deutlich simpler einzustellen als der Tebbe-Miststreuer. Wir wollen nur dass der Schwenkverteiler beim Düngen aktiviert wird. Leider muss man dafür auch den Code des Fasses selber minimal verändern.
Die Zeilenangaben sind für die original mode4.lua (ohne den Miststreuer eingebaut).
Einbau:
Zunächst öffnen wir die Schwenkverteiler.lua des Güllefasses und kommentieren das if self:getIsActive() weg
Schwenkverteiler.lua - Z72
[lua]if self:getIsActive() then[/lua]
wird zu
[lua]--if self:getIsActive() then[/lua]
Schwenkverteiler.lua - Z97
[lua]end[/lua]
wird zu
[lua]--end[/lua]
Das hat zur Folge dass der Schwenkverteiler auch aktiv sein kein wenn man nicht im Fahrzeug sitzt (was ja bei CP oftmals der Fall ist).
Dann zurück zu CP.
mode4.lua - Z56 (unter "local is_ux5200 = workTool.state ~= nil and workTool.state.isTurnedOn ~= nil")
[lua]local is_fuchsMaurus = workTool.setAllumer ~= nil --ist das Arbeitsgerät das Fuchs-Güllefass?[/lua]
mode4.lua - Z74 (nach "else", vor "if isFoldable")
[lua]
if is_fuchsMaurus then --wenn es das Fuchs-Güllefass ist
workTool:setAllumer(true) --aktiviere den Schwenkverteiler
end
[/lua]
mode4.lua - Z99 (nach "else", vor "if isFoldable")
[lua]
if is_fuchsMaurus then --wenn es das Fuchs-Güllefass ist
workTool:setAllumer(false) --deaktiviere den Schwenkverteiler
end
[/lua]
Das war's.
[infobox]Die Dingers für bassaddict's UBT kommen später. Die Basissachen gehen, für den Rest muss ich noch ein wenig testen. Daher mein reserved post.[/infobox]