Chat range also affects the server host if they're controlling a character, fixed missing sender names in the server lobby

This commit is contained in:
Regalis
2017-01-07 20:24:01 +02:00
parent 6747faae3d
commit 05cb5989dc
+59 -24
View File
@@ -1235,9 +1235,8 @@ namespace Barotrauma.Networking
{ {
senderCharacter = myCharacter; senderCharacter = myCharacter;
senderName = myCharacter == null ? name : myCharacter.Name; senderName = myCharacter == null ? name : myCharacter.Name;
} }
//msg sent by a client else //msg sent by a client
else
{ {
senderCharacter = senderClient.Character; senderCharacter = senderClient.Character;
senderName = senderCharacter == null ? senderClient.name : senderCharacter.Name; senderName = senderCharacter == null ? senderClient.name : senderCharacter.Name;
@@ -1251,10 +1250,16 @@ namespace Barotrauma.Networking
} }
else else
{ {
//game not started -> clients can only send normal chatmessages //msg sent by the server
if (senderClient != null) if (senderClient == null)
{ {
senderName = name;
}
else //msg sent by a client
{
//game not started -> clients can only send normal chatmessages
type = ChatMessageType.Default; type = ChatMessageType.Default;
senderName = senderClient.name;
} }
} }
@@ -1289,33 +1294,18 @@ namespace Barotrauma.Networking
switch (type) switch (type)
{ {
case ChatMessageType.Default: case ChatMessageType.Default:
case ChatMessageType.Radio:
if (senderCharacter != null && if (senderCharacter != null &&
client.Character != null && !client.Character.IsDead) client.Character != null && !client.Character.IsDead)
{ {
modifiedMessage = ChatMessage.ApplyDistanceEffect(client.Character, senderCharacter, message, ChatMessage.SpeakRange); modifiedMessage = ApplyChatMsgDistanceEffects(message, (ChatMessageType)type, senderCharacter, client.Character);
//too far to hear the msg -> don't send
if (string.IsNullOrWhiteSpace(modifiedMessage)) continue;
}
break;
case ChatMessageType.Radio:
if (client.Character != null && !client.Character.IsDead)
{
var radio = client.Character.Inventory.Items.First(i => i != null && i.GetComponent<WifiComponent>() != null);
//client doesn't have a radio -> don't send
if (radio == null) return;
var radioComponent = radio.GetComponent<WifiComponent>();
if (!radioComponent.CanReceive(senderRadio)) return;
modifiedMessage = ChatMessage.ApplyDistanceEffect(radio, senderRadio.Item, message, senderRadio.Range);
//too far to hear the msg -> don't send //too far to hear the msg -> don't send
if (string.IsNullOrWhiteSpace(modifiedMessage)) continue; if (string.IsNullOrWhiteSpace(modifiedMessage)) continue;
} }
break; break;
case ChatMessageType.Dead: case ChatMessageType.Dead:
if (client.Character != null && !client.Character.IsDead) return; if (client.Character != null && !client.Character.IsDead) continue;
break; break;
} }
@@ -1332,7 +1322,52 @@ namespace Barotrauma.Networking
client.chatMsgQueue.Add(chatMsg); client.chatMsgQueue.Add(chatMsg);
} }
AddChatMessage(message, (ChatMessageType)type, senderName); string myReceivedMessage = message;
if (gameStarted && myCharacter != null)
{
myReceivedMessage = ApplyChatMsgDistanceEffects(message, (ChatMessageType)type, senderCharacter, myCharacter);
}
if (!string.IsNullOrWhiteSpace(myReceivedMessage))
{
AddChatMessage(myReceivedMessage, (ChatMessageType)type, senderName);
}
}
private string ApplyChatMsgDistanceEffects(string message, ChatMessageType type, Character sender, Character receiver)
{
if (sender == null) return "";
switch (type)
{
case ChatMessageType.Default:
if (!receiver.IsDead)
{
return ChatMessage.ApplyDistanceEffect(receiver, sender, message, ChatMessage.SpeakRange);
}
break;
case ChatMessageType.Radio:
if (!receiver.IsDead)
{
var receiverItem = receiver.Inventory.Items.First(i => i != null && i.GetComponent<WifiComponent>() != null);
//client doesn't have a radio -> don't send
if (receiverItem == null) return "";
var senderItem = sender.Inventory.Items.First(i => i != null && i.GetComponent<WifiComponent>() != null);
if (senderItem == null) return "";
var receiverRadio = receiverItem.GetComponent<WifiComponent>();
var senderRadio = senderItem.GetComponent<WifiComponent>();
if (!receiverRadio.CanReceive(senderRadio)) return "";
return ChatMessage.ApplyDistanceEffect(receiverItem, senderItem, message, senderRadio.Range);
}
break;
}
return message;
} }
public override void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch) public override void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch)