RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Neat Looking Save Gump

sirens song

Wanderer
Neat Looking Save Gump

Not really a script, more like a piece of art, But I thought someone might like it.

Replace your SaveGump.cs with this.
Code:
using System;
using Server;
using Server.Gumps;

namespace Server.Gumps
	{
	public class SaveGump : Gump
		{
		public SaveGump() : base( 200, 200 )
			{
			this.Closable=true;
			this.Disposable=true;
			this.Dragable=true;
			this.Resizable=false;
			this.AddPage(0);
			this.AddBackground(223, 157, 293, 156, 9200);
			this.AddImage(232, 166, 7013);
			this.AddImage(300, 166, 7012);
			this.AddImage(368, 166, 7009);
			this.AddImage(436, 166, 7037);
			this.AddImage(232, 234, 7053);
			this.AddImage(300, 234, 7059);
			this.AddImage(436, 234, 7040);
			this.AddImage(368, 234, 7024);
			this.AddLabel(297, 158, 1173, @"Some Shard Name");
			this.AddLabel(305, 177, 1287, @"Server is Now Saving");
			this.AddImage(413, 218, 5582);
			this.AddImage(236, 200, 103);
			this.AddLabel(258, 204, 1454, @"Due to the large");
			this.AddLabel(259, 220, 1454, @"amount of world");
			this.AddLabel(252, 238, 1454, @"data. This process");
			this.AddLabel(264, 255, 1454, @"may take up to");
			this.AddLabel(260, 274, 1454, @"several seconds ");
			this.AddImage(451, 268, 1209);
			this.AddImage(461, 260, 1209);
			this.AddImage(468, 236, 1209);
			this.AddImage(468, 249, 1209);
			this.AddImage(437, 272, 1209);
			this.AddImage(425, 269, 1209);
			this.AddImage(406, 250, 1209);
			this.AddImage(450, 213, 1209);
			this.AddImage(413, 262, 1209);
			this.AddImage(461, 223, 1209);
			this.AddImage(411, 223, 1209);
			this.AddImage(405, 235, 1209);
			this.AddImage(422, 214, 1209);
			this.AddImage(436, 212, 1209);
			this.AddLabel(386, 294, 1169, @"-Generic Name Here");
		}
	}
}

Here is a screenshot if you would like one.


*blurred out shard name*
-Jamie
 

Revolution

Wanderer
great gump, but plz don't do that silly colored writting again. Ppl are taking some bad conclusions about u... hehehe :) I'm joking
 
I want to use this save gump. but i am having 1 problem. I have searched and searched for the save gump. i can't seem to find it. Is it in the Runuo 1.0 folder or the UO 2D folder?
 

sirens song

Wanderer
Its in the Runuo scripts folder, You have to actually call the gump though, So replace your AutoSave.cs with this modified distro one.
Code:
using System;
using System.Reflection; 
using System.Collections; 
using System.IO;
using Server;
using Server.Network; 
using Server.Items; 
using Server.Mobiles; 
using Server.Misc; 
using Server.Accounting; 
using Server.Gumps;

namespace Server.Misc
{
	public class AutoSave : Timer
	{
		private static TimeSpan m_Delay = TimeSpan.FromMinutes( 60.0 );
		private static TimeSpan m_Warning = TimeSpan.Zero;
		//private static TimeSpan m_Warning = TimeSpan.FromSeconds( 60.0 );

		public static void Initialize()
		{
			new AutoSave().Start();
			Commands.Register( "SetSaves", AccessLevel.Administrator, new CommandEventHandler( SetSaves_OnCommand ) );
		}

		private static bool m_SavesEnabled = true;

		public static bool SavesEnabled
		{
			get{ return m_SavesEnabled; }
			set{ m_SavesEnabled = value; }
		}

		[Usage( "SetSaves <true | false>" )]
		[Description( "Enables or disables automatic shard saving." )]
		public static void SetSaves_OnCommand( CommandEventArgs e )
		{
			if ( e.Length == 1 )
			{
				m_SavesEnabled = e.GetBoolean( 0 );
				e.Mobile.SendMessage( "Saves have been {0}.", m_SavesEnabled ? "enabled" : "disabled" );
			}
			else
			{
				e.Mobile.SendMessage( "Format: SetSaves <true | false>" );
			}
		}

		public AutoSave() : base( m_Delay - m_Warning, m_Delay )
		{
			Priority = TimerPriority.OneMinute;
		}

		protected override void OnTick()
		{
			if ( !m_SavesEnabled || AutoRestart.Restarting )
				return;

			if ( m_Warning == TimeSpan.Zero )
			{
				Save();
			}
			else
			{
				int s = (int)m_Warning.TotalSeconds;
				int m = s / 60;
				s %= 60;

				if ( m > 0 && s > 0 )
					World.Broadcast( 0x35, true, "The world will save in {0} minute{1} and {2} second{3}.", m, m != 1 ? "s" : "", s, s != 1 ? "s" : "" );
				else if ( m > 0 )
					World.Broadcast( 0x35, true, "The world will save in {0} minute{1}.", m, m != 1 ? "s" : "" );
				else
					World.Broadcast( 0x35, true, "The world will save in {0} second{1}.", s, s != 1 ? "s" : "" );

				Timer.DelayCall( m_Warning, new TimerCallback( Save ) );
			}
		}

		public static void Save()
		{
			ArrayList mobs = new ArrayList( World.Mobiles.Values ); 

			if ( AutoRestart.Restarting )
				return;

			try{ Backup(); }
			catch{}

			foreach ( Mobile m in mobs ) 
			{
				m.SendGump ( new SaveGump() );
			}
			World.Save(false);
			foreach ( Mobile m in mobs ) 
			{
				m.CloseGump( typeof(SaveGump) );
			}

		}

		private static string[] m_Backups = new string[]
			{
				"Third Backup",
				"Second Backup",
				"Most Recent"
			};

		private static void Backup()
		{
			if ( m_Backups.Length == 0 )
				return;

			string root = Path.Combine( Core.BaseDirectory, "Backups\\Automatic" );

			if ( !Directory.Exists( root ) )
				Directory.CreateDirectory( root );

			string[] existing = Directory.GetDirectories( root );

			for ( int i = 0; i < m_Backups.Length; ++i )
			{
				DirectoryInfo dir = Match( existing, m_Backups[i] );

				if ( dir == null )
					continue;

				if ( i > 0 )
				{
					string timeStamp = FindTimeStamp( dir.Name );

					if ( timeStamp != null )
					{
						try{ dir.MoveTo( FormatDirectory( root, m_Backups[i - 1], timeStamp ) ); }
						catch{}
					}
				}
				else
				{
					try{ dir.Delete( true ); }
					catch{}
				}
			}

			string saves = Path.Combine( Core.BaseDirectory, "Saves" );

			if ( Directory.Exists( saves ) )
				Directory.Move( saves, FormatDirectory( root, m_Backups[m_Backups.Length - 1], GetTimeStamp() ) );
		}

		private static DirectoryInfo Match( string[] paths, string match )
		{
			for ( int i = 0; i < paths.Length; ++i )
			{
				DirectoryInfo info = new DirectoryInfo( paths[i] );

				if ( info.Name.StartsWith( match ) )
					return info;
			}

			return null;
		}

		private static string FormatDirectory( string root, string name, string timeStamp )
		{
			return Path.Combine( root, String.Format( "{0} ({1})", name, timeStamp ) );
		}

		private static string FindTimeStamp( string input )
		{
			int start = input.IndexOf( '(' );

			if ( start >= 0 )
			{
				int end = input.IndexOf( ')', ++start );

				if ( end >= start )
					return input.Substring( start, end-start );
			}

			return null;
		}

		private static string GetTimeStamp()
		{
			DateTime now = DateTime.Now;

			return String.Format( "{0}-{1}-{2} {3}-{4:D2}-{5:D2}",
					now.Day,
					now.Month,
					now.Year,
					now.Hour,
					now.Minute,
					now.Second
				);
		}
	}
}
Then place the actual gump file anywhere in your script folder.
 
ok... i went in to the AutoSave.cs i deleted everything that was in that .cs file and replaced it with what you had given me... Do i rename it? or leave it at the same name?

Then what do i do with the SaveGump.cs?

Sorry to be such a pain in the *** ... LOL.. but thanx for taking the time to help me out!
 

Alari

Wanderer
PHP:
World.Save(false);

What's the "false" for?

I don't mind the colored writing btw. ;) You can do the whole script in nice colors if you use php blocks instead of code blocks, btw. :cool: (I'm sure everyone else will thank me for telling you)
 

sirens song

Wanderer
Im not sure where that autosave came from, I do not claim to have nor did I write it. But I would assume the method save in class world needs an argument. So they just tossed in false?? I havnt actually looked into it.
-Jamie
 

Phantom

Knight
shadow17_97038 said:
ah dude that is awsome :)

Please don't bump a 9 month old thread, just to make a comment like this, because its not like the guy is even around. He left about 5 minutes after he started this thread.
 
foreach ( Mobile m in mob )

is this way sending all of the mobiles ? but only players must see savegump

if you write this codes, you can see better performance

foreach ( Mobile m in mobs )
{
if ( m.Player)
{
... codes
}
}

or ( m is PlayerMobile )

its your choice
 

anybody

Sorceror
Yes it is and if you do it this way it only loops through those players online.

Code:
foreach (NetState ns in NetState.Instances)
{
    if (ns.Mobile == null)
        continue;

    ns.Mobile.SendGump(new SaveGump());
}
 
Top