An alle zukünfitgen Benutzer:
Email Adressen werden stichprobenartig überprüft. Gibt es einen Mail-Rückläufer der uns sagt das die
Mail-Adresse nicht erreichbar oder nicht vorhanden ist, wird der Benutzer ohne Rückfragen und/oder Warnungen gelöscht!

To all future users:
Email addresses are checked by random sampling. If there is a mail-backer who tells us that the
mail address is not reachable or does not exist, the user is deleted without any questions and / or warnings!


Scriptanfragen

Alles was erledigt oder aber nicht mehr aktuell ist kommt hier rein!

Moderator: Blacky_BPG

Benutzeravatar
Thorty
Special
Special
Germany
Beiträge: 224
Registriert: Fr 13. Sep 2013, 22:42
Skype: brainoconner
x 3
Alter: 29

Scriptanfragen

#1

Beitragvon Thorty » Sa 17. Mai 2014, 17:30

Hier könnt ihr eure Scriptanfragen an Blacky stellen
0 x
LG
Thorty


Für Ideen jeglicher Art bin ich sehr dankbar, aber bitte fragt nicht nach ob ich dies oder jenes Modden kann. Wenn ich Modde ist das meine Freizeit diese Nutze ich in meinem Interesse und nicht für andere. Denke das kann jeder verstehen. Bin auch kein Profi oder sonst irgendwie gut im Modden benötige immer noch Hilfe in sachen Scripten z.b. also bitte die Anfrage oder Modwünsche des gleichen im Forum Posten und Blacky_BPG wird mir schon berichten ob er eines dieser Vorschläge umsetzen möchte.
Vielen Dank für euer Verständnis.

Benutzeravatar
Thorty
Special
Special
Germany
Beiträge: 224
Registriert: Fr 13. Sep 2013, 22:42
Skype: brainoconner
x 3
Alter: 29

Re: Scriptanfragen

#2

Beitragvon Thorty » Sa 17. Mai 2014, 17:31

mkausen hat geschrieben:Hallo,

würde gerne eine Saatgutverladung wie auf dieser Map für meine Map haben (die am Landhandel) kann mir jemand sagen wie ich das Realisieren kann ??


LG Markus



wurde verschoben
0 x
LG
Thorty


Für Ideen jeglicher Art bin ich sehr dankbar, aber bitte fragt nicht nach ob ich dies oder jenes Modden kann. Wenn ich Modde ist das meine Freizeit diese Nutze ich in meinem Interesse und nicht für andere. Denke das kann jeder verstehen. Bin auch kein Profi oder sonst irgendwie gut im Modden benötige immer noch Hilfe in sachen Scripten z.b. also bitte die Anfrage oder Modwünsche des gleichen im Forum Posten und Blacky_BPG wird mir schon berichten ob er eines dieser Vorschläge umsetzen möchte.
Vielen Dank für euer Verständnis.

mkausen
Private First Class 2 Star
Private First Class 2 Star
Germany
Beiträge: 22
Registriert: Sa 9. Nov 2013, 13:47
x 4
x 1

Re: Scriptanfragen

#3

Beitragvon mkausen » So 18. Mai 2014, 10:11

Also im Grunde möchte ich nur Wissen wie ich einen Trigger erstelle an dem ich was bezahlen muss, wenn ich dort lade
0 x

Benutzeravatar
Blacky_BPG
Administrator
Administrator
Germany
Beiträge: 1459
Registriert: Do 9. Okt 2008, 03:28
Wohnort: Rostock
x 19
x 1426
Geschlecht:
Alter: 40
Kontaktdaten:

Re: Scriptanfragen

#4

Beitragvon Blacky_BPG » So 18. Mai 2014, 15:01

Mit LS-Bordmitteln geht das nicht, da brauchst du ein Extrascript für, entweder den allInOne Trigger von Marhu oder den den ich mir selbst geschrieben hatte, aber den muß ich noch ausbauen.
0 x

mkausen
Private First Class 2 Star
Private First Class 2 Star
Germany
Beiträge: 22
Registriert: Sa 9. Nov 2013, 13:47
x 4
x 1

Re: Scriptanfragen

#5

Beitragvon mkausen » So 18. Mai 2014, 18:18

Hallo und danke für die Antwort habe was gefunden womit es geht, denke mal das es dieser Trigger ist oder ein ähnlicher.
Das ganze ist auch für eine rein private Map, da es andere gibt die das mappen deutlich besser können wie ich, da ich eigentlich nichts anderes mache als mir eine vorhandene Map zu nehmen die mir zusagt, und sie dann nach meinen Vorstellungen umzubauen versuche.
Und da auf deiner Hagenstedt Modified einige Sachen verbaut sind die mir gefallen........ :laola:
0 x

Benutzeravatar
BlackbirdSR171
Lance Corporal
Lance Corporal
Beiträge: 47
Registriert: Mo 12. Mai 2014, 00:18
Wohnort: Bocholt
Alter: 37

Reparatur-Script

#6

Beitragvon BlackbirdSR171 » Mo 19. Mai 2014, 02:33

Ich hab mir den Jeep Wrangler Werkstattwagen mr ready gemacht und würde den nun gerne so einstellen, das die Reparatur der Fahrzeuge ebenfalls eine gewisse Zeit dauert.
Im moment repariert er ohne zeitlichen Verlust.
Wie kann ich es ein/anstellen, das er sogar bisschen länger als die Werkstatt braucht?

Grüsse
Sven
0 x
Wer kein Spass im Leben hat, der lebt nicht mehr.

Predator88
Moderator
Moderator
Germany
Beiträge: 462
Registriert: So 4. Aug 2013, 00:59
Wohnort: DBR
x 2
x 5
Geschlecht:
Alter: 40

Re: Scriptanfragen

#7

Beitragvon Predator88 » Mo 19. Mai 2014, 11:28

