# lib_3p function library

Dependencies: alter_effect, ds, lib_2da, lib_2daq, lib_anon, lib_array, lib_class, lib_cre, lib_data, lib_eff, lib_fn, lib_ids, lib_ietool, lib_ini, lib_kit, lib_script, lib_sfo, lib_spl, lib_splconv, lib_ssl, lib_struct, lib_sugar, lib_tools, lib_ui, lib_vtable, resolve_spell, ui_add_subraces, ui_bonus_spells, ui_deolvynize, ui_detect_class_kit, ui_dual_class_kits, ui_externalize_hlas, ui_externalize_proficiencies, ui_extra_spells, ui_on_open, ui_shared_code, ui_spell_system, ui_spell_system_spheres, ui_system_call, ui_virtual_class

## Description

Functions in this library are used to save and load third-party data, to be used by SFO mods to tweak their own installation.

## Public functions

3p_kit()=() action

Goes through the array 'sfo_3p_kit', and for each cre=>kit assigns the kit 'kit' (from kit.ids), if it exists, to the cre file 'cre'.cre

The kit is not enforced but can be picked up by other mods (e.g. SCS) and will apply normally to joinables.

3p_kit_bonus_spells()=() action

Goes through the array 'sfo_3p_kit_spheres', and for each kit=>spheres assigns those spheres to the kit. Input can be either, (i) a comma-separated list of spheres (ii) a comma-separated list of spheres prepended by + or -.

In case (ii), the list is applied as modifiers to the class default.

3p_kit_sphere()=() action

Goes through the array 'sfo_3p_kit', and for each (kit,'spheres')=>spheres assigns those spheres to the kit. Input can be either, (i) a comma-separated list of spheres (ii) a comma-separated list of spheres prepended by + or -.

In case (ii), the list is applied as modifiers to the class default.

3p_load_data action_macro

Loads all the inis in the folders 'MOD_FOLDER/%sfo_3p_folder_internal%' (by default 'MOD_FOLDER/3p') and 'weidu_external/data/dw_shared/%sfo_3p_folder%' (by default weidu_external/data/dw_shared/MOD_FOLDER3p), with the latter overriding the former. Returns them as a series of arrays, labelled by ini sections - so all the entries in [sphere], across all the inis, get returned in $sfo_3p_sphere. If the key has the form firstbit:secondbit, instead we return a 2D array using secondbit as a key: so entries in [kit:dw_cleric_mask] would get returned as values of $sfo_3p_kit("dw_cleric_mask" [whatever])

## Internal functions

These should not be called from outside the library itself.

3p_load_data_helper(folder:s, folder_internal:s, path:s)=(sfo_3p_data:a) action