diff --git a/ADnD 2E Revised/2ESheet.html b/ADnD 2E Revised/2ESheet.html
index 076ceeadbe..a7f10aff73 100644
--- a/ADnD 2E Revised/2ESheet.html
+++ b/ADnD 2E Revised/2ESheet.html
@@ -18001,7 +18001,7 @@
The Complete Fighter's Handbook
Weapons
-
+
The Complete Wizard's Handbook
@@ -32772,12 +32772,15 @@ priestSpells['primonster'] = primonster;
/* ---- Priest spells end ---- */
// --- ALL SHEET WORKERS START --- //
-const sheetWorker = 'sheetworker';
-const player = 'player';
-const Success = 'success';
-const Info = 'info';
-const Warning = 'warning';
-const Error = 'error';
+const SHEETWORKER = 'sheetworker';
+const PLAYER = 'player';
+
+const SUCCESS = 'success';
+const INFO = 'info';
+const WARNING = 'warning';
+const ERROR = 'error';
+
+const BOOK_FIELDS = ['book-phb', 'book-tcfhb', 'book-tcwhb'];
on('clicked:hide-toast', function(eventInfo) {
setAttrs({
@@ -32789,10 +32792,10 @@ on('clicked:hide-toast', function(eventInfo) {
function showToast(type, title, message) {
let content
switch (type) {
- case Success: content = 1; break;
- case Info: content = 2; break;
- case Warning: content = 3; break;
- case Error: content = 4; break;
+ case SUCCESS: content = 1; break;
+ case INFO: content = 2; break;
+ case WARNING: content = 3; break;
+ case ERROR: content = 4; break;
}
setAttrs({
['toast']: 1,
@@ -32802,6 +32805,10 @@ function showToast(type, title, message) {
});
}
+function isBookInactive(books, obj) {
+ return !Object.values(books).includes(obj['book']);
+}
+
const squareBracketsRegex = /18\[([0-9]{1,3})]/; // Ie. 18[65]
const parenthesisRegex = /18\(([0-9]{1,3})\)/; // Ie. 18(65)
//Ability Score Parser function
@@ -33305,10 +33312,9 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc) {
if (!spell)
return;
- getAttrs(['book-phb', 'book-tcwhb'], function(values) {
- let activeBooks = Object.values(values);
- if (!activeBooks.includes(spell['book'])) {
- showToast(Error, 'Missing Book', `The book *${spell['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`);
+ getAttrs(BOOK_FIELDS, function(books) {
+ if (isBookInactive(books, spell)) {
+ showToast(ERROR, 'Missing Book', `The book *${spell['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`);
return;
}
@@ -33456,7 +33462,7 @@ function setupAddPriestSpell(postfix) {
let elementalSpheres = parseSpheres(attributes.map(aField => a.S[aField]), elementalRegex);
if (primarySpheres.size < 1) {
- showToast(Warning, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
+ showToast(WARNING, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
return;
}
@@ -33469,14 +33475,14 @@ function setupAddPriestSpell(postfix) {
console.log(spellsToAdd);
if (spellsToAdd.length < 1) {
- showToast(Error, 'No spells found', `No spells found for the selected spheres`);
+ showToast(ERROR, 'No spells found', `No spells found for the selected spheres`);
return;
}
spellsToAdd = spellsToAdd.filter(spell => !knownSpells.has(spell));
console.log(spellsToAdd);
if (spellsToAdd.length < 1) {
- showToast(Info, 'All spells added', `Found no more spells to add based on spheres`);
+ showToast(INFO, 'All spells added', `Found no more spells to add based on spheres`);
return;
}
@@ -33745,124 +33751,136 @@ on('change:nonprof-penalty', function (eventInfo) {
});
})
-function getWeaponWithBonus(weaponName, isMonster) {
+function setWeaponWithBonus(weaponName, setWeaponFunc, isMonster) {
if (!weaponName)
- return undefined;
+ return;
weaponName = weaponName.toLowerCase();
- let baseWeapon = weapons[weaponName];
- if (baseWeapon) {
- return {
- ...baseWeapon,
- 'bonus' : '0'
- };
- }
-
- let match = weaponName.match(/\s*\+([0-9])+\s*/);
- if (!match)
- return undefined;
+ getAttrs(BOOK_FIELDS, function(books) {
+ let baseWeapon = weapons[weaponName];
+ if (baseWeapon) {
+ if (isBookInactive(books, baseWeapon)) {
+ showToast(ERROR, 'Missing Book', `The book *${baseWeapon['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`)
+ return;
+ }
- let baseWeaponName = weaponName.replace(match[0], ' ').trim();
- baseWeapon = weapons[baseWeaponName];
- if (!baseWeapon)
- return undefined;
-
- let bonusString = match[1];
- let bonus = parseInt(bonusString)
- if (isNaN(bonus))
- return undefined;
-
- if (bonus < 1)
- return {
+ setWeaponFunc({
+ ...baseWeapon,
+ 'bonus' : '0'
+ });
+ return;
+ }
+
+ let match = weaponName.match(/\s*\+([0-9])+\s*/);
+ if (!match)
+ return;
+
+ let baseWeaponName = weaponName.replace(match[0], ' ').trim();
+ baseWeapon = weapons[baseWeaponName];
+ if (!baseWeapon)
+ return;
+
+ if (isBookInactive(books, baseWeapon)) {
+ showToast(ERROR, 'Missing Book', `The book *${baseWeapon['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`)
+ return;
+ }
+
+ let bonusString = match[1];
+ let bonus = parseInt(bonusString)
+ if (isNaN(bonus))
+ return;
+
+ if (bonus < 1)
+ setWeaponFunc({
+ ...baseWeapon,
+ 'bonus' : '0'
+ });
+ return;
+
+ let weaponWithBonus = {
...baseWeapon,
- 'bonus' : '0'
- };
-
- let weaponWithBonus = {
- ...baseWeapon,
- 'speed' : Math.max(baseWeapon['speed'] - bonus, 0),
- 'bonus' : `+${bonus}`
- }
- if (isMonster) {
- weaponWithBonus['small-medium'] += `+${bonus}`;
- weaponWithBonus['large'] += `+${bonus}`;
- weaponWithBonus['thac0'] = `@{monsterthac0}-${bonus}`;
- }
-
- return weaponWithBonus;
+ 'speed' : Math.max(baseWeapon['speed'] - bonus, 0),
+ 'bonus' : `+${bonus}`
+ }
+ if (isMonster) {
+ weaponWithBonus['small-medium'] += `+${bonus}`;
+ weaponWithBonus['large'] += `+${bonus}`;
+ weaponWithBonus['thac0'] = `@{monsterthac0}-${bonus}`;
+ }
+
+ setWeaponFunc(weaponWithBonus);
+ });
}
//melee hit autofill
-on('change:repeating_weapons:weaponname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+on('change:repeating_weapons:weaponname', function(eventInfo) {
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons_attackadj' : weapon['bonus'],
+ 'repeating_weapons_range' : 'Melee',
+ 'repeating_weapons_size' : weapon['size'],
+ 'repeating_weapons_weapspeed' : weapon['speed'],
+ 'repeating_weapons_weaptype-slash' : weapon['type'].includes('S') ? 1 : 0,
+ 'repeating_weapons_weaptype-pierce': weapon['type'].includes('P') ? 1 : 0,
+ 'repeating_weapons_weaptype-blunt' : weapon['type'].includes('B') ? 1 : 0,
+ };
- let weaponInfo = {
- 'repeating_weapons_attackadj' : weapon['bonus'],
- 'repeating_weapons_range' : 'Melee',
- 'repeating_weapons_size' : weapon['size'],
- 'repeating_weapons_weapspeed' : weapon['speed'],
- 'repeating_weapons_weaptype-slash' : weapon['type'].includes('S') ? 1 : 0,
- 'repeating_weapons_weaptype-pierce': weapon['type'].includes('P') ? 1 : 0,
- 'repeating_weapons_weaptype-blunt' : weapon['type'].includes('B') ? 1 : 0,
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//melee damage autofill
on('change:repeating_weapons-damage:weaponname1', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons-damage_damadj': weapon['bonus'],
+ 'repeating_weapons-damage_damsm': weapon['small-medium'],
+ 'repeating_weapons-damage_daml': weapon['large'],
+ 'repeating_weapons-damage_knockdown1': weapon['knockdown'] || ''
+ };
- let weaponInfo = {
- 'repeating_weapons-damage_damadj' : weapon['bonus'],
- 'repeating_weapons-damage_damsm' : weapon['small-medium'],
- 'repeating_weapons-damage_daml' : weapon['large'],
- 'repeating_weapons-damage_knockdown1': weapon['knockdown'] || ''
+ setAttrs(weaponInfo);
};
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//range hit autofill
on('change:repeating_weapons2:weaponname2', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons2_strbonus2': weapon['strength'] ? 1 : 0,
+ 'repeating_weapons2_attacknum2': weapon['rof'] || '',
+ 'repeating_weapons2_attackadj2': weapon['bonus'],
+ 'repeating_weapons2_range2': weapon['range'] || '',
+ 'repeating_weapons2_size2': weapon['size'],
+ 'repeating_weapons2_weapspeed2': weapon['speed'],
+ 'repeating_weapons2_weaptype-slash2': weapon['type'].includes('S') ? 1 : 0,
+ 'repeating_weapons2_weaptype-pierce2': weapon['type'].includes('P') ? 1 : 0,
+ 'repeating_weapons2_weaptype-blunt2': weapon['type'].includes('B') ? 1 : 0,
+ };
- let weaponInfo = {
- 'repeating_weapons2_strbonus2' : weapon['strength'] ? 1 : 0,
- 'repeating_weapons2_attacknum2' : weapon['rof'] || '',
- 'repeating_weapons2_attackadj2' : weapon['bonus'],
- 'repeating_weapons2_range2' : weapon['range'] || '',
- 'repeating_weapons2_size2' : weapon['size'],
- 'repeating_weapons2_weapspeed2' : weapon['speed'],
- 'repeating_weapons2_weaptype-slash2' : weapon['type'].includes('S') ? 1 : 0,
- 'repeating_weapons2_weaptype-pierce2': weapon['type'].includes('P') ? 1 : 0,
- 'repeating_weapons2_weaptype-blunt2' : weapon['type'].includes('B') ? 1 : 0,
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
+
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//range damage autofill
on('change:repeating_ammo:ammoname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons2_strbonus3': weapon['strength'] ? 1 : 0,
+ 'repeating_ammo_damadj2': weapon['bonus'],
+ 'repeating_ammo_damsm2': weapon['small-medium'],
+ 'repeating_ammo_daml2': weapon['large'],
+ 'repeating_weapons-damage_knockdown2': weapon['knockdown'] || ''
+ };
- let weaponInfo = {
- 'repeating_weapons2_strbonus3' : weapon['strength'] ? 1 : 0,
- 'repeating_ammo_damadj2' : weapon['bonus'],
- 'repeating_ammo_damsm2' : weapon['small-medium'],
- 'repeating_ammo_daml2' : weapon['large'],
- 'repeating_weapons-damage_knockdown2': weapon['knockdown'] || ''
- };
-
- setAttrs(weaponInfo);
+ setAttrs(weaponInfo);
+ }
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
const extractQueryResult = async function(query){//Sends a message to query the user for some behavior, returns the selected option.
@@ -33935,24 +33953,23 @@ function setupFollowerWeaponsAutoFill(repeating, sections) {
sections.forEach(section => {
on(`change:${onChange}weaponnamehench${section}`, function(eventInfo) {
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
-
- let weaponInfo = {
- [`${prefix}attacknumhench${section}`] : weapon['rof'] || '1',
- [`${prefix}attackadjhench${section}`] : weapon['bonus'],
- [`${prefix}damadjhench${section}`] : weapon['bonus'],
- [`${prefix}damsmhench${section}`] : weapon['small-medium'],
- [`${prefix}damlhench${section}`] : weapon['large'],
- [`${prefix}rangehench${section}`] : weapon['range'] || 'Melee',
- [`${prefix}weaptypehench${section}`] : weapon['type'],
- [`${prefix}weapspeedhench${section}`] : weapon['speed'],
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ [`${prefix}attacknumhench${section}`]: weapon['rof'] || '1',
+ [`${prefix}attackadjhench${section}`]: weapon['bonus'],
+ [`${prefix}damadjhench${section}`]: weapon['bonus'],
+ [`${prefix}damsmhench${section}`]: weapon['small-medium'],
+ [`${prefix}damlhench${section}`]: weapon['large'],
+ [`${prefix}rangehench${section}`]: weapon['range'] || 'Melee',
+ [`${prefix}weaptypehench${section}`]: weapon['type'],
+ [`${prefix}weapspeedhench${section}`]: weapon['speed'],
+ };
+
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
- })
- })
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
+ });
+ });
}
const followerWeapons = [
@@ -33976,19 +33993,19 @@ followerWeapons.forEach(fw => {
// Monster weapons
on('change:repeating_monsterweapons:weaponname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue, true);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ [`repeating_monsterweapons_attacknum`]: weapon['rof'] || '1',
+ [`repeating_monsterweapons_ThAC0`]: weapon['thac0'] || '@{monsterthac0}',
+ [`repeating_monsterweapons_damsm`]: weapon['small-medium'],
+ [`repeating_monsterweapons_daml`]: weapon['large'],
+ [`repeating_monsterweapons_weapspeed`]: weapon['speed'],
+ };
- let weaponInfo = {
- [`repeating_monsterweapons_attacknum`] : weapon['rof'] || '1',
- [`repeating_monsterweapons_ThAC0`] : weapon['thac0'] || '@{monsterthac0}',
- [`repeating_monsterweapons_damsm`] : weapon['small-medium'],
- [`repeating_monsterweapons_daml`] : weapon['large'],
- [`repeating_monsterweapons_weapspeed`] : weapon['speed'],
+ setAttrs(weaponInfo);
};
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc, true);
});
//Weapon proficiency slots
diff --git a/ADnD 2E Revised/html/2ESheet-base.html b/ADnD 2E Revised/html/2ESheet-base.html
index b5f4e6faf5..4771fb2533 100644
--- a/ADnD 2E Revised/html/2ESheet-base.html
+++ b/ADnD 2E Revised/html/2ESheet-base.html
@@ -12607,7 +12607,7 @@
The Complete Fighter's Handbook
Weapons
-
+
The Complete Wizard's Handbook
diff --git a/ADnD 2E Revised/javascript/sheetWorkers.js b/ADnD 2E Revised/javascript/sheetWorkers.js
index 4f71abb5f9..5d4926ee8a 100644
--- a/ADnD 2E Revised/javascript/sheetWorkers.js
+++ b/ADnD 2E Revised/javascript/sheetWorkers.js
@@ -1,10 +1,13 @@
// --- ALL SHEET WORKERS START --- //
-const sheetWorker = 'sheetworker';
-const player = 'player';
-const Success = 'success';
-const Info = 'info';
-const Warning = 'warning';
-const Error = 'error';
+const SHEETWORKER = 'sheetworker';
+const PLAYER = 'player';
+
+const SUCCESS = 'success';
+const INFO = 'info';
+const WARNING = 'warning';
+const ERROR = 'error';
+
+const BOOK_FIELDS = ['book-phb', 'book-tcfhb', 'book-tcwhb'];
on('clicked:hide-toast', function(eventInfo) {
setAttrs({
@@ -16,10 +19,10 @@ on('clicked:hide-toast', function(eventInfo) {
function showToast(type, title, message) {
let content
switch (type) {
- case Success: content = 1; break;
- case Info: content = 2; break;
- case Warning: content = 3; break;
- case Error: content = 4; break;
+ case SUCCESS: content = 1; break;
+ case INFO: content = 2; break;
+ case WARNING: content = 3; break;
+ case ERROR: content = 4; break;
}
setAttrs({
['toast']: 1,
@@ -29,6 +32,10 @@ function showToast(type, title, message) {
});
}
+function isBookInactive(books, obj) {
+ return !Object.values(books).includes(obj['book']);
+}
+
const squareBracketsRegex = /18\[([0-9]{1,3})]/; // Ie. 18[65]
const parenthesisRegex = /18\(([0-9]{1,3})\)/; // Ie. 18(65)
//Ability Score Parser function
@@ -532,10 +539,9 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc) {
if (!spell)
return;
- getAttrs(['book-phb', 'book-tcwhb'], function(values) {
- let activeBooks = Object.values(values);
- if (!activeBooks.includes(spell['book'])) {
- showToast(Error, 'Missing Book', `The book *${spell['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`);
+ getAttrs(BOOK_FIELDS, function(books) {
+ if (isBookInactive(books, spell)) {
+ showToast(ERROR, 'Missing Book', `The book *${spell['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`);
return;
}
@@ -683,7 +689,7 @@ function setupAddPriestSpell(postfix) {
let elementalSpheres = parseSpheres(attributes.map(aField => a.S[aField]), elementalRegex);
if (primarySpheres.size < 1) {
- showToast(Warning, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
+ showToast(WARNING, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
return;
}
@@ -696,14 +702,14 @@ function setupAddPriestSpell(postfix) {
console.log(spellsToAdd);
if (spellsToAdd.length < 1) {
- showToast(Error, 'No spells found', `No spells found for the selected spheres`);
+ showToast(ERROR, 'No spells found', `No spells found for the selected spheres`);
return;
}
spellsToAdd = spellsToAdd.filter(spell => !knownSpells.has(spell));
console.log(spellsToAdd);
if (spellsToAdd.length < 1) {
- showToast(Info, 'All spells added', `Found no more spells to add based on spheres`);
+ showToast(INFO, 'All spells added', `Found no more spells to add based on spheres`);
return;
}
@@ -972,124 +978,136 @@ on('change:nonprof-penalty', function (eventInfo) {
});
})
-function getWeaponWithBonus(weaponName, isMonster) {
+function setWeaponWithBonus(weaponName, setWeaponFunc, isMonster) {
if (!weaponName)
- return undefined;
+ return;
weaponName = weaponName.toLowerCase();
- let baseWeapon = weapons[weaponName];
- if (baseWeapon) {
- return {
- ...baseWeapon,
- 'bonus' : '0'
- };
- }
-
- let match = weaponName.match(/\s*\+([0-9])+\s*/);
- if (!match)
- return undefined;
+ getAttrs(BOOK_FIELDS, function(books) {
+ let baseWeapon = weapons[weaponName];
+ if (baseWeapon) {
+ if (isBookInactive(books, baseWeapon)) {
+ showToast(ERROR, 'Missing Book', `The book *${baseWeapon['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`)
+ return;
+ }
- let baseWeaponName = weaponName.replace(match[0], ' ').trim();
- baseWeapon = weapons[baseWeaponName];
- if (!baseWeapon)
- return undefined;
-
- let bonusString = match[1];
- let bonus = parseInt(bonusString)
- if (isNaN(bonus))
- return undefined;
-
- if (bonus < 1)
- return {
+ setWeaponFunc({
+ ...baseWeapon,
+ 'bonus' : '0'
+ });
+ return;
+ }
+
+ let match = weaponName.match(/\s*\+([0-9])+\s*/);
+ if (!match)
+ return;
+
+ let baseWeaponName = weaponName.replace(match[0], ' ').trim();
+ baseWeapon = weapons[baseWeaponName];
+ if (!baseWeapon)
+ return;
+
+ if (isBookInactive(books, baseWeapon)) {
+ showToast(ERROR, 'Missing Book', `The book *${baseWeapon['book']}* is currently not active on your sheet.\nGo to the *Sheet Settings* and activate the book (if your DM allows for its usage)`)
+ return;
+ }
+
+ let bonusString = match[1];
+ let bonus = parseInt(bonusString)
+ if (isNaN(bonus))
+ return;
+
+ if (bonus < 1)
+ setWeaponFunc({
+ ...baseWeapon,
+ 'bonus' : '0'
+ });
+ return;
+
+ let weaponWithBonus = {
...baseWeapon,
- 'bonus' : '0'
- };
-
- let weaponWithBonus = {
- ...baseWeapon,
- 'speed' : Math.max(baseWeapon['speed'] - bonus, 0),
- 'bonus' : `+${bonus}`
- }
- if (isMonster) {
- weaponWithBonus['small-medium'] += `+${bonus}`;
- weaponWithBonus['large'] += `+${bonus}`;
- weaponWithBonus['thac0'] = `@{monsterthac0}-${bonus}`;
- }
-
- return weaponWithBonus;
+ 'speed' : Math.max(baseWeapon['speed'] - bonus, 0),
+ 'bonus' : `+${bonus}`
+ }
+ if (isMonster) {
+ weaponWithBonus['small-medium'] += `+${bonus}`;
+ weaponWithBonus['large'] += `+${bonus}`;
+ weaponWithBonus['thac0'] = `@{monsterthac0}-${bonus}`;
+ }
+
+ setWeaponFunc(weaponWithBonus);
+ });
}
//melee hit autofill
-on('change:repeating_weapons:weaponname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+on('change:repeating_weapons:weaponname', function(eventInfo) {
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons_attackadj' : weapon['bonus'],
+ 'repeating_weapons_range' : 'Melee',
+ 'repeating_weapons_size' : weapon['size'],
+ 'repeating_weapons_weapspeed' : weapon['speed'],
+ 'repeating_weapons_weaptype-slash' : weapon['type'].includes('S') ? 1 : 0,
+ 'repeating_weapons_weaptype-pierce': weapon['type'].includes('P') ? 1 : 0,
+ 'repeating_weapons_weaptype-blunt' : weapon['type'].includes('B') ? 1 : 0,
+ };
- let weaponInfo = {
- 'repeating_weapons_attackadj' : weapon['bonus'],
- 'repeating_weapons_range' : 'Melee',
- 'repeating_weapons_size' : weapon['size'],
- 'repeating_weapons_weapspeed' : weapon['speed'],
- 'repeating_weapons_weaptype-slash' : weapon['type'].includes('S') ? 1 : 0,
- 'repeating_weapons_weaptype-pierce': weapon['type'].includes('P') ? 1 : 0,
- 'repeating_weapons_weaptype-blunt' : weapon['type'].includes('B') ? 1 : 0,
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//melee damage autofill
on('change:repeating_weapons-damage:weaponname1', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons-damage_damadj': weapon['bonus'],
+ 'repeating_weapons-damage_damsm': weapon['small-medium'],
+ 'repeating_weapons-damage_daml': weapon['large'],
+ 'repeating_weapons-damage_knockdown1': weapon['knockdown'] || ''
+ };
- let weaponInfo = {
- 'repeating_weapons-damage_damadj' : weapon['bonus'],
- 'repeating_weapons-damage_damsm' : weapon['small-medium'],
- 'repeating_weapons-damage_daml' : weapon['large'],
- 'repeating_weapons-damage_knockdown1': weapon['knockdown'] || ''
+ setAttrs(weaponInfo);
};
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//range hit autofill
on('change:repeating_weapons2:weaponname2', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons2_strbonus2': weapon['strength'] ? 1 : 0,
+ 'repeating_weapons2_attacknum2': weapon['rof'] || '',
+ 'repeating_weapons2_attackadj2': weapon['bonus'],
+ 'repeating_weapons2_range2': weapon['range'] || '',
+ 'repeating_weapons2_size2': weapon['size'],
+ 'repeating_weapons2_weapspeed2': weapon['speed'],
+ 'repeating_weapons2_weaptype-slash2': weapon['type'].includes('S') ? 1 : 0,
+ 'repeating_weapons2_weaptype-pierce2': weapon['type'].includes('P') ? 1 : 0,
+ 'repeating_weapons2_weaptype-blunt2': weapon['type'].includes('B') ? 1 : 0,
+ };
- let weaponInfo = {
- 'repeating_weapons2_strbonus2' : weapon['strength'] ? 1 : 0,
- 'repeating_weapons2_attacknum2' : weapon['rof'] || '',
- 'repeating_weapons2_attackadj2' : weapon['bonus'],
- 'repeating_weapons2_range2' : weapon['range'] || '',
- 'repeating_weapons2_size2' : weapon['size'],
- 'repeating_weapons2_weapspeed2' : weapon['speed'],
- 'repeating_weapons2_weaptype-slash2' : weapon['type'].includes('S') ? 1 : 0,
- 'repeating_weapons2_weaptype-pierce2': weapon['type'].includes('P') ? 1 : 0,
- 'repeating_weapons2_weaptype-blunt2' : weapon['type'].includes('B') ? 1 : 0,
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
+
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
//range damage autofill
on('change:repeating_ammo:ammoname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ 'repeating_weapons2_strbonus3': weapon['strength'] ? 1 : 0,
+ 'repeating_ammo_damadj2': weapon['bonus'],
+ 'repeating_ammo_damsm2': weapon['small-medium'],
+ 'repeating_ammo_daml2': weapon['large'],
+ 'repeating_weapons-damage_knockdown2': weapon['knockdown'] || ''
+ };
- let weaponInfo = {
- 'repeating_weapons2_strbonus3' : weapon['strength'] ? 1 : 0,
- 'repeating_ammo_damadj2' : weapon['bonus'],
- 'repeating_ammo_damsm2' : weapon['small-medium'],
- 'repeating_ammo_daml2' : weapon['large'],
- 'repeating_weapons-damage_knockdown2': weapon['knockdown'] || ''
- };
-
- setAttrs(weaponInfo);
+ setAttrs(weaponInfo);
+ }
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
});
const extractQueryResult = async function(query){//Sends a message to query the user for some behavior, returns the selected option.
@@ -1162,24 +1180,23 @@ function setupFollowerWeaponsAutoFill(repeating, sections) {
sections.forEach(section => {
on(`change:${onChange}weaponnamehench${section}`, function(eventInfo) {
- let weapon = getWeaponWithBonus(eventInfo.newValue);
- if (weapon === undefined)
- return;
-
- let weaponInfo = {
- [`${prefix}attacknumhench${section}`] : weapon['rof'] || '1',
- [`${prefix}attackadjhench${section}`] : weapon['bonus'],
- [`${prefix}damadjhench${section}`] : weapon['bonus'],
- [`${prefix}damsmhench${section}`] : weapon['small-medium'],
- [`${prefix}damlhench${section}`] : weapon['large'],
- [`${prefix}rangehench${section}`] : weapon['range'] || 'Melee',
- [`${prefix}weaptypehench${section}`] : weapon['type'],
- [`${prefix}weapspeedhench${section}`] : weapon['speed'],
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ [`${prefix}attacknumhench${section}`]: weapon['rof'] || '1',
+ [`${prefix}attackadjhench${section}`]: weapon['bonus'],
+ [`${prefix}damadjhench${section}`]: weapon['bonus'],
+ [`${prefix}damsmhench${section}`]: weapon['small-medium'],
+ [`${prefix}damlhench${section}`]: weapon['large'],
+ [`${prefix}rangehench${section}`]: weapon['range'] || 'Melee',
+ [`${prefix}weaptypehench${section}`]: weapon['type'],
+ [`${prefix}weapspeedhench${section}`]: weapon['speed'],
+ };
+
+ setAttrs(weaponInfo);
};
-
- setAttrs(weaponInfo);
- })
- })
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc);
+ });
+ });
}
const followerWeapons = [
@@ -1203,19 +1220,19 @@ followerWeapons.forEach(fw => {
// Monster weapons
on('change:repeating_monsterweapons:weaponname', function(eventInfo){
- let weapon = getWeaponWithBonus(eventInfo.newValue, true);
- if (weapon === undefined)
- return;
+ let setWeaponFunc = function (weapon) {
+ let weaponInfo = {
+ [`repeating_monsterweapons_attacknum`]: weapon['rof'] || '1',
+ [`repeating_monsterweapons_ThAC0`]: weapon['thac0'] || '@{monsterthac0}',
+ [`repeating_monsterweapons_damsm`]: weapon['small-medium'],
+ [`repeating_monsterweapons_daml`]: weapon['large'],
+ [`repeating_monsterweapons_weapspeed`]: weapon['speed'],
+ };
- let weaponInfo = {
- [`repeating_monsterweapons_attacknum`] : weapon['rof'] || '1',
- [`repeating_monsterweapons_ThAC0`] : weapon['thac0'] || '@{monsterthac0}',
- [`repeating_monsterweapons_damsm`] : weapon['small-medium'],
- [`repeating_monsterweapons_daml`] : weapon['large'],
- [`repeating_monsterweapons_weapspeed`] : weapon['speed'],
+ setAttrs(weaponInfo);
};
- setAttrs(weaponInfo);
+ setWeaponWithBonus(eventInfo.newValue, setWeaponFunc, true);
});
//Weapon proficiency slots