From 5ee56a4cd32414c38547af14fa11292e0ec4b5ee Mon Sep 17 00:00:00 2001 From: clusterfack Date: Thu, 18 Jan 2018 13:00:35 -0600 Subject: [PATCH] Updates submodule (#22) * Updates submodule Fix connect not entering server (with correct toml config) and compile error, updates submodule Server still has an issue with toml file pointing towards sandbox instead of content and roundstart object initializations * Updates more stuff Needs my most recent PR on ss14 to function * Submodule updated for real this time --- .gitmodules | 2 +- Content.Client/UserInterface/HandsGui.cs | 10 +- Content.Server/EntryPoint.cs | 147 +++++++++++++++++- .../Components/Items/ServerHandsComponent.cs | 5 +- engine | 2 +- 5 files changed, 153 insertions(+), 13 deletions(-) diff --git a/.gitmodules b/.gitmodules index c35f42dd32..fbe168edb7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "engine"] path = engine url = https://github.com/space-wizards/space-station-14.git - branch = 054fcd931d165889c0979c4c1f849f38719883b5 \ No newline at end of file + branch = 3ccb252a968e1ded9310bdf9c1805d3364b81adb \ No newline at end of file diff --git a/Content.Client/UserInterface/HandsGui.cs b/Content.Client/UserInterface/HandsGui.cs index f786c044bf..6b1728fdd0 100644 --- a/Content.Client/UserInterface/HandsGui.cs +++ b/Content.Client/UserInterface/HandsGui.cs @@ -55,12 +55,12 @@ namespace Content.Client.UserInterface protected override void DrawContents() { - if (_playerManager?.ControlledEntity == null) + if (_playerManager?.LocalPlayer.ControlledEntity == null) { return; } - IEntity entity = _playerManager.ControlledEntity; + IEntity entity = _playerManager.LocalPlayer.ControlledEntity; if (!entity.TryGetComponent(out var hands)) { return; @@ -99,12 +99,12 @@ namespace Content.Client.UserInterface public void UpdateHandIcons() { - if (_playerManager?.ControlledEntity == null) + if (_playerManager?.LocalPlayer.ControlledEntity == null) { return; } - IEntity entity = _playerManager.ControlledEntity; + IEntity entity = _playerManager.LocalPlayer.ControlledEntity; if (!entity.TryGetComponent(out var hands)) { return; @@ -144,7 +144,7 @@ namespace Content.Client.UserInterface private void SendSwitchHandTo(string index) { - IEntity entity = _playerManager.ControlledEntity; + IEntity entity = _playerManager.LocalPlayer.ControlledEntity; if (!entity.TryGetComponent(out var hands)) { return; diff --git a/Content.Server/EntryPoint.cs b/Content.Server/EntryPoint.cs index 2be573d8ce..1463a8508c 100644 --- a/Content.Server/EntryPoint.cs +++ b/Content.Server/EntryPoint.cs @@ -1,16 +1,46 @@ -using Content.Server.GameObjects; + +using Content.Server.GameObjects; using Content.Server.Interfaces.GameObjects; +using SS14.Server; +using SS14.Server.Interfaces; +using SS14.Server.Interfaces.Chat; +using SS14.Server.Interfaces.Maps; using SS14.Server.Interfaces.Player; +using SS14.Server.Player; +using SS14.Shared; +using SS14.Shared.Console; using SS14.Shared.ContentPack; +using SS14.Shared.Enums; using SS14.Shared.Interfaces.GameObjects; +using SS14.Shared.Interfaces.Map; +using SS14.Shared.Interfaces.Timers; using SS14.Shared.IoC; +using SS14.Shared.Log; +using SS14.Shared.Map; +using SS14.Shared.Timers; +using System.Diagnostics; namespace Content.Server { public class EntryPoint : GameServer { + private IBaseServer _server; + private IPlayerManager _players; + + private bool _countdownStarted; + + /// public override void Init() { + base.Init(); + + _server = IoCManager.Resolve(); + _players = IoCManager.Resolve(); + + _server.RunLevelChanged += HandleRunLevelChanged; + _players.PlayerStatusChanged += HandlePlayerStatusChanged; + _players.PlayerPrototypeName = "HumanMob_Content"; + var factory = IoCManager.Resolve(); factory.Register(); @@ -29,9 +59,118 @@ namespace Content.Server factory.Register(); factory.Register(); factory.Register(); - - var playerManager = IoCManager.Resolve(); - playerManager.PlayerPrototypeName = "HumanMob_Content"; } + + /// + public override void Dispose() + { + _server.RunLevelChanged -= HandleRunLevelChanged; + _players.PlayerStatusChanged -= HandlePlayerStatusChanged; + + base.Dispose(); + } + + private void HandleRunLevelChanged(object sender, RunLevelChangedEventArgs args) + { + switch (args.NewLevel) + { + case ServerRunLevel.PreGame: + IoCManager.Resolve().FallbackSpawnPoint = new LocalCoordinates(0, 0, GridId.DefaultGrid, new MapId(1)); + NewDemoGrid(new GridId(1), new MapId(1)); + + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Round loaded!"); + break; + case ServerRunLevel.Game: + IoCManager.Resolve().SendJoinGameToAll(); + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Round started!"); + break; + case ServerRunLevel.PostGame: + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Round over!"); + break; + } + } + + private void HandlePlayerStatusChanged(object sender, SessionStatusEventArgs args) + { + switch (args.NewStatus) + { + case SessionStatus.Connected: + { + // timer time must be > tick length + IoCManager.Resolve().AddTimer(new Timer(250, false, () => + { + args.Session.JoinLobby(); + })); + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined server!", args.Session.Index); + } + break; + + case SessionStatus.InLobby: + { + // auto start game when first player joins + if (_server.RunLevel == ServerRunLevel.PreGame && !_countdownStarted) + { + _countdownStarted = true; + IoCManager.Resolve().AddTimer(new Timer(2000, false, () => + { + _server.RunLevel = ServerRunLevel.Game; + _countdownStarted = false; + })); + } + + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined Lobby!", args.Session.Index); + } + break; + + case SessionStatus.InGame: + { + //TODO: Check for existing mob and re-attach + IoCManager.Resolve().SpawnPlayerMob(args.Session); + + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Player joined Game!", args.Session.Index); + } + break; + + case SessionStatus.Disconnected: + { + IoCManager.Resolve().DispatchMessage(ChatChannel.Server, "Gamemode: Player left!", args.Session.Index); + } + break; + } + } + + //TODO: This whole method should be removed once file loading/saving works, and replaced with a 'Demo' map. + /// + /// Generates 'Demo' grid and inserts it into the map manager. + /// + private void NewDemoGrid(GridId gridId, MapId mapId) + { + var mapManager = IoCManager.Resolve(); + var defManager = IoCManager.Resolve(); + + mapManager.SuppressOnTileChanged = true; + + Logger.Log("Cannot find map. Generating blank map.", LogLevel.Warning); + var floor = defManager["Floor"].TileId; + + Debug.Assert(floor > 0); + + var map = mapManager.CreateMap(mapId); + var grid = map.CreateGrid(gridId); + + for (var y = -32; y <= 32; ++y) + { + for (var x = -32; x <= 32; ++x) + { + grid.SetTile(new LocalCoordinates(x, y, gridId, mapId), new Tile(floor)); + } + } + + // load entities + IoCManager.Resolve().Load(_server.MapName, map); + + mapManager.SuppressOnTileChanged = false; + } + } } diff --git a/Content.Server/GameObjects/Components/Items/ServerHandsComponent.cs b/Content.Server/GameObjects/Components/Items/ServerHandsComponent.cs index 6c5e3b8447..b60b8e4897 100644 --- a/Content.Server/GameObjects/Components/Items/ServerHandsComponent.cs +++ b/Content.Server/GameObjects/Components/Items/ServerHandsComponent.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using YamlDotNet.RepresentationModel; using Lidgren.Network; +using SS14.Shared.Enums; namespace Content.Server.GameObjects { @@ -257,7 +258,7 @@ namespace Content.Server.GameObjects ActiveIndex = orderedHands[index]; } - public override void HandleNetworkMessage(IncomingEntityComponentMessage message, NetConnection sender) + public override void HandleNetworkMessage(IncomingEntityComponentMessage message) { if (message.MessageParameters.Count != 1) { @@ -268,7 +269,7 @@ namespace Content.Server.GameObjects { ActiveIndex = newIndex; } - base.HandleNetworkMessage(message, sender); + base.HandleNetworkMessage(message); } } } diff --git a/engine b/engine index 59b2df97d8..3ccb252a96 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 59b2df97d8c11d54733ad461ec2036eaf35d6eae +Subproject commit 3ccb252a968e1ded9310bdf9c1805d3364b81adb