# Mapfact Oil-Addon

### by Flashpoint_K

### Visit www.mapfact.net

##

Inhalt

###

- Allgemeines
- Features
- Änderungen
- Die Modelle
- Die Scripte
- Animationen
- Danksagung
- Haftungsauschluss

##

Allgemeines

Vor einiger Zeit wurde ich auf ein scheinbar seltsames Programm namens O² aufmerksam, das man wohl dazu benötigte, Modelle für OFP zu erstellen. Tja, nach etlichen, wieder gelöschten Versuchen und einigen gelesenen Tutorials von Brsseb kam mir das neue Wissen gerade recht.
Für meine nächste Mission brauche ich unbedingt solche Objekte wie begehbare Pipelines und für die Atmosphäre ein paar Pumpen, sowie einen Hafen, den ich an meine Vorstellung anpassen konnte und einen Öltanker.
Aus dieser Grundidee entwickelte sich nach und nach dann das Oil-Addon, wie ihr es jetzt vor euch habt.
Auf der Suche nach einer Lösung, die Pipelines dem Terrain anzupassen, ohne eine "keep height"-Variante benutzen zu müssen, entstand die Idee, die Pipes zu animieren. Leider wusste ich da noch nicht über alle Probleme bescheid, die das mit sich bringen würde. Aber im Endeffekt ist es jetzt eine ganz brauchbare Alternative, mit der Möglichkeit auch an steileren Stellen Pipes ohne Verzerrungen am Modell zu bauen.
Für die Inselersteller (und alle Anderen natürlich auch) gibt es zumindest die 20m Pipeline trotzdem als "keep-height"-Variante, es ist aber zu beachten, dass der Untergrund dabei möglichst eben sein sollte. Wie sich die Pipes "per Hand" erstellen lassen, erfahrt ihr im Kapitel Die Scripte.
So, genug gelabert, viel Spass beim Mappen!

##

Features des Oil-Addon

- Voll Multiplayer-fähig
- Zwei verschiedene Arten von Pipelines, beide begehbar
- Schnelles und einfaches Bauen von Pipelines per Script
- Animierte Ölpumpen mit zufällig festgelegten Sounds
- Brennende Ölquelle mit eigenem Sound und Performanceanpassung
- Einfache Verwendung der Effekte und Animationen durch Funktionen und Scripte
- Voll animierter und begehbarer Hafenkran
- Größtmögliche Kompatibilität der Objekte mit WrpTool und dem Editor gleichzeitig
- Fast alle Objekte lassen sich vom Spieler benutzen und beinflussen
- Öltanks und Bohrturm mit zusätzlichen Explosionen
- Begehbare Öltanker, je nach Version mit Beibooten die gewassert werden können und MG. Warnsound bei Beschuss und Schiffshorn.

##

Änderungen

Änderungen am OA1 von v1.00 zu v1.01:

- gefixt: alle vier Schiff Modelle
- gefixt: craneControl.sqs
- gefixt: Icon für statische Schiffe
- gefixt: Sound nach dem Wassern der Beiboote wird nur noch einmal abgespielt
- hinzugefügt: Variable "MAP_OA_noReanimShip"
- verbessert: Texturen des Speedboats

##

Die Modelle

Hier findet ihr eine Liste mit allen enthaltenen Objekten, deren Bezeichnungen und Eigenschaften. Zu finden sind die Objekte im Editor unter "Mapfact OA - Objekte" bzw. "Mapfact OA - Fahrzeuge".

