Re-implement chat in content. (#198)

* OOC is a word.

* Re-implement chat in content.
This commit is contained in:
Pieter-Jan Briers
2019-04-13 09:45:09 +02:00
committed by GitHub
parent 51caae7ebe
commit 52af7d27da
25 changed files with 770 additions and 37 deletions

View File

@@ -0,0 +1,43 @@
using Content.Server.Interfaces.Chat;
using SS14.Server.Interfaces.Console;
using SS14.Server.Interfaces.Player;
using SS14.Shared.Enums;
using SS14.Shared.IoC;
namespace Content.Server.Chat
{
internal class SayCommand : IClientCommand
{
public string Command => "say";
public string Description => "Send chat messages to the local channel or a specified radio channel.";
public string Help => "say <text>";
public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
{
if (player.Status != SessionStatus.InGame || !player.AttachedEntityUid.HasValue)
return;
if (args.Length < 1)
return;
var chat = IoCManager.Resolve<IChatManager>();
var message = string.Join(" ", args);
chat.EntitySay(player.AttachedEntity, message);
}
}
internal class OOCCommand : IClientCommand
{
public string Command => "ooc";
public string Description => "Send Out of Character chat messages.";
public string Help => "ooc <text>";
public void Execute(IConsoleShell shell, IPlayerSession player, string[] args)
{
var chat = IoCManager.Resolve<IChatManager>();
chat.SendOOC(player, string.Join(" ", args));
}
}
}

View File

@@ -0,0 +1,68 @@
using System.Linq;
using Content.Server.Interfaces.Chat;
using Content.Shared.Chat;
using SS14.Server.Interfaces.Player;
using SS14.Shared.Interfaces.GameObjects;
using SS14.Shared.Interfaces.Network;
using SS14.Shared.Interfaces.Resources;
using SS14.Shared.IoC;
namespace Content.Server.Chat
{
/// <summary>
/// Dispatches chat messages to clients.
/// </summary>
internal sealed class ChatManager : IChatManager
{
private const int VoiceRange = 7; // how far voice goes in world units
#pragma warning disable 649
[Dependency] private readonly IServerNetManager _netManager;
[Dependency] private readonly IPlayerManager _playerManager;
#pragma warning restore 649
public void Initialize()
{
_netManager.RegisterNetMessage<MsgChatMessage>(MsgChatMessage.NAME);
}
public void DispatchServerAnnouncement(string message)
{
var msg = _netManager.CreateNetMessage<MsgChatMessage>();
msg.Channel = ChatChannel.Server;
msg.Message = message;
msg.MessageWrap = "SERVER: {0}";
_netManager.ServerSendToAll(msg);
}
public void DispatchServerMessage(IPlayerSession player, string message)
{
var msg = _netManager.CreateNetMessage<MsgChatMessage>();
msg.Channel = ChatChannel.Server;
msg.Message = message;
msg.MessageWrap = "SERVER: {0}";
_netManager.ServerSendMessage(msg, player.ConnectedClient);
}
public void EntitySay(IEntity source, string message)
{
var pos = source.Transform.GridPosition;
var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient);
var msg = _netManager.CreateNetMessage<MsgChatMessage>();
msg.Channel = ChatChannel.Local;
msg.Message = message;
msg.MessageWrap = $"{source.Name} says, \"{{0}}\"";
_netManager.ServerSendToMany(msg, clients.ToList());
}
public void SendOOC(IPlayerSession player, string message)
{
var msg = _netManager.CreateNetMessage<MsgChatMessage>();
msg.Channel = ChatChannel.OOC;
msg.Message = message;
msg.MessageWrap = $"OOC: {player.SessionId}: {{0}}";
_netManager.ServerSendToAll(msg);
}
}
}

View File

@@ -65,6 +65,8 @@
<ItemGroup>
<Compile Include="Administration\AGhost.cs" />
<Compile Include="AI\AimShootLifeProcessor.cs" />
<Compile Include="Chat\ChatCommands.cs" />
<Compile Include="Chat\ChatManager.cs" />
<Compile Include="EntryPoint.cs" />
<Compile Include="GameObjects\Components\CatwalkComponent.cs" />
<Compile Include="GameObjects\Components\Damage\DamageThreshold.cs" />
@@ -131,6 +133,8 @@
<Compile Include="GameTicking\GamePreset.cs" />
<Compile Include="GameTicking\GamePresets\PresetTraitor.cs" />
<Compile Include="GameTicking\GameTicker.cs" />
<Compile Include="Interfaces\Chat\IChatCommand.cs" />
<Compile Include="Interfaces\Chat\IChatManager.cs" />
<Compile Include="Interfaces\GameObjects\Components\Items\IHandsComponent.cs" />
<Compile Include="GameObjects\Components\GUI\ServerHandsComponent.cs" />
<Compile Include="GameObjects\Components\GUI\InventoryComponent.cs" />

View File

