Example #1
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int      index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= acct.Length)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.NetState != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (RestrictDeletion && DateTime.UtcNow < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.IsPlayer() && Region.Find(m.LogoutLocation, m.LogoutMap).GetRegion(typeof(Jail)) != null)    //Don't need to check current location, if netstate is null, they're logged out
                {
                    state.Send(new DeleteResult(DeleteResultType.BadRequest));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    Utility.PushColor(ConsoleColor.Red);
                    Console.WriteLine("Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);
                    Utility.PopColor();

                    acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                    m.Delete();
                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Example #2
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int      index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= acct.Length)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.NetState != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.AccessLevel == AccessLevel.Player && RestrictDeletion && m is TeiravonMobile && ((TeiravonMobile)m).HasFeat(TeiravonMobile.Feats.WealthyLineage) && DateTime.Now < (m.CreationTime + TimeSpan.FromDays(14.0)))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.AccessLevel == AccessLevel.Player && RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    Console.WriteLine("Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);

                    acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                    m.Delete();
                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Example #3
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            GameClient state = e.State;
            int        index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= acct.Length)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.Client != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    Console.WriteLine("Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);

                    acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                    m.Delete();
                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Example #4
0
        private static void HandleDeleteRequest(DeleteRequestEventArgs e)
        {
            var state = e.State;
            var index = e.Index;

            var acct = state.Account as Account;

            if (acct == null)
            {
                return;
            }

            var m = acct[index] as PlayerMobile;

            if (m != null && !m.Deleted && m.GameTime.TotalHours >= 24)
            {
                try
                {
                    BackupState(m, true);
                }
                catch
                { }
            }
        }
Example #5
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= acct.Length)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.NetState != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (RestrictDeletion && DateTime.UtcNow < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.IsPlayer() && Region.Find(m.LogoutLocation, m.LogoutMap).GetRegion(typeof(Jail)) != null)	//Don't need to check current location, if netstate is null, they're logged out
                {
                    state.Send(new DeleteResult(DeleteResultType.BadRequest));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    Utility.PushColor(ConsoleColor.Red);
                    Console.WriteLine("Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);
                    Utility.PopColor();

                    acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                    m.Delete();
                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Example #6
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int      index = e.Index;

            Account acct = state.Account as Account;

            IPAddress[] accessList = new IPAddress[] {};
            if (acct != null)
            {
                accessList = acct.LoginIPs;
            }

            if (acct == null)
            {
                state.Dispose();
            }

            else if (index < 0 || index >= acct.Length)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                try
                {
                    Mobile       m         = acct[index];
                    IPAddress    ipAddress = state.Address;
                    PlayerMobile pm        = null;
                    if (m != null && m.Player)
                    {
                        pm = (PlayerMobile)m;
                    }
                    if (m == null)
                    {
                        state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                        state.Send(new CharacterListUpdate(acct));
                    }
                    else if (m.NetState != null)
                    {
                        state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                        state.Send(new CharacterListUpdate(acct));
                    }
                    else if (RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
                    {
                        state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                        state.Send(new CharacterListUpdate(acct));
                    }
                    else if (m.AccessLevel == AccessLevel.Player && Region.Find(m.LogoutLocation, m.LogoutMap).GetRegion(typeof(Jail)) != null)              //Don't need to check current location, if netstate is null, they're logged out
                    {
                        state.Send(new DeleteResult(DeleteResultType.BadRequest));
                        state.Send(new CharacterListUpdate(acct));
                    }            /*
                                  * else if ( (pm != null && !pm.AllowDelete) && !Utility.IPMatchClassC(accessList[0], ipAddress))
                                  * {
                                  * Console.WriteLine("Client: {0}: Trying to delete character {1} (0x{2:X})", state, index, m.Serial.Value);
                                  * state.Send(new DeleteResult(DeleteResultType.BadRequest));
                                  * state.Send(new CharacterListUpdate(acct));
                                  * }*/
                    else
                    {
                        Console.WriteLine(@"Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);

                        acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                        m.Delete();
                        state.Send(new CharacterListUpdate(acct));
                    }
                }
                catch
                {
                }
            }
        }
Example #7
0
        private static void EventSink_DeleteRequest(DeleteRequestEventArgs e)
        {
            NetState state = e.State;
            int      index = e.Index;

            Account acct = state.Account as Account;

            if (acct == null)
            {
                state.Dispose();
            }
            else if (index < 0 || index >= 5)
            {
                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                state.Send(new CharacterListUpdate(acct));
            }
            else
            {
                Mobile m = acct[index];

                if (m == null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharNotExist));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (m.NetState != null)
                {
                    state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
                    state.Send(new CharacterListUpdate(acct));
                }
                else if (RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
                {
                    state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
                    state.Send(new CharacterListUpdate(acct));
                }
                else
                {
                    bool bDelete = true;

                    if (m is Server.Mobiles.PlayerMobile)
                    {
                        Server.Mobiles.PlayerMobile  pm     = (Server.Mobiles.PlayerMobile)m;
                        System.Collections.ArrayList houses = Multis.BaseHouse.GetHouses(pm);
                        if (houses.Count > 0)
                        {
                            if (acct.Count > 1)
                            {
                                Mobile newOwner = null;
                                //find a non-deleted, non-null character on the account
                                for (int i = 0; i < acct.Count; i++)
                                {
                                    if (index != i)
                                    {
                                        if (acct[i] != null)
                                        {
                                            if (!acct[i].Deleted)
                                            {
                                                newOwner = acct[i];
                                            }
                                        }
                                    }
                                }

                                if (newOwner == null)                                 //sanity check, should never happen
                                {
                                    System.Console.WriteLine("Sanity check failed: newOwner == null!");
                                    bDelete = false;
                                    state.Send(new DeleteResult(DeleteResultType.BadRequest));
                                }
                                else
                                {
                                    for (int i = 0; i < houses.Count; ++i)
                                    {
                                        if (houses[i] is Server.Multis.BaseHouse)
                                        {
                                            Server.Multis.BaseHouse house = (Server.Multis.BaseHouse)houses[i];
                                            if (house != null)
                                            {
                                                if (house.Owner == m)                                                 //another sanity check - house.Owner should always be m at this point!
                                                {
                                                    //swap to new owner
                                                    house.Owner = newOwner;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                //If account only has one character, then refuse to delete the houseowner
                                bDelete = false;
                                state.Send(new DeleteResult(DeleteResultType.BadRequest));
                            }
                        }
                    }

                    if (bDelete)
                    {
                        Console.WriteLine("Client: {0}: Deleting character {1} (name:{3}) (0x{2:X})", state, index, m.Serial.Value, m.Name);
                        m.Delete();
                    }

                    state.Send(new CharacterListUpdate(acct));
                }
            }
        }
Example #8
0
 public void InvokeDeleteRequest( DeleteRequestEventArgs e )
 {
     if ( DeleteRequest != null )
         DeleteRequest( e );
 }
Example #9
0
		private static void EventSink_DeleteRequest( DeleteRequestEventArgs e )
		{
			NetState state = e.State;
			int index = e.Index;

			Account acct = state.Account as Account;
		    IPAddress[] accessList = new IPAddress[] {};
		    if ( acct != null )
                accessList = acct.LoginIPs;

			if ( acct == null )
			{
				state.Dispose();
			}

			else if ( index < 0 || index >= acct.Length )
			{
				state.Send( new DeleteResult( DeleteResultType.BadRequest ) );
				state.Send( new CharacterListUpdate( acct ) );
			}
			else
			{
			    try
			    {
			        Mobile m = acct[index];
                    IPAddress ipAddress = state.Address;
			        PlayerMobile pm = null;
			        if (m != null && m.Player)
                        pm = (PlayerMobile)m;
			        if (m == null)
			        {
			            state.Send(new DeleteResult(DeleteResultType.CharNotExist));
			            state.Send(new CharacterListUpdate(acct));
			        }
			        else if (m.NetState != null)
			        {
			            state.Send(new DeleteResult(DeleteResultType.CharBeingPlayed));
			            state.Send(new CharacterListUpdate(acct));
			        }
			        else if (RestrictDeletion && DateTime.Now < (m.CreationTime + DeleteDelay))
			        {
			            state.Send(new DeleteResult(DeleteResultType.CharTooYoung));
			            state.Send(new CharacterListUpdate(acct));
			        }
			        else if (m.AccessLevel == AccessLevel.Player && Region.Find(m.LogoutLocation, m.LogoutMap).GetRegion(typeof (Jail)) != null) //Don't need to check current location, if netstate is null, they're logged out
			        {
			            state.Send(new DeleteResult(DeleteResultType.BadRequest));
			            state.Send(new CharacterListUpdate(acct));
			        }/*
                    else if ( (pm != null && !pm.AllowDelete) && !Utility.IPMatchClassC(accessList[0], ipAddress))
                    {
                        Console.WriteLine("Client: {0}: Trying to delete character {1} (0x{2:X})", state, index, m.Serial.Value);
                        state.Send(new DeleteResult(DeleteResultType.BadRequest));
                        state.Send(new CharacterListUpdate(acct));
                    }*/
                    else
                    {
                        Console.WriteLine(@"Client: {0}: Deleting character {1} (0x{2:X})", state, index, m.Serial.Value);

                        acct.Comments.Add(new AccountComment("System", String.Format("Character #{0} {1} deleted by {2}", index + 1, m, state)));

                        m.Delete();
                        state.Send(new CharacterListUpdate(acct));
                    }
			    }
                catch
			    {
			    }
			}
		}
Example #10
0
        private async void Code_DeleteRequested(object sender, DeleteRequestEventArgs e)
        {
            selectedAccount = e.Account;

            await ConfirmDialog.ShowAsync();
        }