@@ -214,19 +214,67 @@ export class FUActor extends Actor {
214214
215215 * allApplicableEffects ( ) {
216216 for ( const effect of super . allApplicableEffects ( ) ) {
217- const applicableTypes = [ 'armor' , 'shield' , 'weapon' , 'accessory' ] ;
218- if ( effect . parent instanceof FUItem ) {
219- const itemId = effect . parent . id ;
220- const itemType = effect . parent . type ;
217+ const applicableTypes = [ 'armor' , 'shield' , 'weapon' , 'accessory' , 'classFeature' ] ;
218+ const vehicleTypes = [ 'projectfu.vehicle' , 'projectfu.supportModule' , 'projectfu.weaponModule' , 'projectfu.armorModule' ] ;
219+ const arcanumTypes = [ 'projectfu.arcanum' , 'projectfu-playtest.arcanum2' ] ;
220+ const item = effect . parent ;
221+
222+ if ( item instanceof FUItem ) {
223+ const itemId = item . id ;
224+ const itemType = item . type ;
225+ const featureType = item . system . featureType ;
226+ const actor = item . actor ;
221227
222228 // Check if the item is one of the applicable types
223- if ( applicableTypes . includes ( itemType ) ) {
229+ if ( ! applicableTypes . includes ( itemType ) ) continue ;
230+
231+ // Handle weapons and shields if weapons modules are active
232+ if ( ( itemType === 'weapon' || itemType === 'shield' ) && actor ?. system . vehicle ?. weaponsActive ) {
233+ continue ;
234+ }
235+
236+ // Handle armor if armor modules are active
237+ if ( itemType === 'armor' && actor ?. system . vehicle ?. armorActive ) {
238+ continue ;
239+ }
240+
241+ // Handle class features based on vehicle configuration
242+ if ( itemType === 'classFeature' && vehicleTypes . includes ( featureType ) ) {
243+ const vehicle = actor ?. system ?. vehicle ;
244+ const isEmbarked = vehicle ?. embarked ;
245+ let itemExistsInVehicle = false ;
246+
247+ if ( featureType === 'projectfu.supportModule' && Array . isArray ( vehicle ?. supports ) ) {
248+ itemExistsInVehicle = vehicle . supports . some ( ( support ) => support . id === itemId ) ;
249+ } else if ( featureType === 'projectfu.weaponModule' && Array . isArray ( vehicle ?. weapons ) ) {
250+ itemExistsInVehicle = vehicle . weapons . some ( ( weapon ) => weapon . id === itemId ) ;
251+ } else if ( featureType === 'projectfu.armorModule' ) {
252+ itemExistsInVehicle = vehicle ?. armor ?. id === itemId ;
253+ } else if ( featureType === 'projectfu.vehicle' ) {
254+ itemExistsInVehicle = vehicle ?. vehicle ?. id === itemId ;
255+ }
256+
257+ // Continue to the next effect if the item shouldn't transfer its effects
258+ if ( ! isEmbarked || ! itemExistsInVehicle || ( item . transferEffects && ! item . transferEffects ( ) ) ) {
259+ // console.log('Skipping effect due to non-embarked status or item not being part of vehicle.');
260+ continue ;
261+ }
262+ } else if ( itemType === 'classFeature' && arcanumTypes . includes ( featureType ) ) {
263+ const currentArcanumId = actor ?. system . equipped ?. arcanum ;
264+
265+ // Check if the item is the currently active arcanum
266+ if ( itemId !== currentArcanumId ) {
267+ continue ;
268+ }
269+ } else {
270+ // Handle regular items using the equipped data model
224271 const equipData = this . system . equipped ;
225272 if ( ! equipData . transferEffects ( itemId ) ) {
226273 continue ;
227274 }
228275 }
229276 }
277+ // Yield effect if it passes all checks
230278 yield effect ;
231279 }
232280 }
0 commit comments