739 lines
29 KiB
C#
739 lines
29 KiB
C#
using System;
|
|
using System.Text;
|
|
using Server.Commands;
|
|
using Server.Factions;
|
|
using Server.Gumps;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Network;
|
|
|
|
namespace Server.Misc
|
|
{
|
|
public class TestCenter
|
|
{
|
|
public static bool Enabled { get; set; }
|
|
|
|
static TestCenter()
|
|
{
|
|
Enabled = Config.Get("TestCenter.Enabled", false);
|
|
}
|
|
|
|
public static void Initialize()
|
|
{
|
|
// Register our speech handler
|
|
if (Enabled)
|
|
EventSink.Speech += new SpeechEventHandler(EventSink_Speech);
|
|
}
|
|
|
|
private static void EventSink_Speech(SpeechEventArgs args)
|
|
{
|
|
if (!args.Handled)
|
|
{
|
|
if (Insensitive.StartsWith(args.Speech, "set"))
|
|
{
|
|
Mobile from = args.Mobile;
|
|
|
|
string[] split = args.Speech.Split(' ');
|
|
|
|
if (split.Length == 3)
|
|
{
|
|
try
|
|
{
|
|
string name = split[1];
|
|
double value = Convert.ToDouble(split[2]);
|
|
|
|
if (Insensitive.Equals(name, "str"))
|
|
ChangeStrength(@from, (int)value);
|
|
else if (Insensitive.Equals(name, "dex"))
|
|
ChangeDexterity(@from, (int)value);
|
|
else if (Insensitive.Equals(name, "int"))
|
|
ChangeIntelligence(@from, (int)value);
|
|
else
|
|
ChangeSkill(@from, name, value);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
else if (Insensitive.Equals(args.Speech, "help"))
|
|
{
|
|
args.Mobile.SendGump(new TCHelpGump());
|
|
|
|
args.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void ChangeStrength(Mobile from, int value)
|
|
{
|
|
if (value < 10 || value > 125)
|
|
{
|
|
@from.SendLocalizedMessage(1005628); // Stats range between 10 and 125.
|
|
}
|
|
else
|
|
{
|
|
if ((value + @from.RawDex + @from.RawInt) > @from.StatCap)
|
|
{
|
|
@from.SendLocalizedMessage(1005629); // You can not exceed the stat cap. Try setting another stat lower first.
|
|
}
|
|
else
|
|
{
|
|
@from.RawStr = value;
|
|
@from.SendLocalizedMessage(1005630); // Your stats have been adjusted.
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void ChangeDexterity(Mobile from, int value)
|
|
{
|
|
if (value < 10 || value > 125)
|
|
{
|
|
@from.SendLocalizedMessage(1005628); // Stats range between 10 and 125.
|
|
}
|
|
else
|
|
{
|
|
if ((@from.RawStr + value + @from.RawInt) > @from.StatCap)
|
|
{
|
|
@from.SendLocalizedMessage(1005629); // You can not exceed the stat cap. Try setting another stat lower first.
|
|
}
|
|
else
|
|
{
|
|
@from.RawDex = value;
|
|
@from.SendLocalizedMessage(1005630); // Your stats have been adjusted.
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void ChangeIntelligence(Mobile from, int value)
|
|
{
|
|
if (value < 10 || value > 125)
|
|
{
|
|
@from.SendLocalizedMessage(1005628); // Stats range between 10 and 125.
|
|
}
|
|
else
|
|
{
|
|
if ((@from.RawStr + @from.RawDex + value) > @from.StatCap)
|
|
{
|
|
@from.SendLocalizedMessage(1005629); // You can not exceed the stat cap. Try setting another stat lower first.
|
|
}
|
|
else
|
|
{
|
|
@from.RawInt = value;
|
|
@from.SendLocalizedMessage(1005630); // Your stats have been adjusted.
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void ChangeSkill(Mobile from, string name, double value)
|
|
{
|
|
SkillName index;
|
|
|
|
if (!Enum.TryParse(name, true, out index) || (!Core.SE && (int)index > 51) || (!Core.AOS && (int)index > 48))
|
|
{
|
|
@from.SendLocalizedMessage(1005631); // You have specified an invalid skill to set.
|
|
return;
|
|
}
|
|
|
|
Skill skill = @from.Skills[index];
|
|
|
|
if (skill != null)
|
|
{
|
|
if (value < 0 || value > skill.Cap)
|
|
{
|
|
@from.SendMessage(String.Format("Your skill in {0} is capped at {1:F1}.", skill.Info.Name, skill.Cap));
|
|
}
|
|
else
|
|
{
|
|
int newFixedPoint = (int)(value * 10.0);
|
|
int oldFixedPoint = skill.BaseFixedPoint;
|
|
|
|
if (((skill.Owner.Total - oldFixedPoint) + newFixedPoint) > skill.Owner.Cap)
|
|
{
|
|
@from.SendMessage("You can not exceed the skill cap. Try setting another skill lower first.");
|
|
}
|
|
else
|
|
{
|
|
skill.BaseFixedPoint = newFixedPoint;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
@from.SendLocalizedMessage(1005631); // You have specified an invalid skill to set.
|
|
}
|
|
}
|
|
|
|
private static void PlaceItemIn(Container parent, int x, int y, Item item)
|
|
{
|
|
parent.AddItem(item);
|
|
item.Location = new Point3D(x, y, 0);
|
|
}
|
|
|
|
private static Item MakePotionKeg(PotionEffect type, int hue)
|
|
{
|
|
PotionKeg keg = new PotionKeg();
|
|
|
|
keg.Held = 100;
|
|
keg.Type = type;
|
|
keg.Hue = hue;
|
|
|
|
return MakeNewbie(keg);
|
|
}
|
|
|
|
private static Item MakeNewbie(Item item)
|
|
{
|
|
if (!Core.AOS)
|
|
item.LootType = LootType.Newbied;
|
|
|
|
return item;
|
|
}
|
|
|
|
public static void FillBankAOS(Mobile m)
|
|
{
|
|
BankBox bank = m.BankBox;
|
|
|
|
// The new AOS bankboxes don't have powerscrolls, they are automatically 'applied':
|
|
|
|
for (int i = 0; i < PowerScroll.Skills.Count; ++i)
|
|
m.Skills[PowerScroll.Skills[i]].Cap = 120.0;
|
|
|
|
m.StatCap = 250;
|
|
|
|
Container cont;
|
|
|
|
// Begin box of money
|
|
cont = new WoodenBox();
|
|
cont.ItemID = 0xE7D;
|
|
cont.Hue = 0x489;
|
|
|
|
PlaceItemIn(cont, 16, 51, new BankCheck(500000));
|
|
PlaceItemIn(cont, 28, 51, new BankCheck(250000));
|
|
PlaceItemIn(cont, 40, 51, new BankCheck(100000));
|
|
PlaceItemIn(cont, 52, 51, new BankCheck(100000));
|
|
PlaceItemIn(cont, 64, 51, new BankCheck(50000));
|
|
|
|
PlaceItemIn(cont, 16, 115, new Silver(9000));
|
|
PlaceItemIn(cont, 34, 115, new Gold(60000));
|
|
|
|
PlaceItemIn(bank, 18, 169, cont);
|
|
// End box of money
|
|
|
|
// Begin bag of potion kegs
|
|
cont = new Backpack();
|
|
cont.Name = "Various Potion Kegs";
|
|
|
|
PlaceItemIn(cont, 45, 149, MakePotionKeg(PotionEffect.CureGreater, 0x2D));
|
|
PlaceItemIn(cont, 69, 149, MakePotionKeg(PotionEffect.HealGreater, 0x499));
|
|
PlaceItemIn(cont, 93, 149, MakePotionKeg(PotionEffect.PoisonDeadly, 0x46));
|
|
PlaceItemIn(cont, 117, 149, MakePotionKeg(PotionEffect.RefreshTotal, 0x21));
|
|
PlaceItemIn(cont, 141, 149, MakePotionKeg(PotionEffect.ExplosionGreater, 0x74));
|
|
|
|
PlaceItemIn(cont, 93, 82, new Bottle(1000));
|
|
|
|
PlaceItemIn(bank, 53, 169, cont);
|
|
// End bag of potion kegs
|
|
|
|
// Begin bag of tools
|
|
cont = new Bag();
|
|
cont.Name = "Tool Bag";
|
|
|
|
PlaceItemIn(cont, 30, 35, new TinkerTools(1000));
|
|
PlaceItemIn(cont, 60, 35, new HousePlacementTool());
|
|
PlaceItemIn(cont, 90, 35, new DovetailSaw(1000));
|
|
PlaceItemIn(cont, 30, 68, new Scissors());
|
|
PlaceItemIn(cont, 45, 68, new MortarPestle(1000));
|
|
PlaceItemIn(cont, 75, 68, new ScribesPen(1000));
|
|
PlaceItemIn(cont, 90, 68, new SmithHammer(1000));
|
|
PlaceItemIn(cont, 30, 118, new TwoHandedAxe());
|
|
PlaceItemIn(cont, 60, 118, new FletcherTools(1000));
|
|
PlaceItemIn(cont, 90, 118, new SewingKit(1000));
|
|
|
|
PlaceItemIn(cont, 36, 51, new RunicHammer(CraftResource.DullCopper, 1000));
|
|
PlaceItemIn(cont, 42, 51, new RunicHammer(CraftResource.ShadowIron, 1000));
|
|
PlaceItemIn(cont, 48, 51, new RunicHammer(CraftResource.Copper, 1000));
|
|
PlaceItemIn(cont, 54, 51, new RunicHammer(CraftResource.Bronze, 1000));
|
|
PlaceItemIn(cont, 61, 51, new RunicHammer(CraftResource.Gold, 1000));
|
|
PlaceItemIn(cont, 67, 51, new RunicHammer(CraftResource.Agapite, 1000));
|
|
PlaceItemIn(cont, 73, 51, new RunicHammer(CraftResource.Verite, 1000));
|
|
PlaceItemIn(cont, 79, 51, new RunicHammer(CraftResource.Valorite, 1000));
|
|
|
|
PlaceItemIn(cont, 36, 55, new RunicSewingKit(CraftResource.SpinedLeather, 1000));
|
|
PlaceItemIn(cont, 42, 55, new RunicSewingKit(CraftResource.HornedLeather, 1000));
|
|
PlaceItemIn(cont, 48, 55, new RunicSewingKit(CraftResource.BarbedLeather, 1000));
|
|
|
|
PlaceItemIn(bank, 118, 169, cont);
|
|
// End bag of tools
|
|
|
|
// Begin bag of archery ammo
|
|
cont = new Bag();
|
|
cont.Name = "Bag Of Archery Ammo";
|
|
|
|
PlaceItemIn(cont, 48, 76, new Arrow(5000));
|
|
PlaceItemIn(cont, 72, 76, new Bolt(5000));
|
|
|
|
PlaceItemIn(bank, 118, 124, cont);
|
|
// End bag of archery ammo
|
|
|
|
// Begin bag of treasure maps
|
|
cont = new Bag();
|
|
cont.Name = "Bag Of Treasure Maps";
|
|
|
|
PlaceItemIn(cont, 30, 35, new TreasureMap(1, Map.Trammel));
|
|
PlaceItemIn(cont, 45, 35, new TreasureMap(2, Map.Trammel));
|
|
PlaceItemIn(cont, 60, 35, new TreasureMap(3, Map.Trammel));
|
|
PlaceItemIn(cont, 75, 35, new TreasureMap(4, Map.Trammel));
|
|
PlaceItemIn(cont, 90, 35, new TreasureMap(5, Map.Trammel));
|
|
PlaceItemIn(cont, 90, 35, new TreasureMap(6, Map.Trammel));
|
|
|
|
PlaceItemIn(cont, 30, 50, new TreasureMap(1, Map.Trammel));
|
|
PlaceItemIn(cont, 45, 50, new TreasureMap(2, Map.Trammel));
|
|
PlaceItemIn(cont, 60, 50, new TreasureMap(3, Map.Trammel));
|
|
PlaceItemIn(cont, 75, 50, new TreasureMap(4, Map.Trammel));
|
|
PlaceItemIn(cont, 90, 50, new TreasureMap(5, Map.Trammel));
|
|
PlaceItemIn(cont, 90, 50, new TreasureMap(6, Map.Trammel));
|
|
|
|
PlaceItemIn(cont, 55, 100, new Lockpick(30));
|
|
PlaceItemIn(cont, 60, 100, new Pickaxe());
|
|
|
|
PlaceItemIn(bank, 98, 124, cont);
|
|
// End bag of treasure maps
|
|
|
|
// Begin bag of raw materials
|
|
cont = new Bag();
|
|
cont.Hue = 0x835;
|
|
cont.Name = "Raw Materials Bag";
|
|
|
|
PlaceItemIn(cont, 92, 60, new BarbedLeather(5000));
|
|
PlaceItemIn(cont, 92, 68, new HornedLeather(5000));
|
|
PlaceItemIn(cont, 92, 76, new SpinedLeather(5000));
|
|
PlaceItemIn(cont, 92, 84, new Leather(5000));
|
|
|
|
PlaceItemIn(cont, 30, 118, new Cloth(5000));
|
|
PlaceItemIn(cont, 30, 84, new Board(5000));
|
|
PlaceItemIn(cont, 57, 80, new BlankScroll(500));
|
|
|
|
PlaceItemIn(cont, 30, 35, new DullCopperIngot(5000));
|
|
PlaceItemIn(cont, 37, 35, new ShadowIronIngot(5000));
|
|
PlaceItemIn(cont, 44, 35, new CopperIngot(5000));
|
|
PlaceItemIn(cont, 51, 35, new BronzeIngot(5000));
|
|
PlaceItemIn(cont, 58, 35, new GoldIngot(5000));
|
|
PlaceItemIn(cont, 65, 35, new AgapiteIngot(5000));
|
|
PlaceItemIn(cont, 72, 35, new VeriteIngot(5000));
|
|
PlaceItemIn(cont, 79, 35, new ValoriteIngot(5000));
|
|
PlaceItemIn(cont, 86, 35, new IronIngot(5000));
|
|
|
|
PlaceItemIn(cont, 30, 59, new RedScales(5000));
|
|
PlaceItemIn(cont, 36, 59, new YellowScales(5000));
|
|
PlaceItemIn(cont, 42, 59, new BlackScales(5000));
|
|
PlaceItemIn(cont, 48, 59, new GreenScales(5000));
|
|
PlaceItemIn(cont, 54, 59, new WhiteScales(5000));
|
|
PlaceItemIn(cont, 60, 59, new BlueScales(5000));
|
|
|
|
PlaceItemIn(bank, 98, 169, cont);
|
|
// End bag of raw materials
|
|
|
|
// Begin bag of spell casting stuff
|
|
cont = new Backpack();
|
|
cont.Hue = 0x480;
|
|
cont.Name = "Spell Casting Stuff";
|
|
|
|
PlaceItemIn(cont, 45, 105, new Spellbook(UInt64.MaxValue));
|
|
PlaceItemIn(cont, 65, 105, new NecromancerSpellbook((UInt64)0xFFFF));
|
|
PlaceItemIn(cont, 85, 105, new BookOfChivalry((UInt64)0x3FF));
|
|
PlaceItemIn(cont, 105, 105, new BookOfBushido()); //Default ctor = full
|
|
PlaceItemIn(cont, 125, 105, new BookOfNinjitsu()); //Default ctor = full
|
|
|
|
Runebook runebook = new Runebook(10);
|
|
runebook.CurCharges = runebook.MaxCharges;
|
|
PlaceItemIn(cont, 145, 105, runebook);
|
|
|
|
Item toHue = new BagOfAllReagents(150);
|
|
toHue.Hue = 0x2D;
|
|
PlaceItemIn(cont, 45, 150, toHue);
|
|
|
|
toHue = new BagOfNecroReagents(150);
|
|
toHue.Hue = 0x488;
|
|
PlaceItemIn(cont, 65, 150, toHue);
|
|
|
|
PlaceItemIn(cont, 140, 150, new BagOfAllReagents(500));
|
|
|
|
for (int i = 0; i < 9; ++i)
|
|
PlaceItemIn(cont, 45 + (i * 10), 75, new RecallRune());
|
|
|
|
PlaceItemIn(cont, 141, 74, new FireHorn());
|
|
|
|
PlaceItemIn(bank, 78, 169, cont);
|
|
// End bag of spell casting stuff
|
|
|
|
// Begin bag of ethereals
|
|
cont = new Backpack();
|
|
cont.Hue = 0x490;
|
|
cont.Name = "Bag Of Ethy's!";
|
|
|
|
PlaceItemIn(cont, 45, 66, new EtherealHorse());
|
|
PlaceItemIn(cont, 69, 82, new EtherealOstard());
|
|
PlaceItemIn(cont, 93, 99, new EtherealLlama());
|
|
PlaceItemIn(cont, 117, 115, new EtherealKirin());
|
|
PlaceItemIn(cont, 45, 132, new EtherealUnicorn());
|
|
PlaceItemIn(cont, 69, 66, new EtherealRidgeback());
|
|
PlaceItemIn(cont, 93, 82, new EtherealSwampDragon());
|
|
PlaceItemIn(cont, 117, 99, new EtherealBeetle());
|
|
|
|
PlaceItemIn(bank, 38, 124, cont);
|
|
// End bag of ethereals
|
|
|
|
// Begin first bag of artifacts
|
|
cont = new Backpack();
|
|
cont.Hue = 0x48F;
|
|
cont.Name = "Bag of Artifacts";
|
|
|
|
PlaceItemIn(cont, 45, 66, new TitansHammer());
|
|
PlaceItemIn(cont, 69, 82, new InquisitorsResolution());
|
|
PlaceItemIn(cont, 93, 99, new BladeOfTheRighteous());
|
|
PlaceItemIn(cont, 117, 115, new ZyronicClaw());
|
|
|
|
PlaceItemIn(bank, 58, 124, cont);
|
|
// End first bag of artifacts
|
|
|
|
// Begin second bag of artifacts
|
|
cont = new Backpack();
|
|
cont.Hue = 0x48F;
|
|
cont.Name = "Bag of Artifacts";
|
|
|
|
PlaceItemIn(cont, 45, 66, new GauntletsOfNobility());
|
|
PlaceItemIn(cont, 69, 82, new MidnightBracers());
|
|
PlaceItemIn(cont, 93, 99, new VoiceOfTheFallenKing());
|
|
PlaceItemIn(cont, 117, 115, new OrnateCrownOfTheHarrower());
|
|
PlaceItemIn(cont, 45, 132, new HelmOfInsight());
|
|
PlaceItemIn(cont, 69, 66, new HolyKnightsBreastplate());
|
|
PlaceItemIn(cont, 93, 82, new ArmorOfFortune());
|
|
PlaceItemIn(cont, 117, 99, new TunicOfFire());
|
|
PlaceItemIn(cont, 45, 115, new LeggingsOfBane());
|
|
PlaceItemIn(cont, 69, 132, new ArcaneShield());
|
|
PlaceItemIn(cont, 93, 66, new Aegis());
|
|
PlaceItemIn(cont, 117, 82, new RingOfTheVile());
|
|
PlaceItemIn(cont, 45, 99, new BraceletOfHealth());
|
|
PlaceItemIn(cont, 69, 115, new RingOfTheElements());
|
|
PlaceItemIn(cont, 93, 132, new OrnamentOfTheMagician());
|
|
PlaceItemIn(cont, 117, 66, new DivineCountenance());
|
|
PlaceItemIn(cont, 45, 82, new JackalsCollar());
|
|
PlaceItemIn(cont, 69, 99, new HuntersHeaddress());
|
|
PlaceItemIn(cont, 93, 115, new HatOfTheMagi());
|
|
PlaceItemIn(cont, 117, 132, new ShadowDancerLeggings());
|
|
PlaceItemIn(cont, 45, 66, new SpiritOfTheTotem());
|
|
PlaceItemIn(cont, 69, 82, new BladeOfInsanity());
|
|
PlaceItemIn(cont, 93, 99, new AxeOfTheHeavens());
|
|
PlaceItemIn(cont, 117, 115, new TheBeserkersMaul());
|
|
PlaceItemIn(cont, 45, 132, new Frostbringer());
|
|
PlaceItemIn(cont, 69, 66, new BreathOfTheDead());
|
|
PlaceItemIn(cont, 93, 82, new TheDragonSlayer());
|
|
PlaceItemIn(cont, 117, 99, new BoneCrusher());
|
|
PlaceItemIn(cont, 45, 115, new StaffOfTheMagi());
|
|
PlaceItemIn(cont, 69, 132, new SerpentsFang());
|
|
PlaceItemIn(cont, 93, 66, new LegacyOfTheDreadLord());
|
|
PlaceItemIn(cont, 117, 82, new TheTaskmaster());
|
|
PlaceItemIn(cont, 45, 99, new TheDryadBow());
|
|
|
|
PlaceItemIn(bank, 78, 124, cont);
|
|
// End second bag of artifacts
|
|
|
|
// Begin bag of minor artifacts
|
|
cont = new Backpack();
|
|
cont.Hue = 0x48F;
|
|
cont.Name = "Bag of Minor Artifacts";
|
|
|
|
PlaceItemIn(cont, 45, 66, new LunaLance());
|
|
PlaceItemIn(cont, 69, 82, new VioletCourage());
|
|
PlaceItemIn(cont, 93, 99, new CavortingClub());
|
|
PlaceItemIn(cont, 117, 115, new CaptainQuacklebushsCutlass());
|
|
PlaceItemIn(cont, 45, 132, new NightsKiss());
|
|
PlaceItemIn(cont, 69, 66, new ShipModelOfTheHMSCape());
|
|
PlaceItemIn(cont, 93, 82, new AdmiralsHeartyRum());
|
|
PlaceItemIn(cont, 117, 99, new CandelabraOfSouls());
|
|
PlaceItemIn(cont, 45, 115, new IolosLute());
|
|
PlaceItemIn(cont, 69, 132, new GwennosHarp());
|
|
PlaceItemIn(cont, 93, 66, new ArcticDeathDealer());
|
|
PlaceItemIn(cont, 117, 82, new EnchantedTitanLegBone());
|
|
PlaceItemIn(cont, 45, 99, new NoxRangersHeavyCrossbow());
|
|
PlaceItemIn(cont, 69, 115, new BlazeOfDeath());
|
|
PlaceItemIn(cont, 93, 132, new DreadPirateHat());
|
|
PlaceItemIn(cont, 117, 66, new BurglarsBandana());
|
|
PlaceItemIn(cont, 45, 82, new GoldBricks());
|
|
PlaceItemIn(cont, 69, 99, new AlchemistsBauble());
|
|
PlaceItemIn(cont, 93, 115, new PhillipsWoodenSteed());
|
|
PlaceItemIn(cont, 117, 132, new PolarBearMask());
|
|
PlaceItemIn(cont, 45, 66, new BowOfTheJukaKing());
|
|
PlaceItemIn(cont, 69, 82, new GlovesOfThePugilist());
|
|
PlaceItemIn(cont, 93, 99, new OrcishVisage());
|
|
PlaceItemIn(cont, 117, 115, new StaffOfPower());
|
|
PlaceItemIn(cont, 45, 132, new ShieldOfInvulnerability());
|
|
PlaceItemIn(cont, 69, 66, new HeartOfTheLion());
|
|
PlaceItemIn(cont, 93, 82, new ColdBlood());
|
|
PlaceItemIn(cont, 117, 99, new GhostShipAnchor());
|
|
PlaceItemIn(cont, 45, 115, new SeahorseStatuette());
|
|
PlaceItemIn(cont, 69, 132, new WrathOfTheDryad());
|
|
PlaceItemIn(cont, 93, 66, new PixieSwatter());
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
PlaceItemIn(cont, 117, 128, new MessageInABottle(Utility.RandomBool() ? Map.Trammel : Map.Felucca, 4));
|
|
|
|
PlaceItemIn(bank, 18, 124, cont);
|
|
|
|
if (Core.SE)
|
|
{
|
|
cont = new Bag();
|
|
cont.Hue = 0x501;
|
|
cont.Name = "Tokuno Minor Artifacts";
|
|
|
|
PlaceItemIn(cont, 42, 70, new Exiler());
|
|
PlaceItemIn(cont, 38, 53, new HanzosBow());
|
|
PlaceItemIn(cont, 45, 40, new TheDestroyer());
|
|
PlaceItemIn(cont, 92, 80, new DragonNunchaku());
|
|
PlaceItemIn(cont, 42, 56, new PeasantsBokuto());
|
|
PlaceItemIn(cont, 44, 71, new TomeOfEnlightenment());
|
|
PlaceItemIn(cont, 35, 35, new ChestOfHeirlooms());
|
|
PlaceItemIn(cont, 29, 0, new HonorableSwords());
|
|
PlaceItemIn(cont, 49, 85, new AncientUrn());
|
|
PlaceItemIn(cont, 51, 58, new FluteOfRenewal());
|
|
PlaceItemIn(cont, 70, 51, new PigmentsOfTokuno());
|
|
PlaceItemIn(cont, 40, 79, new AncientSamuraiDo());
|
|
PlaceItemIn(cont, 51, 61, new LegsOfStability());
|
|
PlaceItemIn(cont, 88, 78, new GlovesOfTheSun());
|
|
PlaceItemIn(cont, 55, 62, new AncientFarmersKasa());
|
|
PlaceItemIn(cont, 55, 83, new ArmsOfTacticalExcellence());
|
|
PlaceItemIn(cont, 50, 85, new DaimyosHelm());
|
|
PlaceItemIn(cont, 52, 78, new BlackLotusHood());
|
|
PlaceItemIn(cont, 52, 79, new DemonForks());
|
|
PlaceItemIn(cont, 33, 49, new PilferedDancerFans());
|
|
|
|
PlaceItemIn(bank, 58, 124, cont);
|
|
}
|
|
|
|
if (Core.SE) //This bag came only after SE.
|
|
{
|
|
cont = new Bag();
|
|
cont.Name = "Bag of Bows";
|
|
|
|
PlaceItemIn(cont, 31, 84, new Bow());
|
|
PlaceItemIn(cont, 78, 74, new CompositeBow());
|
|
PlaceItemIn(cont, 53, 71, new Crossbow());
|
|
PlaceItemIn(cont, 56, 39, new HeavyCrossbow());
|
|
PlaceItemIn(cont, 82, 72, new RepeatingCrossbow());
|
|
PlaceItemIn(cont, 49, 45, new Yumi());
|
|
|
|
for (int i = 0; i < cont.Items.Count; i++)
|
|
{
|
|
BaseRanged bow = cont.Items[i] as BaseRanged;
|
|
|
|
if (bow != null)
|
|
{
|
|
bow.Attributes.WeaponSpeed = 35;
|
|
bow.Attributes.WeaponDamage = 35;
|
|
}
|
|
}
|
|
|
|
PlaceItemIn(bank, 108, 135, cont);
|
|
}
|
|
}
|
|
|
|
public static void FillBankbox(Mobile m)
|
|
{
|
|
if (Core.AOS)
|
|
{
|
|
FillBankAOS(m);
|
|
return;
|
|
}
|
|
|
|
BankBox bank = m.BankBox;
|
|
|
|
bank.DropItem(new BankCheck(1000000));
|
|
|
|
// Full spellbook
|
|
Spellbook book = new Spellbook();
|
|
|
|
book.Content = UInt64.MaxValue;
|
|
|
|
bank.DropItem(book);
|
|
|
|
Bag bag = new Bag();
|
|
|
|
for (int i = 0; i < 5; ++i)
|
|
bag.DropItem(new Moonstone(MoonstoneType.Felucca));
|
|
|
|
// Felucca moonstones
|
|
bank.DropItem(bag);
|
|
|
|
bag = new Bag();
|
|
|
|
for (int i = 0; i < 5; ++i)
|
|
bag.DropItem(new Moonstone(MoonstoneType.Trammel));
|
|
|
|
// Trammel moonstones
|
|
bank.DropItem(bag);
|
|
|
|
// Treasure maps
|
|
bank.DropItem(new TreasureMap(1, Map.Trammel));
|
|
bank.DropItem(new TreasureMap(2, Map.Trammel));
|
|
bank.DropItem(new TreasureMap(3, Map.Trammel));
|
|
bank.DropItem(new TreasureMap(4, Map.Trammel));
|
|
bank.DropItem(new TreasureMap(5, Map.Trammel));
|
|
|
|
// Bag containing 50 of each reagent
|
|
bank.DropItem(new BagOfAllReagents(50));
|
|
|
|
// Craft tools
|
|
bank.DropItem(MakeNewbie(new Scissors()));
|
|
bank.DropItem(MakeNewbie(new SewingKit(1000)));
|
|
bank.DropItem(MakeNewbie(new SmithHammer(1000)));
|
|
bank.DropItem(MakeNewbie(new FletcherTools(1000)));
|
|
bank.DropItem(MakeNewbie(new DovetailSaw(1000)));
|
|
bank.DropItem(MakeNewbie(new MortarPestle(1000)));
|
|
bank.DropItem(MakeNewbie(new ScribesPen(1000)));
|
|
bank.DropItem(MakeNewbie(new TinkerTools(1000)));
|
|
|
|
// A few dye tubs
|
|
bank.DropItem(new Dyes());
|
|
bank.DropItem(new DyeTub());
|
|
bank.DropItem(new DyeTub());
|
|
bank.DropItem(new BlackDyeTub());
|
|
|
|
DyeTub darkRedTub = new DyeTub();
|
|
|
|
darkRedTub.DyedHue = 0x485;
|
|
darkRedTub.Redyable = false;
|
|
|
|
bank.DropItem(darkRedTub);
|
|
|
|
// Some food
|
|
bank.DropItem(MakeNewbie(new Apple(1000)));
|
|
|
|
// Resources
|
|
bank.DropItem(MakeNewbie(new Feather(1000)));
|
|
bank.DropItem(MakeNewbie(new BoltOfCloth(1000)));
|
|
bank.DropItem(MakeNewbie(new BlankScroll(1000)));
|
|
bank.DropItem(MakeNewbie(new Hides(1000)));
|
|
bank.DropItem(MakeNewbie(new Bandage(1000)));
|
|
bank.DropItem(MakeNewbie(new Bottle(1000)));
|
|
bank.DropItem(MakeNewbie(new Log(1000)));
|
|
|
|
bank.DropItem(MakeNewbie(new IronIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new DullCopperIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new ShadowIronIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new CopperIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new BronzeIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new GoldIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new AgapiteIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new VeriteIngot(5000)));
|
|
bank.DropItem(MakeNewbie(new ValoriteIngot(5000)));
|
|
|
|
// Reagents
|
|
bank.DropItem(MakeNewbie(new BlackPearl(1000)));
|
|
bank.DropItem(MakeNewbie(new Bloodmoss(1000)));
|
|
bank.DropItem(MakeNewbie(new Garlic(1000)));
|
|
bank.DropItem(MakeNewbie(new Ginseng(1000)));
|
|
bank.DropItem(MakeNewbie(new MandrakeRoot(1000)));
|
|
bank.DropItem(MakeNewbie(new Nightshade(1000)));
|
|
bank.DropItem(MakeNewbie(new SulfurousAsh(1000)));
|
|
bank.DropItem(MakeNewbie(new SpidersSilk(1000)));
|
|
|
|
// Some extra starting gold
|
|
bank.DropItem(MakeNewbie(new Gold(9000)));
|
|
|
|
// 5 blank recall runes
|
|
for (int i = 0; i < 5; ++i)
|
|
bank.DropItem(MakeNewbie(new RecallRune()));
|
|
|
|
AddPowerScrolls(bank);
|
|
}
|
|
|
|
public static void AddPowerScrolls(BankBox bank)
|
|
{
|
|
Bag bag = new Bag();
|
|
|
|
for (int i = 0; i < PowerScroll.Skills.Count; ++i)
|
|
bag.DropItem(new PowerScroll(PowerScroll.Skills[i], 120.0));
|
|
|
|
bag.DropItem(new StatCapScroll(250));
|
|
|
|
bank.DropItem(bag);
|
|
}
|
|
|
|
public class TCHelpGump : Gump
|
|
{
|
|
public TCHelpGump()
|
|
: base(40, 40)
|
|
{
|
|
this.AddPage(0);
|
|
this.AddBackground(0, 0, 160, 120, 5054);
|
|
|
|
this.AddButton(10, 10, 0xFB7, 0xFB9, 1, GumpButtonType.Reply, 0);
|
|
this.AddLabel(45, 10, 0x34, "ServUO");
|
|
|
|
this.AddButton(10, 35, 0xFB7, 0xFB9, 2, GumpButtonType.Reply, 0);
|
|
this.AddLabel(45, 35, 0x34, "List of skills");
|
|
|
|
this.AddButton(10, 60, 0xFB7, 0xFB9, 3, GumpButtonType.Reply, 0);
|
|
this.AddLabel(45, 60, 0x34, "Command list");
|
|
|
|
this.AddButton(10, 85, 0xFB1, 0xFB3, 0, GumpButtonType.Reply, 0);
|
|
this.AddLabel(45, 85, 0x34, "Close");
|
|
}
|
|
|
|
public override void OnResponse(NetState sender, RelayInfo info)
|
|
{
|
|
switch ( info.ButtonID )
|
|
{
|
|
case 1:
|
|
{
|
|
sender.LaunchBrowser("http://ServUO.craftuo.com/");
|
|
break;
|
|
}
|
|
case 2: // List of skills
|
|
{
|
|
string[] strings = Enum.GetNames(typeof(SkillName));
|
|
|
|
Array.Sort(strings);
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
if (strings.Length > 0)
|
|
sb.Append(strings[0]);
|
|
|
|
for (int i = 1; i < strings.Length; ++i)
|
|
{
|
|
string v = strings[i];
|
|
|
|
if ((sb.Length + 1 + v.Length) >= 256)
|
|
{
|
|
sender.Send(new AsciiMessage(Server.Serial.MinusOne, -1, MessageType.Label, 0x35, 3, "System", sb.ToString()));
|
|
sb = new StringBuilder();
|
|
sb.Append(v);
|
|
}
|
|
else
|
|
{
|
|
sb.Append(' ');
|
|
sb.Append(v);
|
|
}
|
|
}
|
|
|
|
if (sb.Length > 0)
|
|
{
|
|
sender.Send(new AsciiMessage(Server.Serial.MinusOne, -1, MessageType.Label, 0x35, 3, "System", sb.ToString()));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 3: // Command list
|
|
{
|
|
sender.Mobile.SendAsciiMessage(0x482, "The command prefix is \"{0}\"", CommandSystem.Prefix);
|
|
CommandHandlers.Help_OnCommand(new CommandEventArgs(sender.Mobile, "help", "", new string[0]));
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|