/// <summary>
        /// 反弹伤害无法触发HitTarget事件
        /// </summary>
        /// <param name="attacker">Attacker.</param>
        /// <param name="WeaponDamagePCT">Weapon damage PC.</param>
        /// <param name="enemy">Enemy.</param>
        public static void DoDamage(GameObject attacker, int WeaponDamagePCT, GameObject enemy, bool isStaticShoot)
        {
            if (enemy.GetComponent <MyAnimationEvent>() != null)
            {
                if (enemy.GetComponent <NpcAttribute>().IsMine())
                {
                    var  attribute  = attacker.GetComponent <NpcAttribute>();
                    var  rate       = 1;
                    bool isCritical = false;

                    //在基础攻击力上面提升的比例
                    //调整基础比例
                    var damage = (int)(attribute.GetAllDamage(isStaticShoot) * (WeaponDamagePCT / 100.0f) * rate);
                    Log.Sys("calculate Damage Rate SimpleDamage " + WeaponDamagePCT);

                    bool isStaticShootBuff = false;
                    if (!isCritical)
                    {
                        isStaticShootBuff = isStaticShoot;
                    }

                    NetDateInterface.FastDamage(
                        attribute.GetComponent <KBEngine.KBNetworkView>().GetServerID(),
                        enemy.GetComponent <KBEngine.KBNetworkView>().GetServerID(),
                        damage,
                        isCritical,
                        isStaticShootBuff
                        );
                    enemy.GetComponent <MyAnimationEvent>().OnHit(attacker, damage, isCritical, isStaticShootBuff);
                }
            }
        }
Exemple #2
0
        //TODO::支持单人副本和多人副本功能 取决于  是否直接通知MyAnimationEvent
        //根据技能信息和玩家信息 得到实际的 伤害  NpcAttribute  SkillFullInfo

        /*
         *      伤害计算过程
         *      1:伤害对象判定  客户端做
         *      2:伤害数值确定   服务端 或者客户端
         *      3:伤害效果施展 例如击退  服务端 或者 客户端
         */
        public static void DoDamage(GameObject attacker, SkillFullInfo skillData, GameObject enemy)
        {
            if (enemy.GetComponent <MyAnimationEvent>() != null)
            {
                var attribute = attacker.GetComponent <NpcAttribute>();
                //技能伤害方是我方则可以计算技能伤害否则只做技能表现
                if (enemy.GetComponent <NpcAttribute>().IsMine())
                {
                    var  rd         = Random.Range(0, 100);
                    var  rate       = 1;
                    bool isCritical = false;
                    if (rd < attribute.GetCriticalRate())
                    {
                        rate       = 2;
                        isCritical = true;
                    }
                    //在基础攻击力上面提升的比例
                    var damage = (int)(attribute.Damage * (skillData.skillData.WeaponDamagePCT / 100.0f) * rate);
                    Log.Sys("calculate Damage Rate " + skillData.skillData.Id + " lev " + skillData.skillData.Level + " ra " + skillData.skillData.WeaponDamagePCT);

                    NetDateInterface.FastDamage(
                        attribute.GetComponent <KBEngine.KBNetworkView>().GetServerID(),
                        enemy.GetComponent <KBEngine.KBNetworkView>().GetServerID(),
                        damage,
                        isCritical
                        );

                    enemy.GetComponent <MyAnimationEvent>().OnHit(attacker, damage, isCritical);
                    var hitTarget = new MyEvent(MyEvent.EventType.HitTarget);
                    hitTarget.target = enemy;
                    hitTarget.skill  = skillData.skillData;
                    MyEventSystem.myEventSystem.PushLocalEvent(attribute.GetLocalId(), hitTarget);
                }
            }
        }
Exemple #3
0
        void Start()
        {
            if (Event.attaches)
            {
                StartCoroutine(FollowAttacker());
            }

            if (Event.affix.effectType != Affix.EffectType.None && Event.affix.target == Affix.TargetType.Self)
            {
                if (stateMachine.attacker != null && stateMachine.attacker.GetComponent <NpcAttribute>().IsMine())
                {
                    //stateMachine.attacker.GetComponent<BuffComponent>().AddBuff(Event.affix);
                    NetDateInterface.FastMoveAndPos();
                    NetDateInterface.FastAddBuff(Event.affix, stateMachine.attacker, stateMachine.attacker, stateMachine.skillFullData.skillId, Event.EvtId);
                }
            }


            var skillConfig = Event.layout.GetComponent <SkillLayoutConfig>();

            if (skillConfig != null)
            {
                StartCoroutine(ShowParticle());
            }
        }
