Рынок
Шесть монет, придуманных этим городом, цена, которая движется независимо от того, смотрит ли на неё кто-нибудь, и способ отправить пакет монет с одного телефона на другой, чтобы банк об этом не услышал.
Ничто здесь никогда не спрашивает у внешнего мира, сколько что-то стоит. Цены — ваши, серверные.
Монеты, с которыми он поставляется
Заголовок раздела «Монеты, с которыми он поставляется»| Открытие | Размах | Что это | |
|---|---|---|---|
| Santocoin SNT | $42,000 | 3% | Первая, которую придумал город. Медленная, тяжёлая, есть в каждом кошельке |
| Vinewood VNW | $3,200 | 8% | Слава, оцениваемая почасово |
| Bayview BAY | $180 | 2% | Скучная намеренно. Место, куда можно положить деньги, пока вы решаете |
| Dustcoin DST | $12 | 15% | Родом из округа, и на Луне уже побывала дважды |
| Voltline VLT | $640 | 9% | Электричество, вода и дороги. Скучная, пока не погаснет свет |
| Omen OMN | $4 | 22% | Никто не знает, кто её создал |
Уберите монету из конфига — и она перестанет существовать. Ничьи накопления при этом не удаляются: верните монету — и у каждого будет то, что было.
Как движется рынок
Заголовок раздела «Как движется рынок»shared/config/crypto.lua:
Tick = 300, -- seconds between one price and the nextVolatility = 1.0, -- every coin's swing, multiplied. One number for the whole marketHistory = 48, -- how many prices the chart remembersShock = { Chance = 0.02, Size = 0.22 }, -- rare, and the reason anybody checks twice a dayFee = 0.02, -- the house, on the way in and on the way outTrade = { Min = 10, Max = 250000 }, -- what one order may be, in moneyА для каждой монеты: цена открытия, её Swing, Drift, смещающий цену вверх или вниз на протяжении недель, Floor и Ceiling, за которые она никогда не выходит, и Depth — деньги, нужные для того, чтобы сдвинуть эту монету на один процент, когда кто-то ею торгует. Тонкую монету богатый игрок может сдвинуть в одиночку, и именно поэтому тонкую монету стоит и держать, и бояться. Depth = 0 означает, что ордера вообще не двигают цену — это проще, но и фармить гораздо легче.
Icon задаёт монете картинку; у вашей собственной монеты без неё используется нарисованный глиф, а затем первая буква её символа.
Чей кошелёк
Заголовок раздела «Чей кошелёк»Wallet = 'character', -- or 'device'В режиме character украденный телефон показывает вору пустое приложение. В режиме device телефон и есть кошелёк, и кража телефона уносит с собой весь портфель.
По умолчанию стоит character, потому что второй вариант превращает каждое ограбление на улице в ограбление банка, и это должно быть чьим-то осознанным решением, а не значением по умолчанию.
Чего не может случиться
Заголовок раздела «Чего не может случиться»Цена хранится в центах, а пакет — в миллионных долях монеты; оба — целые числа на всём пути, оба округляются против того, кто торгует, а сверху добавляется комиссия. Купить что-то и продать обратно в ту же секунду всегда стоит денег — рынок, где это выходит в ноль, это рынок, на котором цикл «купи-продай-купи-продай» печатает деньги.
У клиента никогда не спрашивают, сколько стоит монета, и он никогда не присылает цену. Каждая запись в кошелёк идёт под блокировкой, потому что чтение пакетов, перемещение денег и запись обратно — это три шага с yield между каждым из них, и два ордера в одном тике иначе оба продали бы одни и те же монеты.
Для других ресурсов
Заголовок раздела «Для других ресурсов»exports.mic_phone:Coins() --> every coin, with price, change and historyexports.mic_phone:CoinPrice('santo') --> 42137.55, in moneyexports.mic_phone:GetCrypto(src, 'santo') --> 0.4218exports.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 scriptexports.mic_phone:RemoveCrypto(src, 'omen', 12.5) --> false when they did not have it, and nothing movesexports.mic_phone:SetCoinPrice('omen', 0.4) --> move the market for a storyRemoveCrypto отказывает, а не уходит в минус, поэтому его ответ — это ещё и смог ли человек заплатить, — именно тот вопрос, который на самом деле задаёт магазин, продающий что-то за монеты:
if exports.mic_phone:RemoveCrypto(src, 'omen', price) then giveThem(thing) end