Also zuerst mußt du ihm die Spezi repairCar entfernen die er mitbekommen hat von rafftnix damit die Karte die eigene Version ins Fahrzeug bringen kann, und dann stellst du in der Fahrzeug XML die Werte so ein wie du es am liebsten hättest und guckst hier (viewtopic.php?p=5800#p5800) nach den entsprechenden Einstellungen.

Ach so, hab ich ganz übersehen, also die Zeit wie lange er braucht kannst du aber nicht einstellen.
0 x

FL: 3 - 9 Uhr - Klauen Formation auflösen - Bomber Geleitschutz bis Zielstation geben
W3: verstanden - erwarte weiteren Begleitschutz
FL: keiner mehr da, nur wir Beide - Arschbacken zusammen kneifen und durch
W3: ach wer braucht auch Begleitschutz bei den paar 100 Gegnern
FL: Mirko - Schnauze - schieß einfach - irgendwas triffst du schon
W3: wo ist die verdammte Station?
FL: Fuck - falscher Sektor - nix wie raus hier - Nordtor, ne Süd - ach verdammt Sektormitte, Sprungantrieb hochfahren

bigdaddy012678
Rekrut
Rekrut
Beiträge: 4
Registriert: Mi 21. Mai 2014, 21:57

Re: [SCRIPT] Waage mit Statistikfunktion 4.3.0

#8

Beitragvon bigdaddy012678 » So 8. Jun 2014, 05:46

Hi Blacky_BPG,
I am trying to write a small script and am asking for your help. I currently have a XML file that is being saved locally and would like it to be saved on the server. Could you share with me the script I would need to make this happen or can you direct me to a website that would help me with that? The second thing I want to make this script do is write to an XML file on the server that contains all our users on the server, similar to the way that your scale script does for each scale. Could you possibly help me out with this one as well? I am trying how to modify lua, and has a learning curb to it.

Thanks In Advance,
Big daddy
0 x

Janosch31
Private First Class 1 Star
Private First Class 1 Star
Germany
Beiträge: 11
Registriert: Mi 16. Apr 2014, 20:38

Re: Scriptanfragen

#9

Beitragvon Janosch31 » So 8. Jun 2014, 21:28

Moin moin
Ich hätte evtl. eine Anfrage.Ist es möglich ein Script zu schreiben das sich Schlepper und Drescher(Häcksler) festfahren können aufm Feld??Bei regen schneller als bei Trockenem Wetter.
0 x

Ackerscholle
Corporal 1 Star
Corporal 1 Star
Beiträge: 119
Registriert: Mi 28. Aug 2013, 22:16

Re: Scriptanfragen

#10

Beitragvon Ackerscholle » Mo 9. Jun 2014, 16:23

Keine Ahnung ob das mit einem Script gemacht werden kann aber fragen kostet ja nichts.

Wenn ich Missionen aktiv hab auf zB alle 2 Minuten dann kommt ja dann auch diese meldung auf dem Bildschirm UND was mich dabei so sehr nervt ist die Tatsache das mein Traktor dann ausgestellt wird ... bin ich ergo gerade am Gras mähen (oder ähnliches) und wumms stehe ich weil die olle Meldung mich ausbremst. Könnte man diese Missions-meldung ohne diese *Bremswirkung* umscripten???
0 x

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#11

Beitragvon BlackWolve » Mo 9. Jun 2014, 18:30

Janosch31 hat geschrieben:Moin moin
Ich hätte evtl. eine Anfrage.Ist es möglich ein Script zu schreiben das sich Schlepper und Drescher(Häcksler) festfahren können aufm Feld??Bei regen schneller als bei Trockenem Wetter.


Wenn du Schlepper, Drescher und Co auf dem Feld festfahren möchtest, wäre da die Frage, wie du die wieder raus bekommst, und zwar ohne zurück setzen.

Ackerscholle hat geschrieben:Keine Ahnung ob das mit einem Script gemacht werden kann aber fragen kostet ja nichts.

Wenn ich Missionen aktiv hab auf zB alle 2 Minuten dann kommt ja dann auch diese meldung auf dem Bildschirm UND was mich dabei so sehr nervt ist die Tatsache das mein Traktor dann ausgestellt wird ... bin ich ergo gerade am Gras mähen (oder ähnliches) und wumms stehe ich weil die olle Meldung mich ausbremst. Könnte man diese Missions-meldung ohne diese *Bremswirkung* umscripten???


Gegenfrage: Warum schaltest du die Missionen nicht aus, solang du was anderes zu tun hast?
0 x
Bild

Janosch31
Private First Class 1 Star
Private First Class 1 Star
Germany
Beiträge: 11
Registriert: Mi 16. Apr 2014, 20:38

Re: Scriptanfragen

#12

Beitragvon Janosch31 » Mo 9. Jun 2014, 19:49

Also mit dem raus bekommen sollte man es genauso machen wie in real.Grösseren Schlepper und Abschleppstange/Kette.zur not 2 oder 3 Schlepper zum rausziehen verwenden
0 x

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#13

Beitragvon BlackWolve » Mo 9. Jun 2014, 20:19

Janosch31 hat geschrieben:Also mit dem raus bekommen sollte man es genauso machen wie in real.Grösseren Schlepper und Abschleppstange/Kette.zur not 2 oder 3 Schlepper zum rausziehen verwenden


Es gibt derweil meines Wissens nach nicht wirklich viel an Schleppstangen und Ketten in LS. Na ja, und wenn man grad in HM am Anfang steht und den Dominator mal im Feld versenkt, hat man schon ein Problem :D
0 x
Bild

Janosch31
Private First Class 1 Star
Private First Class 1 Star
Germany
Beiträge: 11
Registriert: Mi 16. Apr 2014, 20:38

Re: Scriptanfragen

#14

Beitragvon Janosch31 » Di 10. Jun 2014, 16:10

zur not könnte man auch die winde Taifun benutzen.Also möglichkeiten gibt es schon nur so ein Script noch nicht.War ja nur eine Idee
0 x

Ackerscholle
Corporal 1 Star
Corporal 1 Star
Beiträge: 119
Registriert: Mi 28. Aug 2013, 22:16

Re: Scriptanfragen

#15

Beitragvon Ackerscholle » Di 10. Jun 2014, 17:33

Lieber BlackWolve,

:shock: natürlich könnte ich die Missionen deaktivieren während ich etwas anderes tue nur ist die Frage ob man es halt umsetzen kann und nicht ob ich meine Spielweise ändern möchte! Auf schwer nehme ich zudem NUR noch *Gras mähen* an da das Zeitlimit der Transportaufgaben auf dem schweren Schwierigkeitsgrad und der Fahrt durch Ampeln und tempolimit fast unmöglich wird.

:idee: ich wünschte mir ein Script was das gesamte Missions-design überarbeitet. Die ganze Oberfläche vom Text könnte man zB viel handlicher in eine Ecke bannen und warum nicht eine Auswahl ob man nur Gras mähen oder nur Transportieren möchte oder beides eben. bei meiner Auflösung sehe ich noch genug vom Bildschirm und bräuchte auch nicht extra zum annehmen der Mission anhalten .. wobei man ja bei der Fahrt wohl weniger telefonieren sollte am Handy :angel:

Auch finde ich es etwas Gaga welche Dinge man so transportieren soll ... und auch die Preise dafür sind doch so na ja.

man könnte das Thema noch weiter spinnen und noch mehr Flächen zum Gras mähen vorschlagen wie zB Sportplatz oder Wiesen von anderen Bauern oder bringe xy Tonnen Getreide von A nach B.

Ich möchte halt nur den Stop! bei der Fahrt deaktiviert haben ... mehr nicht!

LG Ackerscholle
0 x

Benutzeravatar
Blacky_BPG
Administrator
Administrator
Germany
Beiträge: 1459
Registriert: Do 9. Okt 2008, 03:28
Wohnort: Rostock
x 19
x 1426
Geschlecht:
Alter: 40
Kontaktdaten:

Re: Scriptanfragen

#16

Beitragvon Blacky_BPG » Di 10. Jun 2014, 21:06

Also möglich wäre es allerdings das Anhalten abzustellen, die entsprechende Funktion wird in der Steerable.lua ausgeführt in der Function updateTick, dort wird geprüft ob ein GUI aktiv ist und wenn ja dann der SpeedLevel vom Motor auf 0 gesetzt, sprich das Fahrzeug angehalten.
Diese Prozedur könnte man jetzt natürlich umgehen, allerdings ist hier jetzt wieder der Kompatibilitätscheck gefragt ob mit MR oder ohne, ob andere Spezis auch noch die Steerable.lua "angreifen" (also in diese Funktion eingreifen) und und und ....
0 x

mngrazy
Special
Special
Beiträge: 161
Registriert: So 8. Sep 2013, 22:06
x 40
x 13

Re: Scriptanfragen

#17

Beitragvon mngrazy » Di 10. Jun 2014, 22:09

bin mir jetzt nicht so sicher
aber glaube bei mr is dies schon so das der trekker weiter fährt wenn da so eine mission aufgeht

aber wie gesagt , bin nicht zu 100% sicher

grüsse
0 x

Benutzeravatar
max0069
Staff Sergeant
Staff Sergeant
Austria
Beiträge: 304
Registriert: Mi 30. Okt 2013, 13:18
Geschlecht:

Re: Scriptanfragen

#18

Beitragvon max0069 » Mi 11. Jun 2014, 13:10

Also mein LKW und Traktor fahren weiter bei der Mission!
0 x

Benutzeravatar
Blacky_BPG
Administrator
Administrator
Germany
Beiträge: 1459
Registriert: Do 9. Okt 2008, 03:28
Wohnort: Rostock
x 19
x 1426
Geschlecht:
Alter: 40
Kontaktdaten:

Re: Scriptanfragen

#19

Beitragvon Blacky_BPG » Do 12. Jun 2014, 07:15

Ok ich hab nachgesehen, also bei MR ist das bereits mit drin, müsste also nur bei der Standardversion gemacht werden.
0 x

DerDog
Private First Class
Private First Class
Beiträge: 9
Registriert: Fr 26. Jul 2013, 19:54

Re: Scriptanfragen

#20

Beitragvon DerDog » Fr 20. Jun 2014, 00:53

Hey,

wie wäre es denn mit einem Script dass wie bei der befüllbaren Tankstelle ermöglicht, Saatgut und Dünger befüllbar zu machen? Das wäre der finale Abschluss zum Multifarm Mod/Script.

Gruß
0 x
http://www.ls-claashof.de - Neuer LS13 Gameserver. Spieler werden noch gesucht.

http://www.lippe-pyro.de - Für alle Feuerwerksverrückten ein muss!

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#21

Beitragvon BlackWolve » Fr 20. Jun 2014, 02:11

Saatgut, Dünger, Kalk, diesel gibt es doch alles auf der Hm zum befüllen, oder habe ich da irgendetwas nicht mitbekommen? :hmmm:
0 x
Bild

DerDog
Private First Class
Private First Class
Beiträge: 9
Registriert: Fr 26. Jul 2013, 19:54

Re: Scriptanfragen

#22

Beitragvon DerDog » Sa 21. Jun 2014, 20:30

Das weiß ich ehrlich gesagt garnicht. Als Einzelmods zum verbauen mit dem GE wäre es jedenfalls die Idee und soetwas habe ich bisher noch nicht gefunden.
Am besten wäre alles einzeln damit man sich aussuchen kann was man nutzen möchte.
0 x
http://www.ls-claashof.de - Neuer LS13 Gameserver. Spieler werden noch gesucht.

http://www.lippe-pyro.de - Für alle Feuerwerksverrückten ein muss!

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#23

Beitragvon BlackWolve » Sa 21. Jun 2014, 23:15

DerDog hat geschrieben:Das weiß ich ehrlich gesagt garnicht. Als Einzelmods zum verbauen mit dem GE wäre es jedenfalls die Idee und soetwas habe ich bisher noch nicht gefunden.
Am besten wäre alles einzeln damit man sich aussuchen kann was man nutzen möchte.


Also ich weiß aus gesicherter Quelle, dass es Leute geben soll, die den GE... sagen wir mal freundlich ... eher weniger mögen. Die gesicherte Quelle bin ich zufälligerweise auch noch selbst. Wenn ich alles selbst verbauen müsste, wäre der LS mit Sicherheit bei mir schon in die Runde Ablage mit dem gelben Deckel oben drauf gelandet.
Daher bin ich sehr froh, dass es Leute gibt, die uns mit Mods, Scripts und Maps versorgen, auch wenn manche Wünsche (auch meine) mit Sicherheit sehr oft nerven, und diese Modder, Scripter und Mapper des öfteren :stupid: oder :wut9: :wut6: vor ihren Rechnern sitzen dürften.
0 x
Bild

DerDog
Private First Class
Private First Class
Beiträge: 9
Registriert: Fr 26. Jul 2013, 19:54

Re: Scriptanfragen

#24

Beitragvon DerDog » Fr 27. Jun 2014, 02:31

Naja gut. Auch wenn manche Leute das villeicht nicht so mögen kann es doch für Leute, die es mögen ruhig angeboten werden? Verstehe deine Aussage nicht so ganz...
Platzierbar wird das denke ich sicherlich nicht gemacht da ja einiges an der Map dafür angepasst werden muss. Deshalb wenigstens die Option dass man es mit dem GE einbauen kann.
Außerdem geht es hier ja um einen Mod und nicht um das Spiel selbst. Und einige Mods müssen nunmal per GE eingebaut werden. Dafür gibt es Sie ja schließlich.
0 x
http://www.ls-claashof.de - Neuer LS13 Gameserver. Spieler werden noch gesucht.

http://www.lippe-pyro.de - Für alle Feuerwerksverrückten ein muss!

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#25

Beitragvon BlackWolve » Fr 27. Jun 2014, 08:32

Na für mich stellte sich das nun so dar, als wenn du wolltest dass sich die Leute das alles selbst zusammen fummeln sollen :D meine frau sagt nämlich auch immer, lass den GE zu, weil jedesmal wenn ich den offen hab sieht das so aus bei mir: :wut8: :wut1:
0 x
Bild

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen

#26

Beitragvon Erdbeerchenmilk » Di 1. Jul 2014, 23:30

Frage an das Team

Ist es möglich zu scripten, dass wenn man das MultiFarm script benutzt es auch die Möglichkeit gibt, eine 2. Kuhweide, 2. Hühnerstall und 2. Schafweide zu erstellen?

Würde mich interessieren, ob das überhaupt möglich ist.

Gruß da lass
:fruit:
0 x
Bild

Predator88
Moderator
Moderator
Germany
Beiträge: 462
Registriert: So 4. Aug 2013, 00:59
Wohnort: DBR
x 2
x 5
Geschlecht:
Alter: 40

Re: Scriptanfragen

#27

Beitragvon Predator88 » Mi 2. Jul 2014, 10:08

Blacky hatte da mal was gesagt das die nicht ginge weil GIANTS die Navmesh nicht auseinanderhalten würde, irgendsowas war da.
0 x

FL: 3 - 9 Uhr - Klauen Formation auflösen - Bomber Geleitschutz bis Zielstation geben
W3: verstanden - erwarte weiteren Begleitschutz
FL: keiner mehr da, nur wir Beide - Arschbacken zusammen kneifen und durch
W3: ach wer braucht auch Begleitschutz bei den paar 100 Gegnern
FL: Mirko - Schnauze - schieß einfach - irgendwas triffst du schon
W3: wo ist die verdammte Station?
FL: Fuck - falscher Sektor - nix wie raus hier - Nordtor, ne Süd - ach verdammt Sektormitte, Sprungantrieb hochfahren

Benutzeravatar
tobiasgo
Moderator
Moderator
Germany
Beiträge: 503
Registriert: Fr 2. Mai 2014, 19:06
Wohnort: Herne
x 16
x 26
Geschlecht:
Alter: 44
Kontaktdaten:

Re: Scriptanfragen

#28

Beitragvon tobiasgo » Mi 2. Jul 2014, 20:21

BlackWolve hat geschrieben:Na für mich stellte sich das nun so dar, als wenn du wolltest dass sich die Leute das alles selbst zusammen fummeln sollen :D meine frau sagt nämlich auch immer, lass den GE zu, weil jedesmal wenn ich den offen hab sieht das so aus bei mir: :wut8: :wut1:


grins also Typischer Bediener /Benutzerfehler :respect: endlich mal einer ders zugibt :rofl:
wobei GE heisst ja eigendlich Ganz Einfach :rofl: damit meinte Giants Ganz einfach nicht instalieren :ichnich: :undweg: :wut2:
0 x
Spruch des Jahres 2015 "nicht reproduzierbar/vom Hersteller nicht erwünscht/unsererseits so gewollt/wird nicht behoben (keine finale Aussage !!)"

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen

#29

Beitragvon Erdbeerchenmilk » Mo 7. Jul 2014, 22:08

GasStationTrigger Extended 5.0.2

Hallo Team!

Ist es möglich, dieses Script so abzuändern, dass man statt fuel, milk benutzen kann. Ich würde gerne Milch einlagern und zu einem späteren Zeitpunkt, bei besserem Angebot verkaufen

Würde mich freuen

:fruit: Euer Erdbeerchenmilk


Spoiler anzeigen
--
-- Latte Station Trigger with variable prices and fillable tanks
-- by Blacky_BPG
--
-- Update 4.2.9 - Script function changed so that BSH does not get any more problems
-- Update 5.0.1 - Script function expanded for latte trailer delivery trucks
-- Update 5.0.1a - 5.0.1 Script errors fixed
--

----------------------------------------------------------------------------------------------------------------

-- Wir machen's nicht kompliziert, wir erstellen uns einen neuen FillType der in die Ökonomie des Spiels eingebunden wird
-- Der Basispreis wird mit den Multiplikatoren an den Zapfsäulen multipliziert OHNE Einfluß des Schwierigkeitsgrades !
-- Der Pfad zum FillType-Hud (hier der Ordner huds im ZIP-Archiv) kann natürlich angepasst werden, je nachdem wo man
-- seine HUD-Anzeigen einbinden möchte in der Karte, wichtig ist das sich die Datei dann auch in dem Pfad befinden sollte.

-- Durchschnittspreis: 1,36^9 (bei mitgelieferter Beispieltankstelle [Preisfaktor: 1.12213])
----------------------------------------------------------------------------------------------------------------
local milkhudFile = Utils.getFilename("huds/milkHud.dds", g_currentModDirectory);
Fillable.registerFillType("milk2", g_i18n:getText("milk"), 1.220865, true, milkhudFile);
----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------
---------------- Als nächstes verpassen wir den normalen LatteTrailern die Trailer-Spezialisierung --------------
------------------- damit sie auch entladen werden können an den befüllbaren Hoftankstellen. -------------------
----------------------------------------------------------------------------------------------------------------
LatteStationExtendedMilkTrailerFix = {};
function LatteStationExtendedMilkTrailerFix:loadMap(name)
if self.firstRun == nil then
self.firstRun = false;
local desc = Fillable.fillTypeNameToDesc["milk"];
if desc ~= nil then
desc.hudOverlayFilename = milkhudFile;
end;
for k, v in pairs(VehicleTypeUtil.vehicleTypes) do
if v ~= nil and SpecializationUtil.hasSpecialization(MilkTrailer, v.specializations) and not SpecializationUtil.hasSpecialization(Trailer, v.specializations) then
table.insert(v.specializations, SpecializationUtil.getSpecialization("trailer"));
end;
end;
end;
end;
function LatteStationExtendedMilkTrailerFix:deleteMap() end;
function LatteStationExtendedMilkTrailerFix:keyEvent(unicode, sym, modifier, isDown) end;
function LatteStationExtendedMilkTrailerFix:mouseEvent(posX, posY, isDown, isUp, button) end;
function LatteStationExtendedMilkTrailerFix:update(dt) end;
function LatteStationExtendedMilkTrailerFix:draw() end;
addModEventListener(LatteStationExtendedMilkTrailerFix);

----------------------------------------------------------------------------------------------------------------
--------------------------------- Jetzt kommt der eigentliche Tanktrigger --------------------------------------
----------------------------------------------------------------------------------------------------------------

-- baseLatteFactor - Basismultiplikator für die Bestellung von Treibstoff
-- deliveryBasePrice - Basispreis für die Anfuhr an sich (Transportkosten sozusagen)
-- numLatteTrucks - gibt die Zahl der zur Verfügung stehenden Diesel-Tour-LKWs an
-- ACHTUNG, NICHT mehr angeben als wirklich verbaut sind sonst gibt es heftige LOG-Fehler

LatteStationExtended = {};
LatteStationExtended.modDir = g_currentModDirectory;

LatteStationExtended.numLatteTrucks = 1;
LatteStationExtended.baseLatteFactor = 1.12213;
LatteStationExtended.deliveryBasePrice = 250;

LatteStationExtended_mt = Class(LatteStationExtended, Object);
InitObjectClass(LatteStationExtended, "LatteStationExtended");

function LatteStationExtended.onCreate(id)
local trigger = LatteStationExtended:new(g_server ~= nil, g_client ~= nil);
trigger:load(id)
g_currentMission:addOnCreateLoadedObject(trigger);
trigger:register(true);
end;
function LatteStationExtended:new(isServer, isClient, customMt)
if customMt == nil then
customMt = LatteStationExtended_mt;
end;
local self = Object:new(isServer, isClient, customMt);
self.triggerId = 0;
self.rootNode = 0;
self.tipTriggers = {};
self.fillLevel = 0;
self.maxLatte = -1;
if g_currentMission.latteStations == nil then
g_currentMission.latteStations = {};
end;
table.insert(g_currentMission.latteStations, self);
self.latteTriggerDirtyFlag = self:getNextDirtyFlag();
return self;
end;
function LatteStationExtended:load(id)

self.rootNode = id;
self.triggerId = id;
addTrigger(id, "triggerCallback", self);

self.vehiclesTriggerCount = {};

self.showOnMap = Utils.getNoNil(getUserAttribute(id, "showOnMap"),true);
if self.showOnMap then
self.MHSx, y, self.MHSz = getWorldTranslation(id);
self.MHSiconSize = g_currentMission.missionPDA.pdaMapWidth / 15;
self.mapHotspot = g_currentMission.missionPDA:createMapHotspot("LatteStation", Utils.getFilename("huds/hud_pda_spot_LatteStation.dds", self.baseDirectory), self.MHSx, self.MHSz, self.MHSiconSize, self.MHSiconSize * (4 / 3), false, false, false, 0, true);
end;

self.playerDeliveryTrigger = nil
local playerDeliveryTrigger = getUserAttribute(id, "deliveryTrigger");
if playerDeliveryTrigger ~= nil then
self.playerDeliveryTrigger = Utils.indexToObject(id, playerDeliveryTrigger);
self.playerInTrigger = false;
addTrigger(self.playerDeliveryTrigger, "playerTriggerCallback", self);
if g_currentMission.latteDeliveryTours == nil then
g_currentMission.latteDeliveryTours = {};
end;
self.tourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"),1);
g_currentMission.latteDeliveryTours[self.tourNumber] = {};
g_currentMission.latteDeliveryTours[self.tourNumber].trigger = self;
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].truck = nil;
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = false;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = false;
end;

self.priceMultiplier = Utils.getNoNil(getUserAttribute(id, "priceMultiplier"),1);
self.maxLatte = Utils.getNoNil(getUserAttribute(id, "maxLatteBunker"),-1);
self.capacity = self.maxLatte;
self.fillLitersPerSecond = Utils.getNoNil(getUserAttribute(id, "fillLitersPerSecond"),5);
self.fillSpeed = 0;
self.isFirstStart = true;
self.cntTimer = 0;
self.isTrailer = 0;
self.showDelta = 0;
self.showDeltaPrice = 0;
self.displayRefresher = 5;

self.trailerCan = Utils.getNoNil(getUserAttribute(id, "trailerCan"),true);
self.trailerOnly = Utils.getNoNil(getUserAttribute(id, "trailerOnly"),false);
self.showFill = Utils.getNoNil(getUserAttribute(id, "latteDigits"),false);
self.showPrice = Utils.getNoNil(getUserAttribute(id, "priceDigits"),false);
self.showLevel = Utils.getNoNil(getUserAttribute(id, "levelDigits"),false);
if self.showFill then
self.digitFill = {};
self.digitFill[1] = Utils.indexToObject(id, getUserAttribute(id, "digitFill1"));
self.digitFill[2] = Utils.indexToObject(id, getUserAttribute(id, "digitFill2"));
self.digitFill[3] = Utils.indexToObject(id, getUserAttribute(id, "digitFill3"));
self.digitFill[4] = Utils.indexToObject(id, getUserAttribute(id, "digitFill4"));
self.digitFill[5] = Utils.indexToObject(id, getUserAttribute(id, "digitFill5"));
self.digitFill[6] = Utils.indexToObject(id, getUserAttribute(id, "digitFill6"));
self.digitFill[7] = Utils.indexToObject(id, getUserAttribute(id, "digitFill7"));
self.digitFill[8] = Utils.indexToObject(id, getUserAttribute(id, "digitFill8"));
end;
if self.showPrice then
self.digitPrice = {};
self.digitPrice[1] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice1"));
self.digitPrice[2] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice2"));
self.digitPrice[3] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice3"));
self.digitPrice[4] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice4"));
self.digitPrice[5] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice5"));
self.digitPrice[6] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice6"));
self.digitPrice[7] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice7"));
self.digitPrice[8] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice8"));
end;
if self.showLevel then
self.digitLevel = {};
self.digitLevel[1] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel1"));
self.digitLevel[2] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel2"));
self.digitLevel[3] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel3"));
self.digitLevel[4] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel4"));
self.digitLevel[5] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel5"));
self.digitLevel[6] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel6"));
self.digitLevel[7] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel7"));
self.digitLevel[8] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel8"));
end;
self.digitPosition = {};
self.digitPosition["0"] = -1.000;
self.digitPosition["1"] = -0.106;
self.digitPosition["2"] = -0.212;
self.digitPosition["3"] = -0.309;
self.digitPosition["4"] = -0.414;
self.digitPosition["5"] = -0.520;
self.digitPosition["6"] = -0.617;
self.digitPosition["7"] = -0.722;
self.digitPosition["8"] = -0.820;
self.digitPosition["9"] = -0.925;