Editorname | Configname | Eigenschaften
Zäune und Zubehör
Bretterzaun 9m | MAP_WoodFence_9m | -
Stacheldrahtzaun 9m | MAP_Fence_9m | -
Stacheldrahtzaun Eckstück | MAP_Fence_9m_Corner | -
Warnschild | MAP_Warnschild | -
Hafenobjekte
Hafenkran | MAP_Crane | Türe, Drehen, Heben/Senken des Magneten
Anlegestelle #1 | MAP_Dock1 | -
Anlegestelle #1 (40m) | MAP_Dock1_40m | -
Anlegestelle #2 | MAP_Dock2 | -
Anlegestelle #2 (40m) | MAP_Dock2_40m | -
Anlegestelle #3 | MAP_Dock3 | -
Dock mit Bahngelände | MAP_Dock4 | -
Dock mit Gleisen #1 | MAP_Dock5 | -
Dock mit Gleisen #2 | MAP_Dock6 | -
Dock mit Gleisen #3 | MAP_Dock7 | -
Container (Grün) | MAP_Container | Erkletterbar
Container (Rot) | MAP_Container2 | Erkletterbar
Container (Gestapelt) | MAP_ContainerS | Erkletterbar
Container (rot, Türen) | MAP_Container3 | Begehbar, Türen
Gelagerte Pipelines | MAP_Pipelines_Stored | Begehbar
Gelagerte 20m Pipelines | MAP_PLine_Big_Stored | -
Kiste #1 | MAP_Kiste1 | -
Kiste #2 | MAP_Kiste2 | -
Kiste #3 | MAP_Kiste3 | -
Kabeltrommel | MAP_Kabeltrommel | -
Rammbock | MAP_Rammbock | -
Gangway | MAP_Gangway | animiert
Ölobjekte
Erdölpumpe #1 | MAP_OilPump1 | Animiert und Sound, Useraction
Erdölpumpe #1 (on) | MAP_OilPump1_on | von Anfang an: Animiert und Sound, Useraction
Erdölpumpe #2 | MAP_OilPump3 | Animiert und Sound, Useraction
Erdölpumpe #2 (on) | MAP_OilPump3_on | von Anfang an: Animiert und Sound, Useraction
Erdölpumpe (kaputt) | MAP_OilPump2 | -
Erdölpumpe (kaputt #2) | MAP_OilPump2v | -
Ölturm | MAP_OilTurret | Erkletterbar
Ölturm (brennend) | MAP_OilTurret_Burning | Erkletterbar, Brennt
Pipeline 16m (begehbar) | MAP_Pipeline_16m | Begehbar, animiert
Pipeline 16m (zerstört #1) | MAP_Pipeline_16m_Broken | Begehbar, als Einstieg nutzbar, animiert
Pipeline 16m (zerstört #2) | MAP_PLine_16m_Broken2 | Begehbar, animiert
Pipeline 16m Endstück | MAP_Pipeline_16m_End | -
Pipeline 16m Einstieg | MAP_Pipeline_Entrance | Erkletterbar, animiert, Useraction
Pipeline 20m /("Keep Height") | MAP_Pipeline_20m /_kh | animiert bzw. "keep-height"
Pipeline 20m (begehbar) /(begehbar, "keep height") | MAP_Pipeline_20m_WK /_kh | begehbar; animiert bzw. "keep-height"
Pipeline 20m (zerstört) /(zerstört, "keep height") | MAP_PLine_Big_Broken /_kh | animiert bzw. "keep-height", raucht
Pipeline 20m (zerstört, begehbar) /(zerstört, begehbar, "k.h.") | MAP_PLine_Big_Broken_WK /_kh | begehbar; animiert bzw. "keep-height", raucht
Pipeline 20m Endstück | MAP_Pipeline_20m_End /_kh | animiert bzw. "keep-height"
Pipeline 20m Endstück ("Für Begehbare") | MAP_Pipeline_20m_End_WK | animiert
Pipeline 20m Endstück ("k.h. , für Begehbare") | MAP_Pipeline_20m_End_WK_kh | "keep-height"
Pipeline 20m (Über Straßen) /(Über Straßen, "keep height") | MAP_Pipeline20mStrCross_kh | animiert bzw. "keep-height"
Pipeline 20m (Über Straßen, begehbar) | MAP_Pipeline20mStrCross_WK | begehbar; animiert
Pipeline 20m (Über Straßen, begehbar, "k.h.") | MAP_Pipeline20mStrCross_WK_kh | begehbar; "keep-height"
Pipeline 20m (45° rechts) | MAP_PLine_Big_curve_r | 45° Kurve nach rechts
Pipeline 20m (45° links) | MAP_PLine_Big_curve_l | 45° Kurve nach links
Pipeline 20m (45° rechts, begehbar) | MAP_PLine_Big_curve_r_WK | Begehbare 45° Kurve nach rechts
Pipeline 20m (45° links, begehbar) | MAP_PLine_Big_curve_l_WK | Begehbare 45° Kurve nach links
Pipeline 20m Einstieg | MAP_Pipeline20m_Entrance | animiert
Öltank klein (orange) | MAP_OilTank_Small | Erkletterbar, kleine Explosion
Öltank klein (blau) | MAP_OilTank_Small2 | Erkletterbar, kleine Explosion
Öltank mittel | MAP_OilTank_Medium | Erkletterbar, Explosionseffekt
Öltank groß | MAP_OilTank_Big | Erkletterbar, Explosionseffekt
Öltank groß (doppelt) | MAP_OilTank_Twin | Erkletterbar, Explosionseffekt
Ölquelle | MAP_OilWell | Brennt und raucht ;-)
Ölquelle (brennend) | MAP_OilWell_Burning | Von Anfang an: Brennt und raucht ;-)
Baustelle | MAP_BuildingSite | Kleine Baustelle an einer Pumpe
Bretter | MAP_ScrapW | Herumliegende Bretter
Schrott (gemischt) | MAP_Scrap | Herumliegender Schrott
Schrott (Metall) | MAP_ScrapM | Herumliegende Stangen
Öllache #1 | MAP_Spill1 | -
Öllache #2 | MAP_Spill2 | -
Öllache #3 | MAP_Spill3 | -
Öllache #4 | MAP_Spill4 | -
Öllache #5 | MAP_Spill5 | -
Wasserfahrzeuge
Tanker | MAP_Tankship | Begehbar, Leitern, Animiert, Horn, Warnsirene
Tanker (Schmugglerversion) | MAP_SmugglerShip | Begehbar, Leitern, Animiert, Mg, Beiboote, Horn, Warnsirene
Schnellboot (Schmugglerversion) | MAP_SmugglerBoat | Mg
Tanker (Schmugglerversion, statisch) | MAP_SmugglerShip_static | Begehbar, Leitern, Animiert, Mg, Beiboote, Performancefreundlicher, Horn, Warnsirene
Tanker (statisch) | MAP_Tankship_static | Begehbar, Leitern, Animiert, Performancefreundlicher, Horn, Warnsirene

Tipp: Es scheint leider so zu sein, dass der Tanker Lags verursacht, sobald er in die Nähe anderer Objekte kommt.
Wenn ihr den Tanker also am Hafen vor Anker liegen habt, benutzt die "Static"-Version, da bei dieser das Problem nicht auftritt. Soll der Spieler auch die Möglichkeit bekommen mit dem Tanker zu fahren, empfiehlt sich ein einfaches Replacescript, mit dem ihr die Tanker gegeneinander austauscht, sobald es nötig ist.

##

Die Scripte

Alle Scripte liegen in der pbo "MAP_OilAddon_script".
Aufgerufen werden sie also mit ... exec "\MAP_OilAddon_script\... .sqs"
Pipebuilder.sqs ---- Beispielmap enthalten
Der Pipebuilder.sqs ist zusammen mit einem weiteren Script für das Bauen der Pipelines zuständig. Um diese dem Terrain anzupassen, werden sie vom Script animiert (standardmäßig stehen die Pipes senkrecht nach oben).
Das zweite Script arbeitet automatisch nachdem eine Pipe gebaut wurde (es sei denn diese besteht nur aus "keep-height"-Stücken) und sorgt dafür, dass auch nach dem Neuladen die einzelnen Segmente wieder in ihre richtige Position gekippt werden. Da beide Scripts geloopt sind, kann es zu entsprechenden Verzögerungen kommen, die sich nach der Länge der Pipe richten. Generell lässt sich noch sagen, dass die meisten Fehler beim Aufrufen des Scripts nicht gleich zu OFP-Fehlermeldungen führen, sondern Hints darauf hinweisen. Erst bei schwereren Fehleingaben gibt es dann klassische OFP-Meldungen.
Hier eine genaue Erklärung, wie der Pipebuilder aufgerufen wird:
Beispiel:
[Name,1500,0,[[Kurve1],[Kurve2],...],[[Objekt1],[Objekt2],...],1,2] exec "\MAP_OilAddon_script\Pipebuilder.sqs"
Erklärung:
Name: Muss ein Pipeline-Objekt sein, nach dieser Vorgabe richtet sich das Script und baut die weiteren Segmente. Gebt dem Objekt einfach einen Namen und benutzt diesen, oder schreibt direkt in die Init [this,.....]
Das kann alles sein außer:
"Pipeline 20m (Über Straßen)"
"Pipeline 20m (Über Straßen, "keep height")"
"Pipeline 20m (Über Straßen, begehbar)"
"Pipeline 20m (Über Straßen, begehbar, "k.h.")"
"Pipeline 16m Einstieg"
Es gibt drei verschiedene Arten von Pipelines die das Script bauen kann.
Wenn euer Startobjekt eines der animierten ist, wird eure gesamte Pipeline aus diesen animierten Stücken bestehen.
Wenn ihr als Startobjekt eines der "keep-height"-Stücke setzt und das Script aufruft gibt es dann zwei weitere Möglichkeiten:
1) Es wird eine Pipeline gebaut die nur aus "keep-height"-Segmenten besteht, allerdings auch an sehr steilen Stellen! Denkt daran dass das Verzerrungen am Modell mit sich bringt!
2) Euer Startobjekt ist auch in diesem Fall eines der "keep-height"-Stücke, aber ihr schreibt an die letzte Stelle in den Array mit dem ihr das Script aufruft noch zusätzlich den Text "mixed".
In dem Beispiel weiter oben würde das dann so aussehen: "[....,1,2,"mixed]" exec.
Das wird das Script dazu bringen die Pipeline aus "keep-height"-Stücken zu bauen, aber nur an Stellen die weniger Steil als 5° auf 20m sind (also ungefähr eine Höhendifferenz von 1.7m). An steileren Stellen werden dann animierte Segmente eingebaut.
Achtung: Die Gesamtlänge der Pipeline wird sich wahrscheinlich leicht verändern wenn ihr zwischen diesen Methoden wechselt.
Die Vor-und Nachteile dieser Methoden:
Nur animierte Stücke:
- Nach dem Zerstören kann es Probleme mit der Animation geben
- Nach dem Neuladen des Spielstands müssen alle Stücke erneut animiert werden, das kann also auffallen.
Nur "keep-height":
- Die Modelle werden an Steigungen verzerrt
- Passgenau aneinandergebaute Segmente
- Durch Neuladen oder Zerstören treten keine Probleme auf
"Mixed"-Methode:
- Jeweils die Vor-und Nachteile der anderen Methoden
- Die Übergänge zwischen den animierten und den "keep-height"-Stücken sind sichtbar
1500: Gibt die Gesamtlänge der Pipe in Metern an.
0: 0° oder 180° vom Startobjekt aus, d.h. es können 2 Scripte vom selben Startobjekt aus aufgerufen werden, die dann in die jeweils andere Richtung bauen. Ist natürlich nur bedingt sinnvoll.
Kurven: Um eine Kurve zu erzeugen, benötigt man folgendes: [wann,Richtung in Grad,"Härte"] also z.B. [200,-50,0.4] ergibt nach 200m eine Kurve um 50° nach links, mit der Härte 0.4, wobei 1 das Maximum wäre. Kurven lassen sich nur bei der 20m-Pipe bauen (s.a. Objekte)
Sollen keine Kurven gebaut werden, bleibt der Array leer.
Objekte: Richten sich nach der gebauten Pipe Art, diese Kombinationen sind möglich:
Pipe 16m, alles außer:
"MAP_Pipeline_16m" , "MAP_Pipeline_16m_End"
Pipe 20m, alles außer:
"MAP_Pipeline_20m" , "MAP_Pipeline_20m_kh" , "MAP_Pipeline_20m_WK" , "MAP_Pipeline_20m_WK_kh" , "MAP_Pipeline_20m_End" , "MAP_Pipeline_20m_End_kh" , "MAP_Pipeline_20m_End_WK" , "MAP_Pipeline_20m_End_WK_kh"
Aufgerufen wird standardmäßig so [400,"Objekt"] => ergibt nach 400m das Objekt. Es gibt beim "MAP_Pipeline_Entrance" noch die Möglichkeit (nur wenn die 16m pipe gebaut wird) die Pipe an dieser Stelle abknicken zu lassen, so dass sich auch bei der 16m Pipe "Kurven" bauen lassen: [500,"MAP_Pipeline_Entrance",16] => ergibt einen Einstieg an dem die Pipe um 16° nach rechts abknickt. Max ist 30°. Sollen keine Objekte gebaut werden, bleibt auch dieser Array leer.
1: Legt fest ob die Pipe mit dem entsprechenden Endstück abgeschlossen werden soll oder nicht. 0 ergibt keins, alles andere lässt eines bauen (also auch jeder andere Mist, nur halt nicht 0 :)
2: Legt eine Verzögerung fest, die von dem Überwachungsscript verwendet wird. Je nach dem, wartet das Script länger, bis es wieder fragt, ob neu geladen wurde (Alle Segmente müssen nach dem Neuladen wieder animiert werden). Minimum ist 0. Zahlen kleiner 0 sind nicht erlaubt. Standardmäßig ist eine Verzögerung von 1s eingestellt, zu dieser wird der eingegebene Wert addiert. Das dient dazu, dem Mapper mehr Einfluss auf die Performance zu geben.

