public BattleStatus(UserCharacterStateData data, bool isMyParty)
    {
        Status.Add(EFFECT_ID.HP, data.maxHP);
        Status.Add(EFFECT_ID.SPEED, data.speed);
        Status.Add(EFFECT_ID.AVOID, data.avoid);
        NowHp = data.nowHp;

        if (isMyParty)
        {
            if (data.charType == CHAR_TYPE.SERVANT)
            {
                UserStageStateData statgData = UserDataManager.Inst.GetStageState();
                UserServantData    servant   = UserDataManager.Inst.GetServantInfo(data.index);

                Status.Add(EFFECT_ID.STR, servant.status.basicStr);
                Status.Add(EFFECT_ID.DEX, servant.status.basicDex);
                Status.Add(EFFECT_ID.INT, servant.status.basicInt);

                Equipment(servant.equipmentDic, true);

                for (int i = 0; i < statgData.mySynergyList.Count; i++)
                {
                    Buff(statgData.mySynergyList[i].id, true, 0);
                }

                for (int i = 0; i < servant.passiveSkillList.Count; i++)
                {
                    Buff(servant.passiveSkillList[i].id, true);
                }

                StatusReCalculation(servant.level);

                Equipment(servant.equipmentDic, false);

                for (int i = 0; i < statgData.mySynergyList.Count; i++)
                {
                    Buff(statgData.mySynergyList[i].id, false, 0);
                }

                for (int i = 0; i < servant.passiveSkillList.Count; i++)
                {
                    Buff(servant.passiveSkillList[i].id, false);
                }
            }
            else if (data.charType == CHAR_TYPE.MONSTER)
            {
                if (data.position < 10)
                {
                    UserStageStateData statgData = UserDataManager.Inst.GetStageState();
                    UserMonsterData    monster   = UserDataManager.Inst.GetMonsterInfo(data.index);

                    Status.Add(EFFECT_ID.STR, monster.status.basicStr);
                    Status.Add(EFFECT_ID.DEX, monster.status.basicDex);
                    Status.Add(EFFECT_ID.INT, monster.status.basicInt);

                    StatusReCalculation(monster.level);

                    for (int i = 0; i < statgData.mySynergyList.Count; i++)
                    {
                        Buff(statgData.mySynergyList[i].id, true, (int)monster.tribeType);
                    }

                    for (int i = 0; i < monster.passiveSkillList.Count; i++)
                    {
                        Buff(monster.passiveSkillList[i].id, true);
                    }

                    StatusReCalculation(monster.level);

                    for (int i = 0; i < statgData.mySynergyList.Count; i++)
                    {
                        Buff(statgData.mySynergyList[i].id, false, (int)monster.tribeType);
                    }

                    for (int i = 0; i < monster.passiveSkillList.Count; i++)
                    {
                        Buff(monster.passiveSkillList[i].id, false);
                    }
                }
            }
        }
        else
        {
            Status.Add(EFFECT_ID.STR, data.status.basicStr);
            Status.Add(EFFECT_ID.DEX, data.status.basicDex);
            Status.Add(EFFECT_ID.INT, data.status.basicInt);
        }
    }
    private void Update()
    {
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.transform.CompareTag("Character"))
                {
                    if (!EventSystem.current.IsPointerOverGameObject())
                    {
                        characterInfo.SetActive(true);

                        selectIndex              = hit.transform.GetComponent <CharacterIndex>().index;
                        selectCharJob.sprite     = blankImage;
                        selectCharElement.sprite = blankImage;
                        SelectGridReset();

                        BattleManager.Inst.grid[selectIndex].SetActive(true);

                        UserCharacterStateData selectStateInfo = BattleManager.Inst.GetCharState(selectIndex);

                        if (selectStateInfo.charType == CHAR_TYPE.SERVANT)
                        {
                            selectCharJob.sprite = CSVData.Inst.GetSpriteServantJob((SERVANT_JOB)selectStateInfo.job);
                            selectCharImg.sprite = CSVData.Inst.DBServantDataDic[selectStateInfo.id].servantIcon;

                            switch (selectStateInfo.job)
                            {
                            case 0:
                                nemeText.text = "WhiteHand";
                                break;

                            case 1:
                                nemeText.text = "Warrior";
                                break;

                            case 2:
                                nemeText.text = "Thief";
                                break;

                            case 3:
                                nemeText.text = "Cleric";
                                break;

                            case 4:
                                nemeText.text = "Archer";
                                break;

                            case 5:
                                nemeText.text = "Magician";
                                break;
                            }
                        }
                        else if (selectStateInfo.charType == CHAR_TYPE.MONSTER)
                        {
                            selectCharElement.sprite = CSVData.Inst.GetSpriteElementType((ELEMENT_TYPE)selectStateInfo.elementType);
                            selectCharImg.sprite     = CSVData.Inst.DBMonsterDataDic[selectStateInfo.id].monsterIcon;

                            nemeText.text = CSVData.Inst.GetMonsterName(selectStateInfo.id);
                        }

                        for (int i = 0; i < BuffParent.childCount; i++)
                        {
                            Destroy(BuffParent.GetChild(i).gameObject);
                        }

                        if (selectIndex < 5)
                        {
                            levelText.text = UserDataManager.Inst.GetServantInfo(selectStateInfo.index).level.ToString();

                            foreach (int skill in BattleManager.Inst.status[selectIndex].buff)
                            {
                                Instantiate(BuffImage, BuffParent).GetComponent <Image>().sprite = CSVData.Inst.GetSkillPassiveData(skill).passiveIcon;
                            }
                        }
                        else if (selectIndex < 10)
                        {
                            levelText.text = UserDataManager.Inst.GetMonsterInfo(selectStateInfo.index).level.ToString();

                            foreach (int skill in BattleManager.Inst.status[selectIndex].buff)
                            {
                                Instantiate(BuffImage, BuffParent).GetComponent <Image>().sprite = CSVData.Inst.GetSkillPassiveData(skill).passiveIcon;
                            }
                        }
                        else
                        {
                            levelText.text = "?";
                        }

                        if (selectIndex < 10)
                        {
                            BattleStatus status = BattleManager.Inst.status[selectIndex];
                            _Str.text   = status.Status[EFFECT_ID.STR].ToString();
                            _Dex.text   = status.Status[EFFECT_ID.DEX].ToString();
                            _Int.text   = status.Status[EFFECT_ID.INT].ToString();
                            Atk.text    = status.Status[EFFECT_ID.ATK].ToString();
                            mAtk.text   = status.Status[EFFECT_ID.MATK].ToString();
                            Def.text    = status.Status[EFFECT_ID.DEF].ToString();
                            mDef.text   = status.Status[EFFECT_ID.MDEF].ToString();
                            Speed.text  = status.Status[EFFECT_ID.AVOID].ToString();
                            CriPer.text = status.Status[EFFECT_ID.CRI_PER].ToString();
                            CriDmg.text = status.Status[EFFECT_ID.CRI_DMG].ToString();
                        }
                        else if (BattleManager.Inst.adminMode)
                        {
                            BattleStatus status = BattleManager.Inst.status[selectIndex];
                            _Str.text   = status.Status[EFFECT_ID.STR].ToString();
                            _Dex.text   = status.Status[EFFECT_ID.DEX].ToString();
                            _Int.text   = status.Status[EFFECT_ID.INT].ToString();
                            Atk.text    = "?";
                            mAtk.text   = "?";
                            Def.text    = "?";
                            mDef.text   = "?";
                            Speed.text  = status.Status[EFFECT_ID.SPEED].ToString();
                            CriPer.text = "?";
                            CriDmg.text = "?";
                        }
                        else
                        {
                            _Str.text   = "?";
                            _Dex.text   = "?";
                            _Int.text   = "?";
                            Atk.text    = "?";
                            mAtk.text   = "?";
                            Def.text    = "?";
                            mDef.text   = "?";
                            Speed.text  = "?";
                            CriPer.text = "?";
                            CriDmg.text = "?";
                        }
                    }
                }
                else
                {
                    if (!EventSystem.current.IsPointerOverGameObject())
                    {
                        if (selectIndex >= 0)
                        {
                            BattleManager.Inst.grid[selectIndex].SetActive(false);
                        }
                        characterInfo.SetActive(false);
                    }
                }
            }
            else
            {
                if (!EventSystem.current.IsPointerOverGameObject())
                {
                    if (selectIndex >= 0)
                    {
                        BattleManager.Inst.grid[selectIndex].SetActive(false);
                    }
                    characterInfo.SetActive(false);
                }
            }
        }

        if (selectIndex != -1)
        {
            if (BattleManager.Inst.status[selectIndex].Status[EFFECT_ID.HP] != 0)
            {
                selectHpBar.fillAmount = (float)BattleManager.Inst.status[selectIndex].NowHp / BattleManager.Inst.status[selectIndex].Status[EFFECT_ID.HP];
            }

            selectHpText.text = BattleManager.Inst.status[selectIndex].NowHp.ToString();
        }
    }