self.fType = Fillable.FILLTYPE_MILK;
self.isEnabled = true;
self.state = 0;
self.oldLatteCheck = 99;

if g_currentMission.latteStationDisplays == nil then
g_currentMission.latteStationDisplays = {};
end;
self.lastDelta = 0;
table.insert(g_currentMission.latteStationDisplays,self);
self.valuePos = table.getn(g_currentMission.latteStationDisplays);

local tipTriggerIndex = getUserAttribute(self.rootNode, "tipTriggerIndex");
if tipTriggerIndex ~= nil then
local tipTriggersId = Utils.indexToObject(self.rootNode, tipTriggerIndex);
if tipTriggersId ~= nil then
local tipTrigger = LatteolineTipTrigger:new(self.isServer, self.isClient);
tipTrigger:load(tipTriggersId, self);
g_currentMission:addOnCreateLoadedObject(tipTrigger);
tipTrigger:register(true);
table.insert(self.tipTriggers, tipTrigger);
end;
end;

self.isEnabled = true;
g_currentMission:addNodeObject(self.rootNode, self);
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
g_currentMission:addOnCreateLoadedObjectToSave(self);
end;
self.oldTruckState = 3;
self.oldTime = 0;
return true;
end;
function LatteStationExtended:playerTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if self.isEnabled and g_currentMission.players[otherId] ~= nil then
if onEnter then
self.playerInTrigger = true;
else
self.playerInTrigger = false;
end;
end;
end;
function LatteStationExtended:delete()
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
g_currentMission:removeOnCreateLoadedObjectToSave(self);
end;
if self.isServer then
if table.getn(self.tipTriggers) > 0 then
for _,trigger in pairs(self.tipTriggers) do
if trigger.isRegistered then
trigger:unregister();
trigger:delete();
end;
end;
end;
end;
for vehicle,count in pairs(self.vehiclesTriggerCount) do
if count > 0 then
if vehicle.removeLatteFillTrigger ~= nil then
vehicle:removeLatteFillTrigger(self);
end;
end;
end;
if self.rootNode ~= nil then
g_currentMission:removeNodeObject(self.rootNode);
end;
if self.showOnMap and self.mapHotspot ~= nil then
g_currentMission.missionPDA:deleteMapHotspot(self.mapHotspot);
end;
if self.playerDeliveryTrigger ~= nil then
removeTrigger(self.playerDeliveryTrigger);
end;
removeTrigger(self.triggerId);
end;
function LatteStationExtended:readStream(streamId, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
local fillLevel = streamReadFloat32(streamId);
if fillLevel ~= self.fillLevel then
self:setDisplay(true, false, true);
end;
self.fillLevel = fillLevel;

if self.tourNumber ~= nil and self.tourNumber > 0 then
local deliveryType = streamReadInt32(streamId);
if deliveryType ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
end;
local deliverySum = streamReadFloat32(streamId);
if deliverySum ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
local unloadReady = streamReadBool(streamId);
if unloadReady ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = unloadReady;
end;
if self.isClient then
if streamReadBool(streamId) then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = streamReadInt32(streamId);
end;
end;
end;
end;
end;
function LatteStationExtended:writeStream(streamId, timestamp, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
streamWriteFloat32(streamId, self.fillLevel);
if self.tourNumber ~= nil and self.tourNumber > 0 then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady);
if self.isServer then
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck);
if g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck ~= nil then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].truckState);
end;
end;
end;
end;
end;
function LatteStationExtended:readUpdateStream(streamId, timestamp, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
if connection ~= nil and not connection:getIsServer() then
local deliveryType = streamReadInt32(streamId);
local deliverySum = streamReadFloat32(streamId);
if deliveryType > g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
end;
if connection ~= nil and connection:getIsServer() then
local fillLevel = streamReadFloat32(streamId);
if fillLevel ~= self.fillLevel then
self:setDisplay(true, false, true);
end;
self.fillLevel = fillLevel;

if self.tourNumber ~= nil and self.tourNumber > 0 then
local deliveryType = streamReadInt32(streamId);
if deliveryType ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
end;
local deliverySum = streamReadFloat32(streamId);
if deliverySum ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
local unloadReady = streamReadBool(streamId);
if unloadReady ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = unloadReady;
end;
if streamReadBool(streamId) then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = streamReadInt32(streamId);
end;
end;
end;
end;
end;
function LatteStationExtended:writeUpdateStream(streamId, connection, dirtyMask)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
if connection ~= nil and connection:getIsServer() then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
end;
if connection ~= nil and not connection:getIsServer() then
streamWriteFloat32(streamId, self.fillLevel);
if self.tourNumber ~= nil and self.tourNumber > 0 then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck);
if g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck ~= nil then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].truckState);
end;
end;
end;
end;
end;
function LatteStationExtended:loadFromAttributesAndNodes(xmlFile, key)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
local fillLevel = getXMLFloat(xmlFile, key.."#fillLevel");
if fillLevel ~= nil then
if self.maxLatte > -1 and fillLevel > self.maxLatte then
fillLevel = maxLatte;
end;
self.fillLevel = fillLevel;
end;
end;
return true;
end;
function LatteStationExtended:getSaveAttributesAndNodes(nodeIdent)
local attributes = "";
local nodes = "";
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
attributes = 'fillLevel="'..self.fillLevel..'"';
end;
return attributes, nodes;
end;
function LatteStationExtended:update(dt)
if self.fillLevel == nil then
self.fillLevel = 0;
end;
local latteFillLevel = self.fillLevel;
self.fillSpeed = self.fillLitersPerSecond * 0.001 * dt;
local fPrice = Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter;
if self.maxLatte > -1 then
if self.isServer then
if self.oldLatteCheck == 0 then
self.oldLatteCheck = -99;
local oldAmount = g_currentMission:getSiloAmount(Fillable.FILLTYPE_MILK);
local oldAmount = oldAmount + g_currentMission:getSiloAmount(Fillable.FILLTYPE_MILK2);
g_currentMission:setSiloAmount(Fillable.FILLTYPE_MILK2, 0);
if oldAmount > 0 then
self.fillLevel = self.fillLevel + oldAmount;
oldAmount = 0;
if self.fillLevel > self.maxLatte then
oldAmount = self.fillLevel - self.maxLatte;
self.fillLevel = self.fillLevel - oldAmount;
end;
if oldAmount <= 1 then
oldAmount = 0;
end;
g_currentMission:setSiloAmount(Fillable.FILLTYPE_MILK, oldAmount);
end;
else
self.oldLatteCheck = self.oldLatteCheck - 1;
end;
end;
if self.fillLevel >= self.maxLatte then
self.state = 1;
else
if self.state > 0 then
self.state = 0;
end;
end;
if self.showOnMap then
if latteFillLevel > 0 and self.mapHotspot == nil then
self.mapHotspot = g_currentMission.missionPDA:createMapHotspot("LatteStation", Utils.getFilename("$dataS2/missions/hud_pda_spot_latteStation.png", self.baseDirectory), self.MHSx, self.MHSz, self.MHSiconSize, self.MHSiconSize * (4 / 3), false, false, false, 0, true);
elseif latteFillLevel <= 0 and self.mapHotspot ~= nil then
g_currentMission.missionPDA:deleteMapHotspot(self.mapHotspot);
self.mapHotspot = nil;
end;
end;

if g_currentMission.latteDeliveryTours[self.tourNumber] ~= nil then
if g_currentMission.latteDeliveryTours[self.tourNumber].truck ~= nil or g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
local truckState = 0;
if self.isServer then
truckState = g_currentMission.latteDeliveryTours[self.tourNumber].truck.latteTruckState;
if self.oldTruckState ~= truckState then
self.oldTruckState = truckState;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = truckState;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
end;
else
truckState = g_currentMission.latteDeliveryTours[self.tourNumber].truckState;
end;
local deliveryPrice = LatteStationExtended.deliveryBasePrice;
local lattePrice = Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * LatteStationExtended.baseLatteFactor;
if self.playerDeliveryTrigger ~= nil and self.playerDeliveryTrigger ~= 0 and self.playerInTrigger then
g_currentMission:addExtraPrintText(" ");
if truckState == 0 then
local leftSpace = self.maxLatte - self.fillLevel;
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryA"));
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryB"));
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDeliveryC"),tostring(math.floor(lattePrice * 1000)/1000)));
g_currentMission:addExtraPrintText(" ");
if leftSpace >= 25000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_7"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_7), tostring(math.ceil(deliveryPrice + (lattePrice * 25000)))));
end;
if leftSpace >= 20000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_6"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_6), tostring(math.ceil(deliveryPrice + (lattePrice * 20000)))));
end;
if leftSpace >= 15000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_5"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_5), tostring(math.ceil(deliveryPrice + (lattePrice * 15000)))));
end;
if leftSpace >= 10000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_4"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_4), tostring(math.ceil(deliveryPrice + (lattePrice * 10000)))));
end;
if leftSpace >= 5000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_3"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_3), tostring(math.ceil(deliveryPrice + (lattePrice * 5000)))));
end;
if leftSpace >= 2500 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_2"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_2), tostring(math.ceil(deliveryPrice + (lattePrice * 2500)))));
end;
if leftSpace >= 1000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_1"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_1), tostring(math.ceil(deliveryPrice + (lattePrice * 1000)))));
end;

if InputBinding.hasEvent(InputBinding.latteDelivery_7) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 7;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 25000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_6) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 6;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 20000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_5) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 5;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 15000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_4) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 4;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 10000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_3) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 3;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 5000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_2) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 2;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 2500);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_1) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 1;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 1000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
end;
elseif truckState > 0 then
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryOnTheWay"));
end;
end;
if truckState > 2 then
if g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = false;
if self.isServer then
local type = g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType
if type == 7 then
self.fillLevel = math.min(self.fillLevel + 25000,self.maxLatte);
elseif type == 6 then
self.fillLevel = math.min(self.fillLevel + 20000,self.maxLatte);
elseif type == 5 then
self.fillLevel = math.min(self.fillLevel + 15000,self.maxLatte);
elseif type == 4 then
self.fillLevel = math.min(self.fillLevel + 10000,self.maxLatte);
elseif type == 3 then
self.fillLevel = math.min(self.fillLevel + 5000,self.maxLatte);
elseif type == 2 then
self.fillLevel = math.min(self.fillLevel + 2500,self.maxLatte);
elseif type == 1 then
self.fillLevel = math.min(self.fillLevel + 1000,self.maxLatte);
end;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
g_currentMission:addSharedMoney(-g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum, "other");
end;
self:setDisplay(true, false, true);
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 0;
end;
end;
end;
end;
else
self.fillLevel = 9999999;
end;
if self.displayRefresher <= 0 then
self:setDisplay(true, false, true);
for a,b in pairs(self.vehiclesTriggerCount) do
if b ~= nil and b == 1 and a ~= nil then
self:manageMotorized(a,false);
end;
end;
else
self.displayRefresher = self.displayRefresher - 1;
end;
end;
function LatteStationExtended:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if self.isEnabled then
local vehicle = g_currentMission.nodeToVehicle[otherId];
if vehicle ~= nil and vehicle.addLatteFillTrigger ~= nil and vehicle.removeLatteFillTrigger ~= nil and vehicle ~= self then
local count = Utils.getNoNil(self.vehiclesTriggerCount[vehicle], 0);
if onEnter then
if (self.fillLevel > 0 and self.maxLatte > -1) or self.maxLatte == -1 then
local allowed = false;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = true;
if self.trailerCan or self.trailerOnly then
allowed = true;
end;
else
if not self.trailerOnly then
allowed = true;
end;
end;