Exemple #4
0
        IEnumerator CountDown()
        {
            while (WorldManager.worldManager.station != WorldManager.WorldStation.Enter)
            {
                yield return(null);
            }

            var uiRoot = WindowMng.windowMng.GetMainUI();
            var lt     = NGUITools.AddChild(uiRoot, Resources.Load <GameObject>("UI/LeftTimeUI"));

            ltui = lt.GetComponent <LeftTimeUI>();
            var sui = NGUITools.AddChild(uiRoot, Resources.Load <GameObject>("UI/ScoreUI"));

            scoreUI = sui.GetComponent <ScoreUI>();

            var rtp = Util.FindChildRecursive(uiRoot.transform, "RightTop");

            rtp.gameObject.SetActive(false);

            while (leftTime > 0)
            {
                ltui.SetLabel("" + leftTime);
                if (NetworkUtil.IsNetMaster())
                {
                    NetDateInterface.SyncTime(leftTime);
                }
                leftTime--;
                yield return(new WaitForSeconds(1));
            }
            if (NetworkUtil.IsNetMaster())
            {
                NetDateInterface.GameOver();
                NetworkGameOver();
            }
        }
Exemple #5
0
        /// <summary>
        /// 本地使用技能同时通知代理
        /// 绕过LogicCommand 本地执行不需要LogicCommand队列
        /// </summary>
        /// <param name="skillData">Skill data.</param>
        static void UseSkill(SkillData skillData)
        {
            Log.Sys("UseSkill: " + skillData.SkillName + " lev " + skillData.Level);
            ObjectManager.objectManager.GetMyPlayer().GetComponent <MyAnimationEvent>().OnSkill(skillData);

            NetDateInterface.FastMoveAndPos();
            NetDateInterface.FastUseSkill(skillData.Id, skillData.Level);
        }
        public static void AddStaticShootBuff(GameObject who, int skillId, Vector3 pos)
        {
            var skill     = Util.GetSkillData(skillId, 1);
            var skillInfo = SkillLogic.GetSkillInfo(skill);
            var evt       = skillInfo.eventList[0];

            NetDateInterface.FastAddBuff(evt.affix, who, who, skillId, evt.EvtId);
        }
Exemple #7
0
        /// <summary>
        /// 和使用普通技能一样
        /// </summary>
        public void PlayerAttack()
        {
            //连击3招
            var meId      = ObjectManager.objectManager.GetMyAttr().GetNetView().GetLocalId();
            var skillInfo = ObjectManager.objectManager.GetMyPlayer().GetComponent <SkillInfoComponent>();

            skillInfo.SetDefaultActive();

            var skillData = skillInfo.GetActiveSkill().skillData;
            var curState  = ObjectManager.objectManager.GetMyPlayer().GetComponent <AIBase>().GetAI().state;

            //无动作技能释放 不用检测
            if (string.IsNullOrEmpty(skillData.AnimationName))
            {
            }
            else
            {
                //当前状态不能使用技能 或者已经在技能状态了不能连续点击
                if (curState != null)
                {
                    var ret = curState.CanChangeState(AIStateEnum.CAST_SKILL);
                    if (!ret)
                    {
                        return;
                    }
                }
            }

            if (curState != null && curState.type == AIStateEnum.DEAD)
            {
                Util.ShowMsg("死亡不能使用技能");
                return;
            }
            //默认技能上次使用频率控制

            MyEventSystem.PushLocalEventStatic(meId, MyEvent.EventType.UseSkill);
            var skillId = skillInfo.GetActiveSkill().skillId;

            /*
             * //如果身上有Buff则调整默认技能的ID
             * if (!NetworkUtil.IsNet())
             * {
             *  ObjectManager.objectManager.GetMyPlayer().GetComponent<MyAnimationEvent>().OnSkill(skillData);
             * }
             *
             * if (skillInfo.GetActiveSkill().skillData.skillConfig.stopMove)
             * {
             *  //短时间限制自己移动
             *  var me = ObjectManager.objectManager.GetMyPlayer();
             *  GameInterface_Skill.AddSkillBuff(me.gameObject, "StopMoveBuff", Vector3.zero);
             * }
             *
             * NetDateInterface.FastMoveAndPos();
             */

            NetDateInterface.FastUseSkill(skillId, skillData.Level);
        }
