Пример #1
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                this.m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = Packet.Acquire(new PartyMemberList(this));
                Packet attrs      = Packet.Acquire(new MobileAttributesN(m));

                for (int i = 0; i < this.m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)this.m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (f != m)
                    {
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);
                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));
                    }
                }

                Packet.Release(memberList);
                Packet.Release(attrs);
            }
        }
Пример #2
0
            protected override void OnTick()
            {
                Party p = Party.Get(this.m_Mobile);

                if (p == null)
                {
                    return;
                }

                this.m_Mobile.SendLocalizedMessage(1005437); // You have rejoined the party.
                this.m_Mobile.Send(new PartyMemberList(p));

                Packet message = Packet.Acquire(new MessageLocalizedAffix(Serial.MinusOne, -1, MessageType.Label, 0x3B2, 3, 1008087, "", AffixType.Prepend | AffixType.System, this.m_Mobile.Name, ""));
                Packet attrs   = Packet.Acquire(new MobileAttributesN(this.m_Mobile));

                foreach (PartyMemberInfo mi in p.Members)
                {
                    Mobile m = mi.Mobile;

                    if (m != this.m_Mobile)
                    {
                        m.Send(message);
                        m.Send(new MobileStatusCompact(this.m_Mobile.CanBeRenamedBy(m), this.m_Mobile));
                        m.Send(attrs);
                        this.m_Mobile.Send(new MobileStatusCompact(m.CanBeRenamedBy(this.m_Mobile), m));
                        this.m_Mobile.Send(new MobileAttributesN(m));
                    }
                }

                Packet.Release(message);
                Packet.Release(attrs);
            }
Пример #3
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);
                }
            }
        }
Пример #4
0
        public void OnStatsQuery(Mobile beholder, Mobile beheld)
        {
            if (beholder != beheld && Contains(beholder) && beholder.Map == beheld.Map && Utility.InUpdateRange(beholder, beheld))
            {
                if (!beholder.CanSee(beheld))
                {
                    beholder.Send(new MobileStatusCompact(beheld.CanBeRenamedBy(beholder), beheld));
                }

                beholder.Send(new MobileAttributesN(beheld));
            }
        }
Пример #5
0
        public void OnStatsQuery(Mobile beholder, Mobile beheld)
        {
            if (beholder != beheld && Contains(beholder) && beholder.Map == beheld.Map &&
                Utility.InUpdateRange(beholder.Location, beheld.Location))
            {
                if (!beholder.CanSee(beheld))
                {
                    beholder.NetState.SendMobileStatusCompact(beheld, beheld.CanBeRenamedBy(beholder));
                }

                beholder.NetState.SendMobileAttributes(beheld, true);
            }
        }
        // Methods
        public MobileStatusExtended(Mobile m) : base(17)
        {
            string text1 = m.Name;

            if (text1 == null)
            {
                text1 = "";
            }
            base.EnsureCapacity(88);
            this.m_Stream.Write(Serial.op_Implicit(m.Serial));
            this.m_Stream.WriteAsciiFixed(text1, 30);
            this.m_Stream.Write(((short)m.Hits));
            this.m_Stream.Write(((short)m.HitsMax));
            this.m_Stream.Write(m.CanBeRenamedBy(m));
            this.m_Stream.Write(((byte)(MobileStatus.SendAosInfo ? 4 : 3)));
            this.m_Stream.Write(m.Female);
            this.m_Stream.Write(((short)m.Str));
            this.m_Stream.Write(((short)m.Dex));
            this.m_Stream.Write(((short)m.Int));
            this.m_Stream.Write(((short)m.Stam));
            this.m_Stream.Write(((short)m.StamMax));
            this.m_Stream.Write(((short)m.Mana));
            this.m_Stream.Write(((short)m.ManaMax));
            this.m_Stream.Write(m.TotalGold);
            this.m_Stream.Write(((short)(Core.AOS ? m.PhysicalResistance : ((int)(m.ArmorRating + 0.5)))));
            this.m_Stream.Write(((short)(Mobile.BodyWeight + m.TotalWeight)));
            this.m_Stream.Write(((short)m.StatCap));
            this.m_Stream.Write(((byte)m.Followers));
            this.m_Stream.Write(((byte)m.FollowersMax));
            if (!MobileStatus.SendAosInfo)
            {
                return;
            }
            this.m_Stream.Write(((short)m.FireResistance));
            this.m_Stream.Write(((short)m.ColdResistance));
            this.m_Stream.Write(((short)m.PoisonResistance));
            this.m_Stream.Write(((short)m.EnergyResistance));
            this.m_Stream.Write(((short)m.Luck));
            IWeapon weapon1 = m.Weapon;
            int     num1    = 0;
            int     num2    = 0;

            if (weapon1 != null)
            {
                weapon1.GetStatusDamage(m, out num1, out num2);
            }
            this.m_Stream.Write(((short)num1));
            this.m_Stream.Write(((short)num2));
            this.m_Stream.Write(m.TithingPoints);
        }
Пример #7
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                this.m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = Packet.Acquire(new PartyMemberList(this));
                Packet attrs      = Packet.Acquire(new MobileAttributesN(m));

                for (int i = 0; i < this.m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)this.m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (f != m)
                    {
                        #region Enhance Client
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);
                        f.Send(new KRDisplayWaypoint(m, WaypointType.PartyMember, false, 1062613, m.Name));
                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));
                        m.Send(new KRDisplayWaypoint(f, WaypointType.PartyMember, false, 1062613, f.Name));

                        /*
                         * for (int i2 = 0; i2 < m_Members.Count; ++i2)
                         * {
                         *  Mobile f2 = ((PartyMemberInfo)m_Members[i2]).Mobile;
                         *
                         *  if (f2.NetState != null && f2.NetState.IsKRClient)
                         *  {
                         *      f2.NetState.Send(new DisplayWaypoint(f.Serial, f.X, f.Y, f.Z, f.Map.MapID, WaypointType.PartyMember, f.Name));
                         *  }
                         * }
                         */
                        #endregion
                    }
                }

                Packet.Release(memberList);
                Packet.Release(attrs);
            }
        }
Пример #8
0
        private static void EventSink_RenameRequest(Mobile from, Mobile targ, string name)
        {
            if (from.CanSee(targ) && from.InRange(targ, 12) && targ.CanBeRenamedBy(from))
            {
                name = name.Trim();

                if (NameVerification.Validate(
                        name,
                        1,
                        16,
                        true,
                        false,
                        true,
                        0,
                        NameVerification.Empty,
                        NameVerification.StartDisallowed,
                        Core.ML ? NameVerification.Disallowed : Array.Empty <string>()
                        ))
                {
                    if (Core.ML)
                    {
                        var disallowed = ProfanityProtection.Disallowed;

                        for (var i = 0; i < disallowed.Length; i++)
                        {
                            if (name.IndexOfOrdinal(disallowed[i]) != -1)
                            {
                                from.SendLocalizedMessage(1072622); // That name isn't very polite.
                                return;
                            }
                        }

                        from.SendLocalizedMessage(
                            1072623,
                            $"{targ.Name}\t{name}"
                            ); // Pet ~1_OLDPETNAME~ renamed to ~2_NEWPETNAME~.
                    }

                    targ.Name = name;
                }
                else
                {
                    from.SendMessage("That name is unacceptable.");
                }
            }
        }
Пример #9
0
        private static void EventSink_RenameRequest(Mobile from, Mobile targ, string name)
        {
            if (from.CanSee(targ) && from.InRange(targ, 12) && targ.CanBeRenamedBy(from))
            {
                name = name.Trim();

                if (NameVerification.Validate(name, 1, 16, true, false, true, 0, NameVerification.Empty,
                                              NameVerification.StartDisallowed, new string[] { }))
                {
                    targ.Name = name;
                }
                else
                {
                    from.SendMessage("That name is unacceptable.");
                }
            }
        }
