Javascript-roll20api脚本
我在roll20上玩了一个游戏,我正在编写一个脚本,将宏添加到“角色”,我制作了一个脚本,可以添加所有技能,但我不知道如何编写逻辑,让它检查角色表上是否存在属性,然后编写宏 这是我的代码,一些建议会很好!我对这一切一无所知,我正在努力学习这门语言,但我可以用一个例子来学习Javascript-roll20api脚本,javascript,Javascript,我在roll20上玩了一个游戏,我正在编写一个脚本,将宏添加到“角色”,我制作了一个脚本,可以添加所有技能,但我不知道如何编写逻辑,让它检查角色表上是否存在属性,然后编写宏 这是我的代码,一些建议会很好!我对这一切一无所知,我正在努力学习这门语言,但我可以用一个例子来学习 var bigmike = bigmike || {}; bigmike.dicetype = "1d20"; bigmike.charClasses = [
var bigmike = bigmike || {};
bigmike.dicetype = "1d20";
bigmike.charClasses = [
'Monster'
];
bigmike.attribute = [];
bigmike.attribute["AC"] = { name: "AC", current: "", max:"" };
bigmike.attribute["Init"] = { name: "Init", current: "", max:"" };
bigmike.attribute["fort"] = { name: "Fort", current: "", max:"" };
bigmike.attribute["ref"] = { name: "Ref", current: "", max:"" };
bigmike.attribute["will"] = { name: "Will", current: "", max:"" };
bigmike.attribute["str"] = { name: "Str", current: "", max:"" };
bigmike.attribute["dex"] = { name: "Dex", current: "", max:"" };
bigmike.attribute["con"] = { name: "Con", current: "", max:"" };
bigmike.attribute["int"] = { name: "Int", current: "", max:"" };
bigmike.attribute["wis"] = { name: "Wis", current: "", max:"" };
bigmike.attribute["cha"] = { name: "Cha", current: "", max:"" };
bigmike.attribute["Size"] = { name: "Size", current: "", max:"" };
bigmike.attribute["CR"] = { name: "CR", current: "", max:"" };
bigmike.attribute["HP"] = { name: "HP", current: "", max:"" };
bigmike.attribute["BaseAtk"] = { name: "BaseAtk", current: "", max:"" };
bigmike.attribute["CMB"] = { name: "CMB", current: "", max:"" };
bigmike.attribute["CMD"] = { name: "CMD", current: "", max:"" };
bigmike.stats = [
{ name: bigmike.attribute["str"].name },
{ name: bigmike.attribute["dex"].name },
{ name: bigmike.attribute["con"].name },
{ name: bigmike.attribute["int"].name },
{ name: bigmike.attribute["wis"].name },
{ name: bigmike.attribute["cha"].name }
];
bigmike.saves = [
{ name: bigmike.attribute["fort"].name },
{ name: bigmike.attribute["ref"].name },
{ name: bigmike.attribute["will"].name }
];
/** Skills
Skills are represented as an object, which consists of one value, since Monsters have static skill settings.
*/
bigmike.skill = [
{ name: "Acrobatics", start: 0 },
{ name: "Appraise", start: 0 },
{ name: "Bluff", start: 0 },
{ name: "Climb", start: 0 },
{ name: "Diplomacy", start: 0 },
{ name: "Disable-Device", start: 0 },
{ name: "Disguise", start: 0 },
{ name: "Escape-Artist", start: 0 },
{ name: "Fly", start: 0 },
{ name: "Handle-Animal", start: 0 },
{ name: "Heal", start: 0 },
{ name: "Intimidate", start: 0 },
{ name: "Linguistics", start: 0 },
{ name: "Perception", start: 0 },
{ name: "Perform", start: 0 },
{ name: "Ride", start: 0 },
{ name: "Sense-Motive", start: 0 },
{ name: "Sleight-of-Hand", start: 0 },
{ name: "Spellcraft", start: 0 },
{ name: "Stealth", start: 0 },
{ name: "Survival", start: 0 },
{ name: "Swim", start: 0 },
{ name: "Use-Magic-Device", start: 0 }
];
bigmike.knowledge = [
{ name: "Knowledge-Arcana", start: 0 },
{ name: "Knowledge-Dungeoneering", start: 0 },
{ name: "Knowledge-Engineering", start: 0 },
{ name: "Knowledge-Geography", start: 0 },
{ name: "Knowledge-History", start: 0 },
{ name: "Knowledge-Local", start: 0 },
{ name: "Knowledge-Nature", start: 0 },
{ name: "Knowledge-Nobility", start: 0 },
{ name: "Knowledge-Planes", start: 0 },
{ name: "Knowledge-Religion", start: 0 }
];
bigmike.craft = [
{ name: "Craft-Any", start: 0 },
{ name: "Craft-Alchemy", start: 0 },
{ name: "Craft-Armorer", start: 0 },
{ name: "Craft-Basketweaving", start: 0 },
{ name: "Craft-Bookbinding", start: 0 },
{ name: "Craft-Bowyer", start: 0 },
{ name: "Craft-Blacksmith", start: 0 },
{ name: "Craft-Brewing", start: 0 },
{ name: "Craft-Calligraphy", start: 0 },
{ name: "Craft-Carpentry", start: 0 },
{ name: "Craft-Cobbling", start: 0 },
{ name: "Craft-Cooking", start: 0 },
{ name: "Craft-Crystal-Carving", start: 0 },
{ name: "Craft-Gemcutting", start: 0 },
{ name: "Craft-Glassblowing", start: 0 },
{ name: "Craft-Goldsmith", start: 0 },
{ name: "Craft-Leatherworking", start: 0 },
{ name: "Craft-Locksmithing", start: 0 },
{ name: "Craft-Jewelry", start: 0 },
{ name: "Craft-Painting", start: 0 },
{ name: "Craft-Pottery", start: 0 },
{ name: "Craft-Sculpting", start: 0 },
{ name: "Craft-Stonemasonry", start: 0 },
{ name: "Craft-Tailoring", start: 0 },
{ name: "Craft-Traps", start: 0 },
{ name: "Craft-Weaponsmith", start: 0 },
{ name: "Craft-Weaving", start: 0 }
];
bigmike.parseCommand = function parseCommand(msg) {
if (msg.type == "api" && msg.who.indexOf("(GM)") == -1) {
sendChat("System", "Only the GM is allowed to switch classes.");
return;
}
if(msg.type == "api" && msg.content.indexOf("!skill ") !== -1) {
var cmdParts = msg.content.replace("!skill ", "").split(" ");
var charClass;
_.each(cmdParts, function(part) {
var indexOfClass = _.indexOf(bigmike.charClasses, part);
if (indexOfClass > -1) {
charClass = bigmike.charClasses[indexOfClass];
cmdParts = _.without(cmdParts, part);
}
});
if (typeof charClass === undefined) {
sendChat('System', 'Usage: !skill charName charClass');
sendChat('System', 'Value for charClass: ' + bigmike.charClasses);
return;
}
var result = {};
result.charName = cmdParts.join(" ");
log("Charname: " + result.charName);
result.charType = charClass;
log("CharType: " + result.charType);
return result;
}
}
on("ready", function() {
sendChat("system", "/w GM API is ready and running");
on("add:character", function(character) {
// insertAttributes(character);
// insertStatRolls(character);
insertSaves(character);
// insertAttacks(character);
insertSkills(character);
insertKnowledges(character);
insertCrafts(character);
});
});
on("chat:message", function(msg) {
var chatCmd = bigmike.parseCommand(msg);
if (typeof chatCmd === 'undefined') {
return;
}
sendChat('System', 'Setting class ' + chatCmd.charType + ' for ' + chatCmd.charName);
var characters = findObjs({
_type: "character",
archived: false,
name: chatCmd.charName
}, {caseInsensitive: true});
_.each(characters, function(character) {
log("Name: " + character.get("name"));
log("Bio: " + character.get("bio"));
log("GM-Notes: " + character.get("gmnotes"));
log("Archived: " + character.get("archived"));
log("In player journals: " + character.get("inplayerjournals"));
log("Controlled By: " + character.get("controlledby"));
insertSaves(character, chatCmd.charType);
insertSkills(character, chatCmd.charType);
insertKnowledges(character, chatCmd.charType);
insertCrafts(character, chatCmd.charType);
});
});
/** Functions
list of functions: (planned or in place)
insertAttribute
insertAbilities
insertSkills
rollStats
*/
function insertAttributes(character) {
for (var index in bigmike.attribute) {
createObj("attribute", {
name: bigmike.attribute[index].name,
current: bigmike.attribute[index].start,
max: bigmike.attribute[index].max,
characterid: character.id
});
};
for(var index in bigmike.skill) {
createObj("attribute", {
name: bigmike.skill[index].name,
current: bigmike.skill[index].start,
max: "",
characterid: character.id,
});
};
for(var index = 0; index < bigmike.knowledge.length; index++) {
createObj(".attribute", {
name: bigmike.knowledge[index].name,
current: bigmike.knowledge[index].start,
max: "",
characterid: character.id,
});
};
};
function insertAttacks(character) {
for (var index = 0; index < bigmike.attack.length; index++) {
createObj("ability", {
name: bigmike.attack[index].name,
description: "",
action: bigmike.attack[index].macro,
characterid: character.id,
});
};
}
function insertSkills(character) {
for (var index = 0; index < bigmike.skill.length; index++) {
var macro = "/emas @{selected|token_name} makes a check vs " + bigmike.skill[index].name + " ( [[" + bigmike.dicetype + " + @{" + bigmike.skill[index].name + "} ]] )";
createObj("ability", {
name: bigmike.skill[index].name,
description: "",
action: macro,
characterid: character.id
});
};
}
function insertKnowledges(character) {
for (var index = 0; index < bigmike.knowledge.length; index++) {
var macro = "/emas @{selected|token_name} makes a check vs " + bigmike.knowledge[index].name + ": ( [[" + bigmike.dicetype + "+@{" + bigmike.knowledge[index].name + "} ]] )";
createObj("ability", {
name: bigmike.knowledge[index].name,
description: "",
action: macro,
characterid: character.id
});
};
}
function insertCrafts(character) {
for (var index = 0; index < bigmike.craft.length; index++) {
var macro = "/emas @{selected|token_name} makes a check vs " + bigmike.craft[index].name + ": ( [[" + bigmike.dicetype + "+@{" + bigmike.craft[index].name + "} ]] )";
createObj("ability", {
name: bigmike.craft[index].name,
description: "",
action: macro,
characterid: character.id
});
};
}
function insertStatRolls(character) {
for (var index = 0; index < bigmike.stats.length; index++) {
var macro = "/emas @{selected|token_name} rolls a [[" + bigmike.dicetype + "+@{" + bigmike.stats[index].name + "} ]] for his " + bigmike.stats[index].name + " check.";
createObj("ability", {
name: bigmike.stats[index].name,
description: "",
action: macro,
characterid: character.id
});
};
}
function insertSaves(character) {
for (var index = 0; index < bigmike.saves.length; index++) {
var macro = "/emas @{selected|token_name} rolls a [[" + bigmike.dicetype + "+@{" + bigmike.saves[index].name + "} ]] save VS " + bigmike.saves[index].name + ".";
createObj("ability", {
name: bigmike.saves[index].name,
description: "",
action: macro,
characterid: character.id
});
};
}
var bigmike=bigmike | |{};
bigmike.dicetype=“1d20”;
bigmike.charClasses=[
“怪物”
];
bigmike.attribute=[];
bigmike.attribute[“AC”]={name:“AC”,current:,max::};
属性[“Init”]={name:“Init”,当前:,最大:};
bigmike.attribute[“fort”]={name:“fort”,current:,max::};
bigmike.attribute[“ref”]={name:“ref”,current:,max::};
bigmike.attribute[“will”]={name:“will”,current:,max::};
属性[“str”]={name:“str”,当前:,最大:};
属性[“dex”]={name:“dex”,当前:,最大:};
bigmike.attribute[“con”]={name:“con”,current:,max::};
属性[“int”]={name:“int”,当前:,最大:};
属性[“wis”]={name:“wis”,当前:,最大:};
bigmike.attribute[“cha”]={name:“cha”,current:,max::};
属性[“大小”]={name:“大小”,当前:,最大:};
bigmike.attribute[“CR”]={name:“CR”,current:,max::};
bigmike.attribute[“HP”]={name:“HP”,current:,max::};
属性[“BaseAtk”]={name:“BaseAtk”,当前:,最大:};
属性[“CMB”]={name:“CMB”,当前:,最大:};
属性[“CMD”]={name:“CMD”,当前:,最大:};
bigmike.stats=[
{name:bigmike.attribute[“str”].name},
{name:bigmike.attribute[“dex”].name},
{name:bigmike.attribute[“con”].name},
{name:bigmike.attribute[“int”].name},
{name:bigmike.attribute[“wis”].name},
{name:bigmike.attribute[“cha”].name}
];
bigmike.saves=[
{name:bigmike.attribute[“fort”].name},
{name:bigmike.attribute[“ref”].name},
{name:bigmike.attribute[“will”].name}
];
/**技巧
技能被表示为一个对象,由一个值组成,因为怪物有静态技能设置。
*/
bigmike.skill=[
{name:“Acrobatics”,开始:0},
{name:“评估”,开始:0},
{name:“Bluff”,开始:0},
{name:“爬升”,开始:0},
{名称:“外交”,开始:0},
{name:“禁用设备”,开始:0},
{name:“伪装”,开始:0},
{name:“转义艺术家”,开始:0},
{name:“Fly”,开始:0},
{name:“处理动物”,开始:0},
{name:“治疗”,开始:0},
{name:“恐吓”,开始:0},
{name:“语言学”,开始:0},
{name:“Perception”,开始:0},
{name:“Perform”,开始:0},
{name:“骑行”,开始:0},
{name:“感知动机”,开始:0},
{name:“花招”,开始:0},
{name:“法术术”,开始:0},
{name:“隐身”,开始:0},
{name:“生存”,开始:0},
{名称:“游泳”,开始:0},
{name:“使用魔法设备”,开始:0}
];
bigmike.knowledge=[
{name:“知识奥秘”,开始:0},
{名称:“知识地下城”,开始时间:0},
{name:“知识工程”,开始:0},
{name:“知识地理”,开始:0},
{name:“知识历史”,开始:0},
{name:“知识本地”,开始:0},
{name:“知识性质”,开始:0},
{name:“知识贵族”,开始:0},
{name:“知识平面”,开始:0},
{名称:“知识宗教”,开始:0}
];
bigmike.craft=[
{name:“手工制作任何”,开始:0},
{name:“工艺炼金术”,开始:0},
{name:“工艺装备商”,开始时间:0},
{名称:“工艺编织篮”,开始时间:0},
{name:“手工装订”,开始:0},
{name:“Craft Bowyer”,开始时间:0},
{name:“工艺铁匠”,开始时间:0},
{name:“工艺酿造”,开始时间:0},
{名称:“工艺书法”,开始:0},
{name:“手工木工”,开始:0},
{name:“手工鹅卵石”,开始:0},
{name:“手工烹饪”,开始时间:0},
{名称:“工艺水晶雕刻”,开始时间:0},
{name:“工艺切割”,开始:0},
{name:“工艺玻璃吹制”,开始时间:0},
{name:“工艺金匠”,开始:0},
{名称:“工艺皮革加工”,开始时间:0},
{名称:“工艺锁匠”,开始时间:0},
{名称:“工艺珠宝”,开始:0},
{名称:“工艺画”,开始:0},
{名称:“工艺陶器”,开始:0},
{名称:“工艺雕刻”,开始:0},
{名称:“工艺石砌体”,开始时间:0},
{name:“手工裁剪”,开始:0},
{name:“工艺陷阱”,开始:0},
{name:“工艺武器匠”,开始:0},
{名称:“手工编织”,开始时间:0}
];
bigmike.parseCommand=函数parseCommand(msg){
如果(msg.type==“api”&&msg.who.indexOf(“(GM)”)==-1){
sendChat(“系统”,“仅允许GM切换类别”);
返回;
}
function insertAttributes(character) {
var characterAttrs = findObjs({
_type: 'attribute',
//name: 'MyAttrName',
_characterid: character.id
});
// `characterAttrs` is now an array of all attributes owned by `character`
// If you uncomment the name line and `character` has one or more attributes
// named "MyAttrName", `characterAttrs` will be an array of all of the
// attributes named "MyAttrName" owned by `character`
...
}