From 69aa606ec467a4e6528035a3f214873d6dc308d3 Mon Sep 17 00:00:00 2001 From: FarawayVision <stmobo@gmail.com> Date: Fri, 3 May 2019 23:40:10 -0400 Subject: [PATCH] Add optional persistence for markers --- js/save.js | 15 ++++++++-- js/spniBehaviour.js | 69 ++++++++++++++++++++++++++++++++++----------- 2 files changed, 64 insertions(+), 20 deletions(-) diff --git a/js/save.js b/js/save.js index 2d0b141f8ed..4cf30fa1ed0 100644 --- a/js/save.js +++ b/js/save.js @@ -224,7 +224,7 @@ function Save() { charID = collectible.player.id; } - localStorage.setItem(prefix+charID+collectible.id, counter.toString()); + localStorage.setItem(prefix+'collectibles.'+charID+collectible.id, counter.toString()); } this.getCollectibleCounter = function (collectible) { @@ -235,10 +235,19 @@ function Save() { charID = collectible.player.id; } - var ctr = localStorage.getItem(prefix+charID+collectible.id); + var ctr = localStorage.getItem(prefix+'collectibles.'+charID+collectible.id); return parseInt(ctr, 10) || 0; } + + this.getPersistentMarker = function (player, name) { + var ctr = localStorage.getItem(prefix+'markers.'+player.id+'.'+name); + return parseInt(ctr, 10) || 0; + } + + this.setPersistentMarker = function (player, name, value) { + localStorage.setItem(prefix+'markers.'+player.id+'.'+name, value.toString()); + } /** Serializes the localStorage into a base64-encoded JSON string */ this.serializeLocalStorage = function () { @@ -407,4 +416,4 @@ _utf8_decode : function (utftext) { return string; } -} \ No newline at end of file +} diff --git a/js/spniBehaviour.js b/js/spniBehaviour.js index 2adb4e615b3..b98e26cac33 100644 --- a/js/spniBehaviour.js +++ b/js/spniBehaviour.js @@ -216,6 +216,7 @@ function State($xml, addedTags, removedTags) { var collectibleId = $xml.attr('collectible') || undefined; var collectibleOp = $xml.attr('collectible-value') || undefined; + var persistMarker = $xml.attr('persist-marker') === 'true'; var markerOp = $xml.attr('marker'); if (collectibleId) { @@ -239,12 +240,12 @@ function State($xml, addedTags, removedTags) { } } } - + if (markerOp) { var match = markerOp.match(/^(?:(\+|\-)([\w\-]+)(\*?)|([\w\-]+)(\*?)\s*\=\s*(\-?\w+|~?\w+~))$/); var name; - this.marker = {name: null, perTarget: false, op: null, val: null}; + this.marker = {name: null, perTarget: false, persistent: persistMarker, op: null, val: null}; if (match) { this.marker.perTarget = !!(match[3] || match[5]); @@ -281,21 +282,25 @@ State.prototype.evaluateMarker = function (self, opp) { name = getTargetMarker(name, opp); } - if(!self.markers[name]) { - return 1; + if (this.marker.persistent) { + var curVal = save.getPersistentMarker(self, name); } else { - return parseInt(self.markers[name], 10) + 1; + var curVal = parseInt(self.markers[name], 10) || 0; } + + return !curVal ? 1 : curVal + 1; } else if (this.marker.op === '-') { if (this.marker.perTarget && opp) { name = getTargetMarker(name, opp); } - if(!self.markers[name]) { - return 0; + if (this.marker.persistent) { + var curVal = save.getPersistentMarker(self, name); } else { - return parseInt(self.markers[name], 10) - 1; + var curVal = parseInt(self.markers[name], 10) || 0; } + + return !curVal ? 0 : curVal - 1; } else if (this.marker.op === '=') { if (typeof(this.marker.val) === 'number') return this.marker.val; @@ -317,7 +322,12 @@ State.prototype.applyMarker = function (self, opp) { name = getTargetMarker(name, opp); } - self.markers[name] = this.evaluateMarker(self, opp); + var newVal = this.evaluateMarker(self, opp); + if (this.marker.persistent) { + save.setPersistentMarker(self, name, newVal); + } else { + self.markers[name] = newVal; + } } State.prototype.expandDialogue = function(self, target) { @@ -395,18 +405,28 @@ function expandPlayerVariable(split_fn, args, self, target) { return "collectible"; // no collectible ID supplied } case 'marker': + case 'persistent': var markerName = split_fn[1]; if (markerName) { var marker; if (target) { - marker = target.markers[getTargetMarker(markerName, target)]; + var targetedName = getTargetMarker(markerName, target); + if (fn === 'persistent') { + marker = save.getPersistentMarker(target, targetedName); + } else { + marker = target.markers[targetedName]; + } } if (!marker) { - marker = target.markers[markerName] || ""; + if (fn === 'persistent') { + marker = save.getPersistentMarker(target, markerName); + } else { + marker = target.markers[markerName]; + } } - return marker; + return marker || ""; } else { - return "marker"; //didn't supply a marker name + return fn; //didn't supply a marker name } case 'tag': return target.hasTag(split_fn[1]) ? 'true' : 'false'; @@ -492,18 +512,33 @@ function expandDialogue (dialogue, self, target) { } break; case 'marker': + case 'persistent': fn = fn_parts[0]; // make sure to keep the original string case intact if (fn) { var marker; + if (target) { - marker = self.markers[getTargetMarker(fn, target)]; + var targetedName = getTargetMarker(fn, target); + if (variable.toLowerCase() === 'persistent') { + marker = save.getPersistentMarker(self, targetedName); + } else { + marker = self.markers[targetedName]; + } } + if (!marker) { - marker = self.markers[fn] || ""; + if (variable.toLowerCase() === 'persistent') { + marker = save.getPersistentMarker(self, fn); + } else { + marker = self.markers[fn]; + } } - substitution = marker; + + console.log("reading "+variable.toLowerCase()); + + substitution = marker || ""; } else { - substitution = "marker"; //didn't supply a marker name + substitution = variable.toLowerCase(); //didn't supply a marker name } break; case 'background': -- GitLab