Tote CCs, Entzug und Gruppen-CCs
Bisher entschied allein das Redesign darueber, ob eine Rueckkehr etwas kostet. Es fehlten zwei Faelle: ein Entzug ohne Anspruch auf kostenlose Rueckkehr, und der Tod im Rollenspiel. Ein toter CC laesst sich weder gratis noch gegen Guthaben auf dem normalen Weg zurueckholen - das entscheidet ein Administrator ueber einen eigenen Weg, mit Pflicht-Begruendung, und waehlt dabei, ob ein Guthaben fliesst. Schon das Eintragen des Todes verlangt eine Notiz. Dazu koennen sich mehrere Spieler einen CC teilen. Die Zugehoerigkeit laeuft ab jetzt durchgehend ueber eine eigene Tabelle, auch bei Einzel-CCs; die Migration traegt bestehende CCs als erstes Mitglied ihres Erstellers nach. Ohne das waere nach dem Update kein CC mehr beim Spieler aufgetaucht. Fuer jeden Mitnutzer gelten dieselben Regeln wie fuer einen eigenen CC: der Platz kostet ein eigenes Guthaben, wahlweise aus dem CC-Paket oder ueber ein Redesign. Ein Austritt gibt nichts zurueck, denn bis dahin wurde der CC genutzt; fuer eine Fehleingabe ist das Storno der richtige Weg. Der letzte Nutzer laesst sich nicht austragen - dann wird der CC deaktiviert. Ein Redesign nimmt die Gruppe mit.
This commit is contained in:
@@ -35,9 +35,16 @@ enum CharacterStatus {
|
||||
}
|
||||
|
||||
enum InactiveReason {
|
||||
/// Vom Server geputzt, weil der Spieler länger weg war. Kommt gratis zurück.
|
||||
PLAYER_INACTIVITY
|
||||
/// Durch ein Redesign ersetzt; das Original existiert nicht mehr.
|
||||
REWORKED
|
||||
/// Sonstiger Grund ohne Folgen, etwa eine zeitweise entfernte Einheit.
|
||||
OTHER
|
||||
/// Entzogen ohne Anspruch auf kostenlose Rückkehr.
|
||||
NO_FREE_CLAIM
|
||||
/// Im Rollenspiel gestorben. Rückkehr nur durch einen Administrator.
|
||||
DEAD
|
||||
}
|
||||
|
||||
enum ProductTarget {
|
||||
@@ -127,6 +134,7 @@ model Player {
|
||||
unmatched UnmatchedPackage[]
|
||||
forumThreads ForumThread[]
|
||||
aliases PlayerAlias[]
|
||||
memberships CharacterMember[]
|
||||
|
||||
@@index([displayName])
|
||||
}
|
||||
@@ -214,6 +222,7 @@ model Character {
|
||||
|
||||
ledgerEntries CreditLedger[]
|
||||
forumThreads ForumThread[]
|
||||
members CharacterMember[]
|
||||
|
||||
createdById Int?
|
||||
createdBy User? @relation("CharacterCreatedBy", fields: [createdById], references: [id], onDelete: SetNull)
|
||||
@@ -384,3 +393,31 @@ model PlayerAlias {
|
||||
@@unique([type, value])
|
||||
@@index([playerId])
|
||||
}
|
||||
|
||||
/// Wer einen CC nutzt. Die meisten CCs haben genau ein Mitglied, manche teilen
|
||||
/// sich mehrere Spieler ("Gruppen-CC"). Für jeden gelten dieselben Regeln: der
|
||||
/// Platz kostet ein eigenes Guthaben, und wer aussteigt bekommt nichts zurück.
|
||||
model CharacterMember {
|
||||
id Int @id @default(autoincrement())
|
||||
characterId Int
|
||||
character Character @relation(fields: [characterId], references: [id], onDelete: Cascade)
|
||||
playerId Int
|
||||
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)
|
||||
|
||||
joinedAt DateTime @default(now())
|
||||
/// Gesetzt, sobald der Spieler ausgestiegen ist. Der Eintrag bleibt stehen,
|
||||
/// damit nachvollziehbar ist, wer den CC wann genutzt hat.
|
||||
leftAt DateTime?
|
||||
|
||||
/// Womit der Platz bezahlt wurde. Leer beim Ersteller, dessen Buchung am
|
||||
/// CC selbst hängt.
|
||||
paidWith CreditKind?
|
||||
note String?
|
||||
|
||||
createdById Int?
|
||||
|
||||
/// Ein Spieler kann demselben CC nicht zweimal angehören.
|
||||
@@unique([characterId, playerId])
|
||||
@@index([playerId])
|
||||
@@index([characterId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user