Exemple #8
0
        /// <summary>
        /// 和使用普通技能一样
        /// </summary>
        public void PlayerAttack()
        {
            //连击3招
            var skillId   = ObjectManager.objectManager.GetMyPlayer().GetComponent <SkillInfoComponent> ().GetDefaultSkillId();
            var skillData = Util.GetSkillData(skillId, 1);

            ObjectManager.objectManager.GetMyPlayer().GetComponent <MyAnimationEvent>().OnSkill(skillData);

            NetDateInterface.FastMoveAndPos();
            NetDateInterface.FastUseSkill(skillId, skillData.Level);
        }
Exemple #9
0
 public override void EnterState()
 {
     base.EnterState();
     dieAni = "death";
     SetAni(dieAni, 1, WrapMode.Once);
     GetAttr().IsDead = true;
     if (GetAttr().IsMine())
     {
         var last = GetEvent().lastAttacker;
         NetDateInterface.Dead(last);
     }
 }
Exemple #10
0
        void SyncMyPos()
        {
            var me = ObjectManager.objectManager.GetMyPlayer();

            if (me != null)
            {
                var sync = me.GetComponent <PlayerSyncToServer>();
                sync.SyncAttribute();
            }
            //NetDateInterface.SyncPosDirHP();
            NetDateInterface.SyncMonster();
        }
        public static bool AddBuffWithNet(GameObject who, int skillId, Vector3 pos, int pid = 0)
        {
            var skill     = Util.GetSkillData(skillId, 1);
            var skillInfo = SkillLogic.GetSkillInfo(skill);
            var evt       = skillInfo.eventList [0];

            //var ret = who.GetComponent<BuffComponent>().AddBuff(evt.affix, pos, pid);
            //if (ret)
            {
                NetDateInterface.FastAddBuff(evt.affix, who, who, skillId, evt.EvtId);
            }
            //return ret;
            return(true);
        }
Exemple #12
0
        public void Revive()
        {
            ChangeHP(HP_Max);
            ChangeMP(MP_Max);
            NetworkRevive();

            var pos = NetworkUtil.GetStartPos();

            transform.position = pos;
            if (this.IsMine())
            {
                NetDateInterface.Revive();
            }
        }
Exemple #13
0
 public virtual void OnDie()
 {
     if (unitTheme != null)
     {
         //GameObject.Destroy(unitTheme);
         ParticlePool.Instance.ReturnGameObject(unitTheme, ParticlePool.ResetParticle);
         unitTheme = null;
     }
     //本地Buff的Id都是0
     if (attri.IsMine() && this.EffectId != 0)
     {
         //NetDateInterface.FastRemoveBuff((int)this.type, attri.gameObject);
         NetDateInterface.RemoveBuffId(this.EffectId, attri.gameObject);
     }
 }
Exemple #14
0
        //public Transform tower;
        public override void EnterState()
        {
            base.EnterState();

            dieAni = "death";
            SetAni(dieAni, 1, WrapMode.Once);
            GetAttr().IsDead = true;
            if (GetAttr().IsMine())
            {
                var        attackerList      = GetEvent().attackerList;
                var        last              = GetEvent().lastAttacker;
                List <int> finalAttackerList = new List <int>(attackerList.Count);

                var enumerator = attackerList.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    if (enumerator.Current.Key != last)
                    {
                        if (enumerator.Current.Value >= GameConst.Instance.AssistDamage)
                        {
                            finalAttackerList.Add(enumerator.Current.Key);
                        }
                    }
                }

                NetDateInterface.Dead(last, finalAttackerList);
                attackerList.Clear();
                GetEvent().lastAttacker = 0;
            }
            GetAttr().SetDeadShader();

            var tower = GetAttr().GetComponent <TankPhysicComponent>().tower;

            tac = tower.GetComponent <TowerAutoCheck>();
            tac.SetDead(true);
            var rigidbody = GetAttr().GetComponent <Rigidbody>();

            rigidbody.useGravity = false;
            rigidbody.velocity   = Vector3.zero;

            var ds = GameObject.Instantiate(Resources.Load <GameObject>("particles/DeadSmoke")) as GameObject;

            deadparticle          = ds;
            ds.transform.position = GetAttr().transform.position;
        }
