Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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}");
        }
Exemple #3
0
        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();
            }
        }