Re-implement chat in content. (#198)
* OOC is a word. * Re-implement chat in content.
This commit is contained in:
committed by
GitHub
parent
51caae7ebe
commit
52af7d27da
43
Content.Server/Chat/ChatCommands.cs
Normal file
43
Content.Server/Chat/ChatCommands.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
68
Content.Server/Chat/ChatManager.cs
Normal file
68
Content.Server/Chat/ChatManager.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
10
Content.Server/Interfaces/Chat/IChatCommand.cs
Normal file
10
Content.Server/Interfaces/Chat/IChatCommand.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
21
Content.Server/Interfaces/Chat/IChatManager.cs
Normal file
21
Content.Server/Interfaces/Chat/IChatManager.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user