Zum Inhalt springen

Der Markt

Sechs von dieser Stadt erfundene Coins, ein Kurs, der sich bewegt, egal ob jemand zuschaut oder nicht, und ein Weg, Guthaben von einem Telefon auf ein anderes zu übertragen, ohne dass eine Bank davon erfährt.

Nichts darin fragt jemals die Außenwelt, was irgendetwas wert ist. Die Kurse gehören einzig deinem Server.


Startet beiSchwankungWas es ist
Santocoin SNT$42.0003%Die erste Währung der Stadt. Träge, schwer, im Wallet von jedem
Vinewood VNW$3.2008%Ruhm, stundenweise bewertet
Bayview BAY$1802%Bewusst langweilig. Ein Ort zum Geldparken, während man überlegt
Dustcoin DST$1215%Kommt von außerhalb des Countys und war schon zweimal auf dem Mond
Voltline VLT$6409%Strom, Wasser und Straßen. Langweilig, bis das Licht ausgeht
Omen OMN$422%Niemand weiß, wer ihn erschaffen hat

Entfernst du einen Coin aus der Config, hört er auf zu existieren. Das Guthaben von Spielern wird dadurch nicht gelöscht — fügst du den Coin wieder ein, hat jeder wieder das, was er vorher besaß.


shared/config/crypto.lua:

Tick = 300, -- seconds between one price and the next
Volatility = 1.0, -- every coin's swing, multiplied. One number for the whole market
History = 48, -- how many prices the chart remembers
Shock = { Chance = 0.02, Size = 0.22 }, -- rare, and the reason anybody checks twice a day
Fee = 0.02, -- the house, on the way in and on the way out
Trade = { Min = 10, Max = 250000 }, -- what one order may be, in money

Und pro Coin: der Startkurs, seine Schwankungsbreite Swing, ein Drift, der ihn über Wochen nach oben oder unten neigen lässt, eine Untergrenze Floor und eine Obergrenze Ceiling, die er nie verlässt, sowie eine Depth — das Kapital, das erforderlich ist, um diesen Coin bei einem Trade um ein Prozent zu bewegen. Ein Coin mit geringer Markttiefe ist einer, den ein wohlhabender Spieler im Alleingang nach oben treiben kann — das macht einen solchen Coin lohnend und zugleich riskant. Depth = 0 bedeutet, dass Trades den Kurs überhaupt nicht beeinflussen, was einfacher und viel leichter auszunutzen ist.

Icon verleiht einem Coin sein Bild; ein eigener Coin ohne Icon greift auf eine gezeichnete Glyphe und danach auf den ersten Buchstaben seines Symbols zurück.


Wallet = 'character', -- or 'device'

Im character-Modus sieht ein Dieb auf einem gestohlenen Telefon eine leere App. Im device-Modus ist das Telefon das Wallet, und der Diebstahl eines Telefons nimmt das gesamte Krypto-Portfolio mit.

Standardmäßig ist character eingestellt, da der andere Modus jeden Raubüberfall in einen Bankraub verwandelt — das sollte eine bewusste Entscheidung sein und kein Standardwert.


Ein Kurs wird in Cents geführt und ein Bestand in Millionstel eines Coins, beides durchgehend ganze Zahlen, beide zu Ungunsten des Händlers gerundet, zuzüglich der Provision. Etwas zu kaufen und in derselben Sekunde wieder zu verkaufen, kostet immer Geld — ein Markt, bei dem das bei null herauskäme, wäre ein Markt, bei dem eine Schleife aus Kaufen-Verkaufen-Kaufen-Verkaufen unendlich Geld druckt.

Der Client wird niemals gefragt, was ein Coin wert ist, und sendet niemals einen Kurs. Jeder Schreibvorgang auf ein Wallet ist mit einem Lock geschützt, da das Lesen der Bestände, das Verschieben des Geldes und das Zurückschreiben drei Schritte mit Wartezeit dazwischen sind; zwei Aufträge im selben Tick würden sonst beide dieselben Coins verkaufen.


exports.mic_phone:Coins() --> every coin, with price, change and history
exports.mic_phone:CoinPrice('santo') --> 42137.55, in money
exports.mic_phone:GetCrypto(src, 'santo') --> 0.4218
exports.mic_phone:GetCryptoValue(src) --> the whole portfolio, in money
exports.mic_phone:AddCrypto(src, 'omen', 12.5) --> a hack that pays in coin, a mining script
exports.mic_phone:RemoveCrypto(src, 'omen', 12.5) --> false when they did not have it, and nothing moves
exports.mic_phone:SetCoinPrice('omen', 0.4) --> move the market for a story

RemoveCrypto lehnt die Transaktion ab, anstatt ins Minus zu laufen. Die Rückgabe zeigt also auch, ob der Spieler bezahlen konnte — genau die Frage, die sich ein Shop stellt, der etwas gegen Krypto verkauft:

if exports.mic_phone:RemoveCrypto(src, 'omen', price) then giveThem(thing) end