private void InitializeAnimation()
 {
     monProperty = GetComponent <MonProperty>();
     if (null == monProperty)
     {
         Debug.LogError("Fail to get MonProperty component");
     }
     else
     {
         Animation[] componentsInChildren = GetComponentsInChildren <Animation>();
         clipNameMgr = new clipNameManager();
         clipNameMgr.Alloc();
         bipAnimation = null;
         int num = 0;
         while (bipAnimation == null && num < componentsInChildren.Length)
         {
             bipAnimation = componentsInChildren[num];
             clipNameMgr.Add(componentsInChildren[num].clip.name);
             num++;
         }
         if (null == bipAnimation)
         {
             Debug.LogError("Fail to get Animation component");
         }
         else
         {
             SetIdle(queued: false);
         }
     }
 }
 public void DisableAll()
 {
     foreach (KeyValuePair <int, GameObject> item in dicMon)
     {
         MonProperty component = item.Value.GetComponent <MonProperty>();
         component.Desc.Xp = 0;
         SkinnedMeshRenderer componentInChildren = item.Value.GetComponentInChildren <SkinnedMeshRenderer>();
         componentInChildren.enabled = false;
     }
 }
    private void Start()
    {
        deltaTime = 0f;
        smr       = GetComponentInChildren <SkinnedMeshRenderer>();
        if (null == smr)
        {
            Debug.LogError("Fail to get skinned mesh renderer for flags");
        }
        else if (MyInfoManager.Instance.Seq != RoomManager.Instance.Master)
        {
            SkinnedMeshRenderer[] componentsInChildren = GetComponentsInChildren <SkinnedMeshRenderer>();
            foreach (SkinnedMeshRenderer skinnedMeshRenderer in componentsInChildren)
            {
                if (null == skinnedMeshRenderer)
                {
                    Debug.LogError("Fail to get skinned mesh renderer for flags");
                }
                else if (MyInfoManager.Instance.Seq != RoomManager.Instance.Master)
                {
                    skinnedMeshRenderer.enabled = false;
                }
            }
        }
        orgColor = smr.material.color;
        GameObject gameObject = GameObject.Find("Me");

        if ((bool)gameObject)
        {
            localCtrl = gameObject.GetComponent <LocalController>();
            if (localCtrl == null)
            {
                Debug.LogError("[MonAI.cs] localCtrl is null");
            }
        }
        monProp = GetComponent <MonProperty>();
        if (monProp == null)
        {
            Debug.LogError("[MonAI.cs] MonProperty is null");
        }
        monCtrl = GetComponent <MonController>();
        if ((bool)(monCtrl = null))
        {
            Debug.LogError("[MonAI.cs] MonController is null");
        }
        traces = new ArrayList();
        paths  = new ArrayList();
        changeTexture();
    }
Exemple #4
0
    public static HitPart[] CheckMon(Vector3 position, float radius, bool includeFriendly)
    {
        List <HitPart> list = new List <HitPart>();

        GameObject[] array = MonManager.Instance.ToGameObjectArray();
        for (int i = 0; i < array.Length; i++)
        {
            MonProperty component = array[i].GetComponent <MonProperty>();
            if (null != component && (includeFriendly || component.Desc.IsHostile()) && Vector3.Distance(position, array[i].transform.position) < radius)
            {
                HitPart[] componentsInChildren = array[i].GetComponentsInChildren <HitPart>();
                list.Add(componentsInChildren[0]);
            }
        }
        return(list.ToArray());
    }
