mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2025-12-30 16:33:33 +01:00
197 lines
5.8 KiB
JavaScript
197 lines
5.8 KiB
JavaScript
var ATEditor = (function(ATEditor, _) {
|
|
|
|
var prep = {};
|
|
prep.actorcondition = function(o) {
|
|
o.hasRoundEffect = ATEditor.utils.hasValues(_.omit(o.roundEffect, 'visualEffectID'));
|
|
o.hasFullRoundEffect = ATEditor.utils.hasValues(_.omit(o.fullRoundEffect, 'visualEffectID'));
|
|
o.hasAbilityEffect = ATEditor.utils.hasValues(o.abilityEffect);
|
|
};
|
|
prep.quest = function(o) {
|
|
};
|
|
prep.item = function(o) {
|
|
o.hasEquipEffect = ATEditor.utils.hasValues(o.equipEffect);
|
|
o.hasUseEffect = ATEditor.utils.hasValues(o.useEffect);
|
|
o.hasHitEffect = ATEditor.utils.hasValues(o.hitEffect);
|
|
o.hasKillEffect = ATEditor.utils.hasValues(o.killEffect);
|
|
};
|
|
prep.droplist = function(o) {
|
|
};
|
|
prep.dialogue = function(o) {
|
|
o.hasRewards = ATEditor.utils.hasValues(o.rewards);
|
|
if (o.replies.length === 1 && o.replies[0].text === "N") {
|
|
o.nextPhraseID = o.replies[0].nextPhraseID;
|
|
o.hasOnlyNextReply = true;
|
|
} else {
|
|
o.nextPhraseID = "";
|
|
o.hasOnlyNextReply = false;
|
|
}
|
|
_.each(o.replies, function(reply) {
|
|
ATEditor.defaults.addDefaults('reply', reply);
|
|
if (reply.nextPhraseID && reply.nextPhraseID.length === 1) { reply.replyLeadsTo = reply.nextPhraseID; }
|
|
reply.hasRequirements = ATEditor.utils.hasValues(reply.requires);
|
|
});
|
|
o.showAdvanced = _.toBool(o.switchToNPC);
|
|
};
|
|
prep.monster = function(o) {
|
|
o.hasConversation = _.toBool(o.phraseID);
|
|
o.hasHitEffect = _.toBool(o.hitEffect.increaseCurrentHP.min || o.hitEffect.increaseCurrentAP.min || _.some(o.hitEffect.conditionsSource) || _.some(o.hitEffect.conditionsTarget));
|
|
o.hasCritical = _.toBool(o.criticalSkill || o.criticalMultiplier);
|
|
o.hasCombatTraits = _.toBool(o.attackChance || o.attackDamage.min || o.hasCritical || o.blockChance || o.damageResistance || o.hasHitEffect);
|
|
o.showAdvanced = _.toBool(o.faction || (o.size != '1x1'));
|
|
};
|
|
prep.itemcategory = function(o) {
|
|
};
|
|
|
|
function prepareObjectsForEditor(section, objs) {
|
|
var p = prep[section.id];
|
|
_.each(objs, function(o) {
|
|
ATEditor.defaults.addDefaults(section.id, o);
|
|
if (p) { p(o); }
|
|
ATEditor.utils.convertIntegersToStrings(o);
|
|
});
|
|
}
|
|
|
|
var unprep = {};
|
|
unprep.actorcondition = function(o) {
|
|
if (!o.hasRoundEffect) { delete o.roundEffect; }
|
|
if (!o.hasFullRoundEffect) { delete o.fullRoundEffect; }
|
|
if (!o.hasAbilityEffect) { delete o.abilityEffect; }
|
|
delete o.hasRoundEffect;
|
|
delete o.hasFullRoundEffect;
|
|
delete o.hasAbilityEffect;
|
|
};
|
|
unprep.quest = function(o) {
|
|
};
|
|
unprep.item = function(o) {
|
|
if (!o.hasEquipAPEffect) {
|
|
var e = o.equipEffect;
|
|
delete e.increaseMaxAP;
|
|
delete e.increaseMoveCost;
|
|
delete e.increaseUseItemCost;
|
|
delete e.increaseReequipCost;
|
|
}
|
|
delete o.hasEquipAPEffect;
|
|
if (!o.hasEquipEffect) { delete o.equipEffect; }
|
|
if (_.isObject(o.category)) { o.category = o.category.id; }
|
|
if (!o.hasUseEffect) { delete o.useEffect; }
|
|
if (!o.hasHitEffect) { delete o.hitEffect; }
|
|
if (!o.hasKillEffect) { delete o.killEffect; }
|
|
delete o.hasEquipEffect;
|
|
delete o.hasUseEffect;
|
|
delete o.hasHitEffect;
|
|
delete o.hasKillEffect;
|
|
};
|
|
unprep.droplist = function(o) {
|
|
};
|
|
unprep.dialogue = function(o) {
|
|
if (!o.hasRewards) { delete o.rewards; }
|
|
delete o.hasRewards;
|
|
_.each(o.replies, function(reply) {
|
|
if (reply.replyLeadsTo) { reply.nextPhraseID = reply.replyLeadsTo; }
|
|
delete reply.replyLeadsTo;
|
|
if (!o.hasRequirements) { delete o.requires; }
|
|
delete reply.hasRequirements;
|
|
});
|
|
if (o.hasOnlyNextReply) {
|
|
o.replies = [ { text: "N", nextPhraseID: o.nextPhraseID } ];
|
|
}
|
|
if (!o.showAdvanced) {
|
|
delete o.switchToNPC;
|
|
}
|
|
delete o.showAdvanced;
|
|
delete o.nextPhraseID;
|
|
delete o.hasOnlyNextReply;
|
|
delete o.tree;
|
|
};
|
|
unprep.monster = function(o) {
|
|
if (!o.hasCritical) {
|
|
delete o.criticalSkill;
|
|
delete o.criticalMultiplier;
|
|
}
|
|
if (!o.showAdvanced) {
|
|
delete o.faction;
|
|
delete o.size;
|
|
}
|
|
delete o.showAdvanced;
|
|
delete o.hasCritical;
|
|
delete o.hasConversation;
|
|
delete o.hasCombatTraits;
|
|
delete o.hasHitEffect;
|
|
};
|
|
unprep.itemcategory = function(o) {
|
|
};
|
|
|
|
function prepareObjectsForExport(section, objs) {
|
|
var p = unprep[section.id];
|
|
return _.map(objs, function(o) {
|
|
o = ATEditor.utils.deepClone(o);
|
|
ATEditor.utils.removeAngularFields(o);
|
|
if (p) { p(o); }
|
|
ATEditor.utils.convertStringsToIntegers(o);
|
|
ATEditor.defaults.removeDefaults(section.id, o);
|
|
ATEditor.utils.compact(o);
|
|
return o;
|
|
});
|
|
}
|
|
|
|
function importDataObjects(section, data, success, error) {
|
|
if (!data || _.isEmpty(data)) {
|
|
if (error) { error("No data?"); }
|
|
return;
|
|
}
|
|
|
|
var first = data;
|
|
if (_.isArray(data)) {
|
|
first = _.first(data);
|
|
} else if (_.isObject(data)) {
|
|
data = [ data ];
|
|
} else {
|
|
if (error) { error("Malformed data? Expected array or object."); }
|
|
return;
|
|
}
|
|
|
|
if (!section.getId(first)) {
|
|
if (error) { error("Malformed data? Expected to find at least an id field, but no such field was found."); }
|
|
return;
|
|
}
|
|
|
|
prepareObjectsForEditor(section, data);
|
|
|
|
_.each(data, section.add);
|
|
if (success) { success(); }
|
|
};
|
|
|
|
function importText(section, content, success, error) {
|
|
var data = ATEditor.legacy.deserialize(content);
|
|
if (data) {
|
|
data = data.items;
|
|
var convert = ATEditor.legacy.convertFromLegacyFormat[section.id];
|
|
if (convert) {
|
|
data = _.map(data, convert);
|
|
}
|
|
} else {
|
|
try {
|
|
data = JSON.parse(content);
|
|
} catch(e) {
|
|
if (error) { error("Unable to parse data as JSON."); }
|
|
return;
|
|
}
|
|
}
|
|
|
|
importDataObjects(section, data, success, error);
|
|
};
|
|
function exportData(section) {
|
|
var objs = section.items;
|
|
var resultObjs = prepareObjectsForExport(section, objs);
|
|
return JSON.stringify(resultObjs, undefined, 2);
|
|
};
|
|
|
|
ATEditor.importExport = {
|
|
importText: importText
|
|
,importDataObjects: importDataObjects
|
|
,exportData: exportData
|
|
,prepareObjectsForEditor: prepareObjectsForEditor
|
|
};
|
|
return ATEditor;
|
|
})(ATEditor || {}, _);
|