Das Script schreibt beim Durchlaufen alle gebauten Objekte in einen Array, und speichert den unter der Variable MAP_OA_PbObjects ab. Hier habt Ihr also jederzeit die Möglichkeit, aus diesem Array die Objekte auszuwählen, um sie z.B. zu animieren etc.

Überblick über die wichtigsten Funktionen

Aufruf | Funktion
Name call MAP_oa_turretOn Name call MAP_oa_turretOff | Zündet das Feuer auf dem Ölturm an, bzw. löscht es.
Name call MAP_oa_wellOn Name call Map_oa_wellOff | Zündet die Ölquelle an bzw. löscht sie.
Name call MAP_oa_pumpOn Name call MAP_oa_pumpOff | Schaltet die Pumpe an bzw. aus
Für alle Funktionen gilt: Aufruf wenn möglich erst ca. 1s nach Missionsstart. Fehler sind sonst möglich!

Variabeln
Um die Explosions, Rauch- und Soundeffekte auszuschalten,
wird die Variable MAP_OA_FX = false gesetzt.
Die Ölpumpen sind im Multiplayer aus Performancegründen (Desync!) deaktiviert. Um sie dennoch zum Laufen zu bringen muß die Variable MAP_OA_MPPumpAnim = true gesetzt werden.
Wie stark die Ölquelle raucht richtet sich nach der Performance des Rechners. Über die Variable MAP_OA_Smoke kann das aber auch direkt eingestellt werden: Der Wert 0 (MAP_OA_Smoke = 0) schaltet den Rauch komplett ab. Ab einem Wert von 1 raucht eine Ölquelle dann schwach. Bei einem Wert von 4 ist der Rauch am stärksten (nur ganze Zahlen).
MAP_OA_noReanimShip
Setzt diese Variable auf true, wenn ihr wollt, dass die Beiboote nach dem Wassern nicht versteckt bleiben, sondern auch manuell neu an den Tanker gehängt werden können. Benutzt dann die Animation für die Boote und diese Variable.

