Server Files: ErklÀrung und Bedeutung

  • Thema:



    cfgundergroundtriggers.json


    Wie immer ein Herzliches Willkommen beim heutigen Thema 😁.


    Hier befassen wir uns, wie das Thema ja schon vermuten lÀsst,

    mit der "cfgundergroundtriggers.json", welche im Grunde dafĂŒr verantwortlich ist,

    uns ein wenig an der Nase herumzufĂŒhren und uns glauben lĂ€sst,

    wir wÀren in einem Keller, Bergwerk oder eben einem Bunker.

    Eben allem, was sich ggf. unter der Erde befindet

    oder eben sonst keinerlei Licht von außen hereinkommt.


    Warum es uns an der Nase herumfĂŒhrt đŸ€”?


    Im Prinzip ist es ganz einfach, da im Spiel selber immer eine gewisse Art

    von Lichtquelle vorhanden ist, insofern z.B. die Sonne scheint oder es eben Tag ist.

    Dadurch ist es leider auch in RĂ€umen, in denen keine Sonne hinkommen wĂŒrde, hell.

    Hiermit lÀsst sich dieses System allerdings ein wenig umgehen.


    Wir können versuchen das ganze mal auf simple Art und Weise zu erklÀren,

    um das Prinzip eines Servers zu verstehen.

    Denn es ist nicht so, dass es irgendwo eine direkte Spielwelt gibt,

    auf der wir uns tatsÀchlich mit unserem Charakter bewegen

    und uns mit unseren Freunden treffen đŸ€Ł.

    TatsĂ€chlich mĂŒssen wir uns damit abfinden, dass wir eigentlich alleine

    in Chernarus unterwegs sind und andere Spieler eigentlich eine Art Illusion darstellen.

    Jeder kann natĂŒrlich seine eigene Meinung haben, und es sich auf seine Art erklĂ€ren,

    aber um meinen Gedanken ein wenig nÀherzubringen, stellen wir uns einfach folgende Situation vor.


    Wir wollen mit ein paar Freunden D&D spielen, welche aber leider nicht gleich um die Ecke wohnen.

    Man könnte auch Monopoly nehmen, falls nicht jeder weiß was D&D ist đŸ€Ł.

    Nun hat in unserer Situation jeder unserer Freunde ein Monopoly zuhause,

    was uns zu der Idee fĂŒhrt, dass wir uns in einem Discord oder Team Speak zusammenfinden.

    Gesagt, getan, baut jeder unserer Freunde sein Monopoly bei sich zuhause im Keller auf.

    Wir stellen allerdings nicht nur eine Figur, sondern auch die Figuren

    all unserer Freunde auf unser Spielbrett, und selbes machen natĂŒrlich unsere Freunde.

    Einen unserer Freunde ernennen wir zum Dungeon Master oder Spielleiter.

    Dieser hat nun leider die Aufgabe, all unsere Bewegungen und Aktionen zu notieren,

    was ihn also leider daran hindert tatsĂ€chlich selber zu Spielen đŸ˜«.

    Er erledigt also Papierkram und schreibt unsere WĂŒrfelzahlen auf,

    wann wir bei wem in welchem Hotel ĂŒbernachtet haben,

    und wann wir ĂŒber los oder ins GefĂ€ngnis mussten 😅.

    Wir spielen also jeder fĂŒr sich auf einem eigenen Brett,

    bei uns zuhause, wÀhrend eben einer unserer Freunde zuhause sitzt, unser Spiel Koordiniert

    und darauf achtet, das wir uns an die Regeln halten.

    Er kann uns mitteilen, welcher Spieler was gewĂŒrfelt hat,

    womit wir die Figuren unserer Freunde auch bei uns zuhause bewegen können,

    falls wir sie mal falsch gesetzt haben und irgendjemanden auffordern,

    und 4,5 Millionen zu zahlen, weil er angeblich auf unserer Schlossallee steht đŸ€Ł.


    Unser Spielleiter ist im Grunde unser Server.

    Er selber Spielt also selber nicht aktiv

    und hat kein direkt eigenes Spielbrett.

    Es ist Vielmehr in seinem Kopf und er tauscht mit uns

    die von ihm notierten Daten aller anderen Spieler aus,

    damit wir eben die Spielfiguren der anderen Spieler

    auf unserem Brett bewegen können.


    Auch wenn es eventuell ein doofer Vergleich ist, hoffe ich mal,

    man kann es ein wenig nachvollziehen und versteht wie ich das ganze meine.

    Denn nun können wir uns mal noch folgendes vorstellen.

    Unser Spielleiter kann wenn er es möchte auch gern mal die Spielregeln Àndern.

    In unserem Fall und um einen Vergleich zur "cfgundergroundtriggers.json" zu ziehen,

    legt er nach jedem ĂŒberqueren, des "LOS" Feldes fest, das der Spieler,

    der es ĂŒberquert fĂŒr 2 ZĂŒge das Licht im Keller ausmacht 😁.

    So ist es nur bei dem Spieler Dunkel, welcher "LOS" ĂŒberquert,

    wÀhrend es bei allen anderen Hell ist.


    SO, viel Text fĂŒr wenig Datei đŸ€ŁđŸ˜….

    Aber wie gesagt, hoffe ich einfach, dass man das Prinzip somit wenigstens ein wenig verstehen kann

    und vor allem, was ich mit der aussage "alleine spielen" meine,

    auch wenn es ein merkwĂŒrdiges Beispiel ist 😅.



    Aber kommen wir nun zum eigentlich wichtigen Teil, nÀmlich unserer "cfgundergroundtriggers.json".

    Hier fangen wir wieder natĂŒrlich auch nochmal mit der Grunddatei an.



    Jetzt mĂŒssen wir uns das Ganze in 3 teilen vorstellen.

    Es gibt Ă€ußere so wie innere "Trigger" und zusĂ€tzliche "Krumen",

    die sich zwischen den Bereichen befinden.

    Man könnte sich die "Krumen" als eine Art Dimmschalter vorstellen,

    den wir nach jedem ĂŒberqueren in der Helligkeit einstellen.



    Fangen wir aber erst mal wieder mit den Einstellungen an.


    "Position": [ 0, 0, 0] = Position des "Trigger" mit Koordinaten


    Hierbei handelt es sich wie bei allen anderen um Koordinaten,

    welche wieder einen Mittelpunkt darstellen.

    Dabei gilt hier wieder die Reihenfolge "[ x, z, y ]".


    "x" = X Achse (Horizontal von links nach rechts)

    "z" = Z Achse (Höhe zum 0. Punkt und der WasseroberflÀche)

    "y" = Y Achse (Vertikal von Unten nach Oben)



    "Orientation": [ 0, 0, 0 ] = Positionsanpassung / Orientierung / Ausrichtung


    Wie bei anderen Objekten wird oder können wir unseren "Trigger" oder "Bereich" anpassen.

    Dazu haben wir wieder die Möglichkeit es zu drehen, zu neigen oder zu kippen,

    was in diesem Fall die Reihenfolge "[ y, p, r ]" festlegt

    und wir ggf. auch noch aus der "cfggameplay.json Extras: objectSpawnersArr" kennen.


    y = Yaw = Drehung um die eigene Achse in °

    p = Pitch = Neigung nach links oder rechts in °

    r = Roll = Kippen nach vorn oder hinten in °



    "Size": [ 0, 0, 0 ] = "Trigger" oder "Bereich" GrĂ¶ĂŸe in Koordinaten


    Hier mĂŒssen wir wissen und beachten, dass es sich bei diesen "Bereichen" um ein Viereck in jeder Form handelt.

    Wir legen hier also eine Art Raum fest, in dem wir uns am Ende als Spieler befinden

    und uns eben die Dunkelheit vortĂ€uscht, als wĂŒrde man eine dicke Decke ĂŒber einen Tisch legen

    unter dem wir uns befinden.

    Wie auch bei der "Position" gilt hier "[ x, z, y ]" als Ausrichtung und als Mittelpunkt.

    Das bedeutet also, dass bei einer GrĂ¶ĂŸe von z.B. 10 m LĂ€nge unser Raum vom Mittelpunkt aus

    5 m in die entsprechende Richtung gerĂŒckt wird.

    Ein wenig weiter unten kommen wir zu einer kleinen visuellen ErklĂ€rung 😁.



    "EyeAccommodation" = Dunkelheit als Wert in "%"


    Hiermit können wir die Dunkelheit bestimmen, bei der in "%" die Helligkeit bestimmt wird.

    Dabei gilt "1" als "100 %", "0" als eben "0 %" und beispielsweise "0.5" wÀren "50 %".



    "Breadcrumbs": [] = Krumen / ÜbergĂ€nge (Checkpoints) fĂŒr Zwischenstufen


    Dabei handelt es sich um eine Art Checkpoints, die wir als Spieler ablaufen

    um am Ende den Tiefsten und dunkelsten Punkt dieses Raumes oder Bereiches zu erreichen.

    Die Krumen oder Checkpoints liegen hier immer in diesem angelegten Raum

    und sind kein eigener Raum. Auch hier kommen wir etwas weiter unten zu einer kurzen ErklĂ€rung 😉.



    "InterpolationSpeed" = Übergangsgeschwindigkeit als Wert in "sec"


    Hier können wir in mit einem Wert in Sekunden bestimmen, wie schnell ein Übergang zwischen "Triggern" vollzogen werden soll.

    Es wird also beispielsweise bei einem Wert von "5" ein Übergang von 5 Sekunden stattfinden,

    Was allerdings meist unnötig ist, da die ÜbergĂ€nge schon mit den "Breadcrumbs" festlegen.

    Ich bin mir zwar unsicher, bin aber der Meinung, dass bei einer Nichtangabe dieses Wertes immer der Wert "1" gilt.



    Nun kommen wir noch zu 2 Werten, welche nur in den "Breadcrumbs" verwendet werden.


    "UseRaycast" = "Raycasting" Verwendung


    Hierbei wird mit "1" / "true" oder mit "0" / "false" die Nutzung von "Raycasting" aktiviert.

    Ich bin leider immer noch kein Programmierer, was es mir also etwas schwerer macht,

    das ganze zu erklĂ€ren đŸ€ŁđŸ˜….

    Daher wĂŒrde ich jetzt mal auf die schnelle auf einen "Wikipedia" Eintrag verweisen,

    damit jeder, der daran Interesse hat, eventuell selber nochmal genauer nachlesen kann.


    Wikipedia: Raycasting



    "Radius" = Entfernung in "m" fĂŒr Anpassung / Beeinflussung durch den Krumen


    Hiermit kann eine Entfernung in Metern angegeben werden, inwieweit der Krumen oder "Checkpoint"

    die angegebene Licht- oder Sichtanpassung beeinflussen kann.

    Dabei gilt der Wert "-1" als eine Einstellung, bei der ein Standardwert genutzt wird.

    Ich hab da leider auch noch keine genaue Erfahrung, was hier wie wo oder wann angepasst wird

    und empfehle daher entweder wie in der Vanilla Einstellung alles auf "-1" zu lassen

    oder ggf. einfach selber ausprobieren.

    Versuch macht eben klug 😉😁.



    Nun aber zum Allgemeinen, denn beim Aufbau eines "Unterirdischen" Bereiches,

    und nein er muss nicht zwingend unter der Erde sein 😅, ist es wichtig eine Art Startpunkt zu haben.

    Dieser sollte in der Regel schon vor dem Eintritt in beispielsweise einen Bunker vorhanden sein.

    In der Vanilla Livonia Variante haben wir dafĂŒr den folgenden ersten Trigger.


    Code
            {     
                "Position": [ 749.738708, 533.460144, 1228.527954],
                "Orientation": [ 0, 0, 0 ],
                "Size": [ 15, 5.6, 10.8 ],
                "EyeAccommodation": 1,
                "Breadcrumbs": [],
                "InterpolationSpeed": 1
            }, 


    Dieser hat die Koordinaten vor der BunkertĂŒr und die entsprechende GrĂ¶ĂŸe,

    um zu verhindern, dass wir als Spieler an diesem Punkt vorbeilaufen können.

    Hier auch gleich ein Bildausschnitt mit der Position des "Triggers".


    7fxx2dK.png


    ZusÀtzlich haben wir die Einstellung "EyeAccommodation" mit dem Wert "1",

    was dafĂŒr sorgt, dass wir keinen Unterschied zur eigentlichen Tageszeit haben,

    da quasi die Einstellung fĂŒr unseren "Lichtschalter" deaktiviert ist.

    Dies ist also unser Startpunkt fĂŒr alle darauffolgenden "Trigger".



    Als NĂ€chstes kommt nun der erste Raum und somit der "eigentlich" erste Bereich, der betreten wird.


    Code
            {     
                "Position": [ 735.0, 533.7, 1229.1 ],
                "Orientation": [ 0, 0, 0 ],
                "Size": [ 15, 5.6, 10.8 ],
                "EyeAccommodation": 0,
                "Breadcrumbs":
                [ 


    Abgesehen von Koordinaten und GrĂ¶ĂŸe, welche nun so angepasst sind, dass beide Bereiche aneinandergrenzen,

    haben wir hier wieder die Einstellung "EyeAccommodation", welche mit dem Wert "0" versehen ist.

    Dadurch ist dieser Bereich eigentlich in vollkommene Dunkelheit gehĂŒllt, was bedeuten wĂŒrde,

    wir wĂŒrden innerhalb einer Sekunde in einem Raum in vollkommener Dunkelheit stehen.

    Hinzu kommt, dass wir ja nun wissen, dass bei uns, auf unserem Bildschirm,

    eigentlich die Sonne verschwindet, was also auch bedeutet,

    dass es auch draußen vollkommen dunkel wĂ€re.


    Nun könnte man ja behaupten:


    "đŸ€” Es gibt doch die Einstellung "InterpolationSpeed" đŸ€“,

    womit ich diesen Übergang verzögern kann."


    So einfach ist das in der Praxis aber leider nicht 😅, denn das einzige was wir damit erreichen,

    wÀre eine Verzögerung aber keine Beseitigung des Problems.

    Man wĂŒrde also einen Raum betreten und wĂ€hrend wir im TĂŒrrahmen stehen bleiben,

    macht einfach jemand langsam das Licht aus und gleichzeitig wĂŒrde jemand die Sonne verschwinden lassen,

    wĂ€hrend es bei unserem Kumpel, der genau hinter uns steht, noch Taghell ist đŸ€Ł.



    Daher kommen wir auch gleich zu den oben erwÀhnten Krumen / Breadcrumbs,

    welcher sich in unserem eigentlichen Bereich befindet.

    DafĂŒr nehmen wir uns einfach auf die schnelle nochmal das komplette Beispiel.



    Auch hierfĂŒr und um den erwĂ€hnten Raum mit den enthaltenen Krumen darzustellen,

    Gibt es mal eine kleine Matheaufgabe. Aber dieses Mal ist sie relativ simpel 😅.

    DafĂŒr nehmen wir als Erstes unsere Koordinate des Raumes "[ 735.0, 533.7, 1229.1 ]".

    Als NĂ€chstes können wir jetzt das Wissen anwenden, welches wir ĂŒber den Mittelpunkt

    und die "Size" haben, um eben die GrĂ¶ĂŸe des Raumes ĂŒber Koordinaten bestimmen zu können.

    DafĂŒr können wir die "Size" Werte "[ 15, 5.6, 10.8 ]" nehmen und diese erst einmal halbieren.

    Somit ergeben sich die Werte 7,5, 2,8 und 5,4. Jeweils vom Mittelpunkt aus in die entsprechende Richtung.


    ziu3bFH.png


    Jetzt können wir unsere Koordinaten des Raumes und seinem Mittelpunkt mit unseren Werten berechnen,

    in dem wir zum jeweiligen Wert + und - unserer halben "Size" Werte rechnen.

    Klingt schlimmer als es sich anhört 😅.

    Aber einfach gesagt rechnet man z.B. 735.0 + 7,5 und einmal 735.0 - 7,5 usw.

    Um das Ganze auch schnell hinter uns zu Bringen, machen wir also folgendes.


    Mittelpunkt = Position 735.0, 533.7, 1229.1


    735,0 - 7,5 = 727,5

    735,0 + 7,5 = 742,5


    533,7 - 2,8 = 530,9

    533,7 + 2,8 = 536,5


    1229,1 - 5,4 = 1223,7

    1229,1 + 5,4 = 1234,5


    (Zum Rechnen mit 'nem Taschenrechner am besten immer "." durch "," ersetzen, der kommt sonst damit nicht zurecht

    und ich werde, damit man nicht durcheinander kommt "." mit "," ersetzen. Es sieht halt auch besser aus 😅)


    Aber wozu das ganze nun gut ist, schauen wir uns mit den Positionen jedes Krumen / Breadcrumbs an.

    Es sollte sich jede Position immer zwischen den Werten befinden, die wir ausgerechnet haben.

    Als Beispiel nehmen wir uns einfach die ersten 3 Positionen, den Rest kann jeder fĂŒr sich nachschauen.

    Damit lĂ€sst sich aber noch einmal ĂŒberprĂŒfen, dass sich unsere Krumen auch wirklich in dem Bereich befinden,

    fĂŒr den wir die Krumen auch setzen.

    Schließlich können wir auch keinen Lichtschalter außerhalb unserer Wohnung anbringen,

    anschließend die TĂŒr zu machen und versuchen ihn zu betĂ€tigen đŸ€Ł.

    So in Etwa sollte man sich dies eben auch mit den Krumen fĂŒr einen Bereich vorstellen.


    Aber wie gesagt, hier nochmal zum ÜberprĂŒfen.

    Ich setze jetzt nur schnell die Werte der einzelnen Positionen zwischen die berechneten Koordinaten

    und hoffe, man versteht somit einigermaßen was gemeint ist 😅.


    Krumen Nummer 1


    727,5

    741,294556

    742,5


    530,9

    531,522729

    536,5


    1223,7

    1227,548218

    1234,5


    Krumen Nummer 2


    727,5

    741,273071

    742,5


    530,9

    531,522729

    536,5


    1223,7

    1229,310547

    1234,5


    Krumen Nummer 3


    727,5

    739,904

    742,5


    530,9

    531,6

    536,5


    1223,7

    1230,51

    1234,5



    Nun noch zum letzten Teil, nÀmlich dem Aufbau eines "Untergrund" Areals.

    DafĂŒr könnte man vorrangig erst mal ein paar Regeln und Grundlagen festhalten,

    die ein wenig Beachtung bekommen sollten.


    Darunter ZĂ€hlen, dass wie schon erwĂ€hnt, immer ein Startpunkt außerhalb angelegt werden sollte oder muss.

    Diesen nennt man unter anderem auch "Outer Trigger" oder "Außen Trigger". Anschließend und der VollstĂ€ndigkeit halber

    erwĂ€hnen wir am besten auch gleich, dass ein Areal mit Krumen ein "Transitional" / "Übergang" ist

    und alle nachfolgenden im inneren eben die "Inner Trigger" sind oder eben "Innere Trigger" 😅.


    Als NĂ€chstes und auch da wie schon erwĂ€hnt, sollten ÜbergĂ€nge / Krumen innerhalb eines Trigger-Bereiches liegen.


    Wie auch schon erwĂ€hnt, sollte man einen Übergang nicht einfach nur ĂŒber eine Übergangsgeschwindigkeit

    sondern mit den erwÀhnten Krumen erstellen.


    Als NĂ€chstes sollten wir wissen, das wir keine doppelten Krumen und ÜbergĂ€nge anlegen mĂŒssen,

    da sie in beide Richtungen funktionieren.


    Die Krumen selber sollten am besten so Platziert werden, das es Optisch passt

    und wir z.B. nicht auf eine Wand zu laufen, es einfach dunkler wird,

    obwohl von hinten noch die Sonne scheint.


    Am besten also ĂŒber enge Gassen und Ecken platzieren um schöne ÜbergĂ€nge zu schaffen

    und viel Experimentieren 😉.


    Ein Areal welches sich in einem simulierten Untergrund befindet und einen Ein- und einen Ausgang haben,

    sollten entsprechend mit Krumen versehen werden.


    đŸ€” mehr ist, es glaube ich auch nicht, abgesehen davon, dass man natĂŒrlich seine Konstruktion

    immer nochmal ĂŒberprĂŒfen und nach Fehlern Ausschau halten sollte.



    Jetzt kommen wir aber zu unserem kleinen Beispiel des Aufbaus.

    DafĂŒr hab ich einen Tunnel mit einer Draufsicht in verschiedenen Abschnitten angelegt.

    Der Tunnel selbst, wie Areale und ÜbergĂ€nge angelegt werden können

    und sich unsere Dunkelheit verhalten kann.


    Es handelt sich nur um ein grobes Beispiel, aber hier wÀre erst mal der Aufbau des Tunnels selbst.

    Er hat 2 Fahrtrichtungen, davon jede getrennt, aber durch einen Gang miteinander verbunden

    und an jedem Ein- und Ausgang gibt es einen Notausgang.

    Die Tunnel selber sind nicht von außen zugĂ€nglich

    genauso wenig wie 2 der NotausgÀnge.


    XYQVUf2.png


    Wir haben hier also einen Ein- und einen Ausgang so wie die Gestrichelte Linie,

    welche darstellen soll, wie wir durch diesen Tunnel gelangen können.



    Im nÀchsten Bild sehen wir, wie die Bereiche beispielsweise angeordnet werden können.

    Dabei sind zum einen die Werte und Angaben fĂŒr die "EyeAccommodation" und die "Breadcrumbs" Markiert.

    Nicht Perfekt und auch der Außenbereich fehlen, aber ich hoffe da kann man drĂŒber hinwegsehen,

    es soll ja nur eine grobe Darstellung sein 😅.


    NDS1gzS.png


    Die "Breadcrumbs" sind hierbei jeweils in den GĂ€ngen Bzw. den TĂŒren, wenn man sich diese ein wenig hinzudenkt.

    Der "Trigger" oder Bereich soll hier ein wenig Kennzeichnen, das sich dieser Zwar ĂŒber alle drei RĂ€ume erstreckt,

    dieser aber quasi in oder durch die einzelnen "Breadcrumbs" getrennt ist.



    Als NĂ€chstes noch einmal das Gleiche, aber nur die "Trigger" ohne Tunnel.


    9CejPDs.png


    Soll nur noch einmal ein wenig die Einteilung darstellen 😅.



    Als Letztes haben wir nun noch unsere Tunnel, welche eben in Dunkelheit und ihre ÜbergĂ€nge eingeteilt sind.


    rXLaN66.png


    Hier geht es mehr oder weniger nur nochmal grob um die Veranschaulichung der Dunkelheit im Inneren

    und wie sich die ÜbergĂ€nge auf die Helligkeit in den RĂ€umen auswirkt,

    trotz dessen, dass wir bei der Einstellung "EyeAccommodation" den Wert "0" gesetzt haben.



    So, aus die Maus, jetzt wird es Duster đŸ€Ł.

    Nein, es sollte es eigentlich auch mit diesem Thema gewesen sein.

    Ich hoffe wie immer ich habe nichts vergessen,

    bin fĂŒr Änderungs- oder VerbesserungsvorschlĂ€ge immer offen,

    Freue mich, euch beim nÀchsten Thema wieder an Bord zu haben,

    bedanke mich wieder fĂŒr Zeit, Interesse, Geduld

    und eure Aufmerksamkeit 😅.


    Bis zum NĂ€chsten Thema 😁👍

  • Thema:



    mapgroupproto.xml


    Auch wenn wir uns wiederholen,

    ein herzliches Willkommen zum heutigen Punkt der Tagesordnung 😁.


    Hier haben wir es mit Gruppen fĂŒr Spawn Punkte innerhalb eines Kartenobjektes zu tun.


    Kartenobjekte beziehen sich hierbei auf alles, was eben so auf der Karte herumsteht.

    Seien es BÀume, Autowracks oder GebÀude.


    Vorab ist es hier ein wenig schwierig das Ganze als ein alleiniges Thema zu behandeln,

    da es auch hier wieder ein großes und sehr komplexes Konstrukt aus verschiedenen Dateien ist.

    Daher verweise ich zu aller erst noch einmal auf die Themen "types.xml", "cfglimitsdefinition.xml"

    und "cfglimitsdefinitionuser.xml".


    "cfglimitsdefinition.xml" und "cfglimitsdefinitionuser.xml" sind hierbei eine Art Grundpfeiler,

    da in diesen Dateien schon grundlegende und hoffentlich noch bekannte "Attribute / Werte"

    wie beispielsweise "tools", "containers", "weapons", "Military", "Police" oder "School" hinterlegt sind,

    welche auch hier wieder zum Einsatz kommen.


    In der "types.xml" haben wir mit den selbigen Werte, die Zuordnung zu eben den in der "mapgroupproto.xml"

    Hinterlegten Kartenobjekten.



    Nun gibt es hier allerdings noch einmal 2 Grundtypen, welche wir auch gleich einmal aufteilen mĂŒssen.

    Daher fange ich auch gleich mal an und nehmen uns wieder die Grunddatei vor.



    In diesem Abschnitt verhÀlt es sich Àhnlich der "cfgenvironment.xml".

    Es handelt sich dabei um FrĂŒchte, Steine oder Pilze, welche in einer anderen Art und Weise

    und in der "mapclusterproto.xml" hinterlegt sind.


    Wichtig ist allerdings folgendes, denn das "<defaults>" ist hierbei nicht unbedingt Grundlos 😅.

    In den nachfolgenden Gruppen, auf welche wir eingehen, kommt es vor, dass gewisse Werte nicht angegeben werden,

    da sie diese eben von dieser Grundeinstellung beziehen.


    In den Grundeinstellungen haben wir nun aber erst mal folgende Zeilen und Werte.


    name="group" lootmax="6" = Gruppenname mit maximaler Gruppenbeute


    Hierbei handelt es sich, wie schon gesagt, um die Voreinstellung fĂŒr alle nachfolgenden Gruppen.

    Es ist also eigentlich mehr eine Art Oberklasse, fĂŒr die wir anschließend einfach

    unsere Gruppen erstellen und benennen.

    "lootmax" ist zusÀtzlich eine Einstellung mit einem Grundwert,

    welcher spĂ€ter fĂŒr alle nachfolgenden Gruppen gilt,

    solange kein anderer Wert gewollt ist.


    name="container" lootmax="4" = Containername mit maximaler Beutemenge


    Hier haben wir eigentlich dasselbe Prinzip wie bei der "group",

    nur das es sich hierbei nochmal um eine weitere Unterkategorie handelt, wenn man es so möchte.

    Auch "lootmax" ĂŒbernimmt hier wieder die Rolle des Grund- und Standardwertes,

    solange nichts anderes gewollt ist.


    name="keepInvalidPoints" enabled="yes" = Einstellung fĂŒr ungĂŒltige / nicht zulĂ€ssige Spawn Punkte


    Kann ich leider nicht wirklich sagen 😅.

    Man kann es zwar mit Englischkenntnissen ĂŒbersetzen und sich auch gewissermaßen denken, was es bedeutet,

    allerdings kann ich nicht genau sagen, in welcher Form ungĂŒltigen Punkte gemeint sind.

    WĂŒrde ich nach dem Gehen, was mir Kopf und BauchgefĂŒhl sagen, wĂŒrde ich behaupten,

    das es sich hierbei um beispielsweise Blockierte Spawn Punkte handelt.

    Damit der Server eben keinen Loot an Punkten spawnen lÀsst,

    die ggf. durch ein Objekt blockiert werden, um zu verhindern,

    dass Objekte am Ende in einem Auto spawnen,

    wenn dieses unter einem Apfelbaum steht.

    Auf jeden Fall können wir hier das ganze mit "yes" aktivieren

    und mit "no" eben auch deaktivieren.

    Da Sicherheit vorgeht, ist mein Rat auch hier,

    alles lassen, wie es ist 😅.



    Nachfolgend haben wir jetzt folgendes.


    Code
    <default name="clusterMatrix" de="TrajectoryApple" width="12" height="12"/>


    Dies gilt als Cluster, fĂŒr die oben erwĂ€hnten FrĂŒchte, Steine oder Pilze,

    welche ĂŒber ein etwas anderes System laufen,

    wir aber dennoch ein wenig auseinander pflĂŒcken mĂŒssen.


    name="clusterMatrix" = Nennen wir es erst mal Bezeichnung 😅


    Dies ist eben die Bezeichnung, welche festlegt, wie das ganze mehr oder weniger funktioniert,

    da es hier ĂŒber ein "Cluster" System geregelt wird.

    Einzeln zu erklÀren ist es etwas schwierig,

    weshalb ich darauf in der "mapclusterproto.xml" eingehe.


    de="TrajectoryApple" = Spawn Bezeichnung


    Dies ist mehr oder weniger die Spawn Bezeichnung, da es sich um eine Art Bahn handelt.

    WĂŒrde man es sich vorstellen, wĂŒrde es im Entferntesten also bedeuten,

    dass hier die Flugbahn eines Apfels angedeutet wird.

    Gleichzeitig ist es auch hier wieder ein Verweis auf die Cluster,

    auf die wir in der "mapclusterproto.xml" eingehen.


    width="12" = Breite mit einem Wert in "m"

    height="12" = Höhe mit einem Wert in "m"


    Hier mĂŒssen wir uns wieder vorstellen, dass wir uns die Karte von oben anschauen,

    und wir einen Wert in Metern fĂŒr eine Art Kachel festlegen.



    Alles in allem war es das mal grob ĂŒberflogen, denn den ĂŒbrigen Teil behandeln wir

    wie schon gesagt in der "mapclusterproto.xml", um dieses Thema in einem Rutsch durchzukauen đŸ€Ł.



    Aus diesem Grund machen wir nun mit dem eigentlich wichtigen Teil fĂŒr diese Datei weiter,

    denn ab jetzt haben wir alle Einstellungen vor uns, die dafĂŒr zustĂ€ndig sind,

    wo, wie viel und welche Objekte in unseren einzelnen GebÀuden spawnen.

    DafĂŒr nehmen wir uns wieder ein paar Beispiele aus den Vanilla Dateien als Vorbild.



    Wir haben nun 5 Beispiele, welche wir uns einzeln anschauen, um einfach Schritt fĂŒr Schritt

    auf Besonderheiten einzugehen, aber ggf. schon einfache Grundeinstellungen abgeklÀrt zu haben.

    So ist, es hoffe ich angenehmer und kein Wirrwarr Batzen auf einmal 😅.


    Damit haben wir nun als erstes folgendes Beispiel.



    Schauen wir uns die einzelnen Zeilen wieder an, haben wir folgende Werte, Attribute und Einstellungen,

    wobei Wichtig ist, das "group" immer fĂŒr eine Gruppe Steht.



    name="Land_Shed_M1" lootmax="2" = Gruppenname mit maximaler Gruppenbeute


    Hier haben wir den uns schon aus den Standartwerten bekannten Gruppennamen,

    welcher hier mit einem Direkten Gruppennahmen versehen ist.

    Dabei bezieht sich "Land_Shed_M1" auf eben Jenes Statische Objekt,

    welches wir auf der Karte finden.

    Damit man auch weiß um welches Objekt es sich handelt,

    haben wir hier auch mal ein Bild.


    Ay5cKFh.png

    Quelle: dayz.fandom.com


    Hinzu kommt nun "lootmax" als zusÀtzliche Einstellung, damit hier die Grundeinstellung von "lootmax="6""

    auf "lootmax="2"" geÀndert wird.



    usage name="Industrial" = "usageflags" Zuordnung

    usage name="Farm" = "usageflags" Zuordnung


    Wer sich hier noch ein klein wenig an das Thema cfglimitsdefinition.xml und types.xml erinnern kann,

    weiß eventuell noch, was die "usageflags" bewirkt haben. Hier wird nun damit festgelegt wird,

    welchen Objekten es Erlaubt ist an diesen Positionen zu erscheinen.



    container name="lootFloor" lootmax="2" = Containername mit maximaler Beutemenge


    Nun haben wir zusÀtzlich zu unsere Gruppe noch den "Spawn Container",

    der hier einen Namen erhÀlt.

    Wie auch schon in der Gruppe, haben wir auch hierfĂŒr zusĂ€tzlich "lootmax",

    um die Grundeinstellung ggf. noch einmal fĂŒr diesen Container anzupassen,

    damit dieser eben nicht die Grundwerte ĂŒbernimmt.



    category name="tools" = "category" Zuordnung

    category name="containers" = "category" Zuordnung

    tag name="ground" = "tag" Zuordnung

    tag name="floor" = "tag" Zuordnung


    Auch hier gilt das Prinzip der cfglimitsdefinition.xml und types.xml.

    Wie also auch bei den "usageflags" geklÀrt haben, legen wir hier die Erlaubnis fest,

    welche Objekte in diesem "container" Spawnen dĂŒrfen.



    point pos="0.504883 -1.174019 0.807373" range="0.587867" height="1.469666" flags="32" = Spawn Koordinate mit zusÀtzlichen Einstellungen

    point pos="0.852539 -1.174019 -0.850342" range="0.595474" height="1.488685" flags="32" = Spawn Koordinate mit zusÀtzlichen Einstellungen

    point pos="-0.238281 -1.174019 -0.895996" range="0.497570" height="1.243926" flags="32" = Spawn Koordinate mit zusÀtzlichen Einstellungen


    point pos="0.0 0.0 0.0" = "x,y,z" Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes


    Hier haben wir wieder unsere bekannten Koordinaten , welche wieder die Position des Spawn Punktes angeben,

    an dem ein Objekt spawnen kann, wobei auch hier wieder gilt:


    "x" = X Achse (Horizontal von Links nach Rechts)

    "y" = Y Achse (Höhe zum 0 Punkt und der WasseroberflÀche)

    "z" = Z Achse (Vertikal von Unten nach Oben)


    der "0" Punkt des Objektes, ist dabei der Mittelpunkt des Objektes Bzw. des GebÀudes.


    range="0.0" = max Reichweite / Radius des Spawn Punktes


    Damit kann der Server ausloten, wo oder wie das Objekt spawnen kann.

    Es kann also mehr oder weniger damit die Position Variieren

    oder ein Objekt anhand seiner GrĂ¶ĂŸe dem Spawn Punkt angepasst

    und ausgerichtet werden.

    ZusĂ€tzlich soll dies auch dafĂŒr sorgen, dass nur Objekte mit der entsprechenden GrĂ¶ĂŸe

    an dieser Position spawnen.


    height="0.0" = max Höhe des Spawn Punktes


    Hier wird zusĂ€tzlich eine Maximalhöhe fĂŒr den Spawn Punkt festgelegt,

    welcher wie auch die "range" fĂŒr Ausrichtung / Positionierung sorgen soll

    und auch hier wieder verhindern soll das ein zu hohes Objekt

    an der Falschen Position auftaucht.


    "range" und "height" zusammen ergeben eine Art Zylinder,

    der eben Objekte spawnen lÀsst und dabei versucht,

    die GrĂ¶ĂŸe des Objektes dem Spawn Punkt anzupassen.

    Um sich das Ganze eventuell ein wenig Optisch vorstellen zu können,

    habe ich hier mal ein paar Bilder auf die schnelle rausgesucht.


    Mlxm5N0.jpeg

    Quelle: reddit.com


    yqOrXuV.jpeg

    Quelle: imgur.com


    Ich hoffe mal, man kann sich damit in etwa vorstellen, wie also am Ende ein solcher Punkt aussieht

    und wie es sich mit dem spawnen von Objekte und deren GrĂ¶ĂŸenordnung verhĂ€lt.

    ZusÀtzlich können wir hier noch einmal unsere "tag" Einstellungen anschauen.

    Z.B. wĂŒrde der "tag name="floor"" und "tag name="ground"" auf einen Spawn Punkt

    am Boden verweisen, da dieser mehr Platz hat.

    "tag name="shelves"" hingegen, wĂŒrde wie man denke ich auch gut auf den Bildern sehen kann,

    auf Spawn Punkten angewendet werden, die sich auf kleineren FlÀchen befinden.

    Wie der jeweilige Name also ja auch schon vermuten lĂ€sst 😅.


    flags="32" = Objektorientierung


    Dies ist zusÀtzlich ein Wert, der genutzt werden kann und in diesem Fall dazu dient,

    Objekte auf dem Boden spawnen zu lassen. Damit ist nicht der Fußboden des Objektes gemeint

    sondern der Karten / Map Boden.

    Warum ist das notwendig?

    Nun ja, das ist eigentlich relativ simpel und hÀngt mit dem Objekt zusammen.

    Ein normales Haus hat, wie wir wissen, einen Boden oder eine Etage, eben eine Art festes Fundament,

    nach dem sich auch der Spawn Punkt richtet.

    Nehmen wir aber das Beispiel des "Land_Shed_M1", wissen wir, dass dieses kein eigenes Fundament hat.

    Wenn wir es betreten, sehen wir eben auf den Kartenboden.

    ZusÀtzlich kommt hier die Model Struktur ins Spiel und wie ein Model aufgebaut ist.

    Es gibt fĂŒr die Spieler "Unsichtbare" Ebenen im Model, welche verhindern können,

    dass Objekte auf dem Boden spawnen, da das Objekt optisch eigentlich keinen hat.

    Auch kann es sein, dass ein Model / Objekt unterschiedlich auf der Karte steht.

    Mal einen kleinen Tick höher oder mal ein wenig niedriger.

    Da ggf. mal kein "Fundament" vorhanden ist oder auch verdeckt werden kann,

    muss und wird hiermit eben versucht Objekte auf dem Kartenboden erscheinen zu lassen.



    Jetzt haben wir schon mal einen ganzen Haufen an Informationen, die eigentlich auch als gute Grundlage dienen.

    Daher nehmen wir uns das nÀchste Beispiel, um uns zusÀtzliche oder weitere Parameter anzuschauen



    Was genau ist hier anders?


    Fangen wir auch hier am besten wieder von oben an, womit wir also unseren Gruppennamen "Land_Shed_Closed" haben.

    Also ein anderes Objekt, wobei hier auffallen sollte, dass wir keinen "lootmax" hinter unserer Gruppe haben.


    Als NĂ€chstes sollten wir feststellen, dass es hier nicht mehr nur ein, sondern mehrere "container" vorhanden sind

    und nur einer dieser "container" wieder eine "lootmax" Einstellung besitzt.



    Was bedeutet das also fĂŒr uns und fĂŒr den Server?


    In unserem "Land_Shed_M1" Beispiel haben wir einen Wert von "lootmax="2"" auf unsere Gruppe

    und auch auf unseren "container".

    Damit wurde die Grundeinstellung und der Grundwert angepasst.

    Als Vergleich mal die GegenĂŒberstellung Alt und Neu.


    "name="group" lootmax="6"" wurde zu "name="group" lootmax="2""

    "name="container" lootmax="4"" wurde zu "name="container" lootmax="2""


    Damit wurde also in der Gruppe eine Maximale Loot Anzahl an Objekten von "6" auf "2"

    und auf unseren "Container" von "4" auf "2" geÀndert.

    Somit haben wir also maximal 2 Objekte.


    Im neuen Beispiel "Land_Shed_Closed" haben wir nun keinen neuen Wert, sondern den Grundwert "6",

    was also eine Maximale Loot Anzahl von 6 Objekten festlegt.

    Nun haben wir allerdings nicht einen, sondern 3 "container", wobei wir einen davon

    mit einem neuen Maximalwert von "3" haben.


    Bei 6 Objekten, dĂŒrfen pro "container" 4 Objekte spawnen und im neu festgelegten nur 3 Objekte.

    Mit dieser Verteilung hĂ€tten wir also eine Vielzahl von Möglichkeiten, die man natĂŒrlich wieder mathematisch versuchen kann aufzuschlĂŒsseln đŸ˜…đŸ€Ł.


    Gruppe = max 6 Objekte

    Container A = max 4 Objekte

    Container B = max 4 Objekte

    Container C = max 3 Objekte


    Verteilungen könnten also folgendermaßen aussehen, wenn denn tatsĂ€chlich mal 6 Objekte erscheinen 😅.


    Beispielverteilung A:


    Gruppe = 6 Objekte

    Container A = 1 Objekt

    Container B = 2 Objekte

    Container C = 3 Objekte


    Beispielverteilung B:


    Gruppe = 6 Objekte

    Container A = 1 Objekt

    Container B = 4 Objekte

    Container C = 1 Objekt


    Beispielverteilung C:


    Gruppe = 6 Objekte

    Container A = 3 Objekte

    Container B = 0 Objekte

    Container C = 3 Objekte


    Beispielverteilung D:


    Gruppe = 6 Objekte

    Container A = 4 Objekte

    Container B = 2 Objekte

    Container C = 0 Objekte



    Das ganze könnte man natĂŒrlich fĂŒr jede Variante und unzĂ€hlig weiter fĂŒhren,

    aber ich hoffe mal, es reicht in etwa aus, um sich grob eine Vorstellung davon zu machen,

    was gemeint ist.



    Nun wĂ€re noch die Einteilung der erlaubten Objekte zu betrachten und die einzelnen dafĂŒr angelegten "container".

    HierfĂŒr haben wir zunĂ€chst die "usage", die festlegen, dass hier nur Objekte mit der Kennzeichnung

    "Industrial" und "Village" spawnen dĂŒrfen, wobei sich dies auf die gesamte Gruppe bezieht.


    Als NĂ€chstes haben wir die einzelnen Container.

    Angefangen mit "lootFloor", was nicht automatisch bedeutet, dass es sich hier nur um große Objekte handelt.

    Es handelt sich lediglich um eine Bezeichnung und Kennzeichnung fĂŒr den Überblick.

    Festgelegt wird es erst mit den "tag" Kennzeichnungen "ground" und "floor" wenn Objekte diese Kennzeichnung auch besitzen.

    "category" ist in diesem Falle also auch wieder eine Kennzeichnung, welche auch wieder nur Objekte erlaubt, die diese besitzen.

    Es kann also genauso gut sein, dass eine Flasche oder eine NĂ€hset an einer solchen Stelle Spawnt, wenn sie diese Kennzeichnungen haben.


    Gleiches Prinzip gilt also auch fĂŒr die restlichen "container", weshalb ich das ganze jetzt nicht noch einmal wiederhole 😅.

    Es handelt sich also um die Kennzeichnung der Objekte in jedem Container und um hierfĂŒr mal ein oder zwei Beispiele zu nennen,

    Haben wir hier mal ein paar Objekte, die an diesen PlĂ€tzen spawnen dĂŒrften.



    Wie man sehen kann, kommt es nicht darauf an, dass ein Objekt die exakten Werte und Kennzeichnungen hat,

    Es kommt auf die Kombination der Kennzeichnungen an.

    Ein Objekt mit "category name="weapons"" und "usage name="Hunting"" wird hier nicht auftauchen,

    da "usage name="Village"" nicht vertreten ist.



    Ich hoffe das es soweit verstÀndlich war und man den Kern der Sache ein wenig nachvollziehen kann.

    Denn nun kommen wir zum nÀchsten Beispiel.



    Hier haben wir ein grĂ¶ĂŸeres Objekt mit jeder Menge Positionen namens "Land_HouseBlock_3F_Corner2"


    Wir haben wieder unsere ĂŒblichen Werte wie "category", "tag" und so weiter, welche wir ja nun kennen und wissen wie es gedacht ist.

    Wir kĂŒmmern uns hier nur noch einmal um die ĂŒberschriebenen oder geĂ€nderten Grundwerte.

    DafĂŒr nehmen wir nochmal das Beispiel der Verteilung.


    Gruppe = max 10 Objekte

    Container A = max 6 Objekte

    Container B = max 6 Objekte

    Container C = max 3 Objekte


    Wir sehen also einen neuen Wert von "10", womit wir folgende Verteilungen haben könnten, wenn tatsÀchlich 10 Objekte spawnen.


    Beispielverteilung A:


    Gruppe = 10 Objekte

    Container A = 6 Objekt

    Container B = 1 Objekte

    Container C = 3 Objekte


    Beispielverteilung B:


    Gruppe = 10 Objekte

    Container A = 3 Objekt

    Container B = 4 Objekte

    Container C = 3 Objekte


    Beispielverteilung C:


    Gruppe = 10 Objekte

    Container A = 4 Objekt

    Container B = 4 Objekte

    Container C = 2 Objekte


    Beispielverteilung D:


    Gruppe = 10 Objekte

    Container A = 4 Objekt

    Container B = 5 Objekte

    Container C = 1 Objekte


    Es werden also nie mehr als 10 Objekte in der Gruppe und nie mehr als die maximal Anzahl an Objekten,

    die pro Container zugelassen werden.



    Damit kommen wir aber auch gleich zum nÀchsten Beispiel.



    Da auch hier sich grundlegende Sachen wiederholen, kommen wir nur zum hier wichtigen Teil "dispatch".

    Es handelt sich hierbei um einen "proxy Spawn", welcher nur ein Objekt hervorbringen kann.

    Damit ist auch nicht nur ein beliebiges, sondern ein exaktes Objekt gemeint, welches dabei auch hinterlegt ist.

    In unserem Beispiel ist es "Land_Wreck_sed02_aban2_yellow_DE" und handelt sich um ein Fahrzeugwrack.

    Genauer gesagt den "Sarka 120" in Gelb, weshalb diese auch nur gelbe Fahrzeugteile hervorbringt.


    <proxy type="Sedan_02_Wheel" pos="-1.486 -0.296 0.805" rpy="0.0 0.0 0.0" />

    <proxy type="Sedan_02_Door_1_1_YellowRust" pos="-0.556 0.125 -0.860" rpy="0.0 190.0 0.0" />

    <proxy type="Sedan_02_Door_2_2_YellowRust" pos="0.156 0.168 1.150" rpy="-2.0 310.0 0.0" />

    <proxy type="Sedan_02_Hood_YellowRust" pos="-1.608 0.395 -0.174" rpy="0.0 180.0 90.0" />


    Grundlegend haben wir erst mal ein Objekt, welches wie wir es kennen, auch in den "types" zu finden ist.

    "Sedan_02_Wheel", "Sedan_02_Door_1_1_YellowRust", "Sedan_02_Door_2_2_YellowRust" und "Sedan_02_Hood_YellowRust".


    Jedes dieser Objekte hat nun einen eigenen Spawn Punkt, welcher wie ĂŒblichen mit "x,y,z" Koordinaten bestimmt wird.

    ZusÀtzlich haben wir aber nun "rpy", was wir eventuell aus dem Thema: "cfggameplay.json Extras: objectSpawnersArr"

    oder dem Thema: "cfgundergroundtriggers.json".

    Dabei handelt es sich nĂ€mlich um "Yaw", "Pitch" und "Roll", nur in einer anderen Reihenfolge 😅.


    r = Roll = Kippen nach vorn oder hinten in °

    p = Pitch = Neigung nach links oder rechts in °

    y = Yaw = Drehung um die eigene Achse in °


    Damit wird die genaue Ausrichtung des Objektes am Spawn Punkt festgelegt, damit ein Reifen beispielsweise

    nicht einfach auf dem Boden neben einem Auto liegt, sondern eben "Simuliert" wird,

    dass das Auto einen Reifen hat, den wir vom Auto entfernen.

    Gleiches gilt natĂŒrlich fĂŒr TĂŒren đŸ€Ł.



    Als letztes Beispiel und um die "dispatch" Werte zu vervollstÀndigen, haben wir jetzt noch Folgendes.


    Dabei handelt es sich um "StaticObj_Train_Wagon_Flat_Industrial_Planks_DE", mit dem ĂŒblichen BlaBla.

    Konzentrieren wir uns auf "dispatch", werden wir hier den neuen Wert "dechance" sehen.

    Auch hier sollte uns das ganze ein wenig bekannt vorkommen, denn es handelt sich hierbei

    um die Wahrscheinlichkeit aus der cfgrandompresets.xml.


    Mit "dispatch dechance="1.0"" legen wir wieder die mögliche Wahrscheinlichkeit fest, dass das Objekt ĂŒberhaupt erscheint.

    Bei mehreren Proxys wĂŒrde es also hier wieder auf alle Proxys zutreffen.

    Anschließend haben wir am Ende des Proxys noch einmal einen "dechance" Wert,

    welcher sich wieder auf das Objekt selbst bezieht.

    In diesen FĂ€llen sollte also zu 100 % ein "dispatch" also ein Proxy auftauchen

    und der Proxy "PileOfWoodenPlanks" zu 130 % đŸ€Ł.

    Ich weiß nicht, ob es ein Tippfehler ist und entweder 100 oder 30 % sein sollen.

    Da mehr als 100 % aber nicht möglich sind, denke ich mal, zÀhlt es auch einfach nur als 100 %.



    Wer jetzt noch ein wenig aufgepasst hat, wird feststellen, dass wir einen "lootmax" von 15 haben,

    aber nur 11 Spawn Punkte.

    Es gibt auch anderer Gruppen mit weniger Punkten, aber ebenso einem "lootmax" von 15.

    In diesem speziellen Fall, liegt es daran, dass "StaticObj_Train_Wagon_Flat_Industrial_Planks_DE"

    zu einer Event Gruppe gehört, und somit im Thema: "cfgeventgroups.xml".

    In diesem haben wir gelernt, dass der Loot mit den Einstellungen des Events festgelegt wird.

    Nicht unbedingt was, sondern wie viel spawnen darf.

    Somit sind hier nur die Spawn Punkte und die Kennzeichnungen von Bedeutung

    und nicht die Anzahl der erlaubten Objekte.

    Wichtig ist aber, dass wir fĂŒr alle gĂ€ngigen statischen Objekte, die nicht zu einem Event gehören,

    nicht mehr erlaubten Loot haben, als Spawn Punkte tatsÀchlich vorhanden sind.

    Ein Objekt / Haus, mit nur 5 Spawn Punkten sollte also auch nie

    den "lootmax" Wert von 5 im zugehörigen Container ĂŒberschreiten.



    Bevor wir uns aber fĂŒr heute verabschieden, schauen wir nochmal

    auf die zugehörigen Dateien und Themen, damit wir einen Zusammenhang haben.

    Hier wissen wir ja nun, wie dafĂŒr gesorgt wird, wo Loot in GebĂ€uden auftaucht.


    Damit der Server weiß, wo allerdings ein GebĂ€ude steht, in dem er Loot platzieren kann,

    mĂŒssen wir uns mit dem Schritt und Thema mapgrouppos.xml auseinandersetzen.


    Um ein wenig zu Verstehen und zu wissen wie die Äpfel vom Baum "fallen" 😅,

    schauen wir uns das Thema mapclusterproto.xml genauer an.


    Und um damit der Server natĂŒrlich auch da weiß, wo ein Baum steht,

    an dem er einen Apfel "fallen lassen" kann,

    schauen wir uns das Thema mapgroupcluster.xml an.



    Das sollte es aber gewesen sein und war, glaube ich, auch wieder genug fĂŒr heute.

    Ich bedanke mich natĂŒrlich wie immer fĂŒr eure Aufmerksamkeit und eure Zeit

    und freue mich, euch beim nĂ€chsten Thema wiederzusehen 😁😉.

  • Thema:



    mapclusterproto.xml


    👋 Hallo und natĂŒrlich auch hier wieder ein herzliches Willkommen beim heutigen Thema.


    Hier befassen wir uns mit dem Cluster, wie es auch schon der Name des Beitrags vermuten lĂ€sst 😉.

    Wie auch schon im Thema "mapgroupproto.xml" angesprochen, arbeitet dieser Teil mit der "mapgroupproto.xml" zusammen.

    Daher nehmen wir nochmal einen kleinen Auszug und schauen uns diesen Teil,

    der hierfĂŒr wichtig ist noch einmal an.



    Wir haben wieder "group" und "container" mit ihren Jeweiligem "lootmax" Wert

    und wie auch schon bei der mapgroupproto.xml erwÀhnt,

    gehen wir hier nÀher auf diesen Abschnitt ein,

    auch wenn es in erster Linie ein anderes Thema ist 😅.


    Daher schauen wir und nochmal grob diesen Abschnitt an und picken uns die wichtigsten Werte nochmal kurz raus.


    name="group" lootmax="6" = Gruppenname mit maximaler Gruppenbeute


    name="container" lootmax="4" = Containername mit maximaler Beutemenge


    name="clusterMatrix" = Bezeichnung fĂŒr die Loot Verteilung


    de="TrajectoryApple" = Bezeichnung und Verweis fĂŒr den Spawn bzw. die Flugbahn


    width="12" = Breite mit einem Wert in "m"

    height="12" = Höhe mit einem Wert in "m"



    Nun mĂŒssen wir ein wenig verstehen, wofĂŒr das Ganze ist und wie das Ganze hierfĂŒr funktioniert.


    DafĂŒr mĂŒssen wir uns fĂŒr unser Beispiel "TrajectoryApple", am besten vorstellen,

    wir wÀren auf einer Apfelplantage und schauen von oben darauf hinab.


    3F4XI7j.png



    Jeder Apfelbaum stellt quasi einen "container" dar, was also bedeutet,

    dass jeder Baum potenziell bis zu 4 Äpfel hervorbringen könnte,

    wenn wir uns hier erst einmal rein nach unseren angegebenen Grundwerten richten.


    Nun haben wir aber das erwÀhnte "Cluster" System (clusterMatrix), mit "width" und "height",

    was uns nun unsere Plantage in Kachel aufteilen lĂ€sst, welche eben alle eine GrĂ¶ĂŸe von "12" Metern haben.


    Behaupten wir jetzt einfach mal, dass ein Baum, wenn wir uns diesen mal kurz als einen WĂŒrfel vorstellen,

    4 Meter breit und Hoch ist, hĂ€tten wir also in einem unserer Kachel Platz fĂŒr 9 BĂ€ume.


    Optisch können wir uns dies folgendermaßen vorstellen.


    gauk9ji.png



    Nun haben wir 9 BĂ€ume, welche in einem Cluster stehen und dementsprechend 9 Spawn Container.

    Jeder dieser Container / BĂ€umen könnte jetzt wie schon gesagt 4 Äpfel hervorbringen.

    Leider wÀre das bisher ja leider utopisch, da wir ja potenziell 4 x 9

    und somit 36 Äpfel auf einer FlĂ€che von 144,00 mÂČ bzw. 12 m x 12 m hĂ€tten 😅.


    Aus diesem Grund kommt nun nochmal unsere Zeile "name="group" lootmax="6"" ins Spiel,

    welche das maximum auf ein solches Raster Bzw. auf ein Feld dieses Rasters

    auf 6 Äpfel begrenzt.



    So, Nun haben wir ein gewisses Grundwissen, mit dem wir uns jetzt dem eigentlichen Teil widmen können.

    Da sich auch hier das Ganze wieder in zwei Teilen abspielt, kĂŒmmern wir uns erst einmal um folgenden Abschnitt.



    Hierbei handelt es sich im Grunde um eine Art Sammlung, in welcher der Name des Clusters

    und dem dazugehörigen Model hinterlegt ist.

    Da wir uns bisher auf Äpfel eingespielt haben, bleiben wir auch bei diesen 😅.


    Code
                <export name="AppleTree1" shape="dz\plants\tree\t_malusDomestica_1s.p3d" />
                <export name="AppleTree2" shape="dz\plants\tree\t_malusDomestica_2s.p3d" />
                <export name="AppleTree3" shape="dz\plants\tree\t_malusDomestica_3s.p3d" />    


    Das Ganze jetzt nochmal kurz aufgeteilt, haben wir Folgendes.


    <export name="AppleTree1" = Cluster Name


    shape="dz\plants\tree\t_malusDomestica_1s.p3d" = "shape" = Form, mit Dateipfad zum 3d Model


    Hier haben wir zuallererst unseren Cluster, welcher mit einem Namen versehen wurde

    und das dazugehörige Model mit dem Dateipfad.

    Dies ist in erster Linie wichtig, um dem Server zu sagen, welches Objekt zum Cluster gehört.

    Ähnlich der "mapgroupproto.xml", in welcher wir der Gruppe ein Objekt zuordnen.



    Wir haben nun also "AppleTree1", "AppleTree2" und "AppleTree3" mit dem jeweils zugeordneten Modell des Baumes,

    Und können damit auch zum nĂ€chsten Teil ĂŒbergehen.



    Hier haben wir unsere Cluster mit folgenden Zeilen.


    cluster name="AppleTree1" lootmax="2" maxinstances="150" = Cluster Name mit maximaler Loot und Instanzen Anzahl


    Aufgeteilt haben wir in dieser Zeile folgende Werte und Bezeichnungen.


    cluster name="AppleTree1" = Cluster Name


    Hier haben wir wieder unsere oben erwÀhnte Cluster Bezeichnung,

    welche sich auf das oben erwÀhnte Objekt beziehen.


    lootmax="2" = maximale Loot Anzahl


    Hier wird die maximale Loot Anzahl festgelegt, welche sich auf dieses Objekt und diesen "Baum" bezieht.

    Damit sind es hier also nur noch 2 Äpfel auf einen Container.

    Wichtig ist hier, dass dies nur fĂŒr das Objekt gilt, aber nicht fĂŒr den Cluster.

    Dazu komme ich weiter unten noch einmal etwas genauer.


    maxinstances="150" = maximale Instanzen


    Dabei handelt es sich um eine Limitierung an maximalen Objekten fĂŒr diesen Clusterund somit um die damit definierten BĂ€ume.

    Da wir "AppleTree1", "AppleTree2" und "AppleTree3" jeweils mit einem Wert von "maxinstances="150"" haben,

    dĂŒrfte es also maximal 450 Äpfel gleichzeitig auf unserer Karte geben.



    de name="TrajectoryApple" = Bezeichnung der "Flugbahn"


    Hier haben wir wieder unsere Flugbahn Bezeichnung, welche wir auch aus der "mapgroupproto.xml" kennen dĂŒrften.



    container name="branch" lootmax="1" = Container Name mit Maximaler Loot Anzahl


    Ähnlich oder eigentlich auch genauso wie in der "mapgroupproto.xml", haben wir hier den Nahmen des Containers.

    In diesem Fall heißt er eben "branch" und bedeutet "Zweig" oder "Ast" und dient auch hier mehr der Orientierung.

    "lootmax="1"" bezieht sich hier auf die maximale Anzahl an Objekten pro Loot Spawn Punkt.

    Der Standardwert wird also auch hier wieder neu definiert und von "4" auf "1" gesetzt.



    point pos="-1.86 -2.40 0.12" range="0.55" height="1.63" flags="32" = Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes

    point pos="0.51 -2.40 0.85" range="0.55" height="1.63" flags="32" = Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes

    point pos="0.15 -2.40 -0.57" range="0.55" height="1.63" flags="32" = Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes

    point pos="-1.09 -2.40 1.47" range="0.55" height="1.63" flags="32" = Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes


    Hier haben wir wieder unsere Koordinaten, welche an sich exakt dasselbe Abbild aus der "mapgroupproto.xml" sind.

    Daher gehe ich hier nur nochmal grob darauf ein.


    point pos="0.0 0.0 0.0" = "x,y,z" Koordinaten des Spawn Punktes innerhalb des "containers" und "0" Punkt des Objektes


    "x" = X Achse (Horizontal von Links nach Rechts)

    "y" = Y Achse (Höhe zum 0 Punkt und der WasseroberflÀche)

    "z" = Z Achse (Vertikal von Unten nach Oben)


    der "0" Punkt des Objektes, ist dabei der Mittelpunkt des Objektes bzw. des GebÀudes oder in diesem Fall des Baumes.


    range="0.0" = max Reichweite / Radius des Spawn Punktes


    height="0.0" = max Höhe des Spawn Punktes


    flags="32" = Objektorientierung


    Auch hier wird damit wie eine Art Zylinder angegeben, in welchem unsere Äpfel spawnen dĂŒrfen

    und zusÀtzlich eine Orientierung festgelegt.



    Sooooo, ich hoffe das man es so weit durchschaut hat und das es einigermaßen verstĂ€ndlich genug war.

    Um aber jetzt noch unsere oben erwÀhnte Apfelutopie aufzuklÀren und wie das ganze nun am Ende funktioniert,

    verkrĂŒmeln wir uns noch einmal auf unsere Apfelplantage.


    Wie schon erwÀhnt, klÀren wir hier nun, wie diese ganzen Cluster, Baum und Container Sache nun zusammenhÀngt.

    DafĂŒr mĂŒssen wir uns nur noch einmal an die "mapgroupproto.xml" Standardeinstellungen erinnern,

    denn da sind 3 Sachen wichtig.


    Als Erstes die Zeile "default name="group" lootmax="6"",

    denn diese Zeile legt den Maximalwert fĂŒr einen Cluster fest.


    Anschließend die Zeile "default name="container" lootmax="4"",

    deren Standartwert wir noch einmal Àndern.


    Und als letztes "default name="clusterMatrix" de="TrajectoryApple" width="12" height="12"",

    welche Cluster und ClustergrĂ¶ĂŸe festlegt.



    Jetzt mĂŒssen wir uns in der "mapclusterproto.xml" ebenfalls ein paar Werte anschauen.


    Da haben wir zum einen "cluster name="AppleTree1" lootmax="2" maxinstances="150"",

    welche unseren oben erwÀhnten Standardwert von "4" auf "2" setzt.


    Und die Zeile "container name="branch" lootmax="1"" welche festlegt,

    wie viele Objekte pro Spawn Punkt auftauchen dĂŒrfen.



    Wir haben damit also folgende festgelegte Werte.


    Cluster = max. 6

    Baum = max. 2

    Spawn Punkt = max. 1


    Damit haben wir nach unserem oben angefangenem Beispiel zwar 9 BĂ€ume in einem Cluster,

    aber es dĂŒrfen nur maximal 6 Äpfel auftauchen und davon auch nur 2 gleichzeitig an einem Baum.

    Das können also 6 BĂ€ume mit jeweils einem oder 3 BĂ€ume mit jeweils 2 Äpfeln sein,

    1 Baum mit 2 und 4 BÀume mit einem Apfel, das ist am Ende zufÀllig,

    denn es können auch einfach mal ĂŒberhaupt keine oder nur ein Apfel auftauchen.

    Völlig wild die ganze Sache đŸ€Ł.

    In unserem Beispiel haben wir 9 Cluster, was also heißt, auf alle 12 m haben wir die Möglichkeit

    6 Äpfel zu finden, was bei maximalem Loot Erfolg bedeuten wĂŒrde,

    bei 9 Clustern mit a 6 Äpfeln, hĂ€tten wir am Ende 54 Äpfel đŸ˜±.


    Wilder wird es allerdings in einer Kombination mehrerer BĂ€ume, da wir dabei unterscheiden mĂŒssen,

    dass unser Cluster fĂŒr jeden "Trajectory" zĂ€hlt.

    Es wĂŒrde also 6 Äpfel und beispielsweise 6 Birnen auf ein 12 x 12 Cluster möglich sein,

    da in solch einem Moment der Maximalwert von 6 fĂŒr jede Art von BĂ€umen fĂŒr sich selber zĂ€hlt.

    So hÀtte man beim gleichen Beispiel mit 9 Clustern, aber unterschiedlichen BÀumen,

    also 4 Apfel und 5 Birnen BĂ€umen, bei maximalem Loot Erfolg nicht nur 54 Äpfel,

    sondern auch noch 54 Birnen đŸ€Ż.


    Das Ganze ist jetzt natĂŒrlich nur mal eine ĂŒbertriebene Darstellung 😅, aber so in etwa,

    kann man sich das grobe Prinzip vorstellen und ich hoffe, so kann man es ein wenig nachvollziehen

    und versteht es hoffentlich auch



    Wir hören aber an dieser Stelle auf, denn grundlegend war es das fĂŒr diesen Teil.

    Jetzt ist noch die Frage zu klĂ€ren, woher unser Server nun weiß,

    Wo denn jetzt genau all diese Objekte in der Welt stehen.


    Darum kĂŒmmern wir uns aber im Thema "mapgroupcluster.xml", weshalb ich mich an dieser Stelle wieder fĂŒr eure Zeit

    und Aufmerksamkeit bedanke und wir uns hoffentlich im nĂ€chsten Beitrag wieder sehen 😊.

  • Thema:



    mapgrouppos.xml


    Ein Herzliches Willkommen beim heutigen Thema und wie erwÀhnt,

    setzen wir hier die nÀchste wichtige Datei der "mapgroupproto.xml" fort.


    Hier wird sich mit der Position der einzelnen Objekte wie HĂ€user oder Fahrzeugwracks auseinandergesetzt.

    Da diese im Grunde eigentlich auch alle gleich sind, nehmen wir auch nur ein Beispiel

    und befassen uns mit den einzelnen Werten.


    Wir nehmen hierfĂŒr wieder ein Beispiel eines GebĂ€udes, welches uns bekannt vorkommen sollte 😁,

    nÀmlich dem "Land_Shed_M1".


    Ay5cKFh.png


    Quelle: dayz.fandom.com


    Code
       <group name="Land_Shed_M1" pos="201.383286 546.391113 11868.064453" rpy="-0.000000 0.000000 -69.709740" a="159.709732" />


    Teilen wir es wieder in seine Bestandteile, aufhaben wir viele Sachen, die uns schon sehr bekannt vorkommen sollten,

    aber auch einen kleinen Teil, der etwas komplizierter ist und auf den wir etwas nÀher eingehen werden.


    group name="Land_Shed_M1" = Gruppenname mit Namen des Objektes


    Name des Objektes bzw. der Gruppe, die wir in der "mapgroupproto.xml" angegeben haben.

    Es wird hier also angegeben, welche Spawn Gruppe an dieser Position steht und nicht das Objekt selbst.

    Es hat also auch keinerlei Auswirkung darauf, ob das Objekt an dieser Stelle steht

    und lÀsst sich damit auch nicht von der Karte löschen.

    WĂŒrden wir diesen Eintrag entfernen, wĂŒrden wir damit lediglich erreichen,

    das an dieser Postion kein Loot mehr erscheint.


    pos="201.383286 546.391113 11868.064453" = Position mit Koordinaten "x,y,z"


    Hier haben wir wieder unsere bekannten Koordinaten, welche die Position der Spawn Gruppe auf der Karte angeben.


    "x" = X Achse (Horizontal von Links nach Rechts)

    "y" = Y Achse (Höhe zum 0 Punkt und der WasseroberflÀche)

    "z" = Z Achse (Vertikal von Unten nach Oben)


    rpy="-0.000000 0.000000 -69.709740" = Objekt Positionsanpassung mit "Roll,Pitch,Yaw" in °.


    Auch hier haben wir wieder bekannte Werte, bei denen es sich um die Ausrichtung der Gruppe handelt.


    r = "Roll" = Neigung nach links oder rechts in °

    p = "Pitch" = Kippen nach vorn oder hinten in °

    y = "Yaw" = Drehung um die eigene Achse in °


    a="159.709732" = Ausrichtungswinkel


    Hier wird es nun etwas kompliziert, denn wir haben Folgendes Problem.

    Unsere Werte "rpy" geben im Grunde die Ausrichtung einer Gruppe an, wobei mit "y" Bzw. "Yaw" die Drehung

    um seine eigene Achse angegeben wird. Es wird also an dieser Stelle eigentlich schon gesagt,

    in welche Richtung unsere TĂŒr schaut.

    Allerdings kann es sein, dass je nach Objekt, Tool, Programm etc. dieser Winkel nicht stimmt.

    Dies kann daran liegen, dass ein Modell Beispielsweise ein anderes Vorne hat als unsere Spielwelt.

    Es ist wieder mehr so ein Programm und Visualisierungsproblem.

    Um das Ganze Visuell mal an einem Beispiel zu zeigen, schauen wir uns mal ein Beispiel

    mit einem Monopoly Spielbrett an.


    Dabei haben wir fĂŒr uns Spieler das Spielbrett so vor uns liegen, dass wir das "Los" Feld immer lesen könnten.

    Es wĂ€re also immer links von uns und der Pfeil wĂŒrde ebenfalls von rechts nach Links zeigen.


    JJSfIA3.png



    Stellen wir uns nun aber vor, der Pfeil wĂŒrde aus irgendwelchen GrĂŒnden und in Wirklichkeit

    immer nach Oben / Norden zeigen.


    Y5bdfAR.png



    Wir hÀtten also das Problem, dass wir als Spieler zwar unser "Los" lesen könnten und von links nach rechts laufen,

    unser Server, Spiel oder Programm sieht es mehr oder weniger anders, denn da zeigt der Pfeil ja nicht nach links

    sondern in Richtung Norden.


    Um dieses Problem zu richten, mĂŒsste man sich also etwas ĂŒberlegen, womit beider Parteien,

    also wir als Spieler, als auch der Server klarkommen, da wir die Objekte anders sehen,

    als beispielsweise der Server.


    Und hier kommt der "a" Wert ins Spiel, da dieser den "y" Wert fĂŒr das Spiel in den "a" Wert umwandelt.

    Dieser ist quasi um 90° gedreht und hat mehr oder weniger sogar seine eigenen Formeln, um diesen zu berechnen.

    Bzw. hat er eigentlich sogar 2 Formeln 😅.


    Zu aller erst verweise ich aber mal auf ein Video von "Scalespeeder" in dem das ganze auch nochmal ein wenig erklÀrt wird.


    DayZ YPR To A Converter For Mapgrouppos.xml : Spawning Loot In Custom Buildings Xbox PlayStation PC



    Auch von "Josie Garfunkle" gibt es hierzu ein Video mit einem Tool.


    DayZ XML Injector Bot | MapGroupPos Pull Tool



    Sollte aber erst mal reichen, denn es gibt mehrere Wege und mit Sicherheit auch unzÀhlige Seiten und Möglichkeiten.


    Als Formeln selbst können wir aber folgendes nutzen.


    a = (360 - y) - 270, wenn der "y" Wert in einem positiven Bereich oder bis max -90° liegt.

    Also grob gesagt alles zwischen -90° bis 360°


    a = (-180 - y) - 90, wenn der "y" Wert in einem negativen Bereich ĂŒber -90° liegt.



    Nehmen wir nun unser Beispiel "Land_Shed_M1" hÀtten wir einen "y" Wert von "-69,709740".

    Da der Wert die -90° nicht ĂŒbersteigt, gilt hier also die Formel "a = (360 - y) - 270"

    Was also folgendermaßen aussieht.


    a = (360 - -69,709740) - 270

    a = 429,70974 - 270

    a = 159,70974


    Schauen wir uns nun den Wert aus unserem Beispiel und unserer Rechnung an,

    haben wir im Beispiel den Wert "159,709732" und in unserer Rechnung ein Ergebnis von "159,70974".

    Wir sehen also, wir kommen auf fast das exakt gleiche Ergebnis 👍, wobei der Originalwert

    aus mehreren GrĂŒnden von unserer Rechnung abweichen kann.


    So können wir aber ein wenig entgegen rechnen, um zu sehen, dass wenn wir in dieser Datei

    ein neues Objekt einfĂŒgen oder einfĂŒgen lassen,

    Wir auch den Richtigen "a" Wert haben.


    ZusÀtzlich und wie auch im Video von "Scalespeeder" lege ich hier mal einen Link zu einer Datei

    oder besser gesagt 2 Dateien, von Tabellen, in denen wir dafĂŒr eine automatische Berechnung haben.

    Diese wurde von "Scalespeeder" erstellt, um uns ein wenig das Rechnen leichter zu machen

    und um uns ein wenig die Zeit zu ersparen.


    DayZ y nach a Kalkulator fĂŒr Mapgrouppos.xml



    Nehmen wir uns Spaßens halber jetzt mal noch 2 Beispiele.

    Ein Beispiel bei dem der Wert ĂŒber -90° liegt und eines, wenn der "y" Wert "0" betrĂ€gt.


    Code
        <group name="Land_House_1W12" pos="266.296173 189.660706 6589.994141" rpy="-0.000000 0.000000 -161.286377" a="-108.713608" />


    Unser y Wert lautet hier "-161,286377" womit wir also die Formel "a = (-180 - y) - 90" anwenden mĂŒssen.


    a = (-180 - -161,286377) - 90

    a = -18,713623 - 90

    a = -108,713623


    Vergleichen wir hier wieder unsere Werte haben wir aus unserer Rechnung ein Ergebnis von "-108,713623"

    und im Original einen Wert von "-108,713608", was also auch hier wieder der Korrekte "a" Wert ist 👍.



    Als NĂ€chstes haben wir noch unseren Wert "0" als Berechnung mit der Formel "a = (360 - y) - 270".


    Code
        <group name="Land_Container_1Aoh" pos="1153.822021 152.249237 6217.505371" rpy="-0.000000 0.000000 0.000000" a="90.000000" />


    a = (360 - 0) - 270

    a = 360 - 270

    a = 90


    Auch hier können wir unser Ergebnis und den Originalwert gegenĂŒberstellen

    und sollten auch hier wieder sehen, dass in beiden FĂ€llen

    das Ergebnis "90" betrĂ€gt 👍.



    Soweit so gut sollte es das fĂŒr diesen Teil aber gewesen sein,

    denn mehr ist es hier auch nicht.


    Aufgrund von hier und da eventuell fehlenden Beispielen, werde ich, wenn es mir die Zeit erlaubt,

    am Ende des gesamten Beitrages noch Beispiele versuchen einzubauen und anzuwenden.

    In welcher Form und wie ich das ganze mache, muss ich natĂŒrlich selber noch schauen,

    aber das sollte machbar sein und das ganze mit einer Art praktischem Teil abrunden 😁.



    Damit wĂŒrde ich mich aber auch in diesem Thema verabschieden, freue mich das ihr wieder dabei wart,

    Lust und Zeit mitgebracht habt und wir sehen uns im nĂ€chsten Thema 😊.

  • Thema:



    mapgroupcluster.xml


    Und natĂŒrlich auch hier wieder Willkommen beim heutigen Thema "mapgroupcluster" 😁,

    welche Àhnlich wie die "mapgrouppos.xml" Koordinaten aller

    auf der Karte stehenden Cluster Objekten versehen ist.


    Bei den Clusterobjekten zÀhlen jegliche Art von BÀumen oder Objekten,

    die eben nicht ĂŒber die "mapgroupproto.xml" in Loot Gruppen,

    sondern in der "mapclusterproto.xml" erstellte Objekte.


    Da dies aber auch jede Menge Objekte sind und um Verwirrung aus dem Weg zu gehen,

    Schauen wir uns zu aller erst die letzte Zeile in dieser Datei an.

    Denn hier sieht man einen kleinen Trick, mit dem wir unser bekanntes Problem

    mit der Limitierung von DateigrĂ¶ĂŸe und Zeilenanzahl umgehen können.


    Code
        <include file="mapgroupcluster01" />


    Dies steht am Ende, um auf eine nachtrÀgliche Datei zu verweisen, in der die Liste fortgesetzt wird.

    Daher gibt es also nicht nur eine "mapgroupcluster.xml", sondern eben auch noch "mapgroupcluster01.xml",

    "mapgroupcluster02.xml", "mapgroupcluster03.xml" und "mapgroupcluster04.xml"


    Jede dieser Dateien beinhaltet also wieder dasselbe, weshalb wir uns auch hier wieder nur einer Zeile bedienen

    und uns ein Beispiel rau picken, welches uns bekannt vorkommen sollte.


    Code
        <group name="AppleTree1" pos="134.054962 428.124176 10424.508789" a="-58.978695" />


    Teilen wir diese jetzt wieder in ihre Bestandteile auf, haben wir folgende wichtige Werte.


    name="AppleTree1" = Cluster Name


    Hier haben wir den Cluster Namen, welcher in der "mapclusterproto.xml" hinterlegt ist.


    pos="134.054962 428.124176 10424.508789" = Position mit Koordinaten "x,y,z"


    Wie auch in der "mapgrouppos.xml" haben wir hier wieder die Position des Objektes in der Welt.


    "x" = X Achse (Horizontal von Links nach Rechts)

    "y" = Y Achse (Höhe zum 0 Punkt und der WasseroberflÀche)

    "z" = Z Achse (Vertikal von Unten nach Oben)


    a="-58.978695" = Ausrichtungswinkel


    Und auch hier haben wir wieder wie in der "mapgrouppos.xml" unseren "a" Wert,

    welcher auch hier wieder die Rotation des Objektes angibt.



    Warum haben wir hier keinen "rpy" Wert?

    Nun ja, das ist fast schon simpel, denn z.B. BĂ€ume stehen in der Welt tendenziell immer senkrecht.

    Sie sind in der Regel nie gedreht oder gekippt, was also diese Werte ĂŒberflĂŒssig macht.

    Damit ist "a" hier also unser einziger und absoluter Rotationswert,

    der die Ausrichtung bestimmt.



    Das sollte es aber hier auch schon wieder gewesen sein.

    Platzieren wir mit einem Tool natĂŒrlich einen Baum, mĂŒssen wir mit den Formeln,

    die wir in der "mapgrouppos.xml" kennengelernt haben

    unseren "a" Wert ausrechnen, aber grundlegend gibt es hier nichts weiter.


    Daher wĂŒrde ich mich an dieser Stelle verabschieden,

    euch fĂŒr eure Zeit und eure Geduld danken und hoffe natĂŒrlich,

    dass wir uns auch im nĂ€chsten Thema wiedersehen 😁.

  • Thema:



    mapgroupdirt.xml


    Wieder mal ein herzliches Willkommen zum heutigen Beitrag und Thema.

    Wir widmen uns hier der "mapgroupdirt.xml" und fangen auch gleich mit der Vanilla Datei an đŸ€ŁđŸ˜….


    Code
    <map>
    </map>


    So ja, was soll man dazu sagen, wie wir sehen, sehen wir nichts đŸ€Ł.


    TatsÀchlich ist diese Datei leer und beinhaltet quasi nichts und Naja,

    ich hab jetzt nen Monat gesucht und versucht das ein oder andere zu finden,

    ein wenig selber versucht, aber was Sinnvolles oder etwas Funktionelles

    ist dabei nicht6 wirklich herumgekommen 😅.

    Bevor ich also noch ewig daran sitze und um auch endlich mal weiter zu kommen,

    bleibt bei diesem Thema erst einmal nur zu sagen, dass diese Datei Kartengruppen enthalten soll,

    die nicht an ein bestimmtes Karten Objekt gebunden sind.

    Wie weit dies nun genau zu verstehen ist, finde ich hoffentlich noch heraus,

    aber bis dahin mĂŒssen wir wohl erst mal damit leben 😅.


    Ich werde es natĂŒrlich nachtragen oder es findet sich jemand,

    der eine genaue Antwort und ein Beispiel geben kann 😁.


    Bis dahin aber wieder ein Dank fĂŒr eure Aufmerksamkeit

    und eure Zeit, wir sehen uns dann einfach im nĂ€chsten Thema 😉.

  • Einfach nochmal danke fĂŒr deine ganze MĂŒhe!
    Die BeitrÀge sind einfach WOW... und ich hab das Beispiel mit Monopoly gefeiert XD

    Vielen vielen Dank, dass du das mit uns teilst :)


    PS: Und irgendwann wirst du das Mysterium um die "mapgroupdirt.xml" bestimmt auch lösen ;)