Exemple #15
0
        /// <summary>
        /// 自己复活
        /// </summary>
        /// <returns></returns>
        public IEnumerator Revive()
        {
            GetComponent <BuffComponent>().RemoveAllBuff();
            ChangeHP(HP_Max);
            ChangeMP(MP_Max);
            this.SetNetSpeed(0);
            SetJob(Job.WARRIOR);
            var pos = NetworkUtil.GetStartPos();

            //transform.position = pos;
            //this.rigidbody.MovePosition(pos);
            Util.ForceResetPos(this.GetComponent <Rigidbody>(), pos);
            //StartCoroutine(SetRebornShader());

            ReviveAI();
            NetDateInterface.Revive();
            yield return(null);
        }
Exemple #16
0
        public void DoDamage(GameObject g)
        {
            Log.AI("SkillLayout DoDamage " + Event.affix.effectType);
            var attr = NetworkUtil.GetAttr(g);

            if (Event.affix.effectType != Affix.EffectType.None && Event.affix.target == Affix.TargetType.Enemy)
            {
                //Buff目标是本地控制
                //通过ID来控制复制信息 实体都要有ID才便于复制
                //if(stateMachine.attacker.GetComponent<NpcAttribute>().IsMine()) {
                if (attr.IsMine())
                {
                    //attr.GetComponent<BuffComponent>().AddBuff(Event.affix, stateMachine.attacker.transform.position);
                    NetDateInterface.FastMoveAndPos();
                    NetDateInterface.FastAddBuff(Event.affix, stateMachine.attacker, attr.gameObject, stateMachine.skillFullData.skillId, Event.EvtId);
                }
            }
            stateMachine.DoDamage(attr.gameObject);
        }
Exemple #17
0
        //为玩家增加Buff
        void OnTriggerEnter(Collider other)
        {
            if (NetworkUtil.IsNetMaster())
            {
                if (other.tag == GameTag.Player)
                {
                    //击退技能
                    var pos     = other.transform.position;
                    var otherGo = other.gameObject;

                    var skill     = Util.GetSkillData(140, 1);
                    var skillInfo = SkillLogic.GetSkillInfo(skill);
                    var evt       = skillInfo.eventList[0];
                    var ret       = gameObject.GetComponent <BuffComponent>().AddBuff(evt.affix, pos);
                    if (ret)
                    {
                        NetDateInterface.FastAddBuff(evt.affix, otherGo, gameObject, skill.Id, evt.EvtId);
                    }
                }
            }
        }
Exemple #18
0
        void OnTriggerEnter(Collider other)
        {
            Log.Sys("MoveBlock Enter : " + other.gameObject);
            if (NetworkUtil.IsNetMaster())
            {
                if (other.tag == GameTag.Player)
                {
                    //击退技能
                    var pos     = other.transform.position;
                    var otherGo = other.gameObject;
                    //dy dx 比较 那个大 保留那个 同时另外一个修正为 自己的pos
                    var par   = transform.parent.gameObject;
                    var myPos = par.transform.position;

                    //假设箱子都是 正方体
                    var dx = myPos.x - pos.x;
                    var dz = myPos.z - pos.z;
                    if (Mathf.Abs(dx) < Mathf.Abs(dz))
                    {
                        pos.x = myPos.x;
                    }
                    else
                    {
                        pos.z = myPos.z;
                    }

                    var skill     = Util.GetSkillData((int)SkillData.SkillConstId.KnockBack, 1);
                    var skillInfo = SkillLogic.GetSkillInfo(skill);
                    var evt       = skillInfo.eventList [0];
                    var ret       = par.GetComponent <BuffComponent>().AddBuff(evt.affix, pos);
                    if (ret)
                    {
                        NetDateInterface.FastAddBuff(evt.affix, otherGo, par, skill.Id, evt.EvtId, pos);
                    }
                }
            }
        }
