Skip to content

5.6. fejezet: Spawn felszerelés konfiguráció

Főoldal | << Előző: Szerver konfigurációs fájlok | Spawn felszerelés konfiguráció


Összefoglalás: A DayZ két egymást kiegészítő rendszerrel rendelkezik, amelyek szabályozzák, hogyan lépnek be a játékosok a világba: a spawn pontok határozzák meg, hol jelenik meg a karakter a térképen, a spawn felszerelés pedig azt, milyen felszereléssel rendelkezik. Ez a fejezet mindkét rendszert részletesen tárgyalja, beleértve a fájlstruktúrát, a mezők referenciáját, a gyakorlati preset-eket és a mod integrációt.


Tartalomjegyzék


Áttekintés

Amikor egy játékos friss karakterként jelenik meg a DayZ-ben, a szerver két kérdésre válaszol:

  1. Hol jelenik meg a karakter? --- A cfgplayerspawnpoints.xml vezérli.
  2. Mit hord magánál a karakter? --- A spawn felszerelés preset JSON fájlok vezérlik, amelyeket a cfggameplay.json-ban regisztrálnak.

Mindkét rendszer csak szerver oldali. A kliensek soha nem látják ezeket a konfigurációs fájlokat és nem manipulálhatják őket. A spawn felszerelés rendszert az init.c-ben történő felszerelés szkriptelés alternatívájaként vezették be, lehetővé téve a szerver adminoknak, hogy több súlyozott preset-et definiáljanak JSON-ban bármilyen Enforce Script kód írása nélkül.

Fontos: A spawn felszerelés preset rendszer teljesen felülírja a StartingEquipSetup() metódust a küldetés init.c-ben. Ha engedélyezed a spawn felszerelés preset-eket a cfggameplay.json-ban, a szkriptelt felszerelés kódod figyelmen kívül marad. Hasonlóképpen, a preset-ekben definiált karaktertípusok felülírják a főmenüben választott karakter modellt.


A két rendszer

RendszerFájlFormátumSzabályozza
Spawn pontokcfgplayerspawnpoints.xmlXMLHol --- térkép pozíciók, távolság pontozás, spawn csoportok
Spawn felszerelésEgyéni preset JSON fájlokJSONMit --- karakter modell, ruházat, fegyverek, rakomány, gyorssáv

A két rendszer független. Használhatsz egyéni spawn pontokat vanilla felszereléssel, egyéni felszerelést vanilla spawn pontokkal, vagy mindkettőt testre szabhatod.


Spawn felszerelés: cfgPlayerSpawnGear.json

Spawn felszerelés preset-ek engedélyezése

A spawn felszerelés preset-ek alapértelmezés szerint nincsenek engedélyezve. Használatukhoz:

  1. Hozz létre egy vagy több JSON preset fájlt a küldetés mappádban (pl. mpmissions/dayzOffline.chernarusplus/).
  2. Regisztráld őket a cfggameplay.json-ban a PlayerData.spawnGearPresetFiles alatt.
  3. Győződj meg, hogy az enableCfgGameplayFile = 1 be van állítva a serverDZ.cfg-ben.
json
{
  "version": 122,
  "PlayerData": {
    "spawnGearPresetFiles": [
      "survivalist.json",
      "casual.json",
      "military.json"
    ]
  }
}

A preset fájlok a küldetés mappa alkönyvtáraiba is beágyazhatók:

json
"spawnGearPresetFiles": [
  "custom/survivalist.json",
  "custom/casual.json",
  "custom/military.json"
]

Minden JSON fájl egyetlen preset objektumot tartalmaz. Az összes regisztrált preset össze van gyűjtve, és a szerver a spawnWeight alapján választ egyet minden alkalommal, amikor friss karakter jelenik meg.

Preset struktúra

A preset a legfelső szintű JSON objektum ezekkel a mezőkkel:

MezőTípusLeírás
namestringEmber által olvasható név a preset-hez (bármilyen sztring, csak azonosításra használt)
spawnWeightintegerSúly a véletlenszerű kiválasztáshoz. Minimum 1. Magasabb értékek nagyobb valószínűséget adnak ennek a preset-nek
characterTypesarrayKaraktertípus osztálynevek tömbje (pl. "SurvivorM_Mirek"). Véletlenszerűen egy kerül kiválasztásra, amikor ez a preset megjelenik
attachmentSlotItemSetsarrayAttachmentSlots struktúrák tömbje, amelyek meghatározzák, mit visel a karakter (ruházat, fegyverek a vállon, stb.)
discreteUnsortedItemSetsarrayDiscreteUnsortedItemSets struktúrák tömbje, amelyek rakomány tárgyakat definiálnak bármely elérhető leltár helyre

