
I have a Mod for creating Mothership 1E characters. It is working except for the GenClass function. The intent is that a macro calls GenClass and prompts for the class as follows: !GenClass {Class?|Teamster|Marine|Scientist|Android} However, it does not appear that this is even reaching the API. What am I missing?
/**
* Generates Mothership 1E Characters
*
*/
var RPG = RPG || {
version: "0.0.1",
output: [],
const handleInput = (msg) => {
if (msg.type !== "api") {
return;
}
let args = msg.content.split(/\s+/);
switch (args[0]) {
case '!NAME':
break;
}
};
listen: function () {
"use strict";
on("chat:message", function (msg) {
if ("api" == msg.type) {
switch (msg.content) {
case "!Generate":
RPG.Generate(msg);
break;
case "!GenAbilities":
RPG.GenAbilities(msg);
break;
case "!GenClass":
RPG.GenClass(msg);
break;
case "!GenSkill":
RPG.GenSkill(msg);
break;
case "!CharView":
RPG.printSheet(msg);
break;
case "!SaveChar":
RPG.save(msg);
}
}
});
},
showHelp: function () {
sendChat("API", "/w gm <table style='background: #DCD9D5; border-radius: 20px; font-size: 10px;'>" +
"<thead><tr><th>Help</th></tr></thead>" +
"<tbody>" +
"<tr><td><strong>!RPG</strong><br><strong>!fodder help</strong><br>Show this help screen.</td></tr>" +
"<tr><td><strong>!RPG core</strong><br>Runs the script.</td></tr>" +
"<tr><td> </td></tr>" +
"</td></tr></tbody></table>");
},
Generate: function (msg, outputCallback, saveCallback) {
sendChat("API", "Starting character creation");
RPG.id = msg.playerid;
RPG.player = msg.who;
RPG.name = msg.who + " #" + (findObjs({
_type: "character",
controlledby: msg.playerid
}).length + 1)
},
GenAbilities: function (msg) {
RPG.Strength = randomInteger(10) + randomInteger(10) + 27;
RPG.Speed = randomInteger(10) + randomInteger(10) + 27;
RPG.Intellect = randomInteger(10) + randomInteger(10) + 27;
RPG.Combat = randomInteger(10) + randomInteger(10) + 27;
RPG.Hits_max = 2;
RPG.Health = randomInteger(10) + 11;
RPG.Sanity = randomInteger(10) + randomInteger(10) + 12;
RPG.Fear = randomInteger(10) + randomInteger(10) + 12;
RPG.Body = randomInteger(10) + randomInteger(10) + 12;
RPG.Armor = randomInteger(10) + randomInteger(10) + 12;
RPG.Stress = 2;
RPG.output['Strength'] = "<tr><td style='font-weight: bold; padding: 5px;'>Strength</td><td style='padding: 5px;'>" + RPG.Strength + "</td></tr>";
RPG.output['Speed'] = "<tr><td style='font-weight: bold; padding: 5px;'>Speed</td><td style='padding: 5px;'>" + RPG.Speed + "</td></tr>";
RPG.output['Intellect'] = "<tr><td style='font-weight: bold; padding: 5px;'>Intellect</td><td style='padding: 5px;'>" + RPG.Intellect + "</td></tr>";
RPG.output['Combat'] = "<tr><td style='font-weight: bold; padding: 5px;'>Combat</td><td style='padding: 5px;'>" + RPG.Combat + "</td></tr>";
RPG.output['Hits_max'] = "<tr><td style='font-weight: bold; padding: 5px;'>Hits_max</td><td style='padding: 5px;'>" + RPG.Hits_max + "</td></tr>";
RPG.output['Health'] = "<tr><td style='font-weight: bold; padding: 5px;'>Health</td><td style='padding: 5px;'>" + RPG.Health + "</td></tr>";
RPG.output['Sanity'] = "<tr><td style='font-weight: bold; padding: 5px;'>Sanity Save</td><td style='padding: 5px;'>" + RPG.Sanity + "</td></tr>";
RPG.output['Fear'] = "<tr><td style='font-weight: bold; padding: 5px;'>Fear Save</td><td style='padding: 5px;'>" + RPG.Fear + "</td></tr>";
RPG.output['Body'] = "<tr><td style='font-weight: bold; padding: 5px;'>Body Save</td><td style='padding: 5px;'>" + RPG.Body + "</td></tr>";
RPG.output['Armor'] = "<tr><td style='font-weight: bold; padding: 5px;'>Armor Save</td><td style='padding: 5px;'>" + RPG.Armor + "</td></tr>";
RPG.output['Stress'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stress</td><td style='padding: 5px;'>" + RPG.Stress + "</td></tr>";
RPG.output['Stats'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stats</td><td style='padding: 5px;'></td></tr>";
RPG.output['Skills'] = "<tr><td style='font-weight: bold; padding: 5px;'>Skills</td><td style='padding: 5px;'></td></tr>";
RPG.output['stress_panic'] = "<tr><td style='font-weight: bold; padding: 5px;'>Trauma Response</td><td style='padding: 5px;'></td></tr>";
RPG.output['Equipment'] = "<tr><td style='font-weight: bold; padding: 5px;'>Equipment</td><td style='padding: 5px;'>Drag the following equipment from the Compendium onto your character sheet:</td></tr>";
RPGText1 = "<table font-size: 10px;'> <tbody>" +
RPG.output['Strength'] +
RPG.output['Speed'] + RPG.output['Intellect'] +
RPG.output['Combat'] +
RPG.output['Hits_max'] +
RPG.output['Health'] +
RPG.output['Sanity'] +
RPG.output['Fear'] +
RPG.output['Body'] +
RPG.output['Armor'] +
RPG.output['Stress'] +
RPG.output['Stats'] +
RPG.output['Skills'] +
RPG.output['stress_panic'] +
RPG.output['Equipment'] +
"</tbody></table>";
sendChat(msg.who, "/direct " + RPGText1);
},
GenClass: function (msg) {
sendChat(msg.who, "/direct Got to here.");
let args = msg.content.split(/\s+/);
if ('!GenClass' === args.shift()) {
sendChat('my API', 'received parameters: ' + args.join(', '));
}
switch (args[0]) {
case "Teamster":
RPG.Strength = RPG.Strength + 5;
RPG.Speed = RPG.Speed + 5;
RPG.Intellect = RPG.Intellect + 5;
RPG.Combat = RPG.Combat + 5;
RPG.Sanity = RPG.Sanity + 10;
RPG.Fear = RPG.Fear + 10;
RPG.Body = RPG.Body + 10;
RPG.Armor = RPG.Armor + 10;
RPG.Stats = "<tr><td style='font-weight: bold; padding: 5px;'>Stat Penalty</td><td style='padding: 5px;'>Subtract 10 from Strength, Speed, or Combat" + "</td></tr>";
RPG.Skills = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>You get Heavy_Machinery, Zero-G, one more Trained Skill and one Expert Skill. You must have one of the Expert Skill's prerequisite Skills" + "</td></tr>";
RPG.stress_panic = "Once per session, a Teamster may re-roll a roll on the Panic Effect Table.";
sendChat("API", "/roll 1t[TLoadout]", function (result) {
var content = JSON.parse(result[0].content);
RPG.Loadout = content.rolls[0].results[0].tableItem.name;
});
RPG.output['Strength'] = "<tr><td style='font-weight: bold; padding: 5px;'>Strength</td><td style='padding: 5px;'>" + RPG.Strength + "</td></tr>";
RPG.output['Speed'] = "<tr><td style='font-weight: bold; padding: 5px;'>Speed</td><td style='padding: 5px;'>" + RPG.Speed + "</td></tr>";
RPG.output['Intellect'] = "<tr><td style='font-weight: bold; padding: 5px;'>Intellect</td><td style='padding: 5px;'>" + RPG.Intellect + "</td></tr>";
RPG.output['Combat'] = "<tr><td style='font-weight: bold; padding: 5px;'>Combat</td><td style='padding: 5px;'>" + RPG.Combat + "</td></tr>";
RPG.output['Hits_max'] = "<tr><td style='font-weight: bold; padding: 5px;'>Hits_max</td><td style='padding: 5px;'>" + RPG.Hits_max + "</td></tr>";
RPG.output['Health'] = "<tr><td style='font-weight: bold; padding: 5px;'>Health</td><td style='padding: 5px;'>" + RPG.Health + "</td></tr>";
RPG.output['Sanity'] = "<tr><td style='font-weight: bold; padding: 5px;'>Sanity Save</td><td style='padding: 5px;'>" + RPG.Sanity + "</td></tr>";
RPG.output['Fear'] = "<tr><td style='font-weight: bold; padding: 5px;'>Fear Save</td><td style='padding: 5px;'>" + RPG.Fear + "</td></tr>";
RPG.output['Body'] = "<tr><td style='font-weight: bold; padding: 5px;'>Body Save</td><td style='padding: 5px;'>" + RPG.Body + "</td></tr>";
RPG.output['Armor'] = "<tr><td style='font-weight: bold; padding: 5px;'>Armor Save</td><td style='padding: 5px;'>" + RPG.Armor + "</td></tr>";
RPG.output['Stress'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stress</td><td style='padding: 5px;'>" + RPG.Stress + "</td></tr>";
RPG.output['Stats'] = RPG.Stats + "</td></tr>";
RPG.output['Skills'] = RPG.Skills + "</td></tr>";
RPG.output['stress_panic'] = "<tr><td style='font-weight: bold; padding: 5px;'>Trauma Response</td><td style='padding: 5px;'>" + RPG.stress_panic + "</td></tr>";
RPG.output['Equipment'] = "<tr><td style='font-weight: bold; padding: 5px;'>Equipment</td><td style='padding: 5px;'>Drag the following equipment from the Compendium onto your character sheet: " + RPG.Loadout + "</td></tr>";
break;
case "Android":
RPG.Intellect = RPG.Intellect + 20;
RPG.Fear = RPG.Fear + 60;
RPG.Hits_max = RPG.Hits_max + 1;
RPG.Stats = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>Subtract 10 from Strength, Body, or Combat" + "</td></tr>";
RPG.Linguistics = 10;
RPG.Computers = 10;
RPG.Mathematics = 10;
RPG.Skills = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>You get Linguistics, Computers, Mathematics, one more Trained Skill, and one Expert Skill. You must have one of the Expert Skill's prerequisite Skills" + "</td></tr>";
RPG.stress_panic = "Fear Saves made in the presence of Androids have Disadvantage.";
sendChat("API", "/roll 1t[ALoadout]", function (result) {
var content = JSON.parse(result[0].content);
RPG.Loadout = content.rolls[0].results[0].tableItem.name;
});
RPG.output['Strength'] = "<tr><td style='font-weight: bold; padding: 5px;'>Strength</td><td style='padding: 5px;'>" + RPG.Strength + "</td></tr>";
RPG.output['Speed'] = "<tr><td style='font-weight: bold; padding: 5px;'>Speed</td><td style='padding: 5px;'>" + RPG.Speed + "</td></tr>";
RPG.output['Intellect'] = "<tr><td style='font-weight: bold; padding: 5px;'>Intellect</td><td style='padding: 5px;'>" + RPG.Intellect + "</td></tr>";
RPG.output['Combat'] = "<tr><td style='font-weight: bold; padding: 5px;'>Combat</td><td style='padding: 5px;'>" + RPG.Combat + "</td></tr>";
RPG.output['Hits_max'] = "<tr><td style='font-weight: bold; padding: 5px;'>Hits_max</td><td style='padding: 5px;'>" + RPG.Hits_max + "</td></tr>";
RPG.output['Health'] = "<tr><td style='font-weight: bold; padding: 5px;'>Health</td><td style='padding: 5px;'>" + RPG.Health + "</td></tr>";
RPG.output['Sanity'] = "<tr><td style='font-weight: bold; padding: 5px;'>Sanity Save</td><td style='padding: 5px;'>" + RPG.Sanity + "</td></tr>";
RPG.output['Fear'] = "<tr><td style='font-weight: bold; padding: 5px;'>Fear Save</td><td style='padding: 5px;'>" + RPG.Fear + "</td></tr>";
RPG.output['Body'] = "<tr><td style='font-weight: bold; padding: 5px;'>Body Save</td><td style='padding: 5px;'>" + RPG.Body + "</td></tr>";
RPG.output['Armor'] = "<tr><td style='font-weight: bold; padding: 5px;'>Armor Save</td><td style='padding: 5px;'>" + RPG.Armor + "</td></tr>";
RPG.output['Stress'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stress</td><td style='padding: 5px;'>" + RPG.Stress + "</td></tr>";
RPG.output['Stats'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stats Adjustment</td><td style='padding: 5px;'>" + RPG.Stats + "</td></tr>";
RPG.output['Skills'] = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>" + RPG.Skills + "</td></tr>";
RPG.output['stress_panic'] = "<tr><td style='font-weight: bold; padding: 5px;'>Trauma Response</td><td style='padding: 5px;'>" + RPG.stress_panic + "</td></tr>";
RPG.output['Equipment'] = "<tr><td style='font-weight: bold; padding: 5px;'>Equipment</td><td style='padding: 5px;'>Drag the following equipment from the Compendium onto your character sheet: " + RPG.Loadout + "</td></tr>";
break;
case "Scientist":
RPG.Intellect = RPG.Intellect + 10;
RPG.Sanity = RPG.Sanity + 30;
RPG.Skills = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>You get one Master Skill, and an Expert and Trained Skill prerequisite, as well as another Trained Skill." + "</td></tr>";
RPG.Stats = "<tr><td style='font-weight: bold; padding: 5px;'>Stat Bonus</td><td style='padding: 5px;'>Add 5 to Oone Stat." + "</td></tr>";
RPG.stress_panic = "Whenever a Scientist fails a Sanity Save, every friendly player nearby gains 1 Stress.";
sendChat("API", "/roll 1t[SLoadout]", function (result) {
var content = JSON.parse(result[0].content);
RPG.Loadout = content.rolls[0].results[0].tableItem.name;
});
RPG.output['Strength'] = "<tr><td style='font-weight: bold; padding: 5px;'>Strength</td><td style='padding: 5px;'>" + RPG.Strength + "</td></tr>";
RPG.output['Speed'] = "<tr><td style='font-weight: bold; padding: 5px;'>Speed</td><td style='padding: 5px;'>" + RPG.Speed + "</td></tr>";
RPG.output['Intellect'] = "<tr><td style='font-weight: bold; padding: 5px;'>Intellect</td><td style='padding: 5px;'>" + RPG.Intellect + "</td></tr>";
RPG.output['Combat'] = "<tr><td style='font-weight: bold; padding: 5px;'>Combat</td><td style='padding: 5px;'>" + RPG.Combat + "</td></tr>";
RPG.output['Hits_max'] = "<tr><td style='font-weight: bold; padding: 5px;'>Hits_max</td><td style='padding: 5px;'>" + RPG.Hits_max + "</td></tr>";
RPG.output['Health'] = "<tr><td style='font-weight: bold; padding: 5px;'>Health</td><td style='padding: 5px;'>" + RPG.Health + "</td></tr>";
RPG.output['Sanity'] = "<tr><td style='font-weight: bold; padding: 5px;'>Sanity Save</td><td style='padding: 5px;'>" + RPG.Sanity + "</td></tr>";
RPG.output['Fear'] = "<tr><td style='font-weight: bold; padding: 5px;'>Fear Save</td><td style='padding: 5px;'>" + RPG.Fear + "</td></tr>";
RPG.output['Body'] = "<tr><td style='font-weight: bold; padding: 5px;'>Body Save</td><td style='padding: 5px;'>" + RPG.Body + "</td></tr>";
RPG.output['Armor'] = "<tr><td style='font-weight: bold; padding: 5px;'>Armor Save</td><td style='padding: 5px;'>" + RPG.Armor + "</td></tr>";
RPG.output['Stress'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stress</td><td style='padding: 5px;'>" + RPG.Stress + "</td></tr>";
RPG.output['Stats'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stats Adjustment</td><td style='padding: 5px;'>" + RPG.Stats + "</td></tr>";
RPG.output['Skills'] = "<tr><td style='font-weight: bold; padding: 5px;'>Additional Skills</td><td style='padding: 5px;'>" + RPG.Skills + "</td></tr>";
RPG.output['stress_panic'] = "<tr><td style='font-weight: bold; padding: 5px;'>Trauma Response</td><td style='padding: 5px;'>" + RPG.stress_panic + "</td></tr>";
RPG.output['Equipment'] = "<tr><td style='font-weight: bold; padding: 5px;'>Equipment</td><td style='padding: 5px;'>Drag the following equipment from the Compendium onto your character sheet: " + RPG.Loadout + "</td></tr>";
break;
case "Marine":
RPG.Combat = RPG.Combat + 10;
RPG.Body = RPG.Body + 10;
RPG.Fear = RPG.Fear + 20;
RPG.Hits_max = RPG.Hits_max + 1;
RPG.Military_Training = 10;
RPG.Athletics = 10;
RPG.Stats = "None" + RPG.Skills + "</td></tr>";
RPG.Skills = "<tr><td style='font-weight: bold; padding: 5px;'>Skills</td><td style='padding: 5px;'>You get Military Training, Athletics, and either one Expert Skill or two Trained Skills. You have one of the Expert Skill's prerequisite Skills" + "</td></tr>";
RPG.stress_panic = "Whenever a Marine Panics, every friendly player nearby must make a Fear Save.";
sendChat("API", "/roll 1t[MLoadout]", function (result) {
var content = JSON.parse(result[0].content);
RPG.Loadout = content.rolls[0].results[0].tableItem.name;
});
RPG.output['Strength'] = "<tr><td style='font-weight: bold; padding: 5px;'>Strength</td><td style='padding: 5px;'>" + RPG.Strength + "</td></tr>";
RPG.output['Speed'] = "<tr><td style='font-weight: bold; padding: 5px;'>Speed</td><td style='padding: 5px;'>" + RPG.Speed + "</td></tr>";
RPG.output['Intellect'] = "<tr><td style='font-weight: bold; padding: 5px;'>Intellect</td><td style='padding: 5px;'>" + RPG.Intellect + "</td></tr>";
RPG.output['Combat'] = "<tr><td style='font-weight: bold; padding: 5px;'>Combat</td><td style='padding: 5px;'>" + RPG.Combat + "</td></tr>";
RPG.output['Hits_max'] = "<tr><td style='font-weight: bold; padding: 5px;'>Hits_max</td><td style='padding: 5px;'>" + RPG.Hits_max + "</td></tr>";
RPG.output['Health'] = "<tr><td style='font-weight: bold; padding: 5px;'>Health</td><td style='padding: 5px;'>" + RPG.Health + "</td></tr>";
RPG.output['Sanity'] = "<tr><td style='font-weight: bold; padding: 5px;'>Sanity Save</td><td style='padding: 5px;'>" + RPG.Sanity + "</td></tr>";
RPG.output['Fear'] = "<tr><td style='font-weight: bold; padding: 5px;'>Fear Save</td><td style='padding: 5px;'>" + RPG.Fear + "</td></tr>";
RPG.output['Body'] = "<tr><td style='font-weight: bold; padding: 5px;'>Body Save</td><td style='padding: 5px;'>" + RPG.Body + "</td></tr>";
RPG.output['Armor'] = "<tr><td style='font-weight: bold; padding: 5px;'>Armor Save</td><td style='padding: 5px;'>" + RPG.Armor + "</td></tr>";
RPG.output['Stress'] = "<tr><td style='font-weight: bold; padding: 5px;'>Stress</td><td style='padding: 5px;'>" + RPG.Stress + "</td></tr>";
RPG.output['Stats'] = RPG.Stats + "</td></tr>";
RPG.output['Skills'] = RPG.Skills + "</td></tr>";
RPG.output['stress_panic'] = "<tr><td style='font-weight: bold; padding: 5px;'>Trauma Response</td><td style='padding: 5px;'>" + RPG.stress_panic + "</td></tr>";
RPG.output['Equipment'] = "<tr><td style='font-weight: bold; padding: 5px;'>Equipment</td><td style='padding: 5px;'>Drag the following equipment from the Compendium onto your character sheet: " + RPG.Loadout + "</td></tr>";
sendChat(msg.who, "/direct " + RPGText1);
break;
default:
sendChat(msg.who, "/direct no class selected.");
return;
}
},
printSheet: function (msg) {
let styleLabel = "style='font-weight: bold; padding: 5px;'";
let styleVal = "style='padding: 5px;'";
RPGText1 = "<table font-size: 10px;'> <tbody>" +
RPG.output['Strength'] +
RPG.output['Speed'] +
RPG.output['Intellect'] +
RPG.output['Combat'] +
RPG.output['Hits_max'] +
RPG.output['Health'] +
RPG.output['Sanity'] +
RPG.output['Fear'] +
RPG.output['Body'] +
RPG.output['Armor'] +
RPG.output['Stress'] +
RPG.output['Stats'] +
RPG.output['Skills'] +
RPG.output['stress_panic'] +
RPG.output['Equipment'] +
"</tbody></table>";
RPGTextAll = "<p><p>CURRENT CHARACTER PARAMETERS<p><p>" + RPGText1;
sendChat(msg.who, "/direct " + RPGTextAll);
},
save: function (msg) {
let character = createObj("character", {
name: RPG.name,
archived: false,
inplayerjournals: "all",
controlledby: "all"
});
character.set('bio', RPGTextAll);
createObj('attribute', {
name: 'strength',
current: RPG.Strength,
_characterid: character.id
});
createObj('attribute', {
name: 'speed',
current: RPG.Speed,
_characterid: character.id
});
createObj('attribute', {
name: 'intellect',
current: RPG.Intellect,
_characterid: character.id
});
createObj('attribute', {
name: 'combat',
current: RPG.Combat,
_characterid: character.id
});
createObj('attribute', {
name: 'health_max',
current: RPG.Hits,
_characterid: character.id
});
createObj('attribute', {
name: 'health',
current: RPG.Health,
_characterid: character.id
});
createObj('attribute', {
name: 'stress',
current: RPG.Stress,
_characterid: character.id
});
createObj('attribute', {
name: 'sanity',
current: RPG.Sanity,
_characterid: character.id
});
createObj('attribute', {
name: 'fear',
current: RPG.Fear,
_characterid: character.id
});
createObj('attribute', {
name: 'body',
current: RPG.Body,
_characterid: character.id
});
createObj('attribute', {
name: 'armor',
current: RPG.Armor,
_characterid: character.id
});
sendChat('', 'Created <a href="<a href="http://journal.roll20.net/character/" rel="nofollow">http://journal.roll20.net/character/</a>' + character.id + '" style="color:blue;text-decoration:underline;">RPG ' + RPG.name + '</a>');
}
};
on("ready", function () {
RPG.listen();
});