Example #1
0
        public override void HandleOnSkillCasting(SkillArg arg)
        {
            Map.Map     map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
            UpdateEvent evt = UpdateEvent.NewActorAdditionEvent(arg.Caster, arg.Caster, arg.SkillSession, 28673, 65004, UpdateEvent.ExtraUpdateModes.Activate);

            oldX = arg.Caster.X;
            oldY = arg.Caster.Y;
            oldZ = arg.Caster.Z;
            Map.MoveArgument argu = new Map.MoveArgument()
            {
                BNSMoveType = MoveType.StepForward
            };
            distance          = arg.Caster.DistanceToActor(arg.Target);
            argu.SkillSession = arg.SkillSession;
            float deltaX = (float)(arg.Target.X - arg.Caster.X) / distance;
            float deltaY = (float)(arg.Target.Y - arg.Caster.Y) / distance;

            argu.X   = arg.Caster.X + (int)(deltaX * distance);
            argu.Y   = arg.Caster.Y + (int)(deltaY * distance);
            argu.Z   = (short)arg.Target.Z;
            argu.Dir = arg.Caster.Dir;
            map.MoveActor(arg.Caster, argu, true);

            //UpdateEvent evt1 = UpdateEvent.NewActorAdditionExtEvent(arg.Caster, arg.SkillSession, 28673, 15000017, 5000, UpdateEvent.ExtraUpdateModes.Activate);
            //map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt1, arg.Caster, true);
        }
Example #2
0
        public override void HandleSkillActivate(SkillArg arg)
        {
            base.HandleSkillActivate(arg);
            foreach (SkillAffectedActor i in arg.AffectedActors)
            {
                if (arg.Target.Tasks.TryGetValue("ActorCatch", out Task removed))
                {
                    removed.Deactivate();
                }

                //Additions.Throw throws = new Additions.Throw(arg, i.Target);
                //throws.Activate();
                Map.Map          map  = Map.MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
                Map.MoveArgument argu = new Map.MoveArgument()
                {
                    BNSMoveType = Map.MoveType.PushBack
                };
                bool pushed = map.HeightMapBuilder.GetMaximunPushBackPos(arg.Caster.X, arg.Caster.Y, arg.Caster.Z, arg.Caster.Dir, 150, out argu.X, out argu.Y, out argu.Z);
                argu.PushBackSource = arg.Caster;
                argu.Dir            = arg.Caster.Dir;
                argu.SkillSession   = arg.SkillSession;
                map.MoveActor(i.Target, argu, true);
                Common.Additions.ActorDown add = new Common.Additions.ActorDown(arg, i.Target, 12311013, i.Damage, 1000);

                i.Target.Tasks["ActorDown"] = add;
                add.Activate();
            }
        }
Example #3
0
        public override void  HandleSkillActivate(SkillArg arg)
        {
            Map.Map          map  = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
            Map.MoveArgument argu = new Map.MoveArgument()
            {
                BNSMoveType = MoveType.StepForward
            };
            int distance = arg.Caster.DistanceToActor(arg.Target);
            int forward  = 20;

            argu.SkillSession = arg.SkillSession;
            Vec3 vec = -arg.Target.Dir.DirectionToVector();

            argu.X   = arg.Target.X + (int)(vec.X * forward);
            argu.Y   = arg.Target.Y + (int)(vec.Y * forward);
            argu.Z   = (short)arg.Target.Z;
            argu.Dir = arg.Target.Dir;
            map.MoveActor(arg.Caster, argu, true);
            if (arg.Caster.Tasks.ContainsKey("Stealth"))
            {
                Buff buff = arg.Caster.Tasks["Stealth"] as Buff;
                buff.Deactivate();
            }

            Additions.Stealth add = new Additions.Stealth(arg);

            arg.Caster.Tasks["Stealth"] = add;
            add.Activate();
        }