Megjegyzés: Ha a characterTypes üres vagy ki van hagyva, a főmenü karakter létrehozó képernyőjén utoljára kiválasztott karakter modell lesz használva az adott preset-hez.

Minimális példa:

json
{
  "spawnWeight": 1,
  "name": "Basic Survivor",
  "characterTypes": [
    "SurvivorM_Mirek",
    "SurvivorF_Eva"
  ],
  "attachmentSlotItemSets": [],
  "discreteUnsortedItemSets": []
}

attachmentSlotItemSets

Ez a tömb meghatározza azokat a tárgyakat, amelyek meghatározott karakter kiegészítő csatlakozási pontokba kerülnek --- test, lábak, lábfej, fej, hát, mellény, vállak, szemüveg, stb.

Minden bejegyzés egy csatlakozási pontot céloz:

MezőTípusLeírás
slotNamestringA kiegészítő csatlakozási pont neve. A CfgSlots-ból származik. Gyakori értékek: "Body", "Legs", "Feet", "Head", "Back", "Vest", "Eyewear", "Gloves", "Hips", "shoulderL", "shoulderR"
discreteItemSetsarrayTárgy változatok tömbje, amelyek kitölthetik ezt a csatlakozási pontot (egy kerül kiválasztásra a spawnWeight alapján)

Váll gyorsparancsok: Használhatod a "shoulderL" és "shoulderR" csatlakozási pont neveket. A motor automatikusan lefordítja ezeket a helyes belső CfgSlots nevekre.

json
{
  "slotName": "Body",
  "discreteItemSets": [
    {
      "itemType": "TShirt_Beige",
      "spawnWeight": 1,
      "attributes": {
        "healthMin": 0.45,
        "healthMax": 0.65,
        "quantityMin": 1.0,
        "quantityMax": 1.0
      },
      "quickBarSlot": -1
    },
    {
      "itemType": "TShirt_Black",
      "spawnWeight": 1,
      "attributes": {
        "healthMin": 0.45,
        "healthMax": 0.65,
        "quantityMin": 1.0,
        "quantityMax": 1.0
      },
      "quickBarSlot": -1
    }
  ]
}

DiscreteItemSets

A discreteItemSets minden bejegyzése egy lehetséges tárgyat jelöl az adott csatlakozási pontra. A szerver véletlenszerűen választ egy bejegyzést, a spawnWeight által súlyozva. Ezt a struktúrát mind az attachmentSlotItemSets-en belül (csatlakozási pont alapú tárgyakhoz) használják, és ez a véletlenszerű kiválasztás mechanizmusa.

MezőTípusLeírás
itemTypestringTárgy osztálynév (típusnév). Használj "" (üres sztring) értéket a "semmi" jelölésére --- a csatlakozási pont üresen marad
spawnWeightintegerSúly a kiválasztáshoz. Minimum 1. Magasabb = valószínűbb
attributesobjectÉleterő és mennyiség tartományok ehhez a tárgyhoz. Lásd: Attribútumok
quickBarSlotintegerGyorssáv hely hozzárendelés (0-alapú). Használj -1-et a gyorssáv hozzárendelés mellőzéséhez
complexChildrenTypesarrayTárgyak, amelyeket ezen belül kell megjeleníteni. Lásd: ComplexChildrenTypes
simpleChildrenTypesarrayTárgy osztálynevek, amelyeket ezen belül kell megjeleníteni alapértelmezett vagy szülői attribútumokkal
simpleChildrenUseDefaultAttributesboolHa true, az egyszerű gyermekek a szülő attributes-ét használják. Ha false, a konfigurációs alapértékeket használják

Üres tárgy trükk: Ha azt akarod, hogy egy csatlakozási pontnak 50/50 esélye legyen üresnek vagy kitöltöttnek lenni, használj üres itemType-ot:

json
{
  "slotName": "Eyewear",
  "discreteItemSets": [
    {
      "itemType": "AviatorGlasses",
      "spawnWeight": 1,
      "attributes": {
        "healthMin": 1.0,
        "healthMax": 1.0
      },
      "quickBarSlot": -1
    },
    {
      "itemType": "",
      "spawnWeight": 1
    }
  ]
}

discreteUnsortedItemSets