Пример #10
0
        private static void EventSink_RenameRequest(RenameRequestEventArgs e)
        {
            Mobile from = e.From;
            Mobile targ = e.Target;
            string name = e.Name;

            if (from.CanSee(targ) && from.InRange(targ, 12) && targ.CanBeRenamedBy(from))
            {
                name = name.Trim();

                var numExceptions = 0;
                var exceptions    = NameVerification.Empty;

                if (targ is BaseCreature)
                {
                    exceptions    = new char[] { ' ' };
                    numExceptions = 5;
                }

                if (NameVerification.Validate(name, 1, 16, true, false, true, numExceptions, exceptions, NameVerification.StartDisallowed, (Core.ML ? NameVerification.Disallowed : new string[] { })))
                {
                    if (Core.ML)
                    {
                        string[] disallowed = ProfanityProtection.Disallowed;

                        for (int i = 0; i < disallowed.Length; i++)
                        {
                            if (name.IndexOf(disallowed[i]) != -1)
                            {
                                from.SendLocalizedMessage(1072622); // That name isn't very polite.
                                return;
                            }
                        }

                        from.SendLocalizedMessage(1072623, String.Format("{0}\t{1}", targ.Name, name)); // Pet ~1_OLDPETNAME~ renamed to ~2_NEWPETNAME~.
                    }

                    targ.Name = name;
                }
                else
                {
                    from.SendMessage("That name is unacceptable.");
                }
            }
        }
Пример #11
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = Packet.Acquire(new PartyMemberList(this));
                Packet attrs      = Packet.Acquire(new MobileAttributesN(m));

                for (int i = 0; i < m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (f != m)
                    {
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);

                        if (f.NetState != null && f.NetState.IsEnhancedClient)
                        {
                            Waypoints.Create(f, m, WaypointType.PartyMember);
                        }

                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));

                        if (m.NetState != null && m.NetState.IsEnhancedClient)
                        {
                            Waypoints.Create(m, f, WaypointType.PartyMember);
                        }
                    }
                }

                Packet.Release(memberList);
                Packet.Release(attrs);
            }
        }
Пример #12
0
        private static void EventSink_RenameRequest(RenameRequestEventArgs e)
        {
            Mobile from = e.From;
            Mobile targ = e.Target;
            string name = e.Name;

            if (from.CanSee(targ) && from.InRange(targ, 12) && targ.CanBeRenamedBy(from))
            {
                name = name.Trim();

                if (NameVerification.Validate(name, 1, 16, true, false, true, 0, NameVerification.Empty))
                {
                    targ.Name = name;
                }
                else
                {
                    from.SendMessage("That name is unacceptable.");
                }
            }
        }
Пример #13
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = Packet.Acquire(new PartyMemberList(this));
                Packet attrs      = Packet.Acquire(new MobileAttributesN(m));

                for (int i = 0; i < m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (f != m)
                    {
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);
                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));
                        #region GeNova: KR Support
                        for (int i2 = 0; i2 < m_Members.Count; ++i2)
                        {
                            Mobile f2 = ((PartyMemberInfo)m_Members[i2]).Mobile;
                            if (f2.NetState != null && f2.NetState.IsKRClient)
                            {
                                f2.NetState.Send(new DisplayWaypoint(f.Serial, f.X, f.Y, f.Z, f.Map.MapID, 2, f.Name));
                            }
                        }
                        #endregion
                    }
                }

                Packet.Release(memberList);
                Packet.Release(attrs);
            }
        }
Пример #14
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = new PartyMemberList(this);
                Packet attrs      = new MobileAttributesN(m);

                for (int i = 0; i < m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (!f.HasGump(typeof(PartyRadarGump)))
                    {
                        PartyRadarGump pr = new PartyRadarGump(f, m);
                        f.SendGump(pr);                           // Custom Radar Gump

                        GumpTimer gumpTimer = new GumpTimer(f, m);
                        gumpTimer.Start();

                        GumpTimer gumpTimerT = new GumpTimer(m, f);
                        gumpTimerT.Start();
                    }

                    if (f != m)
                    {
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);
                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));
                    }
                }
            }
        }
Пример #15
0
            protected override void OnTick()
            {
                Party p = Get(m_Mobile);

                if (p == null)
                {
                    return;
                }

                m_Mobile.SendLocalizedMessage(1005437); // You have rejoined the party.
                m_Mobile.Send(new PartyMemberList(p));

                Packet message = Packet.Acquire(new MessageLocalizedAffix(Serial.MinusOne, -1, MessageType.Label, 0x3B2, 3, 1008087, "", AffixType.Prepend | AffixType.System, m_Mobile.Name, ""));
                Packet attrs   = Packet.Acquire(new MobileAttributesN(m_Mobile));

                for (var index = 0; index < p.Members.Count; index++)
                {
                    PartyMemberInfo mi = p.Members[index];
                    Mobile          m  = mi.Mobile;

                    if (m != m_Mobile)
                    {
                        m.Send(message);
                        m.Send(new MobileStatusCompact(m_Mobile.CanBeRenamedBy(m), m_Mobile));
                        m.Send(attrs);
                        m_Mobile.Send(new MobileStatusCompact(m.CanBeRenamedBy(m_Mobile), m));
                        m_Mobile.Send(new MobileAttributesN(m));

                        if (m_Mobile.NetState != null && m_Mobile.NetState.IsEnhancedClient)
                        {
                            Waypoints.Create(m_Mobile, m, WaypointType.PartyMember);
                        }
                    }
                }

                Packet.Release(message);
                Packet.Release(attrs);
            }
Пример #16
0
        private static void EventSink_RenameRequest(RenameRequestEventArgs e)
        {
            Mobile from = e.From;
            Mobile targ = e.Target;
            string name = e.Name;

            if (from.CanSee(targ) && from.InRange(targ, 12) && targ.CanBeRenamedBy(from))
            {
                name = name.Trim();

                if (NameVerification.Validate(name, 1, 16, true, false, true, 0, NameVerification.Empty, NameVerification.StartDisallowed, (/*Core.ML ?*/ NameVerification.Disallowed /*: new string[]{}*/)) == NameResultMessage.Allowed)
                {
//					if( Core.ML )
//					{
                    string[] disallowed = ProfanityProtection.Disallowed;

                    for (int i = 0; i < disallowed.Length; i++)
                    {
                        if (name.IndexOf(disallowed[i]) != -1)
                        {
                            from.SendLocalizedMessage(1072622);                                       // That name isn't very polite.
                            return;
                        }
                    }

                    from.SendLocalizedMessage(1072623, String.Format("{0}\t{1}", targ.Name, name));                                 // Pet ~1_OLDPETNAME~ renamed to ~2_NEWPETNAME~.
//					}

                    targ.Name = name;
                }
                else
                {
                    from.SendMessage("That name is unacceptable.");
                }
            }
        }
Пример #17
0
        private static void EventSink_RenameRequest(RenameRequestEventArgs e)
        {
            Mobile m    = e.From;
            Mobile targ = e.Target;
            string name = e.Name;

            if (!m.CanSee(targ) || !m.InRange(targ, 12) || !targ.CanBeRenamedBy(m))
            {
                return;
            }

            name = name.Trim();

            if (m.AccessLevel < AccessLevel.GameMaster)
            {
                if (ProfanityProtection.DisallowedAnywhere.Any(badWord => StringSearchFlags.Contains.Execute(name, badWord, true)))
                {
                    m.SendMessage("That name isn't very polite.");
                    return;
                }

                var result = NameVerification.ValidatePlayerName(
                    name, 1, 16, true, false, true, 1, NameVerification.SpaceDashPeriodQuote);

                if (result != NameResultMessage.Allowed && result != NameResultMessage.AlreadyExists)
                {
                    m.SendMessage("That name isn't acceptable.");
                    return;
                }
            }

            targ.Name = name;

            // Pet ~1_OLDPETNAME~ renamed to ~2_NEWPETNAME~.
            m.SendLocalizedMessage(1072623, String.Format("{0}\t{1}", targ.Name, name));
        }
