Door Event Coordinator

Kunden, Rechnungen und Polizeibesuche

DOOR ist nicht nur ein Slot, sondern ein Ereigniskoordinator. Die Oberfläche priorisiert offene Polizeifälle, periodische Rechnungshinweise und Kundenangebote.

Ereignispriorität

1 · kritischPolizei offenZahlung oder Beschlagnahme
2 · periodischRechnungshinweisbezahlen oder später
3 · VerkaufKundenangebotannehmen, ablehnen, später

Ein bereits offener Polizeifall verhindert neue Kundenangebote. Die Rechnung bleibt im Ledger, auch wenn der Türhinweis geschlossen wurde.

Kundenangebot

SchrittMethodeLogik
VerfügbarkeitCUSTOMER_SALES.available()prüft freie, nicht reservierte Weed- oder Tablettenbestände
AnkunftcreateOfferAtomic()eine Transaktion prüft offene Ereignisse, würfelt Polizei und reserviert Ware
Auswahlinterne choices()zufällige Produktgruppe, Produkt, NPC und Menge 1–20
AnnahmeacceptAtomic(id)Hold validieren, Bestand reduzieren, USD gutschreiben, Historie/Statistik erhöhen
AblehnungdeclineAtomic(id)Reservierung entfernen, Angebot löschen, Nachfrage ablehnen erhöhen
SpäterDOOR.postponeOffer()Popup schließen; persistentes Angebot/Reservierung bleibt erhalten

NPCs

Skinny Jeans, Sticky, Andy und Metal Jack. Das NPC-Bild beeinflusst keine Preise oder Mengen.

Preise

Weed nutzt den Sortenpreis pro Gramm; Legacy-Bestand 5,00 $/g. Chemieprodukte nutzen bundlePrice × 10 pro Tablette.

Historie

Maximal 20 Türverkäufe im State. Statistik zählt Verkäufe, Gramm, Tabletten, Umsatz, größten Verkauf und letzten Zeitpunkt.

Nachfrage

doorDemand[kind:productId] zählt requests, accepted und declined.

Reservierungssystem

SALE_RESERVATIONS verhindert, dass dieselbe physische Ware gleichzeitig an der Tür und im Darkweb angeboten wird.

FunktionAufgabe
freeSaleStock()physischer Bestand minus alle gültigen Holds, optional ohne aktuellen Hold
reserveSale()prüft Produkt, Epoch, Menge und freien Bestand; legt Hold an
pruneSales()entfernt abgelaufene Darkweb-Quotes/Holds; Tür-Holds besitzen kein Ablaufdatum
assertSales()prüft Konsistenz von Angebot, Quote, Hold und physischem Bestand

Polizeimechanik

0,5 %Chance bei möglicher Kundenankunft
30 minCooldown zwischen Auslösungen
250–5.000 $Minimum/Maximum der Geldstrafe
20Einträge Polizeihistorie

Bewertung und Strafe

Der Warenwert besteht aus Weed zum jeweiligen Verkaufspreis und Chemieprodukten zum Bündelpreis. Die Strafe wird auf 1-$-Stufen gerundet und zwischen 250 $ und 5.000 $ begrenzt.

POLICE_EVENTS.pay()

Prüft Fall-ID und Epoch, zieht die vollständige Strafe ab, aktualisiert Statistik/Historie und schließt den Fall. Reicht das Geld nicht, bleibt der Fall offen.

POLICE_EVENTS.seize()

Leert Weed, Tabletten, Rohstoffe, Pflanzen und Chemieaufträge; entfernt Verkaufsreservierungen und zählt die Verluste.

Freeze-InvarianteSolange ein Polizeifall offen ist, verbietet assertPoliceFreeze() jede andere Buchung, die konfiszierbare Waren, Pflanzen oder Chemiejobs verändert. Nur police:pay und police:seize dürfen den Zustand auflösen.

Rechnung an der Tür

AktionWirkung
openOfferAtomic({allowOutstanding:true})öffnet den mit doorNoticeBillId verknüpften ältesten offenen Beleg
payBill()zahlt nur diese Rechnung, auch teilweise; entfernt den Hinweis nach einer sinnvollen Zahlung
postponeBill()führt dismissDoorNotice() aus; die Schuld bleibt in der Banking-App
newNotification()zeichnet genau das derzeit priorisierte Ereignis
notificationInterval()plant Folgeereignisse über GameClock statt eigener Dauerintervalle