示例#1
0
        public static ISkillSystem CreateSkillSystem(IClientGlobal clientGlobal)
        {
            if (m_SkillSys == null)
            {
                m_SkillSys = new SkillSystem(clientGlobal);
            }

            return(m_SkillSys);
        }
示例#2
0
        // 退出状态
        public override void Leave()
        {
            PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart;

            if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster()))
            {
                //  Log.Trace("Leave ..." + this.GetType().Name);
            }
        }
示例#3
0
        public override void Play(ISkillAttacker attacker, SkillEffect se)
        {
            if (attacker == null)
            {
                return;
            }
            IEntity en = attacker.GetGameObject();

            if (en == null)
            {
                return;
            }
            if (!SkillSystem.GetClientGlobal().IsMainPlayer(en))
            {//不是主角不震屏
                return;
            }
            ShakeCameraNodeProp prop = m_NodeProp as ShakeCameraNodeProp;

            if (prop == null)
            {
                return;
            }
            IRenderSystem renderSys = RareEngine.Instance().GetRenderSystem();

            if (renderSys == null)
            {
                Log.Error("RenderSystem is null!");
                return;
            }
            string  camName = "MainCamera";
            ICamera cam     = renderSys.GetCamera(ref camName);

            if (cam != null)
            {
                ICameraCtrl cc = cam.GetCameraCtrl();
                if (cc != null)
                {
                    //   public float duration = 0.2f;//持续时间
                    //   public float strength = 0.5f;//振幅
                    //   public int vibrato = 10;//频率
                    //@brief 开始振动
                    //@param fAmplitude 振幅
                    //@param fFrequency 频率
                    //@param fCycle 周期
                    //@param fTime 持续时间

                    cc.StartShake(prop.strength, prop.vibrato, 1, prop.duration);
                }
            }
            else
            {
                //编辑器代码实现
                Camera.main.DOShakePosition(prop.duration, prop.strength, prop.vibrato, 0);
            }
        }
示例#4
0
        public SkillStateBase(Engine.Utility.StateMachine <ISkillPart> machine, ISkillPart skillpart)
        {
            m_Statemachine = machine;
            m_SkillPart    = skillpart;
            if (skillpart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart skill = skillpart as PlayerSkillPart;

                m_isMainPlayer = SkillSystem.GetClientGlobal().IsMainPlayer(skill.GetMaster());
                m_caster       = skill.Caster;
            }
        }
示例#5
0
        public bool Conform(INPC en)
        {
            IClientGlobal cg        = SkillSystem.GetClientGlobal();
            IEntity       player    = cg.MainPlayer;
            ISkillPart    skillPart = (ISkillPart)player.GetPart(EntityPart.Skill);
            SkillDatabase db        = skillPart.GetCurSkillDataBase();

            if (db != null)
            {
                float dis = EntitySystem.EntityHelper.GetEntityDistance(player, en);
                if (dis <= db.dwAttackDis)
                {
                    return(true);
                }
            }
            return(false);
        }
        void ShowFlashColor(IEntity defender)
        {
            Profiler.BeginSample("ShowFlashColor");
            INPC npc = defender as INPC;

            if (npc != null)
            {
                int         baseID = npc.GetProp((int)EntityProp.BaseID);
                NpcDataBase npcDb  = GameTableManager.Instance.GetTableItem <NpcDataBase>((uint)baseID);
                if (npcDb != null)
                {
                    uint monsterType = npcDb.dwMonsterType;
                    if (monsterType == 0)
                    {
                        return;
                    }
                    List <uint> configList = SkillSystem.GetColorList(monsterType);
                    if (configList != null)
                    {
                        if (configList.Count > 0)
                        {
                            uint show = configList[0];
                            if (show == 1)
                            {
                                if (configList.Count != 6)
                                {
                                    // Log.Error("全局配置FlashColor  长度错误 ,检查配置");
                                }
                                else
                                {
                                    FlashColor fc = new FlashColor();
                                    fc.color = new Color(configList[2] * 1.0f / 255, configList[3] * 1.0f / 255, configList[4] * 1.0f / 255, configList[5] * 1.0f / 255);
                                    fc.fLift = configList[1] * 1.0f / 1000;
                                    defender.SendMessage(EntityMessage.EntityCommand_FlashColor, fc);
                                    // Log.Error("flash color " + defender.GetName());
                                }
                            }
                        }
                    }
                }
            }
            Profiler.EndSample();
        }