Exemple #19
0
        void MsgHandler(KBEngine.Packet packet)
        {
            var proto = packet.protoBody as GCPlayerCmd;

            Log.Net("Map4Receive: " + proto);
            var cmds = proto.Result.Split(' ');

            if (cmds [0] == "Login")
            {
                myId = Convert.ToInt32(cmds [1]);
                ObjectManager.objectManager.RefreshMyServerId(myId);
            }
            else if (cmds [0] == "Add")
            {
                ObjectManager.objectManager.CreateOtherPlayer(proto.AvatarInfo);
                PlayerDataInterface.DressEquip(proto.AvatarInfo);
                var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.NetworkMove(proto.AvatarInfo);
                    }
                    else
                    {
                        var sync2 = player.GetComponent <MySelfAttributeSync>();
                        sync2.NetworkAttribute(proto.AvatarInfo);
                    }
                }
            }
            else if (cmds [0] == "Remove")
            {
                ObjectManager.objectManager.DestroyPlayer(proto.AvatarInfo.Id);
            }
            else if (cmds [0] == "Update")
            {
                var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.NetworkMove(proto.AvatarInfo);
                    }
                    else
                    {
                        var myselfAttr = player.GetComponent <MySelfAttributeSync>();
                        if (myselfAttr != null)
                        {
                            myselfAttr.NetworkAttribute(proto.AvatarInfo);
                        }
                    }
                }
            }
            else if (cmds [0] == "Damage")
            {
                var dinfo = proto.DamageInfo;
                var enemy = ObjectManager.objectManager.GetPlayer(dinfo.Enemy);
                if (enemy != null)
                {
                    var sync = enemy.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.DoNetworkDamage(proto);
                    }
                }
                if (!NetworkUtil.IsMaster() && enemy != null)
                {
                    var sync = enemy.GetComponent <MonsterSync>();
                    if (sync != null)
                    {
                        sync.DoNetworkDamage(proto);
                    }
                }
            }
            else if (cmds [0] == "Skill")
            {
                var sk     = proto.SkillAction;
                var player = ObjectManager.objectManager.GetPlayer(sk.Who);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.NetworkAttack(sk);
                    }
                }
            }
            else if (cmds [0] == "Buff")
            {
                var target = proto.BuffInfo.Target;
                var sync   = NetDateInterface.GetPlayer(target);
                var player = ObjectManager.objectManager.GetPlayer(target);
                if (sync != null)
                {
                    sync.NetworkBuff(proto);
                }
                if (player != null && !NetworkUtil.IsNetMaster())
                {
                    var monSync = player.GetComponent <MonsterSync>();
                    if (monSync != null)
                    {
                        monSync.NetworkBuff(proto);
                    }
                }
            }
            else if (cmds [0] == "AddEntity")
            {
                var ety = proto.EntityInfo;
                if (ety.EType == EntityType.CHEST)
                {
                    StartCoroutine(WaitZoneInit(ety));
                }
                else if (ety.EType == EntityType.DROP)
                {
                    var itemData = Util.GetItemData((int)ItemData.GoodsType.Props, (int)ety.ItemId);
                    var itemNum  = ety.ItemNum;
                    var pos      = NetworkUtil.FloatPos(ety.X, ety.Y, ety.Z);
                    DropItemStatic.MakeDropItemFromNet(itemData, pos, itemNum, ety);
                }
            }
            else if (cmds [0] == "UpdateEntity")
            {
                var ety = proto.EntityInfo;
                var mon = ObjectManager.objectManager.GetPlayer(ety.Id);
                Log.Net("UpdateEntityHP: " + ety.Id + " hp " + ety.HasHP + " h " + ety.HP);
                if (!NetworkUtil.IsMaster() && mon != null)
                {
                    var sync = mon.GetComponent <MonsterSync>();
                    if (sync != null)
                    {
                        sync.SyncAttribute(proto);
                    }
                }
            }
            else if (cmds [0] == "RemoveEntity")
            {
                var ety = proto.EntityInfo;
                var mon = ObjectManager.objectManager.GetPlayer(ety.Id);
                if (!NetworkUtil.IsMaster() && mon != null)
                {
                    var netView = mon.GetComponent <KBEngine.KBNetworkView>();
                    if (netView != null)
                    {
                        ObjectManager.objectManager.DestroyByLocalId(netView.GetLocalId());
                    }
                }
            }
            else if (cmds [0] == "Pick")
            {
                if (!NetworkUtil.IsMaster())
                {
                    var action = proto.PickAction;
                    var ety    = ObjectManager.objectManager.GetPlayer(action.Id);
                    var who    = ObjectManager.objectManager.GetPlayer(action.Who);
                    if (ety != null)
                    {
                        var item = ety.GetComponent <DropItemStatic>();
                        if (item != null)
                        {
                            item.PickItemFromNetwork(who);
                        }
                    }
                }
            }
            else if (cmds [0] == "Revive")
            {
                var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.Revive();
                    }
                }
            }
            else if (cmds [0] == "Dead")
            {
                var dinfo = proto.DamageInfo;
                ScoreManager.Instance.NetAddScore(dinfo.Attacker, dinfo.Enemy);
            }
            else if (cmds [0] == "SyncTime")
            {
                if (!NetworkUtil.IsNetMaster())
                {
                    ScoreManager.Instance.NetSyncTime(proto.LeftTime);
                }
            }
            else if (cmds [0] == "GameOver")
            {
                if (!NetworkUtil.IsNetMaster())
                {
                    ScoreManager.Instance.NetworkGameOver();
                }
            }
            else if (cmds [0] == "AllReady")
            {
                Util.ShowMsg("所有客户端准备完成");
                //当所有客户端准备好之后 服务器推送Entity给所有客户端
                NetMatchScene.Instance.SetAllReady();

                //更新IsMaster 这样才能生成Entity
                var player     = ObjectManager.objectManager.GetMyPlayer();
                var myselfAttr = player.GetComponent <MySelfAttributeSync>();
                var matchRoom  = NetMatchScene.Instance.GetComponent <MatchRoom>();
                if (myselfAttr != null)
                {
                    myselfAttr.NetworkAttribute(matchRoom.GetMyInfo());
                }
            }
        }