Ez a felső szintű tömb határozza meg azokat a tárgyakat, amelyek a karakter rakományába kerülnek --- bármely elérhető leltár helyre az összes felszerelt ruházaton és konténeren keresztül. Az attachmentSlotItemSets-tel ellentétben ezek a tárgyak nem egy meghatározott csatlakozási pontba kerülnek; a motor automatikusan talál helyet.

Minden bejegyzés egy rakomány változatot jelöl, és a szerver a spawnWeight alapján választ egyet.

MezőTípusLeírás
namestringEmber által olvasható név (csak azonosításra)
spawnWeightintegerSúly a kiválasztáshoz. Minimum 1
attributesobjectAlapértelmezett életerő/mennyiség tartományok. Gyermekek használják, amikor a simpleChildrenUseDefaultAttributes értéke true
complexChildrenTypesarrayTárgyak a rakományba, mindegyik saját attribútumokkal és beágyazással
simpleChildrenTypesarrayTárgy osztálynevek a rakományba
simpleChildrenUseDefaultAttributesboolHa true, az egyszerű gyermekek ennek a struktúrának az attributes-ét használják. Ha false, a konfigurációs alapértékeket használják
json
{
  "name": "Cargo1",
  "spawnWeight": 1,
  "attributes": {
    "healthMin": 1.0,
    "healthMax": 1.0,
    "quantityMin": 1.0,
    "quantityMax": 1.0
  },
  "complexChildrenTypes": [
    {
      "itemType": "BandageDressing",
      "attributes": {
        "healthMin": 1.0,
        "healthMax": 1.0,
        "quantityMin": 1.0,
        "quantityMax": 1.0
      },
      "quickBarSlot": 2
    }
  ],
  "simpleChildrenUseDefaultAttributes": false,
  "simpleChildrenTypes": [
    "Rag",
    "Apple"
  ]
}

ComplexChildrenTypes

Az összetett gyermekek olyan tárgyak, amelyek egy szülő tárgyon belül jelennek meg, teljes ellenőrzéssel az attribútumaik, gyorssáv hozzárendelésük és saját beágyazott gyermekeik felett. Az elsődleges felhasználási eset tartalommal rendelkező tárgyak megjelenítése --- például fegyver kiegészítőkkel, vagy fazék étellel benne.

MezőTípusLeírás
itemTypestringTárgy osztálynév
attributesobjectÉleterő/mennyiség tartományok ehhez a konkrét tárgyhoz
quickBarSlotintegerGyorssáv hely hozzárendelés. -1 = ne rendeljen
simpleChildrenUseDefaultAttributesboolAz egyszerű gyermekek öröklik-e ezeket az attribútumokat
simpleChildrenTypesarrayTárgy osztálynevek, amelyeket ezen belül kell megjeleníteni

Példa --- fegyver kiegészítőkkel és tárral:

json
{
  "itemType": "AKM",
  "attributes": {
    "healthMin": 0.5,
    "healthMax": 1.0,
    "quantityMin": 1.0,
    "quantityMax": 1.0
  },
  "quickBarSlot": 1,
  "complexChildrenTypes": [
    {
      "itemType": "AK_PlasticBttstck",
      "attributes": {
        "healthMin": 0.4,
        "healthMax": 0.6
      },
      "quickBarSlot": -1
    },
    {
      "itemType": "PSO1Optic",
      "attributes": {
        "healthMin": 0.1,
        "healthMax": 0.2
      },
      "quickBarSlot": -1,
      "simpleChildrenUseDefaultAttributes": true,
      "simpleChildrenTypes": [
        "Battery9V"
      ]
    },
    {
      "itemType": "Mag_AKM_30Rnd",
      "attributes": {
        "healthMin": 0.5,
        "healthMax": 0.5,
        "quantityMin": 1.0,
        "quantityMax": 1.0
      },
      "quickBarSlot": -1
    }
  ],
  "simpleChildrenUseDefaultAttributes": false,
  "simpleChildrenTypes": [
    "AK_PlasticHndgrd",
    "AK_Bayonet"
  ]
}

Ebben a példában az AKM egy tussal, optikával (elemmel benne) és töltött tárral jelenik meg összetett gyermekekként, plusz egy kézvédővel és szuronnyal egyszerű gyermekekként. Az egyszerű gyermekek konfigurációs alapértékeket használnak, mert a simpleChildrenUseDefaultAttributes értéke false.

SimpleChildrenTypes

Az egyszerű gyermekek egy rövidítés tárgyak szülőn belüli megjelenítéséhez egyedi attribútumok megadása nélkül. Tárgy osztálynevek (sztringek) tömbje.

