public Monster addPVPPlayerUnitToStage(TranscendData td, int[] transcendLevel, string monId, Vector3 position)
    {
        Monster mon;

        _tempMonResource = GameManager.info.unitData[monId].resource;
        _tempMonType     = Monster.TYPE.UNIT;

        mon = GameManager.me.characterManager.getMonster(false, false, _tempMonResource, true);
        CharacterUtil.setRare(GameManager.info.unitData[monId].rare, mon);

        position.x -= (float)(GameManager.inGameRandom.Range(0, 101)) / 100.0f;

//		Log.log("addPVPPlayerUnitToStage : " + mon.resourceId);

        mon.init(td, transcendLevel, true, monId, false, _tempMonType);

        mon.setPositionCtransform(position);

        mon.isCutSceneOnlyCharacter = false;

        _tempMonCategory = GameManager.info.monsterData[_tempMonResource].category;

        mon.action.setFirstPosition(mon.cTransformPosition);

        mon.setVisible(true);
        mon.isEnabled = true;

        return(mon);
    }
    public IFloat getTranscendValueByATTR(IFloat inputValue, int inputAttr)
    {
        TranscendData td = transcendData;

        if (td == null)
        {
            return(inputValue);
        }

        return(td.getValueByATTR(transcendLevel, inputValue, inputAttr));
    }
    public void setDataToCharacter(Monster cha, TranscendData td, int[] transcendLevel)
    {
        cha.stat.speed.Set(speed);
        cha.maxHp = (hp);
        cha.maxSp.Set(sp);

        cha.stat.atkRange.Set(atkRange);
        cha.stat.atkSpeed.Set(atkSpeed);
        cha.stat.atkPhysic.Set(atkPhysic);
        cha.stat.atkMagic.Set(atkMagic);
        cha.stat.defPhysic.Set(defPhysic);
        cha.stat.defMagic.Set(defMagic);
        cha.bulletPatternId = resource;

        cha.atkEffectType = effectType;

        cha.stat.reinforceLevel.Set(reinforceLevel);

        cha.stat.baseLevel.Set(baseLevel);

        //* 유저 아군 (or 적) 유닛 & 몬스터 유닛 : 해당 유닛의, 베이스레벨 + 강화레벨
        cha.stat.skillTargetLevel.Set(baseLevel + reinforceLevel);

//		ATK_ATTR1,ATK_ATTR2,ATK_ATTR3,ATK_ATTR4,ATK_ATTR5,ATK_ATTR6,ATK_ATTR7,

        if (td != null)
        {
            cha.stat.originalMoveSpeedRate = cha.stat.speed;
            cha.stat.originalAtkSpeedRate  = cha.stat.atkSpeed;

            cha.stat.speed.Set(td.getValueByATTR(transcendLevel, cha.stat.speed.Get(), WSATTR.MOVE_SPEED_I));
            cha.stat.atkRange.Set(td.getValueByATTR(transcendLevel, cha.stat.atkRange.Get(), WSATTR.ATK_RANGE_I));
            cha.stat.atkSpeed.Set(td.getValueByATTR(transcendLevel, cha.stat.atkSpeed.Get(), WSATTR.ATK_SPEED_I));
            cha.stat.atkPhysic.Set(td.getValueByATTR(transcendLevel, cha.stat.atkPhysic.Get(), WSATTR.ATK_PHYSIC_I));
            cha.stat.atkMagic.Set(td.getValueByATTR(transcendLevel, cha.stat.atkMagic.Get(), WSATTR.ATK_MAGIC_I));
            cha.stat.defPhysic.Set(td.getValueByATTR(transcendLevel, cha.stat.defPhysic.Get(), WSATTR.DEF_PHYSIC_I));
            cha.stat.defMagic.Set(td.getValueByATTR(transcendLevel, cha.stat.defMagic.Get(), WSATTR.DEF_MAGIC_I));

            cha.stat.maxHp.Set(td.getValueByATTR(transcendLevel, cha.stat.maxHp.Get(), WSATTR.HP_I));

            cha.stat.originalMoveSpeedRate = cha.stat.speed / cha.stat.originalMoveSpeedRate;
            cha.stat.originalAtkSpeedRate  = cha.stat.atkSpeed / cha.stat.originalAtkSpeedRate;
        }
        else
        {
            cha.stat.originalMoveSpeedRate = 1;
            cha.stat.originalAtkSpeedRate  = 1;
        }

        cha.hp = (cha.maxHp);
        cha.sp = (cha.sp);
    }
