Add door stats & new mini format styles

+ Door runs stat
+ Door run minutes stat
+ Door runs MCI
+ Door run friendly duration MCI
+ durationHours/Minutes/Seconds mini format styles
This commit is contained in:
Bryan Ashby 2019-01-05 21:17:53 -07:00
parent 9d39e99c5a
commit 22b7fdd65c
6 changed files with 116 additions and 0 deletions

View file

@ -8,12 +8,15 @@ const theme = require('./theme.js');
const ansi = require('./ansi_term.js');
const Events = require('./events.js');
const { Errors } = require('./enig_error.js');
const StatLog = require('./stat_log.js');
const UserProps = require('./user_property.js');
// deps
const async = require('async');
const assert = require('assert');
const _ = require('lodash');
const paths = require('path');
const moment = require('moment');
const activeDoorNodeInstances = {};
@ -149,6 +152,7 @@ exports.getModule = class AbracadabraModule extends MenuModule {
}
runDoor() {
StatLog.incrementUserStat(this.client.user, UserProps.DoorRunTotalCount, 1);
Events.emit(Events.getSystemEvents().UserRunDoor, { user : this.client.user } );
this.client.term.write(ansi.resetScreen());
@ -164,7 +168,15 @@ exports.getModule = class AbracadabraModule extends MenuModule {
node : this.client.node,
};
const startTime = moment();
this.doorInstance.run(exeInfo, () => {
const endTime = moment();
const runTimeMinutes = Math.floor(moment.duration(endTime.diff(startTime)).asMinutes());
if(runTimeMinutes > 0) {
StatLog.incrementUserStat(this.client.user, UserProps.DoorRunTotalMinutes, runTimeMinutes);
}
//
// Try to clean up various settings such as scroll regions that may
// have been set within the door

View file

@ -155,6 +155,12 @@ const PREDEFINED_MCI_GENERATORS = {
AC : function achievementCount(client) { return userStatAsString(client, UserProps.AchievementTotalCount, 0); },
AP : function achievementPoints(client) { return userStatAsString(client, UserProps.AchievementTotalPoints, 0); },
DR : function doorRuns(client) { return userStatAsString(client, UserProps.DoorRunTotalCount, 0); },
DM : function doorFriendlyRunTime(client) {
const minutes = client.user.properties[UserProps.DoorRunTotalMinutes] || 0;
return moment.duration(minutes, 'minutes').humanize();
},
//
// Date/Time
//

View file

@ -14,6 +14,7 @@ const {
// deps
const _ = require('lodash');
const moment = require('moment');
/*
String formatting HEAVILY inspired by David Chambers string-format library
@ -281,6 +282,10 @@ const transformers = {
countWithAbbr : (n) => formatCount(n, true, 0),
countWithoutAbbr : (n) => formatCount(n, false, 0),
countAbbr : (n) => formatCountAbbr(n),
durationHours : (h) => moment.duration(h, 'hours').humanize(),
durationMinutes : (m) => moment.duration(m, 'minutes').humanize(),
durationSeconds : (s) => moment.duration(s, 'seconds').humanize(),
};
function transformValue(transformerName, value) {

View file

@ -50,6 +50,9 @@ module.exports = {
MessageAreaTag : 'message_area_tag',
MessagePostCount : 'post_count',
DoorRunTotalCount : 'door_run_total_count',
DoorRunTotalMinutes : 'door_run_total_minutes',
AchievementTotalCount : 'achievement_total_count',
AchievementTotalPoints : 'achievement_total_points',
};