"use client" import { useEffect, useMemo } from "react"; import SelectCustomText from "../select/customSelectText"; import { calcMonsterStats, getLocaleName, replaceByParam } from "@/helper"; import useLocaleStore from "@/stores/localeStore"; import useUserDataStore from "@/stores/userDataStore"; import Image from "next/image"; import { useTranslations } from "next-intl"; import { MoCEvent, MonsterStore } from "@/types"; import useDetailDataStore from "@/stores/detailDataStore"; export default function MocBar() { const { locale } = useLocaleStore() const { moc_config, setMocConfig } = useUserDataStore() const { mapMonster, mapMoc, damageType, hardLevelConfig, eliteConfig } = useDetailDataStore() const transI18n = useTranslations("DataPage") const challengeSelected = useMemo(() => { return mapMoc[moc_config.event_id.toString()]?.Level.find((moc) => moc.ID === moc_config.challenge_id) }, [moc_config, mapMoc]) const eventSelected = useMemo(() => { return mapMoc[moc_config.event_id.toString()] }, [moc_config, mapMoc]) const floorSideList = useMemo(() => { if (!eventSelected) return []; const floorList = [ { id: "firstNode", name: transI18n("firstNode"), wave: transI18n("firstNodeEnemies") }, { id: "secondNode", name: transI18n("secondNode"), wave: transI18n("secondNodeEnemies") }, ] if (eventSelected?.Tierce && eventSelected.Tierce.PreChallenge === moc_config.challenge_id) { floorList.push({ id: "thirdNode", name: transI18n("thirdNode"), wave: transI18n("thirdNodeEnemies") }) } return floorList }, [moc_config.challenge_id, eventSelected, transI18n]) useEffect(() => { if (!challengeSelected || moc_config.event_id === 0 || moc_config.challenge_id === 0) return const newBattleConfig = structuredClone(moc_config) newBattleConfig.cycle_count = 0 if (moc_config.use_cycle_count) { newBattleConfig.cycle_count = challengeSelected.TurnLimit } newBattleConfig.blessings = [] if (moc_config.use_turbulence_buff && challengeSelected) { challengeSelected.MazeBuff.map((item) => { newBattleConfig.blessings.push({ id: item.ID, level: 1 }) }) } newBattleConfig.monsters = [] newBattleConfig.stage_id = 0 let targetEventList: MoCEvent[] = [] if (moc_config.floor_side === "firstNode" && challengeSelected.EventList1.length > 0) { targetEventList = challengeSelected.EventList1 } else if (moc_config.floor_side === "secondNode" && challengeSelected.EventList2.length > 0) { targetEventList = challengeSelected.EventList2 } else if (moc_config.floor_side === "thirdNode" && eventSelected?.Tierce && eventSelected.Tierce.EventList.length > 0) { targetEventList = eventSelected.Tierce.EventList } if (targetEventList.length > 0) { newBattleConfig.stage_id = targetEventList[0].ID for (const wave of targetEventList[0].MonsterList) { const newWave: MonsterStore[] = [] for (const value of Object.values(wave)) { newWave.push({ monster_id: value, level: targetEventList[0].Level, amount: 1, }) } newBattleConfig.monsters.push(newWave) } } setMocConfig(newBattleConfig) // eslint-disable-next-line react-hooks/exhaustive-deps }, [ challengeSelected, eventSelected, moc_config.event_id, moc_config.challenge_id, moc_config.floor_side, moc_config.use_cycle_count, moc_config.use_turbulence_buff, mapMoc, ]) if (!mapMoc) return null return (