Exemple #4
0
 public void clear()
 {
     _player = null;
     mon     = null;
     if (unitSlot != null)
     {
         unitSlot.activeSkillData = null;
     }
     unitData       = null;
     monsterData    = null;
     unitSlot       = null;
     transcendData  = null;
     transcendLevel = null;
 }
    public void setData(GameIDData gd)
    {
        if (gd.totalPLevel <= 0)
        {
            gameObject.SetActive(false);
            return;
        }
        else
        {
            gameObject.SetActive(true);
        }

        TranscendData td = gd.transcendData;

        for (int i = 0; i < 4; ++i)
        {
            slots[i].lbName.text = td.description[i];


            if (GameManager.me.uiManager.popupReforege.step == 2)
            {
                int newValue = td.getApplyRateValue(gd.transcendLevel[i], i);
                int diff     = newValue - GameManager.me.uiManager.popupReforege.currentEffectValue[i];

                string resultType = td.getApplyRateTypeString(i);
                string result     = td.getApplyRateValueString(gd.transcendLevel[i], i);

                if (diff > 0)
                {
                    result += " [ffe400](↑" + diff + resultType + ")[-]";
                }
                else if (diff < 0)
                {
                    result += " [be1010](↓" + diff + resultType + ")[-]";
                }

                slots[i].lbValue.text = result;
            }
            else
            {
                slots[i].lbValue.text = td.getApplyRateValueString(gd.transcendLevel[i], i);
            }
        }
    }
Exemple #6
0
//		1> 99레벨 미만 SS등급일때, 상세정보 UI에서 [제련] 버튼 표시