Example #4
0
        public void HandleOnSkillCasting(SkillArg arg)
        {
            Map.Map map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
            arg.Caster.Status.StanceFlag1.SetValue(StanceU1.Dash, true);
            UpdateEvent evt = new UpdateEvent()
            {
                Actor             = arg.Caster,
                AdditionID        = 15000030,
                AdditionSession   = 1,
                Target            = arg.Caster,
                Skill             = arg.Skill,
                SkillSession      = arg.SkillSession,
                ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate,
                UpdateType        = UpdateTypes.Actor
            };

            //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk7A, arg.Caster.Status.StanceFlag1.Value);
            //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.UnkF4, 1);
            //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.UnkF1, 1);
            map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, arg.Caster, true);

            evt = new UpdateEvent()
            {
                Actor           = arg.Caster,
                Target          = arg.Caster,
                AdditionSession = 1,
                AdditionID      = 15000030,
                RestTime        = arg.ApproachTime,
                UpdateType      = UpdateTypes.ActorExtension
            };
            map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, arg.Caster, true);

            if (isBack)
            {
                arg.Caster.Status.Stealth = true;
            }

            Map.MoveArgument argu = new Map.MoveArgument()
            {
                BNSMoveType = MoveType.StepForward
            };
            int distance = arg.Caster.DistanceToActor(arg.Target);
            int forward  = distance < 40 ? 0 : distance - 20;

            argu.SkillSession = arg.SkillSession;
            float deltaX = (float)(arg.Target.X - arg.Caster.X) / distance;
            float deltaY = (float)(arg.Target.Y - arg.Caster.Y) / distance;

            argu.X   = arg.Caster.X + (int)(deltaX * forward);
            argu.Y   = arg.Caster.Y + (int)(deltaY * forward);
            argu.Z   = (short)arg.Target.Z;
            argu.Dir = arg.Caster.Dir;
            map.MoveActor(arg.Caster, argu, true);
        }
Example #5
0
        public override void HandleOnSkillCasting(SkillArg arg)
        {
            Map.Map map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);

            Map.MoveArgument argu = new Map.MoveArgument()
            {
                BNSMoveType = MoveType.StepForward
            };
            int distance = arg.Caster.DistanceToActor(arg.Target);
            int forward = distance < 40 ? 0 : distance - 20;
            argu.SkillSession = arg.SkillSession;
            float deltaX = (float)(arg.Target.X - arg.Caster.X) / distance;
            float deltaY = (float)(arg.Target.Y - arg.Caster.Y) / distance;

            argu.X = arg.Caster.X + (int)(deltaX * forward);
            argu.Y = arg.Caster.Y + (int)(deltaY * forward);
            argu.Z = (short)arg.Target.Z;
            argu.Dir = arg.Caster.Dir;
            map.MoveActor(arg.Caster, argu, true);
        }
Example #6
0
        public override void HandleOnSkillCasting(SkillArg arg)
        {
            Map.Map map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);

            Map.MoveArgument argu = new Map.MoveArgument()
            {
                BNSMoveType = MoveType.StepForward
            };
            int distance = arg.Caster.DistanceToActor(arg.Target);
            int forward  = 20;

            argu.SkillSession = arg.SkillSession;
            Vec3 vec = -arg.Target.Dir.DirectionToVector();

            argu.X   = arg.Target.X + (int)(vec.X * forward);
            argu.Y   = arg.Target.Y + (int)(vec.Y * forward);
            argu.Z   = (short)arg.Target.Z;
            argu.Dir = arg.Target.Dir;
            map.MoveActor(arg.Caster, argu, true);
        }
Example #7
0
        public override void OnAfterSkillCast(SkillArg arg)
        {
            SimpleTask task = new SimpleTask("HighHitDelay", 200, (t) =>
            {
                Map.Map map           = MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
                UpdateEvent evt       = UpdateEvent.NewActorAdditionEvent(arg.Caster, arg.Caster, arg.SkillSession, 28673, 65004, UpdateEvent.ExtraUpdateModes.Cancel);
                Map.MoveArgument argu = new Map.MoveArgument()
                {
                    BNSMoveType  = MoveType.StepForward,
                    SkillSession = arg.SkillSession,
                    X            = oldX,
                    Y            = oldY,
                    Z            = oldZ,
                    Dir          = arg.Caster.Dir
                };
                map.MoveActor(arg.Caster, argu, true);
                // UpdateEvent evt1 = UpdateEvent.NewActorAdditionExtEvent(arg.Caster, arg.SkillSession, 28673, 65004, 1300, UpdateEvent.ExtraUpdateModes.Cancel);
                //map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt1, arg.Caster, true);
            });

            task.Activate();
        }
