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); }
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(); } }
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(); }
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); }
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); }
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); }
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(); }
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); } } }
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); } } }