public void AddBuff(ScriptableBuff scriptableBuff) { Buff buff = scriptableBuff.InitializeBuff(gameObject); buff.Activate(); activeBuffs.Add(buff); }
public void AddBuff(Buff buff) { string _key = buff.m_sName; if (m_Buffs.ContainsKey(_key)) { Buff _buff = m_Buffs[_key]; if (_buff.m_nStackNum < _buff.m_nMaxStackNum) { _buff.m_nStackNum++; foreach (var attr in buff.m_Bonuses) { m_Owner.ApplyBonus(attr); } } _buff.m_fTimeLeft = _buff.m_fDuration; } else { buff.Activate(); buff.m_fTimeLeft = buff.m_fDuration; buff.m_nStackNum = 1; foreach (var attr in buff.m_Bonuses) { m_Owner.ApplyBonus(attr); } m_Buffs.Add(buff.m_sName, buff); buff.Attach(m_Owner); } }
public Buff AddBuff(Buff buff) { Buff temp = Instantiate(buff, this.transform); buffs.Add(temp); temp.Owner = GetComponent <Character>(); if (temp.ActivateRightAway == true) { temp.Activate(this); } return(temp); }
public void AddBuff(InteractiveObject obj, Buff buff) { var buffWithSameType = GetBuffWithSameType(buff); if (buff.canRepeated || buffWithSameType == null) { buffs.Add(buff); buff.Activate(obj); } else { buffWithSameType.Reset(); } }
public override TaskState Process() { var source = Source as IPlayable; if (source == null || Buff == null) { return(TaskState.STOP); } var entities = IncludeTask.GetEntites(Type, Controller, Source, Target, Playables); if (Condition != null) { entities = entities.Where(p => Condition.Eval(p)).ToList(); } entities.ForEach(p => Buff.Activate(source.Card.Id, p.Enchants, p)); return(TaskState.COMPLETE); }
public unsafe void HandleSkillActivate(SkillArg arg) { if (arg.Caster.Tasks.ContainsKey("FoodRecovery")) { Buff buff = arg.Caster.Tasks["FoodRecovery"] as Buff; buff.Deactivate(); } Map.Map map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID); Buff add = new Buff(arg.Caster, "FoodRecovery", arg.Skill.BaseData.Duration, 2000); add.OnAdditionStart += (actor, addition) => { UpdateEvent evt = new UpdateEvent() { Actor = actor, Target = actor, Skill = arg.Skill, SkillSession = arg.SkillSession, AdditionID = arg.Skill.BaseData.Effect, AdditionSession = 20481, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate, UpdateType = UpdateTypes.Actor }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); evt = new UpdateEvent() { Actor = actor, Target = actor, Skill = arg.Skill, AdditionSession = 20481, AdditionID = arg.Skill.BaseData.Effect, RestTime = arg.Skill.BaseData.Duration, SkillSession = arg.SkillSession, UpdateType = UpdateTypes.ActorExtension }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); }; add.OnUpdate += (actor, addition) => { ActorExt act = (ActorExt)actor; if (act.HP < act.MaxHP) { Interlocked.Add(ref act.HP, recovery); if (act.HP > act.MaxHP) { Interlocked.Exchange(ref act.HP, act.MaxHP); } UpdateEvent evt = new UpdateEvent() { Actor = actor, Target = actor, UpdateType = UpdateTypes.Actor }; evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.HP, act.HP); evt.SkillSession = arg.SkillSession; evt.AdditionID = arg.Skill.BaseData.Effect; evt.AdditionSession = 20481; evt.ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Update; byte[] buf = new byte[9]; fixed(byte *res = buf) { res[0] = 8; *(int *)&res[1] = recovery; } evt.UserData = buf; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); } }; add.OnAdditionEnd += (actor, addition, cancel) => { ((ActorExt)actor).Tasks.TryRemove("FoodRecovery", out Task removed); UpdateEvent evt = new UpdateEvent() { Actor = actor, Target = actor, Skill = arg.Skill, AdditionID = arg.Skill.BaseData.Effect, AdditionSession = 20481, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel, SkillSession = arg.SkillSession, UpdateType = UpdateTypes.Actor, UserData = new byte[] { 9, 1, 0 } }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); evt = new UpdateEvent() { Actor = actor, Target = actor, Skill = arg.Skill, AdditionSession = 20481, AdditionID = arg.Skill.BaseData.Effect, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel, SkillSession = arg.SkillSession, UpdateType = UpdateTypes.ActorExtension }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); SkillManager.Instance.BroadcastSkillCast(arg, SkillMode.End); }; arg.Caster.Tasks["FoodRecovery"] = add; add.Activate(); }
protected override void Effects(Character c) { buff.Activate(c); }
public void HandleSkillActivate(SkillArg arg) { if (arg.Caster.Tasks.ContainsKey("SwordBlocking")) { Buff buff = arg.Caster.Tasks["SwordBlocking"] as Buff; buff.Deactivate(); } Buff add = new Buff(arg.Caster, "SwordBlocking", arg.Skill.BaseData.Duration); Map.Map map = MapManager.Instance.GetMap(arg.Caster.MapInstanceID); add.OnAdditionStart += (actor, addition) => { ((ActorExt)actor).Status.Blocking = true; UpdateEvent evt = new UpdateEvent() { Actor = actor, AdditionSession = 20481, Target = actor, Skill = arg.Skill, AdditionID = motion, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate, UpdateType = UpdateTypes.Actor }; //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.BlockingStance, 1); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); evt = new UpdateEvent() { Actor = actor, AdditionSession = 20481, SkillSession = arg.SkillSession }; if (motion > 0) { evt.AdditionID = motion; } else { evt.AdditionID = arg.Skill.ID < 1000000 ? (arg.Skill.ID * 1000 + 11) : (arg.Skill.ID * 10 + 1); } evt.RestTime = arg.Skill.BaseData.Duration; evt.UpdateType = UpdateTypes.ActorExtension; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); }; add.OnAdditionEnd += (actor, addition, cancel) => { ((ActorExt)actor).Status.Blocking = false; ((ActorExt)actor).Tasks.TryRemove("SwordBlocking", out Task removed); UpdateEvent evt = new UpdateEvent() { Actor = actor, Target = actor, AdditionSession = 20481, AdditionID = motion, Skill = arg.Skill, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel, SkillSession = arg.SkillSession, UpdateType = UpdateTypes.Actor, UserData = new byte[] { 9, 1, 0 } }; //evt.AddActorPara(SagaBNS.Common.Packets.GameServer.PacketParameter.BlockingStance, 0); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); evt = new UpdateEvent() { Actor = actor, AdditionSession = 20481, SkillSession = arg.SkillSession }; if (motion > 0) { evt.AdditionID = motion; } else { evt.AdditionID = arg.Skill.ID < 1000000 ? (arg.Skill.ID * 1000 + 11) : (arg.Skill.ID * 10 + 1); } evt.ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel; evt.UpdateType = UpdateTypes.ActorExtension; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, actor, true); SkillManager.Instance.BroadcastSkillCast(arg, SkillMode.End); }; arg.Caster.Tasks["SwordBlocking"] = add; add.Activate(); }
public void HandleSkillActivate(SkillArg arg) { SkillManager.Instance.DoAttack(arg); foreach (SkillAffectedActor i in arg.AffectedActors) { SkillAttackResult res = i.Result; if (res != SkillAttackResult.Avoid && res != SkillAttackResult.Miss) { if (arg.Caster.Tasks.ContainsKey("ActorTakeDown")) { Buff buff = arg.Caster.Tasks["ActorTakeDown"] as Buff; buff.Deactivate(); } if (i.Target.Tasks.ContainsKey("ActorDown")) { Buff buff = i.Target.Tasks["ActorDown"] as Buff; buff.TotalLifeTime += 3000; } Buff add = new Buff(arg.Caster, "ActorTakeDown", 3000); add.OnAdditionStart += (actor, addition) => { Map.Map map = MapManager.Instance.GetMap(actor.MapInstanceID); if (!arg.Caster.Status.TakeDown) { arg.Caster.Status.TakeDown = true; i.Target.Status.TakenDown = true; i.Target.Status.StanceFlag1.SetValue(StanceU1.TakenDown, true); i.Target.Status.StanceFlag2.SetValue(StanceU2.TakenDown1, true); i.Target.Status.StanceFlag2.SetValue(StanceU2.TakenDown2, true); i.Target.Status.InteractWith = arg.Caster.ActorID; arg.Caster.Status.InteractWith = i.Target.ActorID; i.Target.Dir = (ushort)(arg.Caster.Dir + 180); if (i.Target.Dir >= 360) { i.Target.Dir -= 360; } UpdateEvent evt = new UpdateEvent() { Actor = arg.Caster, Target = arg.Caster, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate, UpdateType = UpdateTypes.Actor }; evt.AddActorPara(PacketParameter.X, i.Target.X); evt.AddActorPara(PacketParameter.Y, i.Target.Y); //evt.AddActorPara(PacketParameter.InteractWith, (long)arg.Caster.Status.InteractWith); //evt.AddActorPara(PacketParameter.InteractionType, 1); //evt.AddActorPara(PacketParameter.InteractionRelation, 1); //evt.AddActorPara(PacketParameter.Unk74, 1); //evt.AddActorPara(PacketParameter.UnkD7, 1); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = new UpdateEvent() { Actor = arg.Caster, AdditionID = additionTarget, Target = i.Target, Skill = arg.Skill, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate, UpdateType = UpdateTypes.Actor }; //evt.AddActorPara(PacketParameter.Unk7A, i.Target.Status.StanceFlag1.Value); //evt.AddActorPara(PacketParameter.Unk7B, i.Target.Status.StanceFlag2.Value); //evt.AddActorPara(PacketParameter.Dir, i.Target.Dir); //evt.AddActorPara(PacketParameter.InteractWith, (long)i.Target.Status.InteractWith); //evt.AddActorPara(PacketParameter.InteractionType, 1); //evt.AddActorPara(PacketParameter.InteractionRelation, 2); //evt.AddActorPara(PacketParameter.Unk74, 1); //evt.AddActorPara(PacketParameter.UnkD7, 1); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = UpdateEvent.NewActorAdditionExtEvent(i.Target, arg.SkillSession, 11, additionTarget, 3000, UpdateEvent.ExtraUpdateModes.Activate); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = new UpdateEvent() { Actor = arg.Caster, Target = arg.Caster, AdditionID = additionSelf, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Activate, UpdateType = UpdateTypes.Actor }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = UpdateEvent.NewActorAdditionExtEvent(arg.Caster, arg.SkillSession, 11, additionSelf, 3000, UpdateEvent.ExtraUpdateModes.Activate); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, arg.Caster, true); } }; add.OnAdditionEnd += (actor, addition, cancel) => { Map.Map map = MapManager.Instance.GetMap(actor.MapInstanceID); if (i.Target.Tasks.ContainsKey("ActorDown")) { Buff buff = i.Target.Tasks["ActorDown"] as Buff; buff.Deactivate(); } arg.Caster.Status.TakeDown = false; i.Target.Status.TakenDown = false; i.Target.Status.StanceFlag1.SetValue(StanceU1.TakenDown, false); i.Target.Status.StanceFlag2.SetValue(StanceU2.TakenDown1, false); i.Target.Status.StanceFlag2.SetValue(StanceU2.TakenDown2, false); i.Target.Status.InteractWith = 0; arg.Caster.Status.InteractWith = 0; arg.Caster.Tasks.TryRemove("ActorTakeDown", out Task removed); UpdateEvent evt = new UpdateEvent() { Actor = arg.Caster, Target = arg.Caster, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel, UpdateType = UpdateTypes.Actor }; //evt.AddActorPara(PacketParameter.X, arg.Caster.X); //evt.AddActorPara(PacketParameter.Y, arg.Caster.Y); //evt.AddActorPara(PacketParameter.InteractWith, (long)arg.Caster.Status.InteractWith); //evt.AddActorPara(PacketParameter.InteractionType, 0); //evt.AddActorPara(PacketParameter.InteractionRelation, 0); //evt.AddActorPara(PacketParameter.Unk74, 0); //evt.AddActorPara(PacketParameter.UnkD7, 0); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = UpdateEvent.NewActorAdditionExtEvent(arg.Caster, arg.SkillSession, 11, additionSelf, 3000, UpdateEvent.ExtraUpdateModes.Cancel); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, arg.Caster, true); evt = new UpdateEvent() { Actor = arg.Caster, AdditionID = additionTarget, Target = i.Target, Skill = arg.Skill, SkillSession = arg.SkillSession, ExtraActivateMode = UpdateEvent.ExtraUpdateModes.Cancel, UpdateType = UpdateTypes.Actor, //evt.AddActorPara(PacketParameter.Unk7A, i.Target.Status.StanceFlag1.Value); //evt.AddActorPara(PacketParameter.Unk7B, i.Target.Status.StanceFlag2.Value); //evt.AddActorPara(PacketParameter.InteractWith, (long)i.Target.Status.InteractWith); //evt.AddActorPara(PacketParameter.InteractionType, 0); //evt.AddActorPara(PacketParameter.InteractionRelation, 0); //evt.AddActorPara(PacketParameter.Unk74, 0); //evt.AddActorPara(PacketParameter.UnkD7, 0); UserData = new byte[] { 9, 1, 0 } }; map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); evt = UpdateEvent.NewActorAdditionExtEvent(i.Target, arg.SkillSession, 11, additionTarget, 3000, UpdateEvent.ExtraUpdateModes.Cancel); map.SendEventToAllActorsWhoCanSeeActor(MapEvents.EVENT_BROADCAST, evt, i.Target, true); }; arg.Caster.Tasks["ActorTakeDown"] = add; add.Activate(); } } }