Thema:
types.xml
Herzlich willkommen zu einem der wichtigsten Punkte unserer Reise,
denn hier legen wir fest, welches Objekt wo spawnen darf.
Und nicht nur das, wir legen hier ebenso die Anzahl fest, wie einzigartig es sein kann,
indem wir z.B. festlegen, dass es ein Objekt nur bis zu einer bestimmten Anzahl auf der Karte existieren darf.
Und auch sehr wichtig, da die Frage schon sehr oft gestellt wurde, die Lebensdauer der Objekte.
Und damit sind nicht die Lebenspunkte gemeint 😅.
Aber fangen wir mal wie immer mit der Grunddatei an, die ich hier natürlich nicht komplett eintragen werde.
Es sprengt sonst einfach den Rahmen, wenn man hier die Komplette Types einträgt 🤣.
Ich werde mir einfach ein paar Objekte aussuchen, da es auch hier ein paar kleine Details zu Arten
und Verwendungszwecken von Objekten gibt.
Grundlegend sind sie natürlich alle gleich, aber am Ende hoffe ich, wird jeder den Unterschied verstehen
und auch das, was ich damit genau meine.
Als Beispiele nehme ich aber jeweils eines und gehe anschließen auch einzeln darauf ein.
Erstmal ein normales Objekt, was auch gleich als Grundlage dient, da wie schon gesagt,
im Kern alle gleich sind. Daher wird dies auch das Hauptbeispiel sein.
<type name="BakedBeansCan">
<nominal>15</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>12</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="food"/>
<tag name="shelves"/>
<usage name="Town"/>
<usage name="Village"/>
<value name="Tier1"/>
<value name="Tier2"/>
<value name="Tier3"/>
</type>
<type name="BakedBeansCan_Opened">
<nominal>0</nominal>
<lifetime>9000</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="food"/>
</type>
Alles anzeigen
Gefolgt von einem Herstellbaren Objekt und einem Basenbau Objekt.
<type name="WatchtowerKit">
<nominal>0</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="tools"/>
</type>
<type name="Watchtower">
<nominal>0</nominal>
<lifetime>3888000</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
</type>
Alles anzeigen
Als Nächstes nehmen wir uns ein Fahrzeug und auch gleich ein Fahrzeugteil.
<type name="Hatchback_02">
<nominal>0</nominal>
<lifetime>3</lifetime>
<restock>1800</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
</type>
<type name="Hatchback_02_Wheel">
<nominal>40</nominal>
<lifetime>28800</lifetime>
<restock>0</restock>
<min>30</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="lootdispatch"/>
<usage name="Industrial"/>
</type>
Alles anzeigen
Als Nächstes kommen wir zu einem Infizierten Bzw. einem KI-Objekt, da Tiere dasselbe nur in lebend sind 🤣.
<type name="ZmbF_ParamedicNormal_Blue">
<nominal>0</nominal>
<lifetime>1800</lifetime>
<restock>0</restock>
<min>1</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
</type>
Jetzt haben wir noch ein Event, Bzw. dynamisches Objekt.
<type name="Land_Wreck_Volha_Police">
<nominal>0</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<usage name="Police"/>
</type>
Alles anzeigen
In der Hoffnung, ich habe nichts vergessen, sollten dies so weit alle Objekttypen sein,
womit wir auch gleich zu den Grundkenntnissen anhand des einfachen Objektes kommen.
Dafür müssen wir natürlich auch die einzelnen Zeilen verstehen und wissen,
wofür diese eigentlich gedacht sind.
Wer möchte, kann natürlich auch gerne nochmal im Post Beschreibung Types.xml nachlesen.
Fangen wir aber an und fackeln nicht lange 😅.
Als Erstes haben wir immer "<type ", was für die Aufzählung der Objekte wichtig ist
und damit das Spiel weiß, wann die Einstellungen für ein Objekt anfangen und wo diese aufhören.
Anschließend kommen die einzelnen Zeilen mit ihren entsprechenden Werten.
name="BakedBeansCan" = Name des Objektes aus den "Config" Einstellungen
Das bedeutet also, hier wird nicht eingetragen, wie das Objekt an sich heißt.
Also nicht "Gebackene Bohnen in der Dose" sondern eben "BakedBeansCan",
da dies der Name des Objektes ist und nicht wie es für wen in der entsprechenden Nationalität heißt 😅.
nominal>15</nominal = Maximale Anzahl des Objektes, wenn Platz vorhanden ist
Hiermit wird also die maximale Anzahl und kein Durchschnittswert angegeben (in diesem Fall 15).
Nach oben sind hier keine Grenzen gesetzt, zumindest nicht im eigentlichen sinne.
Wichtig ist hier nämlich zum einen der Platz auf dem Server, da dieser versucht die gewünschte Menge
spawnen zu lassen. Am Supermarkt Beispiel könnte man sagen, wir hätten ein Regal, in dem 15 Äpfel liegen.
Nimmt ein Kunde einen dieser Äpfel mit, kommt ein Mitbarteiter und legt einen neuen hin,
damit wieder 15 Äpfel verfügbar sind. Solange wir in das Regal natürlich auch nichts anderes hinein legen.
Denn darauf kommt es natürlich auch noch an. Nehmen wir einen Apfel weg und legen dafür etwas anderes in das Regal,
können wir natürlich keinen mehr hineinlegen.
Liegt der Wert bei 0, wird auf normalem Wege das Objekt nicht gespawnt, wobei eben hier die Betonung auf "Normal" liegt.
Denn alle in "nominal" eingetragenen Werte beziehen sich immer auf den Dynamischen Loot.
Wer es also bemerkt hat, hat feststellen können, dass eben bei KI, Fahrzeugen oder anderen Objekten der Wert "0" eingetragen ist.
Da der Server natürlich eine Types für Objekte benötigt, muss es darin enthalten sein. Soll es aber nicht auf natürliche weise spawnen,
wird eben der Wert auf "0" gesetzt um dies zu verhindern.
Wichtig ist hierbei auch noch, dass andere Dateien unabhängig von der types.xml arbeiten. Selbst wenn wir unserer Dose den Wert "0" geben,
sie aber in z.B. der cfgspawnabletypes.xml als Beute in einen Infizierten packen,
wird der Infizierte diese auch haben. Somit kann man also z.B. bestimmten Loot tatsächlich nur als Trophäe für das Töten von Infizierten festlegen.
lifetime>14400</lifetime = Maximale Lebenszeit eines Objektes auf dem Server in "s"
Hier wird mit einem Wert die Lebensdauer in Sekunden festgelegt, wie lange ein Objekt maximal auf dem Server verweilen darf,
bevor es despawnt wird.
Dies bezieht sich aber hauptsächlich auf Objekte, mit denen interagiert wurde. Auch wenn sich hier wie bei vielen Dingen die Geister streiten.
Wir haben gelernt, dass es Einstellungen gibt, die dem Server sagen, wann er Loot despawnen soll oder kann, was also an sich bedeutet,
dass, wenn wir diese Dose sehen, aber nicht mitnehmen, sondern uns von dieser entfernen, bis sie nicht mehr in unserer Spieler Blase ist,
oder wir uns sogar ausloggen, diese auch schon nach einer Stunde verschwunden sein kann.
Hatten wir sie in der Hand, würde sie für 14400 s, also 4 Stunden auf dem Server liegen, wenn wir sie natürlich einfach nur auf den Boden legen.
Ein Fass steht leider nach dem Spawnen nicht immer 45 Tage an derselben Stelle, da müsste ich leider ein Veto einlegen,
da ich schon Fässer oder allgemein Objekte hatte, die in der Theorie hätten, länger an einem Ort stehen bleiben müssen,
es aber nicht getan haben. Ist halt blöd, wenn man sich darauf verlässt, sich Plätze markiert, etwa 10 Tage später diese dann abklappert
aber nur noch rund die Hälfte tatsächlich da ist. Und das bei einem Server für nur eine Person 🤣.
Es war niemand da, der hätte klauen können 😅.
Der Server merkt letztendlich, ob sich in gewissen Gebieten Spieler bewegen und verteilt den Loot dementsprechend auch gern vor Ablauf der Lifetime neu.
Im Grunde ist es nicht wirklich richtig, aber auch nicht wirklich verkehrt, da der Server ein gewisses Eigenleben besitzt 😂.
Des Weiteren gilt hier natürlich auch, dass die Lifetime sich nur auf Objekte bezieht, die auf dem Boden liegen oder unter Umständen auch mal in der Luft hängen 😅.
Also eben nicht für Objekte im Charakterinventar oder in irgendeinem Inventar. Es zählt eben immer das Objekt, welches Ihr auf den Boden legt.
Legt ihr eine Hose in z.B. einen Schutzkoffer bleibt dieser natürlich für 45 Tage liegen und beinhaltet auch die Hose die 45 Tage.
Legt Ihr den Koffer in die Hose, ist beider nach 4 Stunden verschwunden, da die Lifetime der Hose zählt 🤣.
Ein ebenso wichtiger Aspekt ist der Ruhemodus eines Servers. Gerade bei Servern, die eventuell nur mal für eine kleine Runde zu zweit oder alleine sind,
kann es vorkommen, dass nach dem Ausloggen der Server in den Ruhemodus fällt und erst wieder richtig hoch fährt, wenn sich jemand auf diesem einloggt.
Das kann unter Umständen dazu führen, dass Objekte auch gern mal eine Woche an einem Platz liegen, obwohl sie hätten verschwinden müssen.
Dies weiß ich tatsächlich aus eigener Erfahrung und fiel mir auf einem kleinen Test Server auf, als wir eine Maske aufgesammelt haben,
und diese 5 Tage später immer noch an derselben Stelle lag. In der Zwischenzeit war niemand auf dem Server und direkt ausgeschaltet
oder herunter gefahren hat ihn auch niemand. Entweder war es ein dummer Zufall, oder wieder der Beweis für das Eigenleben eines Servers 😅.
restock>0</restock = Timer in "s" für das Auffüllen des Objektes
Dies ist eigentlich relativ simpel erklärt, denn wie der Name schon sagt, ist es nur ein Timer der abläuft
und dem Server erlaubt, das Objekt mit der "nominalen" Anzahl wieder zu füllen.
Nehmen wir wieder unseren Supermarkt und Apfel als Beispiel, bedeutet es, dass unser Mitarbeiter z.B. bei einem Wert von "1800", 30 Min. Zeit hat,
bis er einen neuen Apfel in das Regal legt. Dabei wird der Timer für jedes und nicht für alle Objekte festgelegt.
Das bedeutet im Grunde nur, wenn wir alle 10 min einen Apfel nehmen, würde unser Mitarbeiter nach dem 3 Apfel wieder einen neuen in das Regal legen dürfen,
da für den ersten die 30 min schon vorbei sind.
Bei dem Wert "0" wird das Objekt eben sofort irgendwo nach gespawnt.
min>12</min = Minimale Anzahl des Objektes
Erst einmal vorweg, auch wenn es einen "min" Wert gibt, es gibt keinen "max" Wert, da "nominal" den maximalen Wert darstellt.
Aber wie Minimal schon sagt, wird hier eben die minimale Anzahl eines Objektes festgelegt.
Wird dieser Wert unterschritten, wird der Server versuchen diesen umgehen bis zu diesem Wert wieder aufzufüllen.
Wenn wir in unserem Markt also sagen, dass wir immer 10 Äpfel in unserem Regal liegen haben,
würde unser Mitarbeiter also umgehend lossprinten und einen Apfel holen, sobald nur noch 9 in unserem Regal liegen,
sogar ungeachtet vom "restock" Wert.
Natürlich ist oder wäre es bei einem "restock" wert von 0 egal, da unser Apfel Regal in solch einer Situation immer wieder aufgefüllt wird,
sobald jemand einen nimmt. Allerdings darf man hier nicht vergessen, dass unser Mitarbeiter nicht die ganze Schicht über an einem Regal steht.
Zum anderen kann es natürlich auch passieren, dass je nach Loot und Spieler Bubble Objekte in hohen Mengen gleichzeitig aufgesammelt werden.
quantmin>-1</quantmin = Minimale Füllmenge Objekt
quantmax>-1</quantmax = Maximale Füllmenge Objekt
Hierbei handelt es sich um den Inhalt, die Aufladung oder die Menge bei Objekten, die dies eben als Voraussetzung haben.
Es ist nicht der Schaden an einem Objekt, sondern beispielsweise die Füllmenge an Wasser,
die eine Plastikflasche beim spawnen beinhalten kann.
Der Wert, den wir eintragen können, wird in "%" angegeben, was also bei einer Flasche mit einem Liter Fassungsvermögen bedeuten kann:
quantmin>25</quantmin = 250ml
quantmax>100</quantmax = 1000ml bzw. 1l
Selbes kann man beispielsweise auf einzeln spawnende Munition anwenden. Da diese meist in etwa 25 Patronen beinhalten,
würde es eben wie folgt aussehen:
quantmin>10</quantmin = 3 Patronen (Es wird aufgerundet)
quantmax>80</quantmax = 20 Patronen
Und genau da sind wir eben wie schon angesprochen wieder bei der guten alten Mathematik, denn hier haben wir unter Umständen ein kleines Problem 😅.
Denn wer beispielsweise auf seinem Server die Stack-Größen erhöht, sollte auch hier die entsprechenden Anpassungen vornehmen.
Beispielsweise hätten wir beim gleichen min. oder max. Wert und einer maximalen Stapelgröße von z.B. 250 Patronen folgendes Problem:
quantmin>10</quantmin = 25 Patronen
quantmax>80</quantmax = 200 Patronen
Die Stapel, die wir finden, würden sich eben immer zwischen 25 und 200 Kugeln befinden,
was in solch einem Falle sämtliche Munitionsboxen überflüssig machen würde 😅.
Wird der Wert mit "-1" angegeben, beträgt die Füllmenge 0 und wird daher nur bei Objekten genutzt, welche eben keine haben,
also Kleidung, Waffen, etc....
cost>100</cost = Priorität
Hiermit können wir festlegen, wie hoch die Priorität für das spawnen eines Objektes sein soll,
Also, ob es beispielsweise vor anderen Objekten spawnen soll.
Hier kann man es auch wieder relativ gut und einfach mit dem Supermarkt erklären und z.B. sagen,
unsere Äpfel hätten eine Priorität von 100 und Birnen nur von 50.
Würde ein Kunde jeweils von beiden ein paar mitnehmen,
würde unser Mitarbeiter eben vorrangig wieder unsere Äpfel auffüllen.
flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
Hier haben wir verschieden Möglichkeiten, unseren Objekten ein paar kleinere Eigenheiten zu verpassen.
Diese werden entweder mit "1" aktiviert oder mit "0" aktiviert.
Es handelt sich dabei hauptsächlich um das Zählen von Objekten, also ob beim Berücksichtigen des nominal Wertes
bestimmte Objekte z.B. im Inventar berücksichtigt werden sollen.
Gehen wir aber alle wieder einzeln durch.
count_in_cargo="0" = berücksichtigen von Objekten in Objekten
Hier zählen nur einfache Objekte oder Objekte die ständig in Bewegung sind und
nicht grundlegend für Basen oder zum Horten gedacht sind.
Darunter zählt Kleidung, Rucksäcke oder beispielsweise Fahrzeuge.
Anhand von Einstellungen könnte man sagen, dass es alle Objekte betrifft,
die keine Lebensdauer von 45 Tagen haben.
Fahrzeuge sind leider etwas anderes, da diese grundlegend erst eine Lebensdauer haben,
wenn ein Spieler damit interagiert hat.
count_in_hoarder="0" = berücksichtigen von Objekten in Containern oder Behältern
Hierbei handelt es sich wiederum um eben die genannten Basen Objekte.
Alles was für einen längeren Zeitraum auf der Karte stehenbleibt und sich wieder
auf die 45 Tage bezieht. Darunter zählen Fässer, Kisten oder Zelte.
count_in_map="1" = berücksichtigen von Objekten auf der Karte
Damit sagen wir, ob Objekte, die bereits auf der Karte existieren, mit berücksichtigt werden sollen.
Dieser Einstellung sollte grundlegend auf "1" gelassen werden,
da sonst der Server vom Objekt überflutet wird 😅.
Im Grunde würden wir unserem Mitarbeiter eine Augenbinde umlegen und eine Kiste Äpfel hinstellen,
die er blind reinfeuert 🤣.
count_in_player="0" = berücksichtigen von Objekten im Spielerinventar
Wie die anderen auch, wird hier nur festgelegt, ob Objekte, die der Charakter bei sich trägt mitgerechnet werden soll.
Dabei werden nur Charaktere gezählt, die sich auf der Map befinden.
Sobald sich ein Charakter mit einem entsprechendem Objekt ausloggt,
wird der Server das nach einem gewissen Zeitraum merken und diese Objekte auch wieder nach spawnen.
Es wäre ja sonst ein wenig irrational, wenn sich ein Spieler auf Servern einloggt, sämtliche Objekte einsammelt,
diese anschließend auf einem anderen Server hortet, während auf allen anderen nachher das Objekt nicht mehr spawnt 😅.
Gleiches gilt aber auch wieder andersherum.
Hat ein Spieler 1 oder mehrere von diesem Objekt bei sich und loggt sich auf einem anderen Server ein,
würde auch hier das spiel wieder zählen und merken, dass zu viele oder die max. Anzahl dieses Objektes erreicht sind.
Dementsprechend würden nach dem de spawnen der Objekte diese nicht mehr nach spawnen,
da der Charakter diese bei sich trägt.
crafted="0" = Herstellbares Objekt
Mit dieser Einstellung legen wir fest, ob ein Objekt herstellbar ist.
Dabei sollte man 2 Dinge unterscheiden, bevor es zu Missverständnissen kommt.
Legen wir hier den Wert "1" fest, würde das Objekt nicht spawnen, da wir festlegen, dass es eben ein Herstellungsobjekt ist.
Haben wir hingegen ein Objekt, was wir zwar herstellen können, aber dennoch in der Welt zu finden sein soll,
muss hier der Wert "0" angegeben werden.
Nur weil ein Objekt eben herstellbar ist, müssen wir hier nicht zwingend den Wert mit "1" anpassen,
da wir eben sonst dafür sorgen, dass es eben nicht mehr in der Welt zu finden ist.
deloot="0" = "d" Dynamischer "e" Event Loot
Hier können wir im Prinzip bestimmen, ob unser Objekt nur bei Events spawnen soll.
Dazu zählen z.B. Helikopter Abstürze, Polizei Events wie Straßensperren oder Konvois.
Setzen wir unseren Wert hier auf "1", wird unser Objekt nur an solchen Events auftauchen
und nicht wie normaler Loot irgendwo auf der Karte zu finden sein.
Soweit so gut,
Jetzt kommen wir noch zu unserem Supermarkt Prinzip, welches wir in der cfglimitsdefinition.xml gelernt haben,
da mit dem nächsten Abschnitt festgelegt werden kann, wo unser Objekt spawnen kann.
Dafür haben wir wieder die "category", den "tag", die "usage" und die "value".
Da ich diese in der cfglimitsdefinition.xml schon erklärt habe, werde ich hier jetzt nicht nochmal alle auflisten, wenn das OK ist 😅,
sondern werde es nur an bisherigen Objekt, der "BakedBeansCan", noch einmal kurz und knapp erklären.
Da haben wir nun folgende Einstellungen.
category name="food"/>
tag name="shelves"/>
usage name="Town"/>
usage name="Village"/>
value name="Tier1"/>
value name="Tier2"/>
value name="Tier3"/>
Es wurde also festgelegt, dass das Objekt an Orten spawnen darf, an denen Nahrung (food) erlaubt ist.
Das Objekt soll wenn möglich nicht auf dem Boden, sondern in Regalen oder auf Tischen (shelves) spawnen
und ist in Dörfern (Village) und in Städten (Town) der Schwierigkeitsstufen oder Zonen 1 bis 3 (Tier1 - Tier3) zu finden.
Wer aber noch die ersten Zeilen dieses Posts im Kopf hat,
wird sich abgesehen von den "BakedBeansCan" noch an die "BakedBeansCan_Opened" erinnern.
Denn ab hier kommen wir zu den Abweichungen, Eigenheiten, Unterschieden und Besonderheiten spezieller Objekte.
Da wir aber nun die Grundlagen kennen, können wir auch hier ein wenig tiefer tauchen
und fangen auch gleich mit der "BakedBeansCan_Opened" an, da es sich hierbei um ein hergestelltes Objekt handelt.
<type name="BakedBeansCan_Opened">
<nominal>0</nominal>
<lifetime>9000</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="food"/>
</type>
Alles anzeigen
Zusätzlich hänge ich hier auch gleich noch einmal die Basenbau Objekte an,
damit hier ggf. auch gleich noch einmal verglichen werden kann 😅.
<type name="WatchtowerKit">
<nominal>0</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
<category name="tools"/>
</type>
<type name="Watchtower">
<nominal>0</nominal>
<lifetime>3888000</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
</type>
Alles anzeigen
Was genau ist der Unterschied zu herkömmlichen Objekten?
Bei Herstellbaren Objekten, wird zum einen kein "nominal" und auch kein "min" Wert benötigt,
da das Objekt weder spawnt noch eine dementsprechende Spawn Anzahl braucht.
Zum anderen sehen wir, die schon oben erwähnte Einstellung "crafted" mit dem Wert "1",
was dem Server sagt, dass dieses Objekt eben ein Herstellungsobjekt ist und nicht gespawnt werden soll.
Die "lifetime" der Objekte ist wie wir sehen unterschiedlich und sorgt trotz allem dafür,
dass unser hergestelltes Objekt, nach dem wir es im Prinzip erschaffen haben,
nach einer gewissen Zeit wieder verschwindet oder wie im Falle des "Watchtower",
für einen längeren Zeitraum auf dem Server verweilen kann.
Da wir unser Objekt im Prinzip aber erschaffen und nicht spawnen lassen,
benötigen wir weder einen "restock", einen "quantmin" oder "quantmax" Wert.
Eben sowenig benötigen wir die "cost" Einstellung, noch die einzelnen Angeben,
wo das Objekt auftauchen bzw. spawnen darf.
Mit diesem Wissen, könnte unsere Type für alle 3 Objekte auch folgendermaßen geschrieben werden,
ohne, dass es das Spiel oder den Server stören sollte.
<type name="BakedBeansCan_Opened">
<lifetime>9000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
</type>
<type name="WatchtowerKit">
<lifetime>14400</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
</type>
<type name="Watchtower">
<lifetime>3888000</lifetime>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="1" deloot="0"/>
</type>
Wie auch schon im Thema cfglimitsdefinitionuser.xml angesprochen,
haben die Dateien ein Limit von Zeilen und Größe, weshalb ich nicht ganz weiß,
warum man diese Objekte nicht von Haus aus so schreibt, um eben Platz zu sparen.
Aber das soll nicht unser Problem sein.
Getestet habe ich das ganze auf einem älteren Server und der lief mit diesen Abänderungen ohne Probleme.
Werder sind irgendwo Wachtürme gespawnt, noch sind sie einfach verschwunden.
Es lief so, wie es eben laufen sollte, würde aber trotz des Wissens empfehlen,
die Vanilla Einstellungen zu behalten. Wer natürlich möchte, kann es gern ausprobieren
und wir gehen derweil zu den Fahrzeugen, da es auch hier ein paar Besonderheiten gibt.
Dafür natürlich noch einmal der Grundaufbau und danach ´schauen wir uns das genauer an.
<type name="Hatchback_02">
<nominal>0</nominal>
<lifetime>3</lifetime>
<restock>1800</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
</type>
<type name="Hatchback_02_Wheel">
<nominal>40</nominal>
<lifetime>28800</lifetime>
<restock>0</restock>
<min>30</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="lootdispatch"/>
<usage name="Industrial"/>
</type>
Alles anzeigen
Hier müssen wir das ganze aber ein wenig aufteilen und nehmen uns erst einmal das Fahrzeug vor.
Da diese als Event funktionieren, haben wir hier schon einmal die Abweichung des "nominal" und "min" Wertes.
Dieser wird hier mit "0" angegeben, da Fahrzeuge ihre Werte für die Anzahl aus der Events.xml beziehen.
Dadurch sind die hier eingetragenen Werte wieder überflüssig. Wir sind also wieder bei "Könnte man sich eigentlich sparen, aber naja".
Als Nächstes haben wir wieder die "lifetime", welche mit "3" angegeben ist.
Nun ist es aber im Grunde so, dass Fahrzeuge eine Lebensdauer haben, die nicht an irgendwelchen Dateien gemessen wird,
sondern haben in der Regel eine festgelegte Lebensdauer von "3888000" bis unendlich.
Somit muss und brauch dieser Wert auch keinerlei Anpassungen, da es keinerlei Veränderungen mit sich bringen würde.
Anders wird es NUR, wenn wir mit Mods wie z.B. Händlern arbeiten, da diese tatsächlich die Lebenszeit aus der Types.xml übernehmen.
Damit Fahrzeuge aber nicht an irgendwelchen Wegesrändern versauern, hat auch hier zum einen unser Server sein Eigenleben
und zum anderen haben wir noch die Events.xml zu der wir natürlich später kommen.
Selbes gilt natürlich auch für den "restock" Wert und die "cost", so wie für "quantmin" und "quantmax".
Wichtig ist allerdings die Einstellung "count_in_map", da hier gesagt wird, dass eben jenes Fahrzeug auf der Karte mit gezählt werden soll,
um nicht permanent neue Fahrzeuge spawnen zu lassen. Daher sollte dieser Wert auch immer auf "1" gestellt sein.
Bei unserem Fahrzeugreifen (Hatchback_02_Wheel) handelt es sich zwar wiederum um ein normales Objekt,
welches aber nicht auf herkömmliche Art spawnt.
Dies nennt man in der Regel einen "proxy spawn" und bedeutet nichts anderes, als dass sie einen festgelegten Platz,
so wie Ausrichtung haben, wie und wo sie an einem Objekt spawnen. Wie es eben im Spiel an den Autowracks der Fall ist.
Die Motorhaube oder andere Teile, haben also eine ganz genaue Position, die sich eben auch nicht ändert.
Da sie aber dennoch als loot Zählen, haben wir auch hier wieder unseren "nominal" und "min" Wert,
so wie die üblichen Werte der "lifetime" oder dem "restock".
Einzig Wichtige ist hier die "category", die bei diesen Objekten mit "lootdispatch" gekennzeichnet ist.
Diese Kategorie wurde explizit dafür eingerichtet und sollte unter Umständen nur dafür genutzt werden,
da sie eben nur für diese Art von spawns vorgesehen ist.
Wie das ganze nachher funktioniert, klären wir aber später in der mapgroupproto.xml genauer.
Kommen wir zu KI Objekten.
<type name="ZmbF_ParamedicNormal_Blue">
<nominal>0</nominal>
<lifetime>1800</lifetime>
<restock>0</restock>
<min>1</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
</type>
Auch hier gilt das Prinzip der Fahrzeuge, denn auch hier zählen wieder die Werte aus der events.xml.
Sie sind also dem Ganzen in etwa gleichzusetzen und da wir später auch nochmal auf die einzelnen Aspekte eingehen,
Springe ich abschließend noch zu den Event Objekten.
<type name="Land_Wreck_Volha_Police">
<nominal>0</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>0</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<usage name="Police"/>
</type>
Alles anzeigen
Diese Objekte beziehen ihre Werte wie alles andere, was über die events.xml läuft auch aus dieser Datei.
Somit hätten wir dieses Thema im Groben sogar abgeschlossen.
Jetzt haben wir nur noch das Sahnehäubchen, denn jetzt könnten wir für frischeren Wind auf unserem Server sorgen.
Wie im Thema cfglimitsdefinition.xml schon erwähnt,
können wir hier alle Items anpassen, zum einen in Sachen Lebensdauer oder Häufigkeit,
zum anderen können wir sie aber auch neu zuordnen. Also zumindest wo sie spawnen sollen.
Nehmen wir dafür aber wieder die "BakedBeansCan" und sagen wir einfach, wir können diese in jeder Zone finden.
Dafür müssen wir nicht extra den Eintrag "<value name="Tier4"/>" anhängen, sondern entfernen einfach alle "Tier" Einträge,
was am Ende dazu führt, dass sie eben auf der ganzen Karte zu finden sind.
Selbes können wir aber auch mit den "usage" anstellen und diese nach Belieben abändern, entfernen oder Erweitern.
Für dieses Beispiel nehmen wir jetzt einfach die Polizei, womit wir zu folgendem Ergebnis kommen.
<type name="BakedBeansCan">
<nominal>15</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>12</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="food"/>
<tag name="shelves"/>
<usage name="Police"/>
</type>
Alles anzeigen
Nun würden unsere Bohnen in Polizeiwachen auf der ganzen Karte spawnen 😅.
Das wäre mir persönlich aber ein wenig fehl am Platz und möchte sie daher nur noch in Supermärkten finden.
Wie schon in der cfglimitsdefinition.xml erwähnt,
können wir dies anpassen und haben eine neue "usageflags" erstellt, welche wir "Supermarket" getauft haben.
Hier auch nochmal als Erinnerung unsere cfglimitsdefinition.xml wie sie aussehen sollte.
<lists>
<categories>
<category name="tools"/>
<category name="containers"/>
<category name="clothes"/>
<category name="lootdispatch"/>
<category name="food"/>
<category name="weapons"/>
<category name="books"/>
<category name="explosives"/>
</categories>
<tags>
<tag name="floor"/>
<tag name="shelves"/>
<tag name="ground"/>
</tags>
<usageflags>
<usage name="Military"/>
<usage name="Police"/>
<usage name="Medic"/>
<usage name="Firefighter"/>
<usage name="Industrial"/>
<usage name="Farm"/>
<usage name="Coast"/>
<usage name="Town"/>
<usage name="Village"/>
<usage name="Hunting"/>
<usage name="Office"/>
<usage name="School"/>
<usage name="Prison"/>
<usage name="Lunapark"/>
<usage name="SeasonalEvent"/>
<usage name="ContaminatedArea"/>
<usage name="Historical"/>
<usage name="Supermarket"/>
</usageflags>
<valueflags>
<value name="Tier1"/>
<value name="Tier2"/>
<value name="Tier3"/>
<value name="Tier4"/>
<value name="Unique"/>
</valueflags>
</lists>
Alles anzeigen
Nun können wir unseren Bohnen diesen Eintrag zuordnen, womit wir folgendes Ergebnis haben.
<type name="BakedBeansCan">
<nominal>15</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>12</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="food"/>
<tag name="shelves"/>
<usage name="Supermarket"/>
</type>
Alles anzeigen
Jetzt haben wir schon mal ein paar Anpassungen vorgenommen, welche wir allerdings noch in der mapgroupproto.xml anpassen müssen.
Das würde ich allerdings auch erst da weiterführen und für hier erst einmal behaupten, dass wir das Thema so weit abschließen können.
Ich hoffe, ich habe alles soweit richtig und verständlich erklärt, lasse mich gerne berichtigen, aber musste feststellen,
dass es doch ein sehr trockenes und ausdauerndes Thema sein kann.
Ich werde schauen, ob ich über die Zeit, noch das ein oder andere anpassen
und ggf. mit Bildern etwas besser darstellen kann 😅.
Je nachdem wie weit ich es auch mit meinem Server gebastel schaffe,
finden sich bestimmt auch da ein paar Anregungen, wie man seinen Server gestalten kann 😊.
Bis dahin aber wieder ein danke fürs Zuhören, euer Interesse, Zeit und euer Durchhaltevermögen 😅😂.