private static void DoLogin(PlayerData player) { PlayerData.ExternalZ = false; ClientCommunication.ForceSendToClient(new LoginConfirm(player)); ClientCommunication.ForceSendToClient(new MapChange(player.Map)); ClientCommunication.ForceSendToClient(new MapPatches(player.MapPatches)); ClientCommunication.ForceSendToClient(new SeasonChange(player.Season, true)); ClientCommunication.ForceSendToClient(new SupportedFeatures(player.Features)); ClientCommunication.ForceSendToClient(new MobileUpdate(player)); ClientCommunication.ForceSendToClient(new MobileUpdate(player)); ClientCommunication.ForceSendToClient(new GlobalLightLevel(player.GlobalLightLevel)); ClientCommunication.ForceSendToClient(new PersonalLightLevel(player)); ClientCommunication.ForceSendToClient(new MobileUpdate(player)); ClientCommunication.ForceSendToClient(new MobileIncoming(player)); ClientCommunication.ForceSendToClient(new MobileAttributes(player)); ClientCommunication.ForceSendToClient(new SetWarMode(player.Warmode)); foreach (Item i in World.Items.Values) { if (i.Container == null) { ClientCommunication.ForceSendToClient(new WorldItem(i)); if (i.HouseRevision != 0) { ClientCommunication.ForceSendToClient(new DesignStateGeneral(i)); } } } foreach (Mobile m in World.Mobiles.Values) { ClientCommunication.ForceSendToClient(new MobileIncoming(m)); } ClientCommunication.ForceSendToClient(new SupportedFeatures(player.Features)); ClientCommunication.ForceSendToClient(new MobileUpdate(player)); ClientCommunication.ForceSendToClient(new MobileIncoming(player)); ClientCommunication.ForceSendToClient(new MobileAttributes(player)); ClientCommunication.ForceSendToClient(new SetWarMode(player.Warmode)); ClientCommunication.ForceSendToClient(new MobileIncoming(player)); ClientCommunication.ForceSendToClient(new LoginComplete()); ClientCommunication.ForceSendToClient(new CurrentTime()); ClientCommunication.ForceSendToClient(new SeasonChange(player.Season, true)); ClientCommunication.ForceSendToClient(new MapChange(player.Map)); ClientCommunication.ForceSendToClient(new MobileUpdate(player)); ClientCommunication.ForceSendToClient(new MobileIncoming(player)); PacketHandlers.PlayCharTime = DateTime.UtcNow; ClientCommunication.BeginCalibratePosition(); }
public static void OnScroll() { bool wasRunning = m_PlayTimer.Running; TimeSpan delay = TimeSpan.Zero; TimeSpan target = TimeSpan.FromSeconds(tbPos.Value); try { if (!Playing) { tbPos.Value = tbPos.Minimum; return; } else if (target <= m_Elapsed) { tbPos.Value = (int)m_Elapsed.TotalSeconds; return; } } catch { return; } if (wasRunning) { m_PlayTimer.Stop(); } PlayerData.ExternalZ = false; int sleepCount = 0; while (m_Elapsed < target && !m_GZIn.EndOfFile) { // peek ahead 1 byte... and no, BinaryReader doesnt have a peek function. byte peek = m_GZIn.Compressed.ReadByte(); if (peek == 0xFF) { break; } m_GZIn.Seek(-1, SeekOrigin.Current); ClientCommunication.ProcessPlaybackData(m_GZIn.Compressed); if (!m_GZIn.EndOfFile) { delay = TimeSpan.FromMilliseconds(m_GZIn.Compressed.ReadInt32()); m_Elapsed += delay; if (((++sleepCount) % 5) == 0) { tbPos.Value = (int)m_Elapsed.TotalSeconds; Application.DoEvents(); System.Threading.Thread.Sleep(TimeSpan.FromMilliseconds(1)); } } } try { tbPos.Value = (int)m_Elapsed.TotalSeconds; } catch { } UpdateTimeText(); ClientCommunication.ForceSendToClient(new MobileUpdate(World.Player)); ClientCommunication.ForceSendToClient(new MobileIncoming(World.Player)); if (wasRunning) // paused? { if (!m_GZIn.EndOfFile) { m_PlayTimer = Timer.DelayedCallback(delay, m_SendNext); m_PlayTimer.Start(); } else { Stop(); } } ClientCommunication.BeginCalibratePosition(); }