Thema:
cfgenvironment.xml
Dann legen wir mal los und wünsche hiermit allen Interessierten und Lese lustigen ein herzliches Willkommen 😁.
Hier haben befassen wir uns ein Wenig mit den Grundeinstellungen für KI gesteuerte Objekte, wenn man es so möchte.
Also unsere netten Infizierten und alles was an Tieren die Umgebung unsicher macht.
Hierfür haben wir wieder unsere Grunddatei, welche ich dieses Mal auch im Kompletten nehme
und wir anschließend wieder alles einzeln durchgehen.
<env>
<!-- GENERAL Territories Section --
<territories>
<file path="env/cattle_territories.xml" />
<file path="env/sheep_goat_territories.xml" />
<file path="env/red_deer_territories.xml" />
<file path="env/roe_deer_territories.xml" />
<file path="env/wild_boar_territories.xml" />
<file path="env/pig_territories.xml" />
<file path="env/hen_territories.xml" />
<file path="env/wolf_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/zombie_territories.xml" />
<file path="env/bear_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/fox_territories.xml" />
<territory type="Herd" name="Deer" behavior="DZDeerGroupBeh">
<file usable="red_deer_territories" />
</territory>
<territory type="Herd" name="Cow" behavior="DZdomesticGroupBeh">
<file usable="cattle_territories" />
</territory>
<territory type="Herd" name="Goat" behavior="DZSheepGroupBeh">
<file usable="sheep_goat_territories" />
</territory>
<territory type="Herd" name="Sheep" behavior="DZSheepGroupBeh">
<file usable="sheep_goat_territories" />
</territory>
<territory type="Herd" name="RoeDeer" behavior="DZDeerGroupBeh">
<file usable="roe_deer_territories" />
</territory>
<territory type="Herd" name="Wolf" behavior="DZWolfGroupBeh">
<file usable="wolf_territories" />
</territory>
<territory type="Herd" name="WildBoar" behavior="DZDeerGroupBeh">
<file usable="wild_boar_territories" />
</territory>
<territory type="Herd" name="Pig" behavior="DZSheepGroupBeh">
<file usable="pig_territories" />
</territory>
<territory type="Herd" name="Bear" behavior="BlissBearGroupBeh">
<file usable="bear_territories"/>
</territory>
<!-- HEN --
<territory type="Ambient" name="AmbientHen" behavior="DZAmbientLifeGroupBeh">
<file usable="hen_territories" />
<!-- different agent types - class has to begin with AgentType:w --
<agent type="Male" chance="1">
<spawn configName="Animal_GallusGallusDomesticus" chance="1" />
</agent>
<agent type="Female" chance="3">
<spawn configName="Animal_GallusGallusDomesticusF_Brown" chance="1" />
<spawn configName="Animal_GallusGallusDomesticusF_Spotted" chance="10" />
<spawn configName="Animal_GallusGallusDomesticusF_White" chance="20" />
</agent>
<item name="globalCountMax" val="50" />
<item name="zoneCountMin" val="1" />
<item name="zoneCountMax" val="1" />
<item name="playerSpawnRadiusNear" val="25" />
<item name="playerSpawnRadiusFar" val="75" />
</territory>
<!-- HARE --
<territory type="Ambient" name="AmbientHare" behavior="DZAmbientLifeGroupBeh">
<file usable="hare_territories" />
<!-- different agent types - class has to begin with AgentType:w --
<agent type="Male" chance="1">
<spawn configName="Animal_LepusEuropaeus" chance="1" />
</agent>
<agent type="Female" chance="1">
<spawn configName="Animal_LepusEuropaeus" chance="1" />
</agent>
<item name="zoneTouchDisableEditPeriodSec" val="300" />
</territory>
<!-- FOX --
<territory type="Ambient" name="AmbientFox" behavior="DZAmbientLifeGroupBeh">
<file usable="fox_territories" />
<!-- different agent types - class has to begin with AgentType:w --
<agent type="Male" chance="1">
<spawn configName="Animal_VulpesVulpes" chance="1" />
</agent>
<agent type="Female" chance="1">
<spawn configName="Animal_VulpesVulpes" chance="1" />
</agent>
<item name="zoneTouchDisableEditPeriodSec" val="450" />
</territory>
<!-- INFECTED --
<territory type="Herd" name="ZombieTest" behavior="DZdomesticGroupBeh">
<file usable="zombie_territories" />
<!-- different agent types - class has to begin with AgentType:w --
<agent type="Male">
<spawn configName="ZombieMale3_NewAI" />
<item name="countMin" val="0" />
<item name="countMax" val="0" />
</agent>
<agent type="Female">
<spawn configName="ZombieFemale3_NewAI" />
<item name="countMin" val="0" />
<item name="countMax" val="0" />
</agent>
<!-- count of herds of this type in the map --
<item name="herdsCount" val="0" />
</territory>
</territories>
</env>
Alles anzeigen
Nun haben wir wieder mehrere einzelne Abschnitte, wenn man es so möchte,
die wir bearbeiten können oder müssen, aber am Ende auch wieder alle miteinander spielen.
Als Erstes haben wir folgenden Abschnitt.
<file path="env/cattle_territories.xml" />
<file path="env/sheep_goat_territories.xml" />
<file path="env/red_deer_territories.xml" />
<file path="env/roe_deer_territories.xml" />
<file path="env/wild_boar_territories.xml" />
<file path="env/pig_territories.xml" />
<file path="env/hen_territories.xml" />
<file path="env/wolf_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/zombie_territories.xml" />
<file path="env/bear_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/fox_territories.xml" />
Alles anzeigen
Dabei handelt es sich im Prinzip um eine Liste und den Verweis der einzelnen Dateien,
welcher für unsere Gebiete verantwortlich sind.
Hier müssen wir uns in erster Linie wieder unseren Server Aufbau bzw. unsere Ordnerstruktur ins Gedächtnis rufen,
welcher ich schon im ersten Beitrag erwähnt habe.
Wer sich also erinnern kann, wird folgende Zeile wiedererkennen.
Bsp.: "Basisverzeichnis\mpmissions\dayzOffline.chernarusplus\db"
Hier ist allerdings nicht der Ordner "db", sondern der erwähnte "env" Ordner wichtig,
weshalb unsere Ordnerstruktur also folgende ist.
"Basisverzeichnis\mpmissions\dayzOffline.chernarusplus\env"
Da sich das Spiel immer auf das Verzeichnis unserer genutzten Karte bezieht, müssen wir hier nicht unseren kompletten Pfad angeben.
In der Theorie kann auch ein neuer Ordner erstellt werden, um z.B. neue oder eigene Gebiete zu erstellen.
Es ist nur wichtig, dass dieser als neuer "path=" angegeben wird.
Aber erst mal schnell zurück zum Original, denn jeder Pfad führt zu einer Datei, welche Spawn Punkte unserer KI Objekte enthält.
Konkret auf diese Dateien, gehen wir im Thema: "territories.xml" ein, Erwähnen schadet ja aber nicht 😅.
Jede dieser Dateien hat also seinen Zweck und kann gern für neue Projekte als Vorbild genutzt werden.
Wichtig ist dabei natürlich, dass alles an Pfaden und Namen übereinstimmt.
Dafür erschaffen wir zur besseren Anschauung ein einfaches Bsp. und stellen uns vor, wir hätten "Igel".
Ob Englisch, Deutsch oder eine Abkürzung spielt erst mal keine Rolle.
Von daher heißen sie jetzt auch für dieses Beispiel einfach "Igel" 🤣.
Als Datei würden wir diese also "igel_territories.xml" nennen und hätten jetzt die Möglichkeit diese in das Vanilla
oder einem neuen Verzeichnis abzulegen.
Bei der Vanilla Variante würde sich nichts ändern, sondern müsste lediglich ein neuer Eintrag angelegt werden
und entsprechend angepasst werden, was am Ende einfach folgendermaßen aussehen kann.
<file path="env/cattle_territories.xml" />
<file path="env/sheep_goat_territories.xml" />
<file path="env/red_deer_territories.xml" />
<file path="env/roe_deer_territories.xml" />
<file path="env/wild_boar_territories.xml" />
<file path="env/pig_territories.xml" />
<file path="env/hen_territories.xml" />
<file path="env/wolf_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/zombie_territories.xml" />
<file path="env/bear_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/fox_territories.xml" />
<file path="env/igel_territories.xml" />
Alles anzeigen
Würden wir ein neues Verzeichnis anlegen, welches wir jetzt einfach mal "new" nennen, würde es wiederum folgendermaßen aussehen.
<file path="env/cattle_territories.xml" />
<file path="env/sheep_goat_territories.xml" />
<file path="env/red_deer_territories.xml" />
<file path="env/roe_deer_territories.xml" />
<file path="env/wild_boar_territories.xml" />
<file path="env/pig_territories.xml" />
<file path="env/hen_territories.xml" />
<file path="env/wolf_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/zombie_territories.xml" />
<file path="env/bear_territories.xml" />
<file path="env/hare_territories.xml" />
<file path="env/fox_territories.xml" />
<file path="new/igel_territories.xml" />
Alles anzeigen
Egal für welchen Weg wir uns entscheiden, ist nun eine weitere Entscheidung wichtig, und zwar die Art und Weise.
Vanilla und Spieltechnisch wird in 2 oder 3 Unterschieden, wenn es darum geht, wie die KI auf die Karte gebracht werden.
Um das etwas besser zu erklären, nehmen wir einfach die Beispiele Huhn (Ambient), Wolf (Herd) und Infizierte.
Zusätzlich klären wir natürlich auch gleich den Unterschied zwischen "Herd" und "Ambient", um diesen Aspekt mit abzudecken.
Der Wolf ist im Prinzip immer vorhanden. Er hat Spawn Punkte, welche einfach immer zufällig belegt werden.
Wir als Spieler laufen eben einfach in ein Gebiet, in dem sie sich gerade befinden und haben einfach den Salat 😅.
Aber sie sind eben einfach da, was, wie wir jetzt wissen, für alle Tiere zutrifft, die mit "type="Herd" angegeben sind.
Das Huhn hingegen, welche uns als Spieler eben auch als Nahrungsquelle dienen soll, wird eben zufällig hervorgebracht,
wenn wir uns einem Spawn Punkt nähren. Sie sind oder werden also nur durch uns als Spieler hervorgebracht
und werden nicht permanent an irgendwelchen stellen nach gespawnt.
Wie also bei "Herd" gilt hier das Prinzip, dass es auf alle Tiere zutrifft, welche mit "type="Ambient" angegeben werden.
Infizierte sind da nochmal ein Ding für sich, da diese im Grunde beide Wege kombinieren.
Es gibt welche, die immer vorhanden sind und zusätzliche Infizierte, die wir als Spieler hervorbringen,
wenn wir uns eben einem Spawn Punkt nähren.
Da wir dies nun wissen, können wir nun zum nächsten Abschnitt übergehen und schauen uns diesen auch gleich am Beispiel Wolf an.
<territory type="Herd" name="Wolf" behavior="DZWolfGroupBeh">
<file usable="wolf_territories" />
</territory>
Wir haben hier also 4 Einträge, welche für diese Art von Tier-Spawns wichtig sind.
territory type="Herd" =====> Gebietstyp
Dieser gibt eben unsere oben beschriebenen Typen "Herd" oder "Ambient" an.
name="Wolf" =====> Gebietsname
Welcher eben den Namen unseres Gebietes angibt.
behavior="DZWolfGroupBeh =====> Tierverhalten
Womit wir das Verhalten der Tiere festlegen können.
file usable="wolf_territories" =====> Verwendete Datei
Welche auf die im ersten Abschnitt festgelegte Datei verweist.
Mehr benötigen wir im Prinzip für ein mit "Herd" hervorgebrachtes Tier nicht,
womit wir nun auch gleich zum Huhn übergehen.
<territory type="Ambient" name="AmbientHen" behavior="DZAmbientLifeGroupBeh">
<file usable="hen_territories" />
<!-- different agent types - class has to begin with AgentType:w -->
<agent type="Male" chance="1">
<spawn configName="Animal_GallusGallusDomesticus" chance="1" />
</agent>
<agent type="Female" chance="3">
<spawn configName="Animal_GallusGallusDomesticusF_Brown" chance="1" />
<spawn configName="Animal_GallusGallusDomesticusF_Spotted" chance="10" />
<spawn configName="Animal_GallusGallusDomesticusF_White" chance="20" />
</agent>
<item name="globalCountMax" val="50" />
<item name="zoneCountMin" val="1" />
<item name="zoneCountMax" val="1" />
<item name="playerSpawnRadiusNear" val="25" />
<item name="playerSpawnRadiusFar" val="75" />
</territory>
Alles anzeigen
Hier haben wir wieder unsere Grundangaben Gebietstyp bis zur verwendeten Datei,
weshalb ich diese jetzt nicht noch einmal aufliste,
sondern gleich zu den nachfolgenden Einstellungen komme.
Dabei haben wir einmal folgendes.
<agent type="Male" chance="1">
<spawn configName="Animal_GallusGallusDomesticus" chance="1" />
</agent>
Hier haben wir nun folgende 2 Zeilen
agent type="Male" chance="1" =====> Geschlecht und Spawn Wahrscheinlichkeit
Hierbei wird festgelegt zu welchem Geschlecht das nachfolgende Tier gehört
und je nach Anzahl, wie viele dieser Tiere erscheinen können.
spawn configName="Animal_GallusGallusDomesticus" chance="1" =====> Tierdefinition und Spawn Wahrscheinlichkeit
Damit werden die in der "types.xml" festgelegten Tiere definiert, welche eben hierfür zutreffend sind
und eben ihre Spawn Wahrscheinlichkeit.
In diesem Fall haben wir also "Male" für Männlich mit seiner Wahrscheinlichkeit,
dass eben eines dieser hier aufgelisteten Tiere tatsächlich erscheint.
Danach haben wir als männliche Vertreter "Animal_GallusGallusDomesticus" als Hahn,
der ebenfalls mit einer Wahrscheinlichkeit festgelegt wurde.
Selbes Spiel noch einmal allerdings mit neuen Werten, haben wir natürlich noch die Variante in der weiblichen Form.
<agent type="Female" chance="3">
<spawn configName="Animal_GallusGallusDomesticusF_Brown" chance="1" />
<spawn configName="Animal_GallusGallusDomesticusF_Spotted" chance="10" />
<spawn configName="Animal_GallusGallusDomesticusF_White" chance="20" />
</agent>
Auch hier gelten die erwähnten Regeln, Werte und Definitionen.
agent type="Female" chance="3" =====> Geschlecht und Spawn Wahrscheinlichkeit
Hier wird wieder, zu welchem Geschlecht das nachfolgende Tier gehört
und je nach Anzahl der Tiere, wie viele dieser Tiere erscheinen können.
spawn configName="Animal_GallusGallusDomesticusF_Brown" chance="1" \
spawn configName="Animal_GallusGallusDomesticusF_Spotted" chance="10" =====> Tierdefinition und Spawn Wahrscheinlichkeit
spawn configName="Animal_GallusGallusDomesticusF_White" chance="20" /
Wie auch beim männlichen Vertreter wird hier das in der "types.xml" festgelegte Tiere definiert,
und eben ihre entsprechende Spawn Wahrscheinlichkeit.
Wir haben hier also wieder unser Geschlecht, welches mit "Female" für Weiblich angegeben ist
und wieder eine entsprechende Wahrscheinlichkeit.
Zusätzlich haben wir die Definitionen für die weiblichen Vertreter "Animal_GallusGallusDomesticusF_Brown",
"Animal_GallusGallusDomesticusF_Spotted" und "Animal_GallusGallusDomesticusF_White" als Hühner
und wir haben die angegebenen Wahrscheinlichkeiten.
Da es auch für mich etwas verwirrend ist, würde ich für folgendes nicht meine Hand ins Feuer legen
und das ganze auch nur als eine Theorie abstempeln, was die Wahrscheinlichkeiten angeht.
Aufgrund dessen, wie hier die Werte angegeben sind, würde ich es eher als eine Art Häufigkeit definieren.
Im Falle von "Male" würde es also anhand der Werte bedeuten, dass es einen Hahn als Vertreter gibt,
welcher auch nur 1 Mal vorhanden sein darf.
Gäbe es 2 männliche Vertreter, dürfte also nur einer dieser Hähne spawnen,
weshalb im Falle von "Female" 3 Vertreter angegeben sind, und somit alle vorhanden sein können.
Darunter "Animal_GallusGallusDomesticusF_Brown" z.B. nur einmal,
"Animal_GallusGallusDomesticusF_Spotted" bis zu 10 Mal
und "Animal_GallusGallusDomesticusF_White" bis zu 20 Mal.
Um das ganze meiner Logik nach auch damit weiter zu erklären, müssen wir nun zu dem Teil kommen,
welcher meine Theorie ein wenig unterstützt.
<item name="globalCountMax" val="50" />
<item name="zoneCountMin" val="1" />
<item name="zoneCountMax" val="1" />
<item name="playerSpawnRadiusNear" val="25" />
<item name="playerSpawnRadiusFar" val="75" />
item name="globalCountMax" val="50" =====> Maximale Anzahl an Objekten in der Welt
Hier wird die maximale Anzahl unserer gesamten Hühner festgelegt, welche auf der Karte vorhanden sein können,
was also für mich die oben genannten Werte und logische Erklärung wäre.
Hoffe nur, das kann man auch soweit nachvollziehen 😅.
name="zoneCountMin" val="1" =====> Minimale Objektanzahl in einer Zone
name="zoneCountMax" val="1" =====> Maximale Objektanzahl in einer Zone
Diese beiden Zeilen geben an, wie viele Hühner minimal und maximal pro Zone bzw. Event vorhanden sein dürfen.
name="playerSpawnRadiusNear" =====> kürzeste Spawn Entfernung zum Spieler in "m"
name="playerSpawnRadiusFar" =====> weiteste Spawn Entfernung zum Spieler in "m"
Hier bin ich mir wieder unsicher, würde aber meinen, dass es eben die Spawn Entfernung zu einem Spieler
sein könnte, welche eben eine Art Radius festlegt, ob und wann eines der Hühner auftauchen kann.
Somit kann festgelegt werden, ob wir uns zu nah an einem solchen Spawn Punkt aufhalten
oder noch zu weit entfernt sind.
Das war es glaube ich auch im Großen und Ganzen was das Huhn angeht,
weshalb wir jetzt gleich zur nächsten "Ambient" Typ übergehen.
<territory type="Ambient" name="AmbientHare" behavior="DZAmbientLifeGroupBeh">
<file usable="hare_territories" />
<agent type="Male" chance="1">
<spawn configName="Animal_LepusEuropaeus" chance="1" />
</agent>
<agent type="Female" chance="1">
<spawn configName="Animal_LepusEuropaeus" chance="1" />
</agent>
<item name="zoneTouchDisableEditPeriodSec" val="300" />
</territory>
In diesem Bsp. sollten wir wieder ein paar bekannte Zeilen wiedererkennen,
welche sich eben auch fast immer wieder wiederholen, weshalb ich mir erlaube
auf diese Zeilen nicht nochmal so genau einzugehen.
Als Kurzfassung daher haben wir wieder unseren "type="Ambient", "name" und "DZAmbientLifeGroupBeh".
Unseren Dateiverweis und Hinterlegung der Männlichen und weiblichen Vertreter.
Einzige Änderung ist hier also folgendes.
name="zoneTouchDisableEditPeriodSec" val="300" =====> Zonen Abklingzeit in "sec"
Hiermit wird in Sekunden festgelegt, wann eine Zone wieder ein Tier hervorbringen kann,
nachdem diese von allen Spielern verlassen wurde.
Verlassen wir also alle einen bestimmten Bereich,
dauert es 300 Sekunden bis ein Tier, in diesem Fall ein Hase,
an dieser Position auftauchen kann.
Damit hätten wir auch alles was man zum Thema "Ambient" Spawn sagen kann.
Zumindest hoffe ich das ich nichts vergessen habe 😅🤞.
Damit kommen wir zum letzten Teil, den Infizierten.
<territory type="Herd" name="ZombieTest" behavior="DZdomesticGroupBeh">
<file usable="zombie_territories" />
<!-- different agent types - class has to begin with AgentType:w ->
<agent type="Male">
<spawn configName="ZombieMale3_NewAI" />
<item name="countMin" val="0" />
<item name="countMax" val="0" />
</agent>
<agent type="Female">
<spawn configName="ZombieFemale3_NewAI" />
<item name="countMin" val="0" />
<item name="countMax" val="0" />
</agent>
<!-- count of herds of this type in the map ->
<item name="herdsCount" val="0" />
</territory>
Alles anzeigen
Hier könnt man sich eigentlich sogar relativ kurzfassen und könnte das Prinzip vom "Herd" Typ wiederholen.
Es sind tatsächlich wieder voranging, die ersten beiden Zeilen wichtig.
<territory type="Herd" name="ZombieTest" behavior="DZdomesticGroupBeh">
<file usable="zombie_territories" />
Wir haben unseren "type", unseren "name", den "behavior" und unsere verwiesene Datei.
Das ist, wenn man es so möchte, sogar das einzige, was man benötigt.
Ich habe es getestet und alles ist auch so, wie wir es eben kennen.
Infizierte kommen und gehen, und verhalten sich, wie sie eben sollen.
Von daher bin ich mir bei dem Letzten abschnitt nicht sicher, was dieser Tatsächlich bewirken soll 😅.
Da auch die Werte für die Anzahl der Infizierten in anderen Dateien definiert werden,
weiß ich nicht, ob diese hier mit "0" angegebenen Werte für "countMin" und "countMax"
für irgendeinen Grund wert stehen sollen, welche durch andere Dateien
auf den eigentlichen Wert gebracht werden.
Wenn es also Jemand genau erklären kann, dann bitte auch ich da gerne um die Hilfe zur Lösung des Rätsels 🤣.
Alles Weitere sind daher nur Theorien, welche entweder noch Relikte aus älteren Tagen darstellt,
oder die Versuche für eventuelle Horden.
Wie gesagt, es sind nur Theorien 😅.
Das war es dann aber tatsächlich auch und weise nochmal auf das hiermit verbundene Thema "events.xml" hin,
in welchem die hier hinterlegten Tiere oder Infizierten als Event festgelegt werden
und auf das Thema "territories.xml", in welchem die Spawn Punkte und jeweiligen Areale festgelegt werden.
Damit endet auch dieses Thema und hoffe wie immer es war verständlich, bedanke mich für Interesse,
Geduld und Eure Zeit 😁😅.