if allowed then
self.vehiclesTriggerCount[vehicle] = 1;
if count == 0 then
vehicle:addLatteFillTrigger(self);
if self.maxLatte > -1 then
self:setDisplay(true, false, true);
else
self:setDisplay(true, true, true);
end;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = true;
end;
end;
end;
end;
elseif onLeave then
self.vehiclesTriggerCount[vehicle] = 0;
if count == 1 then
self.vehiclesTriggerCount[vehicle] = nil;
vehicle:removeLatteFillTrigger(self);
if table.getn(self.vehiclesTriggerCount) < 1 then
self.showDelta = 0;
self.showDeltaPrice = 0;
end;
if self.maxLatte > -1 then
self:setDisplay(true, false, true);
else
self:setDisplay(true, true, true);
end;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = false;
end;
end;
end;
end;
end;
end;
function LatteStationExtended:onVehicleDeleted(vehicle)
self.vehiclesTriggerCount[vehicle] = nil;
end;
function LatteStationExtended:setDisplay(latte, price, leftLatte)
self.displayRefresher = math.random(10,20);
if self.isServer then
if self.lastDelta ~= self.showDelta then
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
g_server:broadcastEvent(LatteStationDisplayEvent:new(self.valuePos, self.showDelta, self.showDeltaPrice, latte, price, leftLatte));
self.lastDelta = self.showDelta;
end;
end;
if leftLatte and self.showLevel then
if self.maxLatte > -1 then
local fL = math.floor(self.fillLevel * 100);
local fLU = string.format("%d", fL);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fL >= 10000000 then
digit1 = string.sub(fLU, 1, 1);
digit2 = string.sub(fLU, 2, 2);
digit3 = string.sub(fLU, 3, 3);
digit4 = string.sub(fLU, 4, 4);
digit5 = string.sub(fLU, 5, 5);
digit6 = string.sub(fLU, 6, 6);
digit7 = string.sub(fLU, 7, 7);
digit8 = string.sub(fLU, 8, 8);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],true);
elseif fL >= 1000000 then
digit2 = string.sub(fLU, 1, 1);
digit3 = string.sub(fLU, 2, 2);
digit4 = string.sub(fLU, 3, 3);
digit5 = string.sub(fLU, 4, 4);
digit6 = string.sub(fLU, 5, 5);
digit7 = string.sub(fLU, 6, 6);
digit8 = string.sub(fLU, 7, 7);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100000 then
digit3 = string.sub(fLU, 1, 1);
digit4 = string.sub(fLU, 2, 2);
digit5 = string.sub(fLU, 3, 3);
digit6 = string.sub(fLU, 4, 4);
digit7 = string.sub(fLU, 5, 5);
digit8 = string.sub(fLU, 6, 6);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10000 then
digit4 = string.sub(fLU, 1, 1);
digit5 = string.sub(fLU, 2, 2);
digit6 = string.sub(fLU, 3, 3);
digit7 = string.sub(fLU, 4, 4);
digit8 = string.sub(fLU, 5, 5);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 1000 then
digit5 = string.sub(fLU, 1, 1);
digit6 = string.sub(fLU, 2, 2);
digit7 = string.sub(fLU, 3, 3);
digit8 = string.sub(fLU, 4, 4);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100 then
digit6 = string.sub(fLU, 1, 1);
digit7 = string.sub(fLU, 2, 2);
digit8 = string.sub(fLU, 3, 3);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10 then
digit7 = string.sub(fLU, 1, 1);
digit8 = string.sub(fLU, 2, 2);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 0 then
digit8 = string.sub(fLU, 1, 1);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
else
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
end;
setShaderParameter(self.digitLevel[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitLevel[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitLevel[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitLevel[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitLevel[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitLevel[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitLevel[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitLevel[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
else
local fL = math.floor(Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * self.priceMultiplier * 1000);
local fLU = string.format("%d", fL);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fL >= 10000000 then
digit1 = string.sub(fLU, 1, 1);
digit2 = string.sub(fLU, 2, 2);
digit3 = string.sub(fLU, 3, 3);
digit4 = string.sub(fLU, 4, 4);
digit5 = string.sub(fLU, 5, 5);
digit6 = string.sub(fLU, 6, 6);
digit7 = string.sub(fLU, 7, 7);
digit8 = string.sub(fLU, 8, 8);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],true);
elseif fL >= 1000000 then
digit2 = string.sub(fLU, 1, 1);
digit3 = string.sub(fLU, 2, 2);
digit4 = string.sub(fLU, 3, 3);
digit5 = string.sub(fLU, 4, 4);
digit6 = string.sub(fLU, 5, 5);
digit7 = string.sub(fLU, 6, 6);
digit8 = string.sub(fLU, 7, 7);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100000 then
digit3 = string.sub(fLU, 1, 1);
digit4 = string.sub(fLU, 2, 2);
digit5 = string.sub(fLU, 3, 3);
digit6 = string.sub(fLU, 4, 4);
digit7 = string.sub(fLU, 5, 5);
digit8 = string.sub(fLU, 6, 6);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10000 then
digit4 = string.sub(fLU, 1, 1);
digit5 = string.sub(fLU, 2, 2);
digit6 = string.sub(fLU, 3, 3);
digit7 = string.sub(fLU, 4, 4);
digit8 = string.sub(fLU, 5, 5);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 1000 then
digit5 = string.sub(fLU, 1, 1);
digit6 = string.sub(fLU, 2, 2);
digit7 = string.sub(fLU, 3, 3);
digit8 = string.sub(fLU, 4, 4);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100 then
digit6 = string.sub(fLU, 1, 1);
digit7 = string.sub(fLU, 2, 2);
digit8 = string.sub(fLU, 3, 3);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10 then
digit7 = string.sub(fLU, 1, 1);
digit8 = string.sub(fLU, 2, 2);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 0 then
digit8 = string.sub(fLU, 1, 1);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
else
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
end;
setShaderParameter(self.digitLevel[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitLevel[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitLevel[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitLevel[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitLevel[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitLevel[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitLevel[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitLevel[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
end;
if latte and self.showFill then
local fD = math.floor(self.showDelta * 100);
local fDU = string.format("%d", fD);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fD >= 10000000 then
digit1 = string.sub(fDU, 1, 1);
digit2 = string.sub(fDU, 2, 2);
digit3 = string.sub(fDU, 3, 3);
digit4 = string.sub(fDU, 4, 4);
digit5 = string.sub(fDU, 5, 5);
digit6 = string.sub(fDU, 6, 6);
digit7 = string.sub(fDU, 7, 7);
digit8 = string.sub(fDU, 8, 8);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],true);
setVisibility(self.digitFill[1],true);
elseif fD >= 1000000 then
digit2 = string.sub(fDU, 1, 1);
digit3 = string.sub(fDU, 2, 2);
digit4 = string.sub(fDU, 3, 3);
digit5 = string.sub(fDU, 4, 4);
digit6 = string.sub(fDU, 5, 5);
digit7 = string.sub(fDU, 6, 6);
digit8 = string.sub(fDU, 7, 7);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],true);
setVisibility(self.digitFill[1],false);
elseif fD >= 100000 then
digit3 = string.sub(fDU, 1, 1);
digit4 = string.sub(fDU, 2, 2);
digit5 = string.sub(fDU, 3, 3);
digit6 = string.sub(fDU, 4, 4);
digit7 = string.sub(fDU, 5, 5);
digit8 = string.sub(fDU, 6, 6);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 10000 then
digit4 = string.sub(fDU, 1, 1);
digit5 = string.sub(fDU, 2, 2);
digit6 = string.sub(fDU, 3, 3);
digit7 = string.sub(fDU, 4, 4);
digit8 = string.sub(fDU, 5, 5);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 1000 then
digit5 = string.sub(fDU, 1, 1);
digit6 = string.sub(fDU, 2, 2);
digit7 = string.sub(fDU, 3, 3);
digit8 = string.sub(fDU, 4, 4);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 100 then
digit6 = string.sub(fDU, 1, 1);
digit7 = string.sub(fDU, 2, 2);
digit8 = string.sub(fDU, 3, 3);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 10 then
digit7 = string.sub(fDU, 1, 1);
digit8 = string.sub(fDU, 2, 2);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 0 then
digit8 = string.sub(fDU, 1, 1);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],false);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
else
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],false);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
end;
setShaderParameter(self.digitFill[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitFill[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitFill[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitFill[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitFill[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitFill[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitFill[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitFill[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
if price and self.showPrice then
local pD = math.floor(self.showDeltaPrice * 100);
local pDU = string.format("%d", pD);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if pD >= 10000000 then
digit1 = string.sub(pDU, 1, 1);
digit2 = string.sub(pDU, 2, 2);
digit3 = string.sub(pDU, 3, 3);
digit4 = string.sub(pDU, 4, 4);
digit5 = string.sub(pDU, 5, 5);
digit6 = string.sub(pDU, 6, 6);
digit7 = string.sub(pDU, 7, 7);
digit8 = string.sub(pDU, 8, 8);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],true);
setVisibility(self.digitPrice[1],true);
elseif pD >= 1000000 then
digit2 = string.sub(pDU, 1, 1);
digit3 = string.sub(pDU, 2, 2);
digit4 = string.sub(pDU, 3, 3);
digit5 = string.sub(pDU, 4, 4);
digit6 = string.sub(pDU, 5, 5);
digit7 = string.sub(pDU, 6, 6);
digit8 = string.sub(pDU, 7, 7);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],true);
setVisibility(self.digitPrice[1],false);
elseif pD >= 100000 then
digit3 = string.sub(pDU, 1, 1);
digit4 = string.sub(pDU, 2, 2);
digit5 = string.sub(pDU, 3, 3);
digit6 = string.sub(pDU, 4, 4);
digit7 = string.sub(pDU, 5, 5);
digit8 = string.sub(pDU, 6, 6);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 10000 then
digit4 = string.sub(pDU, 1, 1);
digit5 = string.sub(pDU, 2, 2);
digit6 = string.sub(pDU, 3, 3);
digit7 = string.sub(pDU, 4, 4);
digit8 = string.sub(pDU, 5, 5);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 1000 then
digit5 = string.sub(pDU, 1, 1);
digit6 = string.sub(pDU, 2, 2);
digit7 = string.sub(pDU, 3, 3);
digit8 = string.sub(pDU, 4, 4);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 100 then
digit6 = string.sub(pDU, 1, 1);
digit7 = string.sub(pDU, 2, 2);
digit8 = string.sub(pDU, 3, 3);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 10 then
digit7 = string.sub(pDU, 1, 1);
digit8 = string.sub(pDU, 2, 2);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 0 then
digit8 = string.sub(pDU, 1, 1);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],false);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
else
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],false);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
end;
setShaderParameter(self.digitPrice[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitPrice[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitPrice[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitPrice[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitPrice[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitPrice[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitPrice[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitPrice[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
end;
function LatteStationExtended:manageMotorized(vehicle, motorOff)
if motorOff == nil then
motorOff = false;
end;
local shutUp = false;
local suObject = nil;
if SpecializationUtil.hasSpecialization(Motorized, vehicle.specializations) then
suObject = vehicle;
if vehicle.isMotorStarted then
shutUp = true;
end;
else
if vehicle.attacherVehicle ~= nil then
if SpecializationUtil.hasSpecialization(Motorized, vehicle.attacherVehicle.specializations) then
suObject = vehicle.attacherVehicle;
if vehicle.attacherVehicle.isMotorStarted then
shutUp = true;
end;
else
if vehicle.attacherVehicle.attacherVehicle ~= nil then
if SpecializationUtil.hasSpecialization(Motorized, vehicle.attacherVehicle.attacherVehicle.specializations) then
suObject = vehicle.attacherVehicle.attacherVehicle;
if vehicle.attacherVehicle.attacherVehicle.isMotorStarted then
shutUp = true;
end;
end;
end;
end;
end;
end;
if suObject ~= nil then
if motorOff and shutUp then
if suObject.setManualIgnitionMode ~= nil then
if suObject.ignitionMode == 1 or suObject.ignitionMode == 2 then
suObject:setManualIgnitionMode(3);
end;
else
if suObject.stopMotor ~= nil then
suObject:stopMotor();
end;
end;
if suObject.setHandBrakeState ~= nil and not suObject.handbrake then
suObject:setHandBrakeState(true);
end;
if suObject.setparkingBrakeState ~= nil and not suObject.parkingBrake then
suObject:setparkingBrakeState(true);
end;
if suObject.setHMparkingBrakeState ~= nil and not suObject.HMparkingBrake then
suObject:setHMparkingBrakeState(true);
end;
elseif motorOff == false and shutUp == false then
if suObject.setManualIgnitionMode ~= nil then
if suObject.drive == true or suObject.steeringEnabled == false then
suObject:setManualIgnitionMode(2);
end;
else
if suObject.startMotor ~= nil then
suObject:startMotor();
end;
end;
if suObject.setHandBrakeState ~= nil and not suObject.handbrake then
suObject:setHandBrakeState(false);
end;
if suObject.setparkingBrakeState ~= nil and not suObject.parkingBrake then
suObject:setparkingBrakeState(false);
end;
if suObject.setHMparkingBrakeState ~= nil and not suObject.HMparkingBrake then
suObject:setHMparkingBrakeState(false);
end;
end;
end;
end;
function LatteStationExtended:fillLatte(vehicle, delta)
local latteFillLevel = self.fillLevel;
if (not self.isTrailer) and delta > self.fillSpeed then
delta = self.fillSpeed;
end;
if self.maxLatte > -1 and latteFillLevel > 0 then
delta = math.min(delta, latteFillLevel);
if delta <= 0 then
delta = 0;
end;
elseif self.maxLatte > -1 and latteFillLevel <= 0 then
self.fillLevel = 0;
self:setDisplay(true, false, true);
delta = 0;
end;
if vehicle.setLatteFillLevel ~= nil then
local oldFillLevel = vehicle.latteFillLevel
vehicle:setLatteFillLevel(vehicle.latteFillLevel + delta);
delta = vehicle.latteFillLevel - oldFillLevel;
else
if not vehicle:allowFillType(Fillable.FILLTYPE_MILK, false) then
delta = 0;
else
local oldFillLevel = vehicle:getFillLevel(Fillable.FILLTYPE_MILK);
vehicle:setFillLevel(oldFillLevel + delta, Fillable.FILLTYPE_MILK);
delta = vehicle:getFillLevel(Fillable.FILLTYPE_MILK) - oldFillLevel;
end;
end;
if delta > 0 then
self.showDelta = self.showDelta + delta;
self:manageMotorized(vehicle,true);
if self.maxLatte > -1 then
self.fillLevel = math.max(self.fillLevel - delta,0);
self:setDisplay(true, false, true);
else
local price = delta * Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * self.priceMultiplier;
self.showDeltaPrice = self.showDeltaPrice + price;
self:setDisplay(true, true, true);
g_currentMission.missionStats.expensesTotal = g_currentMission.missionStats.expensesTotal + price;
g_currentMission.missionStats.expensesSession = g_currentMission.missionStats.expensesSession + price;
if self.isServer then
g_currentMission:addSharedMoney(-price, "vehicleRunningCost");
end;
end;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
else
self:setDisplay(true, true, true);
self:manageMotorized(vehicle,false);
end;
return delta;
end;
function LatteStationExtended:getIsActivatable(vehicle)
if self.trailer ~= nil then
if self.trailer:getFillLevel(Fillable.FILLTYPE_MILK) <= 0 then
return false;
end;
end;
if vehicle.setLatteFillLevel == nil and not vehicle:allowFillType(Fillable.FILLTYPE_MILK, false) then
return false;
end;
if self.maxLatte > -1 and self.fillLevel <= 0 then
return false;
end;
return true;
end;

function LatteStationExtended:setTrailerFillDelta(trailer, fillDelta, fillType)
local fillDeltaOld = fillDelta;
if trailer.capacity ~= nil and trailer.capacity > 0 then
local tmp = 0 - (trailer.capacity / 100);
if fillDelta < tmp then
fillDelta = tmp;
end;
end;
if trailer.fillLitersPerSecond ~= nil and trailer.fillLitersPerSecond > 0 then
if fillDelta < (0 - trailer.fillLitersPerSecond) then
fillDelta = 0 - trailer.fillLitersPerSecond;
end;
end;
if trailer.latteFillLitersPerSecond ~= nil and trailer.latteFillLitersPerSecond > 0 then
if fillDelta < (0 - trailer.latteFillLitersPerSecond) then
fillDelta = 0 - trailer.latteFillLitersPerSecond;
end;
end;
if fillDelta < - 120 then
fillDelta = -120;
end;
if self.maxLatte > -1 and (self.fillLevel - fillDelta) > self.maxLatte then
fillDelta = self.maxLatte - self.fillLevel;
end;
if fillDeltaOld < fillDelta then
local tAdd = 0 - (fillDeltaOld - fillDelta);
trailer:setFillLevel(trailer:getFillLevel(fillType) + tAdd,fillType,true);
end;
if fillDelta < 0 then
self.fillLevel = self.fillLevel - fillDelta;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
self:setDisplay(true, true, true);
self:manageMotorized(trailer,true);
else
trailer:onEndTip();
self:manageMotorized(trailer,false);
end;
end;

----------------------------------------------------------------------------------------------------------------

LatteStationDisplayEvent = {};
LatteStationDisplayEvent_mt = Class(LatteStationDisplayEvent, Event);
InitEventClass(LatteStationDisplayEvent, "LatteStationDisplayEvent");

function LatteStationDisplayEvent:emptyNew()
local self = Event:new(LatteStationDisplayEvent_mt);
return self;
end;
function LatteStationDisplayEvent:new(gsPos, value1, value2, bool1, bool2, bool3)
local self = LatteStationDisplayEvent:emptyNew()
self.gsPos = gsPos;
self.value1 = value1;
self.value2 = value2;
self.bool1 = bool1;
self.bool2 = bool2;
self.bool3 = bool3;
return self;
end;
function LatteStationDisplayEvent:readStream(streamId, connection)
self.gsPos = streamReadInt32(streamId);
self.value1 = streamReadFloat32(streamId);
self.value2 = streamReadFloat32(streamId);
self.bool1 = streamReadBool(streamId);
self.bool2 = streamReadBool(streamId);
self.bool3 = streamReadBool(streamId);
self:run(connection);
end;
function LatteStationDisplayEvent:writeStream(streamId, connection)
streamWriteInt32(streamId,self.gsPos);
streamWriteFloat32(streamId,self.value1);
streamWriteFloat32(streamId,self.value2);
streamWriteBool(streamId,self.bool1);
streamWriteBool(streamId,self.bool2);
streamWriteBool(streamId,self.bool3);
end;
function LatteStationDisplayEvent:run(connection)
if connection:getIsServer() then
local gS = g_currentMission.latteStationDisplays;
if gS ~= nil and type(gS) == "table" and table.getn(gS) > 0 and gS[self.gsPos] ~= nil then
g_currentMission.latteStationDisplays[self.gsPos].showDelta = self.value1;
g_currentMission.latteStationDisplays[self.gsPos].showDeltaPrice = self.value2;
g_currentMission.latteStationDisplays[self.gsPos]:setDisplay(self.bool1, self.bool2, self.bool3)
end;
end;
end;

g_onCreateUtil.addOnCreateFunction("LatteStationExtended", LatteStationExtended.onCreate);


LatteolineTipTrigger = {};
local LatteolineTipTrigger_mt = Class(LatteolineTipTrigger, TipTrigger);
InitObjectClass(LatteolineTipTrigger, "LatteolineTipTrigger");
function LatteolineTipTrigger:new(isServer, isClient, customMt)
local mt = customMt;
if mt == nil then
mt = LatteolineTipTrigger_mt;
end;
local self = TipTrigger:new(isServer, isClient, mt);
return self;
end;
function LatteolineTipTrigger:load(id, tippingSilo)
self.defaultPriceMultiplier = 0;
LatteolineTipTrigger:superClass().load(self, id);
self.appearsOnPDA = false;
self.isFarmTrigger = false;
self.stationName = "LatteolineSilo"
self.tippingSilo = tippingSilo;
return true;
end;
function LatteolineTipTrigger:updateTrailerTipping(trailer, fillDelta, fillType)
if fillDelta < 0 then
self.tippingSilo:setTrailerFillDelta(trailer, fillDelta, fillType);
end;
end;
function LatteolineTipTrigger:getTipDistanceFromTrailer(trailer, tipReferencePointIndex)
if self.tippingSilo.fillLevel >= self.tippingSilo.capacity then
return math.huge;
end;
return LatteolineTipTrigger:superClass().getTipDistanceFromTrailer(self, trailer, tipReferencePointIndex);
end;


-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------


local oldMLoad = Mission00.load
Mission00.load = function(self)
oldMLoad(self);
if self:getIsServer() then
if LatteStationExtended.numLatteTrucks > 0 then
for i=1, LatteStationExtended.numLatteTrucks do
self:loadLattetruck(i);
end;
end;
end;
end;
Mission00.loadLattetruck = function(self,tour)
if self:getIsServer() then
local latteTruckFilename = LatteStationExtended.modDir.."latteTruck/latteTruck.xml";
local xmlFile = loadXMLFile("TempConfig", latteTruckFilename);
local spawnTestInterval = 1000;
local sequence, loopIndex = RoadUtil.getRandomRoadSequence(nil, "latteTruck"..tostring(tour).."Indices", "latteTruck"..tostring(tour).."Directions");
if sequence ~= nil then
table.insert(self.trafficVehiclesToSpawn, {filename = latteTruckFilename, spawnTestNextTime = 0, spawnTestRadius = 2, spawnTestInterval = spawnTestInterval, sequence = sequence, loopIndex = loopIndex});
end;
delete(xmlFile);
end;
end;

-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------

--
-- Latte truck triggers
-- Script by Blacky_BPG
--
-- Last Change: 11.05.2014 by Blacky_BPG
--
-- Version 1.0.0 initial Version
--


latteTruckDeliveryTrigger = {}

local latteTruckDeliveryTrigger_mt = Class(latteTruckDeliveryTrigger)

function latteTruckDeliveryTrigger.onCreate(id)
g_currentMission:addNonUpdateable(latteTruckDeliveryTrigger:new(id))
end
function latteTruckDeliveryTrigger:new(id)
local self = {}
setmetatable(self, latteTruckDeliveryTrigger_mt)
self.triggerId = id
self.triggerTourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"), 0)
addTrigger(id, "triggerCallback", self)
return self
end
function latteTruckDeliveryTrigger:delete()
removeTrigger(self.triggerId)
end
function latteTruckDeliveryTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
local object = g_currentMission.nodeToVehicle[otherActorId]
if object ~= nil then
if object.latteTruckRefNode ~= nil and object.tourNumber == self.triggerTourNumber then
if object.latteTruckRefNode == otherShapeId or object.latteTruckRefNode == otherActorId then
if onEnter then
object:onEnteredlatteTruckDeliveryTrigger(self, self.triggerTourNumber)
elseif onLeave then
object:onLeavedlatteTruckDeliveryTrigger(self, self.triggerTourNumber)
g_currentMission.latteDeliveryTours[self.triggerTourNumber].unloadReady = true
end
end
end
end
end
g_onCreateUtil.addOnCreateFunction("latteTruckDeliveryTrigger", latteTruckDeliveryTrigger.onCreate);


latteTruckStartTrigger = {}
local latteTruckStartTrigger_mt = Class(latteTruckStartTrigger)
function latteTruckStartTrigger.onCreate(id)
g_currentMission:addNonUpdateable(latteTruckStartTrigger:new(id))
end
function latteTruckStartTrigger:new(id)
local self = {}
setmetatable(self, latteTruckStartTrigger_mt)
self.triggerId = id
self.triggerTourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"), 0)
addTrigger(id, "triggerCallback", self)
return self
end
function latteTruckStartTrigger:delete()
removeTrigger(self.triggerId)
end
function latteTruckStartTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
local object = g_currentMission.nodeToVehicle[otherActorId]
if onEnter then
if object ~= nil then
if object.latteTruckRefNode ~= nil then
if object.latteTruckRefNode == otherShapeId or object.latteTruckRefNode == otherActorId then
object:onEnteredlatteTruckStartTrigger(self, self.triggerTourNumber)
end
end
end
end
end
g_onCreateUtil.addOnCreateFunction("latteTruckStartTrigger", latteTruckStartTrigger.onCreate);


das war mein versuch, bin aber gescheitert, konnte keine milch rausholen und milch von den Rindern nicht reinmachen. Das mit der Milchanlieferung klappte aber schonmal
0 x
Bild

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#30

Beitragvon BlackWolve » Di 8. Jul 2014, 11:15

Erdbeerchenmilk hat geschrieben:GasStationTrigger Extended 5.0.2

Hallo Team!

Ist es möglich, dieses Script so abzuändern, dass man statt fuel, milk benutzen kann. Ich würde gerne Milch einlagern und zu einem späteren Zeitpunkt, bei besserem Angebot verkaufen

Würde mich freuen

:fruit: Euer Erdbeerchenmilk


Spoiler anzeigen
--
-- Latte Station Trigger with variable prices and fillable tanks
-- by Blacky_BPG
--
-- Update 4.2.9 - Script function changed so that BSH does not get any more problems
-- Update 5.0.1 - Script function expanded for latte trailer delivery trucks
-- Update 5.0.1a - 5.0.1 Script errors fixed
--

----------------------------------------------------------------------------------------------------------------

-- Wir machen's nicht kompliziert, wir erstellen uns einen neuen FillType der in die Ökonomie des Spiels eingebunden wird
-- Der Basispreis wird mit den Multiplikatoren an den Zapfsäulen multipliziert OHNE Einfluß des Schwierigkeitsgrades !
-- Der Pfad zum FillType-Hud (hier der Ordner huds im ZIP-Archiv) kann natürlich angepasst werden, je nachdem wo man
-- seine HUD-Anzeigen einbinden möchte in der Karte, wichtig ist das sich die Datei dann auch in dem Pfad befinden sollte.

-- Durchschnittspreis: 1,36^9 (bei mitgelieferter Beispieltankstelle [Preisfaktor: 1.12213])
----------------------------------------------------------------------------------------------------------------
local milkhudFile = Utils.getFilename("huds/milkHud.dds", g_currentModDirectory);
Fillable.registerFillType("milk2", g_i18n:getText("milk"), 1.220865, true, milkhudFile);
----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------
---------------- Als nächstes verpassen wir den normalen LatteTrailern die Trailer-Spezialisierung --------------
------------------- damit sie auch entladen werden können an den befüllbaren Hoftankstellen. -------------------
----------------------------------------------------------------------------------------------------------------
LatteStationExtendedMilkTrailerFix = {};
function LatteStationExtendedMilkTrailerFix:loadMap(name)
if self.firstRun == nil then
self.firstRun = false;
local desc = Fillable.fillTypeNameToDesc["milk"];
if desc ~= nil then
desc.hudOverlayFilename = milkhudFile;
end;
for k, v in pairs(VehicleTypeUtil.vehicleTypes) do
if v ~= nil and SpecializationUtil.hasSpecialization(MilkTrailer, v.specializations) and not SpecializationUtil.hasSpecialization(Trailer, v.specializations) then
table.insert(v.specializations, SpecializationUtil.getSpecialization("trailer"));
end;
end;
end;
end;
function LatteStationExtendedMilkTrailerFix:deleteMap() end;
function LatteStationExtendedMilkTrailerFix:keyEvent(unicode, sym, modifier, isDown) end;
function LatteStationExtendedMilkTrailerFix:mouseEvent(posX, posY, isDown, isUp, button) end;
function LatteStationExtendedMilkTrailerFix:update(dt) end;
function LatteStationExtendedMilkTrailerFix:draw() end;
addModEventListener(LatteStationExtendedMilkTrailerFix);

----------------------------------------------------------------------------------------------------------------
--------------------------------- Jetzt kommt der eigentliche Tanktrigger --------------------------------------
----------------------------------------------------------------------------------------------------------------

-- baseLatteFactor - Basismultiplikator für die Bestellung von Treibstoff
-- deliveryBasePrice - Basispreis für die Anfuhr an sich (Transportkosten sozusagen)
-- numLatteTrucks - gibt die Zahl der zur Verfügung stehenden Diesel-Tour-LKWs an
-- ACHTUNG, NICHT mehr angeben als wirklich verbaut sind sonst gibt es heftige LOG-Fehler

LatteStationExtended = {};
LatteStationExtended.modDir = g_currentModDirectory;

LatteStationExtended.numLatteTrucks = 1;
LatteStationExtended.baseLatteFactor = 1.12213;
LatteStationExtended.deliveryBasePrice = 250;

LatteStationExtended_mt = Class(LatteStationExtended, Object);
InitObjectClass(LatteStationExtended, "LatteStationExtended");

function LatteStationExtended.onCreate(id)
local trigger = LatteStationExtended:new(g_server ~= nil, g_client ~= nil);
trigger:load(id)
g_currentMission:addOnCreateLoadedObject(trigger);
trigger:register(true);
end;
function LatteStationExtended:new(isServer, isClient, customMt)
if customMt == nil then
customMt = LatteStationExtended_mt;
end;
local self = Object:new(isServer, isClient, customMt);
self.triggerId = 0;
self.rootNode = 0;
self.tipTriggers = {};
self.fillLevel = 0;
self.maxLatte = -1;
if g_currentMission.latteStations == nil then
g_currentMission.latteStations = {};
end;
table.insert(g_currentMission.latteStations, self);
self.latteTriggerDirtyFlag = self:getNextDirtyFlag();
return self;
end;
function LatteStationExtended:load(id)

self.rootNode = id;
self.triggerId = id;
addTrigger(id, "triggerCallback", self);

self.vehiclesTriggerCount = {};

self.showOnMap = Utils.getNoNil(getUserAttribute(id, "showOnMap"),true);
if self.showOnMap then
self.MHSx, y, self.MHSz = getWorldTranslation(id);
self.MHSiconSize = g_currentMission.missionPDA.pdaMapWidth / 15;
self.mapHotspot = g_currentMission.missionPDA:createMapHotspot("LatteStation", Utils.getFilename("huds/hud_pda_spot_LatteStation.dds", self.baseDirectory), self.MHSx, self.MHSz, self.MHSiconSize, self.MHSiconSize * (4 / 3), false, false, false, 0, true);
end;

self.playerDeliveryTrigger = nil
local playerDeliveryTrigger = getUserAttribute(id, "deliveryTrigger");
if playerDeliveryTrigger ~= nil then
self.playerDeliveryTrigger = Utils.indexToObject(id, playerDeliveryTrigger);
self.playerInTrigger = false;
addTrigger(self.playerDeliveryTrigger, "playerTriggerCallback", self);
if g_currentMission.latteDeliveryTours == nil then
g_currentMission.latteDeliveryTours = {};
end;
self.tourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"),1);
g_currentMission.latteDeliveryTours[self.tourNumber] = {};
g_currentMission.latteDeliveryTours[self.tourNumber].trigger = self;
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].truck = nil;
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = false;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = false;
end;

self.priceMultiplier = Utils.getNoNil(getUserAttribute(id, "priceMultiplier"),1);
self.maxLatte = Utils.getNoNil(getUserAttribute(id, "maxLatteBunker"),-1);
self.capacity = self.maxLatte;
self.fillLitersPerSecond = Utils.getNoNil(getUserAttribute(id, "fillLitersPerSecond"),5);
self.fillSpeed = 0;
self.isFirstStart = true;
self.cntTimer = 0;
self.isTrailer = 0;
self.showDelta = 0;
self.showDeltaPrice = 0;
self.displayRefresher = 5;

self.trailerCan = Utils.getNoNil(getUserAttribute(id, "trailerCan"),true);
self.trailerOnly = Utils.getNoNil(getUserAttribute(id, "trailerOnly"),false);
self.showFill = Utils.getNoNil(getUserAttribute(id, "latteDigits"),false);
self.showPrice = Utils.getNoNil(getUserAttribute(id, "priceDigits"),false);
self.showLevel = Utils.getNoNil(getUserAttribute(id, "levelDigits"),false);
if self.showFill then
self.digitFill = {};
self.digitFill[1] = Utils.indexToObject(id, getUserAttribute(id, "digitFill1"));
self.digitFill[2] = Utils.indexToObject(id, getUserAttribute(id, "digitFill2"));
self.digitFill[3] = Utils.indexToObject(id, getUserAttribute(id, "digitFill3"));
self.digitFill[4] = Utils.indexToObject(id, getUserAttribute(id, "digitFill4"));
self.digitFill[5] = Utils.indexToObject(id, getUserAttribute(id, "digitFill5"));
self.digitFill[6] = Utils.indexToObject(id, getUserAttribute(id, "digitFill6"));
self.digitFill[7] = Utils.indexToObject(id, getUserAttribute(id, "digitFill7"));
self.digitFill[8] = Utils.indexToObject(id, getUserAttribute(id, "digitFill8"));
end;
if self.showPrice then
self.digitPrice = {};
self.digitPrice[1] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice1"));
self.digitPrice[2] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice2"));
self.digitPrice[3] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice3"));
self.digitPrice[4] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice4"));
self.digitPrice[5] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice5"));
self.digitPrice[6] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice6"));
self.digitPrice[7] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice7"));
self.digitPrice[8] = Utils.indexToObject(id, getUserAttribute(id, "digitPrice8"));
end;
if self.showLevel then
self.digitLevel = {};
self.digitLevel[1] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel1"));
self.digitLevel[2] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel2"));
self.digitLevel[3] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel3"));
self.digitLevel[4] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel4"));
self.digitLevel[5] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel5"));
self.digitLevel[6] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel6"));
self.digitLevel[7] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel7"));
self.digitLevel[8] = Utils.indexToObject(id, getUserAttribute(id, "digitLevel8"));
end;
self.digitPosition = {};
self.digitPosition["0"] = -1.000;
self.digitPosition["1"] = -0.106;
self.digitPosition["2"] = -0.212;
self.digitPosition["3"] = -0.309;
self.digitPosition["4"] = -0.414;
self.digitPosition["5"] = -0.520;
self.digitPosition["6"] = -0.617;
self.digitPosition["7"] = -0.722;
self.digitPosition["8"] = -0.820;
self.digitPosition["9"] = -0.925;

self.fType = Fillable.FILLTYPE_MILK;
self.isEnabled = true;
self.state = 0;
self.oldLatteCheck = 99;

if g_currentMission.latteStationDisplays == nil then
g_currentMission.latteStationDisplays = {};
end;
self.lastDelta = 0;
table.insert(g_currentMission.latteStationDisplays,self);
self.valuePos = table.getn(g_currentMission.latteStationDisplays);

local tipTriggerIndex = getUserAttribute(self.rootNode, "tipTriggerIndex");
if tipTriggerIndex ~= nil then
local tipTriggersId = Utils.indexToObject(self.rootNode, tipTriggerIndex);
if tipTriggersId ~= nil then
local tipTrigger = LatteolineTipTrigger:new(self.isServer, self.isClient);
tipTrigger:load(tipTriggersId, self);
g_currentMission:addOnCreateLoadedObject(tipTrigger);
tipTrigger:register(true);
table.insert(self.tipTriggers, tipTrigger);
end;
end;

self.isEnabled = true;
g_currentMission:addNodeObject(self.rootNode, self);
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
g_currentMission:addOnCreateLoadedObjectToSave(self);
end;
self.oldTruckState = 3;
self.oldTime = 0;
return true;
end;
function LatteStationExtended:playerTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if self.isEnabled and g_currentMission.players[otherId] ~= nil then
if onEnter then
self.playerInTrigger = true;
else
self.playerInTrigger = false;
end;
end;
end;
function LatteStationExtended:delete()
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
g_currentMission:removeOnCreateLoadedObjectToSave(self);
end;
if self.isServer then
if table.getn(self.tipTriggers) > 0 then
for _,trigger in pairs(self.tipTriggers) do
if trigger.isRegistered then
trigger:unregister();
trigger:delete();
end;
end;
end;
end;
for vehicle,count in pairs(self.vehiclesTriggerCount) do
if count > 0 then
if vehicle.removeLatteFillTrigger ~= nil then
vehicle:removeLatteFillTrigger(self);
end;
end;
end;
if self.rootNode ~= nil then
g_currentMission:removeNodeObject(self.rootNode);
end;
if self.showOnMap and self.mapHotspot ~= nil then
g_currentMission.missionPDA:deleteMapHotspot(self.mapHotspot);
end;
if self.playerDeliveryTrigger ~= nil then
removeTrigger(self.playerDeliveryTrigger);
end;
removeTrigger(self.triggerId);
end;
function LatteStationExtended:readStream(streamId, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
local fillLevel = streamReadFloat32(streamId);
if fillLevel ~= self.fillLevel then
self:setDisplay(true, false, true);
end;
self.fillLevel = fillLevel;

if self.tourNumber ~= nil and self.tourNumber > 0 then
local deliveryType = streamReadInt32(streamId);
if deliveryType ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
end;
local deliverySum = streamReadFloat32(streamId);
if deliverySum ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
local unloadReady = streamReadBool(streamId);
if unloadReady ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = unloadReady;
end;
if self.isClient then
if streamReadBool(streamId) then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = streamReadInt32(streamId);
end;
end;
end;
end;
end;
function LatteStationExtended:writeStream(streamId, timestamp, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
streamWriteFloat32(streamId, self.fillLevel);
if self.tourNumber ~= nil and self.tourNumber > 0 then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady);
if self.isServer then
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck);
if g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck ~= nil then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].truckState);
end;
end;
end;
end;
end;
function LatteStationExtended:readUpdateStream(streamId, timestamp, connection)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
if connection ~= nil and not connection:getIsServer() then
local deliveryType = streamReadInt32(streamId);
local deliverySum = streamReadFloat32(streamId);
if deliveryType > g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
end;
if connection ~= nil and connection:getIsServer() then
local fillLevel = streamReadFloat32(streamId);
if fillLevel ~= self.fillLevel then
self:setDisplay(true, false, true);
end;
self.fillLevel = fillLevel;

if self.tourNumber ~= nil and self.tourNumber > 0 then
local deliveryType = streamReadInt32(streamId);
if deliveryType ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = deliveryType;
end;
local deliverySum = streamReadFloat32(streamId);
if deliverySum ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliverySum;
end;
local unloadReady = streamReadBool(streamId);
if unloadReady ~= nil then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = unloadReady;
end;
if streamReadBool(streamId) then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = streamReadInt32(streamId);
end;
end;
end;
end;
end;
function LatteStationExtended:writeUpdateStream(streamId, connection, dirtyMask)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
if connection ~= nil and connection:getIsServer() then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
end;
if connection ~= nil and not connection:getIsServer() then
streamWriteFloat32(streamId, self.fillLevel);
if self.tourNumber ~= nil and self.tourNumber > 0 then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType);
streamWriteFloat32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady);
streamWriteBool(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck);
if g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck ~= nil then
streamWriteInt32(streamId, g_currentMission.latteDeliveryTours[self.tourNumber].truckState);
end;
end;
end;
end;
end;
function LatteStationExtended:loadFromAttributesAndNodes(xmlFile, key)
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
local fillLevel = getXMLFloat(xmlFile, key.."#fillLevel");
if fillLevel ~= nil then
if self.maxLatte > -1 and fillLevel > self.maxLatte then
fillLevel = maxLatte;
end;
self.fillLevel = fillLevel;
end;
end;
return true;
end;
function LatteStationExtended:getSaveAttributesAndNodes(nodeIdent)
local attributes = "";
local nodes = "";
if self.maxLatte > -1 and table.getn(self.tipTriggers) > 0 then
attributes = 'fillLevel="'..self.fillLevel..'"';
end;
return attributes, nodes;
end;
function LatteStationExtended:update(dt)
if self.fillLevel == nil then
self.fillLevel = 0;
end;
local latteFillLevel = self.fillLevel;
self.fillSpeed = self.fillLitersPerSecond * 0.001 * dt;
local fPrice = Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter;
if self.maxLatte > -1 then
if self.isServer then
if self.oldLatteCheck == 0 then
self.oldLatteCheck = -99;
local oldAmount = g_currentMission:getSiloAmount(Fillable.FILLTYPE_MILK);
local oldAmount = oldAmount + g_currentMission:getSiloAmount(Fillable.FILLTYPE_MILK2);
g_currentMission:setSiloAmount(Fillable.FILLTYPE_MILK2, 0);
if oldAmount > 0 then
self.fillLevel = self.fillLevel + oldAmount;
oldAmount = 0;
if self.fillLevel > self.maxLatte then
oldAmount = self.fillLevel - self.maxLatte;
self.fillLevel = self.fillLevel - oldAmount;
end;
if oldAmount <= 1 then
oldAmount = 0;
end;
g_currentMission:setSiloAmount(Fillable.FILLTYPE_MILK, oldAmount);
end;
else
self.oldLatteCheck = self.oldLatteCheck - 1;
end;
end;
if self.fillLevel >= self.maxLatte then
self.state = 1;
else
if self.state > 0 then
self.state = 0;
end;
end;
if self.showOnMap then
if latteFillLevel > 0 and self.mapHotspot == nil then
self.mapHotspot = g_currentMission.missionPDA:createMapHotspot("LatteStation", Utils.getFilename("$dataS2/missions/hud_pda_spot_latteStation.png", self.baseDirectory), self.MHSx, self.MHSz, self.MHSiconSize, self.MHSiconSize * (4 / 3), false, false, false, 0, true);
elseif latteFillLevel <= 0 and self.mapHotspot ~= nil then
g_currentMission.missionPDA:deleteMapHotspot(self.mapHotspot);
self.mapHotspot = nil;
end;
end;

if g_currentMission.latteDeliveryTours[self.tourNumber] ~= nil then
if g_currentMission.latteDeliveryTours[self.tourNumber].truck ~= nil or g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck then
g_currentMission.latteDeliveryTours[self.tourNumber].hasTruck = true;
local truckState = 0;
if self.isServer then
truckState = g_currentMission.latteDeliveryTours[self.tourNumber].truck.latteTruckState;
if self.oldTruckState ~= truckState then
self.oldTruckState = truckState;
g_currentMission.latteDeliveryTours[self.tourNumber].truckState = truckState;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
end;
else
truckState = g_currentMission.latteDeliveryTours[self.tourNumber].truckState;
end;
local deliveryPrice = LatteStationExtended.deliveryBasePrice;
local lattePrice = Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * LatteStationExtended.baseLatteFactor;
if self.playerDeliveryTrigger ~= nil and self.playerDeliveryTrigger ~= 0 and self.playerInTrigger then
g_currentMission:addExtraPrintText(" ");
if truckState == 0 then
local leftSpace = self.maxLatte - self.fillLevel;
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryA"));
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryB"));
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDeliveryC"),tostring(math.floor(lattePrice * 1000)/1000)));
g_currentMission:addExtraPrintText(" ");
if leftSpace >= 25000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_7"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_7), tostring(math.ceil(deliveryPrice + (lattePrice * 25000)))));
end;
if leftSpace >= 20000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_6"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_6), tostring(math.ceil(deliveryPrice + (lattePrice * 20000)))));
end;
if leftSpace >= 15000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_5"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_5), tostring(math.ceil(deliveryPrice + (lattePrice * 15000)))));
end;
if leftSpace >= 10000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_4"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_4), tostring(math.ceil(deliveryPrice + (lattePrice * 10000)))));
end;
if leftSpace >= 5000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_3"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_3), tostring(math.ceil(deliveryPrice + (lattePrice * 5000)))));
end;
if leftSpace >= 2500 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_2"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_2), tostring(math.ceil(deliveryPrice + (lattePrice * 2500)))));
end;
if leftSpace >= 1000 then
g_currentMission:addExtraPrintText(string.format(g_i18n:getText("latteDelivery_1"), InputBinding.getKeyNamesOfDigitalAction(InputBinding.latteDelivery_1), tostring(math.ceil(deliveryPrice + (lattePrice * 1000)))));
end;

if InputBinding.hasEvent(InputBinding.latteDelivery_7) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 7;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 25000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_6) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 6;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 20000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_5) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 5;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 15000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_4) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 4;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 10000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_3) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 3;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 5000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_2) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 2;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 2500);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
elseif InputBinding.hasEvent(InputBinding.latteDelivery_1) then
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 1;
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = deliveryPrice + (lattePrice * 1000);
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
end;
elseif truckState > 0 then
g_currentMission:addExtraPrintText(g_i18n:getText("latteDeliveryOnTheWay"));
end;
end;
if truckState > 2 then
if g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady then
g_currentMission.latteDeliveryTours[self.tourNumber].unloadReady = false;
if self.isServer then
local type = g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType
if type == 7 then
self.fillLevel = math.min(self.fillLevel + 25000,self.maxLatte);
elseif type == 6 then
self.fillLevel = math.min(self.fillLevel + 20000,self.maxLatte);
elseif type == 5 then
self.fillLevel = math.min(self.fillLevel + 15000,self.maxLatte);
elseif type == 4 then
self.fillLevel = math.min(self.fillLevel + 10000,self.maxLatte);
elseif type == 3 then
self.fillLevel = math.min(self.fillLevel + 5000,self.maxLatte);
elseif type == 2 then
self.fillLevel = math.min(self.fillLevel + 2500,self.maxLatte);
elseif type == 1 then
self.fillLevel = math.min(self.fillLevel + 1000,self.maxLatte);
end;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
g_currentMission:addSharedMoney(-g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum, "other");
end;
self:setDisplay(true, false, true);
g_currentMission.latteDeliveryTours[self.tourNumber].deliverySum = 0;
g_currentMission.latteDeliveryTours[self.tourNumber].deliveryType = 0;
end;
end;
end;
end;
else
self.fillLevel = 9999999;
end;
if self.displayRefresher <= 0 then
self:setDisplay(true, false, true);
for a,b in pairs(self.vehiclesTriggerCount) do
if b ~= nil and b == 1 and a ~= nil then
self:manageMotorized(a,false);
end;
end;
else
self.displayRefresher = self.displayRefresher - 1;
end;
end;
function LatteStationExtended:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if self.isEnabled then
local vehicle = g_currentMission.nodeToVehicle[otherId];
if vehicle ~= nil and vehicle.addLatteFillTrigger ~= nil and vehicle.removeLatteFillTrigger ~= nil and vehicle ~= self then
local count = Utils.getNoNil(self.vehiclesTriggerCount[vehicle], 0);
if onEnter then
if (self.fillLevel > 0 and self.maxLatte > -1) or self.maxLatte == -1 then
local allowed = false;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = true;
if self.trailerCan or self.trailerOnly then
allowed = true;
end;
else
if not self.trailerOnly then
allowed = true;
end;
end;

if allowed then
self.vehiclesTriggerCount[vehicle] = 1;
if count == 0 then
vehicle:addLatteFillTrigger(self);
if self.maxLatte > -1 then
self:setDisplay(true, false, true);
else
self:setDisplay(true, true, true);
end;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = true;
end;
end;
end;
end;
elseif onLeave then
self.vehiclesTriggerCount[vehicle] = 0;
if count == 1 then
self.vehiclesTriggerCount[vehicle] = nil;
vehicle:removeLatteFillTrigger(self);
if table.getn(self.vehiclesTriggerCount) < 1 then
self.showDelta = 0;
self.showDeltaPrice = 0;
end;
if self.maxLatte > -1 then
self:setDisplay(true, false, true);
else
self:setDisplay(true, true, true);
end;
if vehicle.milkTrailerFillActivatable ~= nil then
self.isTrailer = false;
end;
end;
end;
end;
end;
end;
function LatteStationExtended:onVehicleDeleted(vehicle)
self.vehiclesTriggerCount[vehicle] = nil;
end;
function LatteStationExtended:setDisplay(latte, price, leftLatte)
self.displayRefresher = math.random(10,20);
if self.isServer then
if self.lastDelta ~= self.showDelta then
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
g_server:broadcastEvent(LatteStationDisplayEvent:new(self.valuePos, self.showDelta, self.showDeltaPrice, latte, price, leftLatte));
self.lastDelta = self.showDelta;
end;
end;
if leftLatte and self.showLevel then
if self.maxLatte > -1 then
local fL = math.floor(self.fillLevel * 100);
local fLU = string.format("%d", fL);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fL >= 10000000 then
digit1 = string.sub(fLU, 1, 1);
digit2 = string.sub(fLU, 2, 2);
digit3 = string.sub(fLU, 3, 3);
digit4 = string.sub(fLU, 4, 4);
digit5 = string.sub(fLU, 5, 5);
digit6 = string.sub(fLU, 6, 6);
digit7 = string.sub(fLU, 7, 7);
digit8 = string.sub(fLU, 8, 8);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],true);
elseif fL >= 1000000 then
digit2 = string.sub(fLU, 1, 1);
digit3 = string.sub(fLU, 2, 2);
digit4 = string.sub(fLU, 3, 3);
digit5 = string.sub(fLU, 4, 4);
digit6 = string.sub(fLU, 5, 5);
digit7 = string.sub(fLU, 6, 6);
digit8 = string.sub(fLU, 7, 7);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100000 then
digit3 = string.sub(fLU, 1, 1);
digit4 = string.sub(fLU, 2, 2);
digit5 = string.sub(fLU, 3, 3);
digit6 = string.sub(fLU, 4, 4);
digit7 = string.sub(fLU, 5, 5);
digit8 = string.sub(fLU, 6, 6);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10000 then
digit4 = string.sub(fLU, 1, 1);
digit5 = string.sub(fLU, 2, 2);
digit6 = string.sub(fLU, 3, 3);
digit7 = string.sub(fLU, 4, 4);
digit8 = string.sub(fLU, 5, 5);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 1000 then
digit5 = string.sub(fLU, 1, 1);
digit6 = string.sub(fLU, 2, 2);
digit7 = string.sub(fLU, 3, 3);
digit8 = string.sub(fLU, 4, 4);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100 then
digit6 = string.sub(fLU, 1, 1);
digit7 = string.sub(fLU, 2, 2);
digit8 = string.sub(fLU, 3, 3);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10 then
digit7 = string.sub(fLU, 1, 1);
digit8 = string.sub(fLU, 2, 2);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 0 then
digit8 = string.sub(fLU, 1, 1);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
else
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
end;
setShaderParameter(self.digitLevel[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitLevel[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitLevel[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitLevel[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitLevel[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitLevel[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitLevel[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitLevel[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
else
local fL = math.floor(Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * self.priceMultiplier * 1000);
local fLU = string.format("%d", fL);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fL >= 10000000 then
digit1 = string.sub(fLU, 1, 1);
digit2 = string.sub(fLU, 2, 2);
digit3 = string.sub(fLU, 3, 3);
digit4 = string.sub(fLU, 4, 4);
digit5 = string.sub(fLU, 5, 5);
digit6 = string.sub(fLU, 6, 6);
digit7 = string.sub(fLU, 7, 7);
digit8 = string.sub(fLU, 8, 8);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],true);
elseif fL >= 1000000 then
digit2 = string.sub(fLU, 1, 1);
digit3 = string.sub(fLU, 2, 2);
digit4 = string.sub(fLU, 3, 3);
digit5 = string.sub(fLU, 4, 4);
digit6 = string.sub(fLU, 5, 5);
digit7 = string.sub(fLU, 6, 6);
digit8 = string.sub(fLU, 7, 7);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],true);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100000 then
digit3 = string.sub(fLU, 1, 1);
digit4 = string.sub(fLU, 2, 2);
digit5 = string.sub(fLU, 3, 3);
digit6 = string.sub(fLU, 4, 4);
digit7 = string.sub(fLU, 5, 5);
digit8 = string.sub(fLU, 6, 6);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],true);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10000 then
digit4 = string.sub(fLU, 1, 1);
digit5 = string.sub(fLU, 2, 2);
digit6 = string.sub(fLU, 3, 3);
digit7 = string.sub(fLU, 4, 4);
digit8 = string.sub(fLU, 5, 5);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],true);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 1000 then
digit5 = string.sub(fLU, 1, 1);
digit6 = string.sub(fLU, 2, 2);
digit7 = string.sub(fLU, 3, 3);
digit8 = string.sub(fLU, 4, 4);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],true);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 100 then
digit6 = string.sub(fLU, 1, 1);
digit7 = string.sub(fLU, 2, 2);
digit8 = string.sub(fLU, 3, 3);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],true);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 10 then
digit7 = string.sub(fLU, 1, 1);
digit8 = string.sub(fLU, 2, 2);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],true);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
elseif fL >= 0 then
digit8 = string.sub(fLU, 1, 1);
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
else
setVisibility(self.digitLevel[8],true);
setVisibility(self.digitLevel[7],false);
setVisibility(self.digitLevel[6],false);
setVisibility(self.digitLevel[5],false);
setVisibility(self.digitLevel[4],false);
setVisibility(self.digitLevel[3],false);
setVisibility(self.digitLevel[2],false);
setVisibility(self.digitLevel[1],false);
end;
setShaderParameter(self.digitLevel[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitLevel[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitLevel[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitLevel[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitLevel[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitLevel[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitLevel[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitLevel[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
end;
if latte and self.showFill then
local fD = math.floor(self.showDelta * 100);
local fDU = string.format("%d", fD);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if fD >= 10000000 then
digit1 = string.sub(fDU, 1, 1);
digit2 = string.sub(fDU, 2, 2);
digit3 = string.sub(fDU, 3, 3);
digit4 = string.sub(fDU, 4, 4);
digit5 = string.sub(fDU, 5, 5);
digit6 = string.sub(fDU, 6, 6);
digit7 = string.sub(fDU, 7, 7);
digit8 = string.sub(fDU, 8, 8);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],true);
setVisibility(self.digitFill[1],true);
elseif fD >= 1000000 then
digit2 = string.sub(fDU, 1, 1);
digit3 = string.sub(fDU, 2, 2);
digit4 = string.sub(fDU, 3, 3);
digit5 = string.sub(fDU, 4, 4);
digit6 = string.sub(fDU, 5, 5);
digit7 = string.sub(fDU, 6, 6);
digit8 = string.sub(fDU, 7, 7);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],true);
setVisibility(self.digitFill[1],false);
elseif fD >= 100000 then
digit3 = string.sub(fDU, 1, 1);
digit4 = string.sub(fDU, 2, 2);
digit5 = string.sub(fDU, 3, 3);
digit6 = string.sub(fDU, 4, 4);
digit7 = string.sub(fDU, 5, 5);
digit8 = string.sub(fDU, 6, 6);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],true);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 10000 then
digit4 = string.sub(fDU, 1, 1);
digit5 = string.sub(fDU, 2, 2);
digit6 = string.sub(fDU, 3, 3);
digit7 = string.sub(fDU, 4, 4);
digit8 = string.sub(fDU, 5, 5);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],true);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 1000 then
digit5 = string.sub(fDU, 1, 1);
digit6 = string.sub(fDU, 2, 2);
digit7 = string.sub(fDU, 3, 3);
digit8 = string.sub(fDU, 4, 4);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],true);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 100 then
digit6 = string.sub(fDU, 1, 1);
digit7 = string.sub(fDU, 2, 2);
digit8 = string.sub(fDU, 3, 3);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],true);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 10 then
digit7 = string.sub(fDU, 1, 1);
digit8 = string.sub(fDU, 2, 2);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],true);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
elseif fD >= 0 then
digit8 = string.sub(fDU, 1, 1);
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],false);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
else
setVisibility(self.digitFill[8],true);
setVisibility(self.digitFill[7],false);
setVisibility(self.digitFill[6],false);
setVisibility(self.digitFill[5],false);
setVisibility(self.digitFill[4],false);
setVisibility(self.digitFill[3],false);
setVisibility(self.digitFill[2],false);
setVisibility(self.digitFill[1],false);
end;
setShaderParameter(self.digitFill[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitFill[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitFill[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitFill[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitFill[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitFill[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitFill[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitFill[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
if price and self.showPrice then
local pD = math.floor(self.showDeltaPrice * 100);
local pDU = string.format("%d", pD);
local digit1 = "0";
local digit2 = "0";
local digit3 = "0";
local digit4 = "0";
local digit5 = "0";
local digit6 = "0";
local digit7 = "0";
local digit8 = "0";
if pD >= 10000000 then
digit1 = string.sub(pDU, 1, 1);
digit2 = string.sub(pDU, 2, 2);
digit3 = string.sub(pDU, 3, 3);
digit4 = string.sub(pDU, 4, 4);
digit5 = string.sub(pDU, 5, 5);
digit6 = string.sub(pDU, 6, 6);
digit7 = string.sub(pDU, 7, 7);
digit8 = string.sub(pDU, 8, 8);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],true);
setVisibility(self.digitPrice[1],true);
elseif pD >= 1000000 then
digit2 = string.sub(pDU, 1, 1);
digit3 = string.sub(pDU, 2, 2);
digit4 = string.sub(pDU, 3, 3);
digit5 = string.sub(pDU, 4, 4);
digit6 = string.sub(pDU, 5, 5);
digit7 = string.sub(pDU, 6, 6);
digit8 = string.sub(pDU, 7, 7);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],true);
setVisibility(self.digitPrice[1],false);
elseif pD >= 100000 then
digit3 = string.sub(pDU, 1, 1);
digit4 = string.sub(pDU, 2, 2);
digit5 = string.sub(pDU, 3, 3);
digit6 = string.sub(pDU, 4, 4);
digit7 = string.sub(pDU, 5, 5);
digit8 = string.sub(pDU, 6, 6);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],true);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 10000 then
digit4 = string.sub(pDU, 1, 1);
digit5 = string.sub(pDU, 2, 2);
digit6 = string.sub(pDU, 3, 3);
digit7 = string.sub(pDU, 4, 4);
digit8 = string.sub(pDU, 5, 5);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],true);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 1000 then
digit5 = string.sub(pDU, 1, 1);
digit6 = string.sub(pDU, 2, 2);
digit7 = string.sub(pDU, 3, 3);
digit8 = string.sub(pDU, 4, 4);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],true);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 100 then
digit6 = string.sub(pDU, 1, 1);
digit7 = string.sub(pDU, 2, 2);
digit8 = string.sub(pDU, 3, 3);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],true);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 10 then
digit7 = string.sub(pDU, 1, 1);
digit8 = string.sub(pDU, 2, 2);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],true);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
elseif pD >= 0 then
digit8 = string.sub(pDU, 1, 1);
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],false);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
else
setVisibility(self.digitPrice[8],true);
setVisibility(self.digitPrice[7],false);
setVisibility(self.digitPrice[6],false);
setVisibility(self.digitPrice[5],false);
setVisibility(self.digitPrice[4],false);
setVisibility(self.digitPrice[3],false);
setVisibility(self.digitPrice[2],false);
setVisibility(self.digitPrice[1],false);
end;
setShaderParameter(self.digitPrice[8], "Position", self.digitPosition[digit8], 0, 0, 0, false);
setShaderParameter(self.digitPrice[7], "Position", self.digitPosition[digit7], 0, 0, 0, false);
setShaderParameter(self.digitPrice[6], "Position", self.digitPosition[digit6], 0, 0, 0, false);
setShaderParameter(self.digitPrice[5], "Position", self.digitPosition[digit5], 0, 0, 0, false);
setShaderParameter(self.digitPrice[4], "Position", self.digitPosition[digit4], 0, 0, 0, false);
setShaderParameter(self.digitPrice[3], "Position", self.digitPosition[digit3], 0, 0, 0, false);
setShaderParameter(self.digitPrice[2], "Position", self.digitPosition[digit2], 0, 0, 0, false);
setShaderParameter(self.digitPrice[1], "Position", self.digitPosition[digit1], 0, 0, 0, false);
end;
end;
function LatteStationExtended:manageMotorized(vehicle, motorOff)
if motorOff == nil then
motorOff = false;
end;
local shutUp = false;
local suObject = nil;
if SpecializationUtil.hasSpecialization(Motorized, vehicle.specializations) then
suObject = vehicle;
if vehicle.isMotorStarted then
shutUp = true;
end;
else
if vehicle.attacherVehicle ~= nil then
if SpecializationUtil.hasSpecialization(Motorized, vehicle.attacherVehicle.specializations) then
suObject = vehicle.attacherVehicle;
if vehicle.attacherVehicle.isMotorStarted then
shutUp = true;
end;
else
if vehicle.attacherVehicle.attacherVehicle ~= nil then
if SpecializationUtil.hasSpecialization(Motorized, vehicle.attacherVehicle.attacherVehicle.specializations) then
suObject = vehicle.attacherVehicle.attacherVehicle;
if vehicle.attacherVehicle.attacherVehicle.isMotorStarted then
shutUp = true;
end;
end;
end;
end;
end;
end;
if suObject ~= nil then
if motorOff and shutUp then
if suObject.setManualIgnitionMode ~= nil then
if suObject.ignitionMode == 1 or suObject.ignitionMode == 2 then
suObject:setManualIgnitionMode(3);
end;
else
if suObject.stopMotor ~= nil then
suObject:stopMotor();
end;
end;
if suObject.setHandBrakeState ~= nil and not suObject.handbrake then
suObject:setHandBrakeState(true);
end;
if suObject.setparkingBrakeState ~= nil and not suObject.parkingBrake then
suObject:setparkingBrakeState(true);
end;
if suObject.setHMparkingBrakeState ~= nil and not suObject.HMparkingBrake then
suObject:setHMparkingBrakeState(true);
end;
elseif motorOff == false and shutUp == false then
if suObject.setManualIgnitionMode ~= nil then
if suObject.drive == true or suObject.steeringEnabled == false then
suObject:setManualIgnitionMode(2);
end;
else
if suObject.startMotor ~= nil then
suObject:startMotor();
end;
end;
if suObject.setHandBrakeState ~= nil and not suObject.handbrake then
suObject:setHandBrakeState(false);
end;
if suObject.setparkingBrakeState ~= nil and not suObject.parkingBrake then
suObject:setparkingBrakeState(false);
end;
if suObject.setHMparkingBrakeState ~= nil and not suObject.HMparkingBrake then
suObject:setHMparkingBrakeState(false);
end;
end;
end;
end;
function LatteStationExtended:fillLatte(vehicle, delta)
local latteFillLevel = self.fillLevel;
if (not self.isTrailer) and delta > self.fillSpeed then
delta = self.fillSpeed;
end;
if self.maxLatte > -1 and latteFillLevel > 0 then
delta = math.min(delta, latteFillLevel);
if delta <= 0 then
delta = 0;
end;
elseif self.maxLatte > -1 and latteFillLevel <= 0 then
self.fillLevel = 0;
self:setDisplay(true, false, true);
delta = 0;
end;
if vehicle.setLatteFillLevel ~= nil then
local oldFillLevel = vehicle.latteFillLevel
vehicle:setLatteFillLevel(vehicle.latteFillLevel + delta);
delta = vehicle.latteFillLevel - oldFillLevel;
else
if not vehicle:allowFillType(Fillable.FILLTYPE_MILK, false) then
delta = 0;
else
local oldFillLevel = vehicle:getFillLevel(Fillable.FILLTYPE_MILK);
vehicle:setFillLevel(oldFillLevel + delta, Fillable.FILLTYPE_MILK);
delta = vehicle:getFillLevel(Fillable.FILLTYPE_MILK) - oldFillLevel;
end;
end;
if delta > 0 then
self.showDelta = self.showDelta + delta;
self:manageMotorized(vehicle,true);
if self.maxLatte > -1 then
self.fillLevel = math.max(self.fillLevel - delta,0);
self:setDisplay(true, false, true);
else
local price = delta * Fillable.fillTypeIndexToDesc[Fillable.FILLTYPE_MILK2].pricePerLiter * self.priceMultiplier;
self.showDeltaPrice = self.showDeltaPrice + price;
self:setDisplay(true, true, true);
g_currentMission.missionStats.expensesTotal = g_currentMission.missionStats.expensesTotal + price;
g_currentMission.missionStats.expensesSession = g_currentMission.missionStats.expensesSession + price;
if self.isServer then
g_currentMission:addSharedMoney(-price, "vehicleRunningCost");
end;
end;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
else
self:setDisplay(true, true, true);
self:manageMotorized(vehicle,false);
end;
return delta;
end;
function LatteStationExtended:getIsActivatable(vehicle)
if self.trailer ~= nil then
if self.trailer:getFillLevel(Fillable.FILLTYPE_MILK) <= 0 then
return false;
end;
end;
if vehicle.setLatteFillLevel == nil and not vehicle:allowFillType(Fillable.FILLTYPE_MILK, false) then
return false;
end;
if self.maxLatte > -1 and self.fillLevel <= 0 then
return false;
end;
return true;
end;

