Merge branch 'release/1.6.5'

This commit is contained in:
ntr 2019-10-26 16:15:55 +11:00
commit 03263b2491
29 changed files with 123 additions and 83 deletions

View File

@ -1 +1 @@
1.6.4 1.6.5

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-client", "name": "mnml-client",
"version": "1.6.4", "version": "1.6.5",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -11,8 +11,8 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="2100mm" width="2100mm"
height="1100mm" height="2100mm"
viewBox="0 0 2100 1100" viewBox="0 0 2100 2100"
version="1.1" version="1.1"
id="svg16" id="svg16"
inkscape:version="0.92.1 r15371" inkscape:version="0.92.1 r15371"
@ -2008,15 +2008,15 @@
id="g4989"> id="g4989">
<polygon <polygon
style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
points="100,10 190,190 10,190 " points="190,190 10,190 100,10 "
id="polygon4983" /> id="polygon4983" />
<polygon <polygon
style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
points="100,50 160,170 40,170 " points="160,170 40,170 100,50 "
id="polygon4985" /> id="polygon4985" />
<polygon <polygon
style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" style="fill:none;stroke:#f5f5f5;stroke-width:5.92435312;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
points="100,90 130,150 70,150 " points="130,150 70,150 100,90 "
id="polygon4987" /> id="polygon4987" />
</g> </g>
</mask> </mask>
@ -2459,9 +2459,9 @@
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="0.079573438" inkscape:zoom="0.079573438"
inkscape:cx="3528.1874" inkscape:cx="3528.1874"
inkscape:cy="583.63933" inkscape:cy="3097.0409"
inkscape:document-units="mm" inkscape:document-units="mm"
inkscape:current-layer="layer2" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:snap-grids="true" inkscape:snap-grids="true"
inkscape:window-width="1920" inkscape:window-width="1920"
@ -2515,7 +2515,7 @@
id="layer2" id="layer2"
inkscape:label="boxes" inkscape:label="boxes"
style="display:none" style="display:none"
transform="translate(0,100)"> transform="translate(0,1100)">
<path <path
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 50,200.00004 V -49.999959 H 550 V 200.00004 H 50" d="M 50,200.00004 V -49.999959 H 550 V 200.00004 H 50"
@ -2536,21 +2536,21 @@
inkscape:label="face" inkscape:label="face"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(-472.60042,1435.1467)" transform="translate(-472.60042,2435.1467)"
style="display:inline"> style="display:inline">
<path <path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 522.60042,-1135.1467 250,-250 249.99998,250" d="m 522.60043,-1635.1467 250,-250 249.99997,250"
id="path4950" id="path4950"
inkscape:connector-curvature="0" /> inkscape:connector-curvature="0" />
<path <path
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 2022.6004,-1135.1467 250,-250 250,250" d="m 2022.6004,-1635.1467 250,-250 250,250"
id="path4957" id="path4957"
inkscape:connector-curvature="0" /> inkscape:connector-curvature="0" />
<path <path
style="fill:none;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-variant-east_asian:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f5f5f5;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 1022.6004,-385.14667 h 1000" d="m 1022.6004,-885.14671 h 1000"
id="path7471" id="path7471"
inkscape:connector-curvature="0" /> inkscape:connector-curvature="0" />
</g> </g>

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -150,4 +150,22 @@ button {
&.green { &.green {
border-color: @green; border-color: @green;
} }
} }
@keyframes rgb {
0% {
color: @red;
}
25% {
color: @white;
}
50% {
color: @blue;
}
75% {
color: @white;
}
100% {
color: @green;
}
}

View File

@ -85,6 +85,17 @@ aside {
transition-property: color, background; transition-property: color, background;
transition-duration: 0.25s; transition-duration: 0.25s;
transition-timing-function: ease; transition-timing-function: ease;
&:enabled {
color: forestgreen;
border-color: forestgreen;
&:hover {
background: forestgreen;
color: black;
border-color: forestgreen;
}
}
} }
.team-page-ctrl { .team-page-ctrl {
@ -117,6 +128,10 @@ aside {
font-size: 200%; font-size: 200%;
animation: co 0.75s cubic-bezier(0, 0, 1, 1) 0s infinite alternate; animation: co 0.75s cubic-bezier(0, 0, 1, 1) 0s infinite alternate;
} }
.flex {
flex: 1;
}
} }
.abandon:not([disabled]) { .abandon:not([disabled]) {

View File

@ -437,11 +437,12 @@
#targeting, .resolving-skill { #targeting, .resolving-skill {
width: calc(100% - 1em); width: calc(100% - 1em);
} }
.player {
width: calc(100% - 1em);
bottom: 3em;
height: calc(50% - 3em);
}
} }
.player {
width: calc(100% - 1em);
bottom: 3em;
height: calc(50% - 3em);
}
} }