Example #8
0
        private unsafe void ActorCatch_OnAdditionStart(Actor actor, Buff skill)
        {
            if (!target.Status.Catch)
            {
                #region move
                {
                    target.Status.Catch = true;
                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown400000000000, true);
                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown200000000000, true);
                    target.Status.StanceFlag1.SetValue(StanceU1.NoMove, true);
                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown4, true);
                    UpdateEvent evt = UpdateEvent.NewActorAdditionEvent(arg.Caster, target, arg.SkillSession, 4098, additionID, UpdateEvent.ExtraUpdateModes.Activate);
                    evt.UpdateType = UpdateTypes.Actor;
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk7A, target.Status.StanceFlag1.Value);
                    MapManager.Instance.GetMap(actor.MapInstanceID).SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, target, true);

                    Map.MoveArgument argu = new Map.MoveArgument()
                    {
                        BNSMoveType    = Map.MoveType.PushBack,
                        PushBackSource = arg.Caster
                    };
                    int distance = arg.Target.DistanceToActor(arg.Caster);
                    int forward  = distance < 40 ? 0 : distance - 20;
                    argu.SkillSession = arg.SkillSession;
                    float deltaX = (float)(arg.Caster.X - arg.Target.X) / distance;
                    float deltaY = (float)(arg.Caster.Y - arg.Target.Y) / distance;

                    argu.X   = arg.Target.X + (int)(deltaX * forward);
                    argu.Y   = arg.Target.Y + (int)(deltaY * forward);
                    argu.Z   = (short)arg.Caster.Z;
                    argu.Dir = arg.Target.Dir;
                    diffX    = argu.X - arg.Caster.X;
                    diffY    = argu.Y - arg.Caster.Y;

                    MapManager.Instance.GetMap(actor.MapInstanceID).MoveActor(arg.Target, argu, true);//*/

                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown400000000000, false);
                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown200000000000, false);
                    target.Status.StanceFlag1.SetValue(StanceU1.NoMove, false);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk7A, target.Status.StanceFlag1.Value);
                    MapManager.Instance.GetMap(actor.MapInstanceID).SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, target, true);
                }
                #endregion
                {
                    Map.Map map = Map.MapManager.Instance.GetMap(actor.MapInstanceID);

                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown4, true);
                    target.Status.StanceFlag1.SetValue(StanceU1.NoMove, true);
                    target.Status.StanceFlag1.SetValue(StanceU1.Unknown400000000000, true);
                    target.Status.InteractWith     = arg.Caster.ActorID;
                    arg.Caster.Status.InteractWith = target.ActorID;

                    UpdateEvent evt = UpdateEvent.NewActorAdditionEvent(arg.Caster, arg.Caster, 0, 0, 65000, UpdateEvent.ExtraUpdateModes.Activate);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractWith, (long)target.ActorID);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractionType, 7);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractionRelation, 1);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk74, 1);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.UnkD7, 1);
                    map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true);

                    evt = UpdateEvent.NewActorAdditionEvent(arg.Caster, target, arg.SkillSession, 4099, 12300011, UpdateEvent.ExtraUpdateModes.Activate);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk7A, target.Status.StanceFlag1.Value);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Dir, actor.Dir > 180 ? actor.Dir - 180 : 360 - actor.Dir);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractWith, (long)arg.Caster.ActorID);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractionType, 7);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.InteractionRelation, 2);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.Unk74, 1);
                    //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.UnkD7, 1);
                    map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true);

                    evt = UpdateEvent.NewActorAdditionExtEvent(target, arg.SkillSession, 4099, 12300011, 5000, UpdateEvent.ExtraUpdateModes.Activate);
                    map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true);
                }
            }
        }
