private void MainServerLoop() { _lastHeavyUpdate = DateTime.UtcNow; while (true) { var elapsedTime = DateTime.UtcNow - _lastHeavyUpdate; Lorule.Update(() => { UpdateClients(elapsedTime); UpdateComponents(elapsedTime); UpdateAreas(elapsedTime); _lastHeavyUpdate = DateTime.UtcNow; Thread.Sleep(_heavyUpdateSpan); }); } }
private async void UpdateServer() { _previousGameTime = DateTime.UtcNow; while (ServerContext.Running) { var gameTime = DateTime.UtcNow - _previousGameTime; Lorule.Update(() => { UpdateClients(gameTime); UpdateComponents(gameTime); foreach (var map in ServerContext.GlobalMapCache) { map.Value?.Update(gameTime); } }); _previousGameTime += gameTime; await Task.Delay(8); } }
public GameClient LoadSpellBook() { lock (_syncObj) { Lorule.Update(() => { var spellsAvailable = Aisling.SpellBook.Spells.Values .Where(i => i != null && i.Template != null).ToArray(); for (var i = 0; i < spellsAvailable.Length; i++) { var spell = spellsAvailable[i]; if (spell.Template != null) { if (ServerContextBase.GlobalSpellTemplateCache.ContainsKey(spell.Template.Name)) { var template = ServerContextBase.GlobalSpellTemplateCache[spell.Template.Name]; { spell.Template = template; } } } spell.Lines = spell.Template.BaseLines; Spell.AttachScript(Aisling, spell); { Aisling.SpellBook.Set(spell, false); } Send(new ServerFormat17(spell)); if (spell.NextAvailableUse.Year > 1) { Task.Delay(1000).ContinueWith(ct => { var delta = (int)Math.Abs((DateTime.UtcNow - spell.NextAvailableUse).TotalSeconds); var offset = Math.Abs(spell.Template.Cooldown - delta); if (delta <= spell.Template.Cooldown) { Send(new ServerFormat3F(0, spell.Slot, delta)); } }); } else { spell.NextAvailableUse = DateTime.UtcNow; } } if (Aisling.GameMaster) { foreach (var spell in ServerContextBase.GlobalSpellTemplateCache.Select(i => i.Value)) { if (spell.Name.StartsWith("[GM]")) { if (Spell.GiveTo(Aisling, spell.Name, 1)) { ServerContext.Logger( $"[GM] -> Spell {spell.Name} Given to GameMaster {Aisling.Username}."); } } } } }); } return(this); }
private static void Pulse(TimeSpan elapsedTime, IGameClient client) { Lorule.Update(() => { client.Update(elapsedTime); }); }