Az attribútumaikat a simpleChildrenUseDefaultAttributes jelző határozza meg:

  • true --- A tárgyak a szülő struktúrán definiált attributes-t használják.
  • false --- A tárgyak a motor konfigurációs alapértékeit használják (jellemzően teljes életerő és mennyiség).

Az egyszerű gyermekeknek nem lehetnek saját beágyazott gyermekeik vagy gyorssáv hozzárendeléseik. Ezekhez a képességekhez használd a complexChildrenTypes-ot.

Attribútumok

Az attribútumok szabályozzák a megjelenített tárgyak állapotát és mennyiségét. Minden érték 0.0 és 1.0 közötti lebegőpontos szám:

MezőTípusLeírás
healthMinfloatMinimális életerő százalék. 1.0 = hibátlan, 0.0 = tönkrement
healthMaxfloatMaximális életerő százalék. Véletlenszerű érték a min és max között kerül alkalmazásra
quantityMinfloatMinimális mennyiség százalék. Tárakhoz: töltöttségi szint. Ételhez: maradék falatok
quantityMaxfloatMaximális mennyiség százalék

Amikor mind a min, mind a max meg van adva, a motor véletlenszerű értéket választ abban a tartományban. Ez természetes variációt hoz létre --- például a 0.45 és 0.65 közötti életerő azt jelenti, hogy a tárgyak kopott-sérült állapotban jelennek meg.

json
"attributes": {
  "healthMin": 0.45,
  "healthMax": 0.65,
  "quantityMin": 1.0,
  "quantityMax": 1.0
}

Spawn pontok: cfgplayerspawnpoints.xml

Ez az XML fájl határozza meg, hol jelennek meg a játékosok a térképen. A küldetés mappában található (pl. mpmissions/dayzOffline.chernarusplus/cfgplayerspawnpoints.xml).

Fájl struktúra

A gyökérelem legfeljebb három szekciót tartalmaz:

SzekcióCél
<fresh>Kötelező. Spawn pontok újonnan létrehozott karakterekhez
<hop>Spawn pontok másik szerverről ugró játékosokhoz ugyanazon a térképen (csak hivatalos szervereken)
<travel>Spawn pontok másik térképről utazó játékosokhoz (csak hivatalos szervereken)

Minden szekció ugyanazt a három alelemet tartalmazza: <spawn_params>, <generator_params> és <generator_posbubbles>.

xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<playerspawnpoints>
    <fresh>
        <spawn_params>...</spawn_params>
        <generator_params>...</generator_params>
        <generator_posbubbles>...</generator_posbubbles>
    </fresh>
    <hop>
        <spawn_params>...</spawn_params>
        <generator_params>...</generator_params>
        <generator_posbubbles>...</generator_posbubbles>
    </hop>
    <travel>
        <spawn_params>...</spawn_params>
        <generator_params>...</generator_params>
        <generator_posbubbles>...</generator_posbubbles>
    </travel>
</playerspawnpoints>

spawn_params

Futásidejű paraméterek, amelyek a jelölt spawn pontokat pontozó entitásokhoz mérik. A min_dist alatti pontok érvénytelenítésre kerülnek. A min_dist és max_dist közötti pontokat előnyben részesítik a max_dist-en túli pontokkal szemben.

xml
<spawn_params>
    <min_dist_infected>30</min_dist_infected>
    <max_dist_infected>70</max_dist_infected>
    <min_dist_player>65</min_dist_player>
    <max_dist_player>150</max_dist_player>
    <min_dist_static>0</min_dist_static>
    <max_dist_static>2</max_dist_static>
</spawn_params>
ParaméterLeírás
min_dist_infectedMinimális méterek a fertőzöttektől. Az ennél közelebbi pontok büntetést kapnak
max_dist_infectedMaximális pontozási távolság a fertőzöttektől
min_dist_playerMinimális méterek más játékosoktól. Meggátolja, hogy friss spawn-ok meglévő játékosokon jelenjenek meg
max_dist_playerMaximális pontozási távolság más játékosoktól
min_dist_staticMinimális méterek épületektől/objektumoktól
max_dist_staticMaximális pontozási távolság épületektől/objektumoktól

A Sakhal térkép min_dist_trigger és max_dist_trigger paramétereket is hozzáad 6x-os súlyszorzóval a trigger zóna távolságokhoz.

