@@ -114,14 +114,17 @@ API_Meta.AttackMaster={offset:Number.MAX_SAFE_INTEGER,lineCount:-1};
114114 * v5.0.4 26/09/2025 Fixed ranged two weapon penalty to be a penalty rather than a benefit!
115115 * Fixed scanForModifiers() priority selection and added saves as a new possible
116116 * priority.
117+ * v5.0.5 14/10/2025 Fixed the error introduced to scanForModifiers() by 5.0.4! Fixed AC calc on
118+ * changing player page and/or dropping token on map. Fixed crash if !attk called
119+ * without a command or parameters.
117120 */
118121
119122var attackMaster = ( function ( ) { // eslint-disable-line no-unused-vars
120123 'use strict' ;
121- var version = '5.0.4 ' ,
124+ var version = '5.0.5 ' ,
122125 author = 'Richard @ Damery' ,
123126 pending = null ;
124- const lastUpdate = 1758783460 ;
127+ const lastUpdate = 1760686967 ;
125128
126129 /*
127130 * Define redirections for functions moved to the RPGMaster library
@@ -262,7 +265,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
262265 version :4.04 ,
263266 avatar :'https://s3.amazonaws.com/files.d20.io/images/257656656/ckSHhNht7v3u60CRKonRTg/thumb.png?1638050703' ,
264267 bio :'<div style="font-weight: bold; text-align: center; border-bottom: 2px solid black;">'
265- + '<span style="font-weight: bold; font-size: 125%">AttackMaster Help v4.03 </span>'
268+ + '<span style="font-weight: bold; font-size: 125%">AttackMaster Help v4.04 </span>'
266269 + '</div>'
267270 + '<div style="padding-left: 5px; padding-right: 5px; overflow: hidden;">'
268271 + '<h1>Attack Master API v' + version + '</h1>'
@@ -2224,8 +2227,6 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
22242227 isInnate = wt . includes ( 'innate' ) ,
22252228 isType = isInnate , isSuperType = false , isSameName = false , isSpecialist = false , isMastery = false ;
22262229
2227- // isType = isSuperType = isSameName = isSpecialist = isMastery = false;
2228-
22292230 if ( classObjs [ 0 ] . base === 'creature' ) return 0 ;
22302231
22312232 if ( allowedWeap ) {
@@ -2912,7 +2913,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
29122913 adj = ( parseInt ( thisData . adj || 0 ) + ( dmgType !== 'nadj' ? parseInt ( thisData [ dmgType ] || 0 ) : 0 ) ) ,
29132914 dexAdj = Math . floor ( dexBonus * parseFloat ( Math . max ( thisData . dexBonus , 0 ) ) ) ,
29142915 curDexAdj = Math . floor ( dexBonus * parseFloat ( Math . max ( curBest . data . dexBonus , 0 ) ) ) ,
2915- acDiff = ( ( curBest . data . ac || 0 ) - ( curBest . data . adj || 0 ) - ( curDexAdj * dexBonus ) ) - ( ac - adj - dexAdj ) ;
2916+ acDiff = ( ( curBest . data . ac || 0 ) - ( curBest . data . adj || 0 ) - curDexAdj ) - ( ac - adj - dexAdj ) ;
29162917 let diff ;
29172918
29182919 switch ( priority ) {
@@ -3530,8 +3531,6 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
35303531 attkMacro = '' ,
35313532 attkMacroDef , dmgMacroDef , qualifier , arTable ;
35323533
3533- // log('buildMWattkMacros: weapon '+weaponName+' dancing = '+dancing+', proficiency = '+proficiency);
3534-
35353534 var parseMWattkMacro = function ( args , charCS , attkType , macro ) {
35363535
35373536 var attkAdvantage = ( attrLookup ( charCS , [ fields . Magical_advantages [ 0 ] + tokenID , fields . Magical_advantages [ 1 ] ] ) + '/////' ) . split ( '/' ) [ 0 ] ,
@@ -7177,7 +7176,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
71777176 * of rounds or HP damage taken).
71787177 */
71797178
7180- async function doCheckMods ( args , senderId , selected , silent = false ) {
7179+ async function doCheckMods ( args , senderId , selected , silent = false , forceMod = false ) {
71817180
71827181 try {
71837182 if ( ! args ) args = [ ] ;
@@ -7231,7 +7230,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
72317230 let newThac0 = ( baseThac0 - thac0Mod ) ;
72327231// log('doCheckMods: baseThac0 = '+handleGetBaseThac0(charCS)+', thac0Mod = '+thac0Mod+', newThac0 = '+newThac0+', currentThac0 = '+currentThac0+', currentMod = '+currentThac0Mod+', attrName = '+currentThac0Field.name+', barName = '+currentThac0Field.barName);
72337232 if ( currentThac0Field . name && currentThac0Field . barName . startsWith ( 'bar' ) ) {
7234- if ( ( baseThac0 - currentThac0Mod ) === currentThac0 ) {
7233+ if ( ( baseThac0 - currentThac0Mod ) === currentThac0 || forceMod ) {
72357234 curToken . set ( ( currentThac0Field . barName + '_value' ) , newThac0 ) ;
72367235 curToken . set ( ( currentThac0Field . barName + '_max' ) , '' ) ;
72377236 } else if ( newThac0 !== currentThac0 ) {
@@ -7267,7 +7266,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
72677266 * if the two are different turn on the AC bar to indicate difference
72687267 */
72697268
7270- async function doCheckAC ( args , senderId , selected , silent = false ) {
7269+ async function doCheckAC ( args , senderId , selected , silent = false , forceAC = false ) {
72717270
72727271 try {
72737272 if ( ! args ) args = [ ] ;
@@ -7408,15 +7407,31 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
74087407 currentAC = getTokenValue ( curToken , fields . Token_AC , fields . AC , fields . MonsterAC , fields . Thac0_base ) ;
74097408// log('doCheckAC: baseAC('+baseAC+')-dmgAdj.armoured.adj('+dmgAdj.armoured.adj+')-dexBonus('+dexBonus+')-styleBonus('+styleBonus+') = '+ac);
74107409// log('doCheckAC: currentAC.val = '+currentAC.val+', newAC = '+newAC+', prevAC = '+prevAC+', so val changed to '+((isNaN(currentAC.val) || newAC) ? ac : (currentAC.val + ac - prevAC)));
7411- currentAC . val = ( ( isNaN ( currentAC . val ) || newAC ) ? ac : ( currentAC . val + ac - prevAC ) ) ;
7410+ // currentAC.val = ((isNaN(currentAC.val) || newAC) ? ac : (currentAC.val + ac - prevAC));
7411+ // if (currentAC.barName.startsWith('bar')) {
7412+ // if (currentAC.val != ac ) {
7413+ // curToken.set(currentAC.barName+'_max',ac);
7414+ // } else {
7415+ // curToken.set(currentAC.barName+'_max','');
7416+ // }
7417+ // curToken.set(currentAC.barName+'_value',currentAC.val);
7418+ // }
7419+
74127420 if ( currentAC . barName . startsWith ( 'bar' ) ) {
7413- if ( currentAC . val != ac ) {
7414- curToken . set ( currentAC . barName + '_max' , ac ) ;
7415- } else {
7421+ prevAC = isNaN ( prevAC ) ? 10 : prevAC ;
7422+ if ( prevAC == currentAC . val || forceAC ) {
7423+ curToken . set ( currentAC . barName + '_value' , ac ) ;
74167424 curToken . set ( currentAC . barName + '_max' , '' ) ;
7417- }
7418- curToken . set ( currentAC . barName + '_value' , currentAC . val ) ;
7419- }
7425+ } else {
7426+ currentAC . val = ( ( isNaN ( currentAC . val ) ) ? ac : ( currentAC . val + ac - prevAC ) ) ;
7427+ if ( currentAC . val != ac ) {
7428+ curToken . set ( currentAC . barName + '_max' , ac ) ;
7429+ } else {
7430+ curToken . set ( currentAC . barName + '_max' , '' ) ;
7431+ }
7432+ curToken . set ( currentAC . barName + '_value' , currentAC . val ) ;
7433+ } ;
7434+ } ;
74207435
74217436 setAttr ( charCS , fields . StdAC , ( ac + dmgAdj . armoured [ dmgType ] - dmgAdj . armoured . nadj ) ) ;
74227437 setAttr ( charCS , fields . SlashAC , ( ac + dmgAdj . armoured [ dmgType ] - dmgAdj . armoured . sadj ) ) ;
@@ -8663,7 +8678,7 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
86638678 } else {
86648679 sendDebug ( 'senderId is defined as ' + getObj ( 'player' , senderId ) . get ( '_displayname' ) ) ;
86658680 } ;
8666- if ( ! flags . noWaitMsg && ! args [ 0 ] . toLowerCase ( ) . startsWith ( 'nowaitmsg' ) ) sendWait ( senderId , 1 , 'attkMaster' ) ;
8681+ if ( ! flags . noWaitMsg && args [ 0 ] && ! args [ 0 ] . toLowerCase ( ) . startsWith ( 'nowaitmsg' ) ) sendWait ( senderId , 1 , 'attkMaster' ) ;
86678682
86688683 _ . each ( args , function ( e ) {
86698684 setTimeout ( doAttkCmd , ( 1 * t ++ ) , e , selected , senderId , isGM ) ;
@@ -8818,8 +8833,8 @@ var attackMaster = (function() { // eslint-disable-line no-unused-vars
88188833 const defClass = ( classObjs . length == 1 && classObjs [ 0 ] . name == 'creature' && classObjs [ 0 ] . level == 0 ) ;
88198834 if ( ( race && race . length ) || ! defClass ) {
88208835 ModTable = moveMods ( obj , charCS , ModTable ) ;
8821- doCheckAC ( [ obj . id ] , findTheGM ( ) , [ ] , true ) ;
8822- doCheckMods ( [ obj . id , 'quiet' ] , findTheGM ( ) , [ ] , true ) ;
8836+ doCheckAC ( [ obj . id ] , findTheGM ( ) , [ ] , true , true ) ;
8837+ doCheckMods ( [ obj . id , 'quiet' ] , findTheGM ( ) , [ ] , true , true ) ;
88238838 }
88248839 }
88258840 }
0 commit comments