Of course you may. In fact, I've just been writing a universal ingredient removal script like I was talking about because I realized it was a needed improvement on my own alchemy vendors. Here's the new complete one that you can target on any NPC with an activator. You can straight-up copy/paste this one.
Spoiler Begin ST_Vendor_Ingred_Remove
;global script is targeted to vendor container or NPC in another script
;script cleans out inventory to make room for new randomized stock
;this keeps the restocking scripts from piling on too many ingredients and simulates trade with other NPCs
;removal can be done one at a time because this in conjunction with limits on how much vendors restock should keep the amount of ingredients down to a manageable amount (unlike player alchemy sorters that may be sorting ingredients in the hundreds)
;unique ingredients (especially required for quests) are not removed
If ( MenuMode )
Return
Elseif ( CellChanged )
Return
Endif
If ( GetItemCount food_kwama_egg_01 > 0 )
RemoveItem food_kwama_egg_01 1
Return
Endif
If ( GetItemCount food_kwama_egg_02 > 0 )
RemoveItem food_kwama_egg_02 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_01 > 0 )
RemoveItem ingred_6th_corprusmeat_01 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_02 > 0 )
RemoveItem ingred_6th_corprusmeat_02 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_03 > 0 )
RemoveItem ingred_6th_corprusmeat_03 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_04 > 0 )
RemoveItem ingred_6th_corprusmeat_04 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_05 > 0 )
RemoveItem ingred_6th_corprusmeat_05 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_06 > 0 )
RemoveItem ingred_6th_corprusmeat_06 1
Return
Endif
If ( GetItemCount ingred_6th_corprusmeat_07 > 0 )
RemoveItem ingred_6th_corprusmeat_07 1
Return
Endif
If ( GetItemCount ingred_alit_hide_01 > 0 )
RemoveItem ingred_alit_hide_01 1
Return
Endif
If ( GetItemCount ingred_ash_salts_01 > 0 )
RemoveItem ingred_ash_salts_01 1
Return
Endif
If ( GetItemCount ingred_ash_yam_01 > 0 )
RemoveItem ingred_ash_yam_01 1
Return
Endif
If ( GetItemCount ingred_bc_ampoule_pod > 0 )
RemoveItem ingred_bc_ampoule_pod 1
Return
Endif
If ( GetItemCount "ingred_bc_bungler's_bane" > 0 )
RemoveItem "ingred_bc_bungler's_bane" 1
Return
Endif
If ( GetItemCount ingred_bc_coda_flower > 0 )
RemoveItem ingred_bc_coda_flower 1
Return
Endif
If ( GetItemCount ingred_bc_hypha_facia > 0 )
RemoveItem ingred_bc_hypha_facia 1
Return
Endif
If ( GetItemCount ingred_bc_spore_pod > 0 )
RemoveItem ingred_bc_spore_pod 1
Return
Endif
If ( GetItemCount ingred_bittergreen_petals_01 > 0 )
RemoveItem ingred_bittergreen_petals_01 1
Return
Endif
If ( GetItemCount ingred_black_anther_01 > 0 )
RemoveItem ingred_black_anther_01 1
Return
Endif
If ( GetItemCount ingred_black_lichen_01 > 0 )
RemoveItem ingred_black_lichen_01 1
Return
Endif
If ( GetItemCount ingred_bloat_01 > 0 )
RemoveItem ingred_bloat_01 1
Return
Endif
If ( GetItemCount ingred_bonemeal_01 > 0 )
RemoveItem ingred_bonemeal_01 1
Return
Endif
If ( GetItemCount ingred_bread_01 > 0 )
RemoveItem ingred_bread_01 1
Return
Endif
If ( GetItemCount ingred_chokeweed_01 > 0 )
RemoveItem ingred_chokeweed_01 1
Return
Endif
If ( GetItemCount ingred_comberry_01 > 0 )
RemoveItem ingred_comberry_01 1
Return
Endif
If ( GetItemCount ingred_coprinus_01 > 0 )
RemoveItem ingred_coprinus_01 1
Return
Endif
If ( GetItemCount ingred_corkbulb_root_01 > 0 )
RemoveItem ingred_corkbulb_root_01 1
Return
Endif
If ( GetItemCount ingred_corprus_weepings_01 > 0 )
RemoveItem ingred_corprus_weepings_01 1
Return
Endif
If ( GetItemCount ingred_crab_meat_01 > 0 )
RemoveItem ingred_crab_meat_01 1
Return
Endif
If ( GetItemCount ingred_daedra_skin_01 > 0 )
RemoveItem ingred_daedra_skin_01 1
Return
Endif
If ( GetItemCount ingred_daedras_heart_01 > 0 )
RemoveItem ingred_daedras_heart_01 1
Return
Endif
If ( GetItemCount ingred_diamond_01 > 0 )
RemoveItem ingred_diamond_01 1
Return
Endif
If ( GetItemCount ingred_dreugh_wax_01 > 0 )
RemoveItem ingred_dreugh_wax_01 1
Return
Endif
If ( GetItemCount ingred_ectoplasm_01 > 0 )
RemoveItem ingred_ectoplasm_01 1
Return
Endif
If ( GetItemCount ingred_emerald_01 > 0 )
RemoveItem ingred_emerald_01 1
Return
Endif
If ( GetItemCount ingred_fire_petal_01 > 0 )
RemoveItem ingred_fire_petal_01 1
Return
Endif
If ( GetItemCount ingred_fire_salts_01 > 0 )
RemoveItem ingred_fire_salts_01 1
Return
Endif
If ( GetItemCount ingred_frost_salts_01 > 0 )
RemoveItem ingred_frost_salts_01 1
Return
Endif
If ( GetItemCount ingred_ghoul_heart_01 > 0 )
RemoveItem ingred_ghoul_heart_01 1
Return
Endif
If ( GetItemCount ingred_gold_kanet_01 > 0 )
RemoveItem ingred_gold_kanet_01 1
Return
Endif
If ( GetItemCount ingred_gravedust_01 > 0 )
RemoveItem ingred_gravedust_01 1
Return
Endif
If ( GetItemCount ingred_green_lichen_01 > 0 )
RemoveItem ingred_green_lichen_01 1
Return
Endif
If ( GetItemCount ingred_guar_hide_01 > 0 )
RemoveItem ingred_guar_hide_01 1
Return
Endif
If ( GetItemCount "ingred_hackle-lo_leaf_01" > 0 )
RemoveItem "ingred_hackle-lo_leaf_01" 1
Return
Endif
If ( GetItemCount ingred_heather_01 > 0 )
RemoveItem ingred_heather_01 1
Return
Endif
If ( GetItemCount ingred_hound_meat_01 > 0 )
RemoveItem ingred_hound_meat_01 1
Return
Endif
If ( GetItemCount ingred_human_meat_01 > 0 )
RemoveItem ingred_human_meat_01 1
Return
Endif
If ( GetItemCount ingred_kagouti_hide_01 > 0 )
RemoveItem ingred_kagouti_hide_01 1
Return
Endif
If ( GetItemCount ingred_kresh_fiber_01 > 0 )
RemoveItem ingred_kresh_fiber_01 1
Return
Endif
If ( GetItemCount ingred_kwama_cuttle_01 > 0 )
RemoveItem ingred_kwama_cuttle_01 1
Return
Endif
If ( GetItemCount ingred_marshmerrow_01 > 0 )
RemoveItem ingred_marshmerrow_01 1
Return
Endif
If ( GetItemCount ingred_moon_sugar_01 > 0 )
RemoveItem ingred_moon_sugar_01 1
Return
Endif
If ( GetItemCount ingred_muck_01 > 0 )
RemoveItem ingred_muck_01 1
Return
Endif
If ( GetItemCount ingred_netch_leather_01 > 0 )
RemoveItem ingred_netch_leather_01 1
Return
Endif
If ( GetItemCount ingred_pearl_01 > 0 )
RemoveItem ingred_pearl_01 1
Return
Endif
If ( GetItemCount ingred_racer_plumes_01 > 0 )
RemoveItem ingred_racer_plumes_01 1
Return
Endif
If ( GetItemCount ingred_rat_meat_01 > 0 )
RemoveItem ingred_rat_meat_01 1
Return
Endif
If ( GetItemCount ingred_raw_ebony_01 > 0 )
RemoveItem ingred_raw_ebony_01 1
Return
Endif
If ( GetItemCount ingred_raw_glass_01 > 0 )
RemoveItem ingred_raw_glass_01 1
Return
Endif
If ( GetItemCount ingred_red_lichen_01 > 0 )
RemoveItem ingred_red_lichen_01 1
Return
Endif
If ( GetItemCount ingred_resin_01 > 0 )
RemoveItem ingred_resin_01 1
Return
Endif
If ( GetItemCount ingred_roobrush_01 > 0 )
RemoveItem ingred_roobrush_01 1
Return
Endif
If ( GetItemCount ingred_ruby_01 > 0 )
RemoveItem ingred_ruby_01 1
Return
Endif
If ( GetItemCount ingred_russula_01 > 0 )
RemoveItem ingred_russula_01 1
Return
Endif
If ( GetItemCount ingred_saltrice_01 > 0 )
RemoveItem ingred_saltrice_01 1
Return
Endif
If ( GetItemCount ingred_scales_01 > 0 )
RemoveItem ingred_scales_01 1
Return
Endif
If ( GetItemCount ingred_scamp_skin_01 > 0 )
RemoveItem ingred_scamp_skin_01 1
Return
Endif
If ( GetItemCount ingred_scathecraw_01 > 0 )
RemoveItem ingred_scathecraw_01 1
Return
Endif
If ( GetItemCount ingred_scrap_metal_01 > 0 )
RemoveItem ingred_scrap_metal_01 1
Return
Endif
If ( GetItemCount ingred_scrib_jelly_01 > 0 )
RemoveItem ingred_scrib_jelly_01 1
Return
Endif
If ( GetItemCount ingred_scrib_jerky_01 > 0 )
RemoveItem ingred_scrib_jerky_01 1
Return
Endif
If ( GetItemCount ingred_scuttle_01 > 0 )
RemoveItem ingred_scuttle_01 1
Return
Endif
If ( GetItemCount ingred_shalk_resin_01 > 0 )
RemoveItem ingred_shalk_resin_01 1
Return
Endif
If ( GetItemCount ingred_sload_soap_01 > 0 )
RemoveItem ingred_sload_soap_01 1
Return
Endif
If ( GetItemCount ingred_stoneflower_petals_01 > 0 )
RemoveItem ingred_stoneflower_petals_01 1
Return
Endif
If ( GetItemCount ingred_trama_root_01 > 0 )
RemoveItem ingred_trama_root_01 1
Return
Endif
If ( GetItemCount ingred_vampire_dust_01 > 0 )
RemoveItem ingred_vampire_dust_01 1
Return
Endif
If ( GetItemCount ingred_void_salts_01 > 0 )
RemoveItem ingred_void_salts_01 1
Return
Endif
If ( GetItemCount ingred_wickwheat_01 > 0 )
RemoveItem ingred_wickwheat_01 1
Return
Endif
If ( GetItemCount ingred_willow_anther_01 > 0 )
RemoveItem ingred_willow_anther_01 1
Return
Endif
;Tribunal
If ( GetItemCount ingred_durzog_meat_01 > 0 )
RemoveItem ingred_durzog_meat_01 1
Return
Endif
If ( GetItemCount Ingred_golden_sedge_01 > 0 )
RemoveItem Ingred_golden_sedge_01 1
Return
Endif
If ( GetItemCount Ingred_horn_lily_bulb_01 > 0 )
RemoveItem Ingred_horn_lily_bulb_01 1
Return
Endif
If ( GetItemCount Ingred_lloramor_spines_01 > 0 )
RemoveItem Ingred_lloramor_spines_01 1
Return
Endif
If ( GetItemCount Ingred_meadow_rye_01 > 0 )
RemoveItem Ingred_meadow_rye_01 1
Return
Endif
If ( GetItemCount Ingred_nirthfly_stalks_01 > 0 )
RemoveItem Ingred_nirthfly_stalks_01 1
Return
Endif
If ( GetItemCount Ingred_noble_sedge_01 > 0 )
RemoveItem Ingred_noble_sedge_01 1
Return
Endif
If ( GetItemCount Ingred_scrib_cabbage_01 > 0 )
RemoveItem Ingred_scrib_cabbage_01 1
Return
Endif
If ( GetItemCount Ingred_sweetpulp_01 > 0 )
RemoveItem Ingred_sweetpulp_01 1
Return
Endif
If ( GetItemCount "Ingred_timsa-come-by_01" > 0 )
RemoveItem "Ingred_timsa-come-by_01" 1
Return
Endif
;Bloodmoon
If ( GetItemCount ingred_bear_pelt > 0 )
RemoveItem ingred_bear_pelt 1
Return
Endif
If ( GetItemCount ingred_belladonna_01 > 0 )
RemoveItem ingred_belladonna_01 1
Return
Endif
If ( GetItemCount ingred_belladonna_02 > 0 )
RemoveItem ingred_belladonna_02 1
Return
Endif
If ( GetItemCount ingred_boar_leather > 0 )
RemoveItem ingred_boar_leather 1
Return
Endif
If ( GetItemCount ingred_eyeball > 0 )
RemoveItem ingred_eyeball 1
Return
Endif
If ( GetItemCount ingred_heartwood_01 > 0 )
RemoveItem ingred_heartwood_01 1
Return
Endif
If ( GetItemCount ingred_holly_01 > 0 )
RemoveItem ingred_holly_01 1
Return
Endif
If ( GetItemCount ingred_horker_tusk_01 > 0 )
RemoveItem ingred_horker_tusk_01 1
Return
Endif
If ( GetItemCount ingred_wolf_pelt > 0 )
RemoveItem ingred_wolf_pelt 1
Return
Endif
If ( GetItemCount ingred_wolfsbane_01 > 0 )
RemoveItem ingred_wolfsbane_01 1
Return
Endif
StopScript ST_Vendor_Ingred_Remove
End
And I started a second one for ingredients native to the mod I'm putting it in. This is just and example, has all the Srikandy ingredients plus a few added by UL:
Spoiler Begin ST_Vendor_Ingred_Remove_Uvi
;global script is targeted to vendor container or NPC in another script
;script cleans out inventory to make room for new randomized stock
;this keeps the restocking scripts from piling on too many ingredients and simulates trade with other NPCs
;removal can be done one at a time because this in conjunction with limits on how much vendors restock should keep the amount of ingredients down to a manageable amount (unlike player alchemy sorters that may be sorting ingredients in the hundreds)
;unique ingredients (especially required for quests) are not removed
;removes ingredients native to UL
;each mod will have to adapt to whatever ingredients it adds
If ( MenuMode )
Return
Elseif ( CellChanged )
Return
Elseif ( ScriptRunning ST_Vendor_Ingred_Remove )
;wait for base-game ingredient removal script to complete first
Return
Endif
;Sri's Alchemy
If ( GetItemCount ingred_ash_proboscis_SA > 0 )
RemoveItem ingred_ash_proboscis_SA 1
Return
Endif
If ( GetItemCount ingred_amethyst_SA > 0 )
RemoveItem ingred_amethyst_SA 1
Return
Endif
If ( GetItemCount ingred_bear_fat_SA > 0 )
RemoveItem ingred_bear_fat_SA 1
Return
Endif
If ( GetItemCount ingred_bear_meat_SA > 0 )
RemoveItem ingred_bear_meat_SA 1
Return
Endif
If ( GetItemCount ingred_clannfear_scales_SA > 0 )
RemoveItem ingred_clannfear_scales_SA 1
Return
Endif
If ( GetItemCount ingred_daedroth_claw_SA > 0 )
RemoveItem ingred_daedroth_claw_SA 1
Return
Endif
If ( GetItemCount ingred_dunmer_bone_SA > 0 )
RemoveItem ingred_dunmer_bone_SA 1
Return
Endif
If ( GetItemCount ingred_dwemer_grease_SA > 0 )
RemoveItem ingred_dwemer_grease_SA 1
Return
Endif
If ( GetItemCount ingred_dwemer_pipe_SA > 0 )
RemoveItem ingred_dwemer_pipe_SA 1
Return
Endif
If ( GetItemCount ingred_feather_SA > 0 )
RemoveItem ingred_feather_SA 1
Return
Endif
If ( GetItemCount ingred_fishbone_SA > 0 )
RemoveItem ingred_fishbone_SA 1
Return
Endif
If ( GetItemCount ingred_goldnugget_SA > 0 )
RemoveItem ingred_goldnugget_SA 1
Return
Endif
If ( GetItemCount ingred_hunger_tongue_SA > 0 )
RemoveItem ingred_hunger_tongue_SA 1
Return
Endif
If ( GetItemCount ingred_lich_dust_SA > 0 )
RemoveItem ingred_lich_dust_SA 1
Return
Endif
If ( GetItemCount ingred_ogrim_flesh_SA > 0 )
RemoveItem ingred_ogrim_flesh_SA 1
Return
Endif
If ( GetItemCount ingred_opal_SA > 0 )
RemoveItem ingred_opal_SA 1
Return
Endif
If ( GetItemCount ingred_salt_fish_SA > 0 )
RemoveItem ingred_salt_fish_SA 1
Return
Endif
If ( GetItemCount ingred_sapphire_SA > 0 )
RemoveItem ingred_sapphire_SA 1
Return
Endif
If ( GetItemCount ingred_wolf_meat_SA > 0 )
RemoveItem ingred_wolf_meat_SA 1
Return
Endif
If ( GetItemCount ingred_wolf_ribs_SA > 0 )
RemoveItem ingred_wolf_ribs_SA 1
Return
Endif
;Other non-standard ingredients
If ( GetItemCount ingred_coal_01 > 0 )
RemoveItem ingred_coal_01 1
Return
Endif
If ( GetItemCount ingred_kelp_01 > 0 )
RemoveItem ingred_kelp_01 1
Return
Endif
If ( GetItemCount ingred_kollop_meat_01 > 0 )
RemoveItem ingred_kollop_meat_01 1
Return
Endif
If ( GetItemCount ingred_scales_albino > 0 )
RemoveItem ingred_scales_albino 1
Return
Endif
StopScript ST_Vendor_Ingred_Remove_Uvi
End
And I'm going to test this MWSE removal script, designed to completely replace the others -- it removes any and all ingredients. Most of it is tried and true scripting, but I usually have a set ref and this time I'm relying on it being a targeted script. I'll report back if it's a success:
Spoiler Begin ST_Vendor_Ingred_Remove_MWSE
;global script MUST BE targeted to vendor container or NPC in another script
;script cleans out inventory to make room for new randomized stock
;this keeps the restocking scripts from piling on too many ingredients and simulates trade with other NPCs
;removal can be done one at a time because this in conjunction with limits on how much vendors restock should keep the amount of ingredients down to a manageable amount (unlike player alchemy sorters that may be sorting ingredients in the hundreds)
;unique ingredients ARE REMOVED, so don't sell quest items
;really longs
Long count ;item count
Long objtype ;object type
Long l1 ;temp/junk
;strings
Long filename
Long objid ;object ID for inventory items
;refs
Long invref ;inventory items reference
Float f1 ;junk var
If ( MenuMode )
Return
Elseif ( CellChanged )
Return
Endif
setx filename to xStringBuild "STIngredRemoval" ;sets the filename variable to this string
xFileRewind filename
;find out what ingredients have to be moved
;write it all to a file so we can move them all at once
setx objid count objtype l1 f1 l1 invref to xContentList 0 ;gets the first item in inventory
whilex ( objid )
set l1 to ( objtype - 1380404809 ) ;ingredient
ifx ( l1 ) ;it's not an ingredient
else
xFileWriteString filename objid
xFileWriteLong filename count
endif
ifx ( invref )
setx objid count objtype l1 f1 l1 invref to xContentList invref ;move on to the next item
else
Set objid to 0 ;exit loop
endif
endwhile
xFileWriteString filename "null" ;in case there aren't any ingredients in inventory
;now we read the file back and do the actual removing
;xStringCompare will return 0 if the strings are the same
;so use this to check when we've got to the end
xFileRewind filename
setx objid to xFileReadString filename
setx l1 count to xFileReadLong filename 1
setx l1 to xStringCompare objid "null" ;check here too, in case there weren't any
whilex ( l1 )
xRemoveItem objid count
setx objid to xFileReadString filename
setx l1 count to xFileReadLong filename 1
setx l1 to xStringCompare objid "null"
endwhile
StopScript ST_Vendor_Ingred_Remove_MWSE
End
As for the script that restocks the ingredients, those need to be tailored to each vendor to make it nice and detailed and realistic. I'm currently working on a few vendors that only sell herbs grown in the area or certain staple foods, so I might post some more examples you can adapt later.