View File

@ -90,6 +90,11 @@
.login { .login {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
.terms {
display: inline;
margin: 0 1em;
}
} }
} }

View File

@ -51,6 +51,11 @@
color: @yellow; color: @yellow;
font-weight: bold; font-weight: bold;
} }
.name.subscriber {
// animation: rgb 4s cubic-bezier(0.5, 0, 0.5, 1) 0s infinite alternate;
// font-weight: bold;
}
} }
.chat { .chat {

View File

@ -143,7 +143,7 @@ button, input {
a { a {
color: whitesmoke; color: whitesmoke;
text-decoration: none; // text-decoration: none;
&:hover { &:hover {
color: whitesmoke; color: whitesmoke;

View File

@ -9,7 +9,7 @@
<meta name="application-name" content="mnml"> <meta name="application-name" content="mnml">
<meta name="description" content="mnml pvp tbs"> <meta name="description" content="mnml pvp tbs">
<meta name="author" content="ntr@smokestack.io"> <meta name="author" content="ntr@smokestack.io">
<title>mnml - abstract strategy</title> <title>MNML - abstract strategy</title>
<link rel="manifest" href="manifest.webmanifest"> <link rel="manifest" href="manifest.webmanifest">
<link rel="stylesheet" href="./node_modules/izitoast/dist/css/iziToast.min.css"></script> <link rel="stylesheet" href="./node_modules/izitoast/dist/css/iziToast.min.css"></script>
<link href="https://fonts.googleapis.com/css?family=Jura" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Jura" rel="stylesheet">
@ -19,7 +19,7 @@
</head> </head>
<body> <body>
<noscript> <noscript>
<p>js is required to run mnml.</p> <p>js is required to run MNML.</p>
<p>this site has no ads. free to play forever.</p> <p>this site has no ads. free to play forever.</p>
</noscript> </noscript>
</body> </body>

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-client", "name": "mnml-client",
"version": "1.6.4", "version": "1.6.5",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -15,10 +15,6 @@ const registerEvents = require('./events');
const Mnml = require('./components/mnml'); const Mnml = require('./components/mnml');
if (process.env.NODE_ENV !== 'development') {
LogRocket.init('yh0dy3/mnml');
}
function stripeKey() { function stripeKey() {
if (window.location.host === 'mnml.gg') return 'pk_live_fQGrL1uWww2ot8W1G7vTySAv004ygmnMXq'; if (window.location.host === 'mnml.gg') return 'pk_live_fQGrL1uWww2ot8W1G7vTySAv004ygmnMXq';
return 'pk_test_Cb49tTqTXpzk7nEmlGzRrNJg00AU0aNZDj'; return 'pk_test_Cb49tTqTXpzk7nEmlGzRrNJg00AU0aNZDj';
@ -40,9 +36,12 @@ events.setWs(ws);
const App = () => ( const App = () => (
<Provider store={store}> <Provider store={store}>
<StripeProvider apiKey={stripeKey()}> {window.Stripe
<Mnml /> ? <StripeProvider apiKey={stripeKey()}>
</StripeProvider> <Mnml />
</StripeProvider>
: <Mnml />
}
</Provider> </Provider>
); );

View File

@ -101,11 +101,13 @@ function AccountBox(args) {
// ); // );
// } // }
const nameClass = `name ${account.subscribed ? 'subscriber' : ''}`;
return ( return (
<div class='player-box bottom'> <div class='player-box bottom'>
<div class="msg">&nbsp;</div> <div class="msg">&nbsp;</div>
<StateAccountAvatar /> <StateAccountAvatar />
<div class="name">{account.name}</div> <div class={nameClass}>{account.name}</div>
<div class="score">&nbsp;</div> <div class="score">&nbsp;</div>
</div> </div>
); );

View File

@ -6,17 +6,18 @@ function wiggle(id, idle) {
const x = window.innerWidth * 0.01 * (Math.round(Math.random()) ? Math.random() : -Math.random()); const x = window.innerWidth * 0.01 * (Math.round(Math.random()) ? Math.random() : -Math.random());
const y = window.innerHeight * 0.01 * (Math.round(Math.random()) ? Math.random() : -Math.random()); const y = window.innerHeight * 0.01 * (Math.round(Math.random()) ? Math.random() : -Math.random());
const originalX = parseFloat(idle.animations[0].currentValue);
const originalY = parseFloat(idle.animations[1].currentValue);
// console.log(x, y); // console.log(x, y);
return anime({ return anime({
targets: target, targets: target,
rotate: 0, translateX: [originalX + x, originalX - x, originalX],
translateX: [x, -x, 0], translateY: [originalY + y, originalY - y, originalY],
translateY: [y, -y, 0],
duration, duration,
easing: 'easeInOutSine', easing: 'easeInOutSine',
// direction: 'alternate', // direction: 'alternate',
begin: idle.pause, begin: idle.pause,
complete: idle.restart, complete: idle.play,
}); });
} }

View File

@ -16,7 +16,7 @@ function JoinButtons(args) {
<AccountBox /> <AccountBox />
<div class="instance-ctrl-btns"> <div class="instance-ctrl-btns">
<button disabled={true} >Chat</button> <button disabled={true} >Chat</button>
<button disabled={true}>-</button> <button class="flex" disabled={true}>-</button>
</div> </div>
</div> </div>
</aside> </aside>

View File

@ -3,8 +3,6 @@ const { connect } = require('preact-redux');
const { errorToast, infoToast } = require('../utils'); const { errorToast, infoToast } = require('../utils');
const AccountBox = require('./account.box');
const addState = connect( const addState = connect(
function receiveState(state) { function receiveState(state) {
const { const {

View File

@ -120,7 +120,7 @@ function Play(args) {
type="submit"> type="submit">
Copy &#x1F517; Copy &#x1F517;
</button> </button>
<figcaption>Invite Generated</figcaption> <figcaption>Click to Copy</figcaption>
</figure> </figure>
); );
}; };
@ -203,6 +203,7 @@ function Play(args) {
<div> <div>
Join our Discord server to find opponents and talk to the devs. <br /> Join our Discord server to find opponents and talk to the devs. <br />
Message <b>@ntr</b> or <b>@mashy</b> for some credits to get started.<br /> Message <b>@ntr</b> or <b>@mashy</b> for some credits to get started.<br />
<a href='https://www.youtube.com/watch?v=VtZLlkpJuS8'>Tutorial Playthrough on YouTube</a>
</div> </div>
<br /> <br />
<div> <div>

View File

@ -70,22 +70,26 @@ function Scoreboard(args) {
const winner = player.score === 'Win'; const winner = player.score === 'Win';
if (!isPlayer) { if (!isPlayer) {
const nameClass = `name ${player.img ? 'subscriber' : ''}`;
return ( return (
<div class={`player-box top ${winner ? 'winner' : player.ready ? 'ready' : ''}`}> <div class={`player-box top ${winner ? 'winner' : player.ready ? 'ready' : ''}`}>
<div></div> <div></div>
<div class="score">{scoreText()}</div> <div class="score">{scoreText()}</div>
<div class="name">{player.name}</div> <div class={nameClass}>{player.name}</div>
<Img img={player.img} id={player.id} /> <Img img={player.img} id={player.id} />
<div class="msg">{chat || '\u00A0'}</div> <div class="msg">{chat || '\u00A0'}</div>
</div> </div>
); );
} }
const boxClass = `player-box bottom ${winner ? 'winner': player.ready ? 'ready' : ''}`;
const nameClass = `name ${player.img ? 'subscriber' : ''}`;
return ( return (
<div class={`player-box bottom ${winner ? 'winner': player.ready ? 'ready' : ''}`}> <div class={boxClass}>
<div class="msg">{chat || '\u00A0'}</div> <div class="msg">{chat || '\u00A0'}</div>
<div class="score">{scoreText()}</div> <div class="score">{scoreText()}</div>
<div class="name">{player.name}</div> <div class={nameClass}>{player.name}</div>
<Img img={player.img} id={player.id} /> <Img img={player.img} id={player.id} />
</div> </div>
); );

View File

@ -48,9 +48,12 @@ function Shop(args) {
</div> </div>
<div> <div>
<h1 class="credits">¤ {account.balance}</h1> <h1 class="credits">¤ {account.balance}</h1>
<Elements> {window.Stripe
<StripeBtns account={account} /> ? <Elements>
</Elements> <StripeBtns account={account} />
</Elements>
: <div>Please unblock Stripe to use the store</div>
}
</div> </div>
</section> </section>
); );

View File

@ -8,7 +8,7 @@ const Help = require('./welcome.help');
const Demo = require('./demo'); const Demo = require('./demo');
function Welcome() { function Welcome() {
const page = this.state.page || 'login'; const page = this.state.page || 'register';
const navRegister = () => this.setState({ page: 'register' }); const navRegister = () => this.setState({ page: 'register' });
const pageEl = () => { const pageEl = () => {
@ -53,7 +53,7 @@ function Welcome() {
<p> <p>
Welcome to mnml. Welcome to mnml.
</p> </p>
<p> Turn-based 1v1 strategy game in an abstract setting. </p> <p> MNML is a turn-based 1v1 strategy game in an abstract setting. </p>
<p> <p>
Build a unique team of 3 constructs from a range of skills and specialisations.<br /> Build a unique team of 3 constructs from a range of skills and specialisations.<br />
Outplay your opponent in multiple rounds by adapting to an always shifting meta. <br /> Outplay your opponent in multiple rounds by adapting to an always shifting meta. <br />
@ -62,6 +62,7 @@ function Welcome() {
<p> <p>
Free to play, no pay to win. Register to start playing.<br /> Free to play, no pay to win. Register to start playing.<br />
</p> </p>
<a href='https://www.youtube.com/watch?v=VtZLlkpJuS8'>Tutorial Playthrough on YouTube</a>
</div> </div>
{pageEl()} {pageEl()}
</section> </section>

View File

@ -58,7 +58,7 @@ function Register(args) {
value={this.state.name} value={this.state.name}
onInput={linkState(this, 'name')} onInput={linkState(this, 'name')}
/> />
<label for="password">Password - min 12 chars</label> <label for="password">Password - min 4 chars</label>
<input <input
class="login-input" class="login-input"
type="password" type="password"
@ -79,9 +79,11 @@ function Register(args) {
<div> <div>
<input <input
type="checkbox" type="checkbox"
name="terms"
id="register-terms"
onInput={linkState(this, 'terms') onInput={linkState(this, 'terms')
}/> }/>
&nbsp; Confirm agreement to terms of service &nbsp; <label class="terms" for="register-terms">Confirm agreement to terms of service.</label>
<button onClick={() => window.open('/tos.html')}>VIEW</button> <button onClick={() => window.open('/tos.html')}>VIEW</button>
</div> </div>
<button <button

View File

@ -66,7 +66,7 @@ function registerEvents(store) {
// stop fetching the game state til animations are done // stop fetching the game state til animations are done
const newRes = game.resolved.slice(currentGame.resolved.length); const newRes = game.resolved.slice(currentGame.resolved.length);
return eachSeries(newRes, (r, cb) => { return eachSeries(newRes, (r, cb) => {
if (!r.event || r.stages === '') return cb; if (!r.event || r.stages === '') return cb();
const timeout = animations.getTime(r.stages); const timeout = animations.getTime(r.stages);
const anims = animations.getObjects(r, game, account); const anims = animations.getObjects(r, game, account);
const text = animations.getText(r); const text = animations.getText(r);
@ -127,6 +127,7 @@ function registerEvents(store) {
function setAccount(account) { function setAccount(account) {
if (account) { if (account) {
LogRocket.init('yh0dy3/mnml');
LogRocket.identify(account.id, account); LogRocket.identify(account.id, account);
} }

View File

@ -1,6 +1,8 @@
const toast = require('izitoast'); const toast = require('izitoast');
const cbor = require('borc'); const cbor = require('borc');
const throttle = require('lodash/throttle');
const SOCKET_URL = const SOCKET_URL =
`${window.location.protocol === 'https:' ? 'wss://' : 'ws://'}${window.location.host}/api/ws`; `${window.location.protocol === 'https:' ? 'wss://' : 'ws://'}${window.location.host}/api/ws`;
@ -363,7 +365,8 @@ function createSocket(events) {
sendGameTarget, sendGameTarget,
sendInstanceAbandon, sendInstanceAbandon,
sendInstanceReady, // some weird shit happening in face off
sendInstanceReady: throttle(sendInstanceReady, 500),
sendInstancePractice, sendInstancePractice,
sendInstanceQueue, sendInstanceQueue,
sendInstanceState, sendInstanceState,

View File

@ -63,24 +63,6 @@ server {
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
} }
server {
server_name minimalstudios.com.au;
location / {
root /var/lib/mnml/public/press/;
index index.html;
try_files $uri $uri/ index.html;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/minimalstudios.com.au/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/minimalstudios.com.au/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
# http -> https # http -> https
server { server {
server_name mnml.gg; server_name mnml.gg;
@ -91,8 +73,3 @@ server {
server_name minimal.gg; server_name minimal.gg;
return 301 https://mnml.gg$request_uri; return 301 https://mnml.gg$request_uri;
} }
server {
server_name minimalstudios.com.au;
return 301 https://minimalstudios.com.au$request_uri;
}

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-ops", "name": "mnml-ops",
"version": "1.6.4", "version": "1.6.5",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -1,6 +1,6 @@
[package] [package]
name = "mnml" name = "mnml"
version = "1.6.4" version = "1.6.5"
authors = ["ntr <ntr@smokestack.io>"] authors = ["ntr <ntr@smokestack.io>"]
[dependencies] [dependencies]

View File

@ -20,7 +20,7 @@ use img;
use failure::Error; use failure::Error;
use failure::{err_msg, format_err}; use failure::{err_msg, format_err};
static PASSWORD_MIN_LEN: usize = 11; static PASSWORD_MIN_LEN: usize = 3;
#[derive(Debug,Clone,Serialize,Deserialize)] #[derive(Debug,Clone,Serialize,Deserialize)]
pub struct Account { pub struct Account {
@ -189,7 +189,7 @@ pub fn new_img(tx: &mut Transaction, id: Uuid) -> Result<Account, Error> {
} }
pub fn set_password(tx: &mut Transaction, id: Uuid, current: &String, password: &String) -> Result<String, MnmlHttpError> { pub fn set_password(tx: &mut Transaction, id: Uuid, current: &String, password: &String) -> Result<String, MnmlHttpError> {
if password.len() < PASSWORD_MIN_LEN { if password.len() < PASSWORD_MIN_LEN || password.len() > 100 {
return Err(MnmlHttpError::PasswordUnacceptable); return Err(MnmlHttpError::PasswordUnacceptable);
} }
@ -318,7 +318,7 @@ pub fn set_subscribed(tx: &mut Transaction, id: Uuid, subscribed: bool) -> Resul
} }
pub fn create(name: &String, password: &String, tx: &mut Transaction) -> Result<String, MnmlHttpError> { pub fn create(name: &String, password: &String, tx: &mut Transaction) -> Result<String, MnmlHttpError> {
if password.len() < PASSWORD_MIN_LEN { if password.len() < PASSWORD_MIN_LEN || password.len() > 100 {
return Err(MnmlHttpError::PasswordUnacceptable); return Err(MnmlHttpError::PasswordUnacceptable);
} }
@ -328,7 +328,7 @@ pub fn create(name: &String, password: &String, tx: &mut Transaction) -> Result<
let id = Uuid::new_v4(); let id = Uuid::new_v4();
let img = Uuid::new_v4(); let img = Uuid::new_v4();
let rounds = 8; let rounds = 12;
let password = hash(&password, rounds)?; let password = hash(&password, rounds)?;
let mut rng = thread_rng(); let mut rng = thread_rng();

View File

@ -450,6 +450,7 @@ pub fn start(pool: PgPool, events_tx: CbSender<Event>, stripe: StripeClient) {
} }
// we done // we done
Err(_e) => { Err(_e) => {
// info!("{:?}", e);
break; break;
}, },
}; };

View File

@ -1264,6 +1264,9 @@ impl Skill {
Skill::Invert| Skill::Invert|
Skill::InvertPlus | Skill::InvertPlus |
Skill::InvertPlusPlus | Skill::InvertPlusPlus |
Skill::Intercept|
Skill::InterceptPlus |
Skill::InterceptPlusPlus |
Skill::Counter| Skill::Counter|
Skill::CounterPlus | Skill::CounterPlus |
Skill::CounterPlusPlus | Skill::CounterPlusPlus |
@ -2083,7 +2086,7 @@ mod tests {
let Resolution { source: _, target: _, event, stages: _ } = results.remove(0); let Resolution { source: _, target: _, event, stages: _ } = results.remove(0);
match event { match event {
Event::Damage { amount, skill: _, mitigation: _, colour: _} => assert_eq!(amount, 256.pct(Skill::SiphonTick.multiplier()) Event::Damage { amount, skill: _, mitigation: _, colour: _} => assert_eq!(amount, 256.pct(Skill::SiphonTick.multiplier())
+ 220.pct(Skill::SiphonTick.multiplier())), + 220.pct(Skill::SiphonTick.multiplier())),
_ => panic!("not damage siphon"), _ => panic!("not damage siphon"),
}; };