Add weapons and items from April and early May (#420)

* Chloe and Kolulu
* Fire and Dark Omega Rebirth weapons
* LuciZero pendulums

---------

Co-authored-by: Justin Edmund <383021+jedmund@users.noreply.github.com>
This commit is contained in:
Justin Edmund 2024-05-06 16:49:57 -07:00 committed by GitHub
parent 4bc211c240
commit 4a30dbbf9f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 147 additions and 24 deletions

View file

@ -7,6 +7,34 @@ const ContentUpdate2024 = () => {
return (
<>
<ContentUpdate
version="2024-05U1"
dateString="2024/05/02"
event="events.content"
newItems={{
weapon: [
'1040026100',
'1040317400',
'1040423100',
'1040119500',
'1040618800',
'1040916300',
],
}}
transcendedItems={{
summon: ['2040034000', '2040046000'],
}}
numNotes={4}
/>
<ContentUpdate
version="2024-04L"
dateString="2024/04/30"
event="events.legfest"
newItems={{
character: ['3040529000', '3040530000'],
weapon: ['1040219200', '1040119400', '1040618700', '1030109000'],
}}
/>
<ContentUpdate
version="2024-04U2"
dateString="2024/04/21"

View file

@ -0,0 +1,9 @@
.errors {
color: $error;
display: none;
padding: $unit 0;
&.visible {
display: block;
}
}

View file

@ -1,4 +1,7 @@
import React, { useEffect, useState } from 'react'
import { useRouter } from 'next/router'
import { useTranslation } from 'next-i18next'
import classNames from 'classnames'
import Select from '~components/common/Select'
import SelectGroup from '~components/common/SelectGroup'
@ -11,12 +14,14 @@ import styles from './index.module.scss'
// Props
interface Props {
open: boolean
gridWeapon: GridWeapon
weaponKey?: WeaponKey
series: number
slot: number
onChange?: (value: WeaponKey, slot: number) => void
onOpenChange: () => void
onClose?: () => void
sendValidity: (isValid: boolean) => void
}
// Constants
@ -47,10 +52,33 @@ const emptyWeaponKey: WeaponKey = {
const WeaponKeySelect = React.forwardRef<HTMLButtonElement, Props>(
function useFieldSet(
{ open, weaponKey, series, slot, onChange, onOpenChange, onClose },
{
open,
gridWeapon,
weaponKey,
series,
slot,
onChange,
onOpenChange,
onClose,
sendValidity,
},
ref
) {
const router = useRouter()
const locale =
router.locale && ['en', 'ja'].includes(router.locale)
? router.locale
: 'en'
const { t } = useTranslation('common')
const [keys, setKeys] = useState<WeaponKey[][]>([])
const [error, setError] = useState('')
const errorClasses = classNames({
[styles.errors]: true,
[styles.visible]: error !== '',
})
useEffect(() => {
const keys = flattenWeaponKeys()
@ -134,7 +162,18 @@ const WeaponKeySelect = React.forwardRef<HTMLButtonElement, Props>(
const keys = flattenWeaponKeys()
const found = keys.find((key) => key.id == value)
const weaponKey = found ? found : emptyWeaponKey
if (onChange) onChange(weaponKey, slot)
if (
['14005', '14006', '14007'].includes(`${weaponKey.granblue_id}`) &&
gridWeapon.transcendence_step < 3
) {
setError(`${weaponKey.name[locale]} requires 3rd Transcendence`)
sendValidity(false)
} else if (onChange) {
setError('')
onChange(weaponKey, slot)
sendValidity(true)
}
}
const emptyOption = () => {
@ -148,26 +187,29 @@ const WeaponKeySelect = React.forwardRef<HTMLButtonElement, Props>(
}
return (
<Select
key={`weapon-key-${slot}`}
value={weaponKey ? weaponKey.id : emptyWeaponKey.id}
open={open}
onClose={onClose}
onOpenChange={onOpenChange}
onValueChange={handleChange}
trigger={{
bound: true,
}}
ref={ref}
overlayVisible={false}
>
<SelectItem key={emptyWeaponKey.id} value={emptyWeaponKey.id}>
{emptyOption()}
</SelectItem>
{Array.from(Array(keys?.length)).map((x, i) => {
return weaponKeyGroup(i)
})}
</Select>
<>
<Select
key={`weapon-key-${slot}`}
value={weaponKey ? weaponKey.id : emptyWeaponKey.id}
open={open}
onClose={onClose}
onOpenChange={onOpenChange}
onValueChange={handleChange}
trigger={{
bound: true,
}}
ref={ref}
overlayVisible={false}
>
<SelectItem key={emptyWeaponKey.id} value={emptyWeaponKey.id}>
{emptyOption()}
</SelectItem>
{Array.from(Array(keys?.length)).map((x, i) => {
return weaponKeyGroup(i)
})}
</Select>
<p className={errorClasses}>{error}</p>
</>
)
}
)

View file

@ -50,6 +50,12 @@ const WeaponModal = ({
// State: Component
const [alertOpen, setAlertOpen] = useState(false)
const [keysValid, setKeysValid] = useState<boolean[]>([
true,
true,
true,
true,
])
const [formValid, setFormValid] = useState(false)
// State: Selects
@ -149,6 +155,12 @@ const WeaponModal = ({
setFormValid(isValid)
}
function receiveKeyValidity(isValid: boolean, slot: number) {
const newKeysValid = keysValid
newKeysValid[slot] = isValid
setKeysValid(newKeysValid)
}
// Methods: Data submission
function prepareObject() {
let object: GridWeaponObject = { weapon: {} }
@ -159,9 +171,17 @@ const WeaponModal = ({
object.weapon.weapon_key1_id = weaponKey1.id
}
if ([2, 3, 17, 34].includes(gridWeapon.object.series) && weaponKey2)
if ([2, 3, 17, 34].includes(gridWeapon.object.series) && weaponKey2) {
object.weapon.weapon_key2_id = weaponKey2.id
if (
['14005', '14006', '14007'].includes(weaponKey2.granblue_id) &&
gridWeapon.transcendence_step < 3
) {
object.weapon.weapon_key2_id = undefined
}
}
if ([17].includes(gridWeapon.object.series) && weaponKey3)
object.weapon.weapon_key3_id = weaponKey3.id
@ -356,12 +376,14 @@ const WeaponModal = ({
{[2, 3, 17, 22, 34].includes(gridWeapon.object.series) ? (
<WeaponKeySelect
open={weaponKey1Open}
gridWeapon={gridWeapon}
weaponKey={weaponKey1}
series={gridWeapon.object.series}
slot={0}
onOpenChange={() => openSelect(1)}
onChange={receiveWeaponKey}
onClose={() => setWeaponKey1Open(false)}
sendValidity={(valid: boolean) => receiveKeyValidity(valid, 0)}
/>
) : (
''
@ -370,12 +392,14 @@ const WeaponModal = ({
{[2, 3, 17, 34].includes(gridWeapon.object.series) ? (
<WeaponKeySelect
open={weaponKey2Open}
gridWeapon={gridWeapon}
weaponKey={weaponKey2}
series={gridWeapon.object.series}
slot={1}
onOpenChange={() => openSelect(2)}
onChange={receiveWeaponKey}
onClose={() => setWeaponKey2Open(false)}
sendValidity={(valid: boolean) => receiveKeyValidity(valid, 1)}
/>
) : (
''
@ -384,12 +408,14 @@ const WeaponModal = ({
{[17].includes(gridWeapon.object.series) ? (
<WeaponKeySelect
open={weaponKey3Open}
gridWeapon={gridWeapon}
weaponKey={weaponKey3}
series={gridWeapon.object.series}
slot={2}
onOpenChange={() => openSelect(3)}
onChange={receiveWeaponKey}
onClose={() => setWeaponKey3Open(false)}
sendValidity={(valid: boolean) => receiveKeyValidity(valid, 2)}
/>
) : (
''
@ -398,12 +424,14 @@ const WeaponModal = ({
{gridWeapon.object.series == 24 && gridWeapon.object.uncap.ulb ? (
<WeaponKeySelect
open={weaponKey4Open}
gridWeapon={gridWeapon}
weaponKey={weaponKey1}
series={gridWeapon.object.series}
slot={0}
onOpenChange={() => openSelect(4)}
onChange={receiveWeaponKey}
onClose={() => setWeaponKey4Open(false)}
sendValidity={(valid: boolean) => receiveKeyValidity(valid, 4)}
/>
) : (
''
@ -496,7 +524,7 @@ const WeaponModal = ({
bound={true}
onClick={handleUpdateWeapon}
key="confirm"
disabled={!formValid}
disabled={!formValid || keysValid.includes(false)}
text={t('modals.weapon.buttons.confirm')}
/>,
]}

View file

@ -29,6 +29,14 @@
"uncap": "Uncap"
},
"versions": {
"2024-05U1": {
"features": [
"Added new raids: Colossus Ira Omega (Impossible) and Celeste Ater Omega (Impossible)",
"Pendulum of Extremity, Pendulum of Sagacity, and Pendulum of Supremacy added (I kept forgetting about these)",
"Only Dark Opus Weapons at Transcendence Lv3 or higher can equip the new Pendulums",
"Fixed a bug where users could not set the awakening level on some Grand weapons"
]
},
"2024-03U3": {
"features": [
"Added new raids: Tiamat Aura Omega (Impossible) and Luminiera Credo Omega (Impossible)",

View file

@ -29,6 +29,14 @@
"uncap": "上限解放"
},
"versions": {
"2024-05U1": {
"features": [
"新マルチバトル追加「コロッサス・イラマグナHL」「セレスト・アーテルマグナHL」",
"新ペンデュラム追加「絶涯のペンデュラム」「窮理のペンデュラム」「天髄のペンデュラム」(忘れてしまいました、申し訳ありません)",
"限界超越レベル3以上の終末武器しか新ペンデュラムが装備することができません",
"リミテッド武器の覚醒Lvが変更できない不具合を修正"
]
},
"2024-03U3": {
"features": [
"新マルチバトル追加「ティアマト・アウラマグナHL」「シュヴァリエ・クレドマグナHL」",