add roll20 party import script
This commit is contained in:
parent
9282331512
commit
a683cd9007
126
roll20/npc_party_import.js
Normal file
126
roll20/npc_party_import.js
Normal file
@ -0,0 +1,126 @@
|
||||
var generateUUID = (function() {
|
||||
"use strict";
|
||||
|
||||
var a = 0, b = [];
|
||||
return function() {
|
||||
var c = (new Date()).getTime() + 0, d = c === a;
|
||||
a = c;
|
||||
for (var e = new Array(8), f = 7; 0 <= f; f--) {
|
||||
e[f] = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(c % 64);
|
||||
c = Math.floor(c / 64);
|
||||
}
|
||||
c = e.join("");
|
||||
if (d) {
|
||||
for (f = 11; 0 <= f && 63 === b[f]; f--) {
|
||||
b[f] = 0;
|
||||
}
|
||||
b[f]++;
|
||||
} else {
|
||||
for (f = 0; 12 > f; f++) {
|
||||
b[f] = Math.floor(64 * Math.random());
|
||||
}
|
||||
}
|
||||
for (f = 0; 12 > f; f++){
|
||||
c += "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);
|
||||
}
|
||||
return c;
|
||||
};
|
||||
}()),
|
||||
|
||||
generateRowID = function () {
|
||||
"use strict";
|
||||
return generateUUID().replace(/_/g, "Z");
|
||||
};
|
||||
|
||||
var addAttr = function(char_id, name, value, max) {
|
||||
let obj = {
|
||||
name: name,
|
||||
current: value,
|
||||
characterid: char_id
|
||||
};
|
||||
|
||||
if(max) {
|
||||
obj.max = max;
|
||||
}
|
||||
|
||||
return createObj("attribute", obj);
|
||||
};
|
||||
|
||||
on("chat:message", function(msg) {
|
||||
if(msg.type == "api" && msg.content.indexOf("!acksimport ") !== -1) {
|
||||
var data = msg.content.replace("!acksimport ", "");
|
||||
|
||||
var npcs = JSON.parse(data);
|
||||
for(let c of npcs) {
|
||||
sendChat(msg.who, "Creating NPC: " + c.name);
|
||||
|
||||
// Create the character sheet for this NPC
|
||||
let sheet = createObj("character", {
|
||||
name: c.name
|
||||
});
|
||||
sheet.set('bio', "A generated npc character.");
|
||||
sheet.set('gmnotes', "Generated by Atr0phyACKS");
|
||||
|
||||
// Add all of their attributes and mods
|
||||
addAttr(sheet.id, "str", c.attributes.str, null);
|
||||
addAttr(sheet.id, "int", c.attributes.int, null);
|
||||
addAttr(sheet.id, "wis", c.attributes.wis, null);
|
||||
addAttr(sheet.id, "dex", c.attributes.dex, null);
|
||||
addAttr(sheet.id, "con", c.attributes.con, null);
|
||||
addAttr(sheet.id, "chr", c.attributes.chr, null);
|
||||
|
||||
addAttr(sheet.id, "str_mod", c.attribute_mods.str, null);
|
||||
addAttr(sheet.id, "int_mod", c.attribute_mods.int, null);
|
||||
addAttr(sheet.id, "wis_mod", c.attribute_mods.wis, null);
|
||||
addAttr(sheet.id, "dex_mod", c.attribute_mods.dex, null);
|
||||
addAttr(sheet.id, "con_mod", c.attribute_mods.con, null);
|
||||
addAttr(sheet.id, "chr_mod", c.attribute_mods.chr, null);
|
||||
|
||||
// Add their Hit Points
|
||||
addAttr(sheet.id, "hp", c.hp, c.hp);
|
||||
|
||||
// Set the guild and level
|
||||
addAttr(sheet.id, "class", c.guild, null);
|
||||
addAttr(sheet.id, "level", c.level, null);
|
||||
addAttr(sheet.id, "align", c.alignment, null);
|
||||
|
||||
// Set the AC and attack throw
|
||||
addAttr(sheet.id, "ac", c.armour.ac_mod, null);
|
||||
addAttr(sheet.id, "attack_throw", c.attack_throw, null);
|
||||
addAttr(sheet.id, "attack_throw_vis", c.attack_throw, null);
|
||||
|
||||
// Set the saves
|
||||
addAttr(sheet.id, "save_pp", c.saves.pp, null);
|
||||
addAttr(sheet.id, "save_pd", c.saves.pd, null);
|
||||
addAttr(sheet.id, "save_bb", c.saves.bb, null);
|
||||
addAttr(sheet.id, "save_sw", c.saves.sw, null);
|
||||
addAttr(sheet.id, "save_sp", c.saves.sp, null);
|
||||
|
||||
/* Add our Repeating Sections */
|
||||
|
||||
// for armour
|
||||
let armour_name = "repeating_equipment_" + generateRowID();
|
||||
addAttr(sheet.id, armour_name + "_equipment_name", c.armour.name, null);
|
||||
|
||||
// for weapons
|
||||
let melee_name = "repeating_attacks_" + generateRowID();
|
||||
addAttr(sheet.id, melee_name + "_attack_name", c.melee.name, null);
|
||||
addAttr(sheet.id, melee_name + "_attack_throw_mod", c.melee.throw_mod, null);
|
||||
addAttr(sheet.id, melee_name + "_attack_dmg", c.melee.damage, null);
|
||||
}
|
||||
}
|
||||
|
||||
if(msg.type == "api" && msg.content.indexOf("!acksdeleteall") !== -1) {
|
||||
let characters = findObjs({type: 'character'});
|
||||
|
||||
for(let character of characters) {
|
||||
character.get('gmnotes', function(val) {
|
||||
if(val === "Generated by Atr0phyACKS") {
|
||||
sendChat(msg.who, "Deleting generated NPC: " + character.get('name'));
|
||||
character.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user