GunSpec
Praxis

Spielwerte ohne Balancedrift

Die Spielfelder sind eine redaktionelle Balanceschicht, normiert auf 0 bis 100. Sie bewegen sich mit dem Katalog, und deshalb pinnt ein Build einen Snapshot fest.

Acht vergleichbare Werte, abgeleitet aus dem physischen Datensatz: Schaden, Präzision, Reichweite, Kadenz, Mobilität, Rückstoßkontrolle, Nachladegeschwindigkeit und Verdeckbarkeit. Die Feldreferenz definiert jeden.

  • Sie sind über den ganzen Katalog vergleichbar, und das ist der Zweck: eine 70 bedeutet bei einem Gewehr, was sie beim anderen bedeutet.
  • Sie sind redaktionell, nicht gemessen. Die gemessenen Werte dahinter (Gewicht, Lauf, Mündungsenergie, Kapazität) stehen im Datensatz selbst, und die gehören in eine Simulation.
  • Sie werden mit dem Katalog neu ausbalanciert. Eine Neubalance ist keine breaking change, also kündigt nichts sie einem Build an, der live liest.

Einmal bewusst wählen und die Wahl dort festhalten, wo der Rest Ihrer Build-Konfiguration liegt.

Was Sie bauenWas Sie lesenWarum
Einen ausgelieferten Spiel-BuildGET /v1/game-stats/versions/{version}/firearmsEingefrorene Werte. Eine Neubalance kann eine Waffe nicht zwischen Playtest und Release verändern.
Eine Website, ein Wiki, ein VergleichstoolGET /v1/firearms/{id}/game-statsLive-Werte, wie Leser sie von einer Seite über den aktuellen Katalog erwarten.
Die eigene Waffentabelle abstimmenGET /v1/game/tier-list?stat=S- bis D-Bänder für einen Wert: die Form, in der Designer streiten.
Eigene Ausreißer findenGET /v1/game/balance-reportVerteilungswarnungen über den Wertesatz: was relativ zum Rest über- oder untertuned ist.

Importieren Sie den Snapshot zu Beginn eines Zyklus in Ihre eigenen Datendateien und wechseln Sie ihn, wenn Sie es entscheiden. Behandeln Sie ihn wie eine Asset-Bundle-Version.

import-snapshot.ts
javascript
// Pick a version once, at the start of a development cycle,// and put it in your build config beside the asset version.const { data: versions } = await gunspec.gameStats.listVersions()// versions[0] is the newest. Choose deliberately; do not take [0]// at runtime, or you have re-implemented the live endpoint.const PINNED = '2026-09-01' // Everything frozen into that snapshot, paged. Import it once into// your own data files; do not call this at match start.const { data } = await gunspec.gameStats.listFirearms(PINNED, { per_page: 100 })
  • Lösen Sie die neueste Version nicht zur Laufzeit auf. Das ist wieder der Live-Endpunkt, nur umständlicher.
  • Einmal importieren, die Daten mit dem Build ausliefern. Matchstart ist keine Zeit für HTTP-Anfragen, und es ist Kontingent je Spieler statt je Release.
  • Halten Sie die Version im Repository fest. Bei einer Balance-Beschwerde ist die erste Frage, auf welchem Snapshot der Build lief.
  • Vergleichen Sie einen neuen Snapshot mit dem gepinnten, bevor Sie wechseln. Was sich ändert, ist eine Designentscheidung, kein Upgrade.

Eine Seite über den Katalog sollte dem Katalog folgen. Cachen Sie wie jeden anderen Datensatz und schreiben Sie auf die Seite, dass die Zahlen eine Balanceschicht sind und keine Messungen.

live-stats.ts
javascript
// The live numbers, which track the catalog and change when it// is rebalanced. Right for a website, a wiki or a comparison tool -// wrong for a build that has to behave the same next week.const { data: stats } = await gunspec.firearms.getGameStats('glock-g17') // Each stat is 0-100 and comparable across the catalog: they are a// balance layer, not a measurement. The physical figures they were// derived from are on the record itself.

Vier Aufrufe, damit Sie das nicht über einen Spiegel selbst rechnen; die Spielreferenz hat die Parameter.

  • /v1/game/tier-list bändert Waffen von S bis D für einen Wert.
  • /v1/game/matchups vergleicht zwei direkt, /role-roster besetzt eine Rolle wie Scharfschütze oder Sturmwaffe aus dem Katalog.
  • /v1/game/stat-distribution ist das Histogramm hinter einem Wert: so entscheiden Sie, ob Ihre eigene Kurve ungewöhnlich ist.
  • /v1/game/balance-report ist Studio, die anderen drei sind Builder.