Wie programmiert man eine diskrete Seltenheit?

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
Finnian87
Beiträge: 2
Registriert: 01.12.2025, 10:51

Wie programmiert man eine diskrete Seltenheit?

Beitrag von Finnian87 »

Hallo Team!

Ich bin gerade dabei, das Design meines Beutesystems fertigzustellen, und suche nach einer Lösung, um die subtile Seltenheit bestimmter Gegenstände zu verwalten.
Meine Idee ist es, Gegenstände zu erstellen, die auf den ersten Blick sehr gewöhnlich erscheinen (sie haben einen Standardnennwert), deren wahre Seltenheit jedoch in einem ganz bestimmten internen Attribut liegt (ihrem „Prägejahr” oder ihrer „Werkstatt”). Ich möchte, dass nur erfahrene Spieler diese limitierte Serie sofort als die begehrteste erkennen können.

Hat jemand von euch schon einmal ein bedingtes Glückssystem programmiert, bei dem eine extrem niedrige Drop-Rate für eine Variante eines gewöhnlichen Gegenstands gilt?
xTr1m
Beiträge: 30
Registriert: 08.08.2025, 20:08

Re: Wie programmiert man eine diskrete Seltenheit?

Beitrag von xTr1m »

Ich kenne mich deterministischem Zufall aus.
Ohne geneauere Details zu deinem Projekt zu kennnen, kann ich zu bedingtem Glück folgendes sagen:
Zunächst sollte man mit einer einzigen RNG Instanz arbeiten, welche man mit einem Seed initialisieren kann. Dadurch hat man schon mal Determinismus.
Wenns um Drops aus einer Loot-Table geht, würde ich erstmals ermitteln wieviele Items enthalten sind, und dann für jedes Item mit dem RNG ein Index würfeln lassen. Damit weiß man schon, welche Items aus der Loot-Table gedroppt wurden.
Jetzt kann es pro Item eine gewisse Chance c geben, dass das Item anders ist. Sobald so ein Item-Index vom RNG gewürfelt wurde, lässt man den RNG nochmal würfeln, aber diesmal soll er eine reelle Zahl p zw. 0 und 1 erstellen. Da reicht es wenn man mit einem einfachen if prüft, ob p<=c ist, und modifiziert daraufhin das Item, bevor es mit dem Würfeln der anderen Indices weiter geht.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 625
Registriert: 05.07.2003, 11:17

Re: Wie programmiert man eine diskrete Seltenheit?

Beitrag von Lord Delvin »

Das ist ein reines UI-Problem. Deine interne Zustandsverwaltung musst du ja nicht komplett auf dem UI exponieren.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
joeydee
Establishment
Beiträge: 1206
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Wie programmiert man eine diskrete Seltenheit?

Beitrag von joeydee »

Wie du die Seltenheit dem Spieler gegenüber vermittelst (Prägejahr, ...), ist reine Designsache.

Auf Programmierseite kann sowas ungefähr so aussehen (wenn du z.B. die Items mit eindeutigen IDs verwaltest):

bool subtileSeltenheit(uint uniqueID,double chance){ return pseudorandom(seed=uniqueID,lower=0,upper=1)<=chance;}

Wobei pseudorandom() hier eine determinierte Zufallszahl auf Basis eines Seeds liefert. Wenn chance z.B. 1/100 ist (==0.01), liegt im Schnitt jede hundertste Pseudorandom-Zahl unter diesem Schwellwert und liefert "true". Macht Sinn für Ressourcen, die on-the-fly quasi endlos erzeugt werden müssen, weil der Wert erst auf Abruf erzeugt wird und nicht als Eigenschaft gespeichert werden muss. Z.B. Ressourcen in Open-World-Games. Da kann man auch den Seed aus der initialen Spawnposition "hashen", so mache ich das i.d.R.
In meinem letztjährigen ZFX-Action-Beitrag wurden so z.B. Hagebutten-Ressourcen in der Landschaft verteilt, welche lediglich "besondere" Büsche mit bestimmtem Seltenheitswert waren.

Wenn es eine feste Anzahl Items im Spiel gibt, kann man stattdessen auch einfach eine Liste von 990 "normalen" und 10 "besonderen" Items erzeugen und diese Liste durchmischen.
Antworten