示例#7
0
        // 进入状态
        public override void Enter(object param)
        {
            IEntity target = skillPart.GetSkillTarget();

            // 只有主角会进入战斗状态
            if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART && EntitySystem.EntityHelper.IsMainPlayer(skillPart.GetMaster()))
            {
                PlayerSkillPart playerSkill = skillPart as PlayerSkillPart;
                if (playerSkill != null)
                {
                    playerSkill.SkillStartPlayTime = Time.realtimeSinceStartup;
                    playerSkill.SetFighting(true);
                }
            }
            SkillDatabase skilltable = skillPart.GetCurSkillDataBase();

            if (skilltable == null)
            {
                return;
            }
            // 朝向目标
            if (target != null)
            {
                if (skilltable.targetType != (int)SkillTargetType.TargetForwardPoint)
                {
                    skillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_LookTarget, target.GetPos());
                }
            }

            database = skilltable;
            //准备时间结束 发送结束消息
            if (SkillSystem.GetClientGlobal().IsMainPlayer(skillPart.GetMaster()) && skilltable.dwReadTime > 0) // 非瞬发技能
            {                                                                                                   //读条技能
                Client.stUninterruptMagic evenparam = new Client.stUninterruptMagic();
                evenparam.time = database.dwReadTime;
                evenparam.type = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ;
                evenparam.uid  = skillPart.GetMaster().GetUID();
                EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, evenparam);
            }

            preparetime = 0;
        }
示例#8
0
        // 退出状态
        public override void Leave()
        {
            PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart;

            if (playerSkill.IsMainPlayer())
            {
                Log.LogGroup("ZDY", " main player leave skilloverstate");
            }
            //SkillEffect skillEffect = m_caster.EffectNode;
            //if(skillEffect != null)
            //{//此处调用stop 会影响sing技能的放置特效 此处无意义 如果以后要调用stop 可以加break函数区分stop
            //    skillEffect.Stop();
            //}
            playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f);

            if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster()))
            {
                stForbiddenJoystick info = new stForbiddenJoystick();
                info.playerID  = playerSkill.Master.GetUID();
                info.bFobidden = false;
                EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info);
            }
        }
示例#9
0
        public void ReceiveBuffList(List <stStateValue> list)
        {
            IEntity en = m_Master;

            for (int i = 0; i < list.Count; i++)
            {
                var state = list[i];
                ChangeCreatureByBuff(en, state.baseid, true);

                //客户端使用毫秒的精度
                state.ltime = state.ltime * 1000;
                stBuffData buffData;
                if (buffDic.TryGetValue(state.thisid, out buffData))
                {
                    if (buffData.buffDataDic.ContainsKey(state.thisid))
                    {
                        buffData.buffDataDic[state.thisid] = state;
                    }
                    else
                    {
                        buffData.buffDataDic.Add(state.thisid, state);
                    }
                    // Buff Update
                    // 更新时间
                }
                else
                {
                    buffData             = new stBuffData();
                    buffData.buffid      = state.thisid;
                    buffData.buffDataDic = new Dictionary <uint, stStateValue>();
                    buffData.buffDataDic.Add(state.thisid, state);
                    buffDic.Add(state.thisid, buffData);
                    AddBuffEffect(state.baseid, state.thisid);


                    if (en != null)
                    {
                        stAddBuff addBuff = new stAddBuff();
                        addBuff.buffid     = state.baseid;
                        addBuff.uid        = en.GetUID();
                        addBuff.level      = state.level;
                        addBuff.lTime      = state.ltime;
                        addBuff.buffThisID = state.thisid;
                        EventEngine.Instance().DispatchEvent((int)GameEventID.BUFF_ADDTOTARGETBUFF, addBuff);
                    }
                }
            }
            if (list.Count > 0)
            {
                int          len   = list.Count;
                stStateValue state = list[len - 1];

                BuffDataBase bdb = GameTableManager.Instance.GetTableItem <BuffDataBase>(state.baseid);
                if (bdb != null)
                {
                    string str = bdb.buffColor;
                    Color  c   = SkillSystem.GetColorByStr(str);
                    if (c == null)
                    {
                        return;
                    }
                    if (en != null)
                    {
                        m_buffColorEntity = en;
                        en.SendMessage(EntityMessage.EntityCommond_SetColor, c);
                        if (TimerAxis.Instance().IsExist(m_ucolorCountDownTimerID, this))
                        {
                            TimerAxis.Instance().KillTimer(m_ucolorCountDownTimerID, this);
                        }

                        TimerAxis.Instance().SetTimer(m_ucolorCountDownTimerID, state.ltime, this, 1);
                    }
                }
            }
        }
示例#10
0
        public override void Play(ISkillAttacker attacker, SkillEffect se)
        {
            m_ef = se;
            Transform attacker_node = attacker.GetRoot();

            if (attacker_node == null)
            {
                return;
            }


            PlaceFxNodeProp prop = m_NodeProp as PlaceFxNodeProp;

            if (prop == null)
            {
                return;
            }
            // Engine.Utility.Log.Error("play PlaceFxNodeProp {0}", prop.fx_name);
            string stateName  = prop.nodeState;
            int    stateIndex = 0;

            if (!string.IsNullOrEmpty(stateName))
            {
                Client.SkillState state = SkillSystem.GetSkillStateByString(stateName);
                stateIndex = (int)state - 1;
            }
            if (stateIndex < 0)
            {
                stateIndex = 0;
            }
            Vector3 pos = attacker_node.TransformPoint(prop.position);
            //Vector3 vscale = attacker_node.localScale * prop.scale;
            Vector3 vscale = Vector3.one * prop.scale;
            Vector3 angles = attacker_node.eulerAngles;

            angles += prop.rotation;

            if (prop.by_target)
            {
                pos = se.GetPlayEffectInitPos() + prop.position;
            }
            int level = 0;

            if (attacker != null)
            {
                if (attacker.GetSkillPart() != null)
                {
                    level = attacker.GetSkillPart().FxLevel;
                }
            }
            m_uEffectID = helper.ReqPlayFx(prop.fx_name, pos, angles, vscale, level);
            m_startTime = Time.time;
            uint skillID = se.CurSkillID;

            m_curDb = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(skillID, 1);
            if (m_curDb != null)
            {
                if (stateIndex >= 0)
                {
                    if (!string.IsNullOrEmpty(m_curDb.skillEffectTime))
                    {
                        string[] timeArray = SkillSystem.GetTimeArrayByString(m_curDb.skillEffectTime);
                        if (stateIndex < timeArray.Length)
                        {
                            uint time = 1000;
                            if (uint.TryParse(timeArray[stateIndex], out time))
                            {
                                m_uEffectLen = time;
                            }
                        }
                    }
                }
            }
            //  m_bRmove = false;

            IEffect ef = GetEffectByID(m_uEffectID);

            if (ef != null)
            {
                Transform trans = ef.GetNodeTransForm();
                if (trans == null)
                {
                    return;
                }
                m_placeHandle = trans.gameObject.GetComponent <PlaceFxHandle>();
                if (m_placeHandle == null)
                {
                    m_placeHandle = trans.gameObject.AddComponent <PlaceFxHandle>();
                }
            }
            m_placeHandle.m_attacker  = attacker;
            m_placeHandle.m_len       = m_uEffectLen;
            m_placeHandle.m_effectid  = m_uEffectID;
            m_placeHandle.m_placeNode = this;
            m_placeHandle.InitPlaceFx();
        }
示例#11
0
        /*
         * 技能范围 对园和扇形是半径 对于矩形是长
         * 技能范围参数 对园和扇形是角度 对于矩形是宽
         */
        /// <summary>
        ///
        /// </summary>
        /// <param name="en">技能目标</param>
        /// <returns></returns>
        public bool Conform(IPlayer en)
        {
            if (en == null)
            {
                Log.LogGroup("ZDY", " confirm player is null");
                return(false);
            }
            IClientGlobal cg        = SkillSystem.GetClientGlobal();
            IEntity       player    = cg.MainPlayer;
            ISkillPart    skillPart = (ISkillPart)player.GetPart(EntityPart.Skill);
            SkillDatabase db        = skillPart.GetCurSkillDataBase();

            Vector3 mytempPos     = player.GetPos();
            Vector3 targettempPos = en.GetPos();
            Vector2 mypos         = new Vector2(mytempPos.x, mytempPos.z);
            Vector2 targetpos     = new Vector2(targettempPos.x, targettempPos.z);
            float   dis           = EntitySystem.EntityHelper.GetEntityDistance(player, en);

            if (db != null)
            {
                if (db.areaType == 0)
                {
                    //点
                }
                else if (db.areaType == 1)
                {
                    //矩形
                    Log.Error("not implementations ");
                    return(false);
                }
                else if (db.areaType == 2)
                {
                    Transform trans = player.GetTransForm();
                    if (trans == null)
                    {
                        return(false);
                    }
                    //扇形
                    Vector2 myDir   = new Vector2(trans.forward.x, trans.forward.z);
                    Vector2 dir     = targetpos - mypos;
                    float   angle   = Vector2.Angle(myDir.normalized, dir.normalized);
                    float   dbAngle = db.skillAreaParam / 2;
                    if (dbAngle > angle)
                    {
                        if (dis < db.skillArea)
                        {
                            return(true);
                        }
                    }
                    return(false);
                }
                else if (db.areaType == 3)
                {
                    //园

                    if (dis < db.skillArea)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        private void SendPlayDefenerAniMessage(IEntity defender, string aniName)
        {
            CreatureState state = defender.GetCurState();

            ShowFlashColor(defender);
            if (state != CreatureState.Dead)
            {
                bool bRide = (bool)defender.SendMessage(EntityMessage.EntityCommond_IsRide, null);
                if (bRide)
                {
                    return;
                }
                SkillState skillState = GetTargetSkillState(defender);
                if (skillState != SkillState.Attack && skillState != SkillState.Prepare)
                {
                    if (defender.GetCurState() == CreatureState.Contrl)
                    {
                        return;
                    }
                    if (state != CreatureState.Move)
                    {
                        Client.IControllerSystem cs = m_ClientGlobal.GetControllerSystem();
                        if (cs != null)
                        {
                            Client.ICombatRobot robot = cs.GetCombatRobot();
                            if (robot.Status == CombatRobotStatus.RUNNING)
                            {
                                if (SkillSystem.GetClientGlobal().IsMainPlayer(defender.GetID()))
                                {//自动挂机 不播受击
                                    return;
                                }
                            }
                        }
                        INPC npc = defender as INPC;
                        if (npc != null)
                        {
                            int         baseID = npc.GetProp((int)EntityProp.BaseID);
                            NpcDataBase ndb    = GameTableManager.Instance.GetTableItem <NpcDataBase>((uint)baseID);
                            if (ndb != null)
                            {
                                if (ndb.dwMonsterType == 3)
                                {
                                    return;
                                }
                            }
                        }
                        //defender.SendMessage( EntityMessage.EntityCommand_StopMove , defender.GetPos() );
                        //移动不播放受击动作
                        PlayAni anim_param = new PlayAni();
                        anim_param.strAcionName  = aniName;
                        anim_param.fSpeed        = 1;
                        anim_param.nStartFrame   = 0;
                        anim_param.nLoop         = 1;
                        anim_param.fBlendTime    = 0.2f;
                        anim_param.aniCallback   = OnHitCallback;
                        anim_param.callbackParam = defender;

                        //                         if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID()))
                        //                         {
                        //                             Engine.Utility.Log.Info("技能 播放受击动作 {0} {1}", anim_param.strAcionName, state);
                        //                         }
                        defender.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);
                    }
                    else
                    {
                        if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID()))
                        {
                            //Engine.Utility.Log.Info("移动不播放受击动作");
                        }
                    }
                }
                else
                {
                    //  Engine.Utility.Log.Error(string.Format("{0}技能状态错误不能播放受击动作 状态:{1}", defender.GetName(), GetTargetSkillState(defender)));
                }
            }
        }
示例#13
0
        // 进入状态
        public override void Enter(object param)
        {
            if (m_SkillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart;

                if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster()))
                {
                    // Log.LogGroup("ZDY", "mainpalyer enter skilloverstate");

                    if (playerSkill != null)
                    {
                        playerSkill.CurSkillID = 0;
                    }
                    //Log.LogGroup("ZCX", "Enter ..." + this.GetType().Name + playerSkill.CurSkillID);
                    stForbiddenJoystick info = new stForbiddenJoystick();
                    info.playerID  = playerSkill.Master.GetUID();
                    info.bFobidden = false;
                    EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info);
                }
                IEntity casetr = playerSkill.GetMaster();
                if (casetr == null)
                {
                    return;
                }
                playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, false);
                playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f);
                CreatureState playerState = playerSkill.GetMaster().GetCurState();
                if (playerState != CreatureState.Dead)
                {
                    // 不能立即切换到Normal状态
                    PlayAni anim_param = new PlayAni();
                    bool    isMove     = (bool)m_SkillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_IsMove, null);
                    if (isMove)
                    {
                        anim_param.strAcionName = EntityAction.Run;
                    }
                    else
                    {
                        if (casetr.GetEntityType() == EntityType.EntityType_Player)
                        {
                            anim_param.strAcionName = EntityAction.Stand_Combat;
                        }
                        else
                        {
                            anim_param.strAcionName = EntityAction.Stand;
                        }
                    }

                    anim_param.fSpeed      = 1;
                    anim_param.nStartFrame = 0;
                    anim_param.nLoop       = -1;
                    anim_param.fBlendTime  = 0.2f;
                    m_SkillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);


                    //如果在挂机 不能立即切换到Normal状态 主角才派发事件
                    if (IsMainPlayer())
                    {
                        IControllerSystem cs = playerSkill.GetCtrollerSys();
                        if (cs == null)
                        {
                            Log.Error("ExecuteCmd: ControllerSystem is null");
                            return;
                        }

                        Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLNONESTATE_ENTER,
                                                                            new stSkillStateEnter()
                        {
                            state = this.m_nStateID, uid = playerSkill.GetMaster().GetUID()
                        });
                    }
                }
            }
        }
示例#14
0
        public uint CreateEffect(long lTargetID, uint nEffectViewID)
        {
            IPlayer player = SkillSystem.GetClientGlobal().MainPlayer;

            if (player == null)
            {
                Log.LogGroup("ZDY", "player is null");
                return(0);
            }
            IEntity       target = EntitySystem.EntityHelper.GetEntity(lTargetID);
            FxResDataBase edb    = GameTableManager.Instance.GetTableItem <FxResDataBase>(nEffectViewID);

            if (edb != null && target != null)
            {
                if (nEffectViewID == 1002 && EntitySystem.EntityHelper.IsMainPlayer(target))
                {
                    //  Log.Error("nEffectViewID:{0}", nEffectViewID);
                }
                if (target.GetNode() == null)
                {
                    Log.LogGroup("ZDY", "target getnode is null");
                    return(0);
                }
                Transform enTrans = target.GetTransForm();
                if (enTrans == null)
                {
                    Log.LogGroup("ZDY", "target getnode getransform is null");
                    return(0);
                }
                if (player == null)
                {
                    return(0);
                }

                if (player.GetTransForm() == null)
                {
                    Log.LogGroup("ZDY", "player GetTransForm is null");
                    return(0);
                }

                bool bRide = (bool)target.SendMessage(EntityMessage.EntityCommond_IsRide, null);

                Vector3 tarToPlayer = enTrans.position - player.GetTransForm().position;
                tarToPlayer.y = 0;
                Vector3 cross = Vector3.Cross(tarToPlayer, Vector3.forward);
                float   ang   = Vector3.Angle(tarToPlayer, Vector3.forward);
                if (cross.y < 0)
                {
                    ang = 360 - ang;
                }
                //  Log.Error("旋转角度 " + ang);
                Vector3       rot  = Quaternion.AngleAxis(ang, Vector3.up).eulerAngles;
                AddLinkEffect node = new AddLinkEffect();
                node.nFollowType = (int)edb.flowType;
                node.rotate      = -rot;// new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]);
                node.vOffset     = bRide ? new Vector3(edb.rideoffset[0], edb.rideoffset[1], edb.rideoffset[2]) : new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]);

                // 使用资源配置表
                ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath);
                if (resDB == null)
                {
                    Log.LogGroup("ZDY", "EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath);
                    return(0);
                }
                node.strEffectName = resDB.strPath;
                node.strLinkName   = edb.attachNode;
                if (edb.bFollowRole)
                {
                    if (node.strEffectName.Length != 0)
                    {
                        int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node);
                        return((uint)id);
                    }
                }
                else
                {
                    int level = 0;
                    if (target != null)
                    {
                        ISkillPart sp = target.GetPart(EntityPart.Skill) as ISkillPart;
                        if (sp != null)
                        {
                            level = sp.FxLevel;
                        }
                    }
                    return(SkillEffectManager.Helper.ReqPlayHitFx(node.strEffectName, target.GetPos(), node.rotate, Vector3.one, level));
                }
            }
            return(0);
        }