Пример #18
0
        public MobileStatus(Mobile beholder, Mobile beheld, NetState ns) : base(0x11)
        {
            var name = beheld.Name ?? "";

            int type;

            if (beholder != beheld)
            {
                type = 0;
                EnsureCapacity(43);
            }
            else if (Core.HS && ns?.ExtendedStatus == true)
            {
                type = 6;
                EnsureCapacity(121);
            }
            else if (Core.ML && ns?.SupportsExpansion(Expansion.ML) == true)
            {
                type = 5;
                EnsureCapacity(91);
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity(88);
            }

            Stream.Write(beheld.Serial);

            Stream.WriteAsciiFixed(name, 30);

            if (beholder == beheld)
            {
                WriteAttr(beheld.Hits, beheld.HitsMax);
            }
            else
            {
                WriteAttrNorm(beheld.Hits, beheld.HitsMax);
            }

            Stream.Write(beheld.CanBeRenamedBy(beholder));

            Stream.Write((byte)type);

            if (type <= 0)
            {
                return;
            }

            Stream.Write(beheld.Female);

            Stream.Write((short)beheld.Str);
            Stream.Write((short)beheld.Dex);
            Stream.Write((short)beheld.Int);

            WriteAttr(beheld.Stam, beheld.StamMax);
            WriteAttr(beheld.Mana, beheld.ManaMax);

            Stream.Write(beheld.TotalGold);
            Stream.Write((short)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)));
            Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

            if (type >= 5)
            {
                Stream.Write((short)beheld.MaxWeight);
                Stream.Write((byte)(beheld.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but...
            }

            Stream.Write((short)beheld.StatCap);

            Stream.Write((byte)beheld.Followers);
            Stream.Write((byte)beheld.FollowersMax);

            if (type >= 4)
            {
                Stream.Write((short)beheld.FireResistance);   // Fire
                Stream.Write((short)beheld.ColdResistance);   // Cold
                Stream.Write((short)beheld.PoisonResistance); // Poison
                Stream.Write((short)beheld.EnergyResistance); // Energy
                Stream.Write((short)beheld.Luck);             // Luck

                var weapon = beheld.Weapon;

                if (weapon != null)
                {
                    weapon.GetStatusDamage(beheld, out var min, out var max);
                    Stream.Write((short)min); // Damage min
                    Stream.Write((short)max); // Damage max
                }
                else
                {
                    Stream.Write((short)0); // Damage min
                    Stream.Write((short)0); // Damage max
                }

                Stream.Write(beheld.TithingPoints);
            }

            if (type >= 6)
            {
                for (var i = 0; i < 15; ++i)
                {
                    Stream.Write((short)beheld.GetAOSStatus(i));
                }
            }
        }
Пример #19
0
        public MobileStatusExtended(Mobile m, NetState ns) : base(0x11)
        {
            var name = m.Name ?? "";

            int type;

            if (Core.HS && ns?.ExtendedStatus == true)
            {
                type = 6;
                EnsureCapacity(121);
            }
            else if (Core.ML && ns?.SupportsExpansion(Expansion.ML) == true)
            {
                type = 5;
                EnsureCapacity(91);
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity(88);
            }

            Stream.Write(m.Serial);
            Stream.WriteAsciiFixed(name, 30);

            Stream.Write((short)m.Hits);
            Stream.Write((short)m.HitsMax);

            Stream.Write(m.CanBeRenamedBy(m));

            Stream.Write((byte)type);

            Stream.Write(m.Female);

            Stream.Write((short)m.Str);
            Stream.Write((short)m.Dex);
            Stream.Write((short)m.Int);

            Stream.Write((short)m.Stam);
            Stream.Write((short)m.StamMax);

            Stream.Write((short)m.Mana);
            Stream.Write((short)m.ManaMax);

            Stream.Write(m.TotalGold);
            Stream.Write((short)(Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)));
            Stream.Write((short)(Mobile.BodyWeight + m.TotalWeight));

            if (type >= 5)
            {
                Stream.Write((short)m.MaxWeight);
                Stream.Write((byte)(m.Race?.RaceID + 1 ?? 0)); // Would be 0x00 if it's a non-ML enabled account but...
            }

            Stream.Write((short)m.StatCap);

            Stream.Write((byte)m.Followers);
            Stream.Write((byte)m.FollowersMax);

            if (type >= 4)
            {
                Stream.Write((short)m.FireResistance);   // Fire
                Stream.Write((short)m.ColdResistance);   // Cold
                Stream.Write((short)m.PoisonResistance); // Poison
                Stream.Write((short)m.EnergyResistance); // Energy
                Stream.Write((short)m.Luck);             // Luck

                var weapon = m.Weapon;

                if (weapon != null)
                {
                    weapon.GetStatusDamage(m, out var min, out var max);
                    Stream.Write((short)min); // Damage min
                    Stream.Write((short)max); // Damage max
                }
                else
                {
                    Stream.Write((short)0); // Damage min
                    Stream.Write((short)0); // Damage max
                }

                Stream.Write(m.TithingPoints);
            }

            if (type >= 6)
            {
                for (var i = 0; i < 15; ++i)
                {
                    Stream.Write((short)m.GetAOSStatus(i));
                }
            }
        }
Пример #20
0
		public MobileStatusExtended( Mobile m ) : base( 0x11 )
		{
			string name = m.Name;
			if ( name == null ) name = "";

			EnsureCapacity( 88 );

			m_Stream.Write( (int) m.Serial );
			m_Stream.WriteAsciiFixed( name, 30 );

			m_Stream.Write( (short) m.Hits );
			m_Stream.Write( (short) m.HitsMax );

			m_Stream.Write( m.CanBeRenamedBy( m ) );

			m_Stream.Write( (byte) 3 ); // Expantions Type 

			m_Stream.Write( m.Female );

			m_Stream.Write( (short) m.Str );
			m_Stream.Write( (short) m.Dex );
			m_Stream.Write( (short) m.Int );

			m_Stream.Write( (short) m.Stam );
			m_Stream.Write( (short) m.StamMax );

			m_Stream.Write( (short) m.Mana );
			m_Stream.Write( (short) m.ManaMax );

			m_Stream.Write( (int) m.TotalGold );
			m_Stream.Write( (short) (int)(m.ArmorRating + 0.5) );
			m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) );

			m_Stream.Write( (short) m.StatCap );

			m_Stream.Write( (byte) m.Followers );
			m_Stream.Write( (byte) m.FollowersMax );
		}
Пример #21
0
        public MobileStatus(Mobile beholder, Mobile beheld, NetState ns)
            : base(0x11)
        {
            string name = beheld.Name;
            if (name == null)
            {
                name = "";
            }

            int type;

            if (beholder != beheld)
            {
                type = 0;
                EnsureCapacity(43);
            }
            else if (Core.HS && ns != null && ns.ExtendedStatus)
            {
                type = 6;
                EnsureCapacity(121);
            }
            else if (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML))
            {
                type = 5;
                EnsureCapacity(91);
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity(88);
            }

            m_Stream.Write(beheld.Serial);

            m_Stream.WriteAsciiFixed(name, 30);

            if (beholder == beheld)
            {
                WriteAttr(beheld.Hits, beheld.HitsMax);
            }
            else
            {
                WriteAttrNorm(beheld.Hits, beheld.HitsMax);
            }

            m_Stream.Write(beheld.CanBeRenamedBy(beholder));

            m_Stream.Write((byte)type);

            if (type > 0)
            {
                m_Stream.Write(beheld.Female);

                m_Stream.Write((short)beheld.Str);
                m_Stream.Write((short)beheld.Dex);
                m_Stream.Write((short)beheld.Int);

                WriteAttr(beheld.Stam, beheld.StamMax);
                WriteAttr(beheld.Mana, beheld.ManaMax);

                m_Stream.Write(beheld.TotalGold);
                m_Stream.Write((short)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)));
                m_Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

                if (type >= 5)
                {
                    m_Stream.Write((short)beheld.MaxWeight);
                    m_Stream.Write((byte)(beheld.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but...
                }

                m_Stream.Write((short)beheld.StatCap);

                m_Stream.Write((byte)beheld.Followers);
                m_Stream.Write((byte)beheld.FollowersMax);

                if (type >= 4)
                {
                    m_Stream.Write((short)beheld.FireResistance); // Fire
                    m_Stream.Write((short)beheld.ColdResistance); // Cold
                    m_Stream.Write((short)beheld.PoisonResistance); // Poison
                    m_Stream.Write((short)beheld.EnergyResistance); // Energy
                    m_Stream.Write((short)beheld.Luck); // Luck

                    IWeapon weapon = beheld.Weapon;

                    int min = 0, max = 0;

                    if (weapon != null)
                    {
                        weapon.GetStatusDamage(beheld, out min, out max);
                    }

                    m_Stream.Write((short)min); // Damage min
                    m_Stream.Write((short)max); // Damage max

                    m_Stream.Write(beheld.TithingPoints);
                }

                if (type >= 6)
                {
                    for (int i = 0; i < 15; ++i)
                    {
                        m_Stream.Write((short)beheld.GetAOSStatus(i));
                    }
                }
            }
        }
