Пример #1
0
        public void OnObjectRemoved(Sprite obj)
        {
            if (obj == null)
            {
                return;
            }

            if (!ServerContext.GlobalMapCache.ContainsKey(obj.CurrentMapId))
            {
                return;
            }

            obj.Map?.Update(obj.X, obj.Y, obj, true);

            if (obj is Monster || obj is Mundane)
            {
                var nearByAislings = obj.AislingsNearby();

                foreach (var nearbyAisling in nearByAislings)
                {
                    if (obj is Monster)
                    {
                        if ((obj as Monster).Script != null)
                        {
                            (obj as Monster).Script.OnDeath(nearbyAisling.Client);
                        }
                    }

                    if (nearbyAisling.RemoveFromView(obj))
                    {
                        obj.RemoveFrom(nearbyAisling);
                    }
                }
            }
        }
Пример #2
0
        public override void OnSuccess(Sprite sprite)
        {
            var a = sprite.AislingsNearby().ToList();
            var b = sprite.MonstersNearby().ToList();

            var i = a.Concat <Sprite>(b);

            if (i == null || !i.Any())
            {
                if (sprite is Aisling)
                {
                    var client = (sprite as Aisling).Client;
                    client.SendMessage(0x02, "The enemy has made it through.");
                    return;
                }
            }

            foreach (var target in i)
            {
                if (target.Serial == sprite.Serial)
                {
                    continue;
                }


                var debuff = new debuff_beagsuain();

                if (!target.HasDebuff(debuff.Name))
                {
                    if (sprite is Aisling)
                    {
                        var client = (sprite as Aisling).Client;
                        var action = new ServerFormat1A
                        {
                            Serial = client.Aisling.Serial,
                            Number = 0x81,
                            Speed  = 20
                        };

                        client.Aisling.Show(Scope.NearbyAislings, action);
                        {
                            target.ApplyDamage(client.Aisling, 0, false, Skill.Template.Sound);
                            debuff.OnApplied(target, debuff);
                        }
                    }
                }
            }
        }
        public override void OnUse(Sprite sprite, Sprite target)
        {
            if (sprite is Aisling)
            {
                var client = (sprite as Aisling).Client;
                if (client.Aisling.CurrentMp >= Spell.Template.ManaCost)
                {
                    client.TrainSpell(Spell);

                    var action = new ServerFormat1A
                    {
                        Serial = sprite.Serial,
                        Number = (byte)(client.Aisling.Path == Class.Priest ? 0x80 :
                                        client.Aisling.Path == Class.Wizard ? 0x88 : 0x06),
                        Speed = 30
                    };

                    if (sprite.GroupId == 0)
                    {
                        client.Aisling.CurrentMp -= Spell.Template.ManaCost;
                    }
                    else
                    {
                        foreach (var obj in sprite.AislingsNearby().Where(i => i.GroupId == sprite.GroupId))
                        {
                            if (obj.Dead)
                            {
                                continue;
                            }

                            obj.CurrentHp += obj.MaximumHp / 10;

                            if (obj.CurrentHp > obj.MaximumHp)
                            {
                                obj.CurrentHp = obj.MaximumHp;
                            }

                            if (client.Aisling.CurrentMp < 0)
                            {
                                client.Aisling.CurrentMp = 0;
                            }

                            if (obj.CurrentHp > 0)
                            {
                                var hpbar = new ServerFormat13
                                {
                                    Serial = obj.Serial,
                                    Health = (ushort)(100 * obj.CurrentHp / obj.MaximumHp),
                                    Sound  = 8
                                };
                                obj.Show(Scope.NearbyAislings, hpbar);
                            }

                            obj.Client.SendStats(StatusFlags.StructB);
                            client.SendAnimation(0x04, obj, client.Aisling);
                        }
                    }

                    client.Aisling.Show(Scope.NearbyAislings, action);
                    client.SendMessage(0x02, "you cast " + Spell.Template.Name + ".");
                    client.SendStats(StatusFlags.All);
                }
                else
                {
                    if (sprite is Aisling)
                    {
                        (sprite as Aisling).Client.SendMessage(0x02, ServerContextBase.Config.NoManaMessage);
                    }
                }
            }
            else
            {
                sprite.CurrentHp = sprite.MaximumHp;

                var hpbar = new ServerFormat13
                {
                    Serial = sprite.Serial,
                    Health = (ushort)(100 * sprite.CurrentHp / sprite.MaximumHp),
                    Sound  = 8
                };

                sprite.SendAnimation(0x04, sprite, sprite);
                sprite.Show(Scope.NearbyAislings, hpbar);
            }
        }