Пример #1
0
        public Area Load(string Name)
        {
            var path = Path.Combine(StoragePath, $"{Name.ToLower()}.json");

            if (!File.Exists(path))
            {
                return(null);
            }

            using (var s = File.OpenRead(path))
                using (var f = new StreamReader(s))
                {
                    var content  = f.ReadToEnd();
                    var settings = StorageManager.Settings;
                    settings.TypeNameHandling = TypeNameHandling.None;

                    try
                    {
                        var obj = JsonConvert.DeserializeObject <Area>(content, settings);

                        ServerContextBase.Report(obj);


                        return(obj);
                    }
                    catch (Exception e)
                    {
                        ServerContextBase.Report(e);
                        return(null);
                    }
                }
        }
        private void LoadSpellScript(string spellscriptstr, bool primary = false)
        {
            try
            {
                if (ServerContextBase.GlobalSpellTemplateCache.ContainsKey(spellscriptstr))
                {
                    var scripts = ScriptManager.Load <SpellScript>(spellscriptstr,
                                                                   Spell.Create(1, ServerContextBase.GlobalSpellTemplateCache[spellscriptstr]));

                    foreach (var script in scripts.Values)
                    {
                        if (script != null)
                        {
                            script.IsScriptDefault = primary;
                            SpellScripts.Add(script);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
                //ignore
            }
        }
        public bool IsMet(Aisling player, Action <string, bool> callbackMsg = null)
        {
            var result = new Dictionary <int, Tuple <bool, object> >();
            var n      = 0;

            try
            {
                n = CheckSpellandSkillPredicates(player, result, n);
                n = CHeckAttributePredicates(player, result, n);
                n = CheckItemPredicates(player, result, n);
                n = CheckQuestPredicates(player, result, n);
            }
            catch (Exception e)
            {
                player.Client.CloseDialog();
                player.Client.SendMessage(0x02, "You cannot learn that yet. Not even close!");
                player.SendAnimation(94, player, player);

                ServerContextBase.Report(e);

                //ignore
                return(false);
            }

            var ready = CheckPredicates(callbackMsg, result);

            {
                if (ready)
                {
                    player.SendAnimation(92, player, player);
                }
            }

            return(ready);
        }
Пример #4
0
    /// <summary>
    ///     Clears the entire cache and disposes all active timers.
    /// </summary>
    public void Clear()
    {
        locker.EnterWriteLock();
        try
        {
            try
            {
                foreach (var t in timers.Values)
                {
                    t.Dispose();
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
            }

            timers.Clear();
            cache.Clear();
        }
        finally
        {
            locker.ExitWriteLock();
        }
    }
Пример #5
0
        public override void ClientDisconnected(GameClient client)
        {
            if (client?.Aisling == null)
            {
                return;
            }

            try
            {
                if ((DateTime.UtcNow - client.LastSave).TotalSeconds > 2)
                {
                    client.Save();
                }

                client.Aisling.LoggedIn = false;
                client.Aisling.Remove(true);
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
            }
            finally
            {
                base.ClientDisconnected(client);
            }
        }
        public void Save(Aisling obj)
        {
            if (ServerContextBase.Paused)
            {
                return;
            }

            try
            {
                var path = Path.Combine(StoragePath, $"{obj.Username.ToLower()}.json");


                var objString = JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.All
                });

                File.WriteAllText(path, objString);
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
                /* Ignore */
            }
        }
Пример #7
0
        public void EndReceivePacket(IAsyncResult result)
        {
            try
            {
                if (!(result.AsyncState is TClient client))
                {
                    return;
                }

                var bytes = client.ServerSocket.EndReceivePacket(result, out var error);

                if (bytes == 0 ||
                    error != SocketError.Success)
                {
                    ClientDisconnected(client);
                    return;
                }


                if (client.ServerSocket?.PacketComplete ?? false)
                {
                    ClientDataReceived(client, client.ServerSocket?.ToPacket());
                    client.ServerSocket?.BeginReceiveHeader(EndReceiveHeader, out error, client);
                }
                else
                {
                    client.ServerSocket?.BeginReceivePacket(EndReceivePacket, out error, client);
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
                //ignore
            }
        }
Пример #8
0
        public override void Serialize(NetworkPacketReader reader)
        {
            var data = CHeckData(reader);

            reader.Position = 0;
            Index           = reader.ReadByte();

            try
            {
                if (reader.GetCanRead())
                {
                    Serial = reader.ReadUInt32();
                }

                if (reader.Position + 4 < reader.Packet.Data.Length)
                {
                    Point = reader.ReadPosition();
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
            }
            finally
            {
                Data = data.Trim('\0');
            }
        }
Пример #9
0
        public int EndReceiveHeader(IAsyncResult result, out SocketError error)
        {
            try
            {
                var bytes = EndReceive(result, out error);

                if (bytes == 0 ||
                    error != SocketError.Success)
                {
                    return(0);
                }

                headerOffset += bytes;

                if (!HeaderComplete)
                {
                    return(bytes);
                }

                packetLength = (header[1] << 8) | header[2];
                packetOffset = 0;

                return(bytes);
            }
            catch (Exception e)
            {
                error = SocketError.SocketError;
                ServerContextBase.Report(e);
                ServerContextBase.Report(error);
            }


            return(0);
        }
Пример #10
0
        public virtual void ClientDataReceived(TClient client, NetworkPacket packet)
        {
            if (client == null)
            {
                return;
            }

            if (!client.ServerSocket.Connected)
            {
                return;
            }

            if (packet == null)
            {
                return;
            }

            NetworkFormat format;

            if (_formatCache.Exists(packet.Command))
            {
                format = _formatCache.Get(packet.Command);
            }
            else
            {
                format = NetworkFormatManager.GetClientFormat(packet.Command);
                _formatCache.AddOrUpdate(packet.Command, format, Timeout.Infinite);
            }

            if (format == null)
            {
                return;
            }

            try
            {
                client.Read(packet, format);

                if (_handlers[format.Command]?.Invoke(this,
                                                      new object[]
                {
                    client,
                    format
                }) != null)
                {
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
                //Ignore
            }
        }
Пример #11
0
        public void Save(Area obj)
        {
            if (ServerContextBase.Paused)
            {
                return;
            }


            var path      = Path.Combine(StoragePath, $"{obj.ContentName.ToLower()}.json");
            var objString = JsonConvert.SerializeObject(obj, StorageManager.Settings);

            File.WriteAllText(path, objString);

            ServerContextBase.Report(obj);
        }
Пример #12
0
        /// <summary>
        ///     Login - Check username/password. Proceed to Game Client.
        /// </summary>
        protected override void Format03Handler(LoginClient client, ClientFormat03 format)
        {
            Aisling _aisling = null;

            try
            {
                _aisling = StorageManager.AislingBucket.Load(format.Username);

                if (_aisling != null)
                {
                    if (_aisling.Password != format.Password)
                    {
                        client.SendMessageBox(0x02, "Sorry, Incorrect Password.");
                        return;
                    }
                }
                else
                {
                    client.SendMessageBox(0x02,
                                          $"{format.Username} does not exist in this world. You can make this hero by clicking on 'Create'.");
                    return;
                }
            }
            catch (Exception e)
            {
                client.SendMessageBox(0x02,
                                      $"{format.Username} is not supported by the new server. Please remake your character. This will not happen when the server goes to beta.");

                ServerContextBase.Report(e);

                return;
            }

            if (!ServerContextBase.GlobalConfig.MultiUserLogin)
            {
                var aislings = GetObjects <Aisling>(null,
                                                    i => i.Username.ToLower() == format.Username.ToLower() &&
                                                    format.Password == i.Password);

                foreach (var aisling in aislings)
                {
                    aisling.Client.Server.ClientDisconnected(aisling.Client);
                }
            }

            LoginAsAisling(client, _aisling);
        }
        public TD Load <TD>(string name, string fixedPath = null) where TD : class, new()
        {
            var path = fixedPath ?? Path.Combine(StoragePath, $"{name.ToLower()}.json");

            if (!File.Exists(path))
            {
                return(null);
            }

            using (var s = File.OpenRead(path))
            {
                using (var f = new StreamReader(s))
                {
                    var obj = JsonConvert.DeserializeObject <TD>(f.ReadToEnd(), StorageManager.Settings);
                    ServerContextBase.Report(obj);
                    return(obj);
                }
            }
        }
Пример #14
0
        private async Task UpdateComponents(TimeSpan elapsedTime)
        {
            try
            {
                foreach (var component in Components.Values)
                {
                    component.Update(elapsedTime);
                }
            }
            catch (Exception e)
            {
                await Task.FromException(e);

                ServerContextBase.Report(e);
                throw;
            }

            await Task.CompletedTask;
        }
Пример #15
0
        private async Task UpdateAreas(TimeSpan elapsedTime)
        {
            var values = ServerContextBase.GlobalMapCache.Select(i => i.Value).ToArray();

            try
            {
                foreach (var area in values)
                {
                    area.Update(elapsedTime);
                }
            }
            catch (Exception e)
            {
                await Task.FromException(e);

                ServerContextBase.Report(e);
                throw;
            }

            await Task.CompletedTask;
        }
        public bool CastSpell(string spellName, Sprite caster, Sprite target)
        {
            if (ServerContextBase.GlobalSpellTemplateCache.ContainsKey(spellName))
            {
                var scripts = ScriptManager.Load <SpellScript>(spellName,
                                                               Spell.Create(1, ServerContextBase.GlobalSpellTemplateCache[spellName]));
                {
                    foreach (var script in scripts.Values)
                    {
                        script.OnUse(caster, target);

                        ServerContextBase.Report(
                            $"[Spell {spellName} Casted By {caster.Serial} At Target {target.Serial}]");
                    }

                    return(true);
                }
            }

            return(false);
        }
        public static byte[] Inflate(byte[] buffer)
        {
            using (var iStream = new MemoryStream(buffer))
                using (var oStream = new MemoryStream())
                    using (var zStream = new ZOutputStream(oStream))
                    {
                        try
                        {
                            CopyStream(iStream, zStream);

                            zStream.finish();

                            return(oStream.ToArray());
                        }
                        catch (Exception e)
                        {
                            ServerContextBase.Report(e);

                            return(null);
                        }
                    }
        }
Пример #18
0
        private async void MainServerLoop()
        {
            _lastHeavyUpdate = DateTime.UtcNow;

            while (ServerContextBase.Running)
            {
                var elapsedTime = DateTime.UtcNow - _lastHeavyUpdate;

                try
                {
                    await UpdateClients(elapsedTime);
                    await UpdateComponents(elapsedTime);
                    await UpdateAreas(elapsedTime);
                }
                catch (Exception e)
                {
                    ServerContextBase.Report(e);
                }

                _lastHeavyUpdate = DateTime.UtcNow;
                await Task.Delay(_heavyUpdateSpan);
            }
        }
Пример #19
0
        public static void ApplyQuality(Item obj)
        {
            try
            {
                if (obj.Template == null)
                {
                    return;
                }

                var template = (ItemTemplate)StorageManager.ItemBucket.LoadFromStorage(obj.Template);
                if (template == null)
                {
                    return;
                }


                obj.Template                = new ItemTemplate();
                obj.Template.AcModifer      = template.AcModifer;
                obj.Template.CanStack       = template.CanStack;
                obj.Template.CarryWeight    = template.CarryWeight;
                obj.Template.Class          = template.Class;
                obj.Template.Color          = template.Color;
                obj.Template.ConModifer     = template.ConModifer;
                obj.Template.DefenseElement = template.DefenseElement;
                obj.Template.DexModifer     = template.DexModifer;
                obj.Template.DisplayImage   = template.DisplayImage;
                obj.Template.DmgMax         = template.DmgMax;
                obj.Template.DmgMin         = template.DmgMin;
                obj.Template.DmgModifer     = template.DmgModifer;
                obj.Template.DropRate       = template.DropRate;
                obj.Template.EquipmentSlot  = template.EquipmentSlot;
                obj.Template.Flags          = template.Flags;
                obj.Template.Gender         = template.Gender;
                obj.Template.HasPants       = template.HasPants;
                obj.Template.HealthModifer  = template.HealthModifer;
                obj.Template.HitModifer     = template.HitModifer;
                obj.Template.ID             = template.ID;
                obj.Template.Image          = template.Image;
                obj.Template.IntModifer     = template.IntModifer;
                obj.Template.LevelRequired  = template.LevelRequired;
                obj.Template.ManaModifer    = template.ManaModifer;
                obj.Template.MaxDurability  = template.MaxDurability;
                obj.Template.MaxStack       = template.MaxStack;
                obj.Template.MrModifer      = template.MrModifer;
                obj.Template.Name           = template.Name;
                obj.Template.NpcKey         = template.NpcKey;
                obj.Template.OffenseElement = template.OffenseElement;
                obj.Template.ScriptName     = template.ScriptName;
                obj.Template.SpellOperator  = template.SpellOperator;
                obj.Template.StageRequired  = template.StageRequired;
                obj.Template.StrModifer     = template.StrModifer;
                obj.Template.Value          = template.Value;
                obj.Template.Weight         = template.Weight;
                obj.Template.WisModifer     = template.WisModifer;

                if (obj.Upgrades > 0)
                {
                    if (obj.Template.AcModifer != null)
                    {
                        if (obj.Template.AcModifer.Option == Operator.Remove)
                        {
                            obj.Template.AcModifer.Value -= -obj.Upgrades;
                        }
                    }

                    if (obj.Template.MrModifer != null)
                    {
                        if (obj.Template.MrModifer.Option == Operator.Add)
                        {
                            obj.Template.MrModifer.Value += obj.Upgrades * 10;
                        }
                    }

                    if (obj.Template.HealthModifer != null)
                    {
                        if (obj.Template.HealthModifer.Option == Operator.Add)
                        {
                            obj.Template.HealthModifer.Value += 500 * obj.Upgrades;
                        }
                    }

                    if (obj.Template.ManaModifer != null)
                    {
                        if (obj.Template.ManaModifer.Option == Operator.Add)
                        {
                            obj.Template.ManaModifer.Value += 300 * obj.Upgrades;
                        }
                    }

                    if (obj.Template.StrModifer != null)
                    {
                        if (obj.Template.StrModifer.Option == Operator.Add)
                        {
                            obj.Template.StrModifer.Value += obj.Upgrades;
                        }
                    }

                    if (obj.Template.IntModifer != null)
                    {
                        if (obj.Template.IntModifer.Option == Operator.Add)
                        {
                            obj.Template.IntModifer.Value += obj.Upgrades;
                        }
                    }

                    if (obj.Template.WisModifer != null)
                    {
                        if (obj.Template.WisModifer.Option == Operator.Add)
                        {
                            obj.Template.WisModifer.Value += obj.Upgrades;
                        }
                    }
                    if (obj.Template.ConModifer != null)
                    {
                        if (obj.Template.ConModifer.Option == Operator.Add)
                        {
                            obj.Template.ConModifer.Value += obj.Upgrades;
                        }
                    }

                    if (obj.Template.DexModifer != null)
                    {
                        if (obj.Template.DexModifer.Option == Operator.Add)
                        {
                            obj.Template.DexModifer.Value += obj.Upgrades;
                        }
                    }

                    if (obj.Template.DmgModifer != null)
                    {
                        if (obj.Template.DmgModifer.Option == Operator.Add)
                        {
                            obj.Template.DmgModifer.Value += obj.Upgrades;
                        }
                    }

                    if (obj.Template.HitModifer != null)
                    {
                        if (obj.Template.HitModifer.Option == Operator.Add)
                        {
                            obj.Template.HitModifer.Value += obj.Upgrades;
                        }
                    }

                    obj.Template.LevelRequired -= (byte)obj.Upgrades;
                    obj.Template.Value         *= (byte)obj.Upgrades;
                    obj.Template.MaxDurability += (byte)(1500 * obj.Upgrades);
                    obj.Template.DmgMax        += 100 * obj.Upgrades;
                    obj.Template.DmgMin        += 20 * obj.Upgrades;


                    if (obj.Template.LevelRequired <= 0 || obj.Template.LevelRequired > 99)
                    {
                        obj.Template.LevelRequired = 1;
                    }
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
            }
        }
Пример #20
0
 private void OnError(SocketError error)
 {
     ServerContextBase.Report(error);
 }
        public override void Update(TimeSpan elapsedTime)
        {
            if (Monster == null)
            {
                return;
            }

            if (!Monster.IsAlive)
            {
                return;
            }

            if (Monster.IsConfused || Monster.IsFrozen || Monster.IsParalyzed || Monster.IsSleeping)
            {
                return;
            }

            if (Monster.Target != null && Monster.TaggedAislings.Count > 0 && Monster.Template.EngagedWalkingSpeed > 0)
            {
                Monster.WalkTimer.Delay = TimeSpan.FromMilliseconds(Monster.Template.EngagedWalkingSpeed);
            }

            if (Monster.Target != null && Monster.Target is Aisling)
            {
                if ((Monster.Target as Aisling).Invisible)
                {
                    ClearTarget();
                    Monster.WalkTimer.Update(elapsedTime);
                    return;
                }
            }

            Monster.BashTimer.Update(elapsedTime);
            Monster.CastTimer.Update(elapsedTime);
            Monster.WalkTimer.Update(elapsedTime);

            try
            {
                if (Monster.BashTimer.Elapsed)
                {
                    Monster.BashTimer.Reset();

                    if (Monster.BashEnabled)
                    {
                        Bash();
                    }
                }

                if (Monster.CastTimer.Elapsed)
                {
                    Monster.CastTimer.Reset();

                    if (Monster.CastEnabled)
                    {
                        CastSpell();
                    }
                }

                if (Monster.WalkTimer.Elapsed)
                {
                    Monster.WalkTimer.Reset();

                    if (Monster.WalkEnabled)
                    {
                        Walk();
                    }
                }
            }
            catch (Exception e)
            {
                ServerContextBase.Report(e);
                //ignore
            }
        }