//		3> 조건에 맞는 재료아이템들을 모두 표시 후, 유저가 직접 변경 가능
//		- 디펄트 선택 재료는, 레어등급 낮은 순 > 제련레벨 낮은 순 > 강화레벨 낮은순
//		4> 재료가 없으면, 제련 버튼 비활성 & 재료 선택 UI에 메시지 표시
//		- 필요한 재료룬 이름 알려줌
//		5> 골드 부족시, 골드 부족 & 루비 사용 메시지 팝업
//		6> 제련후, 상승한 제련레벨 및 상승 속성 수치 표시
//		7> 재료가 남아있다면 계속 제련 가능,
//		- 재료 없으면 재료 없음 메시지 표시 & 제련 버튼 비활성



    void refreshInfo(bool setStat = false)
    {
        slotBefore.setReforgeData(_data, false);
        slotAfter.setReforgeData(_data, false);
        slotAfter.useButton  = false;
        slotBefore.useButton = false;

        slotBefore.lbTranscendLevel.enabled = false;
        slotAfter.lbTranscendLevel.enabled  = false;

        if (_showDiff)
        {
            lbSlotBefore.text = _data.totalPLevel + " [ffe400](↑" + (_data.totalPLevel - currentLevel) + ")[-]";
        }
        else
        {
            lbSlotBefore.text = _data.totalPLevel.ToString();
        }

        int minLevel  = _data.totalPLevel;
        int maxLevel  = _data.totalPLevel;
        int plusValue = minLevel;

        if (_prevSlot != null)
        {
            int[] logic = GameDataManager.instance.reforgeLogic;

            if (_prevSlot.infoData.rare >= RareType.SS)
            {
                minLevel = minLevel + logic[1];                 // 5
            }
            else
            {
                minLevel = minLevel + logic[0];                 // 1
            }

            maxLevel = minLevel;

            // 강화 레벨 보너스.

            int pl = (_prevSlot.infoData.reinforceLevel.Get());



            if (pl >= logic[12] && pl <= logic[13])
            {
                maxLevel += logic[14];
            }
            if (pl >= logic[9] && pl <= logic[10])
            {
                maxLevel += logic[11];
            }
            if (pl >= logic[6] && pl <= logic[7])
            {
                maxLevel += logic[8];
            }
            if (pl >= logic[3] && pl <= logic[4])
            {
                maxLevel += logic[5];
            }

            // 제련 레벨 보너스.
            if (_prevSlot.infoData.totalPLevel > 0)
            {
                maxLevel += Mathf.FloorToInt((float)_prevSlot.infoData.totalPLevel / (float)(logic[2]));
            }
        }

        if (maxLevel > GameIDData.MAX_P_LEVEL)
        {
            maxLevel = GameIDData.MAX_P_LEVEL;
        }
        if (minLevel > GameIDData.MAX_P_LEVEL)
        {
            minLevel = GameIDData.MAX_P_LEVEL;
        }

        if (maxLevel > minLevel)
        {
            lbSlotAfter.text = minLevel + "~" + maxLevel;
        }
        else
        {
            //if(minLevel == 0) lbSlotAfter.text = "-";
            //else
            lbSlotAfter.text = minLevel.ToString();
        }

        btnReforge.isEnabled = (_materialData.Count > 0);
        //		2> 제련 후 '최소 제련레벨 ~ 최대 제련레벨' 표시


        if (setStat)
        {
            TranscendData td = _data.transcendData;

            for (int i = 0; i < 4; ++i)
            {
                attSlots[i].lbName.text = td.description[i];


                int newValue = td.getApplyRateValue(_data.transcendLevel[i], i);

                if (_showDiff)
                {
                    int    diff       = newValue - currentEffectValue[i];
                    string resultType = td.getApplyRateTypeString(i);

                    string result = td.getApplyRateValueString(_data.transcendLevel[i], i);

                    if (diff > 0)
                    {
                        result += " [ffe400](↑" + diff + resultType + ")[-]";
                    }
                    else if (diff < 0)
                    {
                        result += " [be1010](↓" + diff + resultType + ")[-]";
                    }

                    attSlots[i].lbValue.text = result;
                }
                else
                {
                    attSlots[i].lbValue.text = td.getApplyRateValueString(_data.transcendLevel[i], i);
                }

                currentEffectValue[i] = newValue;
            }
        }


        lbReforgePrice.text = Util.GetCommaScore(GameDataManager.instance.reforgePrices[WSDefine.GOLD]);
    }