Wichtige Scripte im Überblick:

Scriptname | Aufgabe und Erklärung
BoatsDown.sqs | Lässt die Beiboote zu Wasser. Kann automatisch über das Actionmenue an der richtigen Stelle auf dem Schiff ausgeführt werden. Ansonsten lautet der Aufruf [name,"Right/Left"] exec
Crane.sqs | Öffnet die Türe des Krans und schließt sie automatisch nach 8 Sekunden wieder. Aufrufbar automatisch über Actionmenue oder über [Name] exec
MAP_OA_20mEntr.sqs | Öffnet/Schließt die Türen. Aufrufbar automatisch über Actionmenue oder über Name exec
ShipHorn.sqs | Löst das Schiffhorn aus. Aufrufbar automatisch über Actionmenue oder über Name exec
CraneContr.sqs | Ist für die restlichen Animationen des Krans zuständig. Aufzurufen über [Name,Richtung in Grad relativ zur Richtung des Krans,heben und senken des Magneten in Meter relativ zur 0-Position] exec (Beispielmap enthalten)
Pipebuilder.sqs | Ist für den Bau der Pipelines zuständig, Erklärung s.o.

Achtung!
Nur mit weiß unterlegte Scripte sind ausdrücklich dazu gedacht, direkt aufgerufen zu werden. Bei den Anderen besteht keine Garantie, dass ein direktes Aufrufen keinen Fehler verursacht!