function LatteStationExtended:setTrailerFillDelta(trailer, fillDelta, fillType)
local fillDeltaOld = fillDelta;
if trailer.capacity ~= nil and trailer.capacity > 0 then
local tmp = 0 - (trailer.capacity / 100);
if fillDelta < tmp then
fillDelta = tmp;
end;
end;
if trailer.fillLitersPerSecond ~= nil and trailer.fillLitersPerSecond > 0 then
if fillDelta < (0 - trailer.fillLitersPerSecond) then
fillDelta = 0 - trailer.fillLitersPerSecond;
end;
end;
if trailer.latteFillLitersPerSecond ~= nil and trailer.latteFillLitersPerSecond > 0 then
if fillDelta < (0 - trailer.latteFillLitersPerSecond) then
fillDelta = 0 - trailer.latteFillLitersPerSecond;
end;
end;
if fillDelta < - 120 then
fillDelta = -120;
end;
if self.maxLatte > -1 and (self.fillLevel - fillDelta) > self.maxLatte then
fillDelta = self.maxLatte - self.fillLevel;
end;
if fillDeltaOld < fillDelta then
local tAdd = 0 - (fillDeltaOld - fillDelta);
trailer:setFillLevel(trailer:getFillLevel(fillType) + tAdd,fillType,true);
end;
if fillDelta < 0 then
self.fillLevel = self.fillLevel - fillDelta;
self:raiseDirtyFlags(self.latteTriggerDirtyFlag);
self:setDisplay(true, true, true);
self:manageMotorized(trailer,true);
else
trailer:onEndTip();
self:manageMotorized(trailer,false);
end;
end;

