Exemplo n.º 1
0
    public void AddBuff(ScriptableBuff scriptableBuff)
    {
        Buff buff = scriptableBuff.InitializeBuff(gameObject);

        buff.Activate();
        activeBuffs.Add(buff);
    }
Exemplo n.º 2
0
    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);
        }
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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();
        }
    }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
 protected override void Effects(Character c)
 {
     buff.Activate(c);
 }
Exemplo n.º 8
0
        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();
        }
Exemplo n.º 9
0
        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();
                }
            }
        }