##

Animationen

Überblick über alle animierten Objekte

OA Hafenkran | a_rotateR => Drehung der Beine des Krans um 360° ani_UpDown => Heben/Senken des Magneten a_door => Öffnen/Schließen der Türe
OA Erdölpumpe | Haupt_Anim => Bewegen des "Kopfes" der Pumpe Antr_Anim => Animiert die Schwungräder Rad1_Anim , Rad2_Anim , Rad3_Anim => Animiert die Antriebsräder
Erdölpumpe #2 | Wie die erste Pumpe, Rad2/3_Anim gibt es hier aber nicht
Alle Pipeline Segmente außer Pipeline 16m/20m Endstück und den "keep-heights" | Ani_Hrz => Dreht die Segmente um 180°
Pipeline Einstieg | ani_Deckel => Öffnen/Schließen der Dachluke
Pipeline 20m Einstieg | ani_O_Door; Öffnen/Schließen der äußeren Türe ani_I_Door; Öffnen/Schließen der inneren Türe ani_Geo_Door; Öffnen/Schließen der Türe im Geo-Lod, wichtig!
Gangway | ani_fitHgt; Heben/Senken der Gangway um ca. 30°
Container (rot, Türen) | ani_DoorR/L; Öffnen/Schließen der rechten/linken Containertüre
Tanker | ani_door01-06 => Öffnen/Schließen der Türen ani_Klappe => Öffnen/Schließen der Dachluke
OA Tanker Schmggl | ani_door01-06 => Öffnen/Schließen der Türen ani_Klappe => Öffnen/Schließen der Dachluke aniHideR/L => Verstecken der Beiboote im Schiffbauch