----------------------------------------------------------------------------------------------------------------

LatteStationDisplayEvent = {};
LatteStationDisplayEvent_mt = Class(LatteStationDisplayEvent, Event);
InitEventClass(LatteStationDisplayEvent, "LatteStationDisplayEvent");

function LatteStationDisplayEvent:emptyNew()
local self = Event:new(LatteStationDisplayEvent_mt);
return self;
end;
function LatteStationDisplayEvent:new(gsPos, value1, value2, bool1, bool2, bool3)
local self = LatteStationDisplayEvent:emptyNew()
self.gsPos = gsPos;
self.value1 = value1;
self.value2 = value2;
self.bool1 = bool1;
self.bool2 = bool2;
self.bool3 = bool3;
return self;
end;
function LatteStationDisplayEvent:readStream(streamId, connection)
self.gsPos = streamReadInt32(streamId);
self.value1 = streamReadFloat32(streamId);
self.value2 = streamReadFloat32(streamId);
self.bool1 = streamReadBool(streamId);
self.bool2 = streamReadBool(streamId);
self.bool3 = streamReadBool(streamId);
self:run(connection);
end;
function LatteStationDisplayEvent:writeStream(streamId, connection)
streamWriteInt32(streamId,self.gsPos);
streamWriteFloat32(streamId,self.value1);
streamWriteFloat32(streamId,self.value2);
streamWriteBool(streamId,self.bool1);
streamWriteBool(streamId,self.bool2);
streamWriteBool(streamId,self.bool3);
end;
function LatteStationDisplayEvent:run(connection)
if connection:getIsServer() then
local gS = g_currentMission.latteStationDisplays;
if gS ~= nil and type(gS) == "table" and table.getn(gS) > 0 and gS[self.gsPos] ~= nil then
g_currentMission.latteStationDisplays[self.gsPos].showDelta = self.value1;
g_currentMission.latteStationDisplays[self.gsPos].showDeltaPrice = self.value2;
g_currentMission.latteStationDisplays[self.gsPos]:setDisplay(self.bool1, self.bool2, self.bool3)
end;
end;
end;

