public void Add(Mobile m) { var mi = this[m]; if (mi != null) { return; } var ns = m.NetState; Members.Add(new PartyMemberInfo(m)); m.Party = this; Span <byte> memberList = stackalloc byte[PartyPackets.GetPartyMemberListPacketLength(this)].InitializePacket(); Span <byte> attrsPacket = stackalloc byte[OutgoingMobilePackets.MobileAttributesPacketLength].InitializePacket(); for (var i = 0; i < Members.Count; ++i) { var f = Members[i].Mobile; PartyPackets.CreatePartyMemberList(memberList, this); f.NetState?.Send(memberList); if (f != m) { f.NetState.SendMobileStatusCompact(m, m.CanBeRenamedBy(f)); OutgoingMobilePackets.CreateMobileAttributes(attrsPacket, m, true); f.NetState?.Send(attrsPacket); ns.SendMobileStatusCompact(f, f.CanBeRenamedBy(m)); ns.SendMobileAttributes(f, true); } } }
public void SendPublicMessage(Mobile from, string text) { Span <byte> textMessagePacket = stackalloc byte[PartyPackets.GetPartyTextMessagePacketLength(text)].InitializePacket(); PartyPackets.CreatePartyTextMessage(textMessagePacket, from.Serial, text, true); SendToAll(textMessagePacket); SendToAllListeners($"[{from.Name}]: {text}"); SendToStaffMessage(from, $"[Party]: {text}"); }
public void Remove(Mobile m) { if (m == Leader) { Disband(); return; } Span <byte> removeMember = stackalloc byte[PartyPackets.GetPartyRemoveMemberPacketLength(this)].InitializePacket(); for (var i = 0; i < Members.Count; i++) { if (Members[i].Mobile == m) { Members.RemoveAt(i); m.NetState.SendPartyRemoveMember(m.Serial); m.Party = null; m.SendLocalizedMessage(1005451); // You have been removed from the party. PartyPackets.CreatePartyRemoveMember(removeMember, m.Serial, this); SendToAll(removeMember); SendToAll(1005452); // A player has been removed from your party. break; } } if (Members.Count == 1) { SendToAll(1005450); // The last person has left the party... Disband(); } }