Пример #22
0
		public MobileStatusExtended(Mobile m)
			: base(0x11)
		{
			string name = m.Name;
			if (name == null) name = "";

			bool sendMaxWeight = (Core.ML && m.NetState != null && m.NetState.SupportsExpansion(Expansion.ML));


			this.EnsureCapacity(sendMaxWeight ? 91 : 88);

			m_Stream.Write((int)m.Serial);
			m_Stream.WriteAsciiFixed(name, 30);

			m_Stream.Write((short)m.Hits);
			m_Stream.Write((short)m.HitsMax);

			m_Stream.Write(m.CanBeRenamedBy(m));

			m_Stream.Write((byte)(sendMaxWeight ? 0x05 : Core.AOS ? 0x04 : 0x03)); // type

			m_Stream.Write(m.Female);

			m_Stream.Write((short)m.Str);
			m_Stream.Write((short)m.Dex);
			m_Stream.Write((short)m.Int);

			m_Stream.Write((short)m.Stam);
			m_Stream.Write((short)m.StamMax);

			m_Stream.Write((short)m.Mana);
			m_Stream.Write((short)m.ManaMax);

			m_Stream.Write((int)m.TotalGold);
			//m_Stream.Write( (short) (Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)) );
			m_Stream.Write((short)((int)(m.ArmorRating + 0.5)));
			m_Stream.Write((short)(Mobile.BodyWeight + m.TotalWeight));

			if (sendMaxWeight)
			{
				//SMD: we're never ML, so we shouldn't need this!
				//				m_Stream.Write( (short)m.MaxWeight );
				//				m_Stream.Write( (byte)(m.Race.RaceID + 1));	// Would be 0x00 if it's a non-ML enabled account but...
			}

			m_Stream.Write((short)m.StatCap);

			m_Stream.Write((byte)m.Followers);
			m_Stream.Write((byte)m.FollowersMax);

			if (Core.AOS)
			{
				//SMD: we're never AOS, so we shouldn't need this!
				//                m_Stream.Write( (short) m.FireResistance ); // Fire
				//				m_Stream.Write( (short) m.ColdResistance ); // Cold
				//				m_Stream.Write( (short) m.PoisonResistance ); // Poison
				//				m_Stream.Write( (short) m.EnergyResistance ); // Energy
				//				m_Stream.Write( (short) m.Luck ); // Luck
				//
				//				IWeapon weapon = m.Weapon;
				//
				//				int min = 0, max = 0;
				//
				//				if ( weapon != null )
				//					weapon.GetStatusDamage( m, out min, out max );
				//
				//				m_Stream.Write( (short) min ); // Damage min
				//				m_Stream.Write( (short) max ); // Damage max
				//
				//				m_Stream.Write( (int) m.TithingPoints );
			}
		}
Пример #23
0
        public MobileStatusExtended( Mobile m, NetState ns )
            : base(0x11)
        {
            string name = m.Name;
            if ( name == null ) name = "";

            int type;

            if ( Core.HS && ns != null && ns.ExtendedStatus )
            {
                type = 6;
                EnsureCapacity( 121 );
            }
            else if ( Core.ML && ns != null && ns.SupportsExpansion( Expansion.ML ) )
            {
                type = 5;
                EnsureCapacity( 91 );
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity( 88 );
            }

            m_Stream.Write( (int) m.Serial );
            m_Stream.WriteAsciiFixed( name, 30 );

            m_Stream.Write( (short) m.Hits );
            m_Stream.Write( (short) m.HitsMax );

            m_Stream.Write( m.CanBeRenamedBy( m ) );

            m_Stream.Write( (byte) type );

            m_Stream.Write( m.Female );

            m_Stream.Write( (short) m.Str );
            m_Stream.Write( (short) m.Dex );
            m_Stream.Write( (short) m.Int );

            m_Stream.Write( (short) m.Stam );
            m_Stream.Write( (short) m.StamMax );

            m_Stream.Write( (short) m.Mana );
            m_Stream.Write( (short) m.ManaMax );

            m_Stream.Write( (int) m.TotalGold );
            m_Stream.Write( (short) (Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)) );
            m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) );

            if ( type >= 5 )
            {
                m_Stream.Write( (short)m.MaxWeight );
                m_Stream.Write( (byte)(m.Race.RaceID + 1));	// Would be 0x00 if it's a non-ML enabled account but...
            }

            m_Stream.Write( (short) m.StatCap );

            m_Stream.Write( (byte) m.Followers );
            m_Stream.Write( (byte) m.FollowersMax );

            if ( type >= 4 )
            {
                m_Stream.Write( (short) m.FireResistance ); // Fire
                m_Stream.Write( (short) m.ColdResistance ); // Cold
                m_Stream.Write( (short) m.PoisonResistance ); // Poison
                m_Stream.Write( (short) m.EnergyResistance ); // Energy
                m_Stream.Write( (short) m.Luck ); // Luck

                IWeapon weapon = m.Weapon;

                int min = 0, max = 0;

                if ( weapon != null )
                    weapon.GetStatusDamage( m, out min, out max );

                m_Stream.Write( (short) min ); // Damage min
                m_Stream.Write( (short) max ); // Damage max

                m_Stream.Write( (int) m.TithingPoints );
            }

            if ( type >= 6 )
            {
                for ( int i = 0; i < 15; ++i )
                    m_Stream.Write( (short) m.GetAOSStatus( i ) );
            }
        }
Пример #24
0
        public void Add(Mobile m)
        {
            PartyMemberInfo mi = this[m];

            if (mi == null)
            {
                this.m_Members.Add(new PartyMemberInfo(m));
                m.Party = this;

                Packet memberList = Packet.Acquire(new PartyMemberList(this));
                Packet attrs = Packet.Acquire(new MobileAttributesN(m));

                for (int i = 0; i < this.m_Members.Count; ++i)
                {
                    Mobile f = ((PartyMemberInfo)this.m_Members[i]).Mobile;

                    f.Send(memberList);

                    if (f != m)
                    {
                        #region Enhance Client
                        f.Send(new MobileStatusCompact(m.CanBeRenamedBy(f), m));
                        f.Send(attrs);
                        f.Send(new KRDisplayWaypoint(m, WaypointType.PartyMember, false, 1062613, m.Name));
                        m.Send(new MobileStatusCompact(f.CanBeRenamedBy(m), f));
                        m.Send(new MobileAttributesN(f));
                        m.Send(new KRDisplayWaypoint(f, WaypointType.PartyMember, false, 1062613, f.Name));
                        /*
                        for (int i2 = 0; i2 < m_Members.Count; ++i2)
                        {
                            Mobile f2 = ((PartyMemberInfo)m_Members[i2]).Mobile;

                            if (f2.NetState != null && f2.NetState.IsKRClient)
                            {
                                f2.NetState.Send(new DisplayWaypoint(f.Serial, f.X, f.Y, f.Z, f.Map.MapID, WaypointType.PartyMember, f.Name));
                            }
                        }
                         */
                        #endregion
                    }
                }

                Packet.Release(memberList);
                Packet.Release(attrs);
            }
        }
Пример #25
0
		public MobileStatus( Mobile beholder, Mobile beheld ) : base( 0x11 )
		{
			string name = beheld.Name;
			if ( name == null ) name = "";

			int type;

			if ( beholder != beheld )
			{
				type = 0;
				EnsureCapacity( 43 );
			}
			else
			{
				type = 3;
				EnsureCapacity( 88 );
			}

			m_Stream.Write( beheld.Serial );

			m_Stream.WriteAsciiFixed( name, 30 );

			if ( beholder == beheld )
				WriteAttr( beheld.Hits, beheld.HitsMax );
			else
				WriteAttrNorm( beheld.Hits, beheld.HitsMax );

			m_Stream.Write( beheld.CanBeRenamedBy( beholder ) );

			m_Stream.Write( (byte) type );

			if ( type > 0 )
			{
				m_Stream.Write( beheld.Female );

				m_Stream.Write( (short) beheld.Str );
				m_Stream.Write( (short) beheld.Dex );
				m_Stream.Write( (short) beheld.Int );

				WriteAttr( beheld.Stam, beheld.StamMax );
				WriteAttr( beheld.Mana, beheld.ManaMax );

				m_Stream.Write( (int) beheld.TotalGold );
				m_Stream.Write( (short) (int)(beheld.ArmorRating + 0.5) );
				m_Stream.Write( (short) (Mobile.BodyWeight + beheld.TotalWeight) );

				m_Stream.Write( (short) beheld.StatCap );

				m_Stream.Write( (byte) beheld.Followers );
				m_Stream.Write( (byte) beheld.FollowersMax );
			}
		}
Пример #26
0
		public void Add( Mobile m )
		{
			PartyMemberInfo mi = this[m];

			if ( mi == null )
			{
				m_Members.Add( new PartyMemberInfo( m ) );
				m.Party = this;

				Packet memberList = Packet.Acquire( new PartyMemberList( this ) );
				Packet attrs = Packet.Acquire( new MobileAttributesN( m ) );

				for ( int i = 0; i < m_Members.Count; ++i )
				{
					Mobile f = ((PartyMemberInfo)m_Members[i]).Mobile;

					f.Send( memberList );

					if ( f != m )
					{
						f.Send( new MobileStatusCompact( m.CanBeRenamedBy( f ), m ) );
						f.Send( attrs );
						m.Send( new MobileStatusCompact( f.CanBeRenamedBy( m ), f ) );
						m.Send( new MobileAttributesN( f ) );
					}
				}

				Packet.Release( memberList );
				Packet.Release( attrs );
			}
		}
Пример #27
0
        public MobileStatus(Mobile beholder, Mobile beheld, NetState ns)
            : base(0x11)
        {
            string name = beheld.Name;
            if (name == null)
                name = "";

            bool sendMLExtended = (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML));

            this.EnsureCapacity(43 + (beholder == beheld ? (sendMLExtended ? 48 : 45) : 0));

            this.m_Stream.Write(beheld.Serial);

            this.m_Stream.WriteAsciiFixed(name, 30);

            if (beholder == beheld)
                this.WriteAttr(beheld.Hits, beheld.HitsMax);
            else
                this.WriteAttrNorm(beheld.Hits, beheld.HitsMax);

            this.m_Stream.Write(beheld.CanBeRenamedBy(beholder));

            if (beholder == beheld)
            {
                this.m_Stream.Write((byte)(sendMLExtended ? 0x05 : Core.AOS ? 0x04 : 0x03)); // type

                this.m_Stream.Write(beheld.Female);

                this.m_Stream.Write((short)beheld.Str);
                this.m_Stream.Write((short)beheld.Dex);
                this.m_Stream.Write((short)beheld.Int);

                this.WriteAttr(beheld.Stam, beheld.StamMax);
                this.WriteAttr(beheld.Mana, beheld.ManaMax);

                this.m_Stream.Write((int)beheld.TotalGold);
                this.m_Stream.Write((short)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)));
                this.m_Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

                if (sendMLExtended)
                {
                    this.m_Stream.Write((short)beheld.MaxWeight);
                    this.m_Stream.Write((byte)(beheld.Race.RaceID + 1));	// Would be 0x00 if it's a non-ML enabled account but...
                }

                this.m_Stream.Write((short)beheld.StatCap);

                this.m_Stream.Write((byte)beheld.Followers);
                this.m_Stream.Write((byte)beheld.FollowersMax);

                if (Core.AOS)
                {
                    this.m_Stream.Write((short)beheld.FireResistance); // Fire
                    this.m_Stream.Write((short)beheld.ColdResistance); // Cold
                    this.m_Stream.Write((short)beheld.PoisonResistance); // Poison
                    this.m_Stream.Write((short)beheld.EnergyResistance); // Energy
                    this.m_Stream.Write((short)beheld.Luck); // Luck

                    IWeapon weapon = beheld.Weapon;

                    int min = 0, max = 0;

                    if (weapon != null)
                        weapon.GetStatusDamage(beheld, out min, out max);

                    this.m_Stream.Write((short)min); // Damage min
                    this.m_Stream.Write((short)max); // Damage max

                    this.m_Stream.Write((int)beheld.TithingPoints);
                }
            }
            else
            {
                this.m_Stream.Write((byte)0x00);
            }
        }
Пример #28
0
        public void TestMobileStatusExtended(ProtocolChanges changes)
        {
            var beholder = new Mobile(0x1)
            {
                Name = "Random Mobile 1"
            };

            beholder.DefaultMobileInit();

            var beheld = new Mobile(0x2)
            {
                Name = "Random Mobile 2"
            };

            beheld.DefaultMobileInit();

            var ns = new NetState(null)
            {
                ProtocolChanges = changes
            };

            var data = new MobileStatus(beholder, beheld, ns).Compile();

            Span <byte> expectedData = stackalloc byte[121]; // Max Size
            var         pos          = 0;

            expectedData.Write(ref pos, (byte)0x11);
            pos += 2; // Length

            int type;
            var notSelf = beholder != beheld;

            if (notSelf)
            {
                type = 0;
            }
            else if (Core.HS && ns.ExtendedStatus)
            {
                type = 6;
            }
            else if (Core.ML && ns.SupportsExpansion(Expansion.ML))
            {
                type = 5;
            }
            else
            {
                type = Core.AOS ? 4 : 3;
            }

            expectedData.Write(ref pos, beheld.Serial);
            expectedData.WriteAsciiFixed(ref pos, beheld.Name, 30);

            expectedData.WriteReverseAttribute(ref pos, beheld.Hits, beheld.HitsMax, notSelf);

            expectedData.Write(ref pos, beheld.CanBeRenamedBy(beheld));
            expectedData.Write(ref pos, (byte)type);

            if (type > 0)
            {
                expectedData.Write(ref pos, beheld.Female);
                expectedData.Write(ref pos, (ushort)beheld.Str);
                expectedData.Write(ref pos, (ushort)beheld.Dex);
                expectedData.Write(ref pos, (ushort)beheld.Int);

                expectedData.WriteReverseAttribute(ref pos, beheld.Stam, beheld.StamMax, notSelf);
                expectedData.WriteReverseAttribute(ref pos, beheld.Mana, beheld.ManaMax, notSelf);

                expectedData.Write(ref pos, beheld.TotalGold);
                expectedData.Write(
                    ref pos,
                    (ushort)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5))
                    );
                expectedData.Write(ref pos, (ushort)(Mobile.BodyWeight + beheld.TotalWeight));

                if (type >= 5)
                {
                    expectedData.Write(ref pos, (ushort)beheld.MaxWeight);
                    expectedData.Write(ref pos, (byte)(beheld.Race.RaceID + 1)); // 0x00 for a non-ML enabled account
                }

                expectedData.Write(ref pos, (ushort)beheld.StatCap);
                expectedData.Write(ref pos, (byte)beheld.Followers);
                expectedData.Write(ref pos, (byte)beheld.FollowersMax);

                if (type >= 4)
                {
                    expectedData.Write(ref pos, (ushort)beheld.FireResistance);
                    expectedData.Write(ref pos, (ushort)beheld.ColdResistance);
                    expectedData.Write(ref pos, (ushort)beheld.PoisonResistance);
                    expectedData.Write(ref pos, (ushort)beheld.EnergyResistance);
                    expectedData.Write(ref pos, (ushort)beheld.Luck);
                }

                var min = 0;
                var max = 0;
                beheld.Weapon?.GetStatusDamage(beheld, out min, out max);

                expectedData.Write(ref pos, (ushort)min);
                expectedData.Write(ref pos, (ushort)max);

                expectedData.Write(ref pos, beheld.TithingPoints);

                if (type >= 6)
                {
                    for (var i = 0; i < 15; ++i)
                    {
                        expectedData.Write(ref pos, (ushort)beheld.GetAOSStatus(i));
                    }
                }
            }

            expectedData.Slice(1, 2).Write((ushort)pos); // Length

            expectedData = expectedData.Slice(0, pos);
            AssertThat.Equal(data, expectedData);
        }
Пример #29
0
        public MobileStatusExtended( Mobile m, NetState ns )
            : base(0x11)
        {
            string name = m.Name;
            if ( name == null ) name = "";

            bool sendMLExtended = (Core.ML && ns != null && ns.SupportsExpansion( Expansion.ML ));

            #region UOSA: KR Support
            this.EnsureCapacity((m.NetState != null && m.NetState.IsKRClient) ? 161 : (sendMLExtended ? 91 : 88));
            #endregion

            m_Stream.Write( (int) m.Serial );
            m_Stream.WriteAsciiFixed( name, 30 );

            m_Stream.Write( (short) m.Hits );
            m_Stream.Write( (short) m.HitsMax );

            m_Stream.Write( m.CanBeRenamedBy( m ) );

            #region UOSA: KR Support
            m_Stream.Write((byte)((m.NetState != null && m.NetState.IsKRClient) ? 0x06 : (sendMLExtended ? 0x05 : Core.AOS ? 0x04 : 0x03))); // type
            #endregion

            m_Stream.Write( m.Female );

            m_Stream.Write( (short) m.Str );
            m_Stream.Write( (short) m.Dex );
            m_Stream.Write( (short) m.Int );

            m_Stream.Write( (short) m.Stam );
            m_Stream.Write( (short) m.StamMax );

            m_Stream.Write( (short) m.Mana );
            m_Stream.Write( (short) m.ManaMax );

            m_Stream.Write( (int) m.TotalGold );
            m_Stream.Write( (short) (Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)) );
            m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) );

            if( sendMLExtended )
            {
                m_Stream.Write( (short)m.MaxWeight );
                m_Stream.Write( (byte)(m.Race.RaceID + 1));	// Would be 0x00 if it's a non-ML enabled account but...
            }

            m_Stream.Write( (short) m.StatCap );

            m_Stream.Write( (byte) m.Followers );
            m_Stream.Write( (byte) m.FollowersMax );

            if ( Core.AOS )
            {
                m_Stream.Write( (short) m.FireResistance ); // Fire
                m_Stream.Write( (short) m.ColdResistance ); // Cold
                m_Stream.Write( (short) m.PoisonResistance ); // Poison
                m_Stream.Write( (short) m.EnergyResistance ); // Energy
                m_Stream.Write( (short) m.Luck ); // Luck

                IWeapon weapon = m.Weapon;

                int min = 0, max = 0;

                if ( weapon != null )
                    weapon.GetStatusDamage( m, out min, out max );

                m_Stream.Write( (short) min ); // Damage min
                m_Stream.Write( (short) max ); // Damage max

                m_Stream.Write( (int) m.TithingPoints );
            }

            #region UOSA: KR Support
            if (m.NetState != null && m.NetState.IsKRClient)
            {
                m_Stream.Write((short)m.AttackChance); // Hit Chance Increase
                m_Stream.Write((short)m.WeaponSpeed); // Swing Speed Increase
                m_Stream.Write((short)m.WeaponDamage); // Damage Increase
                m_Stream.Write((short)m.LowerRegCost); // Lower Reagent Cost
                m_Stream.Write((short)m.RegenHits); // Hit Points Regeneration
                m_Stream.Write((short)m.RegenStam); // Stamina Regeneration
                m_Stream.Write((short)m.RegenMana); // Mana Regeneration
                m_Stream.Write((short)m.ReflectPhysical); // Reflect Physical Damage
                m_Stream.Write((short)m.EnhancePotions); // Enhance Potions
                m_Stream.Write((short)m.DefendChance); // Defense Chance Increase
                m_Stream.Write((short)m.SpellDamage); // Spell Damage Increase
                m_Stream.Write((short)m.CastRecovery); // Faster Cast Recovery
                m_Stream.Write((short)m.CastSpeed); // Faster Casting
                m_Stream.Write((short)m.LowerManaCost); // Lower Mana Cost
                m_Stream.Write((short)m.BonusStr); // Strength Increase
                m_Stream.Write((short)m.BonusDex); // Dexterity Increase
                m_Stream.Write((short)m.BonusInt); // Intelligence Increase
                m_Stream.Write((short)m.BonusHits); // Hit Points Increase
                m_Stream.Write((short)m.BonusStam); // Stamina Increase
                m_Stream.Write((short)m.BonusMana); // Mana Increase
                m_Stream.Write((short)m.MaxHitIncrease); // Maximum Hit Points Increase
                m_Stream.Write((short)m.MaxStamIncrease); // Maximum Stamina Increase
                m_Stream.Write((short)m.MaxManaIncrease); // Maximum Mana Increase
            }
            #endregion
        }
Пример #30
0
        public MobileStatusExtended( Mobile m )
            : base(0x11)
        {
            string name = m.Name;
            if ( name == null ) name = "";

            this.EnsureCapacity( 88 );

            m_Stream.Write( (int) m.Serial );
            m_Stream.WriteAsciiFixed( name, 30 );

            m_Stream.Write( (short) m.Hits );
            m_Stream.Write( (short) m.HitsMax );

            m_Stream.Write( m.CanBeRenamedBy( m ) );

            m_Stream.Write( (byte) (MobileStatus.SendAosInfo ? 0x04 : 0x03) ); // type

            m_Stream.Write( m.Female );

            m_Stream.Write( (short) m.Str );
            m_Stream.Write( (short) m.Dex );
            m_Stream.Write( (short) m.Int );

            m_Stream.Write( (short) m.Stam );
            m_Stream.Write( (short) m.StamMax );

            m_Stream.Write( (short) m.Mana );
            m_Stream.Write( (short) m.ManaMax );

            m_Stream.Write( (int) m.TotalGold );
            m_Stream.Write( (short) (Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)) );
            m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) );

            m_Stream.Write( (short) m.StatCap );

            m_Stream.Write( (byte) m.Followers );
            m_Stream.Write( (byte) m.FollowersMax );

            if ( MobileStatus.SendAosInfo )
            {
                m_Stream.Write( (short) m.FireResistance ); // Fire
                m_Stream.Write( (short) m.ColdResistance ); // Cold
                m_Stream.Write( (short) m.PoisonResistance ); // Poison
                m_Stream.Write( (short) m.EnergyResistance ); // Energy
                m_Stream.Write( (short) m.Luck ); // Luck

                IWeapon weapon = m.Weapon;

                int min = 0, max = 0;

                if ( weapon != null )
                    weapon.GetStatusDamage( m, out min, out max );

                m_Stream.Write( (short) min ); // Damage min
                m_Stream.Write( (short) max ); // Damage max

                m_Stream.Write( (int) m.TithingPoints );
            }
        }
Пример #31
0
		public MobileStatus(Mobile beholder, Mobile beheld)
			: base(0x11)
		{
			string name = beheld.Name;
			if (name == null) name = "";

			bool sendMaxWeight = (Core.ML && beheld.NetState != null && beheld.NetState.SupportsExpansion(Expansion.ML));

			this.EnsureCapacity(43 + (beholder == beheld ? (sendMaxWeight ? 48 : 45) : 0));

			m_Stream.Write(beheld.Serial);

			m_Stream.WriteAsciiFixed(name, 30);

			if (beholder == beheld)
				WriteAttr(beheld.Hits, beheld.HitsMax);
			else
				WriteAttrNorm(beheld.Hits, beheld.HitsMax);

			m_Stream.Write(beheld.CanBeRenamedBy(beholder));

			if (beholder == beheld)
			{
				m_Stream.Write((byte)(sendMaxWeight ? 0x05 : Core.AOS ? 0x04 : 0x03)); // type

				m_Stream.Write(beheld.Female);

				m_Stream.Write((short)beheld.Str);
				m_Stream.Write((short)beheld.Dex);
				m_Stream.Write((short)beheld.Int);

				WriteAttr(beheld.Stam, beheld.StamMax);
				WriteAttr(beheld.Mana, beheld.ManaMax);

				m_Stream.Write((int)beheld.TotalGold);
				//m_Stream.Write( (short) (Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)) );
				m_Stream.Write((short)((int)(beheld.ArmorRating + 0.5)));
				m_Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

				if (sendMaxWeight)
				{
					//SMD: we're never ML, so we shouldn't need this!
					//m_Stream.Write( (short)beheld.MaxWeight );
					//m_Stream.Write( (byte)(beheld.Race.RaceID + 1) );	// Would be 0x00 if it's a non-ML enabled account but...
				}

				m_Stream.Write((short)beheld.StatCap);

				m_Stream.Write((byte)beheld.Followers);
				m_Stream.Write((byte)beheld.FollowersMax);

				if (Core.AOS)
				{
					//SMD: We're never AOS, so we shouldn't need this!
					//					m_Stream.Write( (short) beheld.FireResistance ); // Fire
					//					m_Stream.Write( (short) beheld.ColdResistance ); // Cold
					//					m_Stream.Write( (short) beheld.PoisonResistance ); // Poison
					//					m_Stream.Write( (short) beheld.EnergyResistance ); // Energy
					//					m_Stream.Write( (short) beheld.Luck ); // Luck
					//
					//					IWeapon weapon = beheld.Weapon;
					//
					//					int min = 0, max = 0;
					//
					//					if ( weapon != null )
					//						weapon.GetStatusDamage( beheld, out min, out max );
					//
					//					m_Stream.Write( (short) min ); // Damage min
					//					m_Stream.Write( (short) max ); // Damage max
					//
					//					m_Stream.Write( (int) beheld.TithingPoints );
				}
			}
			else
			{
				m_Stream.Write((byte)0x00);
			}
		}
Пример #32
0
        public MobileStatus(Mobile beholder, Mobile beheld, NetState ns)
            : base(0x11)
        {
            string name = beheld.Name;
            if (name == null)
            {
                name = "";
            }

            int type;

            // bool isEnhancedClient = beholder.NetState != null && beholder.NetState.Version.IsEnhanced;

            if (beholder != beheld)
            {
                type = 0;
                EnsureCapacity(43);
            }
            //else if (isEnhancedClient)
            //{
            //type = 7;
            //EnsureCapacity(149);
            //}
            else if (Core.HS && ns != null && ns.ExtendedStatus)
            {
                type = 6;
                EnsureCapacity(121);
            }
            else if (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML))
            {
                type = 5;
                EnsureCapacity(91);
            }
            else
            {
                type = Core.AOS ? 4 : 3;
                EnsureCapacity(88);
            }

            m_Stream.Write(beheld.Serial);

            m_Stream.WriteAsciiFixed(name, 30);

            if (beholder == beheld)
            {
                WriteAttr(beheld.Hits, beheld.HitsMax);
            }
            else
            {
                WriteAttrNorm(beheld.Hits, beheld.HitsMax);
            }

            m_Stream.Write(beheld.CanBeRenamedBy(beholder));

            m_Stream.Write((byte)type);

            if (type > 0)
            {
                m_Stream.Write(beheld.Female);

                m_Stream.Write((short)beheld.Str);
                m_Stream.Write((short)beheld.Dex);
                m_Stream.Write((short)beheld.Int);

                WriteAttr(beheld.Stam, beheld.StamMax);
                WriteAttr(beheld.Mana, beheld.ManaMax);

                m_Stream.Write(beheld.TotalGold);
                m_Stream.Write((short)(Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)));
                m_Stream.Write((short)(Mobile.BodyWeight + beheld.TotalWeight));

                if (type >= 5)
                {
                    m_Stream.Write((short)beheld.MaxWeight);
                    m_Stream.Write((byte)(beheld.Race.RaceID + 1)); // Would be 0x00 if it's a non-ML enabled account but...
                }

                m_Stream.Write((short)beheld.StatCap);

                m_Stream.Write((byte)beheld.Followers);
                m_Stream.Write((byte)beheld.FollowersMax);

                if (type >= 4)
                {
                    m_Stream.Write((short)beheld.FireResistance); // Fire
                    m_Stream.Write((short)beheld.ColdResistance); // Cold
                    m_Stream.Write((short)beheld.PoisonResistance); // Poison
                    m_Stream.Write((short)beheld.EnergyResistance); // Energy
                    m_Stream.Write((short)beheld.Luck); // Luck

                    IWeapon weapon = beheld.Weapon;

                    int min = 0, max = 0;

                    if (weapon != null)
                    {
                        weapon.GetStatusDamage(beheld, out min, out max);
                    }

                    m_Stream.Write((short)min); // Damage min
                    m_Stream.Write((short)max); // Damage max

                    m_Stream.Write(beheld.TithingPoints);
                }

                if (type >= 6)
                {
                    for (int i = 0; i < 15; ++i)
                    {
                        m_Stream.Write((short)beheld.GetAOSStatus(i));
                    }

                    //if (isEnhancedClient)
                    //{
                    /*
                        m_Stream.Write((short)beheld.AttackChance); // Hit Chance Increase
                        m_Stream.Write((short)beheld.WeaponSpeed); // Swing Speed Increase
                        m_Stream.Write((short)beheld.WeaponDamage); // Damage Increase
                        m_Stream.Write((short)beheld.LowerRegCost); // Lower Reagent Cost
                        m_Stream.Write((short)beheld.RegenHits); // Hit Points Regeneration
                        m_Stream.Write((short)beheld.RegenStam); // Stamina Regeneration
                        m_Stream.Write((short)beheld.RegenMana); // Mana Regeneration
                        m_Stream.Write((short)beheld.ReflectPhysical); // Reflect Physical Damage
                        m_Stream.Write((short)beheld.EnhancePotions); // Enhance Potions
                        m_Stream.Write((short)beheld.DefendChance); // Defense Chance Increase
                        m_Stream.Write((short)beheld.SpellDamage); // Spell Damage Increase
                        m_Stream.Write((short)beheld.CastRecovery); // Faster Cast Recovery
                        m_Stream.Write((short)beheld.CastSpeed); // Faster Casting
                        m_Stream.Write((short)beheld.LowerManaCost); // Lower Mana Cost
                        m_Stream.Write((short)beheld.BonusStr); // Strength Increase
                        m_Stream.Write((short)beheld.BonusDex); // Dexterity Increase
                        m_Stream.Write((short)beheld.BonusInt); // Intelligence Increase
                        m_Stream.Write((short)beheld.BonusHits); // Hit Points Increase
                        m_Stream.Write((short)beheld.BonusStam); // Stamina Increase
                        m_Stream.Write((short)beheld.BonusMana); // Mana Increase
                        m_Stream.Write((short)beheld.MaxHitIncrease); // Maximum Hit Points Increase
                        m_Stream.Write((short)beheld.MaxStamIncrease); // Maximum Stamina Increase
                        m_Stream.Write((short)beheld.MaxManaIncrease); // Maximum Mana Increase
                     */
                    //}

                    #region EC Support
                    if (beheld.NetState != null && beheld.NetState.IsKRClient)
                    {
                        m_Stream.Write((short)beheld.AttackChance); // Hit Chance Increase
                        m_Stream.Write((short)beheld.WeaponSpeed); // Swing Speed Increase
                        m_Stream.Write((short)beheld.WeaponDamage); // Damage Increase
                        m_Stream.Write((short)beheld.LowerRegCost); // Lower Reagent Cost
                        m_Stream.Write((short)beheld.RegenHits); // Hit Points Regeneration
                        m_Stream.Write((short)beheld.RegenStam); // Stamina Regeneration
                        m_Stream.Write((short)beheld.RegenMana); // Mana Regeneration
                        m_Stream.Write((short)beheld.ReflectPhysical); // Reflect Physical Damage
                        m_Stream.Write((short)beheld.EnhancePotions); // Enhance Potions
                        m_Stream.Write((short)beheld.DefendChance); // Defense Chance Increase
                        m_Stream.Write((short)beheld.SpellDamage); // Spell Damage Increase
                        m_Stream.Write((short)beheld.CastRecovery); // Faster Cast Recovery
                        m_Stream.Write((short)beheld.CastSpeed); // Faster Casting
                        m_Stream.Write((short)beheld.LowerManaCost); // Lower Mana Cost
                        m_Stream.Write((short)beheld.BonusStr); // Strength Increase
                        m_Stream.Write((short)beheld.BonusDex); // Dexterity Increase
                        m_Stream.Write((short)beheld.BonusInt); // Intelligence Increase
                        m_Stream.Write((short)beheld.BonusHits); // Hit Points Increase
                        m_Stream.Write((short)beheld.BonusStam); // Stamina Increase
                        m_Stream.Write((short)beheld.BonusMana); // Mana Increase
                        m_Stream.Write((short)beheld.MaxHitIncrease); // Maximum Hit Points Increase
                        m_Stream.Write((short)beheld.MaxStamIncrease); // Maximum Stamina Increase
                        m_Stream.Write((short)beheld.MaxManaIncrease); // Maximum Mana Increase
                    }
                    #endregion
                }
            }
        }
Пример #33
0
        public MobileStatus( Mobile beholder, Mobile beheld )
            : base(0x11)
        {
            string name = beheld.Name;
            if ( name == null ) name = "";

            this.EnsureCapacity( 43 + (beholder == beheld ? 45 : 0) );

            m_Stream.Write( beheld.Serial );

            m_Stream.WriteAsciiFixed( name, 30 );

            if ( beholder == beheld )
                WriteAttr( beheld.Hits, beheld.HitsMax );
            else
                WriteAttrNorm( beheld.Hits, beheld.HitsMax );

            m_Stream.Write( beheld.CanBeRenamedBy( beholder ) );

            if ( beholder == beheld )
            {
                m_Stream.Write( (byte) (m_SendAosInfo ? 0x04 : 0x03) );

                m_Stream.Write( beheld.Female );

                m_Stream.Write( (short) beheld.Str );
                m_Stream.Write( (short) beheld.Dex );
                m_Stream.Write( (short) beheld.Int );

                WriteAttr( beheld.Stam, beheld.StamMax );
                WriteAttr( beheld.Mana, beheld.ManaMax );

                m_Stream.Write( (int) beheld.TotalGold );
                m_Stream.Write( (short) (Core.AOS ? beheld.PhysicalResistance : (int)(beheld.ArmorRating + 0.5)) );
                m_Stream.Write( (short) (Mobile.BodyWeight + beheld.TotalWeight) );

                m_Stream.Write( (short) beheld.StatCap );

                m_Stream.Write( (byte) beheld.Followers );
                m_Stream.Write( (byte) beheld.FollowersMax );

                if ( m_SendAosInfo )
                {
                    m_Stream.Write( (short) beheld.FireResistance ); // Fire
                    m_Stream.Write( (short) beheld.ColdResistance ); // Cold
                    m_Stream.Write( (short) beheld.PoisonResistance ); // Poison
                    m_Stream.Write( (short) beheld.EnergyResistance ); // Energy
                    m_Stream.Write( (short) beheld.Luck ); // Luck

                    IWeapon weapon = beheld.Weapon;

                    int min = 0, max = 0;

                    if ( weapon != null )
                        weapon.GetStatusDamage( beheld, out min, out max );

                    m_Stream.Write( (short) min ); // Damage min
                    m_Stream.Write( (short) max ); // Damage max

                    m_Stream.Write( (int) beheld.TithingPoints );
                }
            }
            else
            {
                m_Stream.Write( (byte) 0x00 );
            }
        }
Пример #34
0
        // Methods
        public MobileStatus(Mobile beholder, Mobile beheld) : base(17)
        {
            IWeapon weapon1;
            int     num1;
            int     num2;
            string  text1 = beheld.Name;

            if (text1 == null)
            {
                text1 = "";
            }
            base.EnsureCapacity((43 + ((beholder == beheld) ? 45 : 0)));
            this.m_Stream.Write(Serial.op_Implicit(beheld.Serial));
            this.m_Stream.WriteAsciiFixed(text1, 30);
            if (beholder == beheld)
            {
                this.WriteAttr(beheld.Hits, beheld.HitsMax);
            }
            else
            {
                this.WriteAttrNorm(beheld.Hits, beheld.HitsMax);
            }
            this.m_Stream.Write(beheld.CanBeRenamedBy(beholder));
            if (beholder == beheld)
            {
                this.m_Stream.Write(((byte)(MobileStatus.m_SendAosInfo ? 4 : 3)));
                this.m_Stream.Write(beheld.Female);
                this.m_Stream.Write(((short)beheld.Str));
                this.m_Stream.Write(((short)beheld.Dex));
                this.m_Stream.Write(((short)beheld.Int));
                this.WriteAttr(beheld.Stam, beheld.StamMax);
                this.WriteAttr(beheld.Mana, beheld.ManaMax);
                this.m_Stream.Write(beheld.TotalGold);
                this.m_Stream.Write(((short)(Core.AOS ? beheld.PhysicalResistance : ((int)(beheld.ArmorRating + 0.5)))));
                this.m_Stream.Write(((short)(Mobile.BodyWeight + beheld.TotalWeight)));
                this.m_Stream.Write(((short)beheld.StatCap));
                this.m_Stream.Write(((byte)beheld.Followers));
                this.m_Stream.Write(((byte)beheld.FollowersMax));
                if (!MobileStatus.m_SendAosInfo)
                {
                    return;
                }
                this.m_Stream.Write(((short)beheld.FireResistance));
                this.m_Stream.Write(((short)beheld.ColdResistance));
                this.m_Stream.Write(((short)beheld.PoisonResistance));
                this.m_Stream.Write(((short)beheld.EnergyResistance));
                this.m_Stream.Write(((short)beheld.Luck));
                weapon1 = beheld.Weapon;
                num1    = 0;
                num2    = 0;
                if (weapon1 != null)
                {
                    weapon1.GetStatusDamage(beheld, out num1, out num2);
                }
                this.m_Stream.Write(((short)num1));
                this.m_Stream.Write(((short)num2));
                this.m_Stream.Write(beheld.TithingPoints);
                return;
            }
            this.m_Stream.Write(((byte)0));
        }
Пример #35
0
		public void OnStatsQuery( Mobile beholder, Mobile beheld )
		{
			if ( beholder != beheld && Contains( beholder ) && beholder.Map == beheld.Map && Utility.InUpdateRange( beholder, beheld ) )
			{
				if ( !beholder.CanSee( beheld ) )
					beholder.Send( new MobileStatusCompact( beheld.CanBeRenamedBy( beholder ), beheld ) );

				beholder.Send( new MobileAttributesN( beheld ) );
			}
		}
Пример #36
0
        public MobileStatusExtended(Mobile m, NetState ns)
            : base(0x11)
        {
			string name = m.Name;
			if ( name == null ) name = "";

            bool sendMLExtended = (Core.ML && ns != null && ns.SupportsExpansion(Expansion.ML));

            this.EnsureCapacity(sendMLExtended ? 91 : 88);

			m_Stream.Write( (int) m.Serial );
			m_Stream.WriteAsciiFixed( name, 30 );

			m_Stream.Write( (short) m.Hits );
			m_Stream.Write( (short) m.HitsMax );

			m_Stream.Write( m.CanBeRenamedBy( m ) );

            m_Stream.Write((byte)(sendMLExtended ? 0x05 : Core.AOS ? 0x04 : 0x03)); // type

			m_Stream.Write( m.Female );

			m_Stream.Write( (short) m.Str );
			m_Stream.Write( (short) m.Dex );
			m_Stream.Write( (short) m.Int );

			m_Stream.Write( (short) m.Stam );
			m_Stream.Write( (short) m.StamMax );

			m_Stream.Write( (short) m.Mana );
			m_Stream.Write( (short) m.ManaMax );

            int totalGold = m.TotalGold;

            if (m.BankBox != null)
                totalGold += m.BankBox.TotalGold;

            m_Stream.Write(totalGold);
			m_Stream.Write( (short) (Core.AOS ? m.PhysicalResistance : (int)(m.ArmorRating + 0.5)) );
			m_Stream.Write( (short) (Mobile.BodyWeight + m.TotalWeight) );

            if (sendMLExtended)
			{
				m_Stream.Write( (short)m.MaxWeight );
				m_Stream.Write( (byte)(m.Race.RaceID + 1));	// Would be 0x00 if it's a non-ML enabled account but...
			}

			m_Stream.Write( (short) m.StatCap );

			m_Stream.Write( (byte) m.Followers );
			m_Stream.Write( (byte) m.FollowersMax );

			if ( Core.AOS )
			{
				m_Stream.Write( (short) m.FireResistance ); // Fire
				m_Stream.Write( (short) m.ColdResistance ); // Cold
				m_Stream.Write( (short) m.PoisonResistance ); // Poison
				m_Stream.Write( (short) m.EnergyResistance ); // Energy
				m_Stream.Write( (short) m.Luck ); // Luck

				IWeapon weapon = m.Weapon;

				int min = 0, max = 0;

				if ( weapon != null )
					weapon.GetStatusDamage( m, out min, out max );

				m_Stream.Write( (short) min ); // Damage min
				m_Stream.Write( (short) max ); // Damage max

				m_Stream.Write( (int) m.TithingPoints );
			}
		}