Add a new class preset to data/feather/class_presets.csv. Guides through class name, PvE/PvP/both mode, priority stats, hidden stats, and optimal feather loadout, then appends correctly-formatted rows.
The user wants to add a new class preset to the feather planner.
Ask for:
wizard_pve, hunter_pvp)pve, pvp, or bothWizard (Glass Cannon))vit, str, int, dex, agi, lukpatk_matk, pdef, mdef, max_hppve_dmg_bonus, pve_dmg_reduction, pvp_dmg_bonus, pvp_dmg_reductionignore_pdef, ignore_mdefGold: Space, Time, Day, Sky Purple: Faith, Glory, Valor MIX Gold: Dark, Light MIX Purple: Order, Truth, Justice, Grace
Gold: Divine, Nature, Night, Terra Purple: Soul, Mercy, Virtue MIX Gold: Dark, Light MIX Purple: Order, Truth, Justice, Grace
Header: class_id,mode,display_name,priority_stats,hidden_stats,optimal_atk_feathers,optimal_def_feathers
Multi-value fields (priority_stats, hidden_stats, feather lists) are stored as quoted comma-separated strings within the CSV field:
paladin_sac,pve,Paladin (Sacrifice Tank),"vit,ignore_pdef,pve_dmg_bonus,pve_dmg_reduction,max_hp,pdef,mdef","str,patk,patk_matk,int,dex","Time,Day,Sky,Grace,Glory","Nature,Night,Terra,Virtue,Soul"
If mode is pve or pvp only, write one row.
If mode is both, ask whether to also add separate pve and pvp variant rows with different optimal loadouts (like the paladin preset does), or just one both row.
Show the user the exact row(s) before appending.
After saving, remind the user:
data/feather/class_presets.csv at runtime via PapaParsejs/app.js state.currentPreset logic to confirm the new class_id is handled correctly in any preset-specific UI filtering