Ir al contenido

El mercado

Seis monedas que se ha inventado esta ciudad, un precio que se mueve tanto si alguien lo mira como si no, y una forma de enviar un saldo de un móvil a otro sin que se entere ningún banco.

Nada de esto le pregunta nunca al mundo exterior cuánto vale algo. Los precios son los de tu servidor.


Abre aOscilaciónQué es
Santocoin SNT$42,0003%La primera que hizo la ciudad. Lenta, pesada y en la cartera de todo el mundo
Vinewood VNW$3,2008%La fama, con precio por horas
Bayview BAY$1802%Aburrida a propósito. Un sitio donde dejar el dinero mientras decides
Dustcoin DST$1215%Viene de fuera del condado, y ya ha ido a la luna dos veces
Voltline VLT$6409%Electricidad, agua y carreteras. Aburrida hasta que se va la luz
Omen OMN$422%Nadie sabe quién la creó

Quita una de la config y deja de existir. No se borra el saldo de nadie por ello: vuelve a poner la moneda y todo el mundo tiene lo que tenía.


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

Y por moneda: el precio al que abre, su Swing, un Drift que la empuja hacia arriba o hacia abajo a lo largo de semanas, un Floor y un Ceiling de los que nunca sale, y un Depth: el dinero que hace falta para mover esa moneda un uno por ciento cuando alguien opera con ella. Una moneda poco profunda es una que un jugador rico puede subir él solo, y eso es lo que hace que valga la pena tenerla y también temerla. Depth = 0 significa que las órdenes no mueven el precio en absoluto, lo cual es más sencillo y mucho más fácil de explotar.

Icon le da a una moneda su imagen; una moneda tuya sin icono recurre a un glifo dibujado y, si no, a la primera letra de su símbolo.


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

En modo character, un móvil robado le muestra al ladrón una app vacía. En modo device, el móvil es la cartera, y robar uno se lleva la cartera de inversiones con él.

Viene en character, porque el otro convierte cada atraco en un robo a un banco, y eso debería ser una elección deliberada de alguien y no un valor por defecto.


Un precio va en céntimos y un saldo en millonésimas de moneda, ambos números enteros de principio a fin, ambos redondeados en contra de quien opera, con la comisión encima. Comprar algo y venderlo en el mismo segundo siempre cuesta dinero: un mercado en el que eso sale a cero es un mercado en el que un bucle de comprar-vender-comprar-vender imprime dinero.

Al cliente nunca se le pregunta cuánto vale una moneda y nunca envía un precio. Cada escritura en una cartera está detrás de un bloqueo, porque leer los saldos, mover el dinero y volver a escribirlos son tres pasos con una espera entre cada uno, y de lo contrario dos órdenes en el mismo tick venderían las mismas monedas.


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 se niega antes que quedar en negativo, así que su respuesta también es ¿ha podido pagar?, que es la pregunta que realmente se hace una tienda que vende algo a cambio de monedas:

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