Exemplo n.º 1
0
        /// <summary>
        /// Wear an object with optional replacement of existing worn object in
        /// the same location.
        /// 
        /// TODO: Finish NewWearObject, update the wear table with the strings in this
        /// function, and remove this function.
        /// </summary>
        /// <param name="ch"></param>
        /// <param name="obj"></param>
        /// <param name="replaceExisting"></param>
        public static void WearObject(CharData ch, Object obj, bool replaceExisting)
        {
            if (!obj.IsWearableBy(ch))
                return;

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_TAIL)
                    && Macros.IsSet((int)Race.RaceList[ch.GetRace()].BodyParts, (int)Race.Parts.tail))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.tail, replaceExisting))
                    return;
                SocketConnection.Act("You wear $p&n on your &+Ltail&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n wears $p&n on $s &+Ltail&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.tail);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_HORNS)
                    && Macros.IsSet((int)Race.RaceList[ch.GetRace()].BodyParts, (int)Race.Parts.horns))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.horns, replaceExisting))
                    return;
                SocketConnection.Act("You wear $p&n on your &+Whorns&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n wears $p&n on $s &+Whorns&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.horns);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_EYES))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.eyes, replaceExisting))
                    return;
                SocketConnection.Act("You place $p&n over your eyes.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n places $p&n over $s eyes.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.eyes);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_FINGER) && ch.GetRace() != Race.RACE_THRIKREEN)
            {
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.finger_left)
                        && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.finger_right)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.finger_left, replaceExisting)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.finger_right, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.finger_left))
                {
                    SocketConnection.Act("You slip $p&n onto a finger of your left hand.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n slips $p&n onto a finger of $s left hand.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.finger_left);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.finger_right))
                {
                    SocketConnection.Act("You slide $p&n onto a finger of your right hand.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n slides $p&n onto a finger of $s right hand.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.finger_right);
                    return;
                }

                Log.Error("Object.WearObject: no free finger.", 0);
                ch.SendText("Anymore rings and you would severly hinder finger movement.\r\n");
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_NECK))
            {
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.neck_one)
                        && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.neck_two)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.neck_one, replaceExisting)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.neck_two, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.neck_one))
                {
                    SocketConnection.Act("You place $p&n around your neck.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n around $s neck.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.neck_one);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.neck_two))
                {
                    SocketConnection.Act("You wear $p&n around your neck.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n places $p&n around $s neck.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.neck_two);
                    return;
                }

                Log.Error("Object.WearObject: no free neck.", 0);
                ch.SendText("You can't fit anything else around your neck.\r\n");
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_BODY) && ch.GetRace() != Race.RACE_THRIKREEN)
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.body, replaceExisting))
                    return;
                SocketConnection.Act("You slide your body into $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n wears $p&n on $s body.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.body);
                return;
            }
            // Added check for mino and head gear prevention due to horns
            if (obj.HasWearFlag(ObjTemplate.WEARABLE_HEAD))
            {
                if (ch.GetRace() != Race.RACE_MINOTAUR)
                {
                    if (!ch.RemoveObject(ObjTemplate.WearLocation.head, replaceExisting))
                        return;
                    SocketConnection.Act("You don $p&n on your head.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n places $p&n on $s head.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.head);
                    return;
                }
                SocketConnection.Act("Your &+Lhorns&n prevent you from wearing $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n foolishly attempts to place $p&n on over $s &+Lhorns&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_LEGS)
                    && ch.GetRace() != Race.RACE_CENTAUR)
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.legs, replaceExisting))
                    return;
                SocketConnection.Act("You pull $p&n onto your legs.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n slides $s legs into $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.legs);
                return;
            }

            // Added Minotaur to the Following ObjIndex.WEARABLE_FEET check
            // Check some over the syntax, Vey, if you wouldn't mind.
            if (obj.HasWearFlag(ObjTemplate.WEARABLE_FEET))
            {
                if (ch.GetRace() != Race.RACE_CENTAUR && ch.GetRace() != Race.RACE_MINOTAUR && ch.GetRace() != Race.RACE_THRIKREEN)
                {
                    if (!ch.RemoveObject(ObjTemplate.WearLocation.feet, replaceExisting))
                        return;
                    SocketConnection.Act("You wear $p&n on your feet.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n on $s feet.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.feet);
                    return;
                }
                if (ch.GetRace() != Race.RACE_THRIKREEN)
                {
                    SocketConnection.Act("Your &+Lhooves&n prevent you from wearing $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n foolishly attempts to place $p&n on $s &+Lhooves&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                    return;
                }
                SocketConnection.Act("Your underdeveloped feet prevent you from wearing $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n foolishly attempts to place $p&n on $s feet.", ch, obj, null, SocketConnection.MessageTarget.room);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_HANDS))
            {
                if (ch.GetRace() != Race.RACE_THRIKREEN)
                {
                    if (!ch.RemoveObject(ObjTemplate.WearLocation.hands, replaceExisting))
                        return;
                    SocketConnection.Act("You wear $p&n on your hands.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n pulls $p&n onto $s hands.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.hands);
                    return;
                }
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.hands)
                    && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.hands_lower)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.hands, replaceExisting)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.hands_lower, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.hands))
                {
                    SocketConnection.Act("You wear $p&n on your hands.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n pulls $p&n onto $s hands.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.hands);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.hands_lower))
                {
                    SocketConnection.Act("You wear $p&n on your hands.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n pulls $p&n onto $s hands.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.hands_lower);
                    return;
                }
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_ARMS))
            {
                if (ch.GetRace() != Race.RACE_THRIKREEN)
                {
                    if (!ch.RemoveObject(ObjTemplate.WearLocation.arms, replaceExisting))
                        return;
                    SocketConnection.Act("You slip your arms into $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n slides $p&n over $s arms.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.arms);
                    return;
                }
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.arms)
                    && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.arms_lower)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.arms, replaceExisting)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.arms_lower, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.arms))
                {
                    SocketConnection.Act("You slip your arms into $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n slides $p&n over $s arms.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.arms);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.arms_lower))
                {
                    SocketConnection.Act("You slip your arms into $p&n.", ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n slides $p&n over $s arms.", ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.arms_lower);
                    return;
                }

                Log.Error("WearObject: no free ear.", 0);
                ch.SendText("You already wear an earring in each ear.\r\n");
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_ONBACK))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.on_back, replaceExisting))
                    return;
                SocketConnection.Act("You strap $p&n to your back.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n straps $p&n to $s back.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.on_back);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_QUIVER))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.quiver, replaceExisting))
                    return;
                SocketConnection.Act("You adjust $p&n across your shoulders.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n straps $p&n across $s shoulders.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.quiver);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_ABOUT))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.about_body, replaceExisting))
                    return;
                SocketConnection.Act("You drape $p&n about your body.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n wraps $p&n about $s body.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.about_body);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_WAIST))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.waist, replaceExisting))
                    return;
                SocketConnection.Act("You secure $p&n about your waist.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n secures $p&n about $s waist.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.waist);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_FACE))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.face, replaceExisting))
                    return;
                SocketConnection.Act("You place $p&n over your face.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n covers $s his face with $p&n.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.face);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_BADGE))
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.badge, replaceExisting))
                    return;
                SocketConnection.Act("You pin $p&n over your right breast.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n pins $p&n over $s right breast.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.badge);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_WRIST))
            {
                if (ch.GetRace() != Race.RACE_THRIKREEN)
                {
                    if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_left)
                            && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_right)
                            && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_left, replaceExisting)
                            && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_right, replaceExisting))
                        return;

                    if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_left))
                    {
                        SocketConnection.Act("You wear $p&n around your left wrist.",
                             ch, obj, null, SocketConnection.MessageTarget.character);
                        SocketConnection.Act("$n&n wears $p&n around $s left wrist.",
                             ch, obj, null, SocketConnection.MessageTarget.room);
                        ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_left);
                        return;
                    }

                    if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_right))
                    {
                        SocketConnection.Act("You wear $p&n about your right wrist.",
                             ch, obj, null, SocketConnection.MessageTarget.character);
                        SocketConnection.Act("$n&n wears $p&n about $s right wrist.",
                             ch, obj, null, SocketConnection.MessageTarget.room);
                        ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_right);
                        return;
                    }

                    Log.Error("Object.WearObject: no free wrist.", 0);
                    ch.SendText("You already wear something upon both wrists.\r\n");
                    return;
                }
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_left)
                    && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_right)
                    && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_lower_left)
                    && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_lower_right)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_left, replaceExisting)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_right, replaceExisting)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_lower_left, replaceExisting)
                    && !ch.RemoveObject(ObjTemplate.WearLocation.wrist_lower_right, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_left))
                {
                    SocketConnection.Act("You wear $p&n around your left wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n around $s left wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_left);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_right))
                {
                    SocketConnection.Act("You wear $p&n about your right wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n about $s right wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_right);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_lower_left))
                {
                    SocketConnection.Act("You wear $p&n around your lower left wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n around $s lower left wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_lower_left);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.wrist_lower_right))
                {
                    SocketConnection.Act("You wear $p&n about your lower right wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n about $s lower right wrist.",
                                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.wrist_lower_right);
                    return;
                }

                Log.Error("Object.WearObject: no free wrist.", 0);
                ch.SendText("You already wear something upon all four wrists.\r\n");
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_EAR) && ch.GetRace() != Race.RACE_THRIKREEN)
            {
                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.ear_left)
                        && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.ear_right)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.ear_left, replaceExisting)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.ear_right, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.ear_left))
                {
                    SocketConnection.Act("You wear $p&n in your left ear.",
                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n hangs $p&n from $s left ear.",
                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.ear_left);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.ear_right))
                {
                    SocketConnection.Act("You hang $p&n from your right ear.",
                         ch, obj, null, SocketConnection.MessageTarget.character);
                    SocketConnection.Act("$n&n wears $p&n in $s right ear.",
                         ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.ear_right);
                    return;
                }

                Log.Error("Object.WearObject: no free ear.", 0);
                ch.SendText("You already wear an earring in each ear.\r\n");
                return;
            }

            // Moved these before belt check so as to avoid weapons flagged both
            // wieldable and wear_belt from defaulting to belt position

            // The following code looks way to repetitive, leading one
            // to believe it can be highly optimized.
            if (obj._itemType == ObjTemplate.ObjectType.light)
            {
                EquipInHand(ch, obj, EQUIP_LIGHT);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_WIELD) && obj._itemType == ObjTemplate.ObjectType.weapon)
            {
                EquipInHand(ch, obj, EQUIP_WIELD);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_SHIELD))
            {
                EquipInHand(ch, obj, EQUIP_SHIELD);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_HOLD))
            {
                EquipInHand(ch, obj, EQUIP_HOLD);
                return;
            }

            // Only two belt slots for now, should be three.
            if (obj.HasWearFlag(ObjTemplate.WEARABLE_ATTACH_BELT))
            {
                Object obj2;
                string text;

                if (!(obj2 = GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.waist)))
                {
                    ch.SendText("You don't have a &n&+ybelt&n to attach it to.\r\n");
                    return;
                }

                if (GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.belt_attach_one)
                        && GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.belt_attach_two)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.belt_attach_one, replaceExisting)
                        && !ch.RemoveObject(ObjTemplate.WearLocation.belt_attach_two, replaceExisting))
                    return;

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.belt_attach_one))
                {
                    text = String.Format("You attach $p&n to {0}&n.", obj2._shortDescription);
                    SocketConnection.Act(text, ch, obj, null, SocketConnection.MessageTarget.character);
                    text = String.Format("$n&n attaches $p&n to {0}&n.", obj2._shortDescription);
                    SocketConnection.Act(text, ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.belt_attach_one);
                    return;
                }

                if (!GetEquipmentOnCharacter(ch, ObjTemplate.WearLocation.belt_attach_two))
                {
                    text = String.Format("You attach $p&n to {0}&n.", obj2._shortDescription);
                    SocketConnection.Act(text, ch, obj, null, SocketConnection.MessageTarget.character);
                    text = String.Format("$n&n attaches $p&n to {0}&n.", obj2._shortDescription);
                    SocketConnection.Act(text, ch, obj, null, SocketConnection.MessageTarget.room);
                    ch.EquipObject(ref obj, ObjTemplate.WearLocation.belt_attach_two);
                    return;
                }

                Log.Error("Wear_obj: no free belt slot.", 0);
                ch.SendText("Your &n&+ybelt&n is already full.\r\n");
                return;
            }

            /* This will be fixed when we have something better to check against. */
            if (obj.HasWearFlag(ObjTemplate.WEARABLE_HORSE_BODY)
                    && ch.GetRace() == Race.RACE_CENTAUR)
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.horse_body, replaceExisting))
                    return;
                SocketConnection.Act("You strap $p&n onto your body.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n straps $p&n onto $s body.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.horse_body);
                return;
            }

            if (obj.HasWearFlag(ObjTemplate.WEARABLE_NOSE) && ch.GetRace() == Race.RACE_MINOTAUR)
            {
                if (!ch.RemoveObject(ObjTemplate.WearLocation.nose, replaceExisting))
                    return;
                SocketConnection.Act("You attach $p&n to your nose.", ch, obj, null, SocketConnection.MessageTarget.character);
                SocketConnection.Act("$n&n wears $p&n in $s nose.", ch, obj, null, SocketConnection.MessageTarget.room);
                ch.EquipObject(ref obj, ObjTemplate.WearLocation.nose);
                return;
            }

            if (replaceExisting)
                ch.SendText("You can't wear, wield, or hold that.\r\n");

            return;
        }