add maxExorcismLevel to weapon database pages
- add to Weapon type - add field to WeaponStatsSection (min: 1) - add to new/edit/import page payloads
This commit is contained in:
parent
23527c727e
commit
cfa9e5d389
9 changed files with 42 additions and 11 deletions
|
|
@ -302,6 +302,7 @@
|
||||||
onChange={(bef) => {
|
onChange={(bef) => {
|
||||||
befoulment = bef
|
befoulment = bef
|
||||||
}}
|
}}
|
||||||
|
maxExorcismLevel={weaponData?.maxExorcismLevel}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</DetailsSection>
|
</DetailsSection>
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,7 @@
|
||||||
onChange={(bef) => {
|
onChange={(bef) => {
|
||||||
befoulment = bef
|
befoulment = bef
|
||||||
}}
|
}}
|
||||||
|
maxExorcismLevel={weaponData?.maxExorcismLevel}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</DetailsSection>
|
</DetailsSection>
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,11 @@
|
||||||
onChange?: (befoulment: Befoulment | null) => void
|
onChange?: (befoulment: Befoulment | null) => void
|
||||||
/** Language for display */
|
/** Language for display */
|
||||||
locale?: 'en' | 'ja'
|
locale?: 'en' | 'ja'
|
||||||
|
/** Maximum exorcism level for this weapon (from weapon's maxExorcismLevel) */
|
||||||
|
maxExorcismLevel?: number | null
|
||||||
}
|
}
|
||||||
|
|
||||||
let { currentBefoulment = null, onChange, locale = 'en' }: Props = $props()
|
let { currentBefoulment = null, onChange, locale = 'en', maxExorcismLevel = null }: Props = $props()
|
||||||
|
|
||||||
const { befoulments, findBefoulment, isLoading } = useWeaponStatModifiers()
|
const { befoulments, findBefoulment, isLoading } = useWeaponStatModifiers()
|
||||||
|
|
||||||
|
|
@ -44,15 +46,14 @@
|
||||||
return items
|
return items
|
||||||
})
|
})
|
||||||
|
|
||||||
// Exorcism level options (0-5)
|
// Exorcism level options (0 to maxExorcismLevel, fallback to 5)
|
||||||
const exorcismOptions: Array<{ value: number; label: string }> = [
|
const exorcismOptions = $derived.by(() => {
|
||||||
{ value: 0, label: 'Level 0 (Full Effect)' },
|
const max = maxExorcismLevel ?? 5
|
||||||
{ value: 1, label: 'Level 1' },
|
return Array.from({ length: max + 1 }, (_, i) => ({
|
||||||
{ value: 2, label: 'Level 2' },
|
value: i,
|
||||||
{ value: 3, label: 'Level 3' },
|
label: `Level ${i}`
|
||||||
{ value: 4, label: 'Level 4' },
|
}))
|
||||||
{ value: 5, label: 'Level 5 (Fully Exorcised)' }
|
})
|
||||||
]
|
|
||||||
|
|
||||||
// Get suffix for display
|
// Get suffix for display
|
||||||
function getSuffix(modifier: WeaponStatModifier | undefined): string {
|
function getSuffix(modifier: WeaponStatModifier | undefined): string {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@
|
||||||
onchange,
|
onchange,
|
||||||
width,
|
width,
|
||||||
linkUrl,
|
linkUrl,
|
||||||
hasLinkButton = false
|
hasLinkButton = false,
|
||||||
|
min,
|
||||||
|
max
|
||||||
}: {
|
}: {
|
||||||
label: string
|
label: string
|
||||||
/** Secondary label displayed below the main label */
|
/** Secondary label displayed below the main label */
|
||||||
|
|
@ -48,6 +50,10 @@
|
||||||
linkUrl?: string | null
|
linkUrl?: string | null
|
||||||
/** Whether to show the link button (disabled when linkUrl is empty) */
|
/** Whether to show the link button (disabled when linkUrl is empty) */
|
||||||
hasLinkButton?: boolean
|
hasLinkButton?: boolean
|
||||||
|
/** Minimum value for number inputs */
|
||||||
|
min?: number
|
||||||
|
/** Maximum value for number inputs */
|
||||||
|
max?: number
|
||||||
} = $props()
|
} = $props()
|
||||||
|
|
||||||
// For checkbox type, derive the checked state from value
|
// For checkbox type, derive the checked state from value
|
||||||
|
|
@ -110,6 +116,8 @@
|
||||||
contained={true}
|
contained={true}
|
||||||
{placeholder}
|
{placeholder}
|
||||||
alignRight={true}
|
alignRight={true}
|
||||||
|
{min}
|
||||||
|
{max}
|
||||||
/>
|
/>
|
||||||
{:else if type === 'date'}
|
{:else if type === 'date'}
|
||||||
<DatePicker bind:value={value as string | null} contained={true} {placeholder} />
|
<DatePicker bind:value={value as string | null} contained={true} {placeholder} />
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,15 @@
|
||||||
type="number"
|
type="number"
|
||||||
placeholder="0"
|
placeholder="0"
|
||||||
/>
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label="Max Exorcism Level"
|
||||||
|
sublabel="For befoulment weapons only"
|
||||||
|
bind:value={editData.maxExorcismLevel}
|
||||||
|
editable={true}
|
||||||
|
type="number"
|
||||||
|
placeholder="—"
|
||||||
|
min={1}
|
||||||
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<DetailItem label="Max Level" value={weapon.maxLevel} />
|
<DetailItem label="Max Level" value={weapon.maxLevel} />
|
||||||
{#if weapon.maxSkillLevel}
|
{#if weapon.maxSkillLevel}
|
||||||
|
|
@ -201,5 +210,8 @@
|
||||||
{#if weapon.maxAwakeningLevel}
|
{#if weapon.maxAwakeningLevel}
|
||||||
<DetailItem label="Max Awakening Level" value={weapon.maxAwakeningLevel} />
|
<DetailItem label="Max Awakening Level" value={weapon.maxAwakeningLevel} />
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if weapon.maxExorcismLevel != null}
|
||||||
|
<DetailItem label="Max Exorcism Level" value={weapon.maxExorcismLevel} />
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ export interface Weapon {
|
||||||
maxLevel: number
|
maxLevel: number
|
||||||
maxSkillLevel: number
|
maxSkillLevel: number
|
||||||
maxAwakeningLevel: number
|
maxAwakeningLevel: number
|
||||||
|
maxExorcismLevel?: number | null
|
||||||
/** Weapon series - object with slug/name/flags */
|
/** Weapon series - object with slug/name/flags */
|
||||||
series: WeaponSeriesRef | null
|
series: WeaponSeriesRef | null
|
||||||
ax: boolean
|
ax: boolean
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@
|
||||||
maxLevel: 100,
|
maxLevel: 100,
|
||||||
maxSkillLevel: 10,
|
maxSkillLevel: 10,
|
||||||
maxAwakeningLevel: 0,
|
maxAwakeningLevel: 0,
|
||||||
|
maxExorcismLevel: null as number | null,
|
||||||
flb: false,
|
flb: false,
|
||||||
ulb: false,
|
ulb: false,
|
||||||
transcendence: false,
|
transcendence: false,
|
||||||
|
|
@ -134,6 +135,7 @@
|
||||||
maxLevel: weapon.maxLevel || 100,
|
maxLevel: weapon.maxLevel || 100,
|
||||||
maxSkillLevel: weapon.maxSkillLevel || 10,
|
maxSkillLevel: weapon.maxSkillLevel || 10,
|
||||||
maxAwakeningLevel: weapon.maxAwakeningLevel || 0,
|
maxAwakeningLevel: weapon.maxAwakeningLevel || 0,
|
||||||
|
maxExorcismLevel: weapon.maxExorcismLevel ?? null,
|
||||||
flb: weapon.uncap?.flb || false,
|
flb: weapon.uncap?.flb || false,
|
||||||
ulb: weapon.uncap?.ulb || false,
|
ulb: weapon.uncap?.ulb || false,
|
||||||
transcendence: weapon.uncap?.transcendence || false,
|
transcendence: weapon.uncap?.transcendence || false,
|
||||||
|
|
@ -186,6 +188,7 @@
|
||||||
max_level: editData.maxLevel,
|
max_level: editData.maxLevel,
|
||||||
max_skill_level: editData.maxSkillLevel,
|
max_skill_level: editData.maxSkillLevel,
|
||||||
max_awakening_level: editData.maxAwakeningLevel,
|
max_awakening_level: editData.maxAwakeningLevel,
|
||||||
|
max_exorcism_level: editData.maxExorcismLevel,
|
||||||
flb: editData.flb,
|
flb: editData.flb,
|
||||||
ulb: editData.ulb,
|
ulb: editData.ulb,
|
||||||
transcendence: editData.transcendence,
|
transcendence: editData.transcendence,
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@
|
||||||
maxLevel: suggestions?.maxLevel ?? 100,
|
maxLevel: suggestions?.maxLevel ?? 100,
|
||||||
maxSkillLevel: 10,
|
maxSkillLevel: 10,
|
||||||
maxAwakeningLevel: 0,
|
maxAwakeningLevel: 0,
|
||||||
|
maxExorcismLevel: null as number | null,
|
||||||
flb: suggestions?.flb ?? false,
|
flb: suggestions?.flb ?? false,
|
||||||
ulb: suggestions?.ulb ?? false,
|
ulb: suggestions?.ulb ?? false,
|
||||||
transcendence: suggestions?.transcendence ?? false,
|
transcendence: suggestions?.transcendence ?? false,
|
||||||
|
|
@ -281,6 +282,7 @@
|
||||||
max_level: formData.maxLevel,
|
max_level: formData.maxLevel,
|
||||||
max_skill_level: formData.maxSkillLevel,
|
max_skill_level: formData.maxSkillLevel,
|
||||||
max_awakening_level: formData.maxAwakeningLevel,
|
max_awakening_level: formData.maxAwakeningLevel,
|
||||||
|
max_exorcism_level: formData.maxExorcismLevel,
|
||||||
flb: formData.flb,
|
flb: formData.flb,
|
||||||
ulb: formData.ulb,
|
ulb: formData.ulb,
|
||||||
transcendence: formData.transcendence,
|
transcendence: formData.transcendence,
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@
|
||||||
maxLevel: 100,
|
maxLevel: 100,
|
||||||
maxSkillLevel: 10,
|
maxSkillLevel: 10,
|
||||||
maxAwakeningLevel: 0,
|
maxAwakeningLevel: 0,
|
||||||
|
maxExorcismLevel: null as number | null,
|
||||||
|
|
||||||
// Uncap
|
// Uncap
|
||||||
flb: false,
|
flb: false,
|
||||||
|
|
@ -184,6 +185,7 @@
|
||||||
max_level: editData.maxLevel,
|
max_level: editData.maxLevel,
|
||||||
max_skill_level: editData.maxSkillLevel,
|
max_skill_level: editData.maxSkillLevel,
|
||||||
max_awakening_level: editData.maxAwakeningLevel,
|
max_awakening_level: editData.maxAwakeningLevel,
|
||||||
|
max_exorcism_level: editData.maxExorcismLevel,
|
||||||
|
|
||||||
// Uncap
|
// Uncap
|
||||||
flb: editData.flb,
|
flb: editData.flb,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue