Example #1
0
        void CreateEffect(uint runID)
        {
            BuffDataBase db = GetBuffDataBase(runID);

            if (db == null)
            {
                // Log.Error("读取Buff配置数据出错:{0}", runID);
                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;
                }
                if (!IsHideFx())
                {
                    int nEffectID = (int)EffectViewFactory.Instance().CreateEffect(m_Master.GetUID(), item);

                    if (!effectDic.ContainsKey(runID))
                    {
                        effectDic.Add(runID, nEffectID);
                    }
                }
            }
        }
Example #2
0
        void AddEffect(IEntity target, uint effectID)
        {
            FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectID);

            if (edb != null && target != null)
            {
                AddLinkEffect node = new AddLinkEffect();
                node.nFollowType = (int)edb.flowType;
                node.rotate      = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]);
                node.vOffset     = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]);

                // 使用资源配置表
                ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath);
                if (resDB == null)
                {
                    Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath);
                    return;
                }
                node.strEffectName = resDB.strPath;
                node.strLinkName   = edb.attachNode;
                if (edb.bFollowRole)
                {
                    if (node.strEffectName.Length != 0)
                    {
                        target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node);
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// 通过[编号]二分快速查表
        /// </summary>
        /// <param name="dwID">编号</param>
        /// <returns></returns>
        public static FxResDataBase Query(this List <FxResDataBase> sorted, uint dwID)
        {
            var key = new FxResDataBase()
            {
                dwID = dwID
            };
            var comparer = new Comparer1();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(FxResDataBase));
        }
Example #4
0
    void AddEffect(Vector3 pos, uint effectID)
    {
        FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectID);

        if (edb != null)
        {
            // 使用资源配置表
            ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath);
            if (resDB == null)
            {
                Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath);
                return;
            }
            string path = resDB.strPath;


            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }
            IEffect effect = null;
            rs.CreateEffect(ref path, ref effect, (obj) =>
            {
                if (obj == null)
                {
                    Log.Error("fx load failed: " + path);
                    return;
                }
                if (obj.GetNodeTransForm() == null)
                {
                    return;
                }
                obj.GetNodeTransForm().localPosition = pos;
                obj.GetNodeTransForm().localRotation = Quaternion.identity;
                obj.GetNodeTransForm().localScale    = Vector3.one;
                //DoPlay(obj.GetNodeTransForm().gameObject, position, rotation, scale);
            });
        }
    }
Example #5
0
    uint CreateEffect()
    {
        Client.IEntity target = ClientGlobal.Instance().GetEntitySystem().FindNPC(treeEntityID);
        if (target == null)
        {
            Engine.Utility.Log.Error("摇钱树实体查找不到,id为{0}", treeEntityID);
            return(0);
        }
        FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(10001);

        if (edb != null && target != null)
        {
            AddLinkEffect node = new AddLinkEffect();
            node.nFollowType = (int)edb.flowType;
            node.rotate      = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]);
            node.vOffset     = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]);

            // 使用资源配置表
            ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath);
            if (resDB == null)
            {
                Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath);
                return(0);
            }
            node.strEffectName = resDB.strPath;
            node.strLinkName   = edb.attachNode;
            if (node.strEffectName.Length != 0)
            {
                int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node);

                return((uint)id);
            }
        }

        return(0);
    }
Example #6
0
    uint CreateEffect(uint nEffectViewID)
    {
        IEntity       target = MainPlayerHelper.GetMainPlayer();
        FxResDataBase edb    = GameTableManager.Instance.GetTableItem <FxResDataBase>(nEffectViewID);

        if (edb != null && target != null)
        {
            if (nEffectViewID == 1002 && EntitySystem.EntityHelper.IsMainPlayer(target))
            {
                //  Engine.Utility.Log.Error("nEffectViewID:{0}", nEffectViewID);
            }

            AddLinkEffect node = new AddLinkEffect();
            node.nFollowType = (int)edb.flowType;
            node.rotate      = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]);
            node.vOffset     = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]);

            // 使用资源配置表
            ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath);
            if (resDB == null)
            {
                Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath);
                return(0);
            }
            node.strEffectName = resDB.strPath;
            node.strLinkName   = edb.attachNode;
            if (node.strEffectName.Length != 0)
            {
                int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node);

                return((uint)id);
            }
        }

        return(0);
    }
Example #7
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);
                    }
                }
            }
        }
        /// <summary>
        /// 播放防御者受击动作
        /// </summary>
        /// <param name="cmd"></param>
        private bool PlayDefenerAni(GameCmd.stMultiAttackDownMagicUserCmd_S cmd)
        {
            if (cmd == null)
            {
                return(false);
            }
            SkillDatabase db = GameTableManager.Instance.GetTableItem <SkillDatabase>(cmd.wdSkillID, 1);

            if (db != null)
            {
                for (int i = 0; i < db.beAttactEffect.Count; i++)
                {
                    var           effectid = db.beAttactEffect[i];
                    FxResDataBase edb      = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectid);
                    if (edb != null)
                    {
                        if (cmd != null)
                        {
                            for (int j = 0; j < cmd.data.Count; j++)
                            {
                                var    item    = cmd.data[j];
                                string aniName = edb.targetAniName;

                                IEntity defender = EntityHelper.GetEntity(item.byDefencerType, item.dwDefencerID);
                                if (defender == null)
                                {
                                    //Log.Error( "死亡状态不能播放受击动作" );
                                    return(false);
                                }
                                if (defender is INPC)
                                {
                                    INPC npc = defender as INPC;
                                    if (npc != null)
                                    {
                                        if (npc.IsTrap())
                                        {
                                            return(false);
                                        }
                                    }
                                }
                                if (edb.playAudio != 0)
                                {
                                    ResourceDataBase rdb = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.playAudio);
                                    if (rdb != null)
                                    {
                                        Transform trans = defender.GetTransForm();
                                        if (trans == null)
                                        {
                                            return(false);
                                        }
                                        PlayAudio(trans.gameObject, rdb.strPath);
                                    }
                                }



                                EffectViewFactory.Instance().CreateEffect(defender.GetUID(), effectid);
                                if (item.byDamType != (uint)GameCmd.AttackType.ATTACK_TYPE_HD)
                                {
                                    SendPlayDefenerAniMessage(defender, aniName);
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
Example #9
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);
        }