Exemple #20
0
 void SyncMyPos()
 {
     NetDateInterface.SyncPosDirHP();
 }
Exemple #21
0
        void MsgHandler(KBEngine.Packet packet)
        {
            var proto = packet.protoBody as GCPlayerCmd;

            Debug.Log("Map3Receive: " + proto);
            var cmds = proto.Result.Split(' ');

            if (cmds [0] == "Login")
            {
                myId = Convert.ToInt32(cmds [1]);
                ObjectManager.objectManager.RefreshMyServerId(myId);
            }
            else if (cmds [0] == "Add")
            {
                ObjectManager.objectManager.CreateOtherPlayer(proto.AvatarInfo);
                PlayerDataInterface.DressEquip(proto.AvatarInfo);
            }
            else if (cmds [0] == "Remove")
            {
                ObjectManager.objectManager.DestroyPlayer(proto.AvatarInfo.Id);
            }
            else if (cmds [0] == "Update")
            {
                var player = ObjectManager.objectManager.GetPlayer(proto.AvatarInfo.Id);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.NetworkMove(proto.AvatarInfo);
                    }
                }
                else
                {
                }
            }
            else if (cmds [0] == "Damage")
            {
                //SkillDamageCaculate.DoNetworkDamage(proto);
                var dinfo = proto.DamageInfo;
                var enemy = ObjectManager.objectManager.GetPlayer(dinfo.Enemy);
                if (enemy != null)
                {
                    var sync = enemy.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.DoNetworkDamage(proto);
                    }
                }
            }
            else if (cmds [0] == "Skill")
            {
                var sk     = proto.SkillAction;
                var player = ObjectManager.objectManager.GetPlayer(sk.Who);
                if (player != null)
                {
                    var sync = player.GetComponent <PlayerSync>();
                    if (sync != null)
                    {
                        sync.NetworkAttack(sk);
                    }
                }
            }
            else if (cmds [0] == "Buff")
            {
                var sync = NetDateInterface.GetPlayer(proto.BuffInfo.Target);
                if (sync != null)
                {
                    sync.NetworkBuff(proto);
                }
            }
        }
 public static void RemoveStaticShootBuff(GameObject who, int skillId, Vector3 pos)
 {
     //who.GetComponent<BuffComponent>().RemoveBuff(Affix.EffectType.StaticShootBuff);
     NetDateInterface.FastRemoveBuff((int)Affix.EffectType.StaticShootBuff, who);
 }