Exemple #7
0
    public void init(UnitData md, TranscendData td, int[] tLevel, Player player)
    {
        _player = player;

        spDamageEffect.cachedGameObject.SetActive(false);

        _state = 0;

        leftNum = 0;

        lastActiveSkillUseSlotIndex = -1;
//		unitSlot.activeSkillState = STATE_ACTIVE_SKILL_COOLTIME;

        mon = null;

        blockThis = false;

        isClicked = false;

        isLocked = false;
        unitData = md;

        transcendData  = td;
        transcendLevel = tLevel;

        tfUnitName.text = md.name;

#if UNITY_EDITOR
//		Debug.Log(unitData.resource);
#endif

        monsterData = GameManager.info.monsterData[unitData.resource];

//		unitSlot.useSp = unitData.sp;
//		unitSlot.useSp -= (unitSlot.useSp * _player.summonSpPercent(unitData));

        if (player != null)
        {
            tfUseSp.text = Mathf.RoundToInt(unitSlot.useSp / player.maxSp * 100.0f) + "";              //Mathf.CeilToInt(unitSlot.useSp - 0.4f) + "";
        }
        else
        {
            tfUseSp.text = Mathf.RoundToInt(unitSlot.useSp / _player.maxSp * 100.0f) + "";              //Mathf.CeilToInt(unitSlot.useSp - 0.4f) + "";
        }


#if UNITY_EDITOR
        Debug.LogError("***** " + slotIndex + "  - icon: " + monsterData.resource);
#endif

        MonsterData.setUnitIcon(monsterData, spPetIcon, iconDepth);

        spPetIcon.MakePixelPerfect();
        spPetIcon.width = 102;

//		if( unitData.cooltime <= 0.1f) unitSlot.maxCoolTime = 0.0f;
//		else unitSlot.maxCoolTime = unitData.cooltime;

        spBackground.spriteName  = RareType.getRareBgSprite(md.rare);
        spFrameBorder.spriteName = RareType.getRareLineSprite(md.rare);

        updateSummonNum();

        goActiveSkillContainer.SetActive(false);


        spHpBar.cachedGameObject.SetActive(false);

        tfUseSp.enabled = true;

        resetCoolTime(true);

        resetActiveSkillCoolTime();
    }
    public Monster addMonsterToStage(TranscendData td, int[] transcendLevel, bool isPlayerMon, StageMonsterData stageMonData, string monId, Vector3 position, UnitData ud = null, bool addList = true)
    {
//		Log.log("addMonsterToStage : " + monId, " pos: " + position);

        Monster mon;

        bool isUnitMonster = (stageMonData == null || stageMonData.type == StageMonsterData.Type.UNIT);

        if (isUnitMonster)
        {
            _tempMonResource = GameManager.info.unitData[monId].resource;
            _tempMonType     = Monster.TYPE.UNIT;
        }
        else if (stageMonData.type == StageMonsterData.Type.HERO)
        {
            _tempMonResource = GameManager.info.heroMonsterData[monId].resource;
            _tempMonType     = Monster.TYPE.HERO;
        }
        else if (stageMonData.type == StageMonsterData.Type.NPC)
        {
            _tempMonResource = GameManager.info.npcData[monId].resource;
            _tempMonType     = Monster.TYPE.NPC;
        }

#if UNITY_EDITOR
        //Debug.Log(_tempMonCategory);
#endif

        if (_tempMonType == Monster.TYPE.UNIT)
        {
            mon = GameManager.me.characterManager.getMonster(false, isPlayerMon, _tempMonResource, addList);
            CharacterUtil.setRare(GameManager.info.unitData[monId].rare, mon);
        }
        else if (_tempMonType == Monster.TYPE.HERO)
        {
            if (GameManager.info.heroMonsterData[monId].isPlayerResourceType)
            {
                HeroMonsterData hd = GameManager.info.heroMonsterData[monId];
                mon = (Monster)GameManager.me.characterManager.getPlayerCharacter(hd.resource, hd.head, hd.body, hd.weapon, hd.vehicle, hd.faceTexture, false, addList);

                if (mon.action != null)
                {
                    GameManager.me.characterManager.setCharacterAction(mon.action, mon.category);
                }
                mon.action   = null;
                mon.category = MonsterCategory.Category.HEROMONSTER;
            }
            else
            {
                mon = GameManager.me.characterManager.getMonster(false, isPlayerMon, _tempMonResource, addList);
                mon.removeRareLine();
            }
        }
        else
        {
            mon = GameManager.me.characterManager.getMonster(false, isPlayerMon, _tempMonResource, addList);

            if (mon.monsterData.hasFaceAni == false)
            {
                //CharacterUtil.setRare(RareType.NORMAL, mon);
                mon.removeRareLine();
            }
        }

        //position.x += (float)(GameManager.inGameRandom.Range(0,101))*0.01f;//(float)GameManager.getRandomNum()*0.01f;

        //mon.setPositionCtransform( position );

        mon.init(td, transcendLevel, monId, isPlayerMon, _tempMonType, stageMonData);

        mon.setPositionCtransform(position);

//		Log.log("addMonsterToStage" + mon , mon.resourceId);

        mon.isCutSceneOnlyCharacter = false;

        _tempMonCategory = GameManager.info.monsterData[_tempMonResource].category;

        if (addList)
        {
            switch (_tempMonCategory)
            {
            case MonsterCategory.Category.HEROMONSTER:
                ++bossNum;
                //Debug.LogError("bossNum : " + bossNum);
                break;

            case MonsterCategory.Category.UNIT:
                if (isPlayerMon == false)
                {
                    monUnitNum.Set(monUnitNum + 1);
                }
                //Debug.LogError("monUnitNum : " + monUnitNum);
                break;
            }
        }

        // 인트로 컷씬 게임용.
        if (GameManager.me.stageManager.isIntro)
        {
            mon.hp = 100000000;
        }

        mon.action.setFirstPosition(mon.cTransformPosition);
        mon.setVisible(true);
        mon.isEnabled = true;

        return(mon);
    }
    public void init(TranscendData transcendData, int[] transcendLevel, bool isPlayerUnitData, string id, bool isPlayerMon = false, TYPE type = Monster.TYPE.UNIT, StageMonsterData sMonData = null, bool isPetMonster = false)
    {
#if UNITY_EDITOR
        cTransform.gameObject.name = ((isPlayerMon)?"pm":"em") + randomNum++;
        tf.gameObject.name         = cTransform.gameObject.name;
#endif
        resetDefaultVals();

        if (particleEffect != null)
        {
            GameManager.me.effectManager.setParticleEffect(particleEffect);
        }

        isPet                = isPetMonster;
        isPlayerSide         = isPlayerMon;
        fowardDirectionValue = (isPlayerSide?1000.0f:-1000.0f);
        isDeleteObject       = false;

        _v            = tf.localScale;
        _v.x          = 1.0f;
        _v.y          = 1.0f;
        _v.z          = 1.0f;
        tf.localScale = _v;

        _q   = tf.rotation;
        _v   = _q.eulerAngles;
        _v.x = 0.0f;

        if (isPlayerSide)
        {
            _v.y = 90.0f;
        }
        else
        {
            _v.y = 270.0f;
        }

        _v.z           = 0.0f;
        _q.eulerAngles = _v;
        tf.rotation    = _q;

        isMonster = true;

        npcData          = null;
        unitData         = null;
        heroMonsterData  = null;
        stageMonsterData = sMonData;

        stat.monsterType = type;

        bool needToSetRareEffect = false;

        if (type == TYPE.UNIT)
        {
            isHero = false;

            unitData = GameManager.info.unitData[id];
            unitData.setDataToCharacter(this, transcendData, transcendLevel);

            if (isPlayerMon)
            {
                // GameManager.me.player.unitHpUp 소환생명력증가
                // GameManager.me.player.unitDefUp

                float tempF = maxHp;
                tempF += tempF * GameManager.me.player.unitHpUp(unitData);                //  stat.unitHpUp;
                maxHp  = tempF;
                hp     = tempF;

                tempF         = stat.defMagic;
                tempF        += tempF * GameManager.me.player.unitDefUp(unitData);         //.stat.unitDefUp;
                stat.defMagic = tempF;

                tempF          = stat.defPhysic;
                tempF         += tempF * GameManager.me.player.unitDefUp(unitData);        //.stat.unitDefUp;
                stat.defPhysic = tempF;

                if (unitData.rare > 0)
                {
                    needToSetRareEffect = true;
                }
            }
            else if (isPlayerUnitData)            // 적인데 주인공 소환수 데이터를 갖고 있으면 걔는 무조건 PVP!
            {
                float tempF = maxHp;
                tempF += tempF * GameManager.me.pvpPlayer.unitHpUp(unitData);                //.stat.unitHpUp;
                maxHp  = tempF;
                hp     = tempF;

                tempF         = stat.defMagic;
                tempF        += tempF * GameManager.me.pvpPlayer.unitDefUp(unitData);         //..stat.unitDefUp;
                stat.defMagic = tempF;

                tempF          = stat.defPhysic;
                tempF         += tempF * GameManager.me.pvpPlayer.unitDefUp(unitData);        //..stat.unitDefUp;
                stat.defPhysic = tempF;

                if (unitData.rare > 0)
                {
                    needToSetRareEffect = true;
                }
            }


                        #if UNITY_EDITOR
            cTransform.gameObject.name += "_" + unitData.rare;
            tf.gameObject.name          = cTransform.gameObject.name;
                        #endif


            setAniData(Monster.ATK_IDS[unitData.attackType.type]);
            setDefaultHitRange(_tempAniData, false);            //(unitData.attackType.type == 1 || unitData.attackType.type == 2));


            if (unitData.skill != null && unitData.skill.Length > 0)
            {
                skillSlots     = new UnitSkillSlot[unitData.skill.Length];
                _skillSlotsNum = skillSlots.Length;

                for (i = 0; i < _skillSlotsNum; ++i)
                {
                    skillSlots[i] = new UnitSkillSlot();
                    skillSlots[i].setData(this, GameManager.info.unitSkillData[unitData.skill[i]]);
                }
            }
            else
            {
                skillSlots = null;
            }
        }
        else if (type == TYPE.HERO)       // 히어로....
        {
            isHero = true;

            heroMonsterData = GameManager.info.heroMonsterData[id];
            heroMonsterData.setDataToCharacter(this);

            setAniData(Monster.ATK_IDS[heroMonsterData.attackType.type]);
            setDefaultHitRange(_tempAniData, false);            //(heroMonsterData.attackType.type == 1 || heroMonsterData.attackType.type == 2));

            setUpdateWhenOffscreen(true);

            int len = 0;

            if (stageMonsterData != null)
            {
                if (stageMonsterData.units != null)
                {
                    _unitSlotsNum = stageMonsterData.units.Length;
                    unitSlots     = new UnitSlot[_unitSlotsNum];

                    len = unitSlots.Length;
                    for (i = 0; i < len; ++i)
                    {
                        unitSlots[i] = new UnitSlot();
                        unitSlots[i].setData(this, GameManager.info.unitData[stageMonsterData.units[i]]);
                    }
                }

                _skillSlotsNum = stageMonsterData.skills.Length;
                skillSlots     = new HeroSkillSlot[_skillSlotsNum];
                len            = _skillSlotsNum;

                for (i = 0; i < len; ++i)
                {
                    skillSlots[i] = new HeroSkillSlot();
                    GameIDData skillInfo = new GameIDData();
                    skillInfo.parse(stageMonsterData.skills[i], GameIDData.Type.Skill);
                    skillSlots[i].setData(this, skillInfo);
                }

                _aiSlotsNum = stageMonsterData.ai.Length;
                aiSlots     = new AISlot[_aiSlotsNum];

                len = _aiSlotsNum;
                for (i = 0; i < len; ++i)
                {
                    aiSlots[i] = new AISlot();

#if UNITY_EDITOR
                    try
                    {
#endif
                    aiSlots[i].setData(this, GameManager.info.heroMonsterAI[stageMonsterData.ai[i]]);
#if UNITY_EDITOR
                }
                catch
                {
                    Debug.LogError("==== ERRORRRRRR : " + stageMonsterData.ai[i]);
                }
#endif
                }
            }
        }
        else if (type == TYPE.NPC)
        {
            isHero = false;

            npcData = GameManager.info.npcData[id];
            GameManager.info.npcData[id].setDataToCharacter(this);
        }
        else if (type == TYPE.EFFECT)
        {
            isHero = false;
        }

        baseInit();

        damageRange = monsterData.damageRange;

        isBlockMonster = monsterData.isBlockMonster;

        initShadowAndEffectSize();

        _showFirst = false;

        _recoveryDelay.Set(0.0f);
        _recoveryDelayMp.Set(0.0f);
        _recoveryDelaySp.Set(0.0f);
        _hpRecoveryDelay.Set(0.0f);
        //_monsterShowTime = 0.0f;

        invincible = false;



        //Log.log("monsterData.category : " + monsterData.category);

        action = GameManager.me.characterManager.getCharacterAction(category);
        action.init(this);

        hasAni = !(category == MonsterCategory.Category.OBJECT && ani.GetClip(DEAD) == null);

        _v               = tf.localPosition;
        _v.y             = 1.0f;
        tf.localPosition = _v;

        _damageMotionDuration = 1000.0f;

        if (monsterData.deleteMotionType == ChracterDeleteMotionType.EFFECT)
        {
            deleteMotionEffect = GameManager.info.effectData[monsterData.deleteMotionValue].clone();
            if (deleteMotionEffect.type == EffectData.ResourceType.CHARACTER)
            {
#if UNITY_EDITOR
                Debug.Log("deleteMotionEffect.effectChracter : " + (deleteMotionEffect.effectChracter == null));
#endif

                if (deleteMotionEffect.effectChracter == null)
                {
                    deleteMotionEffect.effectChracter = GameManager.me.characterManager.getMonster(false, isPlayerMon, deleteMotionEffect.resource, false);
                    if (unitData != null)
                    {
                        CharacterUtil.setRare(unitData.rare, deleteMotionEffect.effectChracter);
                    }
                    else if (isHero)
                    {
                        deleteMotionEffect.effectChracter.removeRareLine();
                    }
                    deleteMotionEffect.effectChracter.init(null, null, monsterData.deleteMotionValue, isPlayerMon, Monster.TYPE.EFFECT);
                    deleteMotionEffect.effectChracter.isEnabled             = false;
                    deleteMotionEffect.effectChracter.cTransform.localScale = cTransform.localScale;
                }
            }
        }
        else
        {
            deleteMotionEffect = null;
        }

        if (ani[Monster.NORMAL] != null)
        {
            state = Monster.NORMAL;
        }

        initHpBar();

        initMiniMap();

        saveCharacterOriginalValue();

//		if(needToSetRareEffect)
//		{
        //GameManager.info.effectData[UnitData.rareEffectId[unitData.rare-1]].getEffect(cTransform.position,null,cTransform); //getParticleEffectByCharacterSize(this,null,cTransform);
        //particleEffect = GameManager.info.effectData[UnitData.rareEffectId[unitData.rare-1]].getParticleEffectByCharacterSize(this,null,cTransform,10000,0,0,0,0.5f);
//		}


        if (GameManager.me.stageManager.isIntro)
        {
            maxHp = 10000000;
            _hp   = 10000000;
        }

        stat.maxHp = MathUtil.RoundToInt(maxHp);

        if (GameManager.info.modelData.ContainsKey(resourceId))
        {
            useRimShader = GameManager.info.modelData[resourceId].useRimShader;
        }
    }
 public void init(TranscendData td, int[] transcendLevel, string id, bool isPlayerMon = false, TYPE type = Monster.TYPE.UNIT, StageMonsterData sMonData = null, bool isPetMonster = false)
 {
     init(td, transcendLevel, isPlayerMon, id, isPlayerMon, type, sMonData, isPetMonster);
 }
    public void init(AttackerType attackerType, AttackType aType, BaseSkillData hsd = null, TranscendData td = null, int[] transcendLevel = null, bool isFromHeroSkill = false)
    {
        //Log.log("init attackdata!!!");
        if (td != null)
        {
            for (int i = attrOriginal.Length - 1; i >= 0; --i)
            {
                if (isFromHeroSkill)
                {
                    attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), E_ATTR_STR[i]);
                }
                else
                {
                    attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), ATTR_STR[i]);
                }
            }
        }

        cm = GameManager.me.characterManager;

        _skillData = hsd;

        switch (type)
        {
        case NONE_0:
            chracterMove = moveStay;

            monsterShoot  = shootMonster0;
            playerShoot   = shootPlayer0;
            playSkill     = playSkillRightNow;
            preDamageCalc = damageCalc0;


            if (_skillData.skillDataType == BaseSkillData.SkillDataType.Hero && _skillData.targeting == 1)
            {
                targetRange = _skillData.targetAttr[1];
            }

            break;

        case SHORT_1:         //1
            //len = 1;
            chracterMove = moveShortAttackType;

            if (aType == AttackType.Attack)
            {
                monsterShoot  = shootMonster1;
                playerShoot   = shootPlayer1;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case SHORT_RANGE_2:          //2
            //len = 3; //데미지범위	최소데미지비율	최대타겟유닛수

            chracterMove = moveShortAttackType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonster2;
                playerShoot   = shootPlayer2;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case LINE_3:         //3

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet3;
                playerShoot   = shootPlayerBullet3;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;

        case LINE_RANGE_4:         //4

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet4;
                playerShoot   = shootPlayerBullet4;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;


        case LINE_PASS_5:         //5

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[4];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet5;
                playerShoot   = shootPlayerBullet5;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;

        case CURVE_RANGE_6:         //6
            //len = 4; //타임리밋	데미지범위	최소데미지비율	최대타겟유닛수

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[1];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet6;
                playerShoot   = shootPlayerBullet6;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case DROP_RANGE_7:         //7
            //len = 4; //타임리밋	데미지범위	최소데미지비율	최대타겟유닛수

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                targetRange = attr[1];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet7;
                playerShoot   = shootPlayerBullet7;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case CIRCLE_RANGE_8:

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[0];
                maxHit      = attr[2];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet8;
                playerShoot   = shootPlayerBullet8;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            //len = 3; //데미지범위	최소데미지비율	최대타겟유닛수
            break;

        case FIXED_EFFECT_9:
            //len = 4; //최대타겟유닛수	이펙트타입	이펙트Z/R	이펙트X
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[1] > 12)
                {
                    targetRange = attr[2];
                }
                else
                {
                    targetRange = attr[3];
                }

                maxHit = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet9;
                playerShoot   = shootPlayerBullet9;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;


            break;

        case CONTINUE_FIXED_EFFECT_10:         //최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            //len = 5;
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[2] > 12)
                {
                    targetRange = attr[3];
                }
                else
                {
                    targetRange = attr[4];
                }


                maxHit = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet10;
                playerShoot   = shootPlayerBullet10;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case CURVE_AFTER_CONTINUE_FIXED_EFFECT_11:         //타임리밋	최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            //len = 6;
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[3] > 12)
                {
                    targetRange = attr[4];
                }
                else
                {
                    targetRange = attr[5];
                }

                maxHit = attr[1];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet11;
                playerShoot   = shootPlayerBullet11;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case ATTACH_BULLET_12:
            //len = 5; // 최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet12;
                playerShoot   = shootPlayerBullet12;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLoop;

            break;

        case TIME_BOMB_13:         //13