@@ -1,4 +1,5 @@
using Content.Server.GameObjects;
using Content.Server.Chat;
using Content.Server.GameObjects;
using Content.Server.GameObjects.Components;
using Content.Server.GameObjects.Components.Power;
using Content.Server.GameObjects.Components.Interactable.Tools;
@@ -6,7 +7,6 @@ using Content.Server.Interfaces.GameObjects;
using Content.Server.Placement;
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;
@@ -48,6 +48,7 @@ using SS14.Server.Interfaces.ServerStatus;
using SS14.Shared.Timing;
using Content.Server.GameObjects.Components.Destructible;
using Content.Server.GameObjects.Components.Movement;
using Content.Server.Interfaces.Chat;
using Content.Server.Interfaces.GameObjects.Components.Movement;
namespace Content.Server
@@ -156,11 +157,13 @@ namespace Content.Server
IoCManager.Register<ISharedNotifyManager, ServerNotifyManager>();
IoCManager.Register<IServerNotifyManager, ServerNotifyManager>();
IoCManager.Register<IGameTicker, GameTicker>();
IoCManager.Register<IChatManager, ChatManager>();
IoCManager.BuildGraph();
_gameTicker = IoCManager.Resolve<IGameTicker>();
IoCManager.Resolve<IServerNotifyManager>().Initialize();
IoCManager.Resolve<IChatManager>().Initialize();
var playerManager = IoCManager.Resolve<IPlayerManager>();

View File

@@ -2,7 +2,6 @@ using System;
using Content.Server.GameObjects.Components.Interactable;
using Content.Server.GameObjects.Components.Sound;
using Content.Shared.GameObjects;
using SS14.Server.Chat;
using SS14.Server.GameObjects.Components.Container;
using SS14.Server.GameObjects.EntitySystems;
using SS14.Shared.Interfaces.GameObjects;

View File

@@ -3,7 +3,6 @@ using System.Text;
using Content.Shared.GameObjects.EntitySystemMessages;
using Content.Shared.Input;
using SS14.Server.GameObjects.EntitySystems;
using SS14.Server.Interfaces.Chat;
using SS14.Server.Interfaces.Player;
using SS14.Shared.GameObjects;
using SS14.Shared.GameObjects.Systems;

View File

@@ -4,12 +4,12 @@ using System.Linq;
using Content.Server.GameObjects;
using Content.Server.GameObjects.Components.Markers;
using Content.Server.GameTicking.GamePresets;
using Content.Server.Interfaces.Chat;
using Content.Server.Interfaces.GameTicking;
using Content.Server.Mobs;
using Content.Server.Players;
using Content.Shared;
using Content.Shared.GameObjects.Components.Inventory;
using SS14.Server.Interfaces.Chat;
using SS14.Server.Interfaces.Console;
using SS14.Server.Interfaces.Maps;
using SS14.Server.Interfaces.Player;
@@ -321,8 +321,7 @@ namespace Content.Server.GameTicking
// timer time must be > tick length
Timer.Spawn(0, args.Session.JoinGame);
_chatManager.DispatchMessage(ChatChannel.Server, "Game: Player joined server!",
args.Session.SessionId);
_chatManager.DispatchServerAnnouncement($"Player {args.Session.SessionId} joined server!");
if (LobbyEnabled && _roundStartCountdownHasNotStartedYetDueToNoPlayers)
{
@@ -360,8 +359,7 @@ namespace Content.Server.GameTicking
}
}
_chatManager.DispatchMessage(ChatChannel.Server, "Game: Player joined Game!",
args.Session.SessionId);
_chatManager.DispatchServerAnnouncement($"Player {args.Session.SessionId} joined game!");
break;
}
@@ -372,7 +370,7 @@ namespace Content.Server.GameTicking
_playersInLobby.Remove(session);
}
_chatManager.DispatchMessage(ChatChannel.Server, "Game: Player left!", args.Session.SessionId);
_chatManager.DispatchServerAnnouncement($"Player {args.Session.SessionId} left server!");
break;
}
}

View File

@@ -0,0 +1,10 @@
using SS14.Shared.Console;
using SS14.Shared.Interfaces.Network;
namespace Content.Server.Interfaces.Chat
{
public interface IChatCommand : ICommand
{
void Execute(IChatManager manager, INetChannel client, params string[] args);
}
}

View File

@@ -0,0 +1,21 @@
using SS14.Server.Interfaces.Player;
using SS14.Shared.Interfaces.GameObjects;
namespace Content.Server.Interfaces.Chat
{
public interface IChatManager
{
void Initialize();
/// <summary>
/// Dispatch a server announcement to every connected player.
/// </summary>
void DispatchServerAnnouncement(string message);
void DispatchServerMessage(IPlayerSession player, string message);
void EntitySay(IEntity source, string message);
void SendOOC(IPlayerSession player, string message);
}
}

View File

@@ -1,4 +1,4 @@
using SS14.Server.Interfaces.Chat;
using Content.Server.Interfaces.Chat;
using SS14.Shared.Console;
using SS14.Shared.IoC;
@@ -17,8 +17,9 @@ namespace Content.Server.Mobs.Roles
base.Greet();
var chat = IoCManager.Resolve<IChatManager>();
chat.DispatchMessage(Mind.Session.ConnectedClient, ChatChannel.Server,
"You're a traitor. Go fuck something up. Or something. I don't care to be honest.");
chat.DispatchServerMessage(
Mind.Session,
"You're a traitor. Go fuck something up. Or something. I don't care to be honest.");
}
}
}