Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

1

22.09.2016, 21:07

Design LootTable

In meinem derzeitigen Prototypen möchte ich ein klassisches Lootsystem implementieren und überlege gerade wie das am besten - hinsichtlich Wartbarkeit - zu machen ist.
Google liefert hier alle möglichen und unmöglichen Lösungsansätze, bin aber noch unschlüssig ob das das Richtige ist.

Folgende Idee:

Ausgelagerte Loottabelle im XML Format für eine möglichst hohe Felxibilität.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
<LootTable id="consumable">
    <Items>
        <Item id="c01" name="Apple" rarity="50" value="1" />
        <Item id="c02" name="Fish" rarity="20" value="3" />
    </Items>
</LootTable>
<LootTable id="material">
    <Items>
        <Item id="m01" name="Screw" rarity="10" value="5" />
        <Item id="m02" name="Gear-Wheel" rarity="10" value="25" />
    </Items>
</LootTable>


Über eine Item-Klasse wird dieses File entsprechend eingelesen. Etwaige Container die diese Items beinhalten können (Kisten, Gegner, etc) werden bei ihrer Aktivierung (Kiste wird geöffnet, Gegner geplündert) per Zufall mit diesen Items befüllt. Durch die LootTable id könnte man z.B. Obstkisten nur mit consumables befüllen lassen.
Ein entsprechendes Spielerinventar wäre dann ebenfalls nur eine Liste von Item-IDs.

Ist das im Grunde wirklich so einfach oder übersehe ich da etwas? Wie habt ihr so etwas gelöst?

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

22.09.2016, 22:33

Wuerde sich da nicht eher ein 'Tag' System als eine feste Kategorisierung anbieten?

z.B. koenntest du einfach eine lose Liste von Items speichern, und jedem Item mehrere Tags geben. Das ist von der Struktur her einfacher und flexibler da jedes Item mehrere Kategorien belegen koennte.

Wenn du das ganze noch weiter treiben moechtest koenntest du die Tags auch strukturieren, so dass Obst eine Unterkategorie von Consumables wird. z.B.

<Item id="apple" name="Apple" tags="consumable.fruit, human" />
<Item id="raw_steak" name="Raw Steak" tags="consumable.meat, monster, human" />

z.B. koenntest du dann Kisten haben die alle consumables beinhalten. Ein Bauer koennte Aepfel und Steaks droppen. Ein Monster isst keine Aepfel also droppt vllt nur Fleisch und Pelz, oder ein Obstkorb der nur consumable.fruit enthaelt.

Waere denke ich sowohl einfacher als auch flexibler als eine feste Tabelle.

Magalter

Frischling

Beiträge: 3

Wohnort: NRW

Beruf: angehender Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

23.09.2016, 08:57

Minecraft hat da inzwischen einen guten Ansatz. Seit der neueren Versionen können Map-Maker die Loot-Tabellen für alle Monster oder Dungeon-Kisten im Spiel selber editieren. Man kann auch eigene Loot-Tables erstellen und im Spiel den Objekten zuweisen. Sie haben das, wie so oft, im JSON-Format gespeichert. Das Prinzip ist im Grunde so: Ein Loot-Table enthalt eine Liste von Item-Pools, jeder Item-Pool hat eine Liste von Items. Jeder Pool wird geprüft, jeder Pool hat eine angegebene Anzahl wie oft er durchgewürfelt wird. Beim Durchwürfeln wird ein Item gewählt (es kann auch Stapel eines Items sein, wiederum mit fester Anzahl oder einer Zufalls-Range), basierend auf seiner Wahrscheinlichkeit. Die Wahrscheinlichkeiten sind als Integer angegeben, wodurch jedem Item dann eine anteilige Gewichting zugesprochen wird. (Item-Wert / Summe der Itemwerte) Ein Item mit Wert 10 ist also doppelt so häufig wie eines mit Wert 5, wobei man dann noch nicht sagen kann, wie häufig beide in absoluten zahlen sind. Es gibt dann noch Bedingungen bei Items, wann sie droppen sollen oder nicht. Eigenschaften des Spielers können noch Chancen und Würfeldurchgänge ändern (Glück-Eigenschaft etc.)
Also als Inspiration, ist es schon ziemlich gut. Darum ein Link ins Minecraft-Wiki wo es nochmal erklärt wird: Link

Hauptbereich:
C# und Unity-Engine

Andere Kenntnisse:
Java
C++

PHP,JS,HTML,CSS (nich so gerne)

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

4

23.09.2016, 12:50

In Galactineers verwende ich folgendes Schema für meine Loot-Tabellen:

Quellcode

1
2
3
4
5
6
7
8
9
10
<Loot>
    <Unlock ShipModuleId="132" />
    <Money Amount="1000" />
    <ShipConstructionPlan Id="Rosinante" />
    <Resources>
        <Item Type="Block" Index="6" Amount="20" />
        <Item Type="Block" Index="12" Amount="20" />
        <Item Type="CollectableItem" Index="2" Amount="10" />
    </Resources>
</Loot>

Man kann also Schiffsmodule für den Spieler freischalten (über die ID des Moduls, <Unlock> kann es mehrfach geben), man kann Geld erhalten (<Money> kann es nur einmal geben), man kann Schiffsbaupläne bekommen (über die ID des Schiffs aus der Schiffsdefinitionstabelle, <ShipConstructionPlan> kann es mehrfach geben) und dann regulär Ressourcen. Darin kann es n <Item> Einträge geben, während ein Item eindeutig durch die Kombination Typ/Index definiert wird (Block 6 ist zum Beispiel roter Granit) und dann die Menge angegeben wird.

So kann der Editor einer Mission seine Belohnungen relativ simpel festlegen. Solch ein Schema noch um Mechaniken wie Pools oder Wahrscheinlichkeiten zu ergänzen, ist durch zusätzliche Tag-Gruppen oder Attribute ja relativ leicht umzusetzen.

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

5

23.09.2016, 13:09

Danke für euren Input. Mit XML bin ich also zumindest mal auf dem richtigen Weg.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

23.09.2016, 14:10

Mit XML bin ich also zumindest mal auf dem richtigen Weg.


Jain. Ob jetzt XML, JSON oder was eigenes ist dabei nebensächlich. Hauptsache, du kommst an die Daten ran und kannst sie komfortabel bearbeiten ;)

Werbeanzeige