示例#15
0
        // 添加buff表现特效效果
        void AddBuffEffect(uint buffID, uint runID)
        {
            if (m_Master == null)
            {
                return;
            }
            if (m_Master.GetNode() == null)
            {
                if (!m_unCreateEffectList.Contains(runID))
                {
                    m_unCreateEffectList.Add(runID);
                }
            }
            else
            {
                CreateEffect(runID);
            }
            BuffDataBase db = GetBuffDataBase(runID);

            if (db == null)
            {
                //Log.Error("读取Buff配置数据出错:{0}", buffID);
                return;
            }


            for (int i = 0; i < db.buffEffect.Count; i++)
            {
                var item = db.buffEffect[i];
                if (item == 0)
                {
                    continue;
                }
                FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(item);
                if (edb == null)
                {
                    // Log.Error("get FxResDataBase is null id is " + item.ToString());
                    return;
                }
                string aniName = edb.targetAniName;
                if (string.IsNullOrEmpty(aniName))
                {
                    return;
                }
                PlayAni anim_param = new PlayAni();
                anim_param.strAcionName = aniName;
                anim_param.fSpeed       = 1;
                anim_param.nStartFrame  = 0;
                anim_param.nLoop        = edb.playAniTime;
                //if(db.buffBigType == (int)BuffBigType.Control)
                //{
                //    anim_param.nLoop = -1;
                //}
                //else
                //{
                //    anim_param.nLoop = 1;
                //}

                anim_param.fBlendTime = 0.2f;
                bool bRide = (bool)m_Master.SendMessage(EntityMessage.EntityCommond_IsRide, null);
                if (bRide)
                {
                    return;
                }
                if (m_Master.GetCurState() == CreatureState.Contrl)
                {//眩晕不播放其他动画
                    anim_param.aniCallback   = OnHitCallback;
                    anim_param.callbackParam = m_Master;
                    if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID()))
                    {
                        Engine.Utility.Log.Info("buff 播放眩晕动作 {0}", anim_param.strAcionName);
                    }
                    m_Master.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);
                }
                else
                {
                    if (m_Master.GetCurState() != CreatureState.Move)
                    {//移动中不播放受击动作
                        Client.IControllerSystem cs = m_ClientGlobal.GetControllerSystem();
                        if (cs != null)
                        {
                            Client.ICombatRobot robot = cs.GetCombatRobot();
                            if (robot.Status == CombatRobotStatus.RUNNING)
                            {
                                if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID()))
                                {//自动挂机 不播受击
                                    return;
                                }
                            }
                        }

                        m_Master.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);
                    }
                }
            }
        }
示例#16
0
 public PlayerBuffPart(IClientGlobal clientGlobal, SkillSystem skillSystem)
 {
     m_ClientGlobal = clientGlobal;
     TimerAxis.Instance().SetTimer(m_ubuffCountDownTimerID, 500, this);
 }