Exemple #5
0
    public override void changeTexture()
    {
        Defense component = GameObject.Find("Main").GetComponent <Defense>();

        if (component != null)
        {
            MonProperty component2 = GetComponent <MonProperty>();
            smr = GetComponentInChildren <SkinnedMeshRenderer>();
            if (null == smr)
            {
                Debug.LogError("Fail to get skinned mesh renderer for flags");
            }
            if (component2.Desc.bRedTeam)
            {
                ((Component)smr).renderer.material.mainTexture = component.texBee2Red;
            }
            else
            {
                ((Component)smr).renderer.material.mainTexture = component.texBee2Blue;
            }
        }
    }
 private void CheckSlash()
 {
     if (isValidRange)
     {
         int layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb"));
         Ray ray       = cam.ScreenPointToRay(new Vector3((float)(Screen.width / 2), (float)(Screen.height / 2), 0f));
         if (Physics.Raycast(ray, out RaycastHit hitInfo, GetComponent <Weapon>().range, layerMask))
         {
             GameObject gameObject  = null;
             GameObject gameObject2 = hitInfo.transform.gameObject;
             if (gameObject2.layer == LayerMask.NameToLayer("Chunk") || gameObject2.layer == LayerMask.NameToLayer("Brick"))
             {
                 BrickProperty brickProperty = null;
                 GameObject    gameObject3   = null;
                 if (gameObject2.layer == LayerMask.NameToLayer("Brick"))
                 {
                     BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false);
                     if (allComponents.Length > 0)
                     {
                         brickProperty = allComponents[0];
                     }
                 }
                 else
                 {
                     gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                     if (null != gameObject)
                     {
                         brickProperty = gameObject.GetComponent <BrickProperty>();
                     }
                 }
                 if (null != brickProperty)
                 {
                     P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: false);
                     gameObject3 = BrickManager.Instance.GetBulletImpact(brickProperty.Index);
                     Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index);
                     if (brick != null && brick.destructible)
                     {
                         brickProperty.Hit((int)CalcAtkPow());
                         if (brickProperty.HitPoint <= 0)
                         {
                             if (!Application.loadedLevelName.Contains("Tutor"))
                             {
                                 CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq);
                             }
                             gameObject3 = null;
                             if (brickProperty.Index == 115 || brickProperty.Index == 193)
                             {
                                 CheckMyself(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckBoxmen(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckMonster(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckDestructibles(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                             }
                         }
                         else
                         {
                             P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint);
                         }
                     }
                 }
                 if (null != gameObject3)
                 {
                     Object.Instantiate((Object)gameObject3, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("BoxMan"))
             {
                 PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject2.transform, includeInactive: false);
                 TPController[]   allComponents3 = Recursively.GetAllComponents <TPController>(gameObject2.transform, includeInactive: false);
                 if (allComponents2.Length != 1)
                 {
                     Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non ");
                 }
                 if (allComponents3.Length != 1)
                 {
                     Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non ");
                 }
                 PlayerProperty playerProperty = null;
                 TPController   tPController   = null;
                 if (allComponents2.Length > 0)
                 {
                     playerProperty = allComponents2[0];
                 }
                 if (allComponents3.Length > 0)
                 {
                     tPController = allComponents3[0];
                 }
                 if (playerProperty != null && tPController != null)
                 {
                     int     num       = 0;
                     HitPart component = gameObject2.GetComponent <HitPart>();
                     if (component != null)
                     {
                         if (component.GetHitImpact() != null)
                         {
                             Object.Instantiate((Object)component.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                         }
                         num = (int)(CalcAtkPow() * component.damageFactor);
                         if (!playerProperty.IsHostile())
                         {
                             num = 0;
                         }
                         WeaponFunction component2 = GetComponent <WeaponFunction>();
                         if (null == component2)
                         {
                             Debug.LogError("wpnFunc == nulll");
                         }
                         TWeapon tWeapon = (TWeapon)GetComponent <Weapon>().tItem;
                         if (tWeapon == null)
                         {
                             Debug.LogError("wpn == null");
                         }
                         Item item = MyInfoManager.Instance.GetItemBySequence(component2.ItemSeq);
                         if (item == null)
                         {
                             item = MyInfoManager.Instance.GetUsingEquipByCode(tWeapon.code);
                         }
                         num = GlobalVars.Instance.applyDurabilityDamage(item?.Durability ?? (-1), tWeapon.durabilityMax, num);
                         P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component.part, hitInfo.point, hitInfo.normal, lucky: false, 0, ray.direction);
                         P2PManager.Instance.SendPEER_PIERCE(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy);
                     }
                     tPController.GetHit(num, playerProperty.Desc.Seq);
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("Mon"))
             {
                 MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject2.transform, includeInactive: false);
                 MonProperty   monProperty    = null;
                 if (allComponents4.Length > 0)
                 {
                     monProperty = allComponents4[0];
                 }
                 if (monProperty != null)
                 {
                     HitPart component3 = gameObject2.GetComponent <HitPart>();
                     if (component3 != null)
                     {
                         if ((MyInfoManager.Instance.Slot < 4 && monProperty.Desc.bRedTeam) || (MyInfoManager.Instance.Slot >= 4 && !monProperty.Desc.bRedTeam))
                         {
                             return;
                         }
                         if (component3.GetHitImpact() != null)
                         {
                             Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                         }
                         if (monProperty.Desc.Xp <= 0)
                         {
                             return;
                         }
                         int num2 = (int)(CalcAtkPow() * component3.damageFactor);
                         if (monProperty.Desc.bHalfDamage)
                         {
                             num2 /= 2;
                         }
                         MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, Vector3.zero, Vector3.zero, -1);
                     }
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject2.layer == LayerMask.NameToLayer("Bomb") || gameObject2.layer == LayerMask.NameToLayer("InstalledBomb"))
             {
                 GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject2.layer);
                 if (null != impact)
                 {
                     Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                     P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject2.layer, hitInfo.point, hitInfo.normal);
                 }
             }
             isValidRange = false;
         }
     }
 }
    private void Shoot()
    {
        Vector2 vector    = accuracy.CalcDeflection();
        int     layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb"));
        Ray     ray       = cam.ScreenPointToRay(new Vector3(vector.x, vector.y, 0f));

        if (!Application.loadedLevelName.Contains("Tutor"))
        {
            P2PManager.Instance.SendPEER_CANNON_FIRE(BrickSeq, shooter, ray.origin, ray.direction);
        }
        if (Physics.Raycast(ray, out RaycastHit hitInfo, Range, layerMask))
        {
            GameObject gameObject = hitInfo.transform.gameObject;
            if (gameObject.layer == LayerMask.NameToLayer("Brick") || gameObject.layer == LayerMask.NameToLayer("Chunk"))
            {
                GameObject    gameObject2   = null;
                BrickProperty brickProperty = null;
                GameObject    original      = null;
                Texture2D     mark          = null;
                if (gameObject.layer == LayerMask.NameToLayer("Brick"))
                {
                    BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject.transform, includeInactive: false);
                    if (allComponents.Length > 0)
                    {
                        brickProperty = allComponents[0];
                    }
                }
                else
                {
                    gameObject2 = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                    if (null != gameObject2)
                    {
                        brickProperty = gameObject2.GetComponent <BrickProperty>();
                    }
                }
                if (null != brickProperty)
                {
                    P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: true);
                    mark     = BrickManager.Instance.GetBulletMark(brickProperty.Index);
                    original = BrickManager.Instance.GetBulletImpact(brickProperty.Index);
                    Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index);
                    if (brick != null && brick.destructible)
                    {
                        brickProperty.Hit((int)AtkPow);
                        if (brickProperty.HitPoint <= 0)
                        {
                            CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq);
                            mark     = null;
                            original = null;
                            if (brickProperty.Index == 115 || brickProperty.Index == 193)
                            {
                                ExplosionUtil.CheckMyself(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3);
                                ExplosionUtil.CheckBoxmen(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3, Rigidity);
                                ExplosionUtil.CheckMonster(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                                ExplosionUtil.CheckDestructibles(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                            }
                        }
                        else
                        {
                            P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint);
                        }
                    }
                }
                if (null != gameObject2 && null != mark)
                {
                    GameObject gameObject3 = Object.Instantiate((Object)BrickManager.Instance.bulletMark, hitInfo.point, Quaternion.FromToRotation(Vector3.forward, -hitInfo.normal)) as GameObject;
                    BulletMark component   = gameObject3.GetComponent <BulletMark>();
                    component.GenerateDecal(mark, gameObject, gameObject2);
                }
                if (null != original)
                {
                    Object.Instantiate((Object)original, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("BoxMan"))
            {
                PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject.transform, includeInactive: false);
                TPController[]   allComponents3 = Recursively.GetAllComponents <TPController>(gameObject.transform, includeInactive: false);
                if (allComponents2.Length != 1)
                {
                    Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non ");
                }
                if (allComponents3.Length != 1)
                {
                    Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non ");
                }
                PlayerProperty playerProperty = null;
                TPController   tPController   = null;
                if (allComponents2.Length > 0)
                {
                    playerProperty = allComponents2[0];
                }
                if (allComponents3.Length > 0)
                {
                    tPController = allComponents3[0];
                }
                if (playerProperty != null && tPController != null)
                {
                    int     num        = 0;
                    HitPart component2 = gameObject.GetComponent <HitPart>();
                    if (component2 != null)
                    {
                        bool flag = false;
                        if (component2.part == HitPart.TYPE.HEAD)
                        {
                            int layerMask2 = 1 << LayerMask.NameToLayer("Brain");
                            if (Physics.Raycast(ray, out RaycastHit hitInfo2, Range, layerMask2))
                            {
                                if (playerProperty.Desc.IsLucky())
                                {
                                    flag = true;
                                }
                                else
                                {
                                    component2 = hitInfo2.transform.gameObject.GetComponent <HitPart>();
                                }
                            }
                        }
                        if (component2.GetHitImpact() != null)
                        {
                            GameObject original2 = component2.GetHitImpact();
                            if (flag && null != component2.luckyImpact)
                            {
                                original2 = component2.luckyImpact;
                            }
                            Object.Instantiate((Object)original2, hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        num = (int)(AtkPow * component2.damageFactor);
                        if (!playerProperty.IsHostile())
                        {
                            num = 0;
                        }
                        P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component2.part, hitInfo.point, hitInfo.normal, flag, 0, ray.direction);
                        P2PManager.Instance.SendPEER_SHOOT(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy, (int)component2.part, flag, rateOfFire);
                    }
                    tPController.GetHit(num, playerProperty.Desc.Seq);
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("Mon"))
            {
                MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject.transform, includeInactive: false);
                MonProperty   monProperty    = null;
                if (allComponents4.Length > 0)
                {
                    monProperty = allComponents4[0];
                }
                if (monProperty != null)
                {
                    HitPart component3 = gameObject.GetComponent <HitPart>();
                    if (component3 != null && (MyInfoManager.Instance.Slot >= 4 || !monProperty.Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || monProperty.Desc.bRedTeam))
                    {
                        if (component3.GetHitImpact() != null)
                        {
                            Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        if (monProperty.Desc.Xp > 0)
                        {
                            int num2 = (int)(AtkPow * component3.damageFactor);
                            num2 += DefenseManager.Instance.AddAtkPower;
                            if (monProperty.Desc.bHalfDamage)
                            {
                                num2 /= 2;
                            }
                            MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, hitInfo.point, hitInfo.normal, -1);
                        }
                    }
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject.layer == LayerMask.NameToLayer("Bomb") || gameObject.layer == LayerMask.NameToLayer("InstalledBomb"))
            {
                GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject.layer);
                if (null != impact)
                {
                    Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                    P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject.layer, hitInfo.point, hitInfo.normal);
                }
            }
        }
    }
    private void Update()
    {
        if (BrickManager.Instance.IsLoaded && !bDie && (MyInfoManager.Instance.Seq == RoomManager.Instance.Master || readyP2P != 0))
        {
            if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master)
            {
                vCur = UpdateAI();
            }
            else
            {
                vCur = UpdateAIP2P();
            }
            base.transform.position = vCur;
            CheckPositionPrev();
            if (bHitMark)
            {
                timerHitMark += Time.deltaTime;
                float num = timerHitMark;
                num *= 4f;
                if (num > 1f)
                {
                    num = 2f - num;
                }
                float    num2     = Mathf.Lerp(0f, orgColor.g, num);
                float    num3     = Mathf.Lerp(0f, orgColor.b, num);
                Material material = smr.material;
                float    g        = orgColor.g - num2;
                float    b        = orgColor.b - num3;
                Color    color    = smr.material.color;
                material.color = new Color(1f, g, b, color.a);
                if (timerHitMark > 0.5f)
                {
                    Material material2 = smr.material;
                    float    r         = orgColor.r;
                    float    g2        = orgColor.g;
                    float    b2        = orgColor.b;
                    Color    color2    = smr.material.color;
                    material2.color = new Color(r, g2, b2, color2.a);
                    bHitMark        = false;
                }
            }
            if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master && readyP2P == 2)
            {
                timerSendP2PMove += Time.deltaTime;
                if (timerSendP2PMove >= 0.4f)
                {
                    timerSendP2PMove = 0f;
                    P2PManager instance = P2PManager.Instance;
                    int        seq      = monProp.Desc.Seq;
                    float      x        = vCur.x;
                    float      y        = vCur.y;
                    float      z        = vCur.z;
                    Vector3    forward  = base.transform.forward;
                    float      x2       = forward.x;
                    Vector3    forward2 = base.transform.forward;
                    float      y2       = forward2.y;
                    Vector3    forward3 = base.transform.forward;
                    instance.SendPEER_MON_MOVE(seq, x, y, z, x2, y2, forward3.z);
                }
            }
            CheckColHit();
            CheckHit();
            if (eff != null)
            {
                eff.transform.position = base.transform.position;
            }
            switch (monType)
            {
            case MON_TYPE.FLASH:
                updateSkill();
                break;

            case MON_TYPE.HIDE:
                updateHide();
                break;

            case MON_TYPE.HEAL:
                updateSelfHeal();
                break;

            case MON_TYPE.BOSS:
                updateAreaHeal();
                break;
            }
            if (bArrived)
            {
                MonProperty component = GetComponent <MonProperty>();
                if (component.Desc.tblID == 4)
                {
                    MonManager.Instance.BossUnVisibleAll(component.Desc.bRedTeam);
                }
                if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master)
                {
                    P2PManager.Instance.SendPEER_MON_DIE(component.Desc.Seq, arrived: true);
                    if (component.Desc.bRedTeam)
                    {
                        DefenseManager.Instance.CoreLifeBlue -= monProp.Desc.coreToDmg;
                    }
                    else
                    {
                        DefenseManager.Instance.CoreLifeRed -= monProp.Desc.coreToDmg;
                    }
                    CSNetManager.Instance.Sock.SendCS_CORE_HP_REQ(DefenseManager.Instance.CoreLifeRed, DefenseManager.Instance.CoreLifeBlue);
                }
                MonManager.Instance.Remove(component.Desc.Seq);
                bDie = true;
            }
        }
    }
    public GameObject AddMon(MonDesc desc)
    {
        SpawnerDesc spawner = BrickManager.Instance.GetSpawner(Brick.SPAWNER_TYPE.DEFENCE_SPAWNER, 0);

        if (spawner == null)
        {
            return(null);
        }
        Vector3    position   = spawner.position;
        GameObject gameObject = null;

        if (desc.tblID == 0)
        {
            gameObject = (Object.Instantiate((Object)bee01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject);
        }
        else if (desc.tblID == 1)
        {
            gameObject = (Object.Instantiate((Object)bee02, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject);
        }
        else if (desc.tblID == 2)
        {
            gameObject = (Object.Instantiate((Object)intruder01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject);
        }
        else if (desc.tblID == 3)
        {
            gameObject = (Object.Instantiate((Object)bomber01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject);
        }
        else if (desc.tblID == 4)
        {
            gameObject = (Object.Instantiate((Object)champ01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject);
        }
        if (null == gameObject)
        {
            Debug.LogError("Fail to instantiate a monster: " + desc.tblID);
            return(null);
        }
        MonProperty component = gameObject.GetComponent <MonProperty>();

        if (null == component)
        {
            Object.DestroyImmediate(gameObject);
            Debug.LogError("New monster doesnt have MonProperty: " + desc.tblID);
            return(null);
        }
        component.Desc           = desc;
        component.Desc.coreToDmg = DefenseManager.Instance.GetMonTable(desc.tblID).toCoreDmg;
        component.Desc.InitLog();
        component.InvisiblePosition = position;
        MonAI aIClass = Instance.GetAIClass(gameObject, desc.tblID);

        if (null == aIClass)
        {
            Object.DestroyImmediate(gameObject);
            Debug.LogError("New monster doesnt have monAI: " + desc.tblID);
            return(null);
        }
        aIClass.StartPosition = position;
        aIClass.moveSpeed     = DefenseManager.Instance.GetMonTable(desc.typeID).MoveSpeed;
        aIClass.MonType       = (MonAI.MON_TYPE)desc.typeID;
        dicMon.Add(desc.Seq, gameObject);
        aIClass.changeTexture();
        if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master)
        {
            P2PManager instance = P2PManager.Instance;
            int        tblID    = desc.tblID;
            int        typeID   = desc.typeID;
            int        seq      = desc.Seq;
            float      x        = position.x;
            float      y        = position.y;
            float      z        = position.z;
            Vector3    forward  = gameObject.transform.forward;
            float      x2       = forward.x;
            Vector3    forward2 = gameObject.transform.forward;
            float      y2       = forward2.y;
            Vector3    forward3 = gameObject.transform.forward;
            instance.SendPEER_MON_GEN(tblID, typeID, seq, x, y, z, x2, y2, forward3.z);
        }
        return(gameObject);
    }