#if UNITY_EDITOR
            Debug.Log("==== 안쓰는 것!!!! ====!!!!");
#endif

            //len = 4; //폭발대기시간	  데미지범위	최소데미지비율	최대타겟유닛수
            if (attackerType == AttackerType.Hero)
            {
                chracterMove = moveLineType;
                skillMove    = moveSkillHeroMonsterLineType;
            }
            else if (attackerType == AttackerType.Unit)
            {
                chracterMove = moveLineType;
            }

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot = shootMonsterBullet12;
                playerShoot  = shootPlayerBullet12;
            }

            playSkill = playSkillNormal;

            break;

        case LAND_MINE_14:         //14

            //len = 4; //데미지범위	최소데미지비율	최대타겟유닛수  자연폭발시간
            if (attackerType == AttackerType.Hero)
            {
                chracterMove = moveLandMineType;             //moveLandMineAttackType;
                skillMove    = moveLandMineType;             //moveLandMineAttackType;
            }
            else if (attackerType == AttackerType.Unit)
            {
                chracterMove = moveLandMineType;                //moveLandMineAttackType;
            }

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet14;
                playerShoot   = shootPlayerBullet14;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case CHAIN_LIGHTING_15:           //15

//			Debug.Log("==== 수정해야함 ====!!!!");

            //len = 3; //최대전체거리	최대연결거리A	최대연결거리B	최대연결유닛수	연결딜레이
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet15;
                playerShoot   = shootPlayerBullet15;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLoop;

            break;


        case SCREEN_ATTACK_16:

            // 이동은 수정해야함. 그런데 굳이 할 필요는 없을듯???
            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet16;
                playerShoot   = shootPlayerBullet16;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case METHEO_17:         //17

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[5];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet17;
                playerShoot   = shootPlayerBullet17;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;


        case CHASER_18:         //18

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet18;
                playerShoot   = shootPlayerBullet18;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;
        }
    }