g_onCreateUtil.addOnCreateFunction("LatteStationExtended", LatteStationExtended.onCreate);


LatteolineTipTrigger = {};
local LatteolineTipTrigger_mt = Class(LatteolineTipTrigger, TipTrigger);
InitObjectClass(LatteolineTipTrigger, "LatteolineTipTrigger");
function LatteolineTipTrigger:new(isServer, isClient, customMt)
local mt = customMt;
if mt == nil then
mt = LatteolineTipTrigger_mt;
end;
local self = TipTrigger:new(isServer, isClient, mt);
return self;
end;
function LatteolineTipTrigger:load(id, tippingSilo)
self.defaultPriceMultiplier = 0;
LatteolineTipTrigger:superClass().load(self, id);
self.appearsOnPDA = false;
self.isFarmTrigger = false;
self.stationName = "LatteolineSilo"
self.tippingSilo = tippingSilo;
return true;
end;
function LatteolineTipTrigger:updateTrailerTipping(trailer, fillDelta, fillType)
if fillDelta < 0 then
self.tippingSilo:setTrailerFillDelta(trailer, fillDelta, fillType);
end;
end;
function LatteolineTipTrigger:getTipDistanceFromTrailer(trailer, tipReferencePointIndex)
if self.tippingSilo.fillLevel >= self.tippingSilo.capacity then
return math.huge;
end;
return LatteolineTipTrigger:superClass().getTipDistanceFromTrailer(self, trailer, tipReferencePointIndex);
end;


