Merge pull request #2431 from Craftomega/patch-19

[Dark Heresy 2]
This commit is contained in:
Phil
2017-03-20 17:21:30 -06:00
committed by GitHub
+713 -53
View File
@@ -1829,65 +1829,45 @@
<label>XP to Spend:</label>
</div>
<div class="sheet-item" style="width:22%">
<input name="attr_XPtoSpend" type="number">
<input name="attr_XPtoSpend" type="number" value="0">
</div>
<div class="sheet-item" style="width:1%"></div>
<div class="sheet-item" style="width:10%">
<label>Total Spent:</label>
</div>
<div class="sheet-item" style="width:24%">
<input name="attr_XPSpent" type="number">
<input name="attr_XPSpent" type="number" value="0">
</div>
<div class="sheet-item" style="width:1%"></div>
<div class="sheet-item" style="width:5%">
<label>Total:</label>
</div>
<div class="sheet-item" style="width:25%">
<input name="attr_XPTotal" type="number">
<input disabled="true" name="attr_XPTotal" type="number" value="@{XPtoSpend} + @{XPSpent}">
</div>
</div>
</div>
</div>
<label>Advancements Taken:</label>
<div class="sheet-row">
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement1" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement1xp" type="text">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement2" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement2xp" type="text">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancement3" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement3xp" type="text">
</div>
</div>
<fieldset class="repeating_advancements">
<div class="sheet-row">
<div class="sheet-item" style="width:26%;">
<input name="attr_advancementRe1" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancement1Rexp" type="text">
<input name="attr_advancementRe1xp" type="number" value="0">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancementRe2" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancementRe2xp" type="text">
<input name="attr_advancementRe2xp" type="number" value="0">
</div>
<div class="sheet-item" style="width:26%;">
<input name="attr_advancementRe3" type="text">
</div>
<div class="sheet-item sheet-puny sheet-center sheet-brackets sheet-armourblock">
<input name="attr_advancementRe3xp" type="text">
<input name="attr_advancementRe3xp" type="number" value="0">
</div>
</div>
</fieldset>
@@ -2409,11 +2389,12 @@
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%;"><label>Damage:</label></div>
<div class="sheet-item" style="width: 23%;"><input name="attr_PsyDamage" type="text" /></div>
<div class="sheet-item" style="width: 21%;"><input name="attr_PsyDamage" type="text" /></div>
<div class="sheet-item" style="width: 7%;"><label>Pen:</label></div>
<div class="sheet-item" style="width: 23%;"><input name="attr_PsyPen" type="text" /></div>
<div class="sheet-item" style="width: 17%;"><button name="roll_PsyDamage" type="roll" value="/me does [[?{Damage|1d10})]] @{DamageType} damage! Pen: [[?{Penetration|0}]]"> <label>Damage</label> </button></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyHit" type="roll" value="/em uses @{PsyName} [[1d100]] Target [[?{Target|0}]]."> <label>Hit</label> </button></div>
<div class="sheet-item" style="width: 15%;"><input name="attr_PsyPen" type="text" /></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyDamage" type="roll" value="/me does [[?{Damage|1d10})]] @{PsyDamageType} damage! Pen: [[?{Penetration|0}]]"> <label>Damage</label> </button></div>
<div class="sheet-item" style="width: 12%;"><button name="roll_PsyHit" type="roll" value="/em uses @{PsyName} [[1d100]] Target [[?{Target|0}]]."> <label>Cast</label> </button></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyInfo" type="roll" value="&{template:default} {{name=@{PsyName}}} {{Action=@{PsyAction}}} {{Focus Power=@{PsyFocusPower}}} {{SubType(s)=@{PsySubtype}}} {{Range=@{PsyRange}}} {{Sustained?=@{PsySustained}}} {{Effect=@{PsyPowersEffect}}} "> <label>Info</label> </button></div>
</div>
<div><textarea name="attr_PsyPowersEffect"></textarea></div>
</div>
@@ -2458,19 +2439,18 @@
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%;"><label>Damage:</label></div>
<div class="sheet-item" style="width: 23%;"><input name="attr_PsyDamage2" type="text" /></div>
<div class="sheet-item" style="width: 21%;"><input name="attr_PsyDamage2" type="text" /></div>
<div class="sheet-item" style="width: 7%;"><label>Pen:</label></div>
<div class="sheet-item" style="width: 23%;"><input name="attr_PsyPen2" type="text" /></div>
<div class="sheet-item" style="width: 17%;"><button name="roll_PsyDamage2" type="roll" value="/me does [[?{Damage|1d10})]] @{PsyDamageType2} damage! Pen: [[?{Penetration|0}]]"> <label>Damage</label> </button></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyHit2" type="roll" value="/em uses @{PsyName} [[1d100]] Target [[?{Target|0}]]."> <label>Hit</label> </button></div>
<div class="sheet-item" style="width: 15%;"><input name="attr_PsyPen2" type="text" /></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyDamage2" type="roll" value="/me does [[?{Damage|1d10})]] @{PsyDamageType2} damage! Pen: [[?{Penetration|0}]]."> <label>Damage</label> </button></div>
<div class="sheet-item" style="width: 12%;"><button name="roll_PsyHit2" type="roll" value="/em uses @{PsyName2} [[1d100]] Target [[?{Target|0}]]."> <label>Cast</label> </button></div>
<div class="sheet-item" style="width: 15%;"><button name="roll_PsyInfo2" type="roll" value="&{template:default} {{name=@{PsyName2}}} {{Action=@{PsyAction2}}} {{Focus Power=@{PsyFocusPower2}}} {{SubType(s)=@{PsySubtype2}}} {{Range=@{PsyRange2}}} {{Sustained?=@{PsySustained2}}} {{Effect=@{PsyPowersEffect2}}} "> <label>Info</label> </button></div>
</div>
<div><textarea name="attr_PsyPowersEffect2"></textarea></div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
@@ -2516,8 +2496,8 @@
<div class="sheet-item" style="width: 16%;"><button name="roll_Rangeddamage" type="roll" value="/me does [[@{Rangedweapondamage}]] @{Rangedweapontype} damage! (Pen: @{Rangedweaponpen})"> <label>Damage</label> </button></div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 25%;"><label>Special:</label></div>
<div class="sheet-item" style="width: 65%;"><input name="attr_Rangedweaponspecial" type="text" /></div>
<div class="sheet-item" style="width: 15%;"><label>Special:</label></div>
<div class="sheet-item" style="width: 75%;"><input name="attr_Rangedweaponspecial" type="text" /></div>
<div class="sheet-item" style="width: 10%;"><button name="roll_Rangedhit" type="roll" value="/me uses @{Rangedweaponname} [[1d100]] Target [[@{BallisticSkill} +[[ ?{Aim | Half aim (+10),+10| No aim (+0),+0 | Full aim (+20),+20} + ?{Range | Point Blank (+30),+30 | Short Range (+10),+10 | Standard range (+0),+0 | Long Range (-10),-10 | Extreme Range (-30),-30} + ?{Rate of Fire/Attack Type|Standard (+10),+10 | Semi auto (+0),+0 | Full Auto (-10),-10 | Called Shot (-20),-20 | Suppressing Fire (-20),-20} + ?{Modifier|0} ]]]]."> <label>Hit</label> </button></div>
</div>
</div>
@@ -2543,7 +2523,7 @@
</div>
<div class="sheet-row">
<div class="sheet-item" style="width: 15%;"><label>Special:</label></div>
<div class="sheet-item" style="width: 70%;"><input name="attr_meleeweaponspecial" type="text" /> </div>
<div class="sheet-item" style="width: 75%;"><input name="attr_meleeweaponspecial" type="text" /> </div>
<div class="sheet-item" style="width: 10%;"><button name="roll_meleehit" type="roll" value="/em uses @{meleeweaponname} [[1d100]] Target [[@{WeaponSkill}+ [[?{Aim | Half aim (+10),+10 | No aim (+0),+0 | Full aim (+20),+20} + ?{Attack Type | All out (+30),+30| Charge (+20),+20 |Standard (+10),+10 | Swift Attack (+0),+0 | Lighting (-10),-10} + ?{Modifier|0}]]]]"> <label>Hit</label> </button></div>
</div>
</div>
@@ -2565,11 +2545,11 @@
<h3>Gear</h3>
<div class="sheet-quickborder">
<div class="sheet-row">
<div class="sheet-item" style="width:40%">
<label>Max Carry WT (SB+TB): </label>
<div class="sheet-item" style="width:32%">
<label>Max Carry WT: </label>
</div>
<div class="sheet-item" style="width:15%">
<input name="attr_Carry_max" type="text">
<input name="attr_Carry_max" type="number">
</div>
<div class="sheet-item" style="width:15%">
<label style="width:15%">Current: </label>
@@ -2578,17 +2558,6 @@
<input name="attr_Carry" type="text">
</div>
</div>
<div class="sheet-row">
<div class="sheet-item" style="width:80%">
<input name="attr_Gear" type="text">
</div>
<div class="sheet-item" style="width:10%">
<input name="attr_GearWt" type="text" placeholder="wt.">
</div>
<div class="sheet-item" style="width:10%">
<input name="attr_GearPage" type="number" placeholder="pg#">
</div>
</div>
<fieldset class="repeating_Gears">
<div class="sheet-item" style="width:80%">
<input name="attr_Gears" type="text">
@@ -2605,3 +2574,694 @@
</div>
</div>
</div>
<script type="text/worker">
/* ---- BEGIN: TheAaronSheet.js ---- */
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
// By: The Aaron, Arcane Scriptomancer
// Contact: https://app.roll20.net/users/104025/the-aaron
var TAS = TAS || (function(){
'use strict';
var version = '0.2.3',
lastUpdate = 1457098056,
loggingSettings = {
debug: {
key: 'debug',
title: 'DEBUG',
color: {
bgLabel: '#7732A2',
label: '#F2EF40',
bgText: '#FFFEB7',
text: '#7732A2'
}
},
error: {
key: 'error',
title: 'Error',
color: {
bgLabel: '#C11713',
label: 'white',
bgText: '#C11713',
text: 'white'
}
},
warn: {
key: 'warn',
title: 'Warning',
color: {
bgLabel: '#F29140',
label: 'white',
bgText: '#FFD8B7',
text: 'black'
}
},
info: {
key: 'info',
title: 'Info',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
notice: {
key: 'notice',
title: 'Notice',
color: {
bgLabel: '#33C133',
label: 'white',
bgText: '#ADF1AD',
text: 'black'
}
},
log: {
key: 'log',
title: 'Log',
color: {
bgLabel: '#f2f240',
label: 'black',
bgText: '#ffff90',
text: 'black'
}
},
callstack: {
key: 'TAS',
title: 'function',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
callstack_async: {
key: 'TAS',
title: 'ASYNC CALL',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#413FA9',
text: 'white'
}
},
TAS: {
key: 'TAS',
title: 'TAS',
color: {
bgLabel: 'grey',
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
bgText: 'grey',
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
}
}
},
config = {
debugMode: false,
logging: {
log: true,
notice: true,
info: true,
warn: true,
error: true,
debug: false
}
},
callstackRegistry = [],
queuedUpdates = {}, //< Used for delaying saves till the last momment.
complexType = function(o){
switch(typeof o){
case 'string':
return 'string';
case 'boolean':
return 'boolean';
case 'number':
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
case 'function':
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
case 'object':
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
default:
return typeof o;
}
},
dataLogger = function(primaryLogger,secondaryLogger,data){
_.each(data,function(m){
var type = complexType(m);
switch(type){
case 'string':
primaryLogger(m);
break;
case 'undefined':
case 'null':
case 'NaN':
primaryLogger('['+type+']');
break;
case 'number':
case 'not a number':
case 'integer':
case 'decimal':
case 'boolean':
primaryLogger('['+type+']: '+m);
break;
default:
primaryLogger('['+type+']:=========================================');
secondaryLogger(m);
primaryLogger('=========================================================');
break;
}
});
},
colorLog = function(options){
var coloredLoggerFunction,
key = options.key,
label = options.title || 'TAS',
lBGColor = (options.color && options.color.bgLabel) || 'blue',
lTxtColor = (options.color && options.color.label) || 'white',
mBGColor = (options.color && options.color.bgText) || 'blue',
mTxtColor = (options.color && options.color.text) || 'white';
coloredLoggerFunction = function(message){
console.log(
'%c '+label+': %c '+message + ' ',
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
'background-color: '+mBGColor+';color: '+mTxtColor+';'
);
};
return function(){
if('TAS'===key || config.logging[key]){
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
}
};
},
logDebug = colorLog(loggingSettings.debug),
logError = colorLog(loggingSettings.error),
logWarn = colorLog(loggingSettings.warn),
logInfo = colorLog(loggingSettings.info),
logNotice = colorLog(loggingSettings.notice),
logLog = colorLog(loggingSettings.log),
log = colorLog(loggingSettings.TAS),
logCS = colorLog(loggingSettings.callstack),
logCSA = colorLog(loggingSettings.callstack_async),
registerCallstack = function(callstack,label){
var idx=_.findIndex(callstackRegistry,function(o){
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
_.difference(o.stack,callstack).length === 0 &&
o.label === label;
});
if(-1 === idx){
idx=callstackRegistry.length;
callstackRegistry.push({
stack: callstack,
label: label
});
}
return idx;
},
setConfigOption = function(options){
var newconf =_.defaults(options,config);
newconf.logging=_.defaults(
(options && options.logging)||{},
config.logging
);
config=newconf;
},
debugMode = function(){
config.logging.debug=true;
config.debugMode = true;
},
getCallstack = function(){
var e = new Error('dummy'),
stack = _.map(_.rest(e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n')),function(l){
return l.replace(/\s+.*$/,'');
});
return stack;
},
logCallstackSub = function(cs){
var matches, csa;
_.find(cs,function(line){
matches = line.match(/TAS_CALLSTACK_(\d+)/);
if(matches){
csa=callstackRegistry[matches[1]];
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
logCallstackSub(csa.stack);
return true;
}
logCS(line);
return false;
});
},
logCallstack = function(){
var cs;
if(config.debugMode){
cs = getCallstack();
cs.shift();
log('==============================> CALLSTACK <==============================');
logCallstackSub(cs);
log('=========================================================================');
}
},
wrapCallback = function (label, callback, context){
var callstack;
if('function' === typeof label){
context=callback;
callback=label;
label=undefined;
}
if(!config.debugMode){
return (function(cb,ctx){
return function(){
cb.apply(ctx||{},arguments);
};
}(callback,context));
}
callstack = getCallstack();
callstack.shift();
return (function(cb,ctx,cs,lbl){
var ctxref=registerCallstack(cs,lbl);
/*jshint -W054 */
return new Function('cb','ctx','TASlog',
"return function TAS_CALLSTACK_"+ctxref+"(){"+
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
"cb.apply(ctx||{},arguments);"+
"TASlog('Exiting: '+(cb.name||'(anonymous function)'));"+
"};")(cb,ctx,log);
/*jshint +W054 */
}(callback,context,callstack,label));
},
prepareUpdate = function( attribute, value ){
queuedUpdates[attribute]=value;
},
applyQueuedUpdates = function() {
setAttrs(queuedUpdates);
queuedUpdates = {};
},
namesFromArgs = function(args,base){
return _.chain(args)
.reduce(function(memo,attr){
if('string' === typeof attr) {
memo.push(attr);
} else if(_.isArray(args) || _.isArguments(args)){
memo = namesFromArgs(attr,memo);
}
return memo;
},(_.isArray(base) && base) || [])
.uniq()
.value();
},
addId = function(obj,value){
Object.defineProperty(obj,'id',{
value: value,
writeable: false,
enumerable: false
});
},
addProp = function(obj,prop,value,fullname){
(function(){
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
full_pname = fullname || prop,
pvalue=value;
_.each(['S','I','F'],function(p){
if( !_.has(obj,p)){
Object.defineProperty(obj, p, {
value: {},
enumerable: false,
readonly: true
});
}
});
if( !_.has(obj,'D')){
Object.defineProperty(obj, 'D', {
value: _.reduce(_.range(10),function(m,d){
Object.defineProperty(m, d, {
value: {},
enumerable: true,
readonly: true
});
return m;
},{}),
enumerable: false,
readonly: true
});
}
// Raw value
Object.defineProperty(obj, pname, {
enumerable: true,
set: function(v){
if(v!==pvalue) {
pvalue=v;
prepareUpdate(full_pname,v);
}
},
get: function(){
return pvalue;
}
});
// string value
Object.defineProperty(obj.S, pname, {
enumerable: true,
set: function(v){
var val=v.toString();
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return pvalue.toString();
}
});
// int value
Object.defineProperty(obj.I, pname, {
enumerable: true,
set: function(v){
var val=parseInt(v,10) || 0;
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseInt(pvalue,10) || 0;
}
});
// float value
Object.defineProperty(obj.F, pname, {
enumerable: true,
set: function(v){
var val=parseFloat(v) || 0;
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseFloat(pvalue) || 0;
}
});
_.each(_.range(10),function(d){
Object.defineProperty(obj.D[d], pname, {
enumerable: true,
set: function(v){
var val=(parseFloat(v) || 0).toFixed(d);
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return (parseFloat(pvalue) || 0).toFixed(d);
}
});
});
}());
},
repeating = function( section ) {
return (function(s){
var sectionName = s,
attrNames = [],
fieldNames = [],
operations = [],
after = [],
repAttrs = function TAS_Repeating_Attrs(){
attrNames = namesFromArgs(arguments,attrNames);
return this;
},
repFields = function TAS_Repeating_Fields(){
fieldNames = namesFromArgs(arguments,fieldNames);
return this;
},
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
operations.push({
type: 'reduce',
func: (func && _.isFunction(func) && func) || _.noop,
memo: (_.isUndefined(initial) && 0) || initial,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repMap = function TAS_Repeating_Map(func, final, context) {
operations.push({
type: 'map',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repEach = function TAS_Repeating_Each(func, final, context) {
operations.push({
type: 'each',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repTap = function TAS_Repeating_Tap(final, context) {
operations.push({
type: 'tap',
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repAfter = function TAS_Repeating_After(callback,context) {
after.push({
callback: (callback && _.isFunction(callback) && callback) || _.noop,
context: context || {}
});
return this;
},
repExecute = function TAS_Repeating_Execute(callback,context){
var rowSet = {},
attrSet = {},
fieldIds = [],
fullFieldNames = [];
repAfter(callback,context);
// call each operation per row.
// call each operation's final
getSectionIDs("repeating_"+sectionName,function(ids){
fieldIds = ids;
fullFieldNames = _.reduce(fieldIds,function(memo,id){
return memo.concat(_.map(fieldNames,function(name){
return 'repeating_'+sectionName+'_'+id+'_'+name;
}));
},[]);
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
_.each(attrNames,function(aname){
if(values.hasOwnProperty(aname)){
addProp(attrSet,aname,values[aname]);
}
});
rowSet = _.reduce(fieldIds,function(memo,id){
var r={};
addId(r,id);
_.each(fieldNames,function(name){
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
addProp(r,name,values[fn],fn);
});
memo[id]=r;
return memo;
},{});
_.each(operations,function(op){
var res;
switch(op.type){
case 'tap':
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'each':
_.each(rowSet,function(r){
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'map':
res = _.map(rowSet,function(r){
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
case 'reduce':
res = op.memo;
_.each(rowSet,function(r){
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
}
});
// finalize attrs
applyQueuedUpdates();
_.each(after,function(op){
_.bind(op.callback,op.context)();
});
});
});
};
return {
attrs: repAttrs,
attr: repAttrs,
column: repFields,
columns: repFields,
field: repFields,
fields: repFields,
reduce: repReduce,
inject: repReduce,
foldl: repReduce,
map: repMap,
collect: repMap,
each: repEach,
forEach: repEach,
tap: repTap,
'do': repTap,
after: repAfter,
last: repAfter,
done: repAfter,
execute: repExecute,
go: repExecute,
run: repExecute
};
}(section));
},
repeatingSimpleSum = function(section, field, destination){
repeating(section)
.attr(destination)
.field(field)
.reduce(function(m,r){
return m + (r.F[field]);
},0,function(t,r,a){
a.S[destination]=t;
})
.execute();
};
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ The Aaron Sheet v'+version+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ Last update: '+(new Date(lastUpdate*1000))+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
return {
/* Repeating Sections */
repeatingSimpleSum: repeatingSimpleSum,
repeating: repeating,
/* Configuration */
config: setConfigOption,
/* Debugging */
callback: wrapCallback,
callstack: logCallstack,
debugMode: debugMode,
_fn: wrapCallback,
/* Logging */
debug: logDebug,
error: logError,
warn: logWarn,
info: logInfo,
notice: logNotice,
log: logLog
};
}());
/* ---- END: TheAaronSheet.js ---- */
/*on('change:repeating_advancements',function(){
TAS.repeatingSimpleSum('advancements','advancementRe1xp','XPSpent');
});*/
on('change:repeating_advancements', function(){
TAS.repeating('advancements') //< set the repeating group we are using
.attrs('XPSpent') //< specify we want access to the total_weight attribute
.fields('advancementRe1xp','advancementRe2xp', 'advancementRe3xp') //< specify we want the item and weight repeating fields
.reduce(function(memo, row)
{
memo += (row.I.advancementRe1xp);
memo += (row.I.advancementRe2xp);
memo += (row.I.advancementRe3xp);
return memo;
},0,function(memo, row, attrSet)
{
attrSet.I.XPSpent = memo;
})
.execute();
});
on('change:repeating_Gears', function(){
TAS.repeating('Gears') //< set the repeating group we are using
.attrs('Carry') //< specify we want access to the total_weight attribute
.fields('GeasrWt') //< specify we want the item and weight repeating fields
.reduce(function(memo, row)
{
memo += (row.F.GeasrWt);
return memo;
},0,function(memo, row, attrSet)
{
attrSet.F.Carry = memo;
})
.execute();
});
</script>