예제 #1
0
        public static void ProcessResponse( Mobile from, BaseHouse house, int type, int index, ArrayList vendorList, HouseGumpPage page )
        {
            if ( house.Deleted )
                return;

            bool isCombatRestricted = house.IsCombatRestricted( from );

            bool isOwner = house.IsOwner( from );
            bool isCoOwner = isOwner || house.IsCoOwner( from );
            bool isFriend = isCoOwner || house.IsFriend( from );

            if ( isCombatRestricted )
                isFriend = isCoOwner = isFriend = false;

            if ( !from.CheckAlive() )
                return;

            Item sign = house.Sign;

            if ( sign == null || from.Map != sign.Map || !from.InRange( sign.GetWorldLocation(), 18 ) )
                return;

            HouseFoundation foundation = house as HouseFoundation;
            bool isCustomizable = ( foundation != null );

            if ( page == HouseGumpPage.Vendors )
            {
                if ( index >= 0 && index < vendorList.Count )
                {
                    PlayerVendor vendor = (PlayerVendor) vendorList[index];

                    if ( !vendor.CanInteractWith( from, false ) )
                        return;

                    if ( from.Map != sign.Map || !from.InRange( sign, 5 ) )
                        from.SendLocalizedMessage( 1062429 ); // You must be within five paces of the house sign to use this option.
                    else if ( vendor.IsOwner( from ) )
                        vendor.SendOwnerGump( from );
                    else
                        vendor.OpenBackpack( from );
                }

                return;
            }

            if ( !isFriend )
                return;

            switch ( type )
            {
                case 0:
                    {
                        switch ( index )
                        {
                            case 0: // Banish
                                {
                                    if ( house.Public )
                                    {
                                        from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house.
                                        from.Target = new HouseBanTarget( true, house );
                                    }

                                    break;
                                }
                            case 1: // Lift Ban
                                {
                                    if ( house.Public )
                                        from.SendGump( new HouseGump( HouseGumpPage.RemoveBan, from, house ) );

                                    break;
                                }
                            case 2: // Grant Access
                                {
                                    if ( !house.Public )
                                    {
                                        from.SendLocalizedMessage( 1060711 ); // Target the person you would like to grant access to.
                                        from.Target = new HouseAccessTarget( house );
                                    }

                                    break;
                                }
                            case 3: // Revoke Access
                                {
                                    if ( !house.Public )
                                        from.SendGump( new HouseGump( HouseGumpPage.RemoveAccess, from, house ) );

                                    break;
                                }
                        }

                        break;
                    }
                case 1:
                    {
                        HouseGumpPage gpage;

                        switch ( index )
                        {
                            case 0:
                                gpage = HouseGumpPage.Information;
                                break;
                            case 1:
                                gpage = HouseGumpPage.Security;
                                break;
                            case 2:
                                gpage = HouseGumpPage.Storage;
                                break;
                            case 3:
                                gpage = HouseGumpPage.Customize;
                                break;
                            case 4:
                                gpage = HouseGumpPage.Ownership;
                                break;
                            default:
                                return;
                        }

                        from.SendGump( new HouseGump( gpage, from, house ) );
                        break;
                    }
                case 3:
                    {
                        switch ( index )
                        {
                            case 0: // View Co-Owner List
                                {
                                    if ( isCoOwner )
                                        from.SendGump( new HouseGump( HouseGumpPage.ListCoOwner, from, house ) );

                                    break;
                                }
                            case 1: // Add a Co-Owner
                                {
                                    if ( isOwner )
                                    {
                                        from.SendLocalizedMessage( 501328 ); // Target the person you wish to name a co-owner of your household.
                                        from.Target = new CoOwnerTarget( true, house );
                                    }

                                    break;
                                }
                            case 2: // Remove a Co-Owner
                                {
                                    if ( isOwner )
                                        from.SendGump( new HouseGump( HouseGumpPage.RemoveCoOwner, from, house ) );

                                    break;
                                }
                            case 3: // Clear Co-Owner List
                                {
                                    if ( isOwner )
                                        from.SendGump( new WarningGump( 1060635, 30720, 1060736, 32512, 420, 280, new WarningGumpCallback( ClearCoOwners_Callback ), house ) );

                                    break;
                                }
                            case 4: // View Friends List
                                {
                                    from.SendGump( new HouseGump( HouseGumpPage.ListFriend, from, house ) );

                                    break;
                                }
                            case 5: // Add a Friend
                                {
                                    if ( isCoOwner )
                                    {
                                        from.SendLocalizedMessage( 501317 ); // Target the person you wish to name a friend of your household.
                                        from.Target = new HouseFriendTarget( true, house );
                                    }

                                    break;
                                }
                            case 6: // Remove a Friend
                                {
                                    if ( isCoOwner )
                                        from.SendGump( new HouseGump( HouseGumpPage.RemoveFriend, from, house ) );

                                    break;
                                }
                            case 7: // Clear Friend List
                                {
                                    if ( isCoOwner )
                                        from.SendGump( new WarningGump( 1060635, 30720, 1018039, 32512, 420, 280, new WarningGumpCallback( ClearFriends_Callback ), house ) );

                                    break;
                                }
                            case 8: // View Ban List
                                {
                                    from.SendGump( new HouseGump( HouseGumpPage.ListBan, from, house ) );

                                    break;
                                }
                            case 9: // Clear Ban List
                                {
                                    from.SendGump( new WarningGump( 1060635, 30720, 1060753, 32512, 420, 280, new WarningGumpCallback( ClearBans_Callback ), house ) );

                                    break;
                                }
                            case 10: // View Access List
                                {
                                    from.SendGump( new HouseGump( HouseGumpPage.ListAccess, from, house ) );

                                    break;
                                }
                            case 11: // Clear Access List
                                {
                                    from.SendGump( new WarningGump( 1060635, 30720, 1061842, 32512, 420, 280, new WarningGumpCallback( ClearAccess_Callback ), house ) );

                                    break;
                                }
                            case 12: // Make Private
                                {
                                    if ( isOwner )
                                    {
                                        if ( house.PlayerVendors.Count > 0 )
                                        {
                                            // You have vendors working out of this building. It cannot be declared private until there are no vendors in place.
                                            from.SendGump( new NoticeGump( 1060637, 30720, 501887, 32512, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), house ) );
                                            break;
                                        }

                                        if ( house.VendorRentalContracts.Count > 0 )
                                        {
                                            // You cannot currently take this action because you have vendor contracts locked down in your home.  You must remove them first.
                                            from.SendGump( new NoticeGump( 1060637, 30720, 1062351, 32512, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), house ) );
                                            break;
                                        }

                                        house.Public = false;

                                        house.ChangeLocks( from );

                                        // This house is now private.
                                        from.SendGump( new NoticeGump( 1060637, 30720, 501888, 32512, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), house ) );

                                        Region r = house.Region;
                                        List<Mobile> list = r.GetMobiles();

                                        for ( int i = 0; i < list.Count; ++i )
                                        {
                                            Mobile m = list[i];

                                            if ( !house.HasAccess( m ) && house.IsInside( m ) )
                                                m.Location = house.BanLocation;
                                        }
                                    }

                                    break;
                                }
                            case 13: // Make Public
                                {
                                    if ( isOwner )
                                    {
                                        house.Public = true;

                                        house.RemoveKeys( from );
                                        house.RemoveLocks();

                                        // This house is now public. The owner may now place vendors and vendor rental contracts.
                                        from.SendGump( new NoticeGump( 1060637, 30720, 501886, 32512, 320, 180, new NoticeGumpCallback( PublicPrivateNotice_Callback ), house ) );

                                        Region r = house.Region;
                                        List<Mobile> list = r.GetMobiles();

                                        for ( int i = 0; i < list.Count; ++i )
                                        {
                                            Mobile m = list[i];

                                            if ( house.IsBanned( m ) && house.IsInside( m ) )
                                                m.Location = house.BanLocation;
                                        }
                                    }

                                    break;
                                }
                        }

                        break;
                    }
                case 5:
                    {
                        switch ( index )
                        {
                            case 0: // Convert Into Customizable House
                                {
                                    if ( isOwner && !isCustomizable )
                                    {
                                        if ( house.HasRentedVendors )
                                        {
                                            // You cannot perform this action while you still have vendors rented out in this house.
                                            from.SendGump( new NoticeGump( 1060637, 30720, 1062395, 32512, 320, 180, new NoticeGumpCallback( CustomizeNotice_Callback ), house ) );
                                        }
                                        else
                                        {
                                            HousePlacementEntry e = house.ConvertEntry;

                                            if ( e != null )
                                            {
                                                /* You are about to turn your house into a customizable house.
                                                * You will be refunded the value of this house, and then be charged the cost of the equivalent customizable dirt lot.
                                                * All of your possessions in the house will be transported to a Moving Crate.
                                                * Deed-based house add-ons will be converted back into deeds.
                                                * Vendors and barkeeps will also be stored in the Moving Crate.
                                                * Your house will be leveled to its foundation, and you will be able to build new walls, windows, doors, and stairs.
                                                * Are you sure you wish to continue?
                                                */
                                                from.SendGump( new WarningGump( 1060635, 30720, 1060013, 32512, 420, 280, new WarningGumpCallback( ConvertHouse_Callback ), house ) );
                                            }
                                        }
                                    }

                                    break;
                                }
                            case 1: // Customize This House
                                {
                                    if ( isOwner && isCustomizable )
                                    {
                                        if ( house.HasRentedVendors )
                                        {
                                            // You cannot perform this action while you still have vendors rented out in this house.
                                            from.SendGump( new NoticeGump( 1060637, 30720, 1062395, 32512, 320, 180, new NoticeGumpCallback( CustomizeNotice_Callback ), house ) );
                                        }
                                        else
                                        {
                                            foundation.BeginCustomize( from );
                                        }
                                    }

                                    break;
                                }
                            case 2: // Relocate Moving Crate
                                {
                                    MovingCrate crate = house.MovingCrate;

                                    if ( isOwner && crate != null )
                                    {
                                        if ( !house.IsInside( from ) )
                                        {
                                            from.SendLocalizedMessage( 502092 ); // You must be in your house to do this.
                                        }
                                        else
                                        {
                                            crate.MoveToWorld( from.Location, from.Map );
                                            crate.RestartTimer();
                                        }
                                    }

                                    break;
                                }
                            case 3: // Change House Sign
                                {
                                    if ( isOwner && house.Public )
                                        from.SendGump( new HouseGump( HouseGumpPage.ChangeSign, from, house ) );

                                    break;
                                }
                            case 4: // Change House Sign Hanger
                                {
                                    if ( isOwner && isCustomizable )
                                        from.SendGump( new HouseGump( HouseGumpPage.ChangeHanger, from, house ) );

                                    break;
                                }
                            case 5: // Change Signpost
                                {
                                    if ( isOwner && isCustomizable && foundation.Signpost != null )
                                        from.SendGump( new HouseGump( HouseGumpPage.ChangePost, from, house ) );

                                    break;
                                }
                            case 6: // Change Foundation Style
                                {
                                    if ( isOwner && isCustomizable )
                                        from.SendGump( new HouseGump( HouseGumpPage.ChangeFoundation, from, house ) );

                                    break;
                                }
                            case 7: // Rename House
                                {
                                    if ( isCoOwner )
                                        from.Prompt = new RenamePrompt( house );

                                    break;
                                }
                        }

                        break;
                    }
                case 6:
                    {
                        switch ( index )
                        {
                            case 0: // Demolish
                                {
                                    if ( isOwner && house.MovingCrate == null )
                                    {
                                        if ( house.FindGuildstone() != null )
                                            from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
                                        else
                                            from.SendGump( new HouseDemolishGump( from, house ) );
                                    }

                                    break;
                                }
                            case 1: // Trade House
                                {
                                    if ( isOwner )
                                    {
                                        if ( house.HasPersonalVendors )
                                        {
                                            from.SendLocalizedMessage( 1062467 ); // You cannot trade this house while you still have personal vendors inside.
                                        }
                                        else if ( house.DecayLevel == DecayLevel.DemolitionPending )
                                        {
                                            from.SendLocalizedMessage( 1005321 ); // This house has been marked for demolition, and it cannot be transferred.
                                        }
                                        else
                                        {
                                            from.SendLocalizedMessage( 501309 ); // Target the person to whom you wish to give this house.
                                            from.Target = new HouseOwnerTarget( house );
                                        }
                                    }

                                    break;
                                }
                            case 2: // Make Primary
                                {
                                    break;
                                }
                        }

                        break;
                    }
                case 7:
                    {
                        if ( isOwner && isCustomizable && index >= 0 && index < m_HangerNumbers.Length )
                        {
                            Item hanger = foundation.SignHanger;

                            if ( hanger != null )
                                hanger.ItemID = m_HangerNumbers[index];

                            from.SendGump( new HouseGump( HouseGumpPage.Customize, from, house ) );
                        }

                        break;
                    }
                case 8:
                    {
                        if ( isOwner && isCustomizable )
                        {
                            FoundationType newType;

                            switch ( index )
                            {
                                case 0:
                                    newType = FoundationType.DarkWood;
                                    break;
                                case 1:
                                    newType = FoundationType.LightWood;
                                    break;
                                case 2:
                                    newType = FoundationType.Dungeon;
                                    break;
                                case 3:
                                    newType = FoundationType.Brick;
                                    break;
                                case 4:
                                    newType = FoundationType.Stone;
                                    break;
                                case 5:
                                    newType = FoundationType.ElvenStone;
                                    break;
                                case 6:
                                    newType = FoundationType.ElvenWood;
                                    break;
                                case 7:
                                    newType = FoundationType.ElvenSimple;
                                    break;
                                case 8:
                                    newType = FoundationType.ElvenPlain;
                                    break;
                                case 9:
                                    newType = FoundationType.Crystal;
                                    break;
                                case 10:
                                    newType = FoundationType.Shadow;
                                    break;
                                case 11:
                                    newType = FoundationType.GargishGreenMarble;
                                    break;
                                case 12:
                                    newType = FoundationType.GargishTwoToneStone;
                                    break;
                                default:
                                    return;
                            }

                            foundation.Type = newType;

                            DesignState state = foundation.BackupState;
                            HouseFoundation.ApplyFoundation( newType, state.Components );
                            state.OnRevised();

                            state = foundation.DesignState;
                            HouseFoundation.ApplyFoundation( newType, state.Components );
                            state.OnRevised();

                            state = foundation.CurrentState;
                            HouseFoundation.ApplyFoundation( newType, state.Components );
                            state.OnRevised();

                            foundation.Delta( ItemDelta.Update );

                            from.SendGump( new HouseGump( HouseGumpPage.Customize, from, house ) );
                        }

                        break;
                    }
                case 9:
                    {
                        if ( isOwner && house.Public && index >= 0 && index < 54 )
                        {
                            house.ChangeSignType( 2980 + ( index * 2 ) );
                            from.SendGump( new HouseGump( HouseGumpPage.Customize, from, house ) );
                        }

                        break;
                    }
                case 10:
                    {
                        if ( isOwner && vendorList != null && index >= 0 && index < vendorList.Count )
                        {
                            house.RemoveCoOwner( from, (Mobile) vendorList[index] );

                            if ( house.CoOwners.Count > 0 )
                                from.SendGump( new HouseGump( HouseGumpPage.RemoveCoOwner, from, house ) );
                            else
                                from.SendGump( new HouseGump( HouseGumpPage.Security, from, house ) );
                        }

                        break;
                    }
                case 11:
                    {
                        if ( isCoOwner && vendorList != null && index >= 0 && index < vendorList.Count )
                        {
                            house.RemoveFriend( from, (Mobile) vendorList[index] );

                            if ( house.Friends.Count > 0 )
                                from.SendGump( new HouseGump( HouseGumpPage.RemoveFriend, from, house ) );
                            else
                                from.SendGump( new HouseGump( HouseGumpPage.Security, from, house ) );
                        }

                        break;
                    }
                case 12:
                    {
                        if ( vendorList != null && index >= 0 && index < vendorList.Count )
                        {
                            house.RemoveBan( from, (Mobile) vendorList[index] );

                            if ( house.Bans.Count > 0 )
                                from.SendGump( new HouseGump( HouseGumpPage.RemoveBan, from, house ) );
                            else
                                from.SendGump( new HouseGump( HouseGumpPage.Security, from, house ) );
                        }

                        break;
                    }
                case 13:
                    {
                        if ( vendorList != null && index >= 0 && index < vendorList.Count )
                        {
                            house.RemoveAccess( from, (Mobile) vendorList[index] );

                            if ( house.Access.Count > 0 )
                                from.SendGump( new HouseGump( HouseGumpPage.RemoveAccess, from, house ) );
                            else
                                from.SendGump( new HouseGump( HouseGumpPage.Security, from, house ) );
                        }

                        break;
                    }
                case 14:
                    {
                        if ( isOwner && isCustomizable && index >= 0 && index < m_PostNumbers.Length )
                        {
                            foundation.SignpostGraphic = m_PostNumbers[index];
                            foundation.CheckSignpost();

                            from.SendGump( new HouseGump( HouseGumpPage.Customize, from, house ) );
                        }

                        break;
                    }
            }
        }