diff --git a/client/src/actions.jsx b/client/src/actions.jsx
index a15f753a..06e644d5 100644
--- a/client/src/actions.jsx
+++ b/client/src/actions.jsx
@@ -23,6 +23,7 @@ export const setResolution = value => ({ type: 'SET_RESOLUTION', value });
export const setShowLog = value => ({ type: 'SET_SHOW_LOG', value });
export const setShowNav = value => ({ type: 'SET_SHOW_NAV', value });
export const setSkip = value => ({ type: 'SET_SKIP', value });
+export const setShop = value => ({ type: 'SET_SHOP', value });
export const setTeam = value => ({ type: 'SET_SELECTED_CONSTRUCTS', value: Array.from(value) });
export const setVboxHighlight = value => ({ type: 'SET_VBOX_HIGHLIGHT', value });
export const setWs = value => ({ type: 'SET_WS', value });
diff --git a/client/src/components/account.status.jsx b/client/src/components/account.status.jsx
index a2e61b0b..69544435 100644
--- a/client/src/components/account.status.jsx
+++ b/client/src/components/account.status.jsx
@@ -96,7 +96,7 @@ function AccountStatus(args) {
{saw(pingColour(ping))}
-
¤ {account.credits}
+
¤ {account.balance}
- setMtxActive('Reimage')} >
- Reimage
-
-
- setMtxActive('Rename')} >
- Rename
-
-
-
- Invader Architecture
-
-
-
- Molecular Architecture
-
-
+ {shop.owned.map(useMtx)}
+
+
Shop
+
+ {shop.available.map(availableMtx)}
);
diff --git a/client/src/events.jsx b/client/src/events.jsx
index 26d1926a..c28acca4 100644
--- a/client/src/events.jsx
+++ b/client/src/events.jsx
@@ -111,6 +111,10 @@ function registerEvents(store) {
store.dispatch(actions.setAccount(account));
}
+ function setShop(v) {
+ store.dispatch(actions.setShop(v));
+ }
+
function clearCombiner() {
store.dispatch(actions.setInfo([]));
store.dispatch(actions.setCombiner([null, null, null]));
@@ -233,6 +237,7 @@ function registerEvents(store) {
setInstanceList,
setItemInfo,
setPing,
+ setShop,
setWs,
};
}
diff --git a/client/src/reducers.jsx b/client/src/reducers.jsx
index ac770f8c..161044ce 100644
--- a/client/src/reducers.jsx
+++ b/client/src/reducers.jsx
@@ -35,6 +35,7 @@ module.exports = {
reclaiming: createReducer(false, 'SET_RECLAIMING'),
resolution: createReducer(null, 'SET_RESOLUTION'),
skip: createReducer(false, 'SET_SKIP'),
+ shop: createReducer(false, 'SET_SHOP'),
team: createReducer([null, null, null], 'SET_SELECTED_CONSTRUCTS'),
vboxHighlight: createReducer([], 'SET_VBOX_HIGHLIGHT'),
ws: createReducer(null, 'SET_WS'),
diff --git a/client/src/socket.jsx b/client/src/socket.jsx
index 71230f83..f79131ea 100644
--- a/client/src/socket.jsx
+++ b/client/src/socket.jsx
@@ -124,6 +124,10 @@ function createSocket(events) {
// events.clearMtxActive();
}
+ function sendMtxBuy(mtx) {
+ send(['MtxBuy', { mtx }]);
+ }
+
// -------------
// Incoming
// -------------
@@ -133,6 +137,10 @@ function createSocket(events) {
sendAccountInstances();
}
+ function onAccountShop(shop) {
+ events.setShop(shop);
+ }
+
function onAccountInstances(list) {
events.setAccountInstances(list);
setTimeout(sendAccountInstances, 5000);
@@ -198,6 +206,7 @@ function createSocket(events) {
AccountState: onAccount,
AccountConstructs: onAccountConstructs,
AccountInstances: onAccountInstances,
+ AccountShop: onAccountShop,
GameState: onGameState,
InstanceState: onInstanceState,
ItemInfo: onItemInfo,
@@ -308,6 +317,7 @@ function createSocket(events) {
sendVboxUnequip,
sendItemInfo,
sendMtxApply,
+ sendMtxBuy,
startInstanceStateTimeout,
startGameStateTimeout,
connect,
diff --git a/ops/migrations/20180913000513_create_accounts.js b/ops/migrations/20180913000513_create_accounts.js
index f693e90c..4c0b2070 100755
--- a/ops/migrations/20180913000513_create_accounts.js
+++ b/ops/migrations/20180913000513_create_accounts.js
@@ -9,7 +9,7 @@ exports.up = async knex => {
table.string('token', 64).notNullable();
table.timestamp('token_expiry').notNullable();
- table.bigInteger('credits')
+ table.bigInteger('balance')
.defaultTo(0)
.notNullable();
@@ -23,7 +23,7 @@ exports.up = async knex => {
await knex.schema.raw(`
ALTER TABLE accounts
- ADD CHECK (credits > 0);
+ ADD CHECK (balance > 0);
`);
};
diff --git a/server/src/account.rs b/server/src/account.rs
index dd5f988b..a8bc95f7 100644
--- a/server/src/account.rs
+++ b/server/src/account.rs
@@ -14,6 +14,7 @@ use instance::{Instance, instance_delete};
use mtx::{Mtx, FREE_MTX};
use pg::Db;
+
use failure::Error;
use failure::{err_msg, format_err};
@@ -23,13 +24,13 @@ static PASSWORD_MIN_LEN: usize = 11;
pub struct Account {
pub id: Uuid,
pub name: String,
- pub credits: u32,
+ pub balance: u32,
pub subscribed: bool,
}
pub fn select(tx: &mut Transaction, id: Uuid) -> Result