Example #9
0
        public virtual void HandleSkillActivate(SkillArg arg)
        {
            SkillManager.Instance.DoAttack(arg);
            List <SkillAffectedActor> affected = arg.AffectedActors;
            bool pushedBack = false;

            Map.Map map = Map.MapManager.Instance.GetMap(arg.Caster.MapInstanceID);
            foreach (SkillAffectedActor i in affected)
            {
                SkillAttackResult res = i.Result;
                if (addMana && res != SkillAttackResult.Avoid && res != SkillAttackResult.Miss)
                {
                    if (arg.Caster.ActorType == SmartEngine.Network.Map.ActorType.PC && arg.Caster.MP < arg.Caster.MaxMP)
                    {
                        Network.Client.GameSession client = ((ActorPC)arg.Caster).Client();
                        if (client != null)
                        {
                            Interlocked.Increment(ref arg.Caster.MP);
                            ((ActorPC)arg.Caster).Client().SendPlayerMP();
                        }
                    }
                }
                pushedBack = true;
                bool noPushBack = false;
                if (i.Target is ActorNPC)
                {
                    noPushBack = ((ActorNPC)i.Target).BaseData.NoPushBack;
                }
                if (canPushBack > 0 && !noPushBack && res != SkillAttackResult.Miss && res != SkillAttackResult.Avoid)
                {
                    Map.MoveArgument argu = new Map.MoveArgument()
                    {
                        BNSMoveType = Map.MoveType.PushBack
                    };
                    bool pushed = map.HeightMapBuilder.GetMaximunPushBackPos(i.Target.X, i.Target.Y, i.Target.Z, arg.Caster.Dir, canPushBack, out argu.X, out argu.Y, out argu.Z);
                    int  delta  = Math.Abs(argu.Z - i.Target.Z);

                    if (pushed && delta < 50)
                    {
                        argu.PushBackSource = arg.Caster;
                        argu.Dir            = i.Target.Dir;
                        argu.SkillSession   = arg.SkillSession;
                        //SmartEngine.Core.Logger.Log.Info(argu.Z.ToString());
                        map.MoveActor(i.Target, argu, true);
                        if (stepForward > 0)
                        {
                            argu = new Map.MoveArgument()
                            {
                                BNSMoveType = Map.MoveType.StepForward
                            };
                            pushed   = map.HeightMapBuilder.GetMaximunPushBackPos(arg.Caster.X, arg.Caster.Y, arg.Caster.Z, arg.Caster.Dir, stepForward, out argu.X, out argu.Y, out argu.Z);
                            argu.Dir = arg.Caster.Dir;
                            delta    = Math.Abs(argu.Z - arg.Caster.Z);
                            //SmartEngine.Core.Logger.Log.Info(argu.Z.ToString());
                            if (pushed && delta < 50)
                            {
                                map.MoveActor(arg.Caster, argu, true);
                            }
                        }
                    }
                }
                break;
            }
            if (canPushBack > 0 && !pushedBack && stepForward > 0)
            {
                Map.MoveArgument argu = new Map.MoveArgument()
                {
                    BNSMoveType = Map.MoveType.StepForward
                };
                bool pushed = map.HeightMapBuilder.GetMaximunPushBackPos(arg.Caster.X, arg.Caster.Y, arg.Caster.Z, arg.Caster.Dir, stepForward, out argu.X, out argu.Y, out argu.Z);
                argu.SkillSession = arg.SkillSession;
                int delta = Math.Abs(argu.Z - arg.Caster.Z);
                //SmartEngine.Core.Logger.Log.Info(argu.Z.ToString());
                if (pushed && delta < 50)
                {
                    argu.Dir = arg.Caster.Dir;
                    map.MoveActor(arg.Caster, argu, true);
                }
            }
        }