示例#17
0
        // 进入状态
        public override void Enter(object param)
        {
            Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYSTOPMOVE, OnEvent);
            Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYBEGINMOVE, OnEvent);

            m_skillDoubleDb = null;
            m_fTotalTime    = 0;
            skillPart       = m_SkillPart;
            // m_skillDatabase = skillPart.GetCurSkillDataBase();

            if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
            {
                PlayerSkillPart playerSkill = skillPart as PlayerSkillPart;
                //m_nDoubleHitSkillId = (uint)playerSkill.NextSkillID;
                if (playerSkill.IsMainPlayer())
                {
                    Log.LogGroup("ZDY", "mainpalyer enter skillattackstate================");
                }
                m_skillDatabase = GameTableManager.Instance.GetTableItem <SkillDatabase>(playerSkill.CurSkillID, 1);


                if (m_skillDatabase == null)
                {
                    m_Statemachine.ChangeState((int)SkillState.None, null);
                    return;
                }
                m_uDbJiangzhiTime          = m_skillDatabase.wdStiffTime;
                playerSkill.SkillStiffTime = 0;
                m_skillDoubleDb            = GameTableManager.Instance.GetTableItem <SkillDoubleHitDataBase>(playerSkill.CurSkillID);
                if (IsMainPlayer())
                {
                    Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_USESKILL, playerSkill.CurSkillID);
                }

                if (m_skillDatabase.dwMoveType == (uint)SkillMoveType.FastMove)
                {
                    //处理位移技能
                    Move    move     = new Move();
                    Vector3 targePos = playerSkill.Master.GetPos();
                    if (playerSkill.GetSkillTarget() != null)
                    {
                        targePos = playerSkill.GetSkillTarget().GetPos();
                        Vector3 dir = targePos - playerSkill.Master.GetPos();
                        targePos      = targePos - dir.normalized * 1f;
                        move.m_target = targePos;
                        // Vector3 lookat = playerSkill.GetSkillTarget().GetNode().GetTransForm().forward;
                    }
                    else
                    {
                        m_Statemachine.ChangeState((int)SkillState.None, playerSkill);
                        Log.LogGroup("ZDY", "skilltarget is null");
                        return;
                    }

                    move.m_ignoreStand = true;
                    if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                    {
                        Log.LogGroup("ZDY", "冲锋 目标位置 " + targePos);
                    }
                    AnimationState ani = playerSkill.AttackAnimState;
                    if (ani == null)
                    {
                        m_Statemachine.ChangeState((int)SkillState.None, playerSkill);
                        Log.LogGroup("ZDY", "ani is null");
                        return;
                    }
                    move.strRunAct = ani.name;
                    int   curSpeed  = playerSkill.Master.GetProp((int)WorldObjProp.MoveSpeed);
                    uint  flySpeed  = m_skillDatabase.flyspeed;
                    float speedFact = 1;
                    if (flySpeed != 0)
                    {
                        speedFact = flySpeed * 1.0f / curSpeed;
                    }
                    Log.LogGroup("ZDY", "冲锋倍数 " + speedFact);
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)speedFact);

                    float dis = Vector3.Distance(targePos, playerSkill.Master.GetPos());
                    if (dis > 1)
                    {
                        Log.LogGroup("ZDY", " send moveto ");
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move);
                    }

                    playerSkill.gotoPos = targePos;
                }
                else
                {
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f);
                }
                if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideNoSlider)
                {
                    if (m_skillDatabase.dwMoveType == (int)SkillMoveType.SkillOverMove)
                    {
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false);
                    }
                    if (m_skillDatabase.wdStiffTime == 0)
                    {//狂扫八方的技能
                        playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                    }
                }
                else if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideSlider)
                {
                    if (playerSkill.IsMainPlayer())
                    {
                        Client.stUninterruptMagic evenparam = new Client.stUninterruptMagic();
                        evenparam.time = m_skillDatabase.dwGuideTime;
                        evenparam.type = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ;
                        evenparam.uid  = SkillSystem.GetClientGlobal().MainPlayer.GetUID();
                        EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, evenparam);
                    }
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true);
                }
                //
                if (m_skillDatabase.dwUseMethod == (int)UseMethod.ContinueLock)
                {
                    playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false);
                }


                INPC npc = playerSkill.Master as INPC;
                if (npc != null)
                {
                    int masterID = npc.GetProp((int)NPCProp.Masterid);
                    if (masterID == PlayerSkillPart.m_ClientGlobal.MainPlayer.GetID())
                    {
                        /*     Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLCD_BEGIN, playerSkill.CurSkillID);*/
                    }
                }
            }
        }