@@ -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