Exemplo n.º 1
0
        public override void OnEnter(ActorObj actor)
        {
            if (actor == null)
            {
                return;
            }

            m_state = ACTOR_STATE.AS_ATTACK;

            m_actor      = actor;
            m_curSkillID = m_actor.castSkillID;

            //if (m_actor != null)
            //{
            //    m_actor.m_bIsInAttack = true;
            //}

            LuaTable skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(m_curSkillID);

            if (skillDesc == null)
            {
                return;
            }
            SkillClassDisplayDesc skillClass = null;

            if (skillDesc != null)
            {
                //if (skillDesc.e_type_1 == 1)
                {
                    skillClass = m_gameDBMgr.GetSkillClassDisplayDesc(skillDesc.Get <int>("skillDisplayID"));
                }
            }

            m_curSkillDesc = skillDesc;

            GameObject obj = null;

            if (skillClass != null)
            {
                obj = CoreEntry.gGameObjPoolMgr.InstantiateSkillBase("Skill/SkillBase");; //(GameObject)Instantiate(CoreEntry.gResLoader.LoadResource("Skill/SkillBase"));
            }
            else
            {
                // LogMgr.Log("Can not found skillClass skillDesc.skillDisplayID: " + skillDesc.Get<int>("skillDisplayID") + " ActorObj: " + m_actor);
                return;
            }

            if (obj == null)
            {
                return;
            }

            //设置脚本组件
            SkillBase skillBase = obj.GetComponent <SkillBase>();

            ActorObj hitObj = null;

            if (CurParam != null)
            {
                hitObj = CurParam.HitActor;
            }

            skillBase.Init(actor, hitObj, m_curSkillID);

            m_curSkillBase = skillBase;


            //霸体时间。不可以转换为其他状态,除了死亡
            if (skillDesc.Get <int>("stiff_time") > 0)
            {
                StartEndure();
            }

            //m_isSkillCastEnd = false;
            if (m_curSkillDesc.Get <int>("stiff_time") > 0)
            {
                CancelInvoke("SkillCastEnd");
                Invoke("SkillCastEnd", m_curSkillDesc.Get <int>("stiff_time") / 1000f);
            }

            //一个人的时候触发关门
            if (m_actor.mActorType == ActorType.AT_BOSS)
            {
                CoreEntry.gSceneMgr.CloseDoor();
            }

            if (null != skillDesc && skillDesc.Get <int>("showtype") == (int)SkillShowType.ST_HUANLING && skillDesc.Get <int>("subtype") != (int)SkillType.SKILL_NORMAL)
            {
                bool isHuanlingSkill = false;
                if (actor.mActorType == ActorType.AT_LOCAL_PLAYER)
                {
                    isHuanlingSkill = true;
                }
                else if (actor.mActorType == ActorType.AT_PET)
                {
                    PetObj pet = actor as PetObj;
                    if (pet != null && null != pet.m_MasterActor && pet.m_MasterActor.mActorType == ActorType.AT_LOCAL_PLAYER)
                    {
                        isHuanlingSkill = true;
                    }
                }

                if (isHuanlingSkill)
                {
                    EventParameter param = EventParameter.Get();
                    param.intParameter    = skillDesc.Get <int>("showtype");
                    param.stringParameter = skillDesc.Get <string>("name");
                    CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_FLY_SKILL, param);
                }
            }
        }