Pontozási logika: A motor pontszámot számol minden jelölt pontra. A 0-tól min_dist-ig -1-et pontoz (szinte érvénytelenítve). A min_dist-tól a középpontig 1.1-ig pontoz. A középponttól max_dist-ig 1.1-ről 0.1-re csökken. A max_dist-en túl 0-t pontoz. Magasabb összpontszám = valószínűbb spawn hely.

generator_params

Szabályozza, hogyan generálódik a jelölt spawn pontok rácsa minden pozíció buborék körül:

xml
<generator_params>
    <grid_density>4</grid_density>
    <grid_width>200</grid_width>
    <grid_height>200</grid_height>
    <min_dist_static>0</min_dist_static>
    <max_dist_static>2</max_dist_static>
    <min_steepness>-45</min_steepness>
    <max_steepness>45</max_steepness>
</generator_params>
ParaméterLeírás
grid_densityMintavételi frekvencia. 4 egy 4x4 rácsot jelent a jelölt pontokból. Magasabb = több jelölt, több CPU költség. Legalább 1 kell legyen. 0 esetén csak a középpont kerül felhasználásra
grid_widthA mintavételi téglalap teljes szélessége méterben
grid_heightA mintavételi téglalap teljes magassága méterben
min_dist_staticMinimális távolság épületektől egy érvényes jelölthöz
max_dist_staticMaximális távolság épületektől a pontozáshoz
min_steepnessMinimális terep lejtés fokban. A meredekebb terepű pontok eldobásra kerülnek
max_steepnessMaximális terep lejtés fokban

Minden <pos> körül, amely a generator_posbubbles-ban van definiálva, a motor egy grid_width x grid_height méteres téglalapot hoz létre, grid_density frekvenciával mintavételez, és eldobja azokat a pontokat, amelyek objektumokkal, vízzel ütköznek, vagy meghaladják a lejtés korlátokat.

Spawn csoportok

A csoportok lehetővé teszik a spawn pontok klaszterezését és időbeli rotálását. Ez megakadályozza, hogy minden játékos mindig ugyanazokon a helyeken jelenjen meg.

A csoportok a <group_params> elemmel engedélyezhetők minden szekción belül:

xml
<group_params>
    <enablegroups>true</enablegroups>
    <groups_as_regular>true</groups_as_regular>
    <lifetime>240</lifetime>
    <counter>-1</counter>
</group_params>
ParaméterLeírás
enablegroupstrue a csoport rotáció engedélyezéséhez, false a pontok lapos listájához
groups_as_regularHa az enablegroups false, a csoportos pontokat normál spawn pontokként kezeli figyelmen kívül hagyásuk helyett. Alapértelmezés: true
lifetimeMásodpercek, amíg egy csoport aktív marad, mielőtt egy másikra rotál. Használj -1-et az időzítő kikapcsolásához
counterSpawn-ok száma, amelyek visszaállítják az élettartamot. Minden játékos, aki a csoportban spawn-ol, visszaállítja az időzítőt. Használj -1-et a számláló kikapcsolásához

A pozíciók elnevezett csoportokba vannak szervezve a <generator_posbubbles>-on belül:

xml
<generator_posbubbles>
    <group name="WestCherno">
        <pos x="6063.018555" z="1931.907227" />
        <pos x="5933.964844" z="2171.072998" />
        <pos x="6199.782715" z="2241.805176" />
    </group>
    <group name="EastCherno">
        <pos x="8040.858398" z="3332.236328" />
        <pos x="8207.115234" z="3115.650635" />
    </group>
</generator_posbubbles>

Az egyedi csoportok felülírhatják a globális lifetime és counter értékeket:

xml
<group name="Tents" lifetime="300" counter="25">
    <pos x="4212.421875" z="11038.256836" />
</group>

Csoportok nélkül a pozíciók közvetlenül a <generator_posbubbles> alatt vannak felsorolva:

xml
<generator_posbubbles>
    <pos x="4212.421875" z="11038.256836" />
    <pos x="4712.299805" z="10595" />
    <pos x="5334.310059" z="9850.320313" />
</generator_posbubbles>

Pozíció formátum: Az x és z attribútumok DayZ világ koordinátákat használnak. Az x kelet-nyugat, a z észak-dél. Az y (magasság) koordináta nincs megadva --- a motor a terep felszínre helyezi a pontot. A koordinátákat a játékon belüli debug monitor vagy a DayZ Editor mod használatával találhatod meg.

Térkép-specifikus konfigok

Minden térkép saját cfgplayerspawnpoints.xml fájllal rendelkezik a küldetés mappájában:

