コード例 #1
0
        /// <summary>
        /// 角色进场。
        /// </summary>
        public void OnGameEventMonsterLoad(GameEvent ge, EventParameter parameter)
        {
            MonsterObj      obj = parameter.objParameter as MonsterObj;
            List <LuaTable> anis;

            if (!m_CacheMonsterAnimation.TryGetValue(obj.ConfigID, out anis))
            {
                return;
            }

            int map = MapMgr.Instance.EnterMapId;

            for (int i = 0; i < anis.Count; ++i)
            {
                LuaTable cfg = anis[i];
                if (cfg.Get <int>("monster") == MONSTER_TYPE_BORN)
                {
                    int sceneid = cfg.Get <int>("sceneid");
                    if (sceneid == 0 || sceneid == map)
                    {
                        TryPlayerCutScene(cfg);
                        break;
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 角色死亡。
        /// </summary>
        public void OnGameEventMonsterDeath(GameEvent ge, EventParameter parameter)
        {
            ActorObj   actor   = parameter.goParameter.GetComponent <ActorObj>();
            MonsterObj monster = actor as MonsterObj;

            if (monster == null)
            {
                return;
            }

            List <LuaTable> anis;

            if (!m_CacheMonsterAnimation.TryGetValue(monster.ConfigID, out anis))
            {
                return;
            }

            int map = MapMgr.Instance.EnterMapId;

            for (int i = 0; i < anis.Count; ++i)
            {
                LuaTable cfg = anis[i];
                if (cfg.Get <int>("monster") == MONSTER_TYPE_DIE)
                {
                    int sceneid = cfg.Get <int>("sceneid");
                    if (sceneid == 0 || sceneid == map)
                    {
                        TryPlayerCutScene(cfg);
                        break;
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 获取最近的角色。
        /// </summary>
        /// <param name="objList">角色列表。</param>
        /// <param name="dis">距离限制。</param>
        /// <returns>最近的角色。</returns>
        public ActorObj GetNearestActor(List <ActorObj> objList, ref float dis, int mid = 0)
        {
            ActorObj selectActor = null;

            for (int i = 0; i < objList.Count; i++)
            {
                //对IOS出现怪物不动 报错的异常  进行错误处理 隐身或死亡状态
                ActorObj actor = objList[i];
                if (null == actor)
                {
                    continue;
                }
                if (!GameLogicMgr.checkValid(actor.gameObject) || actor.IsInStealthState(this) || actor.IsDeath())
                {
                    continue;
                }

                //PK模式的玩家对象筛选
                if (actor.mActorType == ActorType.AT_REMOTE_PLAYER || actor.mActorType == ActorType.AT_LOCAL_PLAYER || actor.mActorType == ActorType.AT_MECHANICS)
                {
                    //排除玩家自身、宠物和不可攻击的玩家
                    if (actor.mActorType != ActorType.AT_REMOTE_PLAYER || !PlayerData.Instance.IsCanAttack(actor as OtherPlayer))
                    {
                        continue;
                    }
                }

                //距离最近
                float distance = Vector3.Distance(transform.position, actor.transform.position);
                if (distance > dis)
                {
                    continue;
                }

                if ((actor is MonsterObj) && actor.IsSameCamp())
                {
                    continue;
                }

                if (mid != 0)
                {
                    if (actor.mActorType == ActorType.AT_MONSTER || actor.mActorType == ActorType.AT_BOSS)
                    {
                        MonsterObj monsterobj = actor as MonsterObj;
                        if (monsterobj.ConfigID == mid)
                        {
                            dis         = distance;
                            selectActor = actor;
                        }
                    }
                    continue;
                }

                dis         = distance;
                selectActor = actor;
            }

            return(selectActor);
        }
コード例 #4
0
 /// <summary>
 /// 获取当前的BOSS对象。
 /// </summary>
 /// <returns>BOSS对象。</returns>
 public ActorObj GetBoss()
 {
     for (int i = 0; i < mMonsterList.Count; i++)
     {
         MonsterObj monster = mMonsterList[i] as MonsterObj;
         if (monster.IsBoss)
         {
             return(monster);
         }
     }
     return(null);
 }
コード例 #5
0
ファイル: BehitState.cs プロジェクト: midgithub/notes
        public override void OnEnter(ActorObj actor)
        {
            if (actor == null)
            {
                return;
            }

            //塔不没有受击
            bool bChangeColor = true;

            m_state = ACTOR_STATE.AS_BEHIT;

            m_actor     = actor;
            m_transform = actor.transform;

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

            m_behitParame = m_actor.damageBebitParam;

            monsterObj = m_actor as MonsterObj;
            if (monsterObj != null)
            {
                if (monsterObj.IsVip)
                {
                    monsterObj.VipIsUnderAttack();
                }
            }

            if (CurParam != null && CurParam != null)
            {
                m_curSkillID = CurParam.skillID;
            }

            //m_GameDataBase = CoreEntry.gGameDBMgr;

            if (CurParam != null && CurParam.AttackActor != null)
            {
                m_attack = CurParam.AttackActor;
            }


            m_groundLayerMask = 1 << LayerMask.NameToLayer("ground");



            //m_baseTool = CoreEntry.gBaseTool;

            m_gravityMotionBase = this.gameObject.GetComponent <GravityMotionBase>();

            //m_gravityMotionBase.enabled = true;

            //m_ActionEfxList = new List<EfxAttachAction>();

            //修改shader
            //if (m_actor.ChangeShader("Mobile/BeingHitted"))


            if (monsterObj && monsterObj.m_bIsTower)
            {
                bChangeColor = false;
            }

            if (bChangeColor && m_actor.m_bUseBehitColor && m_actor.mActorType == ActorType.AT_MONSTER &&
                m_attack != null && m_attack is PlayerObj)
            {
                m_actor.SetBrightenShader();

                Invoke("RecoverShader", 0.2f);
            }

            //  if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.AddShader("DZSMobile/Balloon"))
            ////  if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.ChangeShader("DZSMobile/Balloon"))
            //  {
            //      Invoke("RemoveShader", 0.2f);
            //  }

            if (m_actor.mActorType == ActorType.AT_BOSS && m_actor.IsInQiJue())
            {
                CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_Boss_QiJue, null);
            }


            m_curRadius = m_actor.GetColliderRadius();

            //如果浮空,就给浮空处理受击
            if (m_gravityMotionBase != null && m_gravityMotionBase.isUseGravityState)
            {
                m_gravityMotionBase.DoBehit();
            }
            else
            {
                m_bHitBack            = false;
                m_isNonControlProtect = false;
                isNonControl          = false;
                m_isHitDownState      = false;

                //小怪倒地被击
                if (m_gravityMotionBase != null)
                {
                    m_gravityMotionBase.BreakExitBehitState();
                }

                //面向被击玩家
                // if (m_actor.actorCreatureDisplayDesc.chIsBehitNotLookAtTarget == 0)
                if (m_actor.mActorType != ActorType.AT_LOCAL_PLAYER &&
                    m_actor.mActorType != ActorType.AT_MECHANICS && //机械类不转向
                    m_attack != null &&
                    !(m_actor is MonsterObj && !m_actor.bHitTurn))
                {
                    //自动释放法宝技能
                    CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_AutoUseMagicKeySkill, null);
                    //只旋转Y轴
                    Vector3 lookPos = new Vector3(m_attack.transform.position.x,
                                                  m_transform.position.y, m_attack.transform.position.z);

                    m_transform.LookAt(lookPos);
                }

                DoBehitEx();
            }
        }
コード例 #6
0
        //class objectMoveInfo
        //{
        //    public GameObject obj;
        //    public Vector3 srcPos;
        //};

        void DoFocusAction()
        {
            //计算位移距离
            FunDamageNode fun = m_oneDamageInfo.damageNode.funDamage;

            //聚怪中心点
            Vector3 centerPos = m_transform.position + m_transform.forward.normalized * fun.offDistance;

            //中间是否有空气墙
            Vector3 wallPos = CoreEntry.gBaseTool.GetWallHitPoint(m_transform.position, centerPos);

            if (!wallPos.Equals(centerPos))
            {
                //存在空气墙
                Vector3 dist = wallPos - m_transform.position;
                dist = dist * 0.9f;
                //Vector3 wallGroundPos = CoreEntry.gBaseTool.GetGroundPoint(m_transform.position + dist);
                centerPos = CoreEntry.gBaseTool.GetGroundPoint(centerPos);
            }

            if (centerPos.Equals(Vector3.zero))
            {
                centerPos = m_transform.position;
            }

            //需要聚集的怪物
            List <ActorObj> actors = CoreEntry.gActorMgr.GetAllMonsterActors();

            for (int i = 0; i < actors.Count; i++)
            {
                //对IOS出现怪物不动 报错的异常  进行错误处理
                if (GameLogicMgr.checkValid(actors[i].gameObject) == false)
                {
                    continue;
                }
                GameObject obj       = actors[i].gameObject;
                ActorObj   actorBase = actors[i];


                //塔不没有受击
                MonsterObj monsterObj = obj.GetComponent <MonsterObj>();
                if (monsterObj && monsterObj.m_bIsTower)
                {
                    continue;
                }

                //bool isSkillSuccess = false;

                if (!m_skillBase.m_actor.IsAimActorType(actorBase))
                {
                    continue;
                }

                // 有霸体的不能被拉动
                if (actorBase.IsActorEndure())
                {
                    continue;
                }

                //伤害对象
                if (CoreEntry.gBaseTool.IsPointInCircleXZ(centerPos, obj.transform.position, fun.radius, 1f))
                {
                    //isSkillSuccess = true;
                    Go.to(obj.transform, 0.4f, new GoTweenConfig().position(centerPos));
                }
            }

            StartCoroutine(destroyBox());
        }
コード例 #7
0
        //float m_lastFootTime = 0;

        public override void OnEnter(ActorObj actorBase)
        {
            if (actorBase.mActorType == ActorType.AT_TRAP || actorBase.mActorType == ActorType.AT_SCENE_BUFF)
            {
                return;
            }
            MonsterObj monsterObj = this.gameObject.GetComponent <MonsterObj>();

            if (monsterObj && monsterObj.m_bIsTower)
            {
                return;
            }

            m_state = ACTOR_STATE.AS_RUN;

            m_actor = actorBase;
            if (m_actor == null)
            {
                return;
            }
            // m_actor.PlayAction(m_actor.modelInfo.san_walk);

            if (m_actor.curCastSkillID > 0)
            {
                LuaTable skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(m_actor.curCastSkillID);
                if (skillDesc != null)
                {
                    if (skillDesc.Get <int>("subtype") != (int)SkillType.SKILL_XUANFANZHAN)
                    {
                        if (m_actor != null)
                        {
                            m_actor.PlayAction(m_actor.ModelConfig.Get <string>("san_walk"));
                        }
                    }
                }
            }
            else
            {
                if (StoryMgr.IsInStory)
                {
                    if (string.IsNullOrEmpty(m_actor.ModelConfig.Get <string>("san_walk")))
                    {
                        m_actor.PlayAction("walk");
                    }
                    else
                    {
                        m_actor.PlayAction(m_actor.ModelConfig.Get <string>("san_walk"));
                    }
                }
                else
                {
                    m_actor.PlayAction(m_actor.ModelConfig.Get <string>("san_walk"));
                }
            }

            //设置跑步速度
            if (m_actor.mBaseAttr != null)
            {
                if (m_actor.mBaseAttr.Speed > 0)
                {
                    m_actor.SetSpeed(m_actor.mBaseAttr.Speed);
                }
            }
            else
            {
                m_actor.SetSpeed(1.0f);
            }
        }
コード例 #8
0
ファイル: SceneLoader.cs プロジェクト: midgithub/notes
        /// <summary>
        /// 加载怪物
        /// </summary>
        /// <param name="monsterStruct"></param>
        /// <returns></returns>
        public GameObject LoadMonster(MsgData_sSceneObjectEnterMonster monsterStruct)
        {
            if (MainPanelMgr.Instance.bInsertStatus)
            {
                return(null);
            }
            LuaTable cfg = ConfigManager.Instance.Actor.GetMonsterConfig(monsterStruct.ConfigID);

            if (null == cfg)
            {
                return(null);
            }

            int      modleid  = cfg.Get <int>("modelId");
            LuaTable modelCfg = ConfigManager.Instance.Common.GetModelConfig(modleid);

            Vector3    position   = CommonTools.ServerPosToClient(monsterStruct.PosX, monsterStruct.PosY);
            Vector3    eulerAngle = CommonTools.ServerDirToClient(monsterStruct.Dir);
            GameObject obj        = CreateGameObject(modleid, position, eulerAngle);

            if (obj == null)
            {
                Object oj = CoreEntry.gResLoader.LoadResource("Animation/monster/mon041_shouchengshibing/mon041_shouchengshibing_pre");
                if (oj != null)
                {
                    obj = (GameObject)Instantiate(oj);
                }
            }

            {
                float s = cfg.Get <float>("scale");
                obj.transform.localScale = new Vector3(s, s, s);
                ParticleScaler[] scalers = obj.GetComponentsInChildren <ParticleScaler>(true);
                for (int i = 0; i < scalers.Length; i++)
                {
                    scalers[i].particleScale = s;
                }

                ActorObj actorObject = null;
                actorObject = obj.GetComponent <ActorObj>();
                if (null != actorObject)
                {
                    Object.DestroyImmediate(actorObject);
                }

                MonsterObj monster = obj.AddComponent <MonsterObj>();
                if (monster != null)
                {
                    monster.Init(modleid, monsterStruct.ConfigID, monsterStruct.Guid);
                    monster.ServerID = monsterStruct.Guid;
                    monster.InitAttr(monsterStruct);
                    monster.mBaseAttr.Name  = cfg.Get <string>("name");
                    monster.mBaseAttr.Level = cfg.Get <int>("level");
                    monster.Faction         = monsterStruct.Faction;
                    CoreEntry.gActorMgr.AddActorObj(monster);
                    StoryTriggerOnBossBorn.CheckRegister();
                }
                else
                {
                    //Debug.LogError("monster null");
                    return(obj);
                }

                EventParameter parameter = EventParameter.Get();
                parameter.goParameter  = obj;
                parameter.objParameter = monster;
                CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_MONSTER_LOADED, parameter);

                return(obj);
            }
        }