Przejdź do głównej zawartości

Rynek

Sześć monet wymyślonych przez to miasto, cena, która się porusza, czy ktoś patrzy, czy nie, i sposób na przesłanie udziałów z jednego telefonu na drugi bez wiedzy banku.

Nic tu nigdy nie pyta świata zewnętrznego, ile coś jest warte. Ceny są Twojego serwera.


OtwarcieWahaniaCzym jest
Santocoin SNT$42,0003%Pierwsza, którą stworzyło miasto. Powolna, ciężka, w portfelu każdego
Vinewood VNW$3,2008%Sława, wyceniana co godzinę
Bayview BAY$1802%Nudna celowo. Miejsce, gdzie odłożyć pieniądze, zanim się zdecydujesz
Dustcoin DST$1215%Spoza hrabstwa, a już dwa razy była na księżycu
Voltline VLT$6409%Prąd, woda i drogi. Nudna, dopóki nie zgasną światła
Omen OMN$422%Nikt nie wie, kto ją stworzył

Usuń jedną z configu, a przestaje istnieć. Przez to nikt nie traci swoich udziałów — przywróć monetę, a każdy ma to, co miał.


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

A dla każdej monety: cena otwarcia, jej Swing, Drift, który przechyla ją w górę lub w dół w skali tygodni, Floor i Ceiling, z których nigdy nie wychodzi, oraz Depth — pieniądze potrzebne, by poruszyć tę monetę o jeden procent, gdy ktoś nią handluje. Cienka moneta to taka, na którą bogaty gracz może wjechać sam, i właśnie to sprawia, że cienką monetę warto trzymać i warto się jej bać. Depth = 0 oznacza, że zlecenia w ogóle nie poruszają ceny, co jest prostsze i znacznie łatwiejsze do farmienia.

Icon daje monecie obrazek; własna moneta bez niego wraca do rysowanego glifu, a potem do pierwszej litery jej symbolu.


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

W trybie character skradziony telefon pokazuje złodziejowi pustą aplikację. W trybie device telefon jest portfelem, a kradzież jednego zabiera ze sobą cały portfel.

Domyślnie jest ustawiony na character, bo ten drugi zamienia każdy rozbój w napad na bank, a to powinno być czyjąś świadomą decyzją, a nie ustawieniem domyślnym.


Cena jest w centach, a udział w milionowych częściach monety, obie jako liczby całkowite przez cały czas, obie zaokrąglane na niekorzyść handlującego, z prowizją na wierzchu. Kupienie czegoś i sprzedanie z powrotem w tej samej sekundzie zawsze kosztuje pieniądze — rynek, na którym wychodzi się na zero, to rynek, na którym pętla kup-sprzedaj-kup-sprzedaj drukuje pieniądze.

Klient nigdy nie jest pytany, ile coś jest warte, i nigdy nie wysyła ceny. Każdy zapis do portfela odbywa się pod blokadą, ponieważ odczytanie udziałów, przesunięcie pieniędzy i zapisanie ich z powrotem to trzy kroki z yieldem między każdym z nich, a dwa zlecenia w tym samym ticku sprzedałyby te same monety dwa razy.


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 odmawia zamiast zejść poniżej zera, więc jego odpowiedź to zarazem czy było ich stać — a to jest pytanie, które faktycznie zadaje sklep sprzedający coś za monety:

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