TérképKüldetés mappaMegjegyzések
ChernarusdayzOffline.chernarusplus/Parti spawn-ok: Cherno, Elektro, Kamyshovo, Berezino, Svetlojarsk
LivoniadayzOffline.enoch/Elosztva a térképen különböző csoport nevekkel
SakhaldayzOffline.sakhal/Hozzáadott min_dist_trigger/max_dist_trigger paraméterek, részletesebb megjegyzések

Egyéni térkép készítésekor vagy spawn helyek módosításakor mindig a vanilla fájlból indulj ki és igazítsd a pozíciókat a térképed földrajzához.


Gyakorlati példák

Alapértelmezett túlélő felszerelés

A vanilla preset véletlenszerű pólót, vászon nadrágot, sportcipőt ad a friss spawn-oknak, plusz rakomány tartalmat: kötszert, fényrúdat (véletlenszerű szín) és gyümölcsöt (véletlenszerű: körte, szilva vagy alma). Minden tárgy kopott-sérült állapotban jelenik meg.

json
{
  "spawnWeight": 1,
  "name": "Player",
  "characterTypes": [
    "SurvivorM_Mirek",
    "SurvivorM_Boris",
    "SurvivorM_Denis",
    "SurvivorF_Eva",
    "SurvivorF_Frida",
    "SurvivorF_Gabi"
  ],
  "attachmentSlotItemSets": [
    {
      "slotName": "Body",
      "discreteItemSets": [
        {
          "itemType": "TShirt_Beige",
          "spawnWeight": 1,
          "attributes": {
            "healthMin": 0.45,
            "healthMax": 0.65,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": -1
        },
        {
          "itemType": "TShirt_Black",
          "spawnWeight": 1,
          "attributes": {
            "healthMin": 0.45,
            "healthMax": 0.65,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": -1
        }
      ]
    },
    {
      "slotName": "Legs",
      "discreteItemSets": [
        {
          "itemType": "CanvasPantsMidi_Beige",
          "spawnWeight": 1,
          "attributes": {
            "healthMin": 0.45,
            "healthMax": 0.65,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": -1
        }
      ]
    },
    {
      "slotName": "Feet",
      "discreteItemSets": [
        {
          "itemType": "AthleticShoes_Black",
          "spawnWeight": 1,
          "attributes": {
            "healthMin": 0.45,
            "healthMax": 0.65,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": -1
        }
      ]
    }
  ],
  "discreteUnsortedItemSets": [
    {
      "name": "Cargo1",
      "spawnWeight": 1,
      "attributes": {
        "healthMin": 1.0,
        "healthMax": 1.0,
        "quantityMin": 1.0,
        "quantityMax": 1.0
      },
      "complexChildrenTypes": [
        {
          "itemType": "BandageDressing",
          "attributes": {
            "healthMin": 1.0,
            "healthMax": 1.0,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": 2
        },
        {
          "itemType": "Chemlight_Red",
          "attributes": {
            "healthMin": 1.0,
            "healthMax": 1.0,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": 1
        },
        {
          "itemType": "Pear",
          "attributes": {
            "healthMin": 1.0,
            "healthMax": 1.0,
            "quantityMin": 1.0,
            "quantityMax": 1.0
          },
          "quickBarSlot": 3
        }
      ]
    }
  ]
}

Véletlenszerű felszerelés kiválasztás

Randomizált felszereléseket hozhatsz létre különböző súlyú preset-ek használatával, és minden preset-en belül több discreteItemSets használatával csatlakozási pontonként:

Fájl: cfggameplay.json

json
"spawnGearPresetFiles": [
  "presets/common_survivor.json",
  "presets/rare_military.json",
  "presets/uncommon_hunter.json"
]

Valószínűség számítási példa:

Preset fájlspawnWeightEsély
common_survivor.json55/8 = 62.5%
uncommon_hunter.json22/8 = 25.0%
rare_military.json11/8 = 12.5%

Minden preset-en belül minden csatlakozási pont saját randomizálással is rendelkezik. Ha a Body csatlakozási pontnak három póló opciója van egyenként spawnWeight: 1-gyel, mindegyiknek 33% esélye van. Egy spawnWeight: 3 értékű póló két spawnWeight: 1 értékű tárgy mellett 60% eséllyel rendelkezne (3/5).


Integráció modokkal

A JSON preset rendszer használata modokból

A spawn felszerelés preset rendszer küldetés szintű konfigurációra tervezett. Azok a modok, amelyek egyéni felszereléseket akarnak biztosítani:

  1. Szállítsanak sablon JSON fájlt a mod dokumentációjával, ne a PBO-ba beágyazva.
  2. Dokumentálják az osztályneveket, hogy a szerver adminok hozzáadhassák a mod tárgyakat saját preset fájljaikhoz.
  3. Hagyják, hogy a szerver adminok regisztrálják a preset fájlt a cfggameplay.json-jukon keresztül.

Felülírás init.c-vel

Ha programozottan kell szabályoznod a spawn-olást (pl. szerep kiválasztás, adatbázis-vezérelt felszerelések, vagy feltételes felszerelés a játékos állapota alapján), írd felül a StartingEquipSetup()-ot az init.c-ben:

c
override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
    player.RemoveAllItems();

    EntityAI jacket = player.GetInventory().CreateInInventory("GorkaEJacket_Flat");
    player.GetInventory().CreateInInventory("GorkaPants_Flat");
    player.GetInventory().CreateInInventory("MilitaryBoots_Bluerock");

    if (jacket)
    {
        jacket.GetInventory().CreateInInventory("BandageDressing");
        jacket.GetInventory().CreateInInventory("Rag");
    }

    EntityAI weapon = player.GetHumanInventory().CreateInHands("AKM");
    if (weapon)
    {
        weapon.GetInventory().CreateInInventory("Mag_AKM_30Rnd");
        weapon.GetInventory().CreateInInventory("AK_PlasticBttstck");
        weapon.GetInventory().CreateInInventory("AK_PlasticHndgrd");
    }
}

Emlékeztető: Ha a spawnGearPresetFiles konfigurálva van a cfggameplay.json-ban, a JSON preset-ek élveznek elsőbbséget és a StartingEquipSetup() nem lesz meghívva.

Mod tárgyak preset-ekben

A moddolt tárgyak azonosan működnek a vanilla tárgyakkal a preset fájlokban. Használd a tárgy osztálynevét, ahogy a mod config.cpp-jében definiált:

json
{
  "itemType": "MyMod_CustomRifle",
  "spawnWeight": 1,
  "attributes": {
    "healthMin": 1.0,
    "healthMax": 1.0
  },
  "quickBarSlot": 1,
  "simpleChildrenUseDefaultAttributes": false,
  "simpleChildrenTypes": [
    "MyMod_CustomMag_30Rnd",
    "MyMod_CustomOptic"
  ]
}

Ha a mod nincs betöltve a szerveren, az ismeretlen osztálynevű tárgyak csendben nem jelennek meg. A preset többi része továbbra is érvényes.


Bevált gyakorlatok

  1. Indulj ki a vanilla-ból. Másold le a vanilla preset-et a hivatalos dokumentációból alapként és módosítsd, ahelyett, hogy a semmiből írnád.

  2. Használj több preset fájlt. Különítsd el a preset-eket téma szerint (túlélő, katonai, orvos) egyedi JSON fájlokban. Ez könnyebb karbantartást biztosít, mint egyetlen monolitikus fájl.

  3. Tesztelj fokozatosan. Adj hozzá egyszerre egy preset-et és ellenőrizd játékon belül. Bármely preset fájlban lévő JSON szintaxis hiba az összes preset csendes meghibásodását okozza.

  4. Használd tudatosan a súlyozott valószínűségeket. Tervezd meg a spawn súly eloszlást papíron. 5 preset-tel egy spawnWeight: 10 az egyiken dominálni fog minden mást.

  5. Validáld a JSON szintaxist. Használj JSON validátort telepítés előtt. A DayZ motor nem ad hasznos hibaüzeneteket hibás JSON-hoz --- egyszerűen figyelmen kívül hagyja a fájlt.

  6. Szándékosan rendeld hozzá a gyorssáv helyeket. A gyorssáv helyek 0-indexeltek. Több tárgy ugyanarra a helyre rendelése felülírja. Használj -1-et azoknál a tárgyaknál, amelyeknek nem kell a gyorssávon lenniük.

  7. Tartsd távol a spawn pontokat a víztől. A generátor eldobja a vízben lévő pontokat, de a partszélhez nagyon közeli pontok kényelmetlen pozíciókba helyezhetik a játékosokat. Mozgasd a pozíció buborékokat néhány méterrel szárazföldre.

  8. Használj csoportokat parti térképekhez. A spawn csoportok a Chernarus-on elosztják a friss spawn-okat a part mentén, megelőzve a zsúfoltságot a népszerű helyszíneken, mint Elektro.

  9. Igazítsd a ruházatot és a rakomány kapacitást. A rendezetlen rakomány tárgyak csak akkor jelenhetnek meg, ha a játékosnak van leltár helye. Ha túl sok rakomány tárgyat definiálsz, de csak egy pólót adsz a játékosnak (kis leltár), a felesleges tárgyak nem jelennek meg.


Gyakori hibák

HibaKövetkezményJavítás
Az enableCfgGameplayFile = 1 elfelejtése a serverDZ.cfg-benA cfggameplay.json nem töltődik be, a preset-ek figyelmen kívül maradnakAdd hozzá a jelzőt és indítsd újra a szervert
Érvénytelen JSON szintaxis (záró vessző, hiányzó zárójel)A fájlban lévő összes preset csendben meghibásodikValidáld a JSON-t külső eszközzel telepítés előtt
A spawnGearPresetFiles használata a StartingEquipSetup() kód eltávolítása nélkülA szkriptelt felszerelés csendben felül lesz írva a JSON preset-tel. Az init.c kód lefut, de a tárgyai lecserélődnekEz elvárt viselkedés, nem hiba. Távolítsd el vagy kommenteld ki az init.c felszerelés kódot a félreértések elkerüléséhez
spawnWeight: 0 beállításaAz érték a minimum alatt van. A viselkedés definiálatlanMindig használj spawnWeight: 1-et vagy magasabbat
Nem létező osztálynévre hivatkozásAz adott tárgy csendben nem jelenik meg, de a preset többi része működikEllenőrizd duplán az osztályneveket a mod config.cpp-je vagy types.xml-je alapján
Tárgy hozzárendelése olyan csatlakozási ponthoz, amelyet nem foglalhat elA tárgy nem jelenik meg. Nincs naplózott hibaEllenőrizd, hogy a tárgy inventorySlot[]-ja a config.cpp-ben egyezik a slotName-mel
Túl sok rakomány tárgy megjelenítése az elérhető leltár helyhez képestA felesleges tárgyak csendben eldobásra kerülnek (nem jelennek meg)Győződj meg, hogy a ruházatnak elegendő kapacitása van, vagy csökkentsd a rakomány tárgyak számát
Nem létező characterTypes osztálynevek használataA karakter létrehozása sikertelen, a játékos alapértelmezett modellként jelenhet megCsak érvényes survivor osztályneveket használj a CfgVehicles-ból
Spawn pontok elhelyezése vízben vagy meredek sziklákonA pontok eldobásra kerülnek, csökkentve az elérhető spawn-okat. Ha túl sok érvénytelen, a játékosok nem tudnak megjelenniTeszteld a koordinátákat játékon belül a debug monitorral
Az x/z koordináták felcserélése spawn pontoknálA játékosok rossz térkép helyeken jelennek megx = kelet-nyugat, z = észak-dél. Nincs y (függőleges) a spawn pont definíciókban

Adatfolyam összefoglalás

serverDZ.cfg
  └─ enableCfgGameplayFile = 1
       └─ cfggameplay.json
            └─ PlayerData.spawnGearPresetFiles: ["preset1.json", "preset2.json"]
                 ├─ preset1.json  (spawnWeight: 3)  ── 75% esély
                 └─ preset2.json  (spawnWeight: 1)  ── 25% esély
                      ├─ characterTypes[]         → véletlenszerű karakter modell
                      ├─ attachmentSlotItemSets[] → csatlakozási pont alapú felszerelés
                      │    └─ discreteItemSets[]  → súlyozott véletlenszerű csatlakozási pontonként
                      │         ├─ complexChildrenTypes[] → beágyazott tárgyak attribútumokkal
                      │         └─ simpleChildrenTypes[]  → beágyazott tárgyak, egyszerű
                      └─ discreteUnsortedItemSets[] → rakomány tárgyak
                           ├─ complexChildrenTypes[]
                           └─ simpleChildrenTypes[]

cfgplayerspawnpoints.xml
  ├─ <fresh>   → új karakterek (kötelező)
  ├─ <hop>     → szerver ugráló játékosok (csak hivatalos)
  └─ <travel>  → térkép utazók (csak hivatalos)
       ├─ spawn_params   → pontozás fertőzöttek/játékosok/épületek ellen
       ├─ generator_params → rács sűrűség, méret, lejtés korlátok
       └─ generator_posbubbles → pozíciók (opcionálisan elnevezett csoportokban)

Főoldal | << Előző: Szerver konfigurációs fájlok | Spawn felszerelés konfiguráció

Released under CC BY-SA 4.0 | Code examples under MIT License