public void Init(MyObjectBuilder_FactionChatItem chatBuilder) { Text = chatBuilder.Text; IdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.IdentityIdUniqueNumber); Timestamp = TimeSpan.FromMilliseconds(chatBuilder.TimestampMs); PlayersToSendTo = new Dictionary <long, bool>(); if (chatBuilder.PlayersToSendToUniqueNumber != null && chatBuilder.PlayersToSendToUniqueNumber.Count != 0) { for (int i = 0; i < chatBuilder.PlayersToSendToUniqueNumber.Count; i++) { PlayersToSendTo.Add(MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.PlayersToSendToUniqueNumber[i]), chatBuilder.IsAlreadySentTo[i]); } } }
public MyObjectBuilder_FactionChatItem GetObjectBuilder() { var objectBuilder = new MyObjectBuilder_FactionChatItem(); objectBuilder.Text = Text; objectBuilder.IdentityIdUniqueNumber = MyEntityIdentifier.GetIdUniqueNumber(IdentityId); objectBuilder.TimestampMs = (long)Timestamp.TotalMilliseconds; if (PlayersToSendTo != null) { objectBuilder.PlayersToSendToUniqueNumber = PlayersToSendTo.Keys.ToList(); for (int i = 0; i < objectBuilder.PlayersToSendToUniqueNumber.Count; i++) { objectBuilder.PlayersToSendToUniqueNumber[i] = MyEntityIdentifier.GetIdUniqueNumber(objectBuilder.PlayersToSendToUniqueNumber[i]); } objectBuilder.IsAlreadySentTo = PlayersToSendTo.Values.ToList(); } return(objectBuilder); }
static private void OnFactionMessageSuccess(long factionId1, long factionId2, MyObjectBuilder_FactionChatItem chatItemBuilder) { long senderIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatItemBuilder.IdentityIdUniqueNumber); var factionChatItem = new MyFactionChatItem(); factionChatItem.Init(chatItemBuilder); if (!(Sync.IsServer && senderIdentityId != MySession.Static.LocalPlayerId)) { MyChatSystem.AddFactionChatItem(MySession.Static.LocalPlayerId, factionId1, factionId2, factionChatItem); } if (senderIdentityId != MySession.Static.LocalPlayerId) { MySession.Static.Gpss.ScanText(factionChatItem.Text, MyTexts.GetString(MySpaceTexts.TerminalTab_GPS_NewFromFactionComms)); } MySession.Static.ChatSystem.OnNewFactionMessage(factionId1, factionId2, senderIdentityId, true); }
static private void OnFactionMessageRequest(long factionId1, long factionId2, MyObjectBuilder_FactionChatItem chatItemBuilder) { //Ignore messages that have improper lengths if (chatItemBuilder.Text.Length == 0 || chatItemBuilder.Text.Length > MyChatConstants.MAX_CHAT_STRING_LENGTH) { return; } long currentSenderId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatItemBuilder.IdentityIdUniqueNumber); var senderId = MySession.Static.Players.TryGetIdentity(currentSenderId); var chatItem = new MyFactionChatItem(); chatItem.Init(chatItemBuilder); //Find all members that can receive this messages m_tempValidIds.Clear(); for (int i = 0; i < chatItemBuilder.PlayersToSendToUniqueNumber.Count; i++) { if (!chatItemBuilder.IsAlreadySentTo[i]) { long receiverIdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatItemBuilder.PlayersToSendToUniqueNumber[i]); var receiverId = MySession.Static.Players.TryGetIdentity(receiverIdentityId); if (Sync.Players.IdentityIsNpc(receiverIdentityId) == false && receiverId != null && receiverId.Character != null && MyAntennaSystem.Static.CheckConnection(senderId, receiverId)) { m_tempValidIds.Add(receiverIdentityId); } } } //Set their sent flag to true, so that everyone knows they already got it (no need for confirm message) foreach (var id in m_tempValidIds) { chatItem.PlayersToSendTo[id] = true; } //Save the flags back in the message chatItemBuilder = chatItem.GetObjectBuilder(); //Send success message back to all recepient members foreach (var id in m_tempValidIds) { MyPlayer.PlayerId receiverPlayerId; MySession.Static.Players.TryGetPlayerId(id, out receiverPlayerId); ulong steamId = receiverPlayerId.SteamId; MyMultiplayer.RaiseStaticEvent(x => OnFactionMessageSuccess, factionId1, factionId2, chatItemBuilder, new EndpointId(steamId)); } //Save chat history on server for non-server players if (senderId.Character != MySession.Static.LocalCharacter) { MyChatSystem.AddFactionChatItem(senderId.IdentityId, factionId1, factionId2, chatItem); } }
public MyObjectBuilder_FactionChatItem GetObjectBuilder() { var objectBuilder = new MyObjectBuilder_FactionChatItem(); objectBuilder.Text = Text; objectBuilder.IdentityIdUniqueNumber = MyEntityIdentifier.GetIdUniqueNumber(IdentityId); objectBuilder.TimestampMs = (long)Timestamp.TotalMilliseconds; if (PlayersToSendTo != null) { objectBuilder.PlayersToSendToUniqueNumber = PlayersToSendTo.Keys.ToList(); for (int i = 0; i < objectBuilder.PlayersToSendToUniqueNumber.Count; i++) { objectBuilder.PlayersToSendToUniqueNumber[i] = MyEntityIdentifier.GetIdUniqueNumber(objectBuilder.PlayersToSendToUniqueNumber[i]); } objectBuilder.IsAlreadySentTo = PlayersToSendTo.Values.ToList(); } return objectBuilder; }
public void Init(MyObjectBuilder_FactionChatItem chatBuilder) { Text = chatBuilder.Text; IdentityId = MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.IdentityIdUniqueNumber); Timestamp = TimeSpan.FromMilliseconds(chatBuilder.TimestampMs); PlayersToSendTo = new Dictionary<long,bool>(); if (chatBuilder.PlayersToSendToUniqueNumber != null && chatBuilder.PlayersToSendToUniqueNumber.Count != 0) { for (int i = 0; i < chatBuilder.PlayersToSendToUniqueNumber.Count; i++) { PlayersToSendTo.Add(MyEntityIdentifier.ConstructId(MyEntityIdentifier.ID_OBJECT_TYPE.IDENTITY, chatBuilder.PlayersToSendToUniqueNumber[i]), chatBuilder.IsAlreadySentTo[i]); } } }