diff --git a/ADnD 2E Revised/2ESheet.html b/ADnD 2E Revised/2ESheet.html index 8606dfd83f..fe661cd6a8 100644 --- a/ADnD 2E Revised/2ESheet.html +++ b/ADnD 2E Revised/2ESheet.html @@ -1738,7 +1738,7 @@ - +

Ammunition

@@ -19598,7 +19598,7 @@ Grenadelike miss for {{computed::grenade}} - scatter diagram + scatter diagram @@ -19615,23 +19615,29 @@ Direct hit:
({{aoe}} feet diameter) {{#^rollBetween() computed::hit 0 0}} - Hit!
{{computed::hitdmg}} + Hit!
{{computed::hitdmg}}! {{/^rollBetween() computed::hit 0 0}} {{#rollBetween() computed::hit 0 0}} - Miss!
({{computed::hitdmg}}) + Miss!
({{computed::hitdmg}}) {{/rollBetween() computed::hit 0 0}} - {{#rollBetween() computed::hit 0 0}} Splash hit:
({{computed::aoe}} feet diameter) - {{#^rollBetween() computed::splash 0 0}} - Hit!
{{computed::splashdmg}} - {{/^rollBetween() computed::splash 0 0}} - {{#rollBetween() computed::splash 0 0}} - Miss!
({{computed::splashdmg}}) - {{/rollBetween() computed::splash 0 0}} + + {{#^rollBetween() computed::hit 0 0}} + Info
{{computed::splashdmg}} + {{/^rollBetween() computed::hit 0 0}} + + + {{#rollBetween() computed::hit 0 0}} + {{#^rollBetween() computed::splash 0 0}} + Hit!
{{computed::splashdmg}}! + {{/^rollBetween() computed::splash 0 0}} + {{#rollBetween() computed::splash 0 0}} + Miss!
({{computed::splashdmg}}) + {{/rollBetween() computed::splash 0 0}} + {{/rollBetween() computed::hit 0 0}} - {{/rollBetween() computed::hit 0 0}} @@ -31112,45 +31118,61 @@ on('change:repeating_ammo:ammoname', function(eventInfo){ setAttrs(weaponInfo); }); +let validGrenade = /1Acid|1Holy water|3Oil (lit)|1Poison|(\d*)#(.*)#(.*)#(.*)/ + on('clicked:grenade-miss', function (eventInfo) { - startRoll('&{template:2Egrenademiss} {{grenade=?{What grenade have been thrown?|Acid,[[1Acid]]|Holy water,[[1Holy water]]|Oil (lit),[[3Oil (lit)]]|Poison,[[1Poison]]}}} {{direction=[[1d10]]}} {{distance=?{How far was it throw?|Short,[[1d6]]|Medium,[[1d10]]|Long,[[2d10]]}}} {{aoe=?{What grenade have been thrown?}}} {{hit=[[0]]}} {{hitdmg=[[0]]}} {{splash=[[0]]}} {{splashdmg=[[0]]}}', function(results) { + startRoll('&{template:2Egrenademiss} {{grenade=[[?{What grenade have been thrown?|Acid,1Acid|Holy water,1Holy water|Oil (lit),3Oil (lit)|Poison,1Poison|Other,?{Area of effect|1}#?{Grenade name}#?{Direct damage|1d6}#?{Splash damage|1d3}}]]}} {{direction=[[1d10]]}} {{distance=?{How far was it throw?|Short,[[1d6]]|Medium,[[1d10]]|Long,[[2d10]]}}} {{aoe=[[?{What grenade have been thrown?}]]}} {{hit=[[0]]}} {{hitdmg=[[0]]}} {{splash=[[0]]}} {{splashdmg=[[0]]}}', function(results) { console.log(results); - let distance = results.results.distance; - let expression = distance.expression; - let displayDistance = ''; - switch (expression) { - case '1d6': displayDistance = 'Short'; break; - case '1d10': displayDistance = 'Medium'; break; - case '2d10': displayDistance = 'Long'; break; - default: displayDistance = 'Invalid'; break; - } - let aoeSplash = results.results.aoe.result+6; - let displayGrenade = results.results.grenade.expression.substring(1); let computedRolls = { - distance: displayDistance, - grenade: displayGrenade, - aoe: aoeSplash, hit: 0, splash: 0 }; + let grenadeExpression = results.results.grenade.expression; + let match = grenadeExpression.match(validGrenade); + console.log(match); + if (!match) { + finishRoll(results.rollId, computedRolls); + return; + } + + switch (grenadeExpression) { + case '1Acid': computedRolls.grenade = 'Acid'; break; + case '1Holy water': computedRolls.grenade = 'Holy water'; break; + case '3Oil (lit)': computedRolls.grenade = 'Oil (lit)'; break; + case '1Poison': computedRolls.grenade = 'Poison'; break; + default: computedRolls.grenade = match[3]; break; + } + + let distance = results.results.distance; + switch (distance.expression) { + case '1d6': computedRolls.distance = 'Short'; break; + case '1d10': computedRolls.distance = 'Medium'; break; + case '2d10': computedRolls.distance = 'Long'; break; + default: computedRolls.distance = 'Invalid'; break; + } + + let hitDiameter = results.results.aoe.result; + let aoeSplash = computedRolls.aoe = hitDiameter+6; // See if monster is within direct hit - if (distance.result < results.results.aoe.result / 2) { + if (distance.result <= hitDiameter / 2) { computedRolls.hit = 1; - } else if (distance.result < aoeSplash / 2) { + } else if (distance.result <= aoeSplash / 2) { let splashDamage; computedRolls.splash = 1; } - switch (displayGrenade) { + switch (grenadeExpression) { case 'Acid': computedRolls.hitdmg = '2d4 Acid damage'; break; case 'Holy water': computedRolls.hitdmg = '1d6+1 damage'; break; case 'Oil (lit)': computedRolls.hitdmg = '2d6/1d6 Fire damage'; break; case 'Poison': computedRolls.hitdmg = 'Special'; break; + default: computedRolls.hitdmg = match[4]; break; } - switch (displayGrenade) { + switch (grenadeExpression) { case 'Acid': computedRolls.splashdmg = '1 Acid damage'; break; case 'Holy water': computedRolls.splashdmg = '2 damage'; break; case 'Oil (lit)': computedRolls.splashdmg = '1d3 Fire damage'; break; case 'Poison': computedRolls.splashdmg = 'Special'; break; + default: computedRolls.splashdmg = match[5]; break; } finishRoll(results.rollId, computedRolls); }); @@ -31447,7 +31469,7 @@ function migrateOtherValuables() { newValue['othervalue'] = total; valuablesFields.forEach(field => { - let oldValue = values[field]; + let oldValue = values[field] || ''; if (oldValue) { if (valuablesString) { valuablesString += '\n\n'; diff --git a/ADnD 2E Revised/2EStyle.css b/ADnD 2E Revised/2EStyle.css index c366cf3b2f..2e956a5f8f 100644 --- a/ADnD 2E Revised/2EStyle.css +++ b/ADnD 2E Revised/2EStyle.css @@ -1262,6 +1262,21 @@ button { margin: 0; } +.sheet-rolltemplate-2Esave td.sheet-save-c5, +.sheet-rolltemplate-2Echeck td.sheet-check-c5, +.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c5 { + background-color: #001BB5; + border: none; + font-size: 12pt; + font-weight: bold; + font-style: italic; + font-family: "verdana", sans-serif; + text-align: center; + color: #ffffff; + padding: 4px; + margin: 0; +} + /*/ Styles for the 2Egrenade Template /*/ .sheet-rolltemplate-2Egrenademiss div.sheet-grenade-head { background: #B7A64E; @@ -1270,6 +1285,9 @@ button { .sheet-rolltemplate-2Egrenademiss .sheet-hit-text { font-size: 10pt; } +.sheet-rolltemplate-2Egrenademiss .sheet-miss-text { + font-size: 8pt; +} /*/ Overwrite inline roll styling /*/ .sheet-rolltemplate-2Egrenademiss .sheet-ignore-inlineroll .inlinerollresult { diff --git a/ADnD 2E Revised/html/2ESheet-base.html b/ADnD 2E Revised/html/2ESheet-base.html index 8a709208e6..01e96d06d9 100644 --- a/ADnD 2E Revised/html/2ESheet-base.html +++ b/ADnD 2E Revised/html/2ESheet-base.html @@ -1738,7 +1738,7 @@ - +

Ammunition

diff --git a/ADnD 2E Revised/html/rolltemplates.html b/ADnD 2E Revised/html/rolltemplates.html index b14fdc5d38..3fd642d7d8 100644 --- a/ADnD 2E Revised/html/rolltemplates.html +++ b/ADnD 2E Revised/html/rolltemplates.html @@ -699,7 +699,7 @@ Grenadelike miss for {{computed::grenade}} - scatter diagram + scatter diagram @@ -716,23 +716,29 @@ Direct hit:
({{aoe}} feet diameter) {{#^rollBetween() computed::hit 0 0}} - Hit!
{{computed::hitdmg}} + Hit!
{{computed::hitdmg}}! {{/^rollBetween() computed::hit 0 0}} {{#rollBetween() computed::hit 0 0}} - Miss!
({{computed::hitdmg}}) + Miss!
({{computed::hitdmg}}) {{/rollBetween() computed::hit 0 0}} - {{#rollBetween() computed::hit 0 0}} Splash hit:
({{computed::aoe}} feet diameter) - {{#^rollBetween() computed::splash 0 0}} - Hit!
{{computed::splashdmg}} - {{/^rollBetween() computed::splash 0 0}} - {{#rollBetween() computed::splash 0 0}} - Miss!
({{computed::splashdmg}}) - {{/rollBetween() computed::splash 0 0}} + + {{#^rollBetween() computed::hit 0 0}} + Info
{{computed::splashdmg}} + {{/^rollBetween() computed::hit 0 0}} + + + {{#rollBetween() computed::hit 0 0}} + {{#^rollBetween() computed::splash 0 0}} + Hit!
{{computed::splashdmg}}! + {{/^rollBetween() computed::splash 0 0}} + {{#rollBetween() computed::splash 0 0}} + Miss!
({{computed::splashdmg}}) + {{/rollBetween() computed::splash 0 0}} + {{/rollBetween() computed::hit 0 0}} - {{/rollBetween() computed::hit 0 0}} diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-1.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-1.png index edde3d2b89..3c0e48d940 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-1.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-1.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-10.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-10.png index 66158bb900..15666b5ea2 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-10.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-10.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-2.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-2.png index c0411415d9..5e0d84e804 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-2.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-2.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-3.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-3.png index 4d5cc928b0..c89ee3c73c 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-3.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-3.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-4.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-4.png index 97f44f9db0..1906ac4439 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-4.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-4.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-5.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-5.png index 94430375e4..18a4016003 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-5.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-5.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-6.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-6.png index 4d2c6df4a8..6853ff5a3a 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-6.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-6.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-7.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-7.png index 93bb3a4e01..f4ffab051c 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-7.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-7.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-8.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-8.png index 66158bb900..d1672b15a2 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-8.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-8.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-9.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-9.png index 66158bb900..b3e5abbfc5 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram-9.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram-9.png differ diff --git a/ADnD 2E Revised/img/rolltemplate/scatter-diagram.png b/ADnD 2E Revised/img/rolltemplate/scatter-diagram.png index 7e86c63811..09581b5f34 100644 Binary files a/ADnD 2E Revised/img/rolltemplate/scatter-diagram.png and b/ADnD 2E Revised/img/rolltemplate/scatter-diagram.png differ diff --git a/ADnD 2E Revised/javascript/sheetWorkers.js b/ADnD 2E Revised/javascript/sheetWorkers.js index 55434b9c62..15a7a6cf85 100644 --- a/ADnD 2E Revised/javascript/sheetWorkers.js +++ b/ADnD 2E Revised/javascript/sheetWorkers.js @@ -1062,45 +1062,61 @@ on('change:repeating_ammo:ammoname', function(eventInfo){ setAttrs(weaponInfo); }); +let validGrenade = /1Acid|1Holy water|3Oil (lit)|1Poison|(\d*)#(.*)#(.*)#(.*)/ + on('clicked:grenade-miss', function (eventInfo) { - startRoll('&{template:2Egrenademiss} {{grenade=?{What grenade have been thrown?|Acid,[[1Acid]]|Holy water,[[1Holy water]]|Oil (lit),[[3Oil (lit)]]|Poison,[[1Poison]]}}} {{direction=[[1d10]]}} {{distance=?{How far was it throw?|Short,[[1d6]]|Medium,[[1d10]]|Long,[[2d10]]}}} {{aoe=?{What grenade have been thrown?}}} {{hit=[[0]]}} {{hitdmg=[[0]]}} {{splash=[[0]]}} {{splashdmg=[[0]]}}', function(results) { + startRoll('&{template:2Egrenademiss} {{grenade=[[?{What grenade have been thrown?|Acid,1Acid|Holy water,1Holy water|Oil (lit),3Oil (lit)|Poison,1Poison|Other,?{Area of effect|1}#?{Grenade name}#?{Direct damage|1d6}#?{Splash damage|1d3}}]]}} {{direction=[[1d10]]}} {{distance=?{How far was it throw?|Short,[[1d6]]|Medium,[[1d10]]|Long,[[2d10]]}}} {{aoe=[[?{What grenade have been thrown?}]]}} {{hit=[[0]]}} {{hitdmg=[[0]]}} {{splash=[[0]]}} {{splashdmg=[[0]]}}', function(results) { console.log(results); - let distance = results.results.distance; - let expression = distance.expression; - let displayDistance = ''; - switch (expression) { - case '1d6': displayDistance = 'Short'; break; - case '1d10': displayDistance = 'Medium'; break; - case '2d10': displayDistance = 'Long'; break; - default: displayDistance = 'Invalid'; break; - } - let aoeSplash = results.results.aoe.result+6; - let displayGrenade = results.results.grenade.expression.substring(1); let computedRolls = { - distance: displayDistance, - grenade: displayGrenade, - aoe: aoeSplash, hit: 0, splash: 0 }; + let grenadeExpression = results.results.grenade.expression; + let match = grenadeExpression.match(validGrenade); + console.log(match); + if (!match) { + finishRoll(results.rollId, computedRolls); + return; + } + + switch (grenadeExpression) { + case '1Acid': computedRolls.grenade = 'Acid'; break; + case '1Holy water': computedRolls.grenade = 'Holy water'; break; + case '3Oil (lit)': computedRolls.grenade = 'Oil (lit)'; break; + case '1Poison': computedRolls.grenade = 'Poison'; break; + default: computedRolls.grenade = match[3]; break; + } + + let distance = results.results.distance; + switch (distance.expression) { + case '1d6': computedRolls.distance = 'Short'; break; + case '1d10': computedRolls.distance = 'Medium'; break; + case '2d10': computedRolls.distance = 'Long'; break; + default: computedRolls.distance = 'Invalid'; break; + } + + let hitDiameter = results.results.aoe.result; + let aoeSplash = computedRolls.aoe = hitDiameter+6; // See if monster is within direct hit - if (distance.result < results.results.aoe.result / 2) { + if (distance.result <= hitDiameter / 2) { computedRolls.hit = 1; - } else if (distance.result < aoeSplash / 2) { + } else if (distance.result <= aoeSplash / 2) { let splashDamage; computedRolls.splash = 1; } - switch (displayGrenade) { + switch (grenadeExpression) { case 'Acid': computedRolls.hitdmg = '2d4 Acid damage'; break; case 'Holy water': computedRolls.hitdmg = '1d6+1 damage'; break; case 'Oil (lit)': computedRolls.hitdmg = '2d6/1d6 Fire damage'; break; case 'Poison': computedRolls.hitdmg = 'Special'; break; + default: computedRolls.hitdmg = match[4]; break; } - switch (displayGrenade) { + switch (grenadeExpression) { case 'Acid': computedRolls.splashdmg = '1 Acid damage'; break; case 'Holy water': computedRolls.splashdmg = '2 damage'; break; case 'Oil (lit)': computedRolls.splashdmg = '1d3 Fire damage'; break; case 'Poison': computedRolls.splashdmg = 'Special'; break; + default: computedRolls.splashdmg = match[5]; break; } finishRoll(results.rollId, computedRolls); }); diff --git a/ADnD 2E Revised/javascript/version.js b/ADnD 2E Revised/javascript/version.js index 15582bed25..5a6e1cedb7 100644 --- a/ADnD 2E Revised/javascript/version.js +++ b/ADnD 2E Revised/javascript/version.js @@ -163,7 +163,7 @@ function migrateOtherValuables() { newValue['othervalue'] = total; valuablesFields.forEach(field => { - let oldValue = values[field]; + let oldValue = values[field] || ''; if (oldValue) { if (valuablesString) { valuablesString += '\n\n';