Achtung: Da einige Objekte über Scripte animiert werden, kann ein direktes Ausführen einer Animation evtl. einen Fehler produzieren.

##

Danksagung

Also, ich danke erst einmal den Leuten, die O²-Tutorials geschrieben haben. ;-)
Dann den Personen, die direkt an der Entwicklung beteiligt waren:
raedor: Config, alle MAP_x Scripte, Überarbeitung und Optimierung aller Scripte hinsichtlich der Performance und der Funktionalität im MP, Funktionen, Betatesting
Sniping-Jack: Sound-und Texturbearbeitung, technische Betreuung und Anregungen, Betatesting
Und den Betatestern:
BadAss
Chneemann
Medicus
Sky
Und zu guter letzt allen, die bei Fragen Antworten hatten oder sonst irgendwie behilflich waren ;-)

DANKE!

##

Haftungsausschluss

Dies ist ein inoffizielles Addon für Operation Flashpoint © Bohemia Interactive Studio.
Für Schäden, die durch dieses Addon entstehen, wird keine Haftung übernommen. Benutzung auf eigene Gefahr.
Mapfact Oil-Addon © Flashpoint_K. Für Fragen jeglicher Art zum Addon schreibt eine Mail an Flashpoint_K@web.de oder postet im Mapfact forum in den entsprechenden Thread.