@@ -110,22 +110,21 @@ function activateListeners(document, html) {
110110 }
111111
112112 html . find ( 'a.inline.inline-effect[draggable]' )
113- . on ( 'click' , async function ( ) {
113+ . on ( 'click' , async function ( event ) {
114114 const source = determineSource ( document , this ) ;
115115 const effectData = fromBase64 ( this . dataset . effect ) ;
116116 const status = this . dataset . status ;
117- let targets = await targetHandler ( ) ;
118- if ( targets . length > 0 ) {
117+ const isCtrlClick = event . ctrlKey ;
118+
119+ const targets = await targetHandler ( ) ;
120+ if ( ! targets . length ) return ;
121+ targets . forEach ( ( actor ) => {
119122 if ( effectData ) {
120- targets . forEach ( ( actor ) => onApplyEffectToActor ( actor , source , effectData ) ) ;
123+ isCtrlClick ? onRemoveEffectFromActor ( actor , source , effectData ) : onApplyEffectToActor ( actor , source , effectData ) ;
121124 } else if ( status ) {
122- targets . forEach ( ( actor ) => {
123- if ( ! actor . statuses . has ( status ) ) {
124- toggleStatusEffect ( actor , status , source ) ;
125- }
126- } ) ;
125+ isCtrlClick ? toggleStatusEffect ( actor , status , source , { disable : true } ) : ! actor . statuses . has ( status ) && toggleStatusEffect ( actor , status , source ) ;
127126 }
128- }
127+ } ) ;
129128 } )
130129 . on ( 'dragstart' , function ( event ) {
131130 /** @type DragEvent */
@@ -175,6 +174,25 @@ function activateListeners(document, html) {
175174 } ) ;
176175}
177176
177+ function onRemoveEffectFromActor ( actor , source , effect ) {
178+ if ( ! actor ) return ;
179+
180+ const existingEffect = actor . effects . find (
181+ ( e ) =>
182+ e . getFlag ( SYSTEM , FUActiveEffect . TEMPORARY_FLAG ) &&
183+ e . origin === source &&
184+ e . changes . length === effect . changes . length &&
185+ e . changes . every ( ( change , index ) => change . key === effect . changes [ index ] . key && change . mode === effect . changes [ index ] . mode && change . value === effect . changes [ index ] . value ) ,
186+ ) ;
187+
188+ if ( existingEffect ) {
189+ console . log ( `Removing effect: ${ existingEffect . name } ` ) ;
190+ existingEffect . delete ( ) ;
191+ } else {
192+ console . log ( 'No matching effect found to remove.' ) ;
193+ }
194+ }
195+
178196function onApplyEffectToActor ( actor , source , effect ) {
179197 if ( actor ) {
180198 ActiveEffect . create (
0 commit comments