-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------


local oldMLoad = Mission00.load
Mission00.load = function(self)
oldMLoad(self);
if self:getIsServer() then
if LatteStationExtended.numLatteTrucks > 0 then
for i=1, LatteStationExtended.numLatteTrucks do
self:loadLattetruck(i);
end;
end;
end;
end;
Mission00.loadLattetruck = function(self,tour)
if self:getIsServer() then
local latteTruckFilename = LatteStationExtended.modDir.."latteTruck/latteTruck.xml";
local xmlFile = loadXMLFile("TempConfig", latteTruckFilename);
local spawnTestInterval = 1000;
local sequence, loopIndex = RoadUtil.getRandomRoadSequence(nil, "latteTruck"..tostring(tour).."Indices", "latteTruck"..tostring(tour).."Directions");
if sequence ~= nil then
table.insert(self.trafficVehiclesToSpawn, {filename = latteTruckFilename, spawnTestNextTime = 0, spawnTestRadius = 2, spawnTestInterval = spawnTestInterval, sequence = sequence, loopIndex = loopIndex});
end;
delete(xmlFile);
end;
end;

-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------

--
-- Latte truck triggers
-- Script by Blacky_BPG
--
-- Last Change: 11.05.2014 by Blacky_BPG
--
-- Version 1.0.0 initial Version
--


latteTruckDeliveryTrigger = {}

local latteTruckDeliveryTrigger_mt = Class(latteTruckDeliveryTrigger)

function latteTruckDeliveryTrigger.onCreate(id)
g_currentMission:addNonUpdateable(latteTruckDeliveryTrigger:new(id))
end
function latteTruckDeliveryTrigger:new(id)
local self = {}
setmetatable(self, latteTruckDeliveryTrigger_mt)
self.triggerId = id
self.triggerTourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"), 0)
addTrigger(id, "triggerCallback", self)
return self
end
function latteTruckDeliveryTrigger:delete()
removeTrigger(self.triggerId)
end
function latteTruckDeliveryTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
local object = g_currentMission.nodeToVehicle[otherActorId]
if object ~= nil then
if object.latteTruckRefNode ~= nil and object.tourNumber == self.triggerTourNumber then
if object.latteTruckRefNode == otherShapeId or object.latteTruckRefNode == otherActorId then
if onEnter then
object:onEnteredlatteTruckDeliveryTrigger(self, self.triggerTourNumber)
elseif onLeave then
object:onLeavedlatteTruckDeliveryTrigger(self, self.triggerTourNumber)
g_currentMission.latteDeliveryTours[self.triggerTourNumber].unloadReady = true
end
end
end
end
end
g_onCreateUtil.addOnCreateFunction("latteTruckDeliveryTrigger", latteTruckDeliveryTrigger.onCreate);


latteTruckStartTrigger = {}
local latteTruckStartTrigger_mt = Class(latteTruckStartTrigger)
function latteTruckStartTrigger.onCreate(id)
g_currentMission:addNonUpdateable(latteTruckStartTrigger:new(id))
end
function latteTruckStartTrigger:new(id)
local self = {}
setmetatable(self, latteTruckStartTrigger_mt)
self.triggerId = id
self.triggerTourNumber = Utils.getNoNil(getUserAttribute(id, "tourNumber"), 0)
addTrigger(id, "triggerCallback", self)
return self
end
function latteTruckStartTrigger:delete()
removeTrigger(self.triggerId)
end
function latteTruckStartTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
local object = g_currentMission.nodeToVehicle[otherActorId]
if onEnter then
if object ~= nil then
if object.latteTruckRefNode ~= nil then
if object.latteTruckRefNode == otherShapeId or object.latteTruckRefNode == otherActorId then
object:onEnteredlatteTruckStartTrigger(self, self.triggerTourNumber)
end
end
end
end
end
g_onCreateUtil.addOnCreateFunction("latteTruckStartTrigger", latteTruckStartTrigger.onCreate);


das war mein versuch, bin aber gescheitert, konnte keine milch rausholen und milch von den Rindern nicht reinmachen. Das mit der Milchanlieferung klappte aber schonmal


warum willst du Milch in die Dieseltanks lagern? Geht doch viel einfacher. :guckstdu: http://marhu.net/ModPage.php?mod=StopMilkSale
0 x
Bild

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen

#31

Beitragvon Erdbeerchenmilk » Di 8. Jul 2014, 15:47

ok, das haben wir ja auch, aber es wäre schön gewesen, wenn man am Anfang noch keine Kühe hat möchte aber vielleicht seine Rinder selber züchten, so müsste man sich Milch Cheaten und kann die Milch nicht bestellen, da man die Milch ja nicht rausholen kann, warum auch immer.
0 x
Bild

Benutzeravatar
carlos
Staff Sergeant 1 Star
Staff Sergeant 1 Star
Germany
Beiträge: 337
Registriert: Mo 26. Aug 2013, 16:57
Wohnort: Sachsenanhalt
x 3

Re: Scriptanfragen

#32

Beitragvon carlos » Di 8. Jul 2014, 18:20

@ Erdbeerchenmilk ,wenn ich mich recht erinnere braucht man Kühe , Stroh und Milch um Kälber zu produzieren .mfg Carlos
0 x

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen

#33

Beitragvon Erdbeerchenmilk » Di 8. Jul 2014, 18:54

carlos hat geschrieben:@ Erdbeerchenmilk ,wenn ich mich recht erinnere braucht man Kühe , Stroh und Milch um Kälber zu produzieren .mfg Carlos


ich meinte eigentlich die Zuchtstationen, da brauche ich nur Kühe um die Milch zu bekommen, wenn ich aber keine Kühe holen möchte muss ich ja die Milch anderweitig bekommen. Es war ja auch nur eine Idee^^

finde halt nur den Fehler nicht im Script warum ich keine Milch rausholen kann das ist eigentlich alles gewesen.
0 x
Bild

Benutzeravatar
carlos
Staff Sergeant 1 Star
Staff Sergeant 1 Star
Germany
Beiträge: 337
Registriert: Mo 26. Aug 2013, 16:57
Wohnort: Sachsenanhalt
x 3

Re: Scriptanfragen

#34

Beitragvon carlos » Di 8. Jul 2014, 19:28

@Erdbeerchenmilk wenn du keine Kühe willst ,kauf die Milch an der Molkerei ,dort ist ein Trigger wo man Milch kaufen kann .mfg carlos
0 x

Benutzeravatar
BlackWolve
Staff Sergeant
Staff Sergeant
Germany
Beiträge: 295
Registriert: Mo 16. Dez 2013, 19:22
Wohnort: Ergste
x 1
Alter: 42

Re: Scriptanfragen

#35

Beitragvon BlackWolve » Mi 9. Jul 2014, 06:18

Um die Zuchtstationen für Kuh und Schaf zu betreiben musst du aber Kühe bzw. Schafe haben, und diese müssen gehegt und gepflegt werden. Die Brutschränke kannst du einfach Eier rein werfen, da ist es egal, jedoch ohne Hühner bekanntlich keine Eier. Somit ist im LS die Frage ja geklärt ob das Huhn oder das Ei zuerst da war :rofl: Ich hatte mal eine umgebaute Hagenstedt im Anfang von LS 13, wo man zu Beginn schon einen gewissen Viehbestand hatte, aber da gab es keine Zucht und die Moddingscene war da noch im Babystrampler.
0 x
Bild

Predator88
Moderator
Moderator
Germany
Beiträge: 462
Registriert: So 4. Aug 2013, 00:59
Wohnort: DBR
x 2
x 5
Geschlecht:
Alter: 40

Re: Scriptanfragen

#36

Beitragvon Predator88 » Mi 9. Jul 2014, 12:16

Da hast du dann aber die Zuchtanlagen noch nicht richtig verstanden. Nur mit Milch bekommst du keine Kälber, wer soll die denn zeugen wenn nicht deine Kühe.
Du brauchst also Kühe welche Produktiv sind und dann bekommst du Kälber, dann brauchst du die Milch um die Kälber zu versorgen.
0 x

FL: 3 - 9 Uhr - Klauen Formation auflösen - Bomber Geleitschutz bis Zielstation geben
W3: verstanden - erwarte weiteren Begleitschutz
FL: keiner mehr da, nur wir Beide - Arschbacken zusammen kneifen und durch
W3: ach wer braucht auch Begleitschutz bei den paar 100 Gegnern
FL: Mirko - Schnauze - schieß einfach - irgendwas triffst du schon
W3: wo ist die verdammte Station?
FL: Fuck - falscher Sektor - nix wie raus hier - Nordtor, ne Süd - ach verdammt Sektormitte, Sprungantrieb hochfahren

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen

#37

Beitragvon Erdbeerchenmilk » Mi 9. Jul 2014, 13:24

ok danke für eure Antworten. Dann mache ich das mit dem Stop Milchverkauf. Ich habe halt gedacht, das würde gehen, das Skript so umzuschreiben, dass das auch mit milch geht.
0 x
Bild

Predator88
Moderator
Moderator
Germany
Beiträge: 462
Registriert: So 4. Aug 2013, 00:59
Wohnort: DBR
x 2
x 5
Geschlecht:
Alter: 40

Re: Scriptanfragen

#38

Beitragvon Predator88 » Mi 9. Jul 2014, 14:04

Gehen würde das sicherlich, macht aber keinen Sinn, die entstehen ja nicht einfach so, ist ja bei Schweinen, Rindern und Schaafen auch nicht anders.
0 x

FL: 3 - 9 Uhr - Klauen Formation auflösen - Bomber Geleitschutz bis Zielstation geben
W3: verstanden - erwarte weiteren Begleitschutz
FL: keiner mehr da, nur wir Beide - Arschbacken zusammen kneifen und durch
W3: ach wer braucht auch Begleitschutz bei den paar 100 Gegnern
FL: Mirko - Schnauze - schieß einfach - irgendwas triffst du schon
W3: wo ist die verdammte Station?
FL: Fuck - falscher Sektor - nix wie raus hier - Nordtor, ne Süd - ach verdammt Sektormitte, Sprungantrieb hochfahren

Erdbeerchenmilk
Private First Class
Private First Class
Beiträge: 7
Registriert: Fr 27. Sep 2013, 02:25

Re: Scriptanfragen BioRaffenerie

#39

Beitragvon Erdbeerchenmilk » Mo 14. Jul 2014, 12:48

Hallo!

Wollte mal nachfragen, ob es die Möglichkeit gibt die BioRaffenerie aus der HM für eine andere Map zu bekommen?

Vielen Dank
0 x
Bild

david011185
Rekrut
Rekrut
Germany
Beiträge: 3
Registriert: Mo 14. Jul 2014, 21:00
x 1
Geschlecht:
Alter: 32

Re: Scriptanfragen

#40

Beitragvon david011185 » Mo 14. Jul 2014, 21:20

Hallo und Guten Abend,

Ich wollte mal eine anfrage machen:-) Ich würde gern das Saatgut und Düngerlager sowie den Wassertank wie auf der HM2013 in meine eigene(private)map verbauen, also zu Station xyz fahren dort dünger oder saatgut oder Wasser holen und am hof lagern und so bei bedarf die maschienen und tankwagen befüllen:-)
Das mit den dieseltanks hab ich ja hinbekommen:-)

Könnt ihr mir da vllt helfen? Danke:-)

MFG:David
0 x


Zurück zu „Archiv | Erledigte Themen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast