using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using Server; using Server.Accounting; using Server.Gumps; using Server.Items; using Server.Mobiles; using Server.Network; using Server.Targeting; using Server.Commands; namespace Server.Commands { /// /// David M. O'Hara /// 08-11-04 /// Version 2.1 /// Gives item (targeted or given type) into bank box. Distribution can be 1 per account, 1 per character, or /// based on AccessLevel (good for staff items). /// // Update by X-SirSly-X // 12/15/2005 // www.LandofObsidian.com // The update fixes a issue when a item is given only once per account. The problem happens when a player deletes their first char which is char slot 0. So if char slot 0 is empty it just skips over that player, and they end up not getting a item in their bank. public class AddToBank { public static void Initialize() { // alter AccessLevel to be AccessLevel.Admin if you only want admins to use. CommandSystem.Register( "AddToBank", AccessLevel.Administrator, new CommandEventHandler( AddToBank_OnCommand ) ); } private static void AddToBank_OnCommand( CommandEventArgs e ) { e.Mobile.SendGump( new AddToBankGump() ); } private static void PlaceItemIn( Container parent, int x, int y, Item item ) { parent.AddItem( item ); item.Location = new Point3D( x, y, 0 ); } #region " Targeting/Dupe System " public class DupeTarget : Target { private bool m_InBag; private int m_Amount; private int m_GiveRule; private int m_Access; public DupeTarget( bool inbag, int amount, int give, int access ) : base( 15, false, TargetFlags.None ) { m_InBag = inbag; m_Amount = amount; m_GiveRule = give; m_Access = access; } protected override void OnTarget( Mobile from, object targ ) { if ( !(targ is Item) ) { from.SendMessage( "You can only dupe items." ); return; } from.SendMessage( "Placing {0} into bank boxes...", ((Item)targ).Name == null ? "an item" : ((Item)targ).Name.ToString() ); CommandLogging.WriteLine( from, "{0} {1} adding {2} to bank boxes )", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( targ ) ); GiveItem( from, (Item)targ, m_Amount, m_GiveRule, m_Access ); } } public static void GiveItem( Mobile from, Item item, int amount, int give, int access ) { bool done = true; if ( give == (int)AddToBankGump.Switches.GiveToAccount ) { done = AddToBank.GiveItemToAccounts( item, amount ); } else if ( give == (int)AddToBankGump.Switches.GiveToCharacter ) { done = AddToBank.GiveItemToCharacters( item, amount ); } else if ( give == (int)AddToBankGump.Switches.GiveToAccessLevel ) { done = AddToBank.GiveItemToAccessLevel( item, amount, access ); } if ( !done ) { from.SendMessage( "Unable to give out to 1 or more players." ); } else { from.SendMessage( "Completed." ); } } private static bool GiveItemToAccounts( Item item, int amount ) { bool success = true; foreach ( Account acct in Accounts.GetAccounts() ) { if ( acct[0] != null ) { if ( !CopyItem( item, amount, acct[0].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[0].Name ); success = false; } } else if ( acct[0] == null ) { if ( acct[1] != null ) { if ( !CopyItem( item, amount, acct[1].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[1].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[2] != null ) { if ( !CopyItem( item, amount, acct[2].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[2].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[3] != null ) { if ( !CopyItem( item, amount, acct[3].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[3].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[4] != null ) { if ( !CopyItem( item, amount, acct[4].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[4].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[5] != null ) { if ( !CopyItem( item, amount, acct[5].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[5].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[6] != null ) { if ( !CopyItem( item, amount, acct[6].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[6].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[7] != null ) { if ( !CopyItem( item, amount, acct[7].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[7].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[8] != null ) { if ( !CopyItem( item, amount, acct[8].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[8].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[9] != null ) { if ( !CopyItem( item, amount, acct[9].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[9].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[10] != null ) { if ( !CopyItem( item, amount, acct[10].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[10].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[11] != null ) { if ( !CopyItem( item, amount, acct[11].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[11].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[12] != null ) { if ( !CopyItem( item, amount, acct[12].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[12].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[13] != null ) { if ( !CopyItem( item, amount, acct[13].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[13].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[14] != null ) { if ( !CopyItem( item, amount, acct[14].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[14].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[15] != null ) { if ( !CopyItem( item, amount, acct[15].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[15].Name ); success = false; } } } else if ( acct[0] == null ) { if ( acct[16] != null ) { if ( !CopyItem( item, amount, acct[16].BankBox ) ) { Console.WriteLine( "Could not give item to {0}", acct[16].Name ); success = false; } } } } return success; } private static bool GiveItemToCharacters( Item item, int amount ) { bool success = true; List mobs = new List( World.Mobiles.Values ); foreach ( Mobile m in mobs ) { if ( m is PlayerMobile ) { if ( !CopyItem( item, amount, m.BankBox ) ) { Console.WriteLine( "Could not give item to {0}", m.Name ); success = false; } } } return success; } private static bool GiveItemToAccessLevel( Item item, int amount, int access ) { bool success = true; List mobs = new List( World.Mobiles.Values ); foreach ( Mobile m in mobs ) { if ( m is PlayerMobile ) { bool give = false; if ( ( access & (int)AddToBankGump.Switches.Administrator ) != 0 && m.AccessLevel == AccessLevel.Administrator ) { give = true; } else if ( ( access & (int)AddToBankGump.Switches.GameMaster ) != 0 && m.AccessLevel == AccessLevel.GameMaster ) { give = true; } else if ( ( access & (int)AddToBankGump.Switches.Seer ) != 0 && m.AccessLevel == AccessLevel.Seer ) { give = true; } else if ( ( access & (int)AddToBankGump.Switches.Counselor ) != 0 && m.AccessLevel == AccessLevel.Counselor ) { give = true; } if ( give ) { if ( !CopyItem( item, amount, m.BankBox ) ) { Console.WriteLine( "Could not give item to {0}", m.Name ); success = false; } } } } return success; } private static bool CopyItem( Item item, int count, Container container) { bool m_Success = false; Type t = item.GetType(); ConstructorInfo[] info = t.GetConstructors(); foreach ( ConstructorInfo c in info ) { ParameterInfo[] paramInfo = c.GetParameters(); if ( paramInfo.Length == 0 ) { object[] objParams = new object[0]; try { for (int i=0;i 0 ) { TypeName = info.TextEntries[0].Text; } if ( TypeName == string.Empty ) { from.SendMessage( "You must specify a type" ); from.SendGump( new AddToBankGump( GiveRule, Access, TypeName, m_Amount ) ); } else { Type type = ScriptCompiler.FindTypeByName( TypeName, true ); if ( type == null ) { from.SendMessage( "{0} is not a valid type", type ); from.SendGump( new AddToBankGump( GiveRule, Access, string.Empty, m_Amount ) ); return; } else { object obj = Activator.CreateInstance( type ); if ( obj is Item ) AddToBank.GiveItem( from, (Item)obj, m_Amount, GiveRule, Access ); else { from.SendMessage( "You may only duplicate items." ); } } } break; } case (int)Buttons.IncAmount: { from.SendGump( new AddToBankGump( GiveRule, Access, TypeName, ++m_Amount ) ); break; } case (int)Buttons.DecAmount: { if ( m_Amount > 1 ) m_Amount -= 1; else from.SendMessage( "You cannot give less than 1 item." ); from.SendGump( new AddToBankGump( GiveRule, Access, TypeName, m_Amount ) ); break; } } } public enum Buttons { Cancel, GiveByTarget, GiveByType, IncAmount, DecAmount } public enum Switches { Administrator = 1, GameMaster = 2, Seer = 4, Counselor = 8, GiveToAccount = 100, GiveToCharacter = 200, GiveToAccessLevel = 